2 public import static "ecere"
10 virtual void onModified()
17 Map<String, GuiDataWindow> windows;
18 Map<String, GuiDataPaneSplitter> paneSplitters;
20 void saveWindowInit(const char * configId, Window window)
22 applyWindowConfig(configId, window);
25 GuiDataWindow guiData = insertWindowConfig(configId, true, &isNew);
28 if(window.state != minimized)
29 guiData.state = window.state;
30 recordWindowPosition(guiData, window);
31 recordWindowSize(guiData, window);
38 void saveWindowState(const char * configId, Window window, WindowState state)
40 GuiDataWindow guiData = insertWindowConfig(configId, true, null);
43 if(state != minimized)
44 guiData.state = state;
49 void saveWindowPosition(const char * configId, Window window, Point position, Size size)
51 GuiDataWindow guiData = insertWindowConfig(configId, true, null);
52 if(guiData && window.state == normal)
54 recordWindowPosition(guiData, window);
55 recordWindowSize(guiData, window);
60 void saveWindowSize(const char * configId, Window window, Size size)
62 GuiDataWindow guiData = insertWindowConfig(configId, true, null);
63 if(guiData && window.state == normal)
65 recordWindowSize(guiData, window);
70 void saveWindowClose(const char * configId)
72 GuiDataWindow guiData = getWindowConfig(configId);
74 guiData.saving = false;
79 void savePaneSplitterSize(const char * configId, double scaleSplit)
81 GuiDataPaneSplitter guiData = null;
84 if(!(guiData = paneSplitters[configId]))
85 paneSplitters[configId] = guiData = { };
88 guiData.scaleSplit = scaleSplit;
107 paneSplitters.Free();
108 delete paneSplitters;
114 userData = this, delay = 2.5;
126 GuiDataWindow getWindowConfig(const char * configId)
128 GuiDataWindow guiData = null;
130 guiData = windows[configId];
134 GuiDataWindow insertWindowConfig(const char * configId, bool startSaving, bool *isNew)
136 GuiDataWindow guiData = null;
141 if(!(guiData = windows[configId]))
143 windows[configId] = guiData = { };
147 guiData.saving = true;
150 guiData = getWindowConfig(configId);
151 if(/*!startSaving && */guiData && (!guiData.saving || guiData.loading))
156 void recordWindowPosition(GuiDataWindow guiData, Window window)
158 guiData.position = window.position;
161 void recordWindowSize(GuiDataWindow guiData, Window window)
163 guiData.size = window.size;
166 void applyWindowConfig(const char * configId, Window window)
168 GuiDataWindow guiData = getWindowConfig(configId);
171 guiData.loading = true;
172 window.state = normal;
173 applyWindowPosition(window, guiData);
174 applyWindowSize(window, guiData);
175 window.Move(guiData.position.x, guiData.position.y, guiData.size.w, guiData.size.h);
176 window.state = guiData.state;
177 guiData.loading = false;
181 void applyWindowPosition(Window window, GuiDataWindow guiData)
183 window.position = guiData.position;
186 void applyWindowSize(Window window, GuiDataWindow guiData)
188 window.size = guiData.size;
191 void applyPaneSplitterConfig(const char * configId, PaneSplitter paneSplitter)
193 GuiDataPaneSplitter guiData = paneSplitters[configId];
196 guiData.loading = true;
197 paneSplitter.scaleSplit = guiData.scaleSplit;
198 guiData.loading = false;
203 // TODO: Make this a WindowController (Note: it's currently missing OnStateChange)
204 class SavedConfigWindow : Window
206 virtual GuiConfigData getGuiConfigData() { return null; }
207 virtual const char * getGuiConfigInstanceId() { return _class.name; }
211 bool result = Window::OnCreate();
214 GuiConfigData data = getGuiConfigData();
215 if(data) data.saveWindowInit(getGuiConfigInstanceId(), this);
222 bool result = Window::OnPostCreate();
225 GuiConfigData data = getGuiConfigData();
232 bool OnStateChange(WindowState state, Modifiers mods)
234 GuiConfigData data = getGuiConfigData();
235 if(data) data.saveWindowState(getGuiConfigInstanceId(), this, state);
239 void OnPosition(int x, int y, int width, int height)
241 GuiConfigData data = getGuiConfigData();
242 if(data) data.saveWindowPosition(getGuiConfigInstanceId(), this, { x, y }, clientSize);
245 void OnResize(int width, int height)
247 GuiConfigData data = getGuiConfigData();
248 if(data) data.saveWindowSize(getGuiConfigInstanceId(), this, clientSize);
251 bool OnClose(bool parentClosing)
253 GuiConfigData data = getGuiConfigData();
254 if(data) data.saveWindowClose(getGuiConfigInstanceId());
259 class GuiDataWindow : struct
270 class SavedConfigPaneSplitter : PaneSplitter
272 virtual GuiConfigData getGuiConfigData() { return null; }
273 virtual const char * getGuiConfigInstanceId() { return _class.name; }
277 GuiConfigData data = getGuiConfigData();
278 if(data) data.applyPaneSplitterConfig(getGuiConfigInstanceId(), this);
282 bool NotifyResized(SavedConfigPaneSplitter splitter)
284 GuiConfigData data = splitter.getGuiConfigData();
285 if(data) data.savePaneSplitterSize(splitter.getGuiConfigInstanceId(), splitter.scaleSplit);
290 class GuiDataPaneSplitter : struct