From 4d7617cbf20985b7cf2231675d8aadd01f77c3d2 Mon Sep 17 00:00:00 2001 From: deva Date: Wed, 2 Jul 2008 07:49:31 +0000 Subject: Added disable/enable methods on widgets and exposed them to lua. --- client/client.pro | 5 ++-- client/editor/editor.cc | 36 +++++++++++++++++++++++++ client/editor/editor.pro | 41 ++++++++++++++++++++++++++++ client/lua.cc | 66 ++++++++++++++++++++++++++++++++++++++++++++++ client/lua.h | 2 ++ client/macrowindow.cc | 30 +++++++++++++++++++++ client/macrowindow.h | 2 ++ client/widgets/checkbox.cc | 25 +++++++++++++++--- client/widgets/checkbox.h | 4 ++- client/widgets/combobox.cc | 10 +++++++ client/widgets/combobox.h | 7 ++++- client/widgets/frame.cc | 3 +++ client/widgets/groupbox.cc | 7 +++++ client/widgets/lineedit.cc | 10 +++++++ client/widgets/lineedit.h | 2 ++ client/widgets/widget.cc | 8 ++++++ client/widgets/widget.h | 2 ++ client/widgets/window.cc | 2 ++ 18 files changed, 253 insertions(+), 9 deletions(-) create mode 100644 client/editor/editor.cc create mode 100644 client/editor/editor.pro (limited to 'client') diff --git a/client/client.pro b/client/client.pro index cc69d96..7523dac 100644 --- a/client/client.pro +++ b/client/client.pro @@ -1,11 +1,10 @@ -###################################################################### -# Automatically generated by qmake (2.01a) Wed Aug 29 14:24:47 2007 -###################################################################### +# -*- Makefile -*- TEMPLATE = app TARGET = pracro DEPENDPATH += . widgets INCLUDEPATH += . widgets +SUBDIRS += editor QT += core gui network xml # For debugging diff --git a/client/editor/editor.cc b/client/editor/editor.cc new file mode 100644 index 0000000..de0bac1 --- /dev/null +++ b/client/editor/editor.cc @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * editor.cc + * + * Tue Jul 1 09:05:41 CEST 2008 + * Copyright 2008 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * 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. + */ +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + + + return app.exec(); +} diff --git a/client/editor/editor.pro b/client/editor/editor.pro new file mode 100644 index 0000000..513c977 --- /dev/null +++ b/client/editor/editor.pro @@ -0,0 +1,41 @@ +# -*- Makefile -*- + +TEMPLATE = app +TARGET = editor +DEPENDPATH += . .. +INCLUDEPATH += . .. +QT += core gui xml + +# For debugging +QMAKE_CXXFLAGS += -g -Wall -Werror + +win32 { + LIBPATH += lua/lib + INCLUDEPATH += lua/include + LIBS += -llua51 + DEFINES += HOST_WIN32 +} + +unix { + LIBS += -llua +} + +HEADERS += \ + widgets.h \ + widgets/widget.h \ + widgets/label.h \ + widgets/lineedit.h \ + widgets/multilist.h \ + widgets/textedit.h \ + widgets/button.h \ + widgets/combobox.h \ + widgets/listbox.h \ + widgets/frame.h \ + widgets/groupbox.h \ + widgets/radiobutton.h \ + widgets/radiobuttons.h \ + widgets/checkbox.h \ + widgets/window.h + +SOURCES += \ + editor.cc diff --git a/client/lua.cc b/client/lua.cc index 1be850c..22249a4 100644 --- a/client/lua.cc +++ b/client/lua.cc @@ -30,6 +30,60 @@ #define GLOBAL_POINTER "_pracroGlobalLUAObjectPointerThisShouldBeANameThatIsNotAccidentallyOverwritten" +static int _enable(lua_State *L) +{ + int n = lua_gettop(L); // number of arguments + if(n != 1) { + char errstr[512]; + sprintf(errstr, "Number of args expected 0, got %d", n); + lua_pushstring(L, errstr); + lua_error(L); + return 1; + } + + QString name = lua_tostring(L, lua_gettop(L)); + + lua_getglobal(L, GLOBAL_POINTER); + LUA *lua = (LUA*)lua_touserdata(L, lua_gettop(L)); + + if(!lua) { + lua_pushstring(L, "No LUA pointer!"); + lua_error(L); + return 1; + } + + lua->enable(name); + + return 0; +} + +static int _disable(lua_State *L) +{ + int n = lua_gettop(L); // number of arguments + if(n != 1) { + char errstr[512]; + sprintf(errstr, "Number of args expected 0, got %d", n); + lua_pushstring(L, errstr); + lua_error(L); + return 1; + } + + QString name = lua_tostring(L, lua_gettop(L)); + + lua_getglobal(L, GLOBAL_POINTER); + LUA *lua = (LUA*)lua_touserdata(L, lua_gettop(L)); + + if(!lua) { + lua_pushstring(L, "No LUA pointer!"); + lua_error(L); + return 1; + } + + lua->disable(name); + + return 0; +} + static int _getValue(lua_State *L) { int n = lua_gettop(L); // number of arguments @@ -105,6 +159,8 @@ LUA::LUA(MacroWindow *macrowindow) lua_register(L, "getValue", _getValue); lua_register(L, "setValue", _setValue); + lua_register(L, "enable", _enable); + lua_register(L, "disable", _disable); } LUA::~LUA() @@ -122,6 +178,16 @@ void LUA::setValue(QString name, QString value) macrowindow->setValue(name, value); } +void LUA::enable(QString name) +{ + return macrowindow->enable(name); +} + +void LUA::disable(QString name) +{ + return macrowindow->disable(name); +} + bool LUA::run(QString program, QString name, QString value) { if(L == NULL) { diff --git a/client/lua.h b/client/lua.h index 1499279..a3867ca 100644 --- a/client/lua.h +++ b/client/lua.h @@ -43,6 +43,8 @@ public: QString getValue(QString name); void setValue(QString name, QString value); + void enable(QString name); + void disable(QString name); void error(QString message); diff --git a/client/macrowindow.cc b/client/macrowindow.cc index 6f52916..ad85c6f 100644 --- a/client/macrowindow.cc +++ b/client/macrowindow.cc @@ -243,3 +243,33 @@ void MacroWindow::setValue(QString name, QString value) i++; } } + +void MacroWindow::enable(QString name) +{ + // Iterate the different entries, and append their results to the commit string + QVector< Widget* >::iterator i=widgets.begin(); + while (i != widgets.end()) { + Widget* w = *i; + if(name == w->getName()) { + w->enable(); + return; + } + i++; + } + printf("widget not found!\n"); +} + +void MacroWindow::disable(QString name) +{ + // Iterate the different entries, and append their results to the commit string + QVector< Widget* >::iterator i=widgets.begin(); + while (i != widgets.end()) { + Widget* w = *i; + if(name == w->getName()) { + w->disable(); + return; + } + i++; + } + printf("widget not found!\n"); +} diff --git a/client/macrowindow.h b/client/macrowindow.h index 82853d8..050e59d 100644 --- a/client/macrowindow.h +++ b/client/macrowindow.h @@ -52,6 +52,8 @@ public: QString getValue(QString name); void setValue(QString name, QString value); + void enable(QString name); + void disable(QString name); public slots: void commit(); diff --git a/client/widgets/checkbox.cc b/client/widgets/checkbox.cc index 0585abf..8474e58 100644 --- a/client/widgets/checkbox.cc +++ b/client/widgets/checkbox.cc @@ -42,13 +42,15 @@ CheckBox::CheckBox(QDomNode &node, MacroWindow *macrowindow) if(elem.hasAttribute("caption")) { setText(elem.attribute("caption")); } else { - setText(elem.attribute("")); + setText(""); } + connect(this, SIGNAL(stateChanged(int)), this, SLOT(state_change())); + if(elem.hasAttribute("value")) { setValue(elem.attribute("value")); } else { - setChecked(false); + setValue("false"); } } @@ -60,11 +62,26 @@ QString CheckBox::getValue() void CheckBox::setValue(QString value) { - if(value == "true") setChecked(true); - else setChecked(false); + bool old = isChecked(); + + if(value == "true") { + setChecked(true); + } else { + setChecked(false); + } + + // If set operation did not change the value we must invocate the code manually. + if(old == isChecked()) state_change(); } bool CheckBox::isValid() { return true; } + +void CheckBox::state_change() +{ + printf("state_change\n"); + + luaValidator(); +} diff --git a/client/widgets/checkbox.h b/client/widgets/checkbox.h index 9db7bf2..65a0356 100644 --- a/client/widgets/checkbox.h +++ b/client/widgets/checkbox.h @@ -33,15 +33,17 @@ class CheckBox : public QCheckBox, public Widget { +Q_OBJECT public: CheckBox(QDomNode &node, MacroWindow *macrowindow); bool isValid(); -public slots: QString getValue(); void setValue(QString value); +public slots: + void state_change(); }; #endif/*__PRACRO_CHECKBOX_H__*/ diff --git a/client/widgets/combobox.cc b/client/widgets/combobox.cc index a60f1ed..3856bed 100644 --- a/client/widgets/combobox.cc +++ b/client/widgets/combobox.cc @@ -154,3 +154,13 @@ void ComboBox::changed() setPalette(palette); } + +void ComboBox::enable() +{ + setEnabled(true); +} + +void ComboBox::disable() +{ + setEnabled(false); +} diff --git a/client/widgets/combobox.h b/client/widgets/combobox.h index 9ad2323..0a5724f 100644 --- a/client/widgets/combobox.h +++ b/client/widgets/combobox.h @@ -38,10 +38,15 @@ Q_OBJECT public: ComboBox(QDomNode &node, MacroWindow *macrowindow); -public slots: bool isValid(); + QString getValue(); void setValue(QString value); + + void enable(); + void disable(); + +public slots: void changed(); private: diff --git a/client/widgets/frame.cc b/client/widgets/frame.cc index ecf0701..44571f5 100644 --- a/client/widgets/frame.cc +++ b/client/widgets/frame.cc @@ -42,5 +42,8 @@ Frame::Frame(QDomNode &node, MacroWindow *macrowindow) setLayout(layout); } } + setLineWidth(0); + setMidLineWidth(0); + setContentsMargins(0,0,0,0); } diff --git a/client/widgets/groupbox.cc b/client/widgets/groupbox.cc index 2edb344..9dc36ec 100644 --- a/client/widgets/groupbox.cc +++ b/client/widgets/groupbox.cc @@ -47,5 +47,12 @@ GroupBox::GroupBox(QDomNode &node, MacroWindow *macrowindow) QVBoxLayout *layout = new QVBoxLayout(); setLayout(layout); } + } else { + QHBoxLayout *layout = new QHBoxLayout(); + setLayout(layout); } + + // setLineWidth(0); + // setMidLineWidth(0); + setContentsMargins(0,10,0,0); } diff --git a/client/widgets/lineedit.cc b/client/widgets/lineedit.cc index 7f270e9..8694889 100644 --- a/client/widgets/lineedit.cc +++ b/client/widgets/lineedit.cc @@ -80,3 +80,13 @@ void LineEdit::setValue(QString value) { setText(value); } + +void LineEdit::enable() +{ + setEnabled(true); +} + +void LineEdit::disable() +{ + setEnabled(false); +} diff --git a/client/widgets/lineedit.h b/client/widgets/lineedit.h index 3deb3d1..3f0bb17 100644 --- a/client/widgets/lineedit.h +++ b/client/widgets/lineedit.h @@ -40,6 +40,8 @@ public: QString getValue(); void setValue(QString value); + void enable(); + void disable(); public slots: void changed(); diff --git a/client/widgets/widget.cc b/client/widgets/widget.cc index dafe4b7..efba31c 100644 --- a/client/widgets/widget.cc +++ b/client/widgets/widget.cc @@ -84,3 +84,11 @@ bool Widget::luaValidator() return macrowindow->lua->run(luaprogram, getName(), getValue()); } + +void Widget::disable() +{ +} + +void Widget::enable() +{ +} diff --git a/client/widgets/widget.h b/client/widgets/widget.h index cba6be9..9b6a996 100644 --- a/client/widgets/widget.h +++ b/client/widgets/widget.h @@ -41,6 +41,8 @@ public: virtual QString getValue(); virtual void setValue(QString value); virtual bool isValid(); + virtual void disable(); + virtual void enable(); QString getName(); protected: diff --git a/client/widgets/window.cc b/client/widgets/window.cc index b2b4298..c4d8d14 100644 --- a/client/widgets/window.cc +++ b/client/widgets/window.cc @@ -64,6 +64,8 @@ Window::Window(QDomNode &node, MacroWindow *macrowindow) setLayout(layout); } } + + setContentsMargins(0,0,0,0); } QString Window::getValue() -- cgit v1.2.3