Fixed memory loss cases (parent was missing from objects).
[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     if (input.isEmpty()) return;
58     stringList->addItem(input);
59     stringList->sortItems();
60     emit stringListUpdated();
61 }
62
63 void StringListWidget::removeClicked()
64 {
65     qDebug() << "StringListWidget::removeClicked";
66     int row = stringList->currentRow();
67     if (row >= 0 && row < stringList->count())
68     {
69         stringList->takeItem(row);
70     }
71     emit stringListUpdated();
72 }
73
74 QStringList StringListWidget::getItems()
75 {
76     QStringList l;
77     for(int i = 0; i < stringList->count(); ++i)
78         l << stringList->item(i)->text();
79     return l;
80 }
81
82 void StringListWidget::setItems(QStringList list)
83 {
84     stringList->clear();
85     foreach(QString s, list)
86         stringList->addItem(s);
87 }