Added license information
[emufront] / src / dialogs / namedialog.cpp
1 // EmuFront
2 // Copyright Mikko Keinänen 2010
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     delete efObject;
38
39     /* deleting parenteed QT-objects in heap is not needed here
40          * because when deleting a parent widget
41      * the child widgets will be also deleted
42          */
43 }
44
45 void NameDialog::connectSignals()
46 {
47     connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableSaveButton(const QString &)));
48     connect(buttonBox, SIGNAL(accepted()), this, SLOT(acceptChanges()));
49     connect(buttonBox, SIGNAL(rejected()), this, SLOT(close()));
50 }
51
52 void NameDialog::layout()
53 {
54         QHBoxLayout *topLayout = new QHBoxLayout;
55         topLayout->addWidget(nameLabel);
56         topLayout->addWidget(nameEdit);
57
58         QHBoxLayout *bottomLayout = new QHBoxLayout;
59     bottomLayout->addWidget(buttonBox);
60
61         QVBoxLayout *mainLayout = new QVBoxLayout;
62         mainLayout->addLayout(topLayout);
63         mainLayout->addLayout(bottomLayout);
64         setLayout(mainLayout);
65 }
66
67 void NameDialog::acceptChanges()
68 {
69     if (nameEdit->text() == 0 || nameEdit->text().trimmed().isEmpty())
70     {
71         QMessageBox::warning(this, tr("Invalid input"), tr("Empty string is not accepted as name!"));
72                 return;
73     }
74
75         QString name = nameEdit->text().simplified();
76     setDataObject(name);
77     emit dataObjectUpdated();
78     efObject = 0; // TODO we should also se efObject to null when user clicks abort
79     close();
80 }
81
82 void NameDialog::enableSaveButton(const QString &text)
83 {
84     //saveButton->setEnabled(!text.isEmpty());
85 }
86
87 void NameDialog::setDataObject(EmuFrontObject *ob)
88 {
89     if (!ob) return;
90     // delete efObject; -> we should not delete the previously referenced data object here, it may be still used in the parent widget
91     // the parent widget will take of destruction
92     // we'll just refresh the name dialog pointer to a new object
93     efObject = ob;
94 }