From 346d53b0342d8a1d543887560a28cc45f211d9ad Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Sat, 28 Dec 2019 10:43:58 +0100 Subject: GUI: Add finer control over cross-direction alignment for layout items Previously it was only possible to specify whether items where aligned to the start or centered in the cross direction of the layouts. It is now additionally possible to align the items to the far end of the cross direction or to resize them to match the size of the layout. Terminology and behavior are loosely based on CSS's flexbox containers. --- gui/ThemeEval.cpp | 4 +- gui/ThemeEval.h | 2 +- gui/ThemeLayout.cpp | 64 +++-- gui/ThemeLayout.h | 15 +- gui/ThemeParser.cpp | 23 +- gui/ThemeParser.h | 2 +- gui/themes/default.inc | 306 ++++++++++----------- gui/themes/scummclassic.zip | Bin 157670 -> 157827 bytes gui/themes/scummclassic/classic_layout.stx | 146 +++++----- gui/themes/scummclassic/classic_layout_lowres.stx | 160 +++++------ gui/themes/scummmodern.zip | Bin 287826 -> 287886 bytes gui/themes/scummmodern/scummmodern_layout.stx | 183 ++++++------ .../scummmodern/scummmodern_layout_lowres.stx | 162 +++++------ gui/themes/scummremastered.zip | Bin 285870 -> 285930 bytes gui/themes/scummremastered/remastered_layout.stx | 183 ++++++------ .../scummremastered/remastered_layout_lowres.stx | 162 +++++------ 16 files changed, 729 insertions(+), 683 deletions(-) diff --git a/gui/ThemeEval.cpp b/gui/ThemeEval.cpp index 66b5db5fb7..3eede27cca 100644 --- a/gui/ThemeEval.cpp +++ b/gui/ThemeEval.cpp @@ -130,13 +130,13 @@ void ThemeEval::addDialog(const Common::String &name, const Common::String &over setVar(var + ".Enabled", enabled ? 1 : 0); } -void ThemeEval::addLayout(ThemeLayout::LayoutType type, int spacing, bool center) { +void ThemeEval::addLayout(ThemeLayout::LayoutType type, int spacing, ThemeLayout::ItemAlign itemAlign) { ThemeLayout *layout = 0; if (spacing == -1) spacing = getVar("Globals.Layout.Spacing", 4); - layout = new ThemeLayoutStacked(_curLayout.top(), type, spacing, center); + layout = new ThemeLayoutStacked(_curLayout.top(), type, spacing, itemAlign); assert(layout); diff --git a/gui/ThemeEval.h b/gui/ThemeEval.h index 520c280427..57c3a7c082 100644 --- a/gui/ThemeEval.h +++ b/gui/ThemeEval.h @@ -75,7 +75,7 @@ public: bool hasVar(const Common::String &name) { return _vars.contains(name) || _builtin.contains(name); } void addDialog(const Common::String &name, const Common::String &overlays, bool enabled = true, int inset = 0); - void addLayout(ThemeLayout::LayoutType type, int spacing, bool center = false); + void addLayout(ThemeLayout::LayoutType type, int spacing, ThemeLayout::ItemAlign itemAlign); void addWidget(const Common::String &name, int w, int h, const Common::String &type, bool enabled = true, Graphics::TextAlign align = Graphics::kTextAlignLeft); bool addImportedLayout(const Common::String &name); void addSpace(int size); diff --git a/gui/ThemeLayout.cpp b/gui/ThemeLayout.cpp index eeaaf1e465..10347f0ab9 100644 --- a/gui/ThemeLayout.cpp +++ b/gui/ThemeLayout.cpp @@ -250,12 +250,11 @@ void ThemeLayoutMain::reflowLayout(Widget *widgetChain) { } void ThemeLayoutStacked::reflowLayoutVertical(Widget *widgetChain) { - int curX, curY; + int curY; int resize[8]; int rescount = 0; bool fixedWidth = _w != -1; - curX = _padding.left; curY = _padding.top; _h = _padding.top + _padding.bottom; @@ -275,12 +274,6 @@ void ThemeLayoutStacked::reflowLayoutVertical(Widget *widgetChain) { _children[i]->offsetY(curY); - // Center child if it this has been requested *and* the space permits it. - if (_centered && _children[i]->getWidth() < (_w - _padding.left - _padding.right) && _w != -1) { - _children[i]->offsetX((_w >> 1) - (_children[i]->getWidth() >> 1)); - } else - _children[i]->offsetX(curX); - // Advance the vertical offset by the height of the newest item, plus // the item spacing value. curY += _children[i]->getHeight() + _spacing; @@ -302,6 +295,29 @@ void ThemeLayoutStacked::reflowLayoutVertical(Widget *widgetChain) { _w = 0; } + for (uint i = 0; i < _children.size(); ++i) { + switch (_itemAlign) { + case kItemAlignStart: + _children[i]->offsetX(_padding.left); + break; + case kItemAlignCenter: + // Center child if it this has been requested *and* the space permits it. + if (_children[i]->getWidth() < (_w - _padding.left - _padding.right)) { + _children[i]->offsetX((_w >> 1) - (_children[i]->getWidth() >> 1)); + } else { + _children[i]->offsetX(_padding.left); + } + break; + case kItemAlignEnd: + _children[i]->offsetX(_w - _children[i]->getWidth() - _padding.right); + break; + case kItemAlignStretch: + _children[i]->offsetX(_padding.left); + _children[i]->setWidth(_w - _padding.left - _padding.right); + break; + } + } + // If there were any items with undetermined height, then compute and set // their height now. We do so by determining how much space is left, and // then distributing this equally over all items which need auto-resizing. @@ -321,13 +337,12 @@ void ThemeLayoutStacked::reflowLayoutVertical(Widget *widgetChain) { } void ThemeLayoutStacked::reflowLayoutHorizontal(Widget *widgetChain) { - int curX, curY; + int curX; int resize[8]; int rescount = 0; bool fixedHeight = _h != -1; curX = _padding.left; - curY = _padding.top; _w = _padding.left + _padding.right; for (uint i = 0; i < _children.size(); ++i) { @@ -346,12 +361,6 @@ void ThemeLayoutStacked::reflowLayoutHorizontal(Widget *widgetChain) { _children[i]->offsetX(curX); - // Center child if it this has been requested *and* the space permits it. - if (_centered && _children[i]->getHeight() < (_h - _padding.top - _padding.bottom) && _h != -1) - _children[i]->offsetY((_h >> 1) - (_children[i]->getHeight() >> 1)); - else - _children[i]->offsetY(curY); - // Advance the horizontal offset by the width of the newest item, plus // the item spacing value. curX += (_children[i]->getWidth() + _spacing); @@ -373,6 +382,29 @@ void ThemeLayoutStacked::reflowLayoutHorizontal(Widget *widgetChain) { _h = 0; } + for (uint i = 0; i < _children.size(); ++i) { + switch (_itemAlign) { + case kItemAlignStart: + _children[i]->offsetY(_padding.top); + break; + case kItemAlignCenter: + // Center child if it this has been requested *and* the space permits it. + if (_children[i]->getHeight() < (_h - _padding.top - _padding.bottom)) { + _children[i]->offsetY((_h >> 1) - (_children[i]->getHeight() >> 1)); + } else { + _children[i]->offsetY(_padding.top); + } + break; + case kItemAlignEnd: + _children[i]->offsetY(_h - _children[i]->getHeight() - _padding.bottom); + break; + case kItemAlignStretch: + _children[i]->offsetY(_padding.top); + _children[i]->setHeight(_w - _padding.top - _padding.bottom); + break; + } + } + // If there were any items with undetermined width, then compute and set // their width now. We do so by determining how much space is left, and // then distributing this equally over all items which need auto-resizing. diff --git a/gui/ThemeLayout.h b/gui/ThemeLayout.h index a99de5a99c..0bfe7f7f22 100644 --- a/gui/ThemeLayout.h +++ b/gui/ThemeLayout.h @@ -52,6 +52,14 @@ public: kLayoutSpace }; + /// Cross-direction alignment of layout children. + enum ItemAlign { + kItemAlignStart, ///< Items are aligned to the left for vertical layouts or to the top for horizontal layouts + kItemAlignCenter, ///< Items are centered in the container + kItemAlignEnd, ///< Items are aligned to the right for vertical layouts or to the bottom for horizontal layouts + kItemAlignStretch ///< Items are resized to match the size of the layout in the cross-direction + }; + ThemeLayout(ThemeLayout *p) : _parent(p), _x(0), _y(0), _w(-1), _h(-1), _defaultW(-1), _defaultH(-1), @@ -167,11 +175,10 @@ protected: class ThemeLayoutStacked : public ThemeLayout { public: - ThemeLayoutStacked(ThemeLayout *p, LayoutType type, int spacing, bool center) : - ThemeLayout(p), _type(type), _centered(center) { + ThemeLayoutStacked(ThemeLayout *p, LayoutType type, int spacing, ItemAlign itemAlign) : + ThemeLayout(p), _type(type), _itemAlign(itemAlign) { assert((type == kLayoutVertical) || (type == kLayoutHorizontal)); _spacing = spacing; - _centered = center; } void reflowLayout(Widget *widgetChain) override { @@ -208,7 +215,7 @@ protected: } const LayoutType _type; - bool _centered; + ItemAlign _itemAlign; int8 _spacing; }; diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index b92dd334f3..f48ba6b8ad 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -765,23 +765,36 @@ bool ThemeParser::parserCallback_import(ParserNode *node) { bool ThemeParser::parserCallback_layout(ParserNode *node) { int spacing = -1; - bool center = false; if (node->values.contains("spacing")) { if (!parseIntegerKey(node->values["spacing"], 1, &spacing)) return false; } - (void)Common::parseBool(node->values["center"], center); + ThemeLayout::ItemAlign itemAlign = ThemeLayout::kItemAlignStart; + + if (node->values.contains("align")) { + Common::String val = node->values["align"]; + if (val == "start") { + itemAlign = ThemeLayout::kItemAlignStart; + } else if (val == "center") { + itemAlign = ThemeLayout::kItemAlignCenter; + } else if (val == "end") { + itemAlign = ThemeLayout::kItemAlignEnd; + } else if (val == "stretch") { + itemAlign = ThemeLayout::kItemAlignStretch; + } else { + return parserError("'" + val + "' is not a valid item alignment for a layout."); + } + } if (node->values["type"] == "vertical") - _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutVertical, spacing, center); + _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutVertical, spacing, itemAlign); else if (node->values["type"] == "horizontal") - _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutHorizontal, spacing, center); + _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutHorizontal, spacing, itemAlign); else return parserError("Invalid layout type. Only 'horizontal' and 'vertical' layouts allowed."); - if (node->values.contains("padding")) { int paddingL, paddingR, paddingT, paddingB; diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h index f55a24aa80..890a86d227 100644 --- a/gui/ThemeParser.h +++ b/gui/ThemeParser.h @@ -189,7 +189,7 @@ protected: XML_PROP(inset, false) XML_KEY(layout) XML_PROP(type, true) - XML_PROP(center, false) + XML_PROP(align, false) XML_PROP(padding, false) XML_PROP(spacing, false) diff --git a/gui/themes/default.inc b/gui/themes/default.inc index 90730e49db..8a56822ba9 100644 --- a/gui/themes/default.inc +++ b/gui/themes/default.inc @@ -1005,7 +1005,7 @@ const char *defaultXML1 = "" "/>" "" "" -"" +"" "" "" -"" +"" "" @@ -1167,7 +1167,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1175,7 +1175,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1183,7 +1183,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1204,7 +1204,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1216,7 +1216,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1224,7 +1224,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1296,7 +1296,7 @@ const char *defaultXML1 = "" "/>" "" "" -"" +"" "" @@ -1305,7 +1305,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1313,7 +1313,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1348,7 +1348,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1366,7 +1366,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1378,7 +1378,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1390,7 +1390,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1414,7 +1414,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1422,7 +1422,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1430,7 +1430,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1438,7 +1438,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1446,17 +1446,17 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" @@ -1492,7 +1492,7 @@ const char *defaultXML1 = "" "/>" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" "" -"" +"" "" @@ -1609,7 +1609,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1617,7 +1617,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1629,7 +1629,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1642,7 +1642,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1693,7 +1693,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" @@ -1788,7 +1788,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1872,7 +1872,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1880,7 +1880,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1888,7 +1888,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1896,7 +1896,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -1908,7 +1908,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -1920,7 +1920,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1932,7 +1932,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -1968,7 +1968,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" "" -"" +"" "" -"" +"" "" @@ -2137,7 +2137,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2149,7 +2149,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2161,7 +2161,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2173,7 +2173,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2188,7 +2188,7 @@ const char *defaultXML1 = "" "" -"" +"" "" @@ -2200,7 +2200,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2212,7 +2212,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2224,7 +2224,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -2240,7 +2240,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -2251,7 +2251,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" @@ -2396,7 +2396,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" -"" -"" +"" +"" "" @@ -2548,7 +2548,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" -"" +"" "" @@ -2893,7 +2893,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -2901,7 +2901,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -2909,7 +2909,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -2930,7 +2930,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -2942,7 +2942,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -2950,7 +2950,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -2958,7 +2958,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -2972,7 +2972,7 @@ const char *defaultXML1 = "" "type='Radiobutton' " "/>" "" -"" +"" "" @@ -2987,7 +2987,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -2998,7 +2998,7 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" @@ -3009,7 +3009,7 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" @@ -3020,7 +3020,7 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" "" "" "" -"" +"" "" @@ -3038,7 +3038,7 @@ const char *defaultXML1 = "" "type='PopUp' " "/>" "" -"" +"" "" @@ -3053,7 +3053,7 @@ const char *defaultXML1 = "" "" -"" +"" "" @@ -3073,7 +3073,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -3147,7 +3147,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" "" -"" +"" "" @@ -3343,7 +3343,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -3351,7 +3351,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3363,7 +3363,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" "" -"" +"" "" @@ -3447,7 +3447,7 @@ const char *defaultXML1 = "" "" -"" +"" "" "" -"" +"" "" -"" +"" "" @@ -3494,7 +3494,7 @@ const char *defaultXML1 = "" "type='Button' " "/>" "" -"" +"" "" @@ -3519,7 +3519,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -3603,7 +3603,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" @@ -3660,7 +3660,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3672,7 +3672,7 @@ const char *defaultXML1 = "" "width='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3708,7 +3708,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" -"" +"" "" "" "" -"" +"" "" @@ -3768,7 +3768,7 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" @@ -3779,7 +3779,7 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" @@ -3790,18 +3790,18 @@ const char *defaultXML1 = "" "type='SmallLabel' " "/>" "" -"" +"" "" "" "" -"" +"" "" -"" +"" "" "" "" -"" +"" "" @@ -3865,7 +3865,7 @@ const char *defaultXML1 = "" "" -"" +"" "" @@ -3877,7 +3877,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3889,7 +3889,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3901,7 +3901,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3913,7 +3913,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3928,7 +3928,7 @@ const char *defaultXML1 = "" "" -"" +"" "" @@ -3940,7 +3940,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3952,7 +3952,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3964,7 +3964,7 @@ const char *defaultXML1 = "" "height='Globals.Line.Height' " "/>" "" -"" +"" "" @@ -3980,7 +3980,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" @@ -3991,7 +3991,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" @@ -4018,7 +4018,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" -"" +"" "" "" "" -"" +"" "" @@ -4097,7 +4097,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" -"" +"" "" @@ -4183,7 +4183,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" "" "" "" -"" +"" "" "" "" -"" -"" +"" +"" "" @@ -4248,7 +4248,7 @@ const char *defaultXML1 = "" "" "" "" -"" +"" " - + - + @@ -292,7 +292,7 @@ - + @@ -300,7 +300,7 @@ type = 'PopUp' /> - + @@ -308,7 +308,7 @@ type = 'PopUp' /> - + @@ -330,7 +330,7 @@ - + @@ -343,7 +343,7 @@ - + @@ -351,7 +351,7 @@ type = 'PopUp' /> - + @@ -424,7 +424,7 @@ /> - + @@ -434,7 +434,7 @@ - + @@ -442,7 +442,7 @@ type = 'PopUp' /> - + @@ -478,7 +478,7 @@ - + @@ -497,7 +497,7 @@ - + @@ -509,7 +509,7 @@ width = 'Globals.Line.Height' /> - + @@ -521,7 +521,7 @@ width = 'Globals.Line.Height' /> - + @@ -546,7 +546,7 @@ - + @@ -554,7 +554,7 @@ height = 'Globals.Line.Height' /> - + @@ -562,7 +562,7 @@ type = 'PopUp' /> - + @@ -570,7 +570,7 @@ type = 'PopUp' /> - + @@ -578,17 +578,17 @@ type = 'PopUp' /> - + - + - + @@ -626,7 +626,7 @@ /> - + - + - + - + - + - + - + - + - + - + @@ -746,7 +746,7 @@ - + @@ -754,7 +754,7 @@ height = 'Globals.Line.Height' /> - + @@ -766,7 +766,7 @@ width = 'Globals.Line.Height' /> - + @@ -779,7 +779,7 @@ width = 'Globals.Line.Height' /> - + @@ -833,7 +833,7 @@ - + - + - + - + @@ -930,7 +930,7 @@ - + @@ -1021,7 +1021,7 @@ - + @@ -1029,7 +1029,7 @@ type = 'PopUp' /> - + @@ -1037,7 +1037,7 @@ type = 'PopUp' /> - + @@ -1045,7 +1045,7 @@ type = 'PopUp' /> - + @@ -1058,7 +1058,7 @@ - + @@ -1070,7 +1070,7 @@ width = 'Globals.Line.Height' /> - + @@ -1082,7 +1082,7 @@ width = 'Globals.Line.Height' /> - + @@ -1120,7 +1120,7 @@ - + - + - + @@ -1281,7 +1281,7 @@ - + @@ -1293,7 +1293,7 @@ height = 'Globals.Line.Height' /> - + @@ -1305,7 +1305,7 @@ height = 'Globals.Line.Height' /> - + @@ -1317,7 +1317,7 @@ height = 'Globals.Line.Height' /> - + @@ -1329,7 +1329,7 @@ height = 'Globals.Line.Height' /> - + @@ -1345,7 +1345,7 @@ - + @@ -1357,7 +1357,7 @@ height = 'Globals.Line.Height' /> - + @@ -1369,7 +1369,7 @@ height = 'Globals.Line.Height' /> - + @@ -1381,7 +1381,7 @@ height = 'Globals.Line.Height' /> - + @@ -1398,7 +1398,7 @@ - + @@ -1410,7 +1410,7 @@ - + - + - + - + @@ -1559,7 +1559,7 @@ - + - + - + - + - + - - + + @@ -1717,7 +1717,7 @@ - + - + - + @@ -289,7 +289,7 @@ - + @@ -297,7 +297,7 @@ type = 'PopUp' /> - + @@ -305,7 +305,7 @@ type = 'PopUp' /> - + @@ -327,7 +327,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -348,7 +348,7 @@ type = 'PopUp' /> - + @@ -356,7 +356,7 @@ type = 'PopUp' /> - + @@ -370,7 +370,7 @@ type = 'Radiobutton' /> - + @@ -386,7 +386,7 @@ - + @@ -397,7 +397,7 @@ type = 'SmallLabel' /> - + @@ -408,7 +408,7 @@ type = 'SmallLabel' /> - + @@ -419,7 +419,7 @@ type = 'SmallLabel' /> - + - + @@ -438,7 +438,7 @@ type = 'PopUp' /> - + @@ -453,7 +453,7 @@ - + @@ -474,7 +474,7 @@ - + @@ -550,7 +550,7 @@ height = 'Globals.Line.Height' /> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -751,7 +751,7 @@ - + @@ -759,7 +759,7 @@ height = 'Globals.Line.Height' /> - + @@ -771,7 +771,7 @@ width = 'Globals.Line.Height' /> - + - + @@ -858,7 +858,7 @@ - + - + - + @@ -905,7 +905,7 @@ type = 'Button' /> - + @@ -931,7 +931,7 @@ - + @@ -1022,7 +1022,7 @@ - + - + - + - + - + @@ -1080,7 +1080,7 @@ width = 'Globals.Line.Height' /> - + @@ -1092,7 +1092,7 @@ width = 'Globals.Line.Height' /> - + @@ -1130,7 +1130,7 @@ - + - + - + @@ -1191,7 +1191,7 @@ type = 'SmallLabel' /> - + @@ -1202,7 +1202,7 @@ type = 'SmallLabel' /> - + @@ -1213,18 +1213,18 @@ type = 'SmallLabel' /> - + - + - + - + @@ -1290,7 +1290,7 @@ - + @@ -1302,7 +1302,7 @@ height = 'Globals.Line.Height' /> - + @@ -1314,7 +1314,7 @@ height = 'Globals.Line.Height' /> - + @@ -1326,7 +1326,7 @@ height = 'Globals.Line.Height' /> - + @@ -1338,7 +1338,7 @@ height = 'Globals.Line.Height' /> - + @@ -1354,7 +1354,7 @@ - + @@ -1366,7 +1366,7 @@ height = 'Globals.Line.Height' /> - + @@ -1378,7 +1378,7 @@ height = 'Globals.Line.Height' /> - + @@ -1390,7 +1390,7 @@ height = 'Globals.Line.Height' /> - + @@ -1407,7 +1407,7 @@ - + @@ -1419,7 +1419,7 @@ - + @@ -1447,7 +1447,7 @@ - + - + - + @@ -1529,7 +1529,7 @@ - + - + @@ -1618,7 +1618,7 @@ - + - + - - + + @@ -1686,7 +1686,7 @@ - + - @@ -134,7 +131,7 @@ - + - + @@ -288,7 +285,7 @@ type = 'SmallLabel' /> - + @@ -309,7 +306,7 @@ - + @@ -317,7 +314,7 @@ type = 'PopUp' /> - + @@ -325,7 +322,7 @@ type = 'PopUp' /> - + @@ -347,7 +344,7 @@ - + @@ -360,7 +357,7 @@ - + @@ -368,7 +365,7 @@ type = 'PopUp' /> - + @@ -407,7 +404,7 @@ - + @@ -418,7 +415,7 @@ type = 'SmallLabel' /> - + @@ -429,7 +426,7 @@ type = 'SmallLabel' /> - + @@ -441,7 +438,7 @@ /> - + @@ -451,7 +448,7 @@ - + @@ -459,7 +456,7 @@ type = 'PopUp' /> - + @@ -474,7 +471,7 @@ - + @@ -495,7 +492,7 @@ - + @@ -514,7 +511,7 @@ - + @@ -526,7 +523,7 @@ width = 'Globals.Line.Height' /> - + @@ -538,7 +535,7 @@ width = 'Globals.Line.Height' /> - + @@ -550,7 +547,7 @@ width = 'Globals.Line.Height' /> - + @@ -563,7 +560,7 @@ - + @@ -571,7 +568,7 @@ height = 'Globals.Line.Height' /> - + @@ -579,7 +576,7 @@ type = 'PopUp' /> - + @@ -587,7 +584,7 @@ type = 'PopUp' /> - + @@ -595,17 +592,17 @@ type = 'PopUp' /> - + - + - + @@ -643,7 +640,7 @@ /> - + - + - + - + - + - + - + - + - + - + @@ -763,7 +760,7 @@ - + @@ -771,7 +768,7 @@ height = 'Globals.Line.Height' /> - + @@ -783,7 +780,7 @@ width = 'Globals.Line.Height' /> - + @@ -796,7 +793,7 @@ width = 'Globals.Line.Height' /> - + @@ -850,7 +847,7 @@ - + - + - + - + @@ -946,7 +943,7 @@ - + @@ -1037,7 +1034,7 @@ - + @@ -1045,7 +1042,7 @@ type = 'PopUp' /> - + @@ -1053,7 +1050,7 @@ type = 'PopUp' /> - + @@ -1061,7 +1058,7 @@ type = 'PopUp' /> - + @@ -1074,7 +1071,7 @@ - + @@ -1086,7 +1083,7 @@ width = 'Globals.Line.Height' /> - + @@ -1098,7 +1095,7 @@ width = 'Globals.Line.Height' /> - + @@ -1136,7 +1133,7 @@ - + - - + + @@ -1198,7 +1195,7 @@ type = 'SmallLabel' /> - + @@ -1209,7 +1206,7 @@ type = 'SmallLabel' /> - + @@ -1222,7 +1219,7 @@ - + @@ -1297,7 +1294,7 @@ - + @@ -1309,7 +1306,7 @@ height = 'Globals.Line.Height' /> - + @@ -1321,7 +1318,7 @@ height = 'Globals.Line.Height' /> - + @@ -1333,7 +1330,7 @@ height = 'Globals.Line.Height' /> - + @@ -1345,7 +1342,7 @@ height = 'Globals.Line.Height' /> - + @@ -1361,7 +1358,7 @@ - + @@ -1373,7 +1370,7 @@ height = 'Globals.Line.Height' /> - + @@ -1385,7 +1382,7 @@ height = 'Globals.Line.Height' /> - + @@ -1397,7 +1394,7 @@ height = 'Globals.Line.Height' /> - + @@ -1414,7 +1411,7 @@ - + @@ -1426,7 +1423,7 @@ - + - + - + - + @@ -1576,7 +1573,7 @@ - + - + - + - + - + - - + + @@ -1733,7 +1730,7 @@ - + - + - + @@ -287,7 +287,7 @@ - + @@ -295,7 +295,7 @@ type = 'PopUp' /> - + @@ -303,7 +303,7 @@ type = 'PopUp' /> - + @@ -325,7 +325,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -346,7 +346,7 @@ type = 'PopUp' /> - + @@ -354,7 +354,7 @@ type = 'PopUp' /> - + @@ -368,7 +368,7 @@ type = 'Radiobutton' /> - + @@ -417,7 +417,7 @@ type = 'SmallLabel' /> - + - + @@ -436,7 +436,7 @@ type = 'PopUp' /> - + @@ -451,7 +451,7 @@ - + @@ -472,7 +472,7 @@ - + @@ -491,7 +491,7 @@ - + @@ -503,7 +503,7 @@ width = 'Globals.Line.Height' /> - + @@ -515,7 +515,7 @@ width = 'Globals.Line.Height' /> - + @@ -527,7 +527,7 @@ width = 'Globals.Line.Height' /> - + @@ -540,7 +540,7 @@ - + @@ -548,7 +548,7 @@ height = 'Globals.Line.Height' /> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -749,7 +749,7 @@ - + @@ -757,7 +757,7 @@ height = 'Globals.Line.Height' /> - + @@ -769,7 +769,7 @@ width = 'Globals.Line.Height' /> - + - + @@ -856,7 +856,7 @@ - + - + - + @@ -903,7 +903,7 @@ type = 'Button' /> - + @@ -930,7 +930,7 @@ - + @@ -1021,7 +1021,7 @@ - + - + - + - + - + @@ -1079,7 +1079,7 @@ width = 'Globals.Line.Height' /> - + @@ -1091,7 +1091,7 @@ width = 'Globals.Line.Height' /> - + @@ -1129,7 +1129,7 @@ - + - + @@ -1189,7 +1189,7 @@ type = 'SmallLabel' /> - + @@ -1200,7 +1200,7 @@ type = 'SmallLabel' /> - + @@ -1211,7 +1211,7 @@ type = 'SmallLabel' /> - + - + - + - + @@ -1289,7 +1289,7 @@ - + @@ -1301,7 +1301,7 @@ height = 'Globals.Line.Height' /> - + @@ -1313,7 +1313,7 @@ height = 'Globals.Line.Height' /> - + @@ -1325,7 +1325,7 @@ height = 'Globals.Line.Height' /> - + @@ -1337,7 +1337,7 @@ height = 'Globals.Line.Height' /> - + @@ -1353,7 +1353,7 @@ - + @@ -1365,7 +1365,7 @@ height = 'Globals.Line.Height' /> - + @@ -1377,7 +1377,7 @@ height = 'Globals.Line.Height' /> - + @@ -1389,7 +1389,7 @@ height = 'Globals.Line.Height' /> - + @@ -1406,7 +1406,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1446,7 +1446,7 @@ - + - + - + @@ -1549,7 +1549,7 @@ - + - + @@ -1638,7 +1638,7 @@ - + - + - - + + @@ -1704,7 +1704,7 @@ - + - @@ -134,7 +131,7 @@ - + - + @@ -288,7 +285,7 @@ type = 'SmallLabel' /> - + @@ -309,7 +306,7 @@ - + @@ -317,7 +314,7 @@ type = 'PopUp' /> - + @@ -325,7 +322,7 @@ type = 'PopUp' /> - + @@ -347,7 +344,7 @@ - + @@ -360,7 +357,7 @@ - + @@ -368,7 +365,7 @@ type = 'PopUp' /> - + @@ -407,7 +404,7 @@ - + @@ -418,7 +415,7 @@ type = 'SmallLabel' /> - + @@ -429,7 +426,7 @@ type = 'SmallLabel' /> - + @@ -441,7 +438,7 @@ /> - + @@ -451,7 +448,7 @@ - + @@ -459,7 +456,7 @@ type = 'PopUp' /> - + @@ -474,7 +471,7 @@ - + @@ -495,7 +492,7 @@ - + @@ -514,7 +511,7 @@ - + @@ -526,7 +523,7 @@ width = 'Globals.Line.Height' /> - + @@ -538,7 +535,7 @@ width = 'Globals.Line.Height' /> - + @@ -550,7 +547,7 @@ width = 'Globals.Line.Height' /> - + @@ -563,7 +560,7 @@ - + @@ -571,7 +568,7 @@ height = 'Globals.Line.Height' /> - + @@ -579,7 +576,7 @@ type = 'PopUp' /> - + @@ -587,7 +584,7 @@ type = 'PopUp' /> - + @@ -595,17 +592,17 @@ type = 'PopUp' /> - + - + - + @@ -643,7 +640,7 @@ /> - + - + - + - + - + - + - + - + - + - + @@ -763,7 +760,7 @@ - + @@ -771,7 +768,7 @@ height = 'Globals.Line.Height' /> - + @@ -783,7 +780,7 @@ width = 'Globals.Line.Height' /> - + @@ -796,7 +793,7 @@ width = 'Globals.Line.Height' /> - + @@ -850,7 +847,7 @@ - + - + - + - + @@ -946,7 +943,7 @@ - + @@ -1037,7 +1034,7 @@ - + @@ -1045,7 +1042,7 @@ type = 'PopUp' /> - + @@ -1053,7 +1050,7 @@ type = 'PopUp' /> - + @@ -1061,7 +1058,7 @@ type = 'PopUp' /> - + @@ -1074,7 +1071,7 @@ - + @@ -1086,7 +1083,7 @@ width = 'Globals.Line.Height' /> - + @@ -1098,7 +1095,7 @@ width = 'Globals.Line.Height' /> - + @@ -1136,7 +1133,7 @@ - + - - + + @@ -1198,7 +1195,7 @@ type = 'SmallLabel' /> - + @@ -1209,7 +1206,7 @@ type = 'SmallLabel' /> - + @@ -1222,7 +1219,7 @@ - + @@ -1297,7 +1294,7 @@ - + @@ -1309,7 +1306,7 @@ height = 'Globals.Line.Height' /> - + @@ -1321,7 +1318,7 @@ height = 'Globals.Line.Height' /> - + @@ -1333,7 +1330,7 @@ height = 'Globals.Line.Height' /> - + @@ -1345,7 +1342,7 @@ height = 'Globals.Line.Height' /> - + @@ -1361,7 +1358,7 @@ - + @@ -1373,7 +1370,7 @@ height = 'Globals.Line.Height' /> - + @@ -1385,7 +1382,7 @@ height = 'Globals.Line.Height' /> - + @@ -1397,7 +1394,7 @@ height = 'Globals.Line.Height' /> - + @@ -1414,7 +1411,7 @@ - + @@ -1426,7 +1423,7 @@ - + - + - + - + @@ -1576,7 +1573,7 @@ - + - + - + - + - + - - + + @@ -1733,7 +1730,7 @@ - + - + - + @@ -287,7 +287,7 @@ - + @@ -295,7 +295,7 @@ type = 'PopUp' /> - + @@ -303,7 +303,7 @@ type = 'PopUp' /> - + @@ -325,7 +325,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -346,7 +346,7 @@ type = 'PopUp' /> - + @@ -354,7 +354,7 @@ type = 'PopUp' /> - + @@ -368,7 +368,7 @@ type = 'Radiobutton' /> - + @@ -417,7 +417,7 @@ type = 'SmallLabel' /> - + - + @@ -436,7 +436,7 @@ type = 'PopUp' /> - + @@ -451,7 +451,7 @@ - + @@ -472,7 +472,7 @@ - + @@ -491,7 +491,7 @@ - + @@ -503,7 +503,7 @@ width = 'Globals.Line.Height' /> - + @@ -515,7 +515,7 @@ width = 'Globals.Line.Height' /> - + @@ -527,7 +527,7 @@ width = 'Globals.Line.Height' /> - + @@ -540,7 +540,7 @@ - + @@ -548,7 +548,7 @@ height = 'Globals.Line.Height' /> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -749,7 +749,7 @@ - + @@ -757,7 +757,7 @@ height = 'Globals.Line.Height' /> - + @@ -769,7 +769,7 @@ width = 'Globals.Line.Height' /> - + - + @@ -856,7 +856,7 @@ - + - + - + @@ -903,7 +903,7 @@ type = 'Button' /> - + @@ -930,7 +930,7 @@ - + @@ -1021,7 +1021,7 @@ - + - + - + - + - + @@ -1079,7 +1079,7 @@ width = 'Globals.Line.Height' /> - + @@ -1091,7 +1091,7 @@ width = 'Globals.Line.Height' /> - + @@ -1129,7 +1129,7 @@ - + - + @@ -1189,7 +1189,7 @@ type = 'SmallLabel' /> - + @@ -1200,7 +1200,7 @@ type = 'SmallLabel' /> - + @@ -1211,7 +1211,7 @@ type = 'SmallLabel' /> - + - + - + - + @@ -1289,7 +1289,7 @@ - + @@ -1301,7 +1301,7 @@ height = 'Globals.Line.Height' /> - + @@ -1313,7 +1313,7 @@ height = 'Globals.Line.Height' /> - + @@ -1325,7 +1325,7 @@ height = 'Globals.Line.Height' /> - + @@ -1337,7 +1337,7 @@ height = 'Globals.Line.Height' /> - + @@ -1353,7 +1353,7 @@ - + @@ -1365,7 +1365,7 @@ height = 'Globals.Line.Height' /> - + @@ -1377,7 +1377,7 @@ height = 'Globals.Line.Height' /> - + @@ -1389,7 +1389,7 @@ height = 'Globals.Line.Height' /> - + @@ -1406,7 +1406,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1446,7 +1446,7 @@ - + - + - + @@ -1549,7 +1549,7 @@ - + - + @@ -1638,7 +1638,7 @@ - + - + - - + + @@ -1704,7 +1704,7 @@ - +