diff options
| author | deva <deva> | 2009-06-30 17:31:53 +0000 | 
|---|---|---|
| committer | deva <deva> | 2009-06-30 17:31:53 +0000 | 
| commit | 9a773bc9ed736301b5ac6f6f8798056194398011 (patch) | |
| tree | a113908743936aea97975adb6f4f1c7f49e6b007 /client/macro.cc | |
| parent | b31e7fba17d1e5c1264c0829c4da258c32aa80c3 (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.cc | 132 | 
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 ¯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); + +}  | 
