XenevaOS
Loading...
Searching...
No Matches
sheet_grid.h
Go to the documentation of this file.
1
6#ifndef __SHEET_GRID_H__
7#define __SHEET_GRID_H__
8
9#include <chitralekha.h>
10#include <widgets/window.h>
11#include "sheet_types.h"
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17/* Extended AT scancodes forwarded by virtio-keyboard in XenevaOS */
18#define SHEET_KEY_UP_EXT 0xE048
19#define SHEET_KEY_DOWN_EXT 0xE050
20#define SHEET_KEY_LEFT_EXT 0xE04B
21#define SHEET_KEY_RIGHT_EXT 0xE04D
22#define SHEET_KEY_HOME_EXT 0xE047
23#define SHEET_KEY_END_EXT 0xE04F
24#define SHEET_KEY_PGUP_EXT 0xE049
25#define SHEET_KEY_PGDN_EXT 0xE051
26#define SHEET_KEY_DEL_EXT 0xE053
27
28/* Standard make scancodes */
29#define SHEET_KEY_ENTER_STD 0x1C
30#define SHEET_KEY_TAB_STD 0x0F
31#define SHEET_KEY_ESC_STD 0x01
32#define SHEET_KEY_BS_STD 0x0E
33
34typedef struct _SheetGridWidget {
38
39 /* Selection state */
46
47 /* Viewport scroll */
50
51 /* In-cell editing */
55
56 /* Callback when selection or edit state changes (syncs with Formula Bar & Status Bar) */
58 void (*OnCellEdited)(struct _SheetGridWidget* grid, ChWindow* win, int col, int row, const char* text);
60
61/* Create and initialize virtualized grid widget */
62SheetGridWidget* SheetGridCreate(int x, int y, int w, int h, SheetWorkbook* wb, ChFont* font);
63
64/* Commit currently editing cell */
66
67/* Cancel currently editing cell */
69
70/* Start editing currently active cell with initial text (or NULL to keep current text) */
71void SheetGridStartEdit(SheetGridWidget* grid, ChWindow* win, const char* initialText);
72
73/* Handle key event dispatched to the grid widget */
74bool SheetGridHandleKey(SheetGridWidget* grid, ChWindow* win, int keycode, char ascii);
75
76/* Ensure active cell is within visible viewport, scrolling if necessary */
78
79/* Repaint grid widget onto canvas and update window surface */
81
82/* Ultra-fast 60 FPS in-cell editing repaint: repaints only active cell dirty rect */
84
85/* Safe window update helper ensuring compositor dirty flags are preserved */
86static inline void SheetWindowUpdate(ChWindow* win, int x, int y, int w, int h, bool updateEntire) {
87 if (updateEntire) {
88 ChWindowUpdate(win, x, y, w, h, true, true);
89 } else {
90 ChWindowUpdate(win, x, y, w, h, false, true);
91 }
92}
93
94#ifdef __cplusplus
95}
96#endif
97
98#endif /* __SHEET_GRID_H__ */
XE_EXTERN XE_EXPORT void ChWindowUpdate(ChWindow *win, int x, int y, int w, int h, bool updateEntireWin, bool dirty)
Definition window.cpp:278
int h
Definition layout.c:118
ChWindow * win
Definition namdapha.cpp:60
void SheetGridStartEdit(SheetGridWidget *grid, ChWindow *win, const char *initialText)
Definition sheet_grid.cpp:98
void SheetGridCancelEdit(SheetGridWidget *grid, ChWindow *win)
Definition sheet_grid.cpp:89
void SheetGridCommitEdit(SheetGridWidget *grid, ChWindow *win)
Definition sheet_grid.cpp:73
struct _SheetGridWidget SheetGridWidget
void SheetGridScrollToActive(SheetGridWidget *grid)
Definition sheet_grid.cpp:42
SheetGridWidget * SheetGridCreate(int x, int y, int w, int h, SheetWorkbook *wb, ChFont *font)
Definition sheet_grid.cpp:608
void SheetGridRepaint(SheetGridWidget *grid, ChWindow *win)
Definition sheet_grid.cpp:305
bool SheetGridHandleKey(SheetGridWidget *grid, ChWindow *win, int keycode, char ascii)
Definition sheet_grid.cpp:453
void SheetGridRepaintActiveCell(SheetGridWidget *grid, ChWindow *win)
Definition sheet_grid.cpp:313
Core types, constants, and limits for XESheets spreadsheet application.
#define SHEET_CELL_TEXT_LEN
Definition sheet_types.h:16
Definition window.h:130
Definition sheet_grid.h:34
void(* OnCellEdited)(struct _SheetGridWidget *grid, ChWindow *win, int col, int row, const char *text)
Definition sheet_grid.h:58
bool isRangeSelecting
Definition sheet_grid.h:45
SheetWorkbook * workbook
Definition sheet_grid.h:36
SheetRange selRange
Definition sheet_grid.h:44
int scrollCol
Definition sheet_grid.h:48
int anchorCol
Definition sheet_grid.h:42
int editCursor
Definition sheet_grid.h:54
bool isEditing
Definition sheet_grid.h:52
int activeRow
Definition sheet_grid.h:41
ChWidget base
Definition sheet_grid.h:35
int scrollRow
Definition sheet_grid.h:49
int anchorRow
Definition sheet_grid.h:43
char editBuffer[SHEET_CELL_TEXT_LEN]
Definition sheet_grid.h:53
void(* OnSelectionChanged)(struct _SheetGridWidget *grid, ChWindow *win)
Definition sheet_grid.h:57
ChFont * font
Definition sheet_grid.h:37
int activeCol
Definition sheet_grid.h:40
Definition sheet_types.h:87
Definition sheet_types.h:72
Definition font.h:83
Definition window.h:106