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;
128 userData = this, delay = 2.5;
140 GuiDataWindow getWindowConfig(const char * configId)
142 //sflnprintf("GuiConfigData::getWindowConfig\n");
143 GuiDataWindow guiData = null;
145 guiData = windows[configId];
149 GuiDataWindow insertWindowConfig(const char * configId, bool startSaving, bool *isNew)
151 //sflnprintf("GuiConfigData::insertWindowConfig\n");
152 GuiDataWindow guiData = null;
157 if(!(guiData = windows[configId]))
159 windows[configId] = guiData = { };
163 guiData.saving = true;
166 guiData = getWindowConfig(configId);
167 if(/*!startSaving && */guiData && (!guiData.saving || guiData.loading))
172 void recordWindowPosition(GuiDataWindow guiData, Window window)
174 sflnprintf("GuiConfigData::recordWindowPosition\n");
175 guiData.position = { window.normalAnchor.left.distance, window.normalAnchor.top.distance };
176 sflnPrintLn("recordWindowPosition(guiData.position == ", guiData.position, ", created == ", window.created, ")");
179 void recordWindowSize(GuiDataWindow guiData, Window window)
181 sflnprintf("GuiConfigData::recordWindowSize\n");
183 //sflnPrintLn(guiData.size);
184 //s = window.normalSizeAnchor.size;
186 guiData.size = window.normalSizeAnchor.size;
187 //sflnPrintLn(guiData.size);
188 //sflnPrintLn(window.size);
189 //sflnPrintLn("recordWindowSize(guiData.size == ", guiData.size, ", created == ", window.created, ")");
192 void applyWindowConfig(const char * configId, Window window)
194 sflnprintf("GuiConfigData::applyWindowConfig\n");
195 GuiDataWindow guiData = getWindowConfig(configId);
198 guiData.loading = true;
199 window.state = normal;
200 applyWindowPosition(window, guiData);
201 applyWindowSize(window, guiData);
202 window.Move(guiData.position.x, guiData.position.y, guiData.size.w, guiData.size.h);
203 sflnPrintLn("applyWindowConfig(window.size == ", window.size, ", created == ", window.created, ")");
204 window.state = guiData.state;
205 guiData.loading = false;
209 void applyWindowPosition(Window window, GuiDataWindow guiData)
211 sflnprintf("GuiConfigData::applyWindowPosition\n");
212 window.position = guiData.position;
213 sflnPrintLn("applyWindowPosition(window.position == ", window.position, ", created == ", window.created, ")");
216 void applyWindowSize(Window window, GuiDataWindow guiData)
218 sflnprintf("GuiConfigData::applyWindowSize\n");
219 if(guiData.size.w && guiData.size.h)
221 window.size = guiData.size;
222 sflnPrintLn("applyWindowSize(window.size == ", window.size, ", created == ", window.created, ")");
226 void applyPaneSplitterConfig(const char * configId, PaneSplitter paneSplitter)
228 //sflnprintf("GuiConfigData::applyPaneSplitterConfig\n");
229 GuiDataPaneSplitter guiData = paneSplitters[configId];
232 guiData.loading = true;
233 paneSplitter.scaleSplit = guiData.scaleSplit;
234 guiData.loading = false;
239 class SavedConfigWindow : Window
241 virtual GuiConfigData getGuiConfigData() { return null; }
242 virtual const char * getGuiConfigInstanceId() { return _class.name; }
246 sflnprintf("SavedConfigWindow::OnCreate\n");
247 bool result = Window::OnCreate();
250 GuiConfigData data = getGuiConfigData();
251 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
258 sflnprintf("SavedConfigWindow::OnPostCreate\n");
259 bool result = Window::OnPostCreate();
262 GuiConfigData data = getGuiConfigData();
269 /*bool OnPostCreate()
271 //sflnprintf("SavedConfigWindow::OnPostCreate\n");
272 GuiConfigData data = getGuiConfigData();
273 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
277 bool OnStateChange(WindowState state, Modifiers mods)
279 sflnprintf("SavedConfigWindow::OnStateChange\n");
280 GuiConfigData data = getGuiConfigData();
281 if(data) data.saveWindowState(getGuiConfigInstanceId(), this, state);
285 void OnPosition(int x, int y, int width, int height)
287 sflnprintf("SavedConfigWindow::OnPosition(%i, %i, %i, %i)\n", x, y, width, height);
288 GuiConfigData data = getGuiConfigData();
289 if(data) data.saveWindowPosition(getGuiConfigInstanceId(), this, { x, y }, clientSize);
292 void OnResize(int width, int height)
294 sflnprintf("SavedConfigWindow::OnResize(%i, %i) -- (%i, %i)\n", width, height, this.normalSizeAnchor.size.w, this.normalSizeAnchor.size.h);
295 GuiConfigData data = getGuiConfigData();
296 if(data) data.saveWindowSize(getGuiConfigInstanceId(), this, clientSize);
299 bool OnClose(bool parentClosing)
301 sflnprintf("SavedConfigWindow::OnClose\n");
302 GuiConfigData data = getGuiConfigData();
303 if(data) data.saveWindowClose(getGuiConfigInstanceId());
308 class GuiDataWindow : struct
319 class SavedConfigPaneSplitter : PaneSplitter
321 virtual GuiConfigData getGuiConfigData() { return null; }
322 virtual const char * getGuiConfigInstanceId() { return _class.name; }
326 //sflnprintf("SavedConfigPaneSplitter::OnPostCreate\n");
327 GuiConfigData data = getGuiConfigData();
328 if(data) data.applyPaneSplitterConfig(getGuiConfigInstanceId(), this);
332 bool NotifyResized(SavedConfigPaneSplitter splitter)
334 //sflnprintf("SavedConfigPaneSplitter::NotifyResized\n");
335 GuiConfigData data = splitter.getGuiConfigData();
336 if(data) data.savePaneSplitterSize(splitter.getGuiConfigInstanceId(), splitter.scaleSplit);
341 class GuiDataPaneSplitter : struct