summaryrefslogtreecommitdiff
path: root/server/src/widgetgenerator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/widgetgenerator.cc')
-rw-r--r--server/src/widgetgenerator.cc77
1 files changed, 77 insertions, 0 deletions
diff --git a/server/src/widgetgenerator.cc b/server/src/widgetgenerator.cc
new file mode 100644
index 0000000..ced804a
--- /dev/null
+++ b/server/src/widgetgenerator.cc
@@ -0,0 +1,77 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * widgetgenerator.cc
+ *
+ * Mon May 19 09:58:41 CEST 2008
+ * Copyright 2008 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ * deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ * 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 "widgetgenerator.h"
+
+static void send_macro_widget(Macro &macro, Widget &widget, TCPSocket &socket, std::string tabs, LUAQueryMapper &mapper)
+{
+ socket.write(tabs + "<" + widget.attributes["type"]);
+ std::map< std::string, std::string >::iterator p = widget.attributes.begin();
+
+ if(widget.attributes.find("map") != widget.attributes.end()) {
+ std::string luamap;
+
+ std::vector< Map >::iterator li = macro.maps.begin();
+ while(li != macro.maps.end()) {
+ Map &map = *li;
+ if(map.attributes["name"] == widget.attributes["map"]) {
+ luamap = map.attributes["lua"];
+ }
+ li++;
+ }
+
+ // printf("LUAMAP: %s\n", luamap.c_str()); fflush(stdout);
+
+ if(luamap != "") widget.attributes["value"] = mapper.map(luamap);
+ // widget.attributes.erase(widget.attributes.find("map"));
+ }
+
+ while(p != widget.attributes.end()) {
+ if(p->first != "type" && p->first != "map") {
+ socket.write(" " + p->first + "=\"" + p->second + "\"");
+ }
+ p++;
+ }
+
+ if(widget.widgets.size() == 0) { // If node is empty, use short tag form
+ socket.write("/>\n");
+ return;
+ }
+
+ socket.write(">\n");
+
+ std::vector< Widget >::iterator w = widget.widgets.begin();
+ while(w != widget.widgets.end()) {
+ send_macro_widget(macro, *w, socket, tabs + " ", mapper);
+ w++;
+ }
+ socket.write(tabs + "</" + widget.attributes["type"] + ">\n");
+}
+
+void widgetgenerator(TCPSocket &socket, Macro &macro, LUAQueryMapper &mapper)
+{
+ send_macro_widget(macro, macro.window, socket, " ", mapper);
+}