summaryrefslogtreecommitdiff
path: root/client/macro.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/macro.cc')
-rw-r--r--client/macro.cc166
1 files changed, 63 insertions, 103 deletions
diff --git a/client/macro.cc b/client/macro.cc
index 5d88015..ad21cc4 100644
--- a/client/macro.cc
+++ b/client/macro.cc
@@ -35,140 +35,100 @@
#include "macrodrawer.h"
#include "macrowindow.h"
-Macro::Macro(QDomNode &n, QScrollArea *scrollarea)
+Macro::Macro(Entities &e, NetCom &n, QString t, QScrollArea *s)
+ : entities(e), netcom(n), templ(t)
{
window = NULL;
drawer = NULL;
- this->scrollarea = scrollarea;
+ scrollarea = s;
- update(n);
+ isstatic = false;
+ iscompact = false;
}
-void Macro::update(QDomNode &n)
+const char *Macro::type()
{
- node = n.cloneNode(true);
-
- QDomElement xml_elem = node.toElement();
-
- if(xml_elem.tagName() != "macro" && xml_elem.tagName() != "header") return;
- // if(xml_elem.hasAttribute("header")) return;
-
- name = xml_elem.attribute("name");
-
- iscompleted = xml_elem.attribute("completed", "false") == "true";
+ return "macro";
}
-void Macro::init(QBoxLayout *layout, Macros &macros,
- bool initialising, NetCom &netcom, QString templ)
+void Macro::update(QDomNode &node)
{
- QDomElement xml_elem = node.toElement();
+ QDomElement elem = node.toElement();
- if(xml_elem.tagName() != "macro" && xml_elem.tagName() != "header") return;
+ if(elem.tagName() != "macro") return;
- isstatic = xml_elem.attribute("static", "false") == "true";
- iscompact = xml_elem.attribute("compact", "false") == "true";
+ name = elem.attribute("name");
+ iscompleted = elem.attribute("completed", "false") == "true";
- if(xml_elem.hasAttribute("requires")) {
- // Read and parse requirement list.
- requires = xml_elem.attribute("requires").split(QRegExp("\\W+"),
- QString::SkipEmptyParts);
- }
+ if(window == NULL) {
+ isstatic = elem.attribute("static", "false") == "true";
+ iscompact = elem.attribute("compact", "false") == "true";
- // if(xml_elem.hasAttribute("header")) {
- if(xml_elem.tagName() == "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"));
- header->setText(xml_elem.attribute("caption"));
- QFont headerfont = header->font();
- headerfont.setBold(true);
- headerfont.setPointSize(headerfont.pointSize() + 2);
- header->setFont(headerfont);
- layout->addWidget(header);
- }
+ window = new MacroWindow(netcom, templ, isstatic, iscompact, scrollarea);
- return;
+ QFont f = window->font();
+ f.setBold(false);
+ f.setItalic(false);
+ window->setFont(f);
}
-
- // if(macros.find(name) == macros.end()) {
- if(window == NULL && drawer == NULL) {
- window = new MacroWindow(netcom, node, templ, isstatic, iscompact,
- scrollarea);
-
- /*
- QWidget *edge = new QWidget();
- edge->setContentsMargins(1,1,1,1);
- edge->setAutoFillBackground(true);
- edge->setAttribute(Qt::WA_WindowPropagation, true);
- QHBoxLayout *edgelayout = new QHBoxLayout();
- edgelayout->setContentsMargins(0,0,0,0);
- edge->setLayout(edgelayout);
- layout->addWidget(edge);
- */
-
- drawer = new MacroDrawer(this, xml_elem.attribute("caption", name),
- NULL/*edge*/);
- drawer->connect(drawer, SIGNAL(toggle()), window, SLOT(toggleMacro()));
- drawer->connect(window, SIGNAL(activationChanged(bool)),
- drawer, SLOT(activationChange(bool)));
-
- /*
- QObject::connect(drawer, SIGNAL(toggle()), window, SLOT(toggleMacro()));
- QObject::connect(window, SIGNAL(activationChanged(bool)),
- drawer, SLOT(activationChange(bool)));
- */
-
- //drawer->setAutoFillBackground(true);
- //drawer->setContentsMargins(1,1,1,1);
- window->setActive(false);
- //drawer->setPalette(QApplication::palette());
- //edge->layout()->addWidget(g);
- layout->addWidget(drawer);
-
+
+ if(drawer == NULL) {
+ drawer = new MacroDrawer(this, elem.attribute("caption", name));
QHBoxLayout *l = new QHBoxLayout();
l->setContentsMargins(10,0,10,0);
drawer->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->animateToWidget(window->resumewidget);
- }
+
+ QObject::connect(drawer, SIGNAL(toggle()), window, SLOT(toggleMacro()));
+ QObject::connect(window, SIGNAL(activationChanged(bool)),
+ drawer, SLOT(activationChange(bool)));
+ }
+
+ window->update(node);
+
+ window->setActive(false);
+
+ // Read and parse requirement list.
+ if(elem.hasAttribute("requires")) {
+ QString req = elem.attribute("requires");
+ requires = req.split(QRegExp("\\W+"), QString::SkipEmptyParts);
}
+ // Test if requirements are fulfilled
QStringList::iterator rs = requires.begin();
QStringList blocking;
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);
- if(ms->iscompleted == false) blocking.append(ms->name);
- active = active && ms->iscompleted;
+ Entities::iterator es = entities.begin();
+ while(es != entities.end()) {
+ Entity *e = *es;
+ QString type = e->type();
+ if(type == "macro") {
+ Macro *m = (Macro*)e;
+ if(m->name == *rs) {
+ if(m->iscompleted == false) blocking.append(m->name);
+ active = active && m->iscompleted;
+ }
}
- ms++;
+ es++;
}
-
- // printf("\n");
rs++;
}
window->setActive(active);
- if(!active) drawer->setToolTip(QObject::tr("Depends on: ") + blocking.join(", "));
+ if(!active) drawer->setToolTip(QObject::tr("Depends on: ") +
+ blocking.join(", "));
else drawer->setToolTip("");
}
+
+QWidget *Macro::widget()
+{
+ return drawer;
+}
+
+bool Macro::isOpen()
+{
+ return window && isstatic == false &&
+ window->currentWidget() != window->resumewidget;
+
+}