Mercurial > ~dholland > hg > ag > index.cgi
diff anagram/guisupport/action.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anagram/guisupport/action.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,58 @@ +/* + * AnaGram, A System for Syntax Directed Programming + * Copyright 1997-2002 Parsifal Software. All Rights Reserved. + * See the file COPYING for license and usage terms. + * + * action.cpp + */ + +#include "action.h" + +//#define INCLUDE_LOGGING +#include "log.h" + + +int AgAction::running = 0; + +AgStack<AgAction> AgAction::startupStack; + +AgAction actionObject(void (*function)()) { + return AgSimpleAction(function); +} + +void AgAction::startup() { + LOGSECTION("AgAction::startup"); + running = 1; + int n = startupStack.size(); + LOGV(n); + int i; + for (i = 0; i < n; i++) { + startupStack[i].perform(); + } + startupStack.discardData(); +} + +void AgAction::performDeferred() const { + if (!running) { + startupStack.push(*this); + return; + } + LOGSECTION_OFF("AgAction::performDeferred"); + LOGV((int) kernel); + if (kernel == 0) { + return; + } + kernel->lock(); + AgActionEnqueueInGui(kernel); +} + +void AgActionDispatchFromGui(AgAction::Kernel *kernel) { + kernel->perform(); + if (kernel->unlock()) { + delete kernel; + } +} + +void defer(void (*function)()) { + actionObject(function).performDeferred(); +}