view examples/guiDemo.d @ 173:a1ba9157510e

Enabled ServiceContentList to call its callbacks when its value changes. Tried to fix some other bugs, but this is not a very clean commit, due to wanting to make some big changes to enable better use of invariants next.
author Diggory Hardy <diggory.hardy@gmail.com>
date Sat, 08 Aug 2009 15:53:10 +0200
parents 9f035cd139c6
children 3d58adc17d20
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;
import mde.mainLoop;			// Some setup for the main loop
import mde.menus;			// add default menus
import mde.setup.Init;                  // initialization
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;
import tango.core.stacktrace.TraceExceptions;

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.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
    
    mainSchedule.add (SCHEDULE.DRAW, &Screen.draw).request = true;      // Draw, per event and first frame only.
    
    while (run) {
	mainSchedule.execute (Clock.now());
	
        Thread.sleep (mainInterval);	// sleep this many seconds
    }
    
    return 0;		// cleanup handled by init's DTOR
}