start_edit(TableUI *tui, int edit_existing) { RECT rt = get_cell_rect(tui, tui->cur_row, tui->cur_col), rt_cont = rt; if (is_editing(tui)) end_edit(tui); if (edit_existing) { Cell cell = try_cell(tui->table, tui->cur_row, tui->cur_col); SetWindowTextA(tui->edit, cell.str); /* Resize Edit to fit content; at least as big as the cell */ DrawTextA(tui->bitmap, cell.str, cell.len, &rt_cont, DT_NOPREFIX | DT_RIGHT | DT_CALCRECT | DT_EDITCONTROL); UnionRect(&rt, &rt, &rt_cont); } else SetWindowText(tui->edit, L""); MoveWindow(tui->edit, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, 0); ShowWindow(tui->edit, SW_NORMAL); SetFocus(tui->edit); }
int Fl_ToggleTree::handle(int event) { // printf("event: %d\n",event); static Fl_ToggleNode* prev = 0; switch (event) { case FL_ENTER: return 1; case FL_RELEASE: { if (edit_input_->visible()) { end_edit(); } int depth; int cy; Fl_ToggleNode* tnode = (Fl_ToggleNode*) Fl_Tree::find(Fl::event_y(), depth, cy); if (Fl::event_x() < x() + depth*16 + 16) { if (tnode->opened_) { current_ = tnode; state_ = FL_TOGGLE_OPENED; do_callback(); close(tnode); } else { current_ = tnode; state_ = FL_TOGGLE_CLOSED; do_callback(); open(tnode); } return 1; } else { if (Fl::event_state(FL_SHIFT)) { if (prev == 0) prev = tnode; select_range(prev, tnode, 1); current_ = 0; state_ = FL_TOGGLE_SELECT; do_callback(); } else if (Fl::event_state(FL_CTRL)) { if (!tnode->selected_) select_range(tnode, tnode, Fl::event_state(FL_CTRL)); else { tnode->selected_ = 0; tnode->changed_ = 1; tnode = 0; } current_ = 0; state_ = FL_TOGGLE_SELECT; do_callback(); } else { select_range(tnode, tnode, 0); state_ = Fl::event_clicks() ? FL_TOGGLE_HIT : FL_TOGGLE_SELECT; if (tnode == current_ && state_ == FL_TOGGLE_SELECT) { state_ = FL_TOGGLE_RESELECT; } current_ = tnode; if (state_ == FL_TOGGLE_RESELECT && edit_on_reselect_) { edit(tnode, x() + depth*16 + label_offset_, cy); } do_callback(); } damaged_ = 0; damage(FL_DAMAGE_CHILD); prev = tnode; } } return 1; break; } return 1; }
command(TableUI *tui, int cmd) { switch (cmd) { case CmdClearFile: clear_file(tui); break; case CmdOpenFile: clear_and_open(tui, tui->filename); if (row_count(tui->table) < MAX_ROWS_FOR_FIT && max_col_count(tui->table) < MAX_COLS_FOR_FIT) { unsigned i; for (i = 0; i < max_col_count(tui->table); i++) auto_resize_col(tui, i); } break; case CmdSaveFile: save_csv(tui, tui->filename); break; case CmdSetAnchor: set_anchor(tui); break; case CmdClearAnchor: clear_anchor(tui); break; case CmdClearRow: clear_selected_rows(tui); break; case CmdDeleteRow: delete_selected_rows(tui); break; case CmdDeleteCell: delete_selected_cells(tui); break; case CmdClearCell: clear_selected_cells(tui); break; case CmdCopy: copy_to_clipboard(tui); break; case CmdCutClear: copy_to_clipboard(tui); clear_selected_cells(tui); break; case CmdCutDelete: copy_to_clipboard(tui); delete_selected_cells(tui); break; case CmdPaste: clear_anchor(tui); paste_clipboard(tui); break; case CmdReturn: clear_anchor(tui); move_cursor(tui, 1, 0); break; case CmdTab: clear_anchor(tui); move_cursor(tui, 0, 1); break; case CmdUnReturn: clear_anchor(tui); move_cursor(tui, -1, 0); break; case CmdUnTab: clear_anchor(tui); move_cursor(tui, 0, -1); break; case CmdEditCell: start_edit(tui, 1); break; case CmdEditCellClear: start_edit(tui, 0); break; case CmdCommitEdit: end_edit(tui); break; case CmdCancelEdit: cancel_edit(tui); break; case CmdMoveUp: move_cursor(tui, -1, 0); break; case CmdMoveDown: move_cursor(tui, 1, 0); break; case CmdMoveLeft: move_cursor(tui, 0, -1); break; case CmdMoveRight: move_cursor(tui, 0, 1); break; case CmdScrollUp: scroll(tui, -1, 0); break; case CmdScrollDown: scroll(tui, 1, 0); break; case CmdScrollLeft: scroll(tui, 0, -1); break; case CmdScrollRight: scroll(tui, 0, 1); break; case CmdHomeCol: jump_cursor(tui, 0, tui->cur_col); break; case CmdHomeRow: jump_cursor(tui, tui->cur_row, 0); break; case CmdEndCol: jump_cursor(tui, row_count(tui->table) - 1, tui->cur_col); break; case CmdEndRow: jump_cursor(tui, tui->cur_row, col_count(tui->table, tui->cur_row) - 1); break; case CmdInsertDate: insert_datetime(tui, 0); break; case CmdInsertDateTime: insert_datetime(tui, 1); break; case CmdInsertCell: insert_cells(tui->table, tui->cur_row, tui->cur_col, 1); redraw_rows(tui, tui->cur_row, tui->cur_row); break; case CmdInsertRow: insert_rows(tui->table, tui->cur_row, 1); redraw_rows(tui, tui->cur_row, -1); break; case CmdFindColumn: find_cell_text_col(tui, tui->cur_row, tui->cur_col, tui->find_text); break; case CmdFindRow: find_cell_text_row(tui, tui->cur_row, tui->cur_col, tui->find_text); break; } }