/* -*- 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 #include #include #include "macrodrawer.h" Macro::Macro(QDomNode &n) { window = NULL; update(n); } void Macro::update(QDomNode &n) { 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"; } void Macro::init(QBoxLayout *layout, Macros ¯os, bool initialising, NetCom &netcom, QString templ) { QDomElement xml_elem = node.toElement(); if(xml_elem.tagName() != "macro" && xml_elem.tagName() != "header") 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(QRegExp("\\W+"), QString::SkipEmptyParts); } // 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); } return; } // if(macros.find(name) == macros.end()) { if(window == NULL) { window = new MacroWindow(netcom, node, templ, !isstatic, iscompact); /* 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))); //drawer->setAutoFillBackground(true); //drawer->setContentsMargins(1,1,1,1); window->setActive(false); //drawer->setPalette(QApplication::palette()); //edge->layout()->addWidget(g); layout->addWidget(drawer); 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->setCollapsed(true); } } 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; } ms++; } // printf("\n"); rs++; } window->setActive(active); if(!active) drawer->setToolTip(QObject::tr("Depends on: ") + blocking.join(", ")); else drawer->setToolTip(""); }