view mde/gui/widget/miscWidgets.d @ 95:2a364c7d82c9

Boolean options can be adjusted from the gui now (using a very basic widget). Also some bug-fixes. Fixed a minor bug where layouts with the same id but without shared alignments would be messed up. Tracked down the "nothing trawn until a resize" bug (see jobs.txt). If widgets throw during creation they're now replaced by debug widgets. Function pointers are converted to delegates using a safer method.
author Diggory Hardy <diggory.hardy@gmail.com>
date Thu, 06 Nov 2008 11:07:18 +0000
parents 4d5d53e4f881
children b16a534f5302
line wrap: on
line source

/* LICENSE BLOCK
Part of mde: a Modular D game-oriented Engine
Copyright © 2007-2008 Diggory Hardy

This program is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation, either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. */

/** Some GUI Miscelaneas widgets. */
module mde.gui.widget.miscWidgets;

import mde.gui.widget.Widget;
import mde.gui.exception;
import mde.gui.renderer.IRenderer;

import tango.io.Stdout;


/// A fixed-size blank widget.
class FixedBlankWidget : FixedWidget
{
    this (IWidgetManager mgr, widgetID id, WidgetData data) {
        WDCheck (data, 3);
        super (mgr, id, data);
    }
    
    void draw () {
        super.draw;
        
        mgr.renderer.drawBlank (x,y, w,h);
    }
}

/// A completely resizable blank widget (initial size zero).
class SizableBlankWidget : SizableWidget
{
    this (IWidgetManager mgr, widgetID id, WidgetData data) {
        WDCheck (data, 1);
        super (mgr, id, data);
    }
    
    void draw () {
        super.draw;
        
        mgr.renderer.drawBlank (x,y, w,h);
    }
}

/// A debug widget. Essentially as SizableBlankWidget but doesn't mind any amount of data and prints it.
class DebugWidget : SizableWidget
{
    this (IWidgetManager mgr, widgetID id, WidgetData data) {
        super (mgr, id, data);
        
        Stdout ("Debug widget - parameters: int: [");
        foreach (x; data.ints)
            Stdout (" ")(x);
        Stdout (" ], char[]: [");
        foreach (x; data.strings)
            Stdout (" \"")(x)('"');
        Stdout (" ]").newline;
    }
    
    void draw () {
        super.draw;
        
        mgr.renderer.drawBlank (x,y, w,h);
    }
}

/// First interactible widget
class ButtonWidget : AButtonWidget
{
    this (IWidgetManager mgr, widgetID id, WidgetData data) {
        WDCheck (data, 3);
        w = mw = cast(wdim) data.ints[1];
        h = mh = cast(wdim) data.ints[2];
        super (mgr, id, data);
    }
    
    void activated () {
        Stdout ("Button clicked!").newline;
    }
}