view examples/guiDemo.d @ 117:aba2dd815a1f

Some tweaks to popup events and widgets. Moved gui.mtt to guiDemo.mtt Changed handling of clicks with popups. Made some of the popup widgets use usual from widget data construction.
author Diggory Hardy <diggory.hardy@gmail.com>
date Fri, 26 Dec 2008 12:07:38 +0000
parents ee209602770d
children 5b37d0400732
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.WidgetManager;

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 WidgetManager gui = new WidgetManager ("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
}