#ifndef __BLOP_MPAD_H__
#define __BLOP_MPAD_H__
#include "pad.h"
#include "mcontainer.h"
namespace blop
{
class mpad : public container, public mcontainer
{
private:
length gap_;
static length &default_gap_();
length *widths_,*heights_;
double *rwidths_,*rheights_;
length x_avail_, y_avail_;
static int default_direction_;
pad **pads_;
void set_widths();
void set_heights();
void cd_to_sub_(int i) { pads_[i]->cd(); }
public:
mpad(int i, int j);
mpad(int n);
~mpad();
static mpad &mknew(int i, int j);
static mpad &mknew(int n);
mpad &gap(const length &l);
static void default_gap(const length &l);
mpad &width(int i, const length &l);
mpad &rwidth(int i, double d);
mpad &height(int i, const length &l);
mpad &rheight(int i, double d);
mpad &draw_border(bool b);
mpad &bordercolor(const color &);
mpad &borderwidth(const length &l);
mpad &border_3D(bool);
mpad &fill(bool i);
mpad &fillcolor(const color &);
mpad &cd(int i, int j) { mcontainer::cd(i,j); return *this; }
mpad &cd(int i) { mcontainer::cd(i); return *this; }
mpad &cd_first() { mcontainer::cd_first(); return *this; }
mpad &direction(int d) { mcontainer::direction(d); return *this; }
static void default_direction(int);
mpad &cleft(const length &l) { container::cleft(l); return *this; }
mpad &cright(const length &l) { container::cright(l); return *this; }
mpad &cbottom(const length &l) { container::cbottom(l); return *this; }
mpad &ctop(const length &l) { container::ctop(l); return *this; }
const length &cleft() const { return container::cleft(); }
const length &cright() const { return container::cright(); }
const length &cbottom() const { return container::cbottom(); }
const length &ctop() const { return container::ctop(); }
mpad &lmargin(const length &l) { container::lmargin(l); return *this; }
mpad &rmargin(const length &l) { container::rmargin(l); return *this; }
mpad &bmargin(const length &l) { container::bmargin(l); return *this; }
mpad &tmargin(const length &l) { container::tmargin(l); return *this; }
const length &lmargin() const { return container::lmargin(); }
const length &rmargin() const { return container::rmargin(); }
const length &bmargin() const { return container::bmargin(); }
const length &tmargin() const { return container::tmargin(); }
mpad &left(const length &l) { box::left(l); return *this; }
mpad &right(const length &l) { box::right(l); return *this; }
mpad &width(const length &l) { box::width(l); return *this; }
mpad &bottom(const length &l) { box::bottom(l); return *this; }
mpad &top(const length &l) { box::top(l); return *this; }
mpad &height(const length &l) { box::height(l); return *this; }
const length &left() const { return box::left(); }
const length &right() const { return box::right(); }
const length &width() const { return box::width(); }
const length &bottom() const { return box::bottom(); }
const length &top() const { return box::top(); }
const length &height() const { return box::height(); }
bool modified() const;
void modified(bool f);
void cd_specific() {}
void prepare_for_draw();
void print(terminal *);
pad *operator() (int i,int j);
};
}
#endif