FLTK logo

[master] 5af2d77 - Add more public accessor methods to Fl_Grid (#937)

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 5af2d77 - Add more public accessor methods to Fl_Grid (#937) "Albrecht Schlosser" 15:32 Mar 18  
 
commit 5af2d77b8468bc585ac350b53d704f030b74fe1d
Author:     Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Mon Mar 18 23:23:49 2024 +0100
Commit:     Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Mon Mar 18 23:23:49 2024 +0100

    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).

 FL/Fl_Grid.H    | 36 ++++++++++++++++++++++++++++++++----
 src/Fl_Grid.cxx | 12 ++++++------
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git FL/Fl_Grid.H FL/Fl_Grid.H
index 7473ae0..3661977 100644
--- FL/Fl_Grid.H
+++ 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 src/Fl_Grid.cxx src/Fl_Grid.cxx
index e5259be..95b1d2e 100644
--- src/Fl_Grid.cxx
+++ 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;
         }
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.