/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * widget.h * * Tue Jul 17 12:15:59 CEST 2007 * Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen * deva@aasimon.org and elsenator@gmail.com ****************************************************************************/ /* * This file is part of Pracro. * * Pracro 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. * * Pracro 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 Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef __PRACRO_WIDGET_H__ #define __PRACRO_WIDGET_H__ #include #include #include #include #include #include "lua.h" class QLayout; class MacroWindow; class LUA; class Widget; class Widget : public QObject { Q_OBJECT public: Widget(QDomNode &node, MacroWindow *macrowindow); virtual ~Widget(); QString name(); QString type(); bool local(); virtual QString value() = 0; virtual void setValue(QString value, QString source) = 0; // Set deep to true to validate inner widgets. bool valid(bool deep = false); void setValid(bool valid, bool deep = false); // Implement in subclasses to contribute to the validation. virtual bool preValid() { return true; } // Implement in subclasses to change widget according to validation status. virtual void setWdgValid(bool valid) = 0; virtual void setEnabled(bool enabled); virtual bool enabled(); virtual void setVisible(bool visible); virtual bool visible(); virtual bool setKeyboardFocus(); QWidget *qwidget() { return widget; } // Set deep to true to search through inner widgets. Widget *findWidget(QString name, bool deep = false); QVector< Widget* > widgetList(bool deep = false); void addChild(Widget *widget); void setValues(); signals: void wasChanged(); /* * LUA scripting events: */ void eventOnChange(bool deep = false); void eventOnInit(bool deep = false); public slots: void childWasChanged(); void runEventOnChange(bool deep = false); void runEventOnInit(bool deep = false); protected: QWidget *widget; bool hideChildren; void addChildren(QDomNode &xml_node, QLayout *layout); LUA *lua; void createWidget(QDomNode &xml_node, QLayout *layout); QVector< Widget* > children; void setWdgValidRecursive(bool valid); // Store value in constructor to be set later. bool has_lazy; QString lazy_value; QString lazy_source; bool is_valid; QString widget_name; QString widget_type; bool widget_local; MacroWindow *macrowindow; bool hasOnChangeEvent; QString onChangeEventScript; bool hasOnInitEvent; QString onInitEventScript; }; int wdg_name(lua_State *L); int wdg_type(lua_State *L); int wdg_value(lua_State *L); int wdg_set_value(lua_State *L); int wdg_enabled(lua_State *L); int wdg_set_enabled(lua_State *L); int wdg_visible(lua_State *L); int wdg_set_visible(lua_State *L); int wdg_valid(lua_State *L); int wdg_set_valid(lua_State *L); #define WDG_METHS \ {"name", wdg_name},\ {"type", wdg_type},\ {"value", wdg_value},\ {"setValue", wdg_set_value},\ {"enabled", wdg_enabled},\ {"setEnabled", wdg_set_enabled},\ {"visible", wdg_visible},\ {"setVisible", wdg_set_visible},\ {"valid", wdg_valid},\ {"setValid", wdg_set_valid} const struct luaL_Reg wdg_meths[] = { WDG_METHS, {NULL, NULL} }; inline void register_widget(lua_State *L) { luaL_newmetatable(L, "Widget"); lua_pushliteral(L, "__index"); lua_pushvalue(L, -2); lua_rawset(L, -3); luaL_register(L, NULL, wdg_meths); } #endif/*__PRACRO_WIDGET_H__*/