GlistEngine
Loading...
Searching...
No Matches
gGUIGrid.h
Go to the documentation of this file.
1/*
2 * gGUIGrid.h
3 *
4 * Created on: 5 Aug 2022
5 * Author: murat
6 */
7
8#ifndef UI_GGUIGRID_H_
9#define UI_GGUIGRID_H_
10
11
12#include "gGUIScrollable.h"
13#include "gGUITextbox.h"
14#include "gGUIManager.h"
15#include <deque>
16#include <string.h>
17#include <array>
18#include <vector>
19#include <unordered_map>
20
21//#include "gGUISizer.h"
22
23class gGUIGrid : public gGUIScrollable {
24public:
25 struct Cell {
26 enum {
29 };
30
33 bool isbold;
36 int cellx;
37 int celly;
44 int lineno;
46 float cellh;
47 float cellw;
49 std::string cellcontent;
50 std::string showncontent;
51 std::string overflowcontent;
53 bool removed;
55
56 Cell() {
57 readonly = false;
58 removed = false;
59 iscellselected = false;
60 iscellaligned = false;
61 isbold = false;
62 isitalic = false;
63 iscolorchanged = false;
64 cellx = -1;
65 celly = -1;
68 fontsize = 11;
72 cellh = 30.0f;
73 cellw = 80.0f;
75 cellcontent = "";
76 showncontent = "";
77 overflowcontent = "";
79 }
80 };
81
82 enum {
87 };
88
89 enum {
97 };
98
99 enum {
103 };
104
105 enum {
114 };
115
116 enum {
119 };
120
121 const int maxcolumnnum = 16384;
122 const int maxrownum = 131071;
123
125 virtual ~gGUIGrid();
126
127 void set(gBaseApp* root, gBaseGUIObject* topParentGUIObject, gBaseGUIObject* parentGUIObject, int parentSlotLineNo, int parentSlotColumnNo, int x, int y, int w, int h);
128 void setGrid(int rowNum, int columnNum);
129 void setRowNum(int rowNum);
131 void setColumnNum(int columnNum);
133
134 void setCellFont(int fontNo);
135 void setCellFont(Cell* cell, int fontNo);
136 void setCellFont(const std::string& cell, int fontNo);
137 void setCellsFont(std::deque<Cell*> cells, int fontNo);
138 void setCellsFont(Cell* cell1, Cell* cell2, int fontNo);
139 void setCellsFont(const std::string& cell1, const std::string& cell2, int fontNo);
140
143 void setCellFontBold(const std::string& cell);
144 void setCellsFontBold(std::deque<Cell*> cells);
145 void setCellsFontBold(Cell* cell1, Cell* cell2);
146 void setCellsFontBold(const std::string& cell1, const std::string& cell2);
147
150 void setCellFontItalic(const std::string& cell);
151 void setCellsFontItalic(std::deque<Cell*> cells);
152 void setCellsFontItalic(Cell* cell1, Cell* cell2);
153 void setCellsFontItalic(const std::string& cell1, const std::string& cell2);
154
155 void setCellFontSize(int fontSize);
156 void setCellFontSize(Cell* cell, int fontSize);
157 void setCellFontSize(const std::string& cell, int fontSize);
158 void setCellsFontSize(std::deque<Cell*> cells, int fontSize);
159 void setCellsFontSize(Cell* cell1, Cell* cell2, int fontSize);
160 void setCellsFontSize(const std::string& cell1, const std::string& cell2, int fontSize);
161
163 void setCellFontColor(Cell* cell, gColor* fontColor = fontcolor);
164 void setCellFontColor(const std::string& cell, gColor* fontColor = fontcolor);
165 void setCellsFontColor(std::deque<Cell*> cells, gColor* fontColor = fontcolor);
166 void setCellsFontColor(Cell* cell1, Cell* cell2, gColor* fontColor = fontcolor);
167 void setCellsFontColor(const std::string& cell1, const std::string& cell2, gColor* fontColor = fontcolor);
168
169 void setCellLine(int lineNo, bool clicked = true);
170 void setCellLine(Cell* cell, int lineNo, bool clicked = true);
171 void setCellLine(const std::string& cell, int lineNo, bool clicked = true);
172 void setCellsLine(std::deque<Cell*> cells, int lineNo, bool clicked = true);
173 void setCellsLine(Cell* cell1, Cell* cell2, int lineNo, bool clicked = true);
174 void setCellsLine(const std::string& cell1, const std::string& cell2, int lineNo, bool clicked = true);
175
176 void setCellContent(Cell* cell, const std::string& cellContent);
177 void setCellContent(int rowNo, int columnNo, const std::string& cellContent);
178 void setCellContent(const std::string& cell, const std::string& cellContent);
179 void setCellsContent(std::deque<Cell*> cells, std::vector<std::string> contents);
180 void setCellsContent(Cell* cell1, Cell* cell2, std::vector<std::string> contents);
181 void setCellsContent(const std::string& cell1, const std::string& cell2, std::vector<std::string> contents);
182
183 void setCellAlignment(int cellAlignment, bool clicked = true);
184 void setCellAlignment(Cell* cell, int cellAlignment);
185 void setCellAlignment(const std::string& cell, int cellAlignment);
186 void setCellsAlignment(std::deque<Cell*> cells, int cellAlignment);
187 void setCellsAlignment(Cell* cell1, Cell* cell2, int cellAlignment);
188 void setCellsAlignment(const std::string& cell1, const std::string& cell2, int cellAlignment);
189
190 void setCellReadOnly(Cell* cell, bool readonly);
191 void setCellReadOnly(int rowNo, int columnNo, bool readonly);
192 void setCellReadOnly(const std::string& cell, bool readonly);
193 void setRowReadOnly(int rowNo, bool readonly);
194 void setColumnReadOnly(int columnNo, bool readonly);
195
196 void setSelectedFrameColor(gColor* selectedFrameColor);
197 void setSelectedAreaColor(gColor* selectedAreaColor);
198
199 void setColumnWidth(int columnNo, float width);
200 void setRowHeight(int rowNo, float height);
201
202 void selectCell(Cell* cell);
203 void selectCell(int rowNo, int columnNo);
204 void selectCell(Cell* cell1, Cell* cell2);
205 void selectCell(const std::string& cell);
206 void selectCell(const std::string& cell1, const std::string& cell2);
207
208 Cell* getCell(const std::string& cellID);
209 Cell* getCell(int rowNo, int columnNo);
212 std::deque<Cell*> getSelectedCells();
213 std::string getColumnName(int columnNo);
214 int getColumnNo(const std::string& columnName);
215 float getColumnWidth(int columnNo);
216 float getRowHeight(int rowNo);
217
219
228
229 void update();
230
231 void keyPressed(int key);
232 void keyReleased(int key);
233 void charPressed(unsigned int codepoint);
234 void mousePressed(int x, int y, int button);
235 void mouseReleased(int x, int y, int button);
236 void mouseDragged(int x, int y, int button);
237 void mouseScrolled(int x, int y);
238 int getCursor(int x, int y);
239
240 void setEnterDirection(int enterDirection);
242
243 void clear();
244
245private:
246 static const int mousetolerance = 5;
247 const std::string errormessage = "Error";
248
249 std::string fixTextFunction(const std::string& text, int index);
250 std::string fixNumeric(const std::string& text);
251 std::string fixOverflowText(Cell& thisCell, Cell& otherCell);
252
253 std::string getTextColumn(const std::string& text);
254 int getCellNo(int rowNo, int columnNo);
255 int getNearestFilledCell(int index);
256
257 void fillCell(int cellNo, const std::string& tempstr);
258 float makeSum(int c1, int r1, int c2, int r2);
259 float makeFourOperation(const std::string& cell1, const std::string& cell2, char operation, const std::string& value1symbol = "", const std::string& value2symbol = "");
260 float calculateCurrentX(int columnNo);
261 float calculateCurrentY(int rowNo);
262 bool isNumeric(const std::string& text);
263
264 void addUndoStack(int process);
265 void addRedoStack();
266 void addOrChangeColumnWidth(int columnNo, float w);
267 void addOrChangeRowHeight(int rowNo, float h);
268 void addOrChangeFunction(int functionSenderNo);
269
270 void makeDefaultCell();
271 void removeFunction(int cellNo);
272 void operateFunction(int functionNo);
273
274 void updateAllAffectedCellWidths(int columnNo, float diff);
275 void updateAllAffectedCellHeights(int rowNo, float diff);
276 void changeSelectedCell(int amount);
277 void changeCell(int cellNo);
278 void setSelectedCells(bool takeAll = false);
279 void resetSelectedIndexes();
280
281 void copyCells();
282 void pasteCells();
283 void makeUndo();
284 void makeRedo();
285
286 int createCell(int rowNo, int columnNo);
291 int createCell(int index, int rowNo, int columnNo);
292 void createTextBox();
293
294 void checkCellType(int cellIndex);
295 void showCells();
296 void showCell(int rowNo, int columnNo);
297
304 void editCell(Cell& cell, bool clear = false);
305
306 void disableTextbox();
307
308 void updateTotalSize();
309 void adjustScrollToFocusSelected();
310
311 uint64_t hashCell(int row, int column) {
312 return (uint64_t)row << 32L | column;
313 }
314
315 std::unordered_map<uint64_t, int> cellmap;
316 std::deque<Cell> allcells;
317 std::deque<int> selectedcells;
318 std::deque<std::array<float, 2>> gridboxesw;
319 std::deque<std::array<float, 2>> gridboxesh;
320 std::deque<std::string> functionindexes;
321 std::deque<std::deque<std::string>> functions;
322 std::vector<std::string> copiedcellvalues;
323 std::stack<int> undoprocessstack;
324 std::stack<std::string> undovaluestack;
325 std::stack<std::stack<std::string>> undostack;
326 std::stack<std::deque<int>> undocellstack;
327 std::stack<int> redoprocessstack;
328 std::stack<std::string> redovaluestack;
329 std::stack<std::stack<std::string>> redostack;
330 std::stack<std::deque<int>> redocellstack;
331 gGUIManager* manager;
332 gGUITextbox textbox;
333 gColor selectedframecolor, selectedareacolor, selectedareadarkcolor;
334 bool isselected, isrowselected, iscolumnselected;
335 bool istextboxactive;
336 bool isdoubleclicked;
337 bool shiftpressed, ctrlpressed;
338 bool ctrlcpressed, ctrlvpressed, ctrlzpressed, ctrlypressed;
339 int selectedbox;
340 int selectedtitle;
341 int rownum, columnnum;
342 int rowtitle;
343 int columntitle;
344 int cursor;
345 int currentrow, currentcolumn;
346 int firstcursorposx, firstcursorposy;
347 int firstselectedcell, lastselectedcell;
348 int lastdraggedcell;
349 float gridboxw, gridboxh, gridboxwhalf;
350 float gridx, gridy, gridw, gridh;
351 long clicktime, previousclicktime, firstclicktime, clicktimediff;
352 std::string strflag;
353 int enterdirection;
354};
355
356#endif /* UI_GGUIGRID_H_ */
Definition gBaseApp.h:16
Definition gBaseGUIObject.h:18
gBaseApp * root
Definition gBaseGUIObject.h:147
@ TEXTALIGNMENT_LEFT
Definition gBaseGUIObject.h:24
int width
Definition gBaseGUIObject.h:120
int height
Definition gBaseGUIObject.h:120
static gColor * fontcolor
Definition gBaseGUIObject.h:134
Definition gColor.h:17
Definition gGUIGrid.h:23
void setCellLine(Cell *cell, int lineNo, bool clicked=true)
void setCellFontSize(Cell *cell, int fontSize)
void setCellsContent(const std::string &cell1, const std::string &cell2, std::vector< std::string > contents)
void setCellsAlignment(std::deque< Cell * > cells, int cellAlignment)
@ PROCESS_TEXT
Definition gGUIGrid.h:106
@ PROCESS_FONTSTATE
Definition gGUIGrid.h:108
@ PROCESS_COLOR
Definition gGUIGrid.h:111
@ PROCESS_FONTSIZE
Definition gGUIGrid.h:109
@ PROCESS_ALL
Definition gGUIGrid.h:113
@ PROCESS_FONT
Definition gGUIGrid.h:107
@ PROCESS_LINE
Definition gGUIGrid.h:112
@ PROCESS_ALIGNMENT
Definition gGUIGrid.h:110
void setCellsContent(Cell *cell1, Cell *cell2, std::vector< std::string > contents)
@ TEXTLINE_NONE
Definition gGUIGrid.h:83
@ TEXTLINE_STRIKE
Definition gGUIGrid.h:86
@ TEXTLINE_UNDER
Definition gGUIGrid.h:84
@ TEXTLINE_DOUBLEUNDER
Definition gGUIGrid.h:85
void setSelectedFrameColor(gColor *selectedFrameColor)
void setCellsFontItalic(Cell *cell1, Cell *cell2)
void setCellsFontBold(const std::string &cell1, const std::string &cell2)
void setCellReadOnly(Cell *cell, bool readonly)
void drawRowLines()
void set(gBaseApp *root, gBaseGUIObject *topParentGUIObject, gBaseGUIObject *parentGUIObject, int parentSlotLineNo, int parentSlotColumnNo, int x, int y, int w, int h)
void setEnterDirection(int enterDirection)
void drawCellContents()
void setCellsFontBold(std::deque< Cell * > cells)
void selectCell(Cell *cell1, Cell *cell2)
void setCellsFontSize(Cell *cell1, Cell *cell2, int fontSize)
void setCellAlignment(int cellAlignment, bool clicked=true)
void setCellsFontItalic(std::deque< Cell * > cells)
void setCellFontColor(const std::string &cell, gColor *fontColor=fontcolor)
void setCellFont(const std::string &cell, int fontNo)
void setCellFontColor(gColor *fontColor=fontcolor)
void setCellsFontColor(const std::string &cell1, const std::string &cell2, gColor *fontColor=fontcolor)
void drawRowHeader()
gColor * getSelectedAreaColor()
void selectCell(int rowNo, int columnNo)
void setCellAlignment(Cell *cell, int cellAlignment)
void setCellContent(const std::string &cell, const std::string &cellContent)
void setCellsLine(std::deque< Cell * > cells, int lineNo, bool clicked=true)
void setCellReadOnly(const std::string &cell, bool readonly)
void setCellsFontSize(std::deque< Cell * > cells, int fontSize)
void setCellAlignment(const std::string &cell, int cellAlignment)
void setCellFontItalic()
float getRowHeight(int rowNo)
int getEnterDirection()
void drawCellBackground()
std::deque< Cell * > getSelectedCells()
void drawColumnHeader()
void setCellsFontColor(std::deque< Cell * > cells, gColor *fontColor=fontcolor)
void setCellFontItalic(Cell *cell)
void setCellsContent(std::deque< Cell * > cells, std::vector< std::string > contents)
void setCellFontSize(int fontSize)
void setCellsFontColor(Cell *cell1, Cell *cell2, gColor *fontColor=fontcolor)
gColor * getSelectedFrameColor()
void setRowHeight(int rowNo, float height)
void setColumnWidth(int columnNo, float width)
void mouseDragged(int x, int y, int button)
@ FUNCTION_TYPE
Definition gGUIGrid.h:100
@ FUNCTION_SENDER
Definition gGUIGrid.h:101
@ FUNCTION_FIRSTINDEX
Definition gGUIGrid.h:102
void setCellLine(const std::string &cell, int lineNo, bool clicked=true)
void clear()
void setCellsLine(const std::string &cell1, const std::string &cell2, int lineNo, bool clicked=true)
void setColumnNum(int columnNum)
@ FUNCTIONTYPE_NONE
Definition gGUIGrid.h:90
@ FUNCTIONTYPE_SUB
Definition gGUIGrid.h:94
@ FUNCTIONTYPE_ADD
Definition gGUIGrid.h:93
@ FUNCTIONTYPE_DIVIDE
Definition gGUIGrid.h:95
@ FUNCTIONTYPE_SUM
Definition gGUIGrid.h:92
@ FUNCTIONTYPE_MULTIPLY
Definition gGUIGrid.h:96
@ FUNCTIONTYPE_COPY
Definition gGUIGrid.h:91
void setCellsFontItalic(const std::string &cell1, const std::string &cell2)
virtual ~gGUIGrid()
int getCursor(int x, int y)
void digitToString()
void update()
void mouseScrolled(int x, int y)
void setCellFontItalic(const std::string &cell)
void selectCell(const std::string &cell1, const std::string &cell2)
void setGrid(int rowNum, int columnNum)
void setCellsFont(std::deque< Cell * > cells, int fontNo)
void setCellFontBold()
void setColumnReadOnly(int columnNo, bool readonly)
void setCellsFont(Cell *cell1, Cell *cell2, int fontNo)
void setCellFontColor(Cell *cell, gColor *fontColor=fontcolor)
void setSelectedAreaColor(gColor *selectedAreaColor)
void setCellFontBold(const std::string &cell)
int getRowNum()
void setCellLine(int lineNo, bool clicked=true)
int getColumnNum()
void keyPressed(int key)
void selectCell(const std::string &cell)
const int maxrownum
Definition gGUIGrid.h:122
void setRowReadOnly(int rowNo, bool readonly)
const int maxcolumnnum
Definition gGUIGrid.h:121
void drawContent()
std::string getColumnName(int columnNo)
void mousePressed(int x, int y, int button)
void setCellsFont(const std::string &cell1, const std::string &cell2, int fontNo)
void setRowNum(int rowNum)
void mouseReleased(int x, int y, int button)
void setCellFont(Cell *cell, int fontNo)
void setCellsFontBold(Cell *cell1, Cell *cell2)
void setCellFontSize(const std::string &cell, int fontSize)
void setCellReadOnly(int rowNo, int columnNo, bool readonly)
Cell * getCell(int rowNo, int columnNo)
void charPressed(unsigned int codepoint)
void setCellsLine(Cell *cell1, Cell *cell2, int lineNo, bool clicked=true)
void setCellsAlignment(Cell *cell1, Cell *cell2, int cellAlignment)
void keyReleased(int key)
float getColumnWidth(int columnNo)
void setCellContent(Cell *cell, const std::string &cellContent)
void selectCell(Cell *cell)
void setCellFont(int fontNo)
void setCellFontBold(Cell *cell)
void setCellContent(int rowNo, int columnNo, const std::string &cellContent)
@ ENTERDIRECTION_RIGHT
Definition gGUIGrid.h:118
@ ENTERDIRECTION_DOWN
Definition gGUIGrid.h:117
void drawColumnLines()
void drawSelectedArea()
int getColumnNo(const std::string &columnName)
void setCellsFontSize(const std::string &cell1, const std::string &cell2, int fontSize)
void setCellsAlignment(const std::string &cell1, const std::string &cell2, int cellAlignment)
Cell * getCell(const std::string &cellID)
Definition gGUIManager.h:37
@ FONTTYPE_REGULAR
Definition gGUIManager.h:44
@ FONT_FREESANS
Definition gGUIManager.h:51
Definition gGUIScrollable.h:68
Definition gGUITextbox.h:46
Definition gGUIGrid.h:25
int fontstate
Definition gGUIGrid.h:41
float cellw
Definition gGUIGrid.h:47
bool readonly
Definition gGUIGrid.h:54
int fontsize
Definition gGUIGrid.h:42
int cellrowno
Definition gGUIGrid.h:38
bool removed
Definition gGUIGrid.h:53
std::string cellcontent
Definition gGUIGrid.h:49
int cellcolumnno
Definition gGUIGrid.h:39
bool iscolorchanged
Definition gGUIGrid.h:35
bool iscellselected
Definition gGUIGrid.h:31
int lineno
Definition gGUIGrid.h:44
std::string overflowcontent
Definition gGUIGrid.h:51
int cellalignment
Definition gGUIGrid.h:43
float textmoveamount
Definition gGUIGrid.h:48
int celltype
Definition gGUIGrid.h:45
int celly
Definition gGUIGrid.h:37
Cell()
Definition gGUIGrid.h:56
bool isitalic
Definition gGUIGrid.h:34
bool iscellaligned
Definition gGUIGrid.h:32
std::string showncontent
Definition gGUIGrid.h:50
bool isbold
Definition gGUIGrid.h:33
int cellx
Definition gGUIGrid.h:36
gColor cellfontcolor
Definition gGUIGrid.h:52
float cellh
Definition gGUIGrid.h:46
int fontnum
Definition gGUIGrid.h:40
@ TYPE_STRING
Definition gGUIGrid.h:27
@ TYPE_DIGIT
Definition gGUIGrid.h:28