view examples/guiDemo.d @ 126:c9843fbaac88

Dynamic minimal size changing improved; works over layouts sharing alignment. EnumContent sub-contents use EnumValueContent instead of BoolContent; fixes a few small bugs. EnumContent substrings get translated (bug fixed). The widget manager no longer attempts to set widget sizes smaller than their minimals, even though some will not be shown. SwitchWidget: has fixed sizableness now.
author Diggory Hardy <diggory.hardy@gmail.com>
date Thu, 08 Jan 2009 13:05:44 +0000
parents 5b37d0400732
children 41582439a42b
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/>. */

/** Main module for a gui demo & testing executable. */
module examples.guiDemo;

import mde.imde;                        // this module's interface for external modules
import mde.events;      // pollEvents() // NOTE: Must be imported before Init, otherwise fonts don't display properly (why??)
import mde.setup.Init;                  // initialization
import mde.lookup.Options;              // pollInterval option
import mde.scheduler.Scheduler;         // mainSchedule
import mde.setup.Screen;                // Screen.draw()
import mde.setup.InitStage;             // StageState
import mde.gui.WMScreen;

import tango.core.Thread : Thread;	// Thread.sleep()
import tango.time.Clock;                // Clock.now()
import tango.util.log.Log : Log, Logger;
debug (mdeUnitTest) {
    import mde.file.ssi;
    import mde.file.mergetag.mdeUT;
}

int main(char[][] args)
{
    Logger logger = Log.getLogger ("mde.mde");
    // If compiled with unittests, notify that they completed and exit:
    debug (mdeUnitTest) {
        logger.info ("Compiled unittests have completed; terminating.");
        return 0;
    }
    
    // Set up the gui
    scope WMScreen gui = new WMScreen ("guiDemo");
    StageState guiLoad () {   // init func
        gui.init;
        gui.loadDesign();
        return StageState.ACTIVE;
    }
    StageState guiSave () {
        gui.save;
        return StageState.INACTIVE;
    }
    addInitStage ("GuiM", &guiLoad, &guiSave, ["SWnd", "Font"]);
    
    scope Init init = new Init(args);	// initialize mde
    
    //BEGIN Main loop setup
    /* Note: the main loop is currently controlled by the scheduler. This is not really ideal,
     * since it provides no direct control of the order in which components are executed and does
     * not allow running components simultaeneously with threads.
     * Note: probably drawing should start at the beginning of the loop and glFlush()/swapBuffers
     * be called at the end to optimise. */
    mainSchedule.add (SCHEDULE.DRAW, &Screen.draw).request = true;      // Draw, per event and first frame only.
    mainSchedule.add (mainSchedule.getNewID, &mde.events.pollEvents).frame = true;
    //END Main loop setup
    
    double pollInterval = miscOpts.pollInterval();
    while (run) {
	mainSchedule.execute (Clock.now());
	
	Thread.sleep (pollInterval);	// sleep this many seconds
    }
    
    return 0;		// cleanup handled by init's DTOR
}