/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * multilist.cc * * Mon Jun 16 15:31:24 CEST 2008 * Copyright 2008 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 "multilist.h" #include #include #include #include #include "widgetbuilder.h" #include "common.h" MultiList::MultiList(QDomNode &node, MacroWindow *macrowindow) : QFrame(), Widget(node, macrowindow) { setCommonAttributes(this, node); QGridLayout *layout = new QGridLayout(); setLayout(layout); QWidget *inputbox = new QWidget(this); inputbox->setContentsMargins(0,0,0,0); layout->addWidget(inputbox, 0, 0, 1, 2, Qt::AlignTop); QDomElement elem = node.toElement(); if(elem.hasAttribute("layout")) { if(elem.attribute("layout") == "hbox") { QHBoxLayout *layout = new QHBoxLayout(); inputbox->setLayout(layout); } else if (elem.attribute("layout") == "vbox") { QVBoxLayout *layout = new QVBoxLayout(); inputbox->setLayout(layout); } } else { QHBoxLayout *layout = new QHBoxLayout(); inputbox->setLayout(layout); } inputbox->layout()->setContentsMargins(0,0,0,0); QDomNodeList children = node.childNodes(); QVector< Widget* > widgets; for (int i=0; iaddAuxWidgets(widgets); innerwidget = NULL; if(elem.hasAttribute("innerwidget")) { QString iwname = elem.attribute("innerwidget"); QVector< Widget* >::iterator ws = widgets.begin(); while(ws != widgets.end()) { if((*ws)->getName() == iwname) innerwidget = *ws; ws++; } if(innerwidget == NULL) { printf("ERROR: Inner Widget %s not found (in multilist)!\n", iwname.toStdString().c_str()); } } else { printf("ERROR: Missing 'innerwidget' attribute on multilist!\n"); } QPushButton *add = new QPushButton(this); connect(add, SIGNAL(clicked()), this, SLOT(add())); add->setText("Tilføj"); // layout->addWidget(add, 0, 1, Qt::AlignTop); layout->addWidget(add, 1, 0, 1, 1, Qt::AlignTop); QPushButton *rem = new QPushButton(this); connect(rem, SIGNAL(clicked()), this, SLOT(remove())); rem->setText("Fjern"); // layout->addWidget(rem, 1, 1, Qt::AlignTop); layout->addWidget(rem, 1, 1, 1, 1, Qt::AlignTop); list = new QListWidget(this); // layout->addWidget(list, 1, 0, Qt::AlignTop); layout->addWidget(list, 2, 0, 1, 2, Qt::AlignTop); /* // This is done later if(elem.hasAttribute("value")) { setValue(elem.attribute("value")); } */ layout->setContentsMargins(0,0,0,0); } void MultiList::changed() { } QString MultiList::getValue() { QString values; QList items = list->findItems("*", Qt::MatchWildcard); QList::iterator i = items.begin(); while(i != items.end()) { QListWidgetItem *item = *i; if(values != "") values += "\n"; values += item->text(); i++; } return values; } void MultiList::setValue(QString values) { QString value; list->clear(); int idx = 0; do { value = values.section('\n', idx, idx); if(value != "") list->addItem(value); idx++; } while(value != ""); } void MultiList::remove() { list->takeItem(list->currentRow()); } void MultiList::add() { /* QVector< Widget * >::iterator i = widgets.begin(); while(i != widgets.end()) { if(!(*i)->isValid()) return; i++; } list->addItem(format_parser(format, widgets)); */ if(innerwidget && innerwidget->isValid()) list->addItem(innerwidget->getValue()); } void MultiList::enable() { setEnabled(true); } void MultiList::disable() { setEnabled(false); }