2 public import static "ecere"
7 // source file line number printf (sflnprintf)
12 #define sflnprintf(format,...) printf("%s:% 5d: " format, __FILE__, __LINE__, ##__VA_ARGS__)
13 #define sflnPrintLn(...) PrintLn(__FILE__, ":", __LINE__, ": ", ##__VA_ARGS__)
16 #define sflnprintf(format,...) DoNothing()
17 #define sflnPrintLn(...) DoNothing()
22 virtual bool onSave();
23 virtual void onModified()
30 Map<String, GuiDataWindow> windows;
31 Map<String, GuiDataPaneSplitter> paneSplitters;
33 void saveWindowInit(const char * configId, Window window)
35 sflnprintf("GuiConfigData::saveWindowInit\n");
36 applyWindowConfig(configId, window);
39 GuiDataWindow guiData = insertWindowConfig(configId, true, &isNew);
42 if(window.state != minimized)
43 guiData.state = window.state;
44 if(!(window.normalAnchor.left.distance == 0 && window.normalAnchor.top.distance == 0 &&
45 window.normalSizeAnchor.size.w == 0 && window.normalSizeAnchor.size.h == 0))
47 recordWindowPosition(guiData, window);
48 recordWindowSize(guiData, window);
56 void saveWindowState(const char * configId, Window window, WindowState state)
58 sflnprintf("GuiConfigData::saveWindowState\n");
59 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
62 if(state != minimized)
63 guiData.state = state;
65 applyWindowSize(window, guiData);
70 void saveWindowPosition(const char * configId, Window window, Point position, Size size)
72 sflnprintf("GuiConfigData::saveWindowPosition\n");
73 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
74 if(guiData && window.state == normal)
76 if(!(window.normalAnchor.left.distance == 0 && window.normalAnchor.top.distance == 0 &&
77 window.normalSizeAnchor.size.w == 0 && window.normalSizeAnchor.size.h == 0))
79 recordWindowPosition(guiData, window);
80 recordWindowSize(guiData, window);
86 void saveWindowSize(const char * configId, Window window, Size size)
88 sflnprintf("GuiConfigData::saveWindowSize\n");
89 GuiDataWindow guiData = insertWindowConfig(configId, false, null);
90 if(guiData && window.state == normal)
92 recordWindowSize(guiData, window);
97 void saveWindowClose(const char * configId)
99 sflnprintf("GuiConfigData::saveWindowClose\n");
100 GuiDataWindow guiData = getWindowConfig(configId);
102 guiData.saving = false;
107 void savePaneSplitterSize(const char * configId, double scaleSplit)
109 sflnprintf("GuiConfigData::savePaneSplitterSize\n");
110 GuiDataPaneSplitter guiData = null;
113 if(!(guiData = paneSplitters[configId]))
114 paneSplitters[configId] = guiData = { };
117 guiData.scaleSplit = scaleSplit;
136 paneSplitters.Free();
137 delete paneSplitters;
143 userData = this, delay = 2.5;
155 GuiDataWindow getWindowConfig(const char * configId)
157 //sflnprintf("GuiConfigData::getWindowConfig\n");
158 GuiDataWindow guiData = null;
160 guiData = windows[configId];
164 GuiDataWindow insertWindowConfig(const char * configId, bool startSaving, bool *isNew)
166 //sflnprintf("GuiConfigData::insertWindowConfig\n");
167 GuiDataWindow guiData = null;
172 if(!(guiData = windows[configId]))
174 windows[configId] = guiData = { };
178 guiData.saving = true;
181 guiData = getWindowConfig(configId);
182 if(/*!startSaving && */guiData && (!guiData.saving || guiData.loading))
187 void recordWindowPosition(GuiDataWindow guiData, Window window)
189 sflnprintf("GuiConfigData::recordWindowPosition\n");
190 guiData.position = { window.normalAnchor.left.distance, window.normalAnchor.top.distance };
191 sflnPrintLn("recordWindowPosition(guiData.position == ", guiData.position, ", created == ", window.created, ")");
194 void recordWindowSize(GuiDataWindow guiData, Window window)
196 sflnprintf("GuiConfigData::recordWindowSize\n");
198 //sflnPrintLn(guiData.size);
199 //s = window.normalSizeAnchor.size;
201 guiData.size = window.normalSizeAnchor.size;
202 //sflnPrintLn(guiData.size);
203 //sflnPrintLn(window.size);
204 //sflnPrintLn("recordWindowSize(guiData.size == ", guiData.size, ", created == ", window.created, ")");
207 void applyWindowConfig(const char * configId, Window window)
209 sflnprintf("GuiConfigData::applyWindowConfig\n");
210 GuiDataWindow guiData = getWindowConfig(configId);
213 guiData.loading = true;
214 window.state = normal;
215 applyWindowPosition(window, guiData);
216 applyWindowSize(window, guiData);
217 window.Move(guiData.position.x, guiData.position.y, guiData.size.w, guiData.size.h);
218 sflnPrintLn("applyWindowConfig(window.size == ", window.size, ", created == ", window.created, ")");
219 window.state = guiData.state;
220 guiData.loading = false;
224 void applyWindowPosition(Window window, GuiDataWindow guiData)
226 sflnprintf("GuiConfigData::applyWindowPosition\n");
227 window.position = guiData.position;
228 sflnPrintLn("applyWindowPosition(window.position == ", window.position, ", created == ", window.created, ")");
231 void applyWindowSize(Window window, GuiDataWindow guiData)
233 sflnprintf("GuiConfigData::applyWindowSize\n");
234 if(guiData.size.w && guiData.size.h)
236 window.size = guiData.size;
237 sflnPrintLn("applyWindowSize(window.size == ", window.size, ", created == ", window.created, ")");
241 void applyPaneSplitterConfig(const char * configId, PaneSplitter paneSplitter)
243 //sflnprintf("GuiConfigData::applyPaneSplitterConfig\n");
244 GuiDataPaneSplitter guiData = paneSplitters[configId];
247 guiData.loading = true;
248 paneSplitter.scaleSplit = guiData.scaleSplit;
249 guiData.loading = false;
254 class SavedConfigWindow : Window
256 virtual GuiConfigData getGuiConfigData() { return null; }
257 virtual const char * getGuiConfigInstanceId() { return _class.name; }
261 sflnprintf("SavedConfigWindow::OnCreate\n");
262 bool result = Window::OnCreate();
265 GuiConfigData data = getGuiConfigData();
266 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
273 sflnprintf("SavedConfigWindow::OnPostCreate\n");
274 bool result = Window::OnPostCreate();
277 GuiConfigData data = getGuiConfigData();
284 /*bool OnPostCreate()
286 //sflnprintf("SavedConfigWindow::OnPostCreate\n");
287 GuiConfigData data = getGuiConfigData();
288 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
292 bool OnStateChange(WindowState state, Modifiers mods)
294 sflnprintf("SavedConfigWindow::OnStateChange\n");
295 GuiConfigData data = getGuiConfigData();
296 if(data) data.saveWindowState(getGuiConfigInstanceId(), this, state);
300 void OnPosition(int x, int y, int width, int height)
302 sflnprintf("SavedConfigWindow::OnPosition(%i, %i, %i, %i)\n", x, y, width, height);
303 GuiConfigData data = getGuiConfigData();
304 if(data) data.saveWindowPosition(getGuiConfigInstanceId(), this, { x, y }, clientSize);
307 void OnResize(int width, int height)
309 sflnprintf("SavedConfigWindow::OnResize(%i, %i) -- (%i, %i)\n", width, height, this.normalSizeAnchor.size.w, this.normalSizeAnchor.size.h);
310 GuiConfigData data = getGuiConfigData();
311 if(data) data.saveWindowSize(getGuiConfigInstanceId(), this, clientSize);
314 bool OnClose(bool parentClosing)
316 sflnprintf("SavedConfigWindow::OnClose\n");
317 GuiConfigData data = getGuiConfigData();
318 if(data) data.saveWindowClose(getGuiConfigInstanceId());
323 class GuiDataWindow : struct
334 class SavedConfigPaneSplitter : PaneSplitter
336 virtual GuiConfigData getGuiConfigData() { return null; }
337 virtual const char * getGuiConfigInstanceId() { return _class.name; }
341 //sflnprintf("SavedConfigPaneSplitter::OnPostCreate\n");
342 GuiConfigData data = getGuiConfigData();
343 if(data) data.applyPaneSplitterConfig(getGuiConfigInstanceId(), this);
347 bool NotifyResized(SavedConfigPaneSplitter splitter)
349 //sflnprintf("SavedConfigPaneSplitter::NotifyResized\n");
350 GuiConfigData data = splitter.getGuiConfigData();
351 if(data) data.savePaneSplitterSize(splitter.getGuiConfigInstanceId(), splitter.scaleSplit);
356 class GuiDataPaneSplitter : struct