FWIW, here's a (compilable) test program similar to your
    code snippet I was using to test your issue.

    Note the "<--" comment below, as well as the additional
    calls to col_width_all() and row_height_all(), which I'd
    recommend you use, so that the table knows the width/height
    of your child widgets.

-----------------------------------------------------------------

#include <stdio.h>
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Table.H>

class MyTable : public Fl_Table {
protected:
  void draw_cell(TableContext context, int R=0, int C=0, int X=0, int Y=0, int 
W=0, int H=0) {
    switch ( context ) {
      case CONTEXT_STARTPAGE:
        break;
      case CONTEXT_RC_RESIZE: {
        int X, Y, W, H;
        int index = 0;
        for ( int r = 0; r<rows(); r++ ) {
          for ( int c = 0; c<cols(); c++ ) {
            if ( index >= children() ) break;
            find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
            child(index++)->resize(X,Y,W,H);
          }
        }
        init_sizes();                   // tell group children resized
        return;
      }
      case CONTEXT_CELL:
        return;                         // fltk handles drawing the widgets
      default:
        return;
    }
  }
public:
  MyTable(int x, int y, int w, int h, const char *l=0) : Fl_Table(x,y,w,h,l) {
    end();
  }
  ~MyTable() { }
};

int main() {
  Fl_Double_Window win(800, 600, "Window");
  win.end();

  MyTable *t = new MyTable(400, 0, 400, 600);
  t->end();
  win.add(t);

  t->cols(2);
  t->rows(10);
  t->col_width_all(200);   // set column widths
  t->row_height_all(25);   // set row heights

  for ( int c = 0; c < t->cols(); c++ ) {
    for ( int r = 0; r < t->rows(); r++ ) {
      int X,Y,W,H;
      W = t->col_width(c);
      H = t->row_height(r);
      X = t->x() + (c * W);
      Y = t->y() + (r * H);
      Fl_Button *b = new Fl_Button(X, Y, W, H, "Table Widget");
      t->add(b);
    }
  }
  t->show();            // <-- IF ABOVE PATCH IS APPLIED, CAN COMMENT THIS OUT
  win.resizable(t);
  win.show();
  return(Fl::run());
}

_______________________________________________
fltk mailing list
fltk@easysw.com
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to