diff --git a/FL/Fl_Table.H b/FL/Fl_Table.H index 62872ca09..7658e3ff9 100644 --- a/FL/Fl_Table.H +++ b/FL/Fl_Table.H @@ -20,19 +20,8 @@ #ifndef _FL_TABLE_H #define _FL_TABLE_H -#include -#include // memcpy -#ifdef WIN32 -#include // WINDOWS: malloc/realloc -#else /*WIN32*/ -#include // UNIX: malloc/realloc -#endif /*WIN32*/ - -#include #include #include -#include -#include /** A table of widgets or other content. @@ -172,16 +161,13 @@ private: int *arr; unsigned int _size; void init() { - arr = NULL; + arr = 0; _size = 0; } - void copy(int *newarr, unsigned int newsize) { - size(newsize); - memcpy(arr, newarr, newsize * sizeof(int)); - } + void copy(int *newarr, unsigned int newsize); public: IntVector() { init(); } // CTOR - ~IntVector() { if ( arr ) free(arr); arr = NULL; } // DTOR + ~IntVector(); // DTOR IntVector(IntVector&o) { init(); copy(o.arr, o._size); } // COPY CTOR IntVector& operator=(IntVector&o) { // ASSIGN init(); @@ -191,12 +177,7 @@ private: int operator[](int x) const { return(arr[x]); } int& operator[](int x) { return(arr[x]); } unsigned int size() { return(_size); } - void size(unsigned int count) { - if ( count != _size ) { - arr = (int*)realloc(arr, count * sizeof(int)); - _size = count; - } - } + void size(unsigned int count); int pop_back() { int tmp = arr[_size-1]; _size--; return(tmp); } void push_back(int val) { unsigned int x = _size; size(_size+1); arr[x] = val; } int back() { return(arr[_size-1]); } diff --git a/FL/Fl_Table_Row.H b/FL/Fl_Table_Row.H index 891c58526..0a8fcca8f 100644 --- a/FL/Fl_Table_Row.H +++ b/FL/Fl_Table_Row.H @@ -22,7 +22,7 @@ // Please report all bugs and problems to "erco at seriss dot com". // -#include "Fl_Table.H" +#include /** A table with row selection capabilities. @@ -54,21 +54,15 @@ private: char *arr; int _size; void init() { - arr = NULL; + arr = 0; _size = 0; } - void copy(char *newarr, int newsize) { - size(newsize); - memcpy(arr, newarr, newsize * sizeof(char)); - } + void copy(char *newarr, int newsize); public: CharVector() { // CTOR init(); } - ~CharVector() { // DTOR - if ( arr ) free(arr); - arr = NULL; - } + ~CharVector(); // DTOR CharVector(CharVector&o) { // COPY CTOR init(); copy(o.arr, o._size); @@ -87,12 +81,7 @@ private: int size() { return(_size); } - void size(int count) { - if ( count != _size ) { - arr = (char*)realloc(arr, count * sizeof(char)); - _size = count; - } - } + void size(int count); char pop_back() { char tmp = arr[_size-1]; _size--; @@ -107,6 +96,7 @@ private: return(arr[_size-1]); } }; + CharVector _rowselect; // selection flag for each row // handle() state variables. diff --git a/src/Fl_Table.cxx b/src/Fl_Table.cxx index a51d8d058..0dc95e135 100644 --- a/src/Fl_Table.cxx +++ b/src/Fl_Table.cxx @@ -17,13 +17,42 @@ // http://www.fltk.org/str.php // -#include // fprintf -#include #include -#if defined(USE_UTF8) && ( defined(MICROSOFT) || defined(LINUX) ) -#include // currently only Windows and Linux -#endif +#include +#include + +#include +#include // memcpy +#include // fprintf + +#ifdef WIN32 +#include // WINDOWS: malloc/realloc +#else /*WIN32*/ +#include // UNIX: malloc/realloc +#endif /*WIN32*/ + + +// An STL-ish vector without templates (private to Fl_Table) + +void Fl_Table::IntVector::copy(int *newarr, unsigned int newsize) { + size(newsize); + memcpy(arr, newarr, newsize * sizeof(int)); +} + +Fl_Table::IntVector::~IntVector() { // DTOR + if (arr) + free(arr); + arr = 0; +} + +void Fl_Table::IntVector::size(unsigned int count) { + if (count != _size) { + arr = (int*)realloc(arr, count * sizeof(int)); + _size = count; + } +} + /** Sets the vertical scroll position so 'row' is at the top, and causes the screen to redraw. diff --git a/src/Fl_Table_Row.cxx b/src/Fl_Table_Row.cxx index fd0e98f7d..1dc132acc 100644 --- a/src/Fl_Table_Row.cxx +++ b/src/Fl_Table_Row.cxx @@ -24,10 +24,40 @@ // o Row headings (only column headings supported currently) // -#include // for debugging +#include #include #include -#include + +// for debugging... +// #define DEBUG 1 +#ifdef DEBUG +#include +#include // fprintf() +#define PRINTEVENT \ + fprintf(stderr,"TableRow %s: ** Event: %s --\n", (label()?label():"none"), fl_eventnames[event]); +#else +#define PRINTEVENT +#endif + +// An STL-ish vector without templates (private to Fl_Table_Row) + +void Fl_Table_Row::CharVector::copy(char *newarr, int newsize) { + size(newsize); + memcpy(arr, newarr, newsize * sizeof(char)); +} + +Fl_Table_Row::CharVector::~CharVector() { // DTOR + if (arr) free(arr); + arr = 0; +} + +void Fl_Table_Row::CharVector::size(int count) { + if (count != _size) { + arr = (char*)realloc(arr, count * sizeof(char)); + _size = count; + } +} + // Is row selected? int Fl_Table_Row::row_selected(int row) { @@ -155,15 +185,6 @@ void Fl_Table_Row::rows(int val) { while ( val < (int)_rowselect.size() ) { _rowselect.pop_back(); } // shrink } -//#define DEBUG 1 -#ifdef DEBUG -#include -#define PRINTEVENT \ - fprintf(stderr,"TableRow %s: ** Event: %s --\n", (label()?label():"none"), fl_eventnames[event]); -#else -#define PRINTEVENT -#endif - // Handle events int Fl_Table_Row::handle(int event) { PRINTEVENT;