summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2010-08-13 11:56:34 +0000
committerdeva <deva>2010-08-13 11:56:34 +0000
commitc58541468c5477323e35837a8f0aeaf41e5a0794 (patch)
tree4a215de3b61bf3a521edf2e6f67f00c3731b6dc7
parent51122d8689f6fbb1061ee0b19f885ad8851dfd50 (diff)
Fix one too many resets of the LUA stack.
-rw-r--r--client/lua.cc19
-rw-r--r--client/macrowindow.cc28
-rw-r--r--client/macrowindow.h3
-rw-r--r--client/netcom.cc10
-rw-r--r--client/widgets/button.cc1
-rw-r--r--client/widgets/checkbox.cc1
-rw-r--r--client/widgets/lineedit.cc1
-rw-r--r--client/widgets/widget.cc27
-rw-r--r--client/widgets/window.cc10
9 files changed, 67 insertions, 33 deletions
diff --git a/client/lua.cc b/client/lua.cc
index 3dd5381..062e520 100644
--- a/client/lua.cc
+++ b/client/lua.cc
@@ -32,6 +32,9 @@
#include "luawidget.h"
+#define DEBUG(fmt...) printf("LUA (%p)", this); printf(fmt); fflush(stdout)
+//#define DEBUG(ftm...)
+
#define GLOBAL_POINTER "_pracroGlobalLUAObjectPointerThisShouldBeANameThatIsNotAccidentallyOverwritten"
static int get_widget(lua_State *L)
@@ -58,7 +61,7 @@ static int get_widget(lua_State *L)
Widget *widget = lua->getWidget(name);
- // printf("FIND: %s (%p)\n", name.toStdString().c_str(), widget);
+ // DEBUG("FIND: %s (%p)\n", name.toStdString().c_str(), widget);
if(widget) {
wdg_make_widget(L, widget);
@@ -66,7 +69,7 @@ static int get_widget(lua_State *L)
lua_pushnil(L);
}
- // printf("DONE\n");
+ // DEBUG("DONE\n");
return 1;
}
@@ -111,7 +114,7 @@ QString LUA::runParser(QString program)
return false;
}
- printf("Running %s\n", program.toStdString().c_str());
+ DEBUG("Running %s\n", program.toStdString().c_str());
int top = lua_gettop(L);
@@ -152,10 +155,10 @@ bool LUA::runScript(QString script, Widget *widget, QString name)
return false;
}
- printf("Running %s script %s on %s widget.\n",
- name.toStdString().c_str(),
- script.toStdString().c_str(),
- widget?widget->name().toStdString().c_str():"NULL");
+ DEBUG("Running %s script %s on %s widget.\n",
+ name.toStdString().c_str(),
+ script.toStdString().c_str(),
+ widget?widget->name().toStdString().c_str():"NULL");
if(widget) {
wdg_make_widget(L, widget);
@@ -181,7 +184,7 @@ bool LUA::runScript(QString script, Widget *widget, QString name)
void LUA::error(QString message)
{
- printf("LUA ERROR: %s\n", message.toStdString().c_str());
+ DEBUG("LUA ERROR: %s\n", message.toStdString().c_str());
}
Widget *LUA::getWidget(QString name)
diff --git a/client/macrowindow.cc b/client/macrowindow.cc
index 5a6760e..f8c9af6 100644
--- a/client/macrowindow.cc
+++ b/client/macrowindow.cc
@@ -42,10 +42,16 @@ extern QString user;
extern QString host;
extern quint16 port;
+#define DEBUG(fmt...) printf("MacroWindow (%p)", this); \
+ printf(fmt); fflush(stdout)
+//#define DEBUG(ftm...)
+
MacroWindow::MacroWindow(NetCom &n, QDomNode &xml_doc, QString templ,
bool collapsed, bool compact)
: Collapser(), netcom(n)
{
+ DEBUG("macrowindow %p\n", this);
+
mainwidget = NULL;
lua = new LUA(&mainwidget);
@@ -55,11 +61,12 @@ MacroWindow::MacroWindow(NetCom &n, QDomNode &xml_doc, QString templ,
setCollapsedWidget(new ResumeWidget(compact));
-
update(xml_doc);
setCollapsed(collapsed);
active = true;
+
+ connect(this, SIGNAL(doneCollapsing()), this, SLOT(collapsed()));
}
MacroWindow::~MacroWindow()
@@ -69,6 +76,9 @@ MacroWindow::~MacroWindow()
void MacroWindow::update(QDomNode &node)
{
+ clear();
+ lua->clear();
+
initMacro(node);
if(mainwidget) setExpandedWidget(mainwidget->qwidget());
@@ -106,7 +116,7 @@ void MacroWindow::initMacro(QDomNode &node)
} else if(xml_elem.tagName() == "widgets") {
if(mainwidget) {
- printf("ERROR!!!!!!\n\tmainwidget already exists!\n");
+ DEBUG("ERROR!!!!!!\n\tmainwidget already exists!\n");
}
Window *window = new Window(xml_elem, this);
@@ -271,7 +281,7 @@ void MacroWindow::toggleMacro()
void MacroWindow::macroChanged()
{
- printf("This macro was changed!\n");
+ DEBUG("This macro was changed!\n");
emit macroHasChanged();
waschanged = true;
}
@@ -288,11 +298,17 @@ void MacroWindow::setActive(bool active)
void MacroWindow::clear()
{
+ DEBUG("clear %p\n", this);
+ setExpandedWidget(NULL);
+
if(mainwidget) delete mainwidget;
mainwidget = NULL;
- lua->clear();
-
- setExpandedWidget(NULL);
+ // lua->clear();
}
+void MacroWindow::collapsed()
+{
+ DEBUG("collapsed %p\n", this);
+ clear();
+}
diff --git a/client/macrowindow.h b/client/macrowindow.h
index 02370dd..dc60ccc 100644
--- a/client/macrowindow.h
+++ b/client/macrowindow.h
@@ -68,6 +68,9 @@ signals:
void macroHasChanged();
void activationChanged(bool);
+private slots:
+ void collapsed();
+
private:
void initMacro(QDomNode &node);
diff --git a/client/netcom.cc b/client/netcom.cc
index a606c62..02c5704 100644
--- a/client/netcom.cc
+++ b/client/netcom.cc
@@ -48,8 +48,8 @@
#endif
#endif
-#define DEBUG(fmt...) printf(fmt)
-//#define DEBUG(ftm...)
+//#define DEBUG(fmt...) printf(fmt)
+#define DEBUG(ftm...)
NetCom::NetCom(QString host, quint16 port)
{
@@ -191,10 +191,11 @@ QDomDocument NetCom::send(QVector< Widget* > widgets, QString templ,
// Iterate the different entries, and append their results to
// the commit string
QVector< Widget* >::iterator i = widgets.begin();
- while (i != widgets.end()) {
+ while(i != widgets.end()) {
+ DEBUG("W = ");
if(*i) {
Widget* w = *i;
- DEBUG("W: %s: %s\n", w->name().toStdString().c_str(),
+ DEBUG("name: %s val: %s", w->name().toStdString().c_str(),
w->value().toStdString().c_str());
if(w->enabled() && w->name() != "" && w->local() == false) {
QDomElement field_elem = doc.createElement("field");
@@ -203,6 +204,7 @@ QDomDocument NetCom::send(QVector< Widget* > widgets, QString templ,
commit_elem.appendChild(field_elem);
}
}
+ DEBUG("\n");
i++;
}
diff --git a/client/widgets/button.cc b/client/widgets/button.cc
index 3234296..6e809fe 100644
--- a/client/widgets/button.cc
+++ b/client/widgets/button.cc
@@ -64,7 +64,6 @@ Button::Button(QDomNode &node, MacroWindow *macrowindow)
Button::~Button()
{
- printf("Delete (Button) %p\n", this); fflush(stdout);
// delete button;
}
diff --git a/client/widgets/checkbox.cc b/client/widgets/checkbox.cc
index 19b59e6..af7d68f 100644
--- a/client/widgets/checkbox.cc
+++ b/client/widgets/checkbox.cc
@@ -63,7 +63,6 @@ CheckBox::CheckBox(QDomNode &node, MacroWindow *macrowindow)
CheckBox::~CheckBox()
{
- printf("Delete (CheckBox) %p\n", this); fflush(stdout);
// delete checkbox;
}
diff --git a/client/widgets/lineedit.cc b/client/widgets/lineedit.cc
index 6b231f3..cddd59e 100644
--- a/client/widgets/lineedit.cc
+++ b/client/widgets/lineedit.cc
@@ -65,7 +65,6 @@ LineEdit::LineEdit(QDomNode &node, MacroWindow *macrowindow)
LineEdit::~LineEdit()
{
- printf("Delete (LineEdit) %p\n", this); fflush(stdout);
// delete lineedit;
}
diff --git a/client/widgets/widget.cc b/client/widgets/widget.cc
index f3247a0..cd29d0a 100644
--- a/client/widgets/widget.cc
+++ b/client/widgets/widget.cc
@@ -33,10 +33,15 @@
#include <QLayout>
#include <QObject>
+//#define DEBUG(fmt...) printf(fmt)
+#define DEBUG(ftm...)
+
Widget::Widget(QDomNode &node, MacroWindow *macrowindow)
{
widget = NULL;
+ hideChildren = false;
+
QDomElement elem = node.toElement();
this->macrowindow = macrowindow;
@@ -65,16 +70,16 @@ Widget::Widget(QDomNode &node, MacroWindow *macrowindow)
is_valid = true;
- printf("Create Widget '%s' of type '%s'\n",
- name().toStdString().c_str(),
- type().toStdString().c_str());
+ DEBUG("Create Widget '%s' of type '%s'\n",
+ name().toStdString().c_str(),
+ type().toStdString().c_str());
}
Widget::~Widget()
{
- printf("Delete Widget '%s' of type '%s'\n",
- name().toStdString().c_str(),
- type().toStdString().c_str());
+ DEBUG("Delete Widget '%s' of type '%s'\n",
+ name().toStdString().c_str(),
+ type().toStdString().c_str());
QVector< Widget* >::iterator i = children.begin();
while(i != children.end()) {
@@ -178,7 +183,7 @@ bool Widget::setKeyboardFocus()
Widget *Widget::findWidget(QString n, bool deep)
{
- printf("Find Widget %p\n", this); fflush(stdout);
+ DEBUG("Find Widget %p\n", this); fflush(stdout);
if(n == name()) return this;
@@ -198,9 +203,11 @@ Widget *Widget::findWidget(QString n, bool deep)
QVector< Widget* > Widget::widgetList(bool deep)
{
- printf("Widget List %p\n", this); fflush(stdout);
+ DEBUG("Widget List %p\n", this); fflush(stdout);
+
+ QVector< Widget* > lst;
- QVector< Widget* > lst = children;
+ lst.push_back(this);
if(hideChildren && deep == false) return lst;
@@ -221,7 +228,7 @@ void Widget::childWasChanged()
void Widget::addChild(Widget *widget)
{
if(widget == NULL) {
- printf("Trying to add NULL child to '%s'\n", name().toStdString().c_str());
+ DEBUG("Trying to add NULL child to '%s'\n", name().toStdString().c_str());
return;
}
children.push_back(widget);
diff --git a/client/widgets/window.cc b/client/widgets/window.cc
index 4d9253d..b480189 100644
--- a/client/widgets/window.cc
+++ b/client/widgets/window.cc
@@ -30,9 +30,14 @@
#include <QWidget>
#include <QIcon>
+//#define DEBUG(fmt...) printf(fmt)
+#define DEBUG(ftm...)
+
Window::Window(QDomNode &node, MacroWindow *macrowindow)
: Widget(node, macrowindow)
{
+ DEBUG("window\n");
+
widget = new QWidget(NULL);
widget->setWindowFlags(Qt::WindowContextHelpButtonHint |
@@ -60,6 +65,7 @@ Window::Window(QDomNode &node, MacroWindow *macrowindow)
Window::~Window()
{
- printf("Delete (Window) %p\n", this); fflush(stdout);
- // delete widget;
+ DEBUG("~window\n");
+
+ //delete widget;
}