3 // source file line number printf (sflnprintf)
8 #define sflnprintf(format,...) printf("%s:% 5d: " format, __FILE__, __LINE__, ##__VA_ARGS__)
9 #define sflnPrintLn(...) PrintLn(__FILE__, ":", __LINE__, ": ", ##__VA_ARGS__)
12 #define sflnprintf(format,...) DoNothing()
13 #define sflnPrintLn(...) DoNothing()
18 virtual bool onSave();
19 virtual void onModified()
26 Map<String, GuiDataWindow> windows;
27 Map<String, GuiDataPaneSplitter> paneSplitters;
29 void saveWindowInit(const char * configId, Window window)
31 sflnprintf("GuiConfigData::saveWindowInit\n");
32 applyWindowConfig(configId, window);
35 GuiDataWindow guiData = insertWindowConfig(configId, true, &isNew);
38 if(window.state != minimized)
39 guiData.state = window.state;
40 if(!(window.normalAnchor.left.distance == 0 && window.normalAnchor.top.distance == 0 &&
41 window.normalSizeAnchor.size.w == 0 && window.normalSizeAnchor.size.h == 0))
43 recordWindowPosition(guiData, window);
44 recordWindowSize(guiData, window);
52 void saveWindowState(const char * configId, Window window, WindowState state)
54 sflnprintf("GuiConfigData::saveWindowState\n");
55 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
58 if(state != minimized)
59 guiData.state = state;
61 applyWindowSize(window, guiData);
66 void saveWindowPosition(const char * configId, Window window, Point position, Size size)
68 sflnprintf("GuiConfigData::saveWindowPosition\n");
69 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
70 if(guiData && window.state == normal)
72 if(!(window.normalAnchor.left.distance == 0 && window.normalAnchor.top.distance == 0 &&
73 window.normalSizeAnchor.size.w == 0 && window.normalSizeAnchor.size.h == 0))
75 recordWindowPosition(guiData, window);
76 recordWindowSize(guiData, window);
82 void saveWindowSize(const char * configId, Window window, Size size)
84 sflnprintf("GuiConfigData::saveWindowSize\n");
85 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
86 if(guiData && window.state == normal)
88 recordWindowSize(guiData, window);
93 void saveWindowClose(const char * configId)
95 sflnprintf("GuiConfigData::saveWindowClose\n");
96 GuiDataWindow guiData = getWindowConfig(configId);
98 guiData.saving = false;
103 void savePaneSplitterSize(const char * configId, double scaleSplit)
105 sflnprintf("GuiConfigData::savePaneSplitterSize\n");
106 GuiDataPaneSplitter guiData = null;
109 if(!(guiData = paneSplitters[configId]))
110 paneSplitters[configId] = guiData = { };
113 guiData.scaleSplit = scaleSplit;
132 paneSplitters.Free();
133 delete paneSplitters;
139 userData = this, delay = 2.5;
151 GuiDataWindow getWindowConfig(const char * configId)
153 //sflnprintf("GuiConfigData::getWindowConfig\n");
154 GuiDataWindow guiData = null;
156 guiData = windows[configId];
160 GuiDataWindow insertWindowConfig(const char * configId, bool startSaving, bool *isNew)
162 //sflnprintf("GuiConfigData::insertWindowConfig\n");
163 GuiDataWindow guiData = null;
168 if(!(guiData = windows[configId]))
170 windows[configId] = guiData = { };
174 guiData.saving = true;
177 guiData = getWindowConfig(configId);
178 if(/*!startSaving && */guiData && (!guiData.saving || guiData.loading))
183 void recordWindowPosition(GuiDataWindow guiData, Window window)
185 sflnprintf("GuiConfigData::recordWindowPosition\n");
186 guiData.position = { window.normalAnchor.left.distance, window.normalAnchor.top.distance };
187 sflnPrintLn("recordWindowPosition(guiData.position == ", guiData.position, ", created == ", window.created, ")");
190 void recordWindowSize(GuiDataWindow guiData, Window window)
192 sflnprintf("GuiConfigData::recordWindowSize\n");
194 //sflnPrintLn(guiData.size);
195 //s = window.normalSizeAnchor.size;
197 guiData.size = window.normalSizeAnchor.size;
198 //sflnPrintLn(guiData.size);
199 //sflnPrintLn(window.size);
200 //sflnPrintLn("recordWindowSize(guiData.size == ", guiData.size, ", created == ", window.created, ")");
203 void applyWindowConfig(const char * configId, Window window)
205 sflnprintf("GuiConfigData::applyWindowConfig\n");
206 GuiDataWindow guiData = getWindowConfig(configId);
209 guiData.loading = true;
210 window.state = normal;
211 applyWindowPosition(window, guiData);
212 applyWindowSize(window, guiData);
213 window.Move(guiData.position.x, guiData.position.y, guiData.size.w, guiData.size.h);
214 sflnPrintLn("applyWindowConfig(window.size == ", window.size, ", created == ", window.created, ")");
215 window.state = guiData.state;
216 guiData.loading = false;
220 void applyWindowPosition(Window window, GuiDataWindow guiData)
222 sflnprintf("GuiConfigData::applyWindowPosition\n");
223 window.position = guiData.position;
224 sflnPrintLn("applyWindowPosition(window.position == ", window.position, ", created == ", window.created, ")");
227 void applyWindowSize(Window window, GuiDataWindow guiData)
229 sflnprintf("GuiConfigData::applyWindowSize\n");
230 if(guiData.size.w && guiData.size.h)
232 window.size = guiData.size;
233 sflnPrintLn("applyWindowSize(window.size == ", window.size, ", created == ", window.created, ")");
237 void applyPaneSplitterConfig(const char * configId, PaneSplitter paneSplitter)
239 //sflnprintf("GuiConfigData::applyPaneSplitterConfig\n");
240 GuiDataPaneSplitter guiData = paneSplitters[configId];
243 guiData.loading = true;
244 paneSplitter.scaleSplit = guiData.scaleSplit;
245 guiData.loading = false;
250 class SavedConfigWindow : Window
252 virtual GuiConfigData getGuiConfigData() { return null; }
253 virtual const char * getGuiConfigInstanceId() { return _class.name; }
257 sflnprintf("SavedConfigWindow::OnCreate\n");
258 bool result = Window::OnCreate();
261 GuiConfigData data = getGuiConfigData();
262 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
269 sflnprintf("SavedConfigWindow::OnPostCreate\n");
270 bool result = Window::OnPostCreate();
273 GuiConfigData data = getGuiConfigData();
280 /*bool OnPostCreate()
282 //sflnprintf("SavedConfigWindow::OnPostCreate\n");
283 GuiConfigData data = getGuiConfigData();
284 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
288 bool OnStateChange(WindowState state, Modifiers mods)
290 sflnprintf("SavedConfigWindow::OnStateChange\n");
291 GuiConfigData data = getGuiConfigData();
292 if(data) data.saveWindowState(getGuiConfigInstanceId(), this, state);
296 void OnPosition(int x, int y, int width, int height)
298 sflnprintf("SavedConfigWindow::OnPosition(%i, %i, %i, %i)\n", x, y, width, height);
299 GuiConfigData data = getGuiConfigData();
300 if(data) data.saveWindowPosition(getGuiConfigInstanceId(), this, { x, y }, clientSize);
303 void OnResize(int width, int height)
305 sflnprintf("SavedConfigWindow::OnResize(%i, %i) -- (%i, %i)\n", width, height, this.normalSizeAnchor.size.w, this.normalSizeAnchor.size.h);
306 GuiConfigData data = getGuiConfigData();
307 if(data) data.saveWindowSize(getGuiConfigInstanceId(), this, clientSize);
310 bool OnClose(bool parentClosing)
312 sflnprintf("SavedConfigWindow::OnClose\n");
313 GuiConfigData data = getGuiConfigData();
314 if(data) data.saveWindowClose(getGuiConfigInstanceId());
319 class GuiDataWindow : struct
330 class SavedConfigPaneSplitter : PaneSplitter
332 virtual GuiConfigData getGuiConfigData() { return null; }
333 virtual const char * getGuiConfigInstanceId() { return _class.name; }
337 //sflnprintf("SavedConfigPaneSplitter::OnPostCreate\n");
338 GuiConfigData data = getGuiConfigData();
339 if(data) data.applyPaneSplitterConfig(getGuiConfigInstanceId(), this);
343 bool NotifyResized(SavedConfigPaneSplitter splitter)
345 //sflnprintf("SavedConfigPaneSplitter::NotifyResized\n");
346 GuiConfigData data = splitter.getGuiConfigData();
347 if(data) data.savePaneSplitterSize(splitter.getGuiConfigInstanceId(), splitter.scaleSplit);
352 class GuiDataPaneSplitter : struct