> Carl Ding wrote:
> > The problem is when I delete a row, I use Fl::delete_widget to remove
> > all the embedded widgets in that row. The program crashed when doing
> > fl_draw(). Is there anything else should be done to remove a row from
> > Fl_Table?
>
> Tell Fl_Table there's one less row by setting Fl_Table::rows(val),
> e.g.:
>
> if ( table.rows() > 0 )
> table.rows(table.rows() - 1);
>
> Fl_Table doesn't have a 'delete row' function because it doesn't
> maintain any data of its own, so there's nothing to 'delete'.
>
> It's just a space managing template that uses the rows() and
> cols() values you tell it, and it just calls your draw method
> once for each of the cells in all the rows and columns it knows
> about.
>
> When you delete a row of your data, you have to tell Fl_Table
> there's one less row to draw, otherwise your draw function will
> crash when Fl_Table calls it to draw data for that last row that
> no longer exists.
>
> Fl_Table is analogous to the 'for()' loop in the following:
>
> for ( int row=0; row<rows; row++ )
> printf("%d) %f\n", row, data[row]);
>
> ..where the 'for' loop is Fl_Table, and the printf() is your draw
> routine, and data[] is your own data; Fl_Table is just the loop,
> it knows nothing about the printf() or your array of data.. it just
> knows to call your printf() once for all of the 'rows'.
>
> So if you decide to realloc() the data[] array to be smaller,
> but don't decrement 'rows', your printf() will crash printing
> the last element because the data is no longer there. Decrementing
> 'rows' when you resize the array would be the same as decrementing
> the Fl_Table::rows() value.
>
Thank you for your explanation. I have used Fl_Table::rows() to resize the
table. Now, I add a remove() before calling delete_widget() in order to delete
the embedded widget. It seems working. But I'm not sure whether it is the
correct sequence to remove a widget.
I have another question regarding to Fl_Table. I embed some button widgets into
Fl_Table. When I click those buttons, their callback functions can be
triggered. Is it possible to pass these mouse click events to their parent,
i.e., Fl_Table, so that its callback function can also be triggered?
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk