summaryrefslogtreecommitdiff
path: root/src/Fl_Table_Row.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_Table_Row.cxx')
-rw-r--r--src/Fl_Table_Row.cxx39
1 files changed, 27 insertions, 12 deletions
diff --git a/src/Fl_Table_Row.cxx b/src/Fl_Table_Row.cxx
index 849cd0383..d07db7ac7 100644
--- a/src/Fl_Table_Row.cxx
+++ b/src/Fl_Table_Row.cxx
@@ -63,20 +63,21 @@ int Fl_Table_Row::row_selected(int row) {
// Change row selection type
void Fl_Table_Row::type(TableRowSelectMode val) {
_selectmode = val;
+ int i;
switch ( _selectmode ) {
case SELECT_NONE: {
- for (auto &sel : _rowselect) {
- sel = 0;
+ for (i = 0; i < _rowselect_size; i++) {
+ _rowselect[i] = 0;
}
redraw();
break;
}
case SELECT_SINGLE: {
int count = 0;
- for (auto &sel : _rowselect) {
- if (sel) {
+ for (i = 0; i < _rowselect_size; i++) {
+ if (_rowselect[i]) {
if (++count > 1) { // only one allowed
- sel = 0;
+ _rowselect[i] = 0;
}
}
}
@@ -149,6 +150,7 @@ int Fl_Table_Row::select_row(int row, int flag) {
// Select all rows to a known state
void Fl_Table_Row::select_all_rows(int flag) {
+ int i;
switch ( _selectmode ) {
case SELECT_NONE:
return;
@@ -160,14 +162,14 @@ void Fl_Table_Row::select_all_rows(int flag) {
case SELECT_MULTI: {
char changed = 0;
if ( flag == 2 ) {
- for (auto &sel : _rowselect) {
- sel ^= 1;
+ for (i = 0; i < _rowselect_size; i++) {
+ _rowselect[i] ^= 1;
}
changed = 1;
} else {
- for (auto &sel : _rowselect) {
- changed |= (sel != flag) ? 1 : 0;
- sel = flag;
+ for (i = 0; i < _rowselect_size; i++) {
+ changed |= (_rowselect[i] != flag) ? 1 : 0;
+ _rowselect[i] = flag;
}
}
if ( changed ) {
@@ -180,9 +182,22 @@ void Fl_Table_Row::select_all_rows(int flag) {
// Set number of rows
void Fl_Table_Row::rows(int val) {
// Note: order of operations below matters, see PR #1187
- if (val > (int)_rowselect.size()) { _rowselect.resize(val, 0); } // enlarge
+ if (val > _rowselect_size) {
+ // enlarge
+ if (val > _rowselect_alloc) {
+ _rowselect = (unsigned char*)realloc(_rowselect, val);
+ _rowselect_alloc = val;
+ }
+ int i;
+ for (i = _rowselect_size; i < val; i++)
+ _rowselect[i] = 0;
+ _rowselect_size = val;
+ }
Fl_Table::rows(val);
- if (val < (int)_rowselect.size()) { _rowselect.resize(val); } // shrink
+ if (val < _rowselect_size) {
+ // shrink
+ _rowselect_size = val;
+ }
}
// Handle events