#include #include #include #include #include #include #include #include #include void button_cb(fl_Widget w, void* userdata){ fprintf(stderr, "BUTTON: %s\n", (const char*)Fl_Widget_label(w)); } void SetSize(fl_Table table, int newrows, int newcols){ Fl_Table_clear(table); Fl_Table_set_rows(table,newrows); Fl_Table_set_cols(table,newcols); Fl_Table_begin(table); { int r; int c; for (r = 0; r= Fl_Table_children(table) ) break; Fl_Table_find_cell(table,CONTEXT_TABLEC, r, c, &X, &Y, &W, &H); fl_Widget child = (fl_Widget) Fl_Table_child(table,index++); Fl_Widget_resize(child,X,Y,W,H); } } Fl_Table_init_sizes(table); return; } case CONTEXT_ROW_HEADERC: flc_push_clip(X, Y, W, H); { static char s[40]; sprintf(s, "Row %d", R); flc_draw_box(FL_THIN_UP_BOX, X, Y, W, H, Fl_Table_row_header_color(table)); flc_set_color(FL_BLACK); flc_draw_with_align(s, X, Y, W, H, FL_ALIGN_CENTER); } flc_pop_clip(); return; case CONTEXT_COL_HEADERC: flc_push_clip(X, Y, W, H); { static char s[40]; sprintf(s, "Column %d", C); flc_draw_box(FL_THIN_UP_BOX, X, Y, W, H, Fl_Table_col_header_color(table)); flc_set_color(FL_BLACK); flc_draw_with_align(s, X, Y, W, H, FL_ALIGN_CENTER); } flc_pop_clip(); return; case CONTEXT_CELLC: return; // fltk handles drawing the widgets default: return; } } void initializeTable(fl_Table table){ Fl_Table_set_col_header(table,1); Fl_Table_set_col_resize(table,1); Fl_Table_set_col_header_height(table,25); Fl_Table_set_row_header(table,1); Fl_Table_set_row_resize(table,1); Fl_Table_set_row_header_width(table,80); Fl_Table_end(table); } int main(int argc, char** argv){ fl_Double_Window win = (fl_Double_Window)Fl_Double_Window_New_WithLabel(940, 500, "table as container"); fl_Table_Virtual_Funcs* funcs = (fl_Table_Virtual_Funcs*)Fl_Table_default_virtual_funcs(); funcs->draw_cell = &draw_cell; fl_Table table = (fl_Table)Fl_Table_New_WithLabel(20, 20, Fl_Double_Window_w(win)-40, Fl_Double_Window_h(win)-40, "FLTK widget table", funcs); initializeTable(table); SetSize(table,50,50); Fl_Double_Window_end(win); Fl_Double_Window_set_resizable(win,table); Fl_Double_Window_show(win); return Fl_run(); }