diff options
author | deva <deva> | 2011-03-10 08:45:16 +0000 |
---|---|---|
committer | deva <deva> | 2011-03-10 08:45:16 +0000 |
commit | ded5e8cd771c9affef086b77e25c93b4868f3f29 (patch) | |
tree | 537bec9b557ca9bd2ba6e5429434fdc0250f1e8d /client/macro.cc | |
parent | d8a34adcc1a69a2b77881a6e504d0f0ad896eb3a (diff) |
Callback based client implementation is now finished. Testing is up.
Diffstat (limited to 'client/macro.cc')
-rw-r--r-- | client/macro.cc | 166 |
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 ¯os, - 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; + +} |