gambas-source-code/gb.qt4/share/gb.form.action.h
Benoît Minisini 17a0748815 [CONFIGURATION]
* NEW: Each component installation now generates all information files
  systematically, to fix possible dependencies between components written
  in Gambas.

[DEVELOPMENT ENVIRONMENT]
* NEW: Running a project using the 'gb.web' component now automatically
  starts the embedded HTTP server.

[INTERPRETER]
* NEW: Class overriding is retrospective now.
* NEw: System._Breakpoint() is a new hidden method that raises a 
  breakpoint. Very useful for debugging.

[GB.GTK]
* BUG: The Action.Register() method must not crash when called during class 
  clean-up.

[GB.HTTPD]
* NEW: Define a custom exported HTTP server name.

[GB.JIT]
* BEW: Support for new class overriding (the CLASS structure has lost one 
  field).

[GB.QT4]
* BUG: The Action.Register() method must not crash when called during class 
  clean-up.


git-svn-id: svn://localhost/gambas/trunk@5240 867c0c6c-44f3-4631-809d-bfa615b0a4ec
2012-10-14 22:42:53 +00:00

89 lines
2.6 KiB
C

/***************************************************************************
gb.form.action.h
(c) 2000-2012 Benoît Minisini <gambas@users.sourceforge.net>
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, 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
***************************************************************************/
#define __GB_FORM_ACTION_H
/***************************************************************************
#define HAS_ACTION(_widget)
If a widget has the action flag set.
#define SET_ACTION(_widget, _flag)
Sets or clears the action flag.
***************************************************************************/
static GB_FUNCTION _action_register_func;
static GB_FUNCTION _action_raise_func;
//static GB_FUNCTION _action_get_func;
static void init_action()
{
static bool init = false;
void *klass;
if (init)
return;
klass = (void *)GB.FindClass("Action");
GB.GetFunction(&_action_register_func, klass, "_Register", "oss", "");
GB.GetFunction(&_action_raise_func, klass, "Raise", "o", "");
//GB.GetFunction(&_action_get_func, klass, "Get", "o", "s");
init = true;
}
void CACTION_register(void *control, const char *old, const char *key)
{
//qDebug("CACTION_register: (%s %p) %s", GB.GetClassName(control), control, key);
//fprintf(stderr, "CACTION_register: (%s %p %p) %s\n", GB.GetClassName(control), control, ((CWIDGET *)control)->widget, key);
if ((!key || !*key) && !HAS_ACTION(control))
//&& !GB.Is(control, CLASS_UserControl) && !GB.Is(control, CLASS_UserContainer))
return;
init_action();
GB.Push(3,
GB_T_OBJECT, control,
GB_T_STRING, old, 0,
GB_T_STRING, key, 0);
// The register function must not raise an error, otherwise bad things may happen
GB.Call(&_action_register_func, 3, true);
SET_ACTION(control, key && *key);
}
void CACTION_raise(void *control)
{
init_action();
//qDebug("CACTION_raise: (%s %p)", GB.GetClassName(THIS), THIS);
if (!HAS_ACTION(control))
return;
GB.Push(1, GB_T_OBJECT, control);
GB.Call(&_action_raise_func, 1, true);
}