Add more public accessor methods to Fl_Grid (#937)

Some of these accessor methods should be private so they can't be used
by user code but - due to compiler issues - they must be public for
HP-UX 11.11 (for details see GitHub Issue #937).
This commit is contained in:
Albrecht Schlosser 2024-03-18 23:23:49 +01:00
parent dddfec57a1
commit 5af2d77b84
2 changed files with 38 additions and 10 deletions

View File

@ -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_; }

View File

@ -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;
}