/* -*- 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 "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") 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 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); }