Adding now adds an empty string to list and starts edit for that string.
[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("&+"), this);
34     btnRemove = new QPushButton(tr("&-"), 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     connect(stringList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemUpdated(QListWidgetItem *)));
53 }
54
55 void StringListWidget::addClicked()
56 {
57     QListWidgetItem *item = new QListWidgetItem;
58     item->setText("");
59     item->setFlags(item->flags() | Qt::ItemIsEditable);
60     stringList->insertItem(0, item);
61     stringList->editItem(item);
62 }
63
64 bool StringListWidget::confirmInput(const QString &) const
65 {
66     return true;
67 }
68
69 void StringListWidget::removeClicked()
70 {
71     qDebug() << "StringListWidget::removeClicked";
72     int row = stringList->currentRow();
73     if (row >= 0 && row < stringList->count())
74     {
75         stringList->takeItem(row);
76     }
77     emit stringListUpdated();
78 }
79
80 QStringList StringListWidget::getItems()
81 {
82     QStringList l;
83     for(int i = 0; i < stringList->count(); ++i)
84         if (!stringList->item(i)->text().trimmed().isEmpty())
85             l << stringList->item(i)->text();
86     return l;
87 }
88
89 void StringListWidget::setItems(QStringList list)
90 {
91     stringList->clear();
92     foreach(QString s, list)
93         if (!s.trimmed().isEmpty()) stringList->addItem(s);
94 }
95
96 void StringListWidget::clear()
97 {
98     stringList->clear();
99 }
100
101 void StringListWidget::itemUpdated(QListWidgetItem *)
102 {
103     emit stringListUpdated();
104 }