From c58541468c5477323e35837a8f0aeaf41e5a0794 Mon Sep 17 00:00:00 2001 From: deva Date: Fri, 13 Aug 2010 11:56:34 +0000 Subject: Fix one too many resets of the LUA stack. --- client/lua.cc | 19 +++++++++++-------- client/macrowindow.cc | 28 ++++++++++++++++++++++------ client/macrowindow.h | 3 +++ client/netcom.cc | 10 ++++++---- client/widgets/button.cc | 1 - client/widgets/checkbox.cc | 1 - client/widgets/lineedit.cc | 1 - client/widgets/widget.cc | 27 +++++++++++++++++---------- client/widgets/window.cc | 10 ++++++++-- 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 #include +//#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 #include +//#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; } -- cgit v1.2.3