view mde/gui/exception.d @ 133:9fd705793568

Fixed menu popup bug, improved recursion detection. Menu popups can now determine whether or not they are sub-menus. Recursion detection can now also check content (if not the same, there's not a risk of infinite recursion).
author Diggory Hardy <diggory.hardy@gmail.com>
date Fri, 23 Jan 2009 16:05:05 +0000
parents fe061009029d
children
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/>. */

/// All GUI Exception classes
module mde.gui.exception;

import mde.exception;

class GuiException : mdeException
{
    char[] getSymbol () {
        return super.getSymbol ~ ".gui";
    }
    
    this (char[] msg) {
        super(msg);
    }
}

/// Thrown when createWidget or a Widget class's this() is called with invalid data.
class WidgetDataException : GuiException
{
    this () {		// Other CTOR should be used by classes
        super ("Bad widget data");
    }
    this (Object o) {	// Default, by Widget class's this / WDCheck
	super ("Bad widget data for "~o.classinfo.name);
    }
}

/// Thrown when a widget is (potentially) being recursed infinitely.
class WidgetRecursionException : GuiException
{
    this (char[] id) {	// Pass id of widget being recursed
        super ("Infinite recursion of "~id);
    }
}

class ContentException : GuiException
{
    char[] getSymbol () {
        return super.getSymbol ~ ".content";
    }
    this () {
        super ("Unexpected content type");
    }
    this (Object o) {	// Default, by Widget class's this / WDCCheck
	super ("Unexpected content type for "~o.classinfo.name);
    }
    this (char[] msg) {
        super (msg);
    }
}

/// Thrown when getting a content item fails
class ContentItemException : GuiException {
    this (char[] msg) {
	super ("Bad content item specifier: "~msg);
    }
}