diff options
| -rw-r--r-- | FL/Fl_Grid.H | 36 | ||||
| -rw-r--r-- | src/Fl_Grid.cxx | 12 |
2 files changed, 38 insertions, 10 deletions
diff --git a/FL/Fl_Grid.H b/FL/Fl_Grid.H index 7473ae050..3661977c5 100644 --- a/FL/Fl_Grid.H +++ b/FL/Fl_Grid.H @@ -151,7 +151,7 @@ public: class Cell { friend class Fl_Grid; private: - Cell *next_; // next cell in row + Cell *next_; // next cell in the same row short row_; // row number short col_; // column number short rowspan_; // row span (1 - n) @@ -163,7 +163,7 @@ public: public: - void Cell_() { + void Cell_() { // common initialization next_ = NULL; row_ = 0; col_ = 0; @@ -175,21 +175,49 @@ public: align_ = 0; } - Cell(int row, int col) { + Cell(int row, int col) { // constructor Cell_(); row_ = row; col_ = col; } - Cell(Fl_Widget *w, int row, int col) { + Cell(Fl_Widget *w, int row, int col) { // widget assignment Cell_(); widget_ = w; row_ = row; col_ = col; } + /** + The destructor deletes the cell. + + \todo Fl_Grid's cell destructor should remove the cell from the grid. + Currently it does nothing! + */ ~Cell() {} + /** + Returns the next widget cell of the same row of this cell. + */ + Cell *next() { + return next_; + } + + /** + Sets the \c next pointer of a grid's cell. + + \b Internal use only! + + Do not use this method, it may corrupt the allocated memory. + + \internal + This method is public due to issue #937 but should be private or + at least protected. For more info see GitHub issue #937. + */ + void next(Cell *c) { + next_ = c; + } + Fl_Widget *widget() const { return widget_; } short row() const { return row_; } diff --git a/src/Fl_Grid.cxx b/src/Fl_Grid.cxx index e5259be19..95b1d2e2b 100644 --- a/src/Fl_Grid.cxx +++ b/src/Fl_Grid.cxx @@ -2,7 +2,7 @@ // Fl_Grid widget for the Fast Light Tool Kit (FLTK). // // Copyright 2021-2022 by Albrecht Schlosser. -// Copyright 2022-2023 by Bill Spitzak and others. +// Copyright 2022-2024 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -70,23 +70,23 @@ class Fl_Grid::Row { void free_cells() { Cell *cel = cells_; while (cel) { - Cell *next = cel->next_; + Cell *next = cel->next(); delete cel; cel = next; } // free_cells() cells_ = 0; } - // Fl_Grid::Row::remove_cell() - remove all cells of column col from list of cells + // Fl_Grid::Row::remove_cell() - remove all cells of column col from the list of cells void remove_cell(int col) { // Cell *cel = cells_; Cell *prev = 0; while (cel) { - Cell *next = cel->next_; - if (cel->col_ == col) { + Cell *next = cel->next(); + if (cel->col() == col) { if (prev) { - prev->next_ = next; + prev->next(next); } else { cells_ = next; } |
