summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2010-08-17 14:29:05 +0000
committerdeva <deva>2010-08-17 14:29:05 +0000
commitd2295ad23ed22af07addc93b71e36f7bb688d534 (patch)
tree4915612e87646091275e291bae291951744585fc
parentb23c3c321b80449aa22e14d40115d1e4a764a1b3 (diff)
New format parser for metawidget et al. DBWidget is broken for the moment...
-rw-r--r--client/client.pro2
-rw-r--r--client/debug.cc5
-rw-r--r--client/debug.h2
-rw-r--r--client/formatparser.cc195
-rw-r--r--client/formatparser.h38
-rw-r--r--client/lua.cc30
-rw-r--r--client/lua.h3
-rw-r--r--client/mainwindow.cc4
-rw-r--r--client/widgets/dbwidget.cc3
-rw-r--r--client/widgets/metawidget.cc26
-rw-r--r--client/widgets/widget.h3
11 files changed, 38 insertions, 273 deletions
diff --git a/client/client.pro b/client/client.pro
index e507c4e..3758693 100644
--- a/client/client.pro
+++ b/client/client.pro
@@ -35,7 +35,6 @@ unix {
HEADERS += \
collapser.h \
debug.h \
- formatparser.h \
lua.h \
luawidget.h \
macro.h \
@@ -72,7 +71,6 @@ SOURCES += \
pracro.cc \
collapser.cc \
debug.cc \
- formatparser.cc \
lua.cc \
luawidget.cc \
macro.cc \
diff --git a/client/debug.cc b/client/debug.cc
index 282cf93..6eed1ad 100644
--- a/client/debug.cc
+++ b/client/debug.cc
@@ -129,6 +129,11 @@ void dbg_hide()
if(debugwindow) debugwindow->hide();
}
+bool dbg_enabled()
+{
+ return debugwindow != NULL;
+}
+
void dbg_log(const char *func, const char *file, const int line,
debug_class cl, const char *ch, const char *fmt, ...)
{
diff --git a/client/debug.h b/client/debug.h
index 0508b31..e0de223 100644
--- a/client/debug.h
+++ b/client/debug.h
@@ -34,6 +34,8 @@ void dbg_show();
void dbg_toggle();
void dbg_hide();
+bool dbg_enabled();
+
typedef enum {
_debug,
_error,
diff --git a/client/formatparser.cc b/client/formatparser.cc
deleted file mode 100644
index 71f80ee..0000000
--- a/client/formatparser.cc
+++ /dev/null
@@ -1,195 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * resumeparser.cc
- *
- * Mon Oct 1 11:17:35 CEST 2007
- * Copyright 2007 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 "formatparser.h"
-
-#include <QSqlRecord>
-#include <QVariant>
-#include <string.h>
-
-#include "lua.h"
-#include "macrowindow.h"
-#include "widgets/widget.h"
-
-static QString format_parser_lua(QString format, Widget *w)
-{
- /*
- LUA lua(w);
-
- return lua.runParser(format);
- */
-
- format = format;
- w = w;
-
- return "FIXME: formatparser.cc:44";
-}
-
-static QString format_parser_pracro(QString format, Widget *w)
-{
- QString resume;
- QString var;
-
- QChar *p = format.data();
- QChar *theend = p + format.size();
- while(p < theend) {
- switch((*p).toLatin1()) {
- case '$':
- p++;
- switch((*p).toLatin1()) {
- case '$':
- resume.append(*p);
- break;
-
- case '{':
- p++;
- var = "";
- // Parser
- while(p < theend && *p != '}') {
- var.append(*p);
- p++;
- }
- {
- Widget *widget = w->findWidget(var, true);
- if(widget) resume += widget->value();
- }
- break;
-
- default:
- resume.append(*p);
- break;
- }
- p++;
- break;
-
- case '\\':
- p++;
- switch((*p).toLatin1()) {
- case 't':
- resume.append('\t');
- break;
- case 'n':
- resume.append('\n');
- break;
- case 'r':
- resume.append('\r');
- break;
- case '\\':
- default:
- resume.append(*p);
- break;
- }
- p++;
- break;
-
- default:
- resume.append(QChar(*p));
- p++;
- break;
- }
- }
-
- return resume;
-}
-
-
-QString format_parser(QString format, QSqlQuery &query)
-{
- QString resume;
- QString var;
-
- QChar *p = format.data();
- QChar *theend = p + format.size();
- while(p < theend) {
- switch((*p).toLatin1()) {
- case '$':
- p++;
- switch((*p).toLatin1()) {
- case '$':
- resume.append(*p);
- break;
-
- case '{':
- p++;
- var = "";
- // Parser
- while(p < theend && *p != '}') {
- var.append(*p);
- p++;
- }
- {
- int idx = query.record().indexOf(var);
- if(idx == -1) {
- printf("Unknown field in format string %s\n", var.toStdString().c_str());
- } else {
- resume += query.value(idx).toString();
- }
- }
- break;
-
- default:
- resume.append(*p);
- break;
- }
- p++;
- break;
-
- case '\\':
- p++;
- switch((*p).toLatin1()) {
- case 't':
- resume.append('\t');
- break;
- case 'n':
- resume.append('\n');
- break;
- case 'r':
- resume.append('\r');
- break;
- case '\\':
- default:
- resume.append(*p);
- break;
- }
- p++;
- break;
-
- default:
- resume.append(QChar(*p));
- p++;
- break;
- }
- }
-
- return resume;
-}
-
-QString format_parser(QString format, Widget *w, QString language)
-{
- if(language == "pracro") return format_parser_pracro(format, w);
- if(language == "lua") return format_parser_lua(format, w);
- return "";
-}
diff --git a/client/formatparser.h b/client/formatparser.h
deleted file mode 100644
index 120709e..0000000
--- a/client/formatparser.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * formatparser.h
- *
- * Mon Oct 1 11:17:35 CEST 2007
- * Copyright 2007 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.
- */
-#ifndef __PRACRO_FORMATPARSER_H__
-#define __PRACRO_FORMATPARSER_H__
-
-#include <QString>
-#include <QVector>
-#include <QSqlQuery>
-
-class Widget;
-QString format_parser(QString format, Widget *w, QString language);
-QString format_parser(QString format, QSqlQuery &query);
-
-#endif/*__PRACRO_FORMATPARSER_H__*/
diff --git a/client/lua.cc b/client/lua.cc
index 3607a26..af64efb 100644
--- a/client/lua.cc
+++ b/client/lua.cc
@@ -106,39 +106,47 @@ void LUA::clear()
register_widget(L);
}
-QString LUA::runParser(QString program)
+QString LUA::runScriptS(QString script, Widget *widget, QString name)
{
if(L == NULL) {
ERROR(lua, "LUA state not initialized!");
- return false;
+ return "";
}
- DEBUG(lua, "Running %s\n", program.toStdString().c_str());
-
int top = lua_gettop(L);
+ DEBUG(lua, "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);
+ lua_setglobal(L, "this");
+ }
+
if(luaL_loadbuffer(L,
- program.toStdString().c_str(),
- program.size(),
- "parser")) {
+ script.toStdString().c_str(),
+ script.size(),
+ name.toStdString().c_str())) {
ERROR(lua, "%s", lua_tostring(L, lua_gettop(L)));
- return false;
+ return "";
}
// Run the loaded code
if(lua_pcall(L, 0, LUA_MULTRET, 0)) {
ERROR(lua, "%s", lua_tostring(L, lua_gettop(L)));
- return false;
+ return "";
}
if(top != lua_gettop(L) - 1) {
ERROR(lua, "Program did not return a single value.\n");
- return false;
+ return "";
}
if(lua_isstring(L, lua_gettop(L)) == false) {
ERROR(lua, "Program did not return a boolean value.\n");
- return false;
+ return "";
}
QString res = lua_tostring(L, lua_gettop(L));
diff --git a/client/lua.h b/client/lua.h
index bacce14..8200873 100644
--- a/client/lua.h
+++ b/client/lua.h
@@ -39,9 +39,8 @@ public:
LUA(Widget **rootwidget);
~LUA();
- QString runParser(QString program);
-
bool runScript(QString script, Widget *widget, QString name = "");
+ QString runScriptS(QString script, Widget *widget, QString name = "");
Widget *getWidget(QString name);
diff --git a/client/mainwindow.cc b/client/mainwindow.cc
index e8a7f51..a908988 100644
--- a/client/mainwindow.cc
+++ b/client/mainwindow.cc
@@ -78,7 +78,9 @@ MainWindow::MainWindow(QString cpr, QString templ, QString host,
QStatusBar *status = statusBar();
status->addPermanentWidget(new QLabel("Pracro v."VERSION));
- status->addPermanentWidget(new Dbg());
+ if(dbg_enabled()) {
+ status->addPermanentWidget(new Dbg());
+ }
QToolBar *toolbar = addToolBar("controls");
toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
diff --git a/client/widgets/dbwidget.cc b/client/widgets/dbwidget.cc
index 4d6240c..08107b1 100644
--- a/client/widgets/dbwidget.cc
+++ b/client/widgets/dbwidget.cc
@@ -36,7 +36,6 @@
#include <QLineEdit>
#include <QComboBox>
-#include "formatparser.h"
#include "common.h"
#define EMPTY_STRING "Write something in the searchfield"
@@ -160,7 +159,7 @@ void DBWidget::update_list(QString prefix)
QStringList lst;
while(query.next()) {
- lst << format_parser(format, query);
+ // lst << format_parser(format, query);
}
lst.sort();
diff --git a/client/widgets/metawidget.cc b/client/widgets/metawidget.cc
index a179138..a866445 100644
--- a/client/widgets/metawidget.cc
+++ b/client/widgets/metawidget.cc
@@ -31,10 +31,11 @@
#include <QFrame>
#include "messagebox.h"
-#include "formatparser.h"
#include "macrowindow.h"
#include "common.h"
+#include "debug.h"
+
MetaWidget::MetaWidget(QDomNode &node, MacroWindow *macrowindow)
: Widget(node, macrowindow)
{
@@ -59,24 +60,7 @@ MetaWidget::MetaWidget(QDomNode &node, MacroWindow *macrowindow)
*/
// addChildren(node);
- // Setup format string
- if(elem.hasAttribute("formatlanguage")) {
- formatlanguage = elem.attribute("formatlanguage");
- } else {
- formatlanguage = "pracro";
- }
-
- if(elem.hasAttribute("format")) {
- format = elem.attribute("format");
- } else {
- QVector< Widget* >::iterator i = widgets.begin();
- while (i != widgets.end()) {
- Widget* w = *i;
- if(format != "") format += ", ";
- format += "${" + w->name() + "}";
- i++;
- }
- }
+ format = elem.attribute("format", "");
addChildren(node, frame->layout());
@@ -101,12 +85,12 @@ void MetaWidget::changed()
QString MetaWidget::value()
{
- return format_parser(format, this, formatlanguage);
+ return lua->runScriptS(format, this, "format");
}
void MetaWidget::setValue(QString, QString)
{
- // Nothing reasonable we can do here.
+ WARN(metawidget, "setValue was attempted on this widget.");
}
bool MetaWidget::preValid()
diff --git a/client/widgets/widget.h b/client/widgets/widget.h
index 3315c2e..d172543 100644
--- a/client/widgets/widget.h
+++ b/client/widgets/widget.h
@@ -95,6 +95,8 @@ protected:
void addChildren(QDomNode &xml_node, QLayout *layout);
+ LUA *lua;
+
private:
QVector< Widget* > children;
void createWidget(QDomNode &xml_node, QLayout *layout);
@@ -109,7 +111,6 @@ private:
QString widget_type;
bool widget_local;
- LUA *lua;
MacroWindow *macrowindow;
bool hasOnChangeEvent;