addressbook.cpp 8.17 KB
Newer Older
1 2 3 4
/**************************************************************************
**
** This file is part of Qt Creator
**
con's avatar
con committed
5
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6
**
hjk's avatar
hjk committed
7
** Contact: Nokia Corporation (info@qt.nokia.com)
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
**
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
**     the names of its contributors may be used to endorse or promote
**     products derived from this software without specific prior written
**     permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
**************************************************************************/

39 40 41 42 43 44 45 46
#include "addressbook.h"
#include "ui_addressbook.h"

AddressBook::AddressBook(QWidget *parent)
    : QWidget(parent), ui(new Ui::AddressBook)
{
    ui->setupUi(this);

47 48 49 50 51 52
    ui->nameLine->setReadOnly(true);
    ui->addressText->setReadOnly(true);
    ui->submitButton->hide();
    ui->cancelButton->hide();
    ui->nextButton->setEnabled(false);
    ui->previousButton->setEnabled(false);
53

54
//! [extract objects]
55 56
    ui->editButton->setEnabled(false);
    ui->removeButton->setEnabled(false);
57
//! [extract objects]
58

59
    connect(ui->addButton, SIGNAL(clicked()), this,
60
                SLOT(addContact()));
61
    connect(ui->submitButton, SIGNAL(clicked()), this,
62
                SLOT(submitContact()));
63
    connect(ui->cancelButton, SIGNAL(clicked()), this,
64
                SLOT(cancel()));
65
    connect(ui->nextButton, SIGNAL(clicked()), this,
66
                SLOT(next()));
67
    connect(ui->previousButton, SIGNAL(clicked()), this,
68
                SLOT(previous()));
69
//! [signal slot]
70
    connect(ui->editButton, SIGNAL(clicked()), this,
71
                SLOT(editContact()));
72
    connect(ui->removeButton, SIGNAL(clicked()), this,
73 74
                SLOT(removeContact()));
//! [signal slot]
75 76 77 78 79 80 81 82 83

    setWindowTitle(tr("Simple Address Book"));
}

AddressBook::~AddressBook()
{
    delete ui;
}

84
//! [addContact]
85 86
void AddressBook::addContact()
{
87 88
    oldName = ui->nameLine->text();
    oldAddress = ui->addressText->toPlainText();
89

90 91
    ui->nameLine->clear();
    ui->addressText->clear();
92

93
    updateInterface(AddingMode);
94
}
95
//! [addContact]
96

97
//! [submitContact part1]
98 99
void AddressBook::submitContact()
{
100
//! [submitContact part1]
101 102
    QString name = ui->nameLine->text();
    QString address = ui->addressText->toPlainText();
103

hjk's avatar
hjk committed
104
    if (name.isEmpty() || address.isEmpty()) {
105 106 107 108
        QMessageBox::information(this, tr("Empty Field"),
            tr("Please enter a name and address."));
    }

109 110 111 112 113 114 115 116 117 118
//! [submitContact part2]
    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));
119
            return;
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
        }
//! [submitContact part2]

//! [submitContact part3]
    } 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));
135
                return;
136 137 138 139 140 141
            }
        } else if (oldAddress != address) {
            QMessageBox::information(this, tr("Edit Successful"),
                tr("\"%1\" has been edited in your address book.").arg(name));
            contacts[name] = address;
        }
142
    }
143
    updateInterface(NavigationMode);
144
}
145
//! [submitContact part3]
146

147
//! [cancel]
148 149
void AddressBook::cancel()
{
150 151
    ui->nameLine->setText(oldName);
    ui->nameLine->setReadOnly(true);
152

153
    updateInterface(NavigationMode);
154
}
155
//! [cancel]
156 157 158

void AddressBook::next()
{
159
    QString name = ui->nameLine->text();
160 161 162 163 164 165 166
    QMap<QString, QString>::iterator i = contacts.find(name);

    if (i != contacts.end())
        i++;
    if (i == contacts.end())
        i = contacts.begin();

167 168
    ui->nameLine->setText(i.key());
    ui->addressText->setText(i.value());
169 170 171 172
}

void AddressBook::previous()
{
173
    QString name = ui->nameLine->text();
174 175 176
    QMap<QString, QString>::iterator i = contacts.find(name);

    if (i == contacts.end()) {
177 178
        ui->nameLine->clear();
        ui->addressText->clear();
179 180 181 182 183 184 185
        return;
    }

    if (i == contacts.begin())
        i = contacts.end();

    i--;
186 187
    ui->nameLine->setText(i.key());
    ui->addressText->setText(i.value());
188 189
}

190 191 192
//! [editContact]
void AddressBook::editContact()
{
193 194
    oldName = ui->nameLine->text();
    oldAddress = ui->addressText->toPlainText();
195 196 197 198 199 200 201 202

    updateInterface(EditingMode);
}
//! [editContact]

//! [removeContact]
void AddressBook::removeContact()
{
203 204
    QString name = ui->nameLine->text();
    QString address = ui->addressText->toPlainText();
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234

    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);
}
//! [removeContact]

//! [updateInterface part1]
void AddressBook::updateInterface(Mode mode)
{
    currentMode = mode;

    switch (currentMode) {

    case AddingMode:
    case EditingMode:

235 236 237
        ui->nameLine->setReadOnly(false);
        ui->nameLine->setFocus(Qt::OtherFocusReason);
        ui->addressText->setReadOnly(false);
238

239 240 241
        ui->addButton->setEnabled(false);
        ui->editButton->setEnabled(false);
        ui->removeButton->setEnabled(false);
242

243 244
        ui->nextButton->setEnabled(false);
        ui->previousButton->setEnabled(false);
245

246 247
        ui->submitButton->show();
        ui->cancelButton->show();
248 249 250 251 252 253 254
        break;
//! [updateInterface part1]

//! [updateInterface part2]
    case NavigationMode:

        if (contacts.isEmpty()) {
255 256
            ui->nameLine->clear();
            ui->addressText->clear();
257 258
        }

259 260 261
        ui->nameLine->setReadOnly(true);
        ui->addressText->setReadOnly(true);
        ui->addButton->setEnabled(true);
262 263

        int number = contacts.size();
264 265 266 267
        ui->editButton->setEnabled(number >= 1);
        ui->removeButton->setEnabled(number >= 1);
        ui->nextButton->setEnabled(number > 1);
        ui->previousButton->setEnabled(number >1);
268

269 270
        ui->submitButton->hide();
        ui->cancelButton->hide();
271 272 273 274
        break;
    }
}
//! [updateInterface part2]