summaryrefslogtreecommitdiff
path: root/client/widgets/multilist.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/widgets/multilist.cc')
-rw-r--r--client/widgets/multilist.cc112
1 files changed, 69 insertions, 43 deletions
diff --git a/client/widgets/multilist.cc b/client/widgets/multilist.cc
index 73a9747..99772dd 100644
--- a/client/widgets/multilist.cc
+++ b/client/widgets/multilist.cc
@@ -31,79 +31,78 @@
#include <QGridLayout>
#include <QPushButton>
+#include "widgetbuilder.h"
+#include "formatparser.h"
+
MultiList::MultiList(QDomNode &node, MacroWindow *macrowindow)
: QFrame(), Widget(node, macrowindow)
{
- /*
- QDomElement elem = node.toElement();
-
- if(elem.hasAttribute("width")) {
- //resize(elem.attribute("width").toInt(), height());
- setMinimumWidth(elem.attribute("width").toInt());
- }
-
- if(elem.hasAttribute("height")) {
- //resize(width(), elem.attribute("height").toInt());
- setMinimumHeight(elem.attribute("height").toInt());
- }
- */
-
QGridLayout *layout = new QGridLayout();
setLayout(layout);
QWidget *inputbox = new QWidget(this);
inputbox->setContentsMargins(0,0,0,0);
- inputbox->setLayout(new QHBoxLayout());
- inputbox->layout()->setContentsMargins(0,0,0,0);
layout->addWidget(inputbox, 0, 0, Qt::AlignTop);
QPushButton *add = new QPushButton(this);
- add->setText("Add");
+ connect(add, SIGNAL(clicked()), this, SLOT(add()));
+ add->setText("+");
layout->addWidget(add, 0, 1, Qt::AlignTop);
- // QFrame *listbox = new QFrame(this);
- // listbox->setLayout(new QHBoxLayout());
- // layout()->addWidget(listbox);
-
list = new QListWidget(this);
layout->addWidget(list, 1, 0, Qt::AlignTop);
QPushButton *rem = new QPushButton(this);
- rem->setText("Remove");
+ connect(rem, SIGNAL(clicked()), this, SLOT(remove()));
+ rem->setText("-");
layout->addWidget(rem, 1, 1, Qt::AlignTop);
- inputcontainer = inputbox;
-
- /*
+ QDomElement elem = node.toElement();
if(elem.hasAttribute("layout")) {
if(elem.attribute("layout") == "hbox") {
QHBoxLayout *layout = new QHBoxLayout();
- setLayout(layout);
+ inputbox->setLayout(layout);
} else if (elem.attribute("layout") == "vbox") {
QVBoxLayout *layout = new QVBoxLayout();
- setLayout(layout);
+ inputbox->setLayout(layout);
}
+ } else {
+ QHBoxLayout *layout = new QHBoxLayout();
+ inputbox->setLayout(layout);
}
-
+
+ inputbox->layout()->setContentsMargins(0,0,0,0);
+
QDomNodeList children = node.childNodes();
-
+
for (int i=0; i<children.count();i++) {
QDomNode child = children.at(i);
- QDomElement radio_elem = child.toElement();
- bool radio_bool = false;
- if(elem.hasAttribute("value")) {
- if(elem.attribute("value") == radio_elem.attribute("value")) {
- radio_bool = true;
- }
+ widgets += widgetBuilder(child, inputbox, macrowindow);
+ }
+
+ if(elem.hasAttribute("value")) {
+ setValue(elem.attribute("value"));
+ }
+
+ if(elem.hasAttribute("format")) {
+ format = elem.attribute("format");
+ } else {
+ QVector< Widget* >::iterator i = widgets.begin();
+ while (i != widgets.end()) {
+ Widget* w = *i;
+ if(format != "") format += ", ";
+ format += "${" + w->getName() + "}";
+ i++;
}
- RadioButton *radiobutton = new RadioButton(child, radio_bool);
+ }
- // Create radiobutton from child, insert in this
- layout()->addWidget(radiobutton);
- radiobutton_list.push_back(radiobutton);
+ if(elem.hasAttribute("width")) {
+ setMinimumWidth(elem.attribute("width").toInt());
}
- */
+ if(elem.hasAttribute("height")) {
+ setMinimumHeight(elem.attribute("height").toInt());
+ }
}
void MultiList::changed()
@@ -112,10 +111,37 @@ void MultiList::changed()
QString MultiList::getValue()
{
- return "";
+ QString values;
+
+ QList<QListWidgetItem *> items = list->findItems("*", Qt::MatchWildcard);
+ QList<QListWidgetItem *>::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;
+ 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::setValue(QString value)
+void MultiList::add()
{
- value = value;
+ list->addItem(format_parser(format, widgets));
}