view mde/gui/widget/contentFunctions.d @ 167:620d4ea30228

Context menus: added a clipboard (functions accessible from main menu rather than context menu).
author Diggory Hardy <diggory.hardy@gmail.com>
date Sat, 27 Jun 2009 11:57:26 +0200
parents bb2f1a76346d
children e45226d3deae
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/>. */

/******************************************************************************
 * Functions returning new content widgets dependant on content.
 *****************************************************************************/
module mde.gui.widget.contentFunctions;

import mde.gui.exception;
import mde.gui.widget.Ifaces;
import mde.gui.widget.TextWidget;
import mde.gui.widget.layout;
import mde.gui.widget.ParentContent;
import mde.gui.widget.miscContent;

import mde.content.AStringContent;
import mde.content.miscContent;

/******************************************************************************
 * A function which uses Items.get (data.strings[0]) to get a content and
 * creates a widget from data.ints[1]. The first item in each ints and strings
 * is removed before passing data to the new widget.
 *****************************************************************************/
IChildWidget addContent (IWidgetManager mgr, IParentWidget parent, widgetID, WidgetData data, IContent) {
    if (data.strings.length != 2) throw new WidgetDataException;
    return mgr.makeWidget (parent, data.strings[1], Content.get (data.strings[0]));
}

/******************************************************************************
 * A function which returns the most appropriate content editing widget.
 *
 * Widgets which can be returned: BoolContentWidget (toggle button),
 * ValueContentWidget (generic text-box editor), DisplayContentWidget (generic
 * text label).
 *****************************************************************************/
IChildWidget editContent (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) {
    // Note: SAFE_RECURSION enabled
    if (c is null) throw new ContentException;
    // Normally only EventContents are used for buttons, but any Content can be:
    if (cast(IEventContent) c)
	return new ButtonContentWidget(mgr,parent,id,data,c);
    if (cast(AStringContent) c) {
        if (cast(EnumContent) c)	// can be PopupMenuWidget or ContentListWidget
            return new PopupMenuWidget(mgr,parent,id,data,c);
        if (cast(BoolContent) c)
            return new BoolContentWidget(mgr,parent,id,data,c);
        return new AStringContentWidget(mgr,parent,id,data,c);
    }
    if (cast(IContentList) c)
        return new ContentListWidget(mgr,parent,id,data,c);
    // generic uneditable option
    return new DisplayContentWidget(mgr,parent,id,data,c);
}

/******************************************************************************
 * PopupMenuContent will create a popup for any content. This function more
 * conservatively only creates a popup for a ContentList, and otherwise returns
 * the same as editContent.
 *****************************************************************************/
IChildWidget popupListContent (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) {
    if (c is null) throw new ContentException;
    if (cast(IContentList) c)
        return new PopupMenuWidget(mgr,parent,id,data,c);
    else return editContent (mgr, parent, id, data, c);
}