diff options
Diffstat (limited to 'src/Fl_Table_Row.cxx')
| -rw-r--r-- | src/Fl_Table_Row.cxx | 39 |
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 |
