summaryrefslogtreecommitdiff
path: root/client/macro.cc
diff options
context:
space:
mode:
authordeva <deva>2009-06-30 17:31:53 +0000
committerdeva <deva>2009-06-30 17:31:53 +0000
commit9a773bc9ed736301b5ac6f6f8798056194398011 (patch)
treea113908743936aea97975adb6f4f1c7f49e6b007 /client/macro.cc
parentb31e7fba17d1e5c1264c0829c4da258c32aa80c3 (diff)
Removed console on win32 unless, compiled in debug mode. First attempt on a macro dependency system.
Diffstat (limited to 'client/macro.cc')
-rw-r--r--client/macro.cc132
1 files changed, 132 insertions, 0 deletions
diff --git a/client/macro.cc b/client/macro.cc
new file mode 100644
index 0000000..dbe34f5
--- /dev/null
+++ b/client/macro.cc
@@ -0,0 +1,132 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * macro.cc
+ *
+ * Tue Jun 30 11:49:46 CEST 2009
+ * Copyright 2009 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 "macro.h"
+
+#include <QDomElement>
+#include <QHBoxLayout>
+
+#include "macrodrawer.h"
+
+Macro::Macro(QDomNode &n)
+{
+ window = NULL;
+
+ node = n.cloneNode(true);
+
+ QDomElement xml_elem = node.toElement();
+
+ if(xml_elem.tagName() != "macro") return;
+ if(xml_elem.hasAttribute("header")) return;
+
+ name = xml_elem.attribute("name");
+
+ iscompleted = xml_elem.attribute("completed", "false") == "true";
+}
+
+void Macro::init(QBoxLayout *layout, Macros &macros, bool initialising, NetCom &netcom, QString course)
+{
+ QDomElement xml_elem = node.toElement();
+
+ if(xml_elem.tagName() != "macro") return;
+
+ isstatic = xml_elem.attribute("static", "false") == "true";
+ iscompact = xml_elem.attribute("compact", "false") == "true";
+
+ if(xml_elem.hasAttribute("requires")) {
+ // Read and parse requirement list.
+ requires = xml_elem.attribute("requires").split(",");
+ }
+
+ if(xml_elem.hasAttribute("header")) {
+ // Macro is a special headline macro.
+ // Simply create a headline, and ignore the rest.
+
+ // Only add header on initial contruction.
+ if(initialising == true) {
+ QLabel *header = new QLabel();
+ header->setText(xml_elem.attribute("header"));
+ QFont headerfont = header->font();
+ headerfont.setBold(true);
+ headerfont.setPointSize(headerfont.pointSize() + 2);
+ header->setFont(headerfont);
+ layout->addWidget(header);
+ }
+
+ return;
+ }
+
+ // if(macros.find(name) == macros.end()) {
+ if(window == NULL) {
+ window = new MacroWindow(netcom, node, course, !isstatic, iscompact);
+
+ MacroDrawer *g = new MacroDrawer(this, xml_elem.attribute("caption", name));
+ g->connect(g, SIGNAL(toggle()), window, SLOT(toggleMacro()));
+ g->connect(window, SIGNAL(activationChanged(bool)), g, SLOT(activationChange(bool)));
+ window->setActive(false);
+
+ layout->addWidget(g);
+
+ QHBoxLayout *l = new QHBoxLayout();
+ l->setContentsMargins(10,0,10,0);
+ g->setLayout(l);
+ l->addWidget(window);
+ {
+ QFont f = window->font();
+ f.setBold(false);
+ f.setItalic(false);
+ window->setFont(f);
+ }
+
+ } else {
+
+ window->update(node);
+ if(xml_elem.attribute("static", "false") == "false") {
+ window->setCollapsed(true);
+ }
+ }
+
+ QStringList::iterator rs = requires.begin();
+ bool active = true;
+ while(rs != requires.end()) {
+ printf("Testing if %s is completed...", rs->toStdString().c_str());
+
+ Macros::iterator ms = macros.begin();
+ while(ms != macros.end()) {
+ if(ms->name == *rs) {
+ printf("Found it %d", ms->iscompleted);
+ active = active && ms->iscompleted;
+ }
+ ms++;
+ }
+
+ printf("\n");
+ rs++;
+ }
+ window->setActive(active);
+
+}