annotate mde/gui/widget/layout.d @ 174:3d58adc17d20

Temporary commit to allow backup
author Diggory Hardy <diggory.hardy@gmail.com>
date Mon, 31 Aug 2009 13:54:23 +0200
parents 0dd49f333189
children 1cbde9807293
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
1 /* LICENSE BLOCK
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
2 Part of mde: a Modular D game-oriented Engine
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
3 Copyright © 2007-2008 Diggory Hardy
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
4
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
5 This program is free software: you can redistribute it and/or modify it under the terms
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
6 of the GNU General Public License as published by the Free Software Foundation, either
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
7 version 2 of the License, or (at your option) any later version.
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
8
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
10 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
11 See the GNU General Public License for more details.
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
12
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
13 You should have received a copy of the GNU General Public License
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
15
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
16 /// Gui layout widgets.
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
17 module mde.gui.widget.layout;
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
18
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
19 import mde.gui.widget.AParentWidget;
39
5132301e9ed7 Implemented widget saving.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 38
diff changeset
20 import mde.gui.exception;
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
21
137
9f035cd139c6 BIG commit. Major change: old Options class is gone, all content values are loaded and saved automatically. All options updated to reflect this, some changed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 136
diff changeset
22 import mde.content.Content;
72
159775502bb4 The first dynamically generated widget lists, based on Options, are here!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 71
diff changeset
23
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
24 import tango.util.container.HashMap;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
25
43
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
26 debug {
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
27 import tango.util.log.Log : Log, Logger;
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
28 private Logger logger;
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
29 static this () {
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
30 logger = Log.getLogger ("mde.gui.widget.layout");
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
31 }
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
32 }
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
33
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
34 /*************************************************************************************************
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
35 * Encapsulates a grid of Widgets.
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
36 *
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
37 * Currently there is no support for changing number of cells, sub-widgets or sub-widget properties
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
38 * (namely isW/HSizable) after this() has run.
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
39 *************************************************************************************************/
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
40 class GridLayoutWidget : GridWidget
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
41 {
65
891211f034f2 Changes to widgets: widgets may now get strings as creation data. Strings for TextWidgets can be set in files (in a temporary mannor).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 58
diff changeset
42 /** Constructor for a grid layout widget.
891211f034f2 Changes to widgets: widgets may now get strings as creation data. Strings for TextWidgets can be set in files (in a temporary mannor).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 58
diff changeset
43 *
891211f034f2 Changes to widgets: widgets may now get strings as creation data. Strings for TextWidgets can be set in files (in a temporary mannor).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 58
diff changeset
44 * Widget uses the initialisation data:
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
45 * ---
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
46 * ints = [widget_type, align_flags, rows, cols]
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
47 * strings = [w11, w12, ..., w1C, ..., wR1, ..., wRC]
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
48 * // dimData may be:
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
49 * dimData = [col1width, ..., colCwidth, row1height, ..., rowRheight]
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
50 * ---
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
51 * where R and C are the number of rows and columns, and wij is the ID (from parent Window's
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
52 * list) for the widget in row i and column j. The number of parameters must be r*c + 3.
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
53 *
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
54 * The content parameter is passed on to all children accepting an IContent. */
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
55 this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent content) {
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
56 // Get grid size and check data
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
57 // Check sufficient data for type, align-flags, rows, cols, and possibly row/col widths.
93
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
58 if (data.ints.length != 4) throw new WidgetDataException (this);
39
5132301e9ed7 Implemented widget saving.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 38
diff changeset
59
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
60 rows = data.ints[2];
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
61 cols = data.ints[3];
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
62 // Check: at least one sub-widget and strings's length is correct:
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
63 if (rows < 1 || cols < 1 || data.strings.length != rows * cols)
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
64 throw new WidgetDataException (this);
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
65 super (mgr, parent, id, data);
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
66
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
67 // Get all sub-widgets
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
68 subWidgets.length = rows*cols;
41
b3a6ca4516b4 The renderer now controls which parts of the window border allow resizing.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 40
diff changeset
69 foreach (i, ref subWidget; subWidgets) {
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
70 subWidget = mgr.makeWidget (this, data.strings[i], content);
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
71 }
77
3dfd934100f7 Continuing widget data changes started in last commit: all previous widgets work again now (but lacking saving).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 72
diff changeset
72
93
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
73 initWidths = mgr.dimData (id); // may be null, tested later
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
74 }
78
79a1809421aa Widget data saving reimplemented for the new data system. (Now grid layout widgets remember their row & column sizes.)
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
75
79a1809421aa Widget data saving reimplemented for the new data system. (Now grid layout widgets remember their row & column sizes.)
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
76 // Save column/row sizes. Currently always do so.
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
77 override bool saveChanges () {
93
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
78 foreach (widget; subWidgets) // recurse on subwidgets
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
79 widget.saveChanges ();
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
80
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
81 mgr.dimData (id, col.width ~ row.width);
78
79a1809421aa Widget data saving reimplemented for the new data system. (Now grid layout widgets remember their row & column sizes.)
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
82 return true;
79a1809421aa Widget data saving reimplemented for the new data system. (Now grid layout widgets remember their row & column sizes.)
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
83 }
172
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
84
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
85 override void setContent (IContent c) {
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
86 // Pass the content on to sub-widgets, in case they want it
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
87 foreach (widg; subWidgets)
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
88 widg.setContent = c;
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
89 }
78
79a1809421aa Widget data saving reimplemented for the new data system. (Now grid layout widgets remember their row & column sizes.)
Diggory Hardy <diggory.hardy@gmail.com>
parents: 77
diff changeset
90 protected:
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
91 }
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
92
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
93
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
94 /*************************************************************************************************
103
42e241e7be3e ContentList content type; getting content items/lists from Options generically via content.Items, and a new addContent widget function. Several improvements to generic handling of content. New button-with-text widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 99
diff changeset
95 * Iterates on an ContentList to produce a list of widgets, each of which is created with widgetID
42e241e7be3e ContentList content type; getting content items/lists from Options generically via content.Items, and a new addContent widget function. Several improvements to generic handling of content. New button-with-text widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 99
diff changeset
96 * data.strings[0]. If an IContent is passed, this is cast to a ContentList, otherwise
42e241e7be3e ContentList content type; getting content items/lists from Options generically via content.Items, and a new addContent widget function. Several improvements to generic handling of content. New button-with-text widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 99
diff changeset
97 * content.Items is used to get an IContent. It is an error if the content fails to cast to
42e241e7be3e ContentList content type; getting content items/lists from Options generically via content.Items, and a new addContent widget function. Several improvements to generic handling of content. New button-with-text widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 99
diff changeset
98 * ContentList.
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
99 *************************************************************************************************/
103
42e241e7be3e ContentList content type; getting content items/lists from Options generically via content.Items, and a new addContent widget function. Several improvements to generic handling of content. New button-with-text widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 99
diff changeset
100 class ContentListWidget : GridWidget
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
101 {
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
102 this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent content) {
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
103 cList = cast(IContentList) content;
138
3468e9bfded1 Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 137
diff changeset
104 WDCMinCheck (data, 2, 1, cList);
72
159775502bb4 The first dynamically generated widget lists, based on Options, are here!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 71
diff changeset
105 cols = 1;
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
106 rows = cList.list.length;
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
107 subWidgets.length = rows;
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
108 if (data.ints[1] & 8) { // orient horizontally
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
109 cols = rows;
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
110 rows = 1;
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
111 }
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
112 super (mgr, parent, id, data);
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
113
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
114 if (subWidgets) { // i.e. rows*cols > 0
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
115 foreach (i, c; cList.list) {
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
116 subWidgets[i] = mgr.makeWidget (this, data.strings[0], c);
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
117 }
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
118 } else {
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
119 rows = cols = 1;
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
120 subWidgets = [mgr.makeWidget (this, data.strings[0],
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
121 new ErrorContent ("<empty list>",null)) ];
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
122 }
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
123 }
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
124
146
783969f4665c Simple, inefficient context menus (displaying content description).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 144
diff changeset
125 override IContent content () {
783969f4665c Simple, inefficient context menus (displaying content description).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 144
diff changeset
126 return cList;
783969f4665c Simple, inefficient context menus (displaying content description).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 144
diff changeset
127 }
172
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
128 override void setContent (IContent) {
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
129 logger.warn ("ContentListWidget: resetting content is not yet supported");
0dd49f333189 Implemented "void setContent (IContent)".
Diggory Hardy <diggory.hardy@gmail.com>
parents: 168
diff changeset
130 }
146
783969f4665c Simple, inefficient context menus (displaying content description).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 144
diff changeset
131
174
3d58adc17d20 Temporary commit to allow backup
Diggory Hardy <diggory.hardy@gmail.com>
parents: 172
diff changeset
132 public override bool dropContent (IContent content) {
163
24d77c52243f Provided sensible conversions for setting the value of one AStringContent from another, along with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 162
diff changeset
133 if (cList.set (content))
162
2476790223b8 First drag and drop support: can drag from AStringContentWidget to any content editable. No visual feedback while dragging.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 160
diff changeset
134 return true;
2476790223b8 First drag and drop support: can drag from AStringContentWidget to any content editable. No visual feedback while dragging.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 160
diff changeset
135 return parent.dropContent (content);
2476790223b8 First drag and drop support: can drag from AStringContentWidget to any content editable. No visual feedback while dragging.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 160
diff changeset
136 }
2476790223b8 First drag and drop support: can drag from AStringContentWidget to any content editable. No visual feedback while dragging.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 160
diff changeset
137
133
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
138 override void recursionCheck (widgetID wID, IContent c) {
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
139 if (wID is id && c is cList)
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
140 throw new WidgetRecursionException (wID);
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
141 parent.recursionCheck (wID, c);
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
142 }
9fd705793568 Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 131
diff changeset
143
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
144 override bool saveChanges () {
92
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
145 // Since all sub-widgets have the same id, it only makes sense to call on one
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
146 if (subWidgets is null)
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
147 return false;
93
08a4ae11454b Widgets now save dimensions without preventing structural changes in the base config file from applying.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 92
diff changeset
148 return subWidgets[0].saveChanges;
92
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
149 }
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
150
72
159775502bb4 The first dynamically generated widget lists, based on Options, are here!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 71
diff changeset
151 private:
115
1b1e2297e2fc Enums handled more generically now via either a popup list or flat list of BoolContentWidgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 114
diff changeset
152 IContentList cList;
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
153 }
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
154
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
155
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
156 /*************************************************************************************************
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
157 * Backend for grid-based (includes column/row) layout widgets.
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
158 *
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
159 * A deriving class must at least do some work in it's constructor (see Ddoc for this() below)
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
160 * and provide an implementation of saveChanges() (unless Widget's version is sufficient).
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
161 *
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
162 * Since a grid with either dimension zero is not useful, there must be at least one sub-widget.
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
163 *
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
164 * The grid has no border but optionally has spacing between widgets.
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
165 *
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
166 * Several flags are tested against ints[1]:
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
167 * $(TABLE
168
da8d3091fdaf More work on the context menu: now roughly usable like an ordinary context menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 163
diff changeset
168 * $(TR $(TD 1) $(TD Column alignment is shared against other instances of this widget id))
da8d3091fdaf More work on the context menu: now roughly usable like an ordinary context menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 163
diff changeset
169 * $(TR $(TD 2) $(TD Row alignment is shared against other instances of this widget id))
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
170 * $(TR $(TD 4) $(TD Spacing is inserted between elements; the renderer may draw this))
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
171 * $(TR $(TD 8) $(TD For ContentListWidget only, list is horizontal instead of vertical))
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
172 * )
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
173 *************************************************************************************************/
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
174 // Note: mw, mh inherited from AWidget are not used; use col.mw, row.mw instead.
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
175 abstract class GridWidget : AParentWidget
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
176 {
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
177 //BEGIN Creation & saving
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
178 /** Partial constructor for a grid layout widget.
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
179 *
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
180 * Deriving classes should check data lengths, and set rows and cols
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
181 * before calling this super constructor.
77
3dfd934100f7 Continuing widget data changes started in last commit: all previous widgets work again now (but lacking saving).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 72
diff changeset
182 *
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
183 * Derived constructors may also set initWidths to the array of column widths followed by
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
184 * row heights used to initially set the row/column dimensions. */
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
185 protected this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data) {
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
186 super (mgr, parent, id);
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
187
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
188 // Create cell aligners, potentially sharing
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
189 if (data.ints[1] & 1)
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
190 col = AlignColumns.getInstance (id, parent, cols, false);
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
191 else
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
192 col = (new AlignColumns (cols,null));
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
193 if (data.ints[1] & 2)
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
194 row = AlignColumns.getInstance (id, parent, rows, true);
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
195 else
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
196 row = (new AlignColumns (rows,null));
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
197
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
198 AlignColumns.CallbackStruct cbS;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
199 cbS.setWidth = &setColWidth;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
200 cbS.sADD = &setupAlignDimData;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
201 cbS.newMW = &colNewMW;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
202 col.cbs ~= cbS;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
203 cbS.setWidth = &setRowHeight;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
204 cbS.newMW = &rowNewMW;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
205 row.cbs ~= cbS;
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
206
109
2a1428ec5344 Optional, visible spacing in grid layouts.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 105
diff changeset
207 useSpacing = (data.ints[1] & 4) != 0;
92
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
208 }
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
209
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
210 /** Responsible for calculating the minimal size and initializing some stuff.
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
211 *
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
212 * As such, this must be the first function called after this(). */
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
213 override bool setup (uint n, uint flags) {
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
214 debug (mdeWidgets) logger.trace ("GridWidget.setup");
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
215 // Run all internal calculations regardless of changes, then check dimensions for changes.
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
216 // Don't try shortcutting internal calculations when there are no changes - I've tried, and
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
217 // doing so adds enough overhead to make doing so almost(?) worthless (or at least large
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
218 // increases in complexity).
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
219 wdim ow = w, oh = h;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
220
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
221 col.setup (n, flags);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
222 row.setup (n, flags);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
223
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
224 if (initWidths.length == cols + rows) {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
225 col.setWidths (initWidths[0..cols]);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
226 row.setWidths (initWidths[cols..$]);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
227 } else {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
228 col.setWidths;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
229 row.setWidths;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
230 }
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
231 initWidths = null; // free
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
232
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
233 w = col.w;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
234 h = row.w;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
235
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
236 // Tell subwidgets their new sizes. Positions are given by a later call to setPosition.
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
237 foreach (i,widget; subWidgets) {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
238 // Resizing direction is arbitrarily set to negative:
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
239 widget.setWidth (col.width[i % cols], -1);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
240 widget.setHeight (row.width[i / cols], -1);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
241 }
144
66c58e5b0062 Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 142
diff changeset
242 return (ow != w || oh != h || n == 0);
39
5132301e9ed7 Implemented widget saving.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 38
diff changeset
243 }
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
244 //END Creation & saving
39
5132301e9ed7 Implemented widget saving.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 38
diff changeset
245
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
246 //BEGIN Size & position
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
247 override bool isWSizable () {
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
248 return col.firstSizable >= 0;
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
249 }
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
250 override bool isHSizable () {
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
251 return row.firstSizable >= 0;
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
252 }
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
253
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
254 // mw, mh not used
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
255 override wdim minWidth () {
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
256 return col.mw;
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
257 }
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
258 override wdim minHeight () {
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
259 return row.mw;
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
260 }
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
261
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
262 override void setWidth (wdim nw, int dir) {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
263 w = col.resizeWidth (nw, dir);
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
264 // Note: setPosition must be called after!
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
265 }
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
266 override void setHeight (wdim nh, int dir) {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
267 h = row.resizeWidth (nh, dir);
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
268 // Note: setPosition must be called after!
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
269 }
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
270
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
271 override void setPosition (wdim x, wdim y) {
34
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
272 this.x = x;
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
273 this.y = y;
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
274
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
275 debug assert (col.pos && row.pos, "setPosition: col/row.pos not set (code error)");
34
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
276 foreach (i,widget; subWidgets)
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
277 widget.setPosition (x + col.pos[i % cols], y + row.pos[i / cols]);
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
278 }
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
279
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
280 // Unlike for most widgets, these actually resize self and sub-widgets, since the parent
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
281 // simply calling setWidth/setHeight wouldn't work.
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
282 override void minWChange (IChildWidget widg, wdim nmw) {
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
283 size_t i = getWidgetIndex(widg);
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
284 if (!col.newMinWidth (i%cols, i/cols + colR, nmw)) {
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
285 // don't propegate call to parent; set position as required
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
286 widg.setPosition (x + col.pos[i % cols], y + row.pos[i / cols]);
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
287 mgr.requestRedraw;
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
288 } // else callbacks to all sharing layouts do the rest
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
289 }
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
290 override void minHChange (IChildWidget widg, wdim nmh) {
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
291 size_t i = getWidgetIndex(widg);
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
292 if (!row.newMinWidth (i/cols, i%cols + rowR, nmh)) {
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
293 widg.setPosition (x + col.pos[i % cols], y + row.pos[i / cols]);
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
294 mgr.requestRedraw;
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
295 }
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
296 }
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
297 //END Size & position
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
298
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
299
34
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
300 // Find the relevant widget.
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
301 override IChildWidget getWidget (wdim cx, wdim cy) {
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
302 debug scope (failure)
113
9824bee909fd Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 112
diff changeset
303 logger.warn ("getWidget: failure; values: click; pos; width: {},{}; {},{}; {},{}", cx, cy, x, y, w, h);
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
304 debug assert (cx >= x && cx < x + w && cy >= y && cy < y + h, "getWidget: not on widget (code error)");
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
305
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
306 // Find row/column:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
307 ptrdiff_t i = col.getCell (cx - x);
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
308 ptrdiff_t j = row.getCell (cy - y);
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
309 if (i < 0 || j < 0) // on a space between widgets
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
310 return this;
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
311
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
312 // On a subwidget; recurse call:
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
313 return subWidgets[i + j*cols].getWidget (cx, cy);
34
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
314 }
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
315
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
316 // Resizing columns & rows
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
317 override int clickEvent (wdabs cx, wdabs cy, ubyte b, bool state) {
43
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
318 debug scope (failure)
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
319 logger.warn ("clickEvent: failure");
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
320 if (b == 1 && state == true) {
43
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
321 /* Note: Because of getWidget, this function is only called if the click is not on a
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
322 * sub-widget, so we know it's on some divisor (so at least one of resizeCol and
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
323 * resizeRow is non-negative). */
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
324
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
325 // find col/row's resizeD & resizeU
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
326 if (col.findResizeCols (cx - x) && row.findResizeCols (cy - y))
99
5de5810e3516 Implemented an editable TextContent widget; it's now possible to edit text options using the GUI.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
327 return 0; // unable to resize
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
328
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
329 dragX = cx;
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
330 dragY = cy;
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
331
160
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
332 return 2;
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
333 }
99
5de5810e3516 Implemented an editable TextContent widget; it's now possible to edit text options using the GUI.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 95
diff changeset
334 return 0;
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
335 }
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
336
160
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
337 //BEGIN Col/row resizing callback
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
338 override void dragMotion (wdim cx, wdim cy, IChildWidget) {
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
339 col.resizeCols (cx - dragX);
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
340 row.resizeCols (cy - dragY);
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
341
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
342 // NOTE: all adjustments are relative; might be better if they were absolute?
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
343 dragX = cx;
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
344 dragY = cy;
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
345
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
346 foreach (i,widget; subWidgets)
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
347 widget.setPosition (x + col.pos[i % cols],
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
348 y + row.pos[i / cols]);
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
349 mgr.requestRedraw;
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
350 }
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
351 override bool dragRelease (wdabs cx, wdabs cy, IChildWidget) {
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
352 return true; // we've handled the up-click
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
353 }
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
354 //END Col/row resizing callback
ccd01fde535e Replaced WidgetManager's click and motion callbacks with a drag event system.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 146
diff changeset
355
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
356 override void draw () {
34
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
357 super.draw ();
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
358
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
359 foreach (widget; subWidgets)
6b4116e6355c Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 32
diff changeset
360 widget.draw ();
109
2a1428ec5344 Optional, visible spacing in grid layouts.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 105
diff changeset
361
2a1428ec5344 Optional, visible spacing in grid layouts.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 105
diff changeset
362 if (useSpacing)
2a1428ec5344 Optional, visible spacing in grid layouts.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 105
diff changeset
363 mgr.renderer.drawSpacers (x,y, w,h, col.pos[1..$], row.pos[1..$]);
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
364 }
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
365
174
3d58adc17d20 Temporary commit to allow backup
Diggory Hardy <diggory.hardy@gmail.com>
parents: 172
diff changeset
366 private:
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
367 /* Calculations which need to be run whenever a new sub-widget structure is set
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
368 * or other changes affecting widget sizes. Most of these need to happen regardless of whether
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
369 * changes have occurred, since AlignColumns have been reset.
71
77c7d3235114 Separated the grid layout widget's implementation into a base and a derived class, to allow other uses of layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 66
diff changeset
370 *
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
371 * rows, cols and subWidgets must be set before calling. Part of the set-up for AlignColumns
92
085f2ca31914 Shared alignments supported in more complex cases.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 91
diff changeset
372 * (col and row). subWidgets need to know their minimal size and resizability. */
114
b16a534f5302 Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 113
diff changeset
373 override void setupAlignDimData (uint n, uint flags) {
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
374 if (sADD_n == n) return; // cached data is current
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
375 sADD_n = n;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
376
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
377 debug (mdeWidgets) logger.trace ("GridWidget: setup on subWidgets...");
113
9824bee909fd Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 112
diff changeset
378 foreach (widg; subWidgets) { // make sure all subwidgets have been set up
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
379 debug assert (widg, "null widg");
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
380 widg.setup (n,flags);
113
9824bee909fd Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 112
diff changeset
381 }
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
382 debug (mdeWidgets) logger.trace ("GridWidget: setup on subWidgets...done");
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
383 // make sure both AlignColumns are set up (since first call to setup(n) calls reset):
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
384 col.setup (n, flags);
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
385 row.setup (n, flags);
121
5b37d0400732 Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 118
diff changeset
386
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
387 // Note: shared AlignColumns get this set by all sharing GridWidgets
109
2a1428ec5344 Optional, visible spacing in grid layouts.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 105
diff changeset
388 col.spacing = row.spacing = useSpacing ? mgr.renderer.layoutSpacing : 0;
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
389
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
390 // Calculate the minimal column and row sizes:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
391 if (colR == size_t.max)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
392 colR = col.addRows (rows);
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
393 if (rowR == size_t.max)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
394 rowR = row.addRows (cols);
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
395 // AlignColumns (row, col) takes care of initializing minWidth.
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
396 for (size_t r = 0; r < rows; ++r) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
397 for (size_t c = 0; c < cols; ++c) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
398 size_t i = r*cols + c;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
399 col.minCellWidths[i+colR*cols] = subWidgets[i].minWidth;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
400 row.minCellWidths[(c+rowR)*rows+r] = subWidgets[i].minHeight;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
401 }
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
402 }
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
403
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
404 // Find which cols/rows are resizable:
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
405 // AlignColumns initializes sizable, and sets first and last sizables.
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
406 static if (!(SIZABILITY & SIZABILITY_ENUM.SUBWIDGETS)) return;
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
407 forCols:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
408 for (size_t i = 0; i < cols; ++i) { // for each column
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
409 for (size_t j = 0; j < subWidgets.length; j += cols) { // for each row
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
410 static if (SIZABILITY == SIZABILITY_ENUM.ALL_SUBWIDGETS) {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
411 if (!subWidgets[i+j].isWSizable) { // column not resizable
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
412 col.sizable[i] = false;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
413 continue forCols; // no point checking more
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
414 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
415 } else {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
416 if (subWidgets[i+j].isWSizable) { // column is resizable
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
417 col.sizable[i] = true;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
418 continue forCols;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
419 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
420 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
421 }
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
422 }
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
423
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
424 forRows:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
425 for (size_t i = 0; i < subWidgets.length; i += cols) { // for each row
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
426 for (size_t j = 0; j < cols; ++j) { // for each column
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
427 static if (SIZABILITY == SIZABILITY_ENUM.ALL_SUBWIDGETS) {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
428 if (!subWidgets[i+j].isHSizable) {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
429 row.sizable[i / cols] = false;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
430 continue forRows;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
431 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
432 } else {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
433 if (subWidgets[i+j].isHSizable) {
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
434 row.sizable[i / cols] = true;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
435 continue forRows;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
436 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
437 }
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
438 }
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
439 }
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
440 }
39
5132301e9ed7 Implemented widget saving.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 38
diff changeset
441
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
442 override void setColWidth (size_t i, wdim w, int dir) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
443 for (size_t j = 0; j < rows; ++j) {
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
444 subWidgets[i + cols*j].setWidth (w, dir);
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
445 }
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
446 }
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
447 override void setRowHeight (size_t j, wdim h, int dir) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
448 for (size_t i = 0; i < cols; ++i) {
46
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
449 subWidgets[i + cols*j].setHeight (h, dir);
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
450 }
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
451 }
03fa79a48c48 Fixed resizing bugs in previous commit and made code cleaner and more efficient.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 45
diff changeset
452
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
453 void colNewMW () {
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
454 w = col.w;
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
455 parent.minWChange (this, col.mw);
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
456 }
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
457 void rowNewMW () {
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
458 h = row.w;
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
459 parent.minHChange (this, row.mw);
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
460 }
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
461
40
b28d7adc786b Made GUI more robust to mutable data changes and improved much of GridLayoutWidget's code.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 39
diff changeset
462 protected:
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
463 // Data for resizing cols/rows:
58
d43523ed4b62 Included a wdim typedef for all variables to do with window position or size instead of just using int.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 46
diff changeset
464 wdim dragX, dragY; // coords where drag starts
42
8bf53e711cc7 Partially implemented column/row resizing (code not working well).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 41
diff changeset
465
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
466 size_t cols, rows; // number of cells in grid
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
467 wdim[] initWidths; // see this / setInitialSize
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
468 uint sADD_n = uint.max; // param n of last setup call after setupAlignDimData has run
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
469 bool useSpacing; // add inter-row/col spacing?
43
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
470
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
471 /* All widgets in the grid, by row. Order: [ 0 1 ]
1530d9c04d4d Column/row resizing implemented for GridLayoutWidget (finally)!
Diggory Hardy <diggory.hardy@gmail.com>
parents: 42
diff changeset
472 * [ 2 3 ] */
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
473 //IChildWidget[] subWidgets; (inherited from AParentWidget)
37
052df9b2fe07 Allowed widget resizing, changed widget IDs and made Input catch any callback exceptions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 34
diff changeset
474
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
475 package AlignColumns col, row; // aligners for cols and rows
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
476 // "rows" allocated in col and row; return value of *.addRows():
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
477 size_t colR = size_t.max, rowR = size_t.max;
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
478 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
479
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
480
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
481 /**************************************************************************************************
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
482 * Alignment device
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
483 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
484 * E.g. can control widths of columns within a grid, and provide sensible resizing, respecting the
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
485 * minimal width required by each cell in a column. Is not restricted to horizontal widths, but to
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
486 * ease descriptions, a horizontal context (column widths) is assumed.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
487 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
488 * Cells should be of type IChildWidget.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
489 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
490 * Cells are not directly interacted with, but minimal widths for each column are passed, and
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
491 * callback functions are used to adjust the width of any column.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
492 *************************************************************************************************/
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
493 package class AlignColumns
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
494 {
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
495 /** Get an aligner.
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
496 *
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
497 * Will be shared with other layouts with the same id which have the same
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
498 * parent or if the parents share an aligner.
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
499 *
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
500 * Also ensures each widget sharing an instance expects the same number of
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
501 * columns. */
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
502 static AlignColumns getInstance (widgetID id, IParentWidget parent, size_t columns, bool horiz) {
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
503 if (horiz)
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
504 id ~= "H"; // make the ID different for each aligner
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
505 AlignColumns[]* p = id in instances;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
506 if (p) {
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
507 foreach (ac; *p) {
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
508 if (parent !is ac.parent) { // If parents are different
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
509 GridWidget parGrid = cast(GridWidget) parent,
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
510 acPGrid = cast(GridWidget) ac.parent;
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
511 // and either is not a GridWidget
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
512 // or their aligners are different
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
513 if (parGrid is null || acPGrid is null ||
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
514 horiz ? parGrid.row !is acPGrid.row
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
515 : parGrid.col !is acPGrid.col) {
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
516 continue; // don't share with it
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
517 }
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
518 }
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
519 if (ac.cols != columns)
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
520 continue; // Alignment sharing with ContentListWidgets??
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
521 return ac;
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
522 }
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
523 }
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
524 auto a = new AlignColumns (columns, parent);
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
525 if (p) *p ~= a;
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
526 else instances[id] = [a];
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
527 return a;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
528 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
529
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
530 /** Create an aligner.
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
531 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
532 * After creation, minimal widths should be set for all columns (minWidth) and
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
533 * setWidths must be called before other functions are used.
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
534 *
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
535 * Params:
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
536 * columns = Number of columns. Not expected to change.
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
537 * parent = The parent of the GridWidget using this aligner. (Used when sharing aligners.) */
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
538 this (size_t columns, IParentWidget parent) {
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
539 if (columns < 1)
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
540 throw new GuiException("AlignColumns: created with <1 column (code error)");
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
541 minWidth.length = columns;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
542 sizable.length = columns;
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
543 static if (SIZABILITY & SIZABILITY_ENUM.START_TRUE)
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
544 sizable[] = true;
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
545 cols = columns;
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
546 this.parent = parent;
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
547 }
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
548
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
549 /** Like IChildWidget's setup; calls sADD delegates. */
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
550 void setup (uint n, uint flags) {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
551 if (n != setup_n) {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
552 setup_n = n;
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
553 setupWidths = false;
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
554 reset (cols);
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
555
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
556 foreach (cb; cbs)
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
557 cb.sADD (n, flags); // set flag 1
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
558 }
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
559 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
560
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
561 /** Reset all column information (only keep set callbacks).
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
562 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
563 * Widths should be set after calling, as on creation. */
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
564 void reset (size_t columns) {
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
565 assert (columns == cols, "no support for changing number of columns for now");
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
566 minWidth[] = 0;
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
567 static if (SIZABILITY & SIZABILITY_ENUM.START_TRUE)
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
568 sizable[] = true;
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
569 else
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
570 sizable[] = false;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
571 firstSizable = -1;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
572 lastSizable = -1;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
573 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
574
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
575 /** Add num "rows" to the aligner. They start at the returned index r, thus the values in
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
576 * minCellWidths to set are minCellWidths[cols*r..cols*(r+num)].
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
577 *
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
578 * Calling this function is necessary to allocate room in minCellWidths. */
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
579 size_t addRows (size_t num) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
580 size_t r = rows;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
581 rows += num;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
582 minCellWidths.length = cols*rows;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
583 return r;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
584 }
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
585
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
586 /** Initialize widths, either from minWidths or from supplied list, checking validity.
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
587 *
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
588 * Also calculates first/lastSizable from sizable, overall minimal width and column positions.
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
589 */
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
590 void setWidths (wdim[] data = null) {
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
591 if (!setupWidths) {
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
592 setupWidths = true;
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
593
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
594 // Set minWidth
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
595 assert (minCellWidths.length == rows * cols, "minCellWidths: bad length");
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
596 for (size_t c = 0; c < cols; ++c)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
597 for (size_t r = 0; r < rows; ++r) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
598 wdim mcw = minCellWidths[c+r*cols];
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
599 if (minWidth[c] < mcw)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
600 minWidth[c] = mcw;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
601 }
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
602
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
603 /* Calculate the minimal width of all columns plus spacing. */
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
604 mw = spacing * cast(wdim)(cols - 1);
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
605 foreach (imw; minWidth)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
606 mw += imw;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
607
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
608 // set width
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
609 if (data || width) { // use existing/external data: need to check validity
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
610 if (data) {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
611 assert (data.length == cols, "setWidths called with bad data length (code error)");
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
612 width = data.dup; // data is shared by other widgets with same id so must be .dup'ed
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
613 }
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
614 foreach (i, m; minWidth) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
615 if (!sizable[i] || width[i] < m) // if width is fixed or less than minimum
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
616 width[i] = m;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
617 }
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
618 } else
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
619 width = minWidth.dup;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
620
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
621 genPositions;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
622
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
623 foreach (i,s; sizable) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
624 if (s) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
625 firstSizable = i;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
626 goto gotFirst;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
627 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
628 }
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
629 return; // none resizable - don't search for lastSizable
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
630 gotFirst:
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
631 foreach_reverse (i,s; sizable) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
632 if (s) {
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
633 lastSizable = i;
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
634 return; // done
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
635 }
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
636 }
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
637 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
638 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
639
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
640 /** Get the row/column of relative position l.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
641 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
642 * returns:
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
643 * -i if in space to left of col i, or i if on col i. */
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
644 ptrdiff_t getCell (wdim l) {
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
645 debug assert (width, "AlignColumns not initialized when getCell called (code error)");
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
646 ptrdiff_t i = cols - 1; // starting from right...
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
647 while (l < pos[i]) { // decrement while left of this column
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
648 debug assert (i > 0, "getCell: l < pos[0] (code error)");
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
649 --i;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
650 } // now (l >= pos[i])
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
651 if (l >= pos[i] + width[i]) { // between columns
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
652 debug assert (i+1 < cols, "getCell: l >= total width (code error)");
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
653 return -i - 1; // note: i might be 0 so cannot just return -i
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
654 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
655 return i;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
656 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
657
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
658 /** Adjust total size with direction dir.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
659 *
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
660 * nw should be at least the minimal width.
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
661 *
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
662 * Returns: the final width */
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
663 wdim resizeWidth (wdim nw, int dir) {
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
664 debug assert (width, "AlignColumns not initialized when resizeWidth called (code error)");
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
665 debug if (nw < mw) {
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
666 logger.warn ("Widget dimension set below minimal (code error)");
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
667 return w;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
668 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
669 if (nw == w) return w;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
670
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
671 wdim diff = nw - w;
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
672 if (firstSizable == -1)
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
673 diff = adjustCellSizes (diff, cols-1, -1);
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
674 else
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
675 diff = adjustCellSizes (diff, (dir == -1 ? lastSizable : firstSizable), dir);
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
676 genPositions;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
677
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
678 debug if (nw != w) {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
679 logger.trace ("resizeWidth on {} to {} failed, new width: {}, diff {}, firstSizable {}, columns {}",cast(void*)this, nw,w, diff, firstSizable, cols);
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
680 /+ Also print column widths & positions:
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
681 logger.trace ("resizeWidth to {} failed! Column dimensions and positions:",nw);
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
682 foreach (i,w; width)
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
683 logger.trace ("\t{}\t{}", w,pos[i]);+/
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
684 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
685 return w;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
686 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
687
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
688 /** Calculate resizeU/resizeD, and return true if unable to resize.
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
689 *
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
690 * This and resizeCols are for moving dividers between cells. */
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
691 bool findResizeCols (wdim l) {
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
692 resizeU = -getCell (l); // potential start for upward-resizes
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
693 if (resizeU <= 0)
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
694 return true; // not on a space between cells
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
695 resizeD = resizeU - 1; // potential start for downward-resizes
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
696
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
697 while (!sizable[resizeU]) { // find first actually resizable column (upwards)
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
698 ++resizeU;
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
699 if (resizeU >= cols) { // cannot resize
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
700 resizeU = -1;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
701 return true;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
702 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
703 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
704
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
705 while (!sizable[resizeD]) { // find first actually resizable column (downwards)
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
706 --resizeD;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
707 if (resizeD < 0) { // cannot resize
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
708 resizeU = -1; // resizeU is tested to check whether resizes are possible
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
709 return true;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
710 }
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
711 }
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
712
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
713 return false; // can resize
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
714 }
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
715 /// Resize columns based on findResizeCols
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
716 void resizeCols (wdim diff)
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
717 {
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
718 if (resizeU <= 0) return;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
719
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
720 // do shrinking first (in case we hit the minimum)
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
721 if (diff >= 0) {
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
722 diff = -adjustCellSizes (-diff, resizeU, 1);
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
723 adjustCellSizes (diff, resizeD, -1);
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
724 } else {
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
725 diff = -adjustCellSizes (diff, resizeD, -1);
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
726 adjustCellSizes (diff, resizeU, 1);
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
727 }
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
728 genPositions;
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
729 }
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
730
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
731 /** Called when one of the cells in column col now has minimal width nmw.
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
732 *
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
733 * Enlarges column minimal width if necessary; tries to keep total width
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
734 * the same.
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
735 *
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
736 * Returns: true if min-width changes (callbacks do necessary work),
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
737 * false if no change to mw (position should still be reset). */
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
738 bool newMinWidth (size_t col, size_t row, wdim nmw) {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
739 minCellWidths[col + row*cols] = nmw;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
740 wdim nd = 0; // negative diff to keep overall size constant if possible
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
741 if (minWidth[col] < nmw) { // increase minimal
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
742 minWidth[col] = nmw;
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
743 nd = width[col] - nmw; // negative diff
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
744 if (nd > 0)
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
745 nd = 0; // Don't decrease if already larger (mustn't shrink self)
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
746 } else if (minWidth[col] > nmw) { // potentially decrease minimal
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
747 // set nmw to max of all cell min widths in col:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
748 for (size_t r = 0; r < rows; ++r) {
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
749 wdim mcw = minCellWidths[col+r*cols];
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
750 if (nmw < mcw)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
751 nmw = mcw;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
752 }
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
753 if (minWidth[col] == nmw) // no change
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
754 return false;
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
755 minWidth[col] = nmw;
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
756 if (!sizable[col] && lastSizable >= 0)
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
757 nd = width[col] - nmw; // Not resizable but another column is
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
758 // Else leave larger; mustn't shrink ourself
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
759 } else
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
760 return false;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
761
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
762 mw = spacing * cast(wdim)(cols - 1);
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
763 foreach (imw; minWidth)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
764 mw += imw;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
765
129
ad91de8867a0 Added a widget size printing debug function. Fixed a bug in SwitchWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 126
diff changeset
766 if (nd != 0) { // needs enlarging or shrinking
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
767 width[col] = nmw;
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
768 foreach (cb; cbs)
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
769 cb.setWidth (col, nmw, -1);
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
770 if (lastSizable >= 0)
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
771 adjustCellSizes (nd, lastSizable, -1);
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
772 }
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
773
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
774 debug wdim ow = w;
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
775 genPositions;
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
776 debug if (w < ow)
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
777 logger.error ("newMinWidth: shrunk (code error); w={}, ow={}, nd={}", w,ow,nd);
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
778
141
6f69a9c111eb Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 140
diff changeset
779 //debug logger.trace ("newMW for col: minWidth: {}, nmw: {}, col: {}, nd: {}, mw: {}, w: {}", minWidth, nmw, col, nd, mw, w);
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
780 foreach (cb; cbs)
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
781 cb.newMW ();
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
782 return true;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
783 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
784
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
785 /* Generate position infomation for each column and set w. */
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
786 private void genPositions () {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
787 pos.length = cols;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
788
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
789 w = 0;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
790 foreach (i, cw; width) {
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
791 pos[i] = w;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
792 w += cw + spacing;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
793 }
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
794 w -= spacing;
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
795 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
796
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
797 /* Adjust the total size of rows/columns (including spacing) by diff.
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
798 *
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
799 * Params:
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
800 * diff = amount to increase/decrease the total size
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
801 * start= index for col/row to start resizing on; assumed to be sizable
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
802 * incr = direction to resize in (added to index each step). Must be either -1 or +1.
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
803 *
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
804 * Returns:
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
805 * The amount adjusted. This may be larger than diff, since cellD is clamped by cellDMin.
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
806 *
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
807 * Will shrink non-sizable columns if they're over minimal size.
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
808 * Will increase column start, since it's assumed sizable.
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
809 *
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
810 * Note: Check variable used for start is valid before calling! If a non-
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
811 * sizable column's index is passed, this should get increased (if diff > 0)
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
812 * but not decreased. */
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
813 private wdim adjustCellSizes (wdim diff, ptrdiff_t start, int incr)
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
814 in {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
815 assert (width.length == cols, "CellAlign.adjustCellSizes: width is invalid (code error)");
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
816 // Most likely if passed negative when sizing is disabled:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
817 assert (start >= 0 && start < cols, "adjustCellSizes: invalid start");
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
818 debug assert (incr == 1 || incr == -1, "adjustCellSizes: invalid incr");
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
819 } body {
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
820 debug scope(failure) logger.trace ("adjustCellSizes: failure");
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
821 ptrdiff_t i = start;
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
822 if (diff > 0) { // increase size of first resizable cell
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
823 width[i] += diff;
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
824 foreach (cb; cbs)
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
825 cb.setWidth (i, width[i], incr);
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
826 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
827 else if (diff < 0) { // decrease
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
828 wdim rd = diff; // running diff
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
829 while (i >= 0 && i < cols) {
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
830 if (width[i] > minWidth[i]) {
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
831 width[i] += rd; // decrease this cell's size (but may be too much)
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
832 rd = width[i] - minWidth[i];
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
833 if (rd >= 0) { // OK; we're done
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
834 foreach (cb; cbs)
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
835 cb.setWidth (i, width[i], incr);
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
836 break; // we hit the mark exactly: diff is correct
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
837 }
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
838
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
839 // else we decreased it too much!
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
840 width[i] = minWidth[i];
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
841 foreach (cb; cbs)
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
842 cb.setWidth (i, width[i], incr);
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
843 // rd is remainder to decrease by
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
844 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
845
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
846 i += incr;
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
847 }
139
29a524e7c858 Fixed a resizing issue and added a popup menu for all content.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 138
diff changeset
848 diff -= rd; // still had rd left to decrease (may be 0)
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
849 }
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
850 // else no adjustment needed (diff == 0)
45
0fd51d2c6c8a Several changes to resising windows and layout widgets. This commit still has some bugs.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 43
diff changeset
851
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
852 return diff;
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
853 }
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
854
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
855
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
856 /** Minimal widths per cell.
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
857 *
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
858 * Array of all cells, organised like GridLayoutWidget.subWidgets when representing columns,
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
859 * with rows and columns swapped when representing rows.
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
860 *
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
861 * Then minWidth[i] = min(minCellWidths[i]) (where min acts on an array). */
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
862 wdim[] minCellWidths;
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
863
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
864 /** For each column i, sizable[i] is true if that column is resizable.
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
865 *
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
866 * Set along with minWidth before calling setWidths. */
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
867 bool[] sizable; // set by genCachedConstructionData
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
868
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
869 /** Current width, relative position (for each column)
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
870 *
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
871 * Treat as READ ONLY outside this class! */
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
872 wdim[] width; // only adjusted within the class
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
873 wdim[] pos; /// ditto
123
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
874 wdim spacing; // used by genPositions (which cannot access the layout class's data)
d3b2cefd46c9 minSizeChange() allows run-time changes to widgets' minimal size (except for shrinking in a GridLayoutWidget).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 121
diff changeset
875 wdim w,mw; // current & minimal widths
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
876
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
877 package struct CallbackStruct {
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
878 void delegate (size_t,wdim,int) setWidth; // set width of a column, with resize direction
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
879 void delegate (uint,uint) sADD; // setupAlignDimData dlgs
140
c94ec5594449 Fixed a bug with changing the minimal size and optimised it slightly.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 139
diff changeset
880 void delegate () newMW; // propegate or finalize minimal width change
126
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
881 }
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
882 CallbackStruct cbs[];
c9843fbaac88 Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 124
diff changeset
883
95
2a364c7d82c9 Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 94
diff changeset
884 protected:
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
885 /* Minimal width for each column.
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
886 *
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
887 * Set by setWidths. */
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
888 wdim[] minWidth;
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
889 size_t cols, rows; // number of columns and rows (wrong way round when AlignColumns
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
890 // represents rows)
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
891
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
892 ptrdiff_t resizeD, // resizeCols works down from this index (<0 if not resizing)
90
b525ff28774b Widgets generated dynamically from a list can now be standard widgets selected from data files.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 85
diff changeset
893 resizeU; // and up from this index
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
894 /* indicies of the first/last resizable column (negative if none are resizable). */
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
895 ptrdiff_t firstSizable = -1, lastSizable = -1; // set by calcFLSbl
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
896 // Callbacks used to actually adjust a column's width:
111
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
897
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
898 uint setup_n = uint.max; // param n of last setup call
1655693702fc Resolved ticket #4, allowing widgets to reload strings and recalculate sizes mid-run.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 109
diff changeset
899 bool setupWidths; // setWidths has been run
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
900
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
901 IParentWidget parent; // Used to determine when to share aligner
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
902
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
903 static HashMap!(widgetID,AlignColumns[]) instances;
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
904 static this () {
142
9dabcc44f515 Tightened rules for alignment sharing of grid layouts (avoids a bug and generally preferable).
Diggory Hardy <diggory.hardy@gmail.com>
parents: 141
diff changeset
905 instances = new HashMap!(widgetID,AlignColumns[]);
91
4d5d53e4f881 Shared alignment for dynamic content lists - finally implemented! Lots of smaller changes too.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 90
diff changeset
906 }
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
907
131
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
908 alias IParentWidget.SIZABILITY SIZABILITY;
9cff74f68b84 Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 130
diff changeset
909 alias IParentWidget.SIZABILITY_ENUM SIZABILITY_ENUM;
130
c5c38eaadb64 Changed how sizability is set for parents: can require all sub-widgets resizable or only one to set parent resizable.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 129
diff changeset
910
174
3d58adc17d20 Temporary commit to allow backup
Diggory Hardy <diggory.hardy@gmail.com>
parents: 172
diff changeset
911 invariant
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
912 {
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
913 if (setupWidths) {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
914 assert (width.length == cols, "invariant: bad width length");
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
915 wdim x = 0;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
916 foreach (i,w; width) {
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
917 assert (minWidth[i] <= w, "invariant: min size not reached"); // even when "not sizable", cols may get enlarged
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
918 assert (x == pos[i], "invariant: position wrong");
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
919 x += w + spacing;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
920 }
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
921 assert (x - spacing == w, "invariant: w is wrong");
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
922 x = spacing * cast(wdim)(cols - 1);
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
923 foreach (mw; minWidth)
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
924 x += mw;
124
a2ef6b549101 Dynamic minimal size changing is now fully supported.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 123
diff changeset
925 assert (x == mw, "invariant: mw is wrong");
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
926 }
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
927 }
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
928
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
929 debug (mdeUnitTest) unittest {
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
930 AlignColumns a, a2, b;
163
24d77c52243f Provided sensible conversions for setting the value of one AStringContent from another, along with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 162
diff changeset
931 a = getInstance ("a", null, 2, false);
24d77c52243f Provided sensible conversions for setting the value of one AStringContent from another, along with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 162
diff changeset
932 a2 = getInstance ("a", null, 2, false);
24d77c52243f Provided sensible conversions for setting the value of one AStringContent from another, along with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 162
diff changeset
933 b = getInstance ("a", null, 5, true);
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
934 assert (a is a2);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
935 assert (a !is b);
163
24d77c52243f Provided sensible conversions for setting the value of one AStringContent from another, along with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 162
diff changeset
936 assert (getInstance ("a", null, 4, false) !is a);
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
937
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
938 a.setup (0, 3);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
939 a.spacing = 6;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
940 a.minWidth[0] = 50;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
941 a.minWidth[1] = 6;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
942 a.sizable[1] = true;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
943 a.setWidths;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
944 assert (a.w == 62);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
945
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
946 b.setup (0,3);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
947 b.spacing = 2;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
948 foreach (ref wd; b.minWidth)
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
949 wd = 10;
136
4084f07f2c7a Added simpler mergetag readers and writers, with unittest.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 133
diff changeset
950 b.sizable = [false, true, false, true, false];
118
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
951 b.setWidths;
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
952 assert (b.w == 58);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
953
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
954 assert (b.resizeWidth (60, -1) == 60);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
955 assert (b.width[3] == 12);
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
956
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
957 logger.info ("Unittest complete.");
9ac208b53582 Unittest for mde.gui.widget.layout.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 115
diff changeset
958 }
32
316b0230a849 Lots more work on the GUI. Also renamed lots of files.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
959 }