Author: greg.ercolano
Date: 2013-03-23 01:02:02 -0700 (Sat, 23 Mar 2013)
New Revision: 9842
Log:
o Modified example to take advantage of new Fl_Table::tab_cell_nav() method
o Changed behavior of example to be more predictable
o Enter key can be used to toggle edit mode
o User can navigate table cells with arrow keys or tab/shift-tab without
slipping into cell edit mode
o Fixed other issues with Alt, Shift, multicell selection..
Modified:
branches/branch-1.3/examples/table-spreadsheet.cxx
Modified: branches/branch-1.3/examples/table-spreadsheet.cxx
===================================================================
--- branches/branch-1.3/examples/table-spreadsheet.cxx 2013-03-23 07:55:09 UTC
(rev 9841)
+++ branches/branch-1.3/examples/table-spreadsheet.cxx 2013-03-23 08:02:02 UTC
(rev 9842)
@@ -58,8 +58,7 @@
values[r][c] = c + (r*MAX_COLS); // initialize cells
end();
row_edit = col_edit = 0;
- select_row = current_row = 0;
- select_col = current_col = 0;
+ set_selection(0,0,0,0);
}
~Spreadsheet() { }
@@ -76,6 +75,7 @@
void start_editing(int R, int C) {
row_edit = R; // Now editing this
row/col
col_edit = C;
+ set_selection(R,C,R,C); // Clear any previous
multicell selection
int X,Y,W,H;
find_cell(CONTEXT_CELL, R,C, X,Y,W,H); // Find X/Y/W/H of cell
input->resize(X,Y,W,H); // Move Fl_Input widget
there
@@ -160,7 +160,7 @@
}
// Background
if ( C < cols()-1 && R < rows()-1 ) {
- fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, (R==row_edit && C==col_edit) ?
FL_YELLOW : FL_WHITE);
+ fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? FL_YELLOW :
FL_WHITE);
} else {
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, 0xbbddbb00); // money green
}
@@ -209,16 +209,19 @@
return;
case FL_KEYBOARD: // key press in table?
- switch (Fl::event_key()) {
- case FL_Escape: exit(0); // ESC closes app
- case FL_Shift_L: return; // ignore shift
- case FL_Shift_R: return;
- }
- if (C == cols()-1 || R == rows()-1) return; // no editing of totals
column
+ if ( Fl::event_key() == FL_Escape ) exit(0); // ESC closes app
done_editing(); // finish any previous
editing
- start_editing(R,C); // start new edit
- if (Fl::event() == FL_KEYBOARD && Fl::e_text[0] != '\r') {
- input->handle(Fl::event()); // pass keypress to
input widget
+ if (C==cols()-1 || R==rows()-1) return; // no editing of totals
column
+ switch ( Fl::e_text[0] ) {
+ case '0': case '1': case '2': case '3': // any of these should
start editing new cell
+ case '4': case '5': case '6': case '7':
+ case '8': case '9': case '+': case '-':
+ start_editing(R,C); // start new edit
+ input->handle(Fl::event()); // pass typed char to
input
+ break;
+ case '\r': case '\n': // let enter key edit
the cell
+ start_editing(R,C); // start new edit
+ break;
}
return;
}
@@ -237,9 +240,13 @@
}
int main() {
- Fl::option(Fl::OPTION_ARROW_FOCUS, 1); // we want arrow keys
to navigate table's widgets
Fl_Double_Window *win = new Fl_Double_Window(862, 322, "Fl_Table
Spreadsheet");
Spreadsheet *table = new Spreadsheet(10, 10, win->w()-20, win->h()-20);
+#if FLTK_ABI_VERSION >= 10303
+ table->tab_cell_nav(1); // enable tab navigation of table cells
(instead of fltk widgets)
+#endif
+ table->tooltip("Use keyboard to navigate cells:\n"
+ "Arrow keys or Tab/Shift-Tab");
// Table rows
table->row_header(1);
table->row_header_width(70);
_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit