Cleaning up here and there
[emufront] / src / dialogs / namedialog.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 as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // Foobar 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 Foobar.  If not, see <http://www.gnu.org/licenses/>.
19
20 #include <QtGui>
21 #include "namedialog.h"
22
23 NameDialog::NameDialog(QWidget *parent, EmuFrontObject *efObj)
24         : EmuFrontDialog(parent), efObject(efObj)
25 {
26         nameLabel = new QLabel(tr("&Name: "));  
27         nameEdit = new QLineEdit;
28         nameLabel->setBuddy(nameEdit);
29     buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Abort, Qt::Horizontal);
30     connectSignals();
31         layout();
32         setWindowTitle(tr("Set names"));
33 }
34
35 NameDialog::~NameDialog()
36 {
37     // should be deleted in implementing classes
38     // delete efObject;
39
40     /* no need to delete parented QT-objects in heap here
41          * because when deleting a parent widget
42      * the child widgets will be also deleted
43          */
44 }
45
46 void NameDialog::connectSignals()
47 {
48     connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableSaveButton(const QString &)));
49     connect(buttonBox, SIGNAL(accepted()), this, SLOT(acceptChanges()));
50     connect(buttonBox, SIGNAL(rejected()), this, SLOT(rejectChanges()));
51 }
52
53 void NameDialog::layout()
54 {
55         QHBoxLayout *topLayout = new QHBoxLayout;
56         topLayout->addWidget(nameLabel);
57         topLayout->addWidget(nameEdit);
58
59         QHBoxLayout *bottomLayout = new QHBoxLayout;
60     bottomLayout->addWidget(buttonBox);
61
62         QVBoxLayout *mainLayout = new QVBoxLayout;
63         mainLayout->addLayout(topLayout);
64         mainLayout->addLayout(bottomLayout);
65         setLayout(mainLayout);
66 }
67
68 void NameDialog::rejectChanges()
69 {
70     efObject = 0;
71     close();
72 }
73
74 void NameDialog::acceptChanges()
75 {
76     if (nameEdit->text() == 0 || nameEdit->text().trimmed().isEmpty())
77     {
78         QMessageBox::warning(this, tr("Invalid input"), tr("Empty string is not accepted as name!"));
79                 return;
80     }
81
82         QString name = nameEdit->text().simplified();
83     setDataObject(name);
84     emit dataObjectUpdated();
85     efObject = 0; // TODO we should also set efObject to null when user clicks abort
86     close();
87 }
88
89 void NameDialog::enableSaveButton(const QString &text)
90 {
91     //saveButton->setEnabled(!text.isEmpty());
92 }
93
94 void NameDialog::setDataObject(EmuFrontObject *ob)
95 {
96     if (!ob) return;
97     // delete efObject; -> we should not delete the previously referenced data object here, it may be still used in the parent widget
98     // the parent widget will take of destruction
99     // we'll just refresh the name dialog pointer to a new object
100     efObject = ob;
101 }