Fixed a bug: the edit dialog fields were not cleared if an
[emufront] / src / widgets / stringlistwidget.cpp
1 // EmuFront
2 // Copyright 2010 Mikko Keinänen
3 //
4 // This file is part of EmuFront.
5 //
6 //
7 // EmuFront is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2 as published by
9 // the Free Software Foundation and appearing in the file gpl.txt included in the
10 // packaging of this file.
11 //
12 // EmuFront is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
19
20 #include "stringlistwidget.h"
21 #include <QtGui>
22
23 StringListWidget::StringListWidget(QWidget *parent, bool sort, int sortIndex) :
24     QWidget(parent), sort(sort), sortIndex(sortIndex)
25 {
26     initUi();
27     connectSignals();
28 }
29
30 void StringListWidget::initUi()
31 {
32     stringList = new QListWidget(this);
33     btnAdd = new QPushButton(tr("&Add"), this);
34     btnRemove = new QPushButton(tr("&Remove"), this);
35
36     QVBoxLayout *rightLayout = new QVBoxLayout;
37     rightLayout->addWidget(btnAdd);
38     rightLayout->addWidget(btnRemove);
39     rightLayout->addStretch();
40
41     QHBoxLayout *mainLayout = new QHBoxLayout;
42     mainLayout->addWidget(stringList);
43     mainLayout->addLayout(rightLayout);
44
45     setLayout(mainLayout);
46 }
47
48 void StringListWidget::connectSignals()
49 {
50     connect(btnAdd, SIGNAL(clicked()), this, SLOT(addClicked()));
51     connect(btnRemove, SIGNAL(clicked()), this, SLOT(removeClicked()));
52 }
53
54 void StringListWidget::addClicked()
55 {
56     QString input = QInputDialog::getText(this, tr("Add"), tr("Add new item"));
57     input = input.trimmed();
58     if (input.isEmpty()) return;
59     if (!confirmInput(input)) {
60        QMessageBox::information(this, tr("Input failed!"), ("Input was not accepted."));
61        return;
62     }
63     stringList->addItem(input);
64     stringList->sortItems();
65     emit stringListUpdated();
66 }
67
68 bool StringListWidget::confirmInput(const QString &) const
69 {
70     return true;
71 }
72
73 void StringListWidget::removeClicked()
74 {
75     qDebug() << "StringListWidget::removeClicked";
76     int row = stringList->currentRow();
77     if (row >= 0 && row < stringList->count())
78     {
79         stringList->takeItem(row);
80     }
81     emit stringListUpdated();
82 }
83
84 QStringList StringListWidget::getItems()
85 {
86     QStringList l;
87     for(int i = 0; i < stringList->count(); ++i)
88         if (!stringList->item(i)->text().trimmed().isEmpty())
89             l << stringList->item(i)->text();
90     return l;
91 }
92
93 void StringListWidget::setItems(QStringList list)
94 {
95     stringList->clear();
96     foreach(QString s, list)
97         if (!s.trimmed().isEmpty()) stringList->addItem(s);
98 }
99
100 void StringListWidget::clear()
101 {
102     stringList->clear();
103 }