summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Table.H27
-rw-r--r--FL/Fl_Table_Row.H22
-rw-r--r--src/Fl_Table.cxx39
-rw-r--r--src/Fl_Table_Row.cxx43
4 files changed, 76 insertions, 55 deletions
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 <sys/types.h>
-#include <string.h> // memcpy
-#ifdef WIN32
-#include <malloc.h> // WINDOWS: malloc/realloc
-#else /*WIN32*/
-#include <stdlib.h> // UNIX: malloc/realloc
-#endif /*WIN32*/
-
-#include <FL/Fl.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Scrollbar.H>
/**
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 <FL/Fl_Table.H>
/**
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 <stdio.h> // fprintf
-#include <FL/fl_draw.H>
#include <FL/Fl_Table.H>
-#if defined(USE_UTF8) && ( defined(MICROSOFT) || defined(LINUX) )
-#include <FL/fl_utf8.H> // currently only Windows and Linux
-#endif
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+
+#include <sys/types.h>
+#include <string.h> // memcpy
+#include <stdio.h> // fprintf
+
+#ifdef WIN32
+#include <malloc.h> // WINDOWS: malloc/realloc
+#else /*WIN32*/
+#include <stdlib.h> // 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 <stdio.h> // for debugging
+#include <FL/Fl_Table_Row.H>
#include <FL/Fl.H>
#include <FL/fl_draw.H>
-#include <FL/Fl_Table_Row.H>
+
+// for debugging...
+// #define DEBUG 1
+#ifdef DEBUG
+#include <FL/names.h>
+#include <stdio.h> // 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 <FL/names.h>
-#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;