Mercurial > projects > mde
diff mde/gui/widget/miscContent.d @ 143:2ac3e0012788
Added a simple Slider widget.
Moved SwitchWidget into PopupMenuWidget's module and renamed the module ParentContent.
Made editContent create DisplayContentWidgets for DebugContent (instead of ButtonContentWidgets).
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Mon, 09 Feb 2009 23:27:41 +0000 |
parents | c94ec5594449 |
children | 783969f4665c |
line wrap: on
line diff
--- a/mde/gui/widget/miscContent.d Sun Feb 08 17:36:57 2009 +0000 +++ b/mde/gui/widget/miscContent.d Mon Feb 09 23:27:41 2009 +0000 @@ -14,14 +14,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /****************************************************************************** - * Widgets using content not organised into other modules. + * Some non-parent widgets for displaying or editing content. + * + * (There are other non-parent content widgets in TextWidget). *****************************************************************************/ module mde.gui.widget.miscContent; -import mde.gui.widget.AParentWidget; +import mde.gui.widget.AChildWidget; +import mde.content.AStringContent; import mde.gui.exception; -import mde.content.AStringContent; debug { import tango.util.log.Log : Log, Logger; @@ -91,108 +93,27 @@ int index; } -/** A "tab" widget: it doesn't display the tabs, but shows one of a number of widgets dependant on - * an EnumContent. - * - * Sizability is set once (currently true if any widget is sizable). Size is kept when switching - * widgets if allowed (if this is large enough and resizable). */ -class SwitchWidget : AParentWidget +/// Display a double in a progress bar/slider. Non-editable. +class SliderContentWidget : AChildWidget { - this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) { + this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData, IContent c) { + content = cast(DoubleContent) c; + if (content is null) throw new ContentException (this); super (mgr, parent, id); - content = cast(EnumContent) c; - if (content is null || (subWidgets.length = content.list.length) == 0) - throw new ContentException (this); - WDCheck (data, 1, subWidgets.length); - - foreach (i,sc; content.list) - subWidgets[i] = mgr.makeWidget (this, data.strings[i], sc); - currentW = subWidgets[content()]; - - content.addCallback (&switchWidget); - } - - override bool setup (uint n, uint flags) { - bool r = super.setup (n, flags); - if (r) { - mw = currentW.minWidth; - mh = currentW.minHeight; - w = currentW.width; - h = currentW.height; - static if (SIZABILITY & SIZABILITY_ENUM.START_TRUE) - isWS = isHS = true; - foreach (i,sc; content.list) { - static if (SIZABILITY == SIZABILITY_ENUM.ANY_SUBWIDGETS) { - isWS |= subWidgets[i].isWSizable; - isHS |= subWidgets[i].isHSizable; - } else static if (SIZABILITY == SIZABILITY_ENUM.ALL_SUBWIDGETS) { - isWS &= subWidgets[i].isWSizable; - isHS &= subWidgets[i].isHSizable; - } - } - } - return r; - } - - override void minWChange (IChildWidget widget, wdim nmw) { - if (widget !is currentW) return; - mw = nmw; - parent.minWChange (this, nmw); - } - override void minHChange (IChildWidget widget, wdim nmh) { - if (widget !is currentW) return; - mh = nmh; - parent.minHChange (this, nmh); + wdimPair s = mgr.renderer.getSliderSize; + w = mw = s.x; + h = mh = s.y; } override bool isWSizable () { - return isWS; - } - override bool isHSizable () { - return isHS; - } - - override void setWidth (wdim nw, int dir) { - w = (nw >= mw ? nw : mw); - currentW.setWidth (w, dir); - } - override void setHeight (wdim nh, int dir) { - h = (nh >= mh ? nh : mh); - currentW.setHeight (h, dir); - } - - override void setPosition (wdim nx, wdim ny) { - x = nx; - y = ny; - currentW.setPosition (nx,ny); - } - - override IChildWidget getWidget (wdim cx, wdim cy) { - return currentW.getWidget (cx, cy); + return true; } override void draw () { - currentW.draw; + mgr.renderer.drawSlider (x,y, w, content()); } protected: - // callback on content - void switchWidget (Content) { - currentW = subWidgets[content()]; - mw = currentW.minWidth; - mh = currentW.minHeight; - parent.minWChange (this, mw); - parent.minHChange (this, mh); - // Parent may change size. If it doesn't, we must set child's size. - // We can't tell if it did, so do it (call will be fast if size isn't - // changed anyway). - currentW.setWidth (w, -1); - currentW.setHeight (h, -1); - currentW.setPosition (x,y); - } - - IChildWidget currentW; - EnumContent content; - - bool isWS, isHS; // no infrastructure for changing sizability, so need to fix it. + DoubleContent content; } +