diff --git a/doc/examples/addressbook-sdk/part7/addressbook.cpp b/doc/examples/addressbook-sdk/part7/addressbook.cpp index de35f5ac738bebdd1a7a75d9055fc8399ef33589..63d52a65a95498f54dd51844ad39ebd9444aa3bf 100644 --- a/doc/examples/addressbook-sdk/part7/addressbook.cpp +++ b/doc/examples/addressbook-sdk/part7/addressbook.cpp @@ -5,9 +5,325 @@ AddressBook::AddressBook(QWidget *parent) : QWidget(parent), ui(new Ui::AddressBook) { ui->setupUi(this); + + nameLine = new QLineEdit; + nameLine = ui->nameLine; + nameLine->setReadOnly(true); + + addressText = new QTextEdit; + addressText = ui->addressText; + addressText->setReadOnly(true); + + addButton = new QPushButton; + addButton = ui->addButton; + + submitButton = new QPushButton; + submitButton = ui->submitButton; + submitButton->hide(); + + cancelButton = new QPushButton; + cancelButton = ui->cancelButton; + cancelButton->hide(); + + nextButton = new QPushButton; + nextButton = ui->nextButton; + nextButton->setEnabled(false); + + previousButton = new QPushButton; + previousButton = ui->previousButton; + previousButton->setEnabled(false); + + editButton = new QPushButton; + editButton = ui->editButton; + editButton->setEnabled(false); + + removeButton = new QPushButton; + removeButton = ui->removeButton; + removeButton->setEnabled(false); + + findButton = new QPushButton; + findButton = ui->findButton; + + dialog = new FindDialog; + + loadButton = new QPushButton; + loadButton = ui->loadButton; + + saveButton = new QPushButton; + saveButton = ui->saveButton; + + connect(addButton, SIGNAL(clicked()), this, + SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, + SLOT(submitContact())); + connect(cancelButton, SIGNAL(clicked()), this, + SLOT(cancel())); + connect(nextButton, SIGNAL(clicked()), this, + SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, + SLOT(previous())); + connect(editButton, SIGNAL(clicked()), this, + SLOT(editContact())); + connect(removeButton, SIGNAL(clicked()), this, + SLOT(removeContact())); + connect(findButton, SIGNAL(clicked()), this, + SLOT(findContact())); + + setWindowTitle(tr("Simple Address Book")); } AddressBook::~AddressBook() { delete ui; } + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + updateInterface(AddingMode); +} + +void AddressBook::submitContact() +{ + QString name = nameLine->text(); + QString address = addressText->toPlainText(); + + if (name == "" || address == "") { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name and address.")); + } + + if (currentMode == AddingMode) { + + if (!contacts.contains(name)) { + contacts.insert(name, address); + QMessageBox::information(this, tr("Add Successful"), + tr("\"%1\" has been added to your address book.").arg(name)); + } else { + QMessageBox::information(this, tr("Add Unsuccessful"), + tr("Sorry, \"%1\" is already in your address book.").arg(name)); + } + + } else if (currentMode == EditingMode) { + + if (oldName != name) { + if (!contacts.contains(name)) { + QMessageBox::information(this, tr("Edit Successful"), + tr("\"%1\" has been edited in your address book.").arg(oldName)); + contacts.remove(oldName); + contacts.insert(name, address); + } else { + QMessageBox::information(this, tr("Edit Unsuccessful"), + tr("Sorry, \"%1\" is already in your address book.").arg(name)); + } + } else if (oldAddress != address) { + QMessageBox::information(this, tr("Edit Successful"), + tr("\"%1\" has been edited in your address book.").arg(name)); + contacts[name] = address; + } + } + updateInterface(NavigationMode); +} + +void AddressBook::cancel() +{ + nameLine->setText(oldName); + nameLine->setReadOnly(true); + + updateInterface(NavigationMode); +} + +void AddressBook::next() +{ + QString name = nameLine->text(); + QMap<QString, QString>::iterator i = contacts.find(name); + + if (i != contacts.end()) + i++; + if (i == contacts.end()) + i = contacts.begin(); + + nameLine->setText(i.key()); + addressText->setText(i.value()); +} + +void AddressBook::previous() +{ + QString name = nameLine->text(); + QMap<QString, QString>::iterator i = contacts.find(name); + + if (i == contacts.end()) { + nameLine->clear(); + addressText->clear(); + return; + } + + if (i == contacts.begin()) + i = contacts.end(); + + i--; + nameLine->setText(i.key()); + addressText->setText(i.value()); +} + +void AddressBook::editContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + updateInterface(EditingMode); +} + +void AddressBook::removeContact() +{ + QString name = nameLine->text(); + QString address = addressText->toPlainText(); + + if (contacts.contains(name)) { + int button = QMessageBox::question(this, + tr("Confirm Remove"), + tr("Are you sure you want to remove \"%1\"?").arg(name), + QMessageBox::Yes | QMessageBox::No); + + if (button == QMessageBox::Yes) { + previous(); + contacts.remove(name); + + QMessageBox::information(this, tr("Remove Successful"), + tr("\"%1\" has been removed from your address book.").arg(name)); + } + } + + updateInterface(NavigationMode); +} + +void AddressBook::updateInterface(Mode mode) +{ + currentMode = mode; + + switch (currentMode) { + + case AddingMode: + case EditingMode: + + nameLine->setReadOnly(false); + nameLine->setFocus(Qt::OtherFocusReason); + addressText->setReadOnly(false); + + addButton->setEnabled(false); + editButton->setEnabled(false); + removeButton->setEnabled(false); + + nextButton->setEnabled(false); + previousButton->setEnabled(false); + + submitButton->show(); + cancelButton->show(); + break; + + case NavigationMode: + + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + + int number = contacts.size(); + editButton->setEnabled(number >= 1); + removeButton->setEnabled(number >= 1); + findButton->setEnabled(number > 2); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number >1); + + submitButton->hide(); + cancelButton->hide(); + break; + } +} + +void AddressBook::findContact() +{ + dialog->show(); + + if (dialog->exec() == QDialog::Accepted) { + QString contactName = dialog->getFindText(); + + if (contacts.contains(contactName)) { + nameLine->setText(contactName); + addressText->setText(contacts.value(contactName)); + } else { + QMessageBox::information(this, tr("Contact Not Found"), + tr("Sorry, \"%1\" is not in your address book.").arg(contactName)); + return; + } + } + + updateInterface(NavigationMode); +} + +void AddressBook::saveToFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save Address Book"), "", + tr("Address book (*.abk);; AllFiles (*)")); + + if (fileName.isEmpty()) + return; + else { + QFile file(fileName); + + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::information(this, tr("Unable to open file"), + file.errorString()); + return; + } + + QDataStream out(&file); + out.setVersion(QDataStream::Qt_4_5); + out << contacts; + } +} + +void AddressBook::loadFromFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open Address Book"), "", + tr("Address Book(*.abk);; All Files(*)")); + + if (fileName.isEmpty()) + return; + else { + QFile file(fileName); + + if (!file.open(QIODevice::ReadOnly)) { + QMessageBox::information(this, tr("Unable to open file"), + file.errorString()); + return; + } + + QDataStream in(&file); + in.setVersion(QDataStream::Qt_4_5); + contacts.empty(); // empty existing contacts + in >> contacts; + + if (contacts.isEmpty()) { + QMessagebox::information(this, tr("No contacts in file"), + tr("The file you are attempting to open contains no contacts.")); + } else { + QMap<QString, QString>::iterator i = contacts.begin(); + nameLine->setText(i.key()); + addressText->setText(i.value()); + } + } + + updateInterface(NavigationMode); +} diff --git a/doc/examples/addressbook-sdk/part7/addressbook.h b/doc/examples/addressbook-sdk/part7/addressbook.h index b85a0acddbfc7bc458b2e218cc73089f33cfe543..0e4048a63d77173070f318e06484f7ce1617c0d0 100644 --- a/doc/examples/addressbook-sdk/part7/addressbook.h +++ b/doc/examples/addressbook-sdk/part7/addressbook.h @@ -2,6 +2,11 @@ #define ADDRESSBOOK_H #include <QtGui/QWidget> +#include <QtGui/QPushButton> +#include <QtGui/QLineEdit> +#include <QtGui/QTextEdit> +#include <QtGui/QMessageBox> +#include "finddialog.h" namespace Ui { @@ -14,10 +19,43 @@ class AddressBook : public QWidget public: AddressBook(QWidget *parent = 0); + enum Mode { NavigationMode, AddingMode, EditingMode }; ~AddressBook(); +public slots: + void addContact(); + void submitContact(); + void cancel(); + void editContact(); + void removeContact(); + void next(); + void previous(); + void findContact(); + void saveToFile(); + void loadFromFile(); + private: Ui::AddressBook *ui; + + void updateInterface(Mode mode); + QPushButton *addButton; + QPushButton *submitButton; + QPushButton *cancelButton; + QPushButton *editButton; + QPushButton *removeButton; + QPushButton *nextButton; + QPushButton *previousButton; + QPushButton *findButton; + QPushButton *loadButton; + QPushButton *saveButton; + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; + Mode currentMode; + FindDialog *dialog; }; #endif // ADDRESSBOOK_H diff --git a/doc/examples/addressbook-sdk/part7/addressbook.ui b/doc/examples/addressbook-sdk/part7/addressbook.ui index 7b771cc37b5055068b2ba1a365085b6f66465897..f46c9c396976369327bc8f3ae9ad0c43d03511e5 100644 --- a/doc/examples/addressbook-sdk/part7/addressbook.ui +++ b/doc/examples/addressbook-sdk/part7/addressbook.ui @@ -1,7 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>AddressBook</class> - <widget class="QWidget" name="AddressBook" > - <property name="geometry" > + <widget class="QWidget" name="AddressBook"> + <property name="geometry"> <rect> <x>0</x> <y>0</y> @@ -9,12 +10,137 @@ <height>400</height> </rect> </property> - <property name="windowTitle" > + <property name="windowTitle"> <string>AddressBook</string> </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="nameLabel"> + <property name="text"> + <string>Name:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="nameLine"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="addressLabel"> + <property name="text"> + <string>Address:</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QTextEdit" name="addressText"/> + </item> + <item row="1" column="2"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPushButton" name="addButton"> + <property name="text"> + <string>Add</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="submitButton"> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cancelButton"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="editButton"> + <property name="text"> + <string>Edit</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeButton"> + <property name="text"> + <string>Remove</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="findButton"> + <property name="text"> + <string>Find</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="loadButton"> + <property name="toolTip"> + <string>Load contacts from a file</string> + </property> + <property name="text"> + <string>Load...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="saveButton"> + <property name="toolTip"> + <string>Save contacts to a file</string> + </property> + <property name="text"> + <string>Save...</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="nextButton"> + <property name="text"> + <string>Previous</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="previousButton"> + <property name="text"> + <string>Next</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + </layout> </widget> - <layoutDefault spacing="6" margin="11" /> - <pixmapfunction></pixmapfunction> + <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui> diff --git a/doc/examples/addressbook-sdk/part7/part7.pro b/doc/examples/addressbook-sdk/part7/part7.pro index 9fc496316211066ac2473b95462de208ea143be6..efdbe0bb6e37d30c099a23082140668cca91e7e5 100644 --- a/doc/examples/addressbook-sdk/part7/part7.pro +++ b/doc/examples/addressbook-sdk/part7/part7.pro @@ -1,16 +1,12 @@ -#------------------------------------------------- -# +# ------------------------------------------------- # Project created by QtCreator 2009-07-07T17:10:19 -# -#------------------------------------------------- - +# ------------------------------------------------- TARGET = part7 TEMPLATE = app - - -SOURCES += main.cpp\ - addressbook.cpp - -HEADERS += addressbook.h - -FORMS += addressbook.ui +SOURCES += main.cpp \ + addressbook.cpp \ + finddialog.cpp +HEADERS += addressbook.h \ + finddialog.h +FORMS += addressbook.ui \ + finddialog.ui