From 1997d8fb9aa08121df8959ef81f7fd18d84d8e1c Mon Sep 17 00:00:00 2001 From: Kavindra Devi Palaraja <kavindra.palaraja@nokia.com> Date: Thu, 2 Apr 2009 10:41:35 +0200 Subject: [PATCH] Doc - Adding in the tutorial, needs to be customized for Creator. --- doc/addressbook-sdk.qdoc | 179 +++++++ doc/examples/addressbook-sdk/README | 42 ++ doc/examples/addressbook-sdk/addressbook.pro | 8 + .../addressbook-sdk/part1/addressbook.cpp | 68 +++ .../addressbook-sdk/part1/addressbook.h | 67 +++ doc/examples/addressbook-sdk/part1/main.cpp | 55 +++ doc/examples/addressbook-sdk/part1/part1 | Bin 0 -> 25206 bytes doc/examples/addressbook-sdk/part1/part1.pro | 9 + .../addressbook-sdk/part2/addressbook.cpp | 158 ++++++ .../addressbook-sdk/part2/addressbook.h | 85 ++++ doc/examples/addressbook-sdk/part2/main.cpp | 55 +++ doc/examples/addressbook-sdk/part2/part2 | Bin 0 -> 40799 bytes doc/examples/addressbook-sdk/part2/part2.pro | 9 + .../addressbook-sdk/part3/addressbook.cpp | 217 +++++++++ .../addressbook-sdk/part3/addressbook.h | 87 ++++ doc/examples/addressbook-sdk/part3/main.cpp | 53 +++ doc/examples/addressbook-sdk/part3/part3 | Bin 0 -> 45529 bytes doc/examples/addressbook-sdk/part3/part3.pro | 9 + .../addressbook-sdk/part4/addressbook.cpp | 291 ++++++++++++ .../addressbook-sdk/part4/addressbook.h | 100 ++++ doc/examples/addressbook-sdk/part4/main.cpp | 53 +++ doc/examples/addressbook-sdk/part4/part4 | Bin 0 -> 54363 bytes doc/examples/addressbook-sdk/part4/part4.pro | 9 + .../addressbook-sdk/part5/addressbook.cpp | 315 ++++++++++++ .../addressbook-sdk/part5/addressbook.h | 103 ++++ .../addressbook-sdk/part5/finddialog.cpp | 87 ++++ .../addressbook-sdk/part5/finddialog.h | 69 +++ doc/examples/addressbook-sdk/part5/main.cpp | 53 +++ doc/examples/addressbook-sdk/part5/part5 | Bin 0 -> 64575 bytes doc/examples/addressbook-sdk/part5/part5.pro | 11 + .../addressbook-sdk/part6/addressbook.cpp | 396 +++++++++++++++ .../addressbook-sdk/part6/addressbook.h | 104 ++++ .../addressbook-sdk/part6/finddialog.cpp | 83 ++++ .../addressbook-sdk/part6/finddialog.h | 69 +++ doc/examples/addressbook-sdk/part6/main.cpp | 53 +++ doc/examples/addressbook-sdk/part6/part6 | Bin 0 -> 74880 bytes doc/examples/addressbook-sdk/part6/part6.pro | 11 + .../addressbook-sdk/part7/addressbook.cpp | 449 ++++++++++++++++++ .../addressbook-sdk/part7/addressbook.h | 106 +++++ .../addressbook-sdk/part7/finddialog.cpp | 83 ++++ .../addressbook-sdk/part7/finddialog.h | 69 +++ doc/examples/addressbook-sdk/part7/main.cpp | 53 +++ doc/examples/addressbook-sdk/part7/part7 | Bin 0 -> 84992 bytes doc/examples/addressbook-sdk/part7/part7.pro | 11 + 44 files changed, 3679 insertions(+) create mode 100644 doc/addressbook-sdk.qdoc create mode 100644 doc/examples/addressbook-sdk/README create mode 100644 doc/examples/addressbook-sdk/addressbook.pro create mode 100644 doc/examples/addressbook-sdk/part1/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part1/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part1/main.cpp create mode 100755 doc/examples/addressbook-sdk/part1/part1 create mode 100644 doc/examples/addressbook-sdk/part1/part1.pro create mode 100644 doc/examples/addressbook-sdk/part2/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part2/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part2/main.cpp create mode 100755 doc/examples/addressbook-sdk/part2/part2 create mode 100644 doc/examples/addressbook-sdk/part2/part2.pro create mode 100644 doc/examples/addressbook-sdk/part3/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part3/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part3/main.cpp create mode 100755 doc/examples/addressbook-sdk/part3/part3 create mode 100644 doc/examples/addressbook-sdk/part3/part3.pro create mode 100644 doc/examples/addressbook-sdk/part4/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part4/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part4/main.cpp create mode 100755 doc/examples/addressbook-sdk/part4/part4 create mode 100644 doc/examples/addressbook-sdk/part4/part4.pro create mode 100644 doc/examples/addressbook-sdk/part5/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part5/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part5/finddialog.cpp create mode 100644 doc/examples/addressbook-sdk/part5/finddialog.h create mode 100644 doc/examples/addressbook-sdk/part5/main.cpp create mode 100755 doc/examples/addressbook-sdk/part5/part5 create mode 100644 doc/examples/addressbook-sdk/part5/part5.pro create mode 100644 doc/examples/addressbook-sdk/part6/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part6/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part6/finddialog.cpp create mode 100644 doc/examples/addressbook-sdk/part6/finddialog.h create mode 100644 doc/examples/addressbook-sdk/part6/main.cpp create mode 100755 doc/examples/addressbook-sdk/part6/part6 create mode 100644 doc/examples/addressbook-sdk/part6/part6.pro create mode 100644 doc/examples/addressbook-sdk/part7/addressbook.cpp create mode 100644 doc/examples/addressbook-sdk/part7/addressbook.h create mode 100644 doc/examples/addressbook-sdk/part7/finddialog.cpp create mode 100644 doc/examples/addressbook-sdk/part7/finddialog.h create mode 100644 doc/examples/addressbook-sdk/part7/main.cpp create mode 100755 doc/examples/addressbook-sdk/part7/part7 create mode 100644 doc/examples/addressbook-sdk/part7/part7.pro diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc new file mode 100644 index 00000000000..b6b257d55ff --- /dev/null +++ b/doc/addressbook-sdk.qdoc @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page tutorials-addressbook-sdk.html + + \startpage {index.html}{Qt Reference Documentation} + \nextpage \l{Designing the User Interface}{Chapter 1} + + \title Address Book Tutorial + \ingroup howto + \ingroup tutorials + \brief An introduction to GUI programming with Qt and Qt Creator, + describing in detail how to put together a simple yet fully- + functioning application. + + This tutorial gives an introduction to GUI programming using the Qt SDK. + + ### Screenshot + + In the process, we will learn about some basic technologies provided by + Qt, such as: + + \list + \o Widgets and layout managers + \o Container classes + \o Signals and slots + \o Input and output devices + \endlist + + If you are completely new to Qt, please read \l{How to Learn Qt} if you + have not already done so. + + The tutorial's source code is located in Qt's + \c{examples/tutorials/addressbook} directory. + + Tutorial chapters: + + \list 1 + \o \l{Designing the User Interface} + \o \l{Adding Addresses} + \o \l{Navigating between Entries} + \o \l{Editing and Removing Addresses} + \o \l{Adding a Find Function} + \o \l{Loading and Saving} + \o \l{Additional Features} + \endlist + + Although this little application does not look much like a fully-fledged + modern GUI application, it uses many of the basic techniques that are used + in more complex applications. After you have worked through it, we + recommend checking out the \l{mainwindows/application}{Application} + example, which presents a small GUI application, with menus, toolbars, a + status bar, and so on. +*/ + + +/*! + \page tutorials-addressbook-sdk-part1.html + \contentspage {Address Book Tutorial}{Contents} + \nextpage \l{Adding Addresses}{Chapter 2} + \title Address Book 1 - Designing the User Interface + + The first part of this tutorial covers the design of the basic graphical + user interface (GUI) we use for the Address Book application. + + The first step to creating a GUI program is to design the user interface. + In this chapter, our goal is to set up the labels and input fields needed + to implement a basic address book application. The figure below is a + screenshot of our expected output. + + \image addressbook-tutorial-part1-screenshot.png + + We begin by launching Qt Creator and use it to generate a new project. To + do this, select \gui New from the \gui File menu. In the + \gui{New File or Project} dialog. Follow the step by step guide on how to + create a \gui Project with Qt Creator, refer to the document + \l{Creating a Project in Qt Creator}{here}. Ensure that you select QWidget + as your subclass and name it \c AddressBook. + + There are five files generated in this \gui{Project}: + + \list + \o \c{addressbook.pro} - the project file, + \o \c{addressbook.h} - the definition file for the \c AddressBook + class, + \o \c{addressbook.cpp} - the implementation file for the + \c AddressBook class, + \o \c{main.cpp} - the file containing a \c main() function, with an + instance of \c AddressBook, and + \o \c{addressbook.ui} - the user interface file created with \QD. + \endlist + + Now we have all the files we need, let's move on to designing the user + interface. + + \section1 Placing the Widgets on the Form + + In the \gui{Project Sidebar}, double-click on the \c{addressbook.ui} file. + The \QD plugin will be launched, allowing you to design your program's user + interface. + + We require two \l{QLabel}s to label the input fields as well as a + QLineEdit and a QTextEdit as the input fields. So, drag those widgets from + the \gui{Widget Box} to your form. In the \gui{Property Editor}, set their + \gui{objectName} property to \c nameLabel and \c addressLabel for the + \l{QLabel}s, \c nameLine for the QLineEdit and finally, \c addressText for + the QTextEdit. + + Next, we have to position the widgets properly, according to the screenshot + earlier. We use a QGridLayout to position our labels and input fields in a + structured manner. QGridLayout divides the available space into a grid and + places widgets in the cells we specify with row and column numbers. The + diagram below shows the layout cells and the position of our widgets. + + \image addressbook-tutorial-part1-labeled-screenshot.png + + + \section1 Qt Programming - Subclassing + + When writing Qt programs, we usually subclass Qt objects to add + functionality. This is one of the essential concepts behind creating custom + widgets or collections of standard widgets. Subclassing to extend or change + the behavior of a widget has the following advantages: + + \list + \o We can write implementations of virtual or pure virtual functions + to obtain exactly what we need, falling back on the base class's + implementation when necessary. + \o It allows us to encapsulate parts of the user interface within a + class, so that the other parts of the application do not need to + know about the individual widgets in the user interface. + \o The subclass can be used to create multiple custom widgets in the + same application or library, and the code for the subclass can be + reused in other projects. + \endlist + + + + +*/ diff --git a/doc/examples/addressbook-sdk/README b/doc/examples/addressbook-sdk/README new file mode 100644 index 00000000000..2d528b5200c --- /dev/null +++ b/doc/examples/addressbook-sdk/README @@ -0,0 +1,42 @@ +The Address Book Tutorial shows how to put together a simple yet +fully-functioning GUI application. The tutorial chapters can be found in the +Qt documentation, which can be viewed using Qt Assistant or a Web browser. + +The tutorial is also available online at + +http://doc.trolltech.com/4.4/tutorial.html + +All programs corresponding to the chapters in the tutorial should +automatically be built when Qt is compiled, or will be provided as +pre-built executables if you have obtained a binary package of Qt. + +If you have only compiled the Qt libraries, use the following instructions +to build the tutorial. + +On Linux/Unix: + +Typing 'make' in this directory builds all the programs (part1/part1, +part2/part2, part3/part3 and so on). Typing 'make' in each subdirectory +builds just that tutorial program. + +On Windows: + +Create a single Visual Studio project for the tutorial directory in +the usual way. You can do this by typing the following at the command +line: + +qmake -tp vc + +You should now be able to open the project file in Visual Studio and +build all of the tutorial programs at the same time. + +On Mac OS X: + +Create an Xcode project with the .pro file in the tutorial directory. +You can do this by typing the following at the command line: + +qmake -spec macx-xcode + +Then open the generated Xcode project in Xcode and build it. + +Feel free to send comments about the tutorial to qt-bugs@trolltech.com. diff --git a/doc/examples/addressbook-sdk/addressbook.pro b/doc/examples/addressbook-sdk/addressbook.pro new file mode 100644 index 00000000000..4607c25c353 --- /dev/null +++ b/doc/examples/addressbook-sdk/addressbook.pro @@ -0,0 +1,8 @@ +TEMPLATE = subdirs +SUBDIRS = part1 part2 part3 part4 part5 part6 part7 + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS addressbook.pro README +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part1/addressbook.cpp b/doc/examples/addressbook-sdk/part1/addressbook.cpp new file mode 100644 index 00000000000..d0107ba0676 --- /dev/null +++ b/doc/examples/addressbook-sdk/part1/addressbook.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +//! [constructor and input fields] +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; +//! [constructor and input fields] + +//! [layout] + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); +//! [layout] + +//![setting the layout] + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} +//! [setting the layout] diff --git a/doc/examples/addressbook-sdk/part1/addressbook.h b/doc/examples/addressbook-sdk/part1/addressbook.h new file mode 100644 index 00000000000..811fb057af6 --- /dev/null +++ b/doc/examples/addressbook-sdk/part1/addressbook.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> + +QT_BEGIN_NAMESPACE +class QLabel; +class QLineEdit; +class QTextEdit; +QT_END_NAMESPACE + +//! [class definition] +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + +private: + QLineEdit *nameLine; + QTextEdit *addressText; +}; +//! [class definition] + +#endif diff --git a/doc/examples/addressbook-sdk/part1/main.cpp b/doc/examples/addressbook-sdk/part1/main.cpp new file mode 100644 index 00000000000..22bfd3ee3ef --- /dev/null +++ b/doc/examples/addressbook-sdk/part1/main.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +//! [main function] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} +//! [main function] diff --git a/doc/examples/addressbook-sdk/part1/part1 b/doc/examples/addressbook-sdk/part1/part1 new file mode 100755 index 0000000000000000000000000000000000000000..1259ff2d8535f4417f5d3a69e8b9b836471c04bf GIT binary patch literal 25206 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 Ru+g}58+o2PHw1De{ci<QR3`uc literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part1/part1.pro b/doc/examples/addressbook-sdk/part1/part1.pro new file mode 100644 index 00000000000..bb181dd3923 --- /dev/null +++ b/doc/examples/addressbook-sdk/part1/part1.pro @@ -0,0 +1,9 @@ +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part1 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part1.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part1 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part2/addressbook.cpp b/doc/examples/addressbook-sdk/part2/addressbook.cpp new file mode 100644 index 00000000000..ac4b9c123ab --- /dev/null +++ b/doc/examples/addressbook-sdk/part2/addressbook.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; +//! [setting readonly 1] + nameLine->setReadOnly(true); +//! [setting readonly 1] + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; +//! [setting readonly 2] + addressText->setReadOnly(true); +//! [setting readonly 2] + +//! [pushbutton declaration] + addButton = new QPushButton(tr("&Add")); + addButton->show(); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); +//! [pushbutton declaration] +//! [connecting signals and slots] + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); +//! [connecting signals and slots] +//! [vertical layout] + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton, Qt::AlignTop); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); +//! [vertical layout] +//! [grid layout] + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); +//! [grid layout] + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} +//! [addContact] +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + nameLine->setReadOnly(false); + nameLine->setFocus(Qt::OtherFocusReason); + addressText->setReadOnly(false); + + addButton->setEnabled(false); + submitButton->show(); + cancelButton->show(); +} +//! [addContact] + +//! [submitContact part1] +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.")); + return; + } +//! [submitContact part1] +//! [submitContact part2] + 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)); + return; + } +//! [submitContact part2] +//! [submitContact part3] + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + submitButton->hide(); + cancelButton->hide(); +} +//! [submitContact part3] +//! [cancel] +void AddressBook::cancel() +{ + nameLine->setText(oldName); + nameLine->setReadOnly(true); + + addressText->setText(oldAddress); + addressText->setReadOnly(true); + + addButton->setEnabled(true); + submitButton->hide(); + cancelButton->hide(); +} +//! [cancel] diff --git a/doc/examples/addressbook-sdk/part2/addressbook.h b/doc/examples/addressbook-sdk/part2/addressbook.h new file mode 100644 index 00000000000..c99b3735b9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part2/addressbook.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> + +QT_BEGIN_NAMESPACE +class QLabel; +class QLineEdit; +class QPushButton; +class QTextEdit; +QT_END_NAMESPACE + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + +//! [slots] +public slots: + void addContact(); + void submitContact(); + void cancel(); +//! [slots] + +//! [pushbutton declaration] +private: + QPushButton *addButton; + QPushButton *submitButton; + QPushButton *cancelButton; + QLineEdit *nameLine; + QTextEdit *addressText; +//! [pushbutton declaration] + +//! [remaining private variables] + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; +}; +//! [remaining private variables] + +#endif diff --git a/doc/examples/addressbook-sdk/part2/main.cpp b/doc/examples/addressbook-sdk/part2/main.cpp new file mode 100644 index 00000000000..22bfd3ee3ef --- /dev/null +++ b/doc/examples/addressbook-sdk/part2/main.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +//! [main function] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} +//! [main function] diff --git a/doc/examples/addressbook-sdk/part2/part2 b/doc/examples/addressbook-sdk/part2/part2 new file mode 100755 index 0000000000000000000000000000000000000000..66db7c17a74582efedb623ed86a0d492f44323b3 GIT binary patch literal 40799 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 literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part2/part2.pro b/doc/examples/addressbook-sdk/part2/part2.pro new file mode 100644 index 00000000000..01ce34465f4 --- /dev/null +++ b/doc/examples/addressbook-sdk/part2/part2.pro @@ -0,0 +1,9 @@ +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part2 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part2.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part2 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part3/addressbook.cpp b/doc/examples/addressbook-sdk/part3/addressbook.cpp new file mode 100644 index 00000000000..49c52061609 --- /dev/null +++ b/doc/examples/addressbook-sdk/part3/addressbook.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); + addButton->show(); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); +//! [navigation pushbuttons] + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); +//! [navigation pushbuttons] + + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); +//! [connecting navigation signals] + connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); +//! [connecting navigation signals] + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton, Qt::AlignTop); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); +//! [navigation layout] + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); +//! [ navigation layout] + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); +//! [adding navigation layout] + mainLayout->addLayout(buttonLayout2, 3, 1); +//! [adding navigation layout] + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + nameLine->setReadOnly(false); + nameLine->setFocus(Qt::OtherFocusReason); + addressText->setReadOnly(false); + + addButton->setEnabled(false); +//! [disabling navigation] + nextButton->setEnabled(false); + previousButton->setEnabled(false); +//! [disabling navigation] + submitButton->show(); + cancelButton->show(); +} + +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 adderss.")); + return; + } + + 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)); + return; + } + + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + +//! [enabling navigation] + int number = contacts.size(); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number > 1); +//! [enabling navigation] + submitButton->hide(); + cancelButton->hide(); +} + +void AddressBook::cancel() +{ + nameLine->setText(oldName); + addressText->setText(oldAddress); + + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + + int number = contacts.size(); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number > 1); + + submitButton->hide(); + cancelButton->hide(); +} + +//! [next() function] +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()); +} +//! [next() function] +//! [previous() function] +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()); +} +//! [previous() function] diff --git a/doc/examples/addressbook-sdk/part3/addressbook.h b/doc/examples/addressbook-sdk/part3/addressbook.h new file mode 100644 index 00000000000..c13dc21a8bd --- /dev/null +++ b/doc/examples/addressbook-sdk/part3/addressbook.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> + +QT_BEGIN_NAMESPACE +class QLabel; +class QLineEdit; +class QPushButton; +class QTextEdit; +QT_END_NAMESPACE + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + +public slots: + void addContact(); + void submitContact(); + void cancel(); +//! [navigation functions] + void next(); + void previous(); +//! [navigation functions] + +private: + QPushButton *addButton; + QPushButton *submitButton; + QPushButton *cancelButton; +//! [navigation pushbuttons] + QPushButton *nextButton; + QPushButton *previousButton; +//! [navigation pushbuttons] + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part3/main.cpp b/doc/examples/addressbook-sdk/part3/main.cpp new file mode 100644 index 00000000000..b25d6561a9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part3/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} diff --git a/doc/examples/addressbook-sdk/part3/part3 b/doc/examples/addressbook-sdk/part3/part3 new file mode 100755 index 0000000000000000000000000000000000000000..9a335620a659a876c447284857b49e253fb29f24 GIT binary patch literal 45529 zcmeHwdtg+>`SwZJg#{x-MU9HOP{3$0W|NSMq6Wx9kXu3mrV1>}?vku-c0+ap!74>V zY|;?L3oUJ}Vt?Awsz|L;s@A4Tl`6H=QcD#rwP=GuOcj+{O1|fr%h|J=4eIav`q$S3 zlR3{^-g)Ppciy?2*>k?;o;58kEzQtZx-rNg%KVAVQ2_r)i;O8SoW?LC+Zb(}XADLV z;|kUw4O}TQ(Ag1YgBt`F1CHHnbI_dzOvg9`3kT0Ike4plY#4ORZ)D2&g{uu?;c&Y{ zI1nsHW|qtNba)MjZ$LcV8W5#pJj<YK18zgvbWUJ89Y=pN;x{9XE(@4W$5*@^^Jhg6 z_CDg^CLk@Hj;};KlJ~oG`STEO<$ojc(lI|g<C0Kt=_Mim#i3xhsW~Sa$;p#(sG5kM zK4-q5&3bB@TDDb9Rc<;aNHd0|vw3bKz_kFb6%OQ#FkCKN4je>l%z|4CR|q#6ZUx+O zxO3np!;OKP4tEXQ#c=1rT?%	IrWW*TJoX^TE}@K|~4H*$K!nW+;4>CA<{(l*5-* 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 literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part3/part3.pro b/doc/examples/addressbook-sdk/part3/part3.pro new file mode 100644 index 00000000000..128c0380e9f --- /dev/null +++ b/doc/examples/addressbook-sdk/part3/part3.pro @@ -0,0 +1,9 @@ +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part3 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part3.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part3 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part4/addressbook.cpp b/doc/examples/addressbook-sdk/part4/addressbook.cpp new file mode 100644 index 00000000000..95def9c4d03 --- /dev/null +++ b/doc/examples/addressbook-sdk/part4/addressbook.cpp @@ -0,0 +1,291 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); +//! [edit and remove buttons] + editButton = new QPushButton(tr("&Edit")); + editButton->setEnabled(false); + removeButton = new QPushButton(tr("&Remove")); + removeButton->setEnabled(false); +//! [edit and remove buttons] + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); + + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); + + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); +//! [connecting edit and remove] + connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); +//! [connecting edit and remove] + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); + connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton); +//! [adding edit and remove to the layout] + buttonLayout1->addWidget(editButton); + buttonLayout1->addWidget(removeButton); +//! [adding edit and remove to the layout] + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); + + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); + mainLayout->addLayout(buttonLayout2, 3, 1); + + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + updateInterface(AddingMode); +} +//! [editContact() function] +void AddressBook::editContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + updateInterface(EditingMode); +} +//! [editContact() function] +//! [submitContact() function beginning] +void AddressBook::submitContact() +{ +//! [submitContact() function beginning] + QString name = nameLine->text(); + QString address = addressText->toPlainText(); + + if (name == "" || address == "") { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name and address.")); + return; + } +//! [submitContact() function part1] + 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)); + return; + } +//! [submitContact() function part1] +//! [submitContact() function part2] + } 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)); + return; + } + } 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); +} +//! [submitContact() function part2] + +void AddressBook::cancel() +{ + nameLine->setText(oldName); + addressText->setText(oldAddress); + updateInterface(NavigationMode); +} +//! [removeContact() function] +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); +} +//! [removeContact() function] +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()); +} +//! [update interface() part 1] +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; +//! [update interface() part 1] +//! [update interface() part 2] + 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); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number >1 ); + + submitButton->hide(); + cancelButton->hide(); + break; + } +} +//! [update interface() part 2] diff --git a/doc/examples/addressbook-sdk/part4/addressbook.h b/doc/examples/addressbook-sdk/part4/addressbook.h new file mode 100644 index 00000000000..83c7af3e9d2 --- /dev/null +++ b/doc/examples/addressbook-sdk/part4/addressbook.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> + +QT_BEGIN_NAMESPACE +class QPushButton; +class QLabel; +class QLineEdit; +class QTextEdit; +QT_END_NAMESPACE + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); +//! [Mode enum] + enum Mode { NavigationMode, AddingMode, EditingMode }; +//! [Mode enum] + +public slots: + void addContact(); + void submitContact(); + void cancel(); +//! [edit and remove slots] + void editContact(); + void removeContact(); +//! [edit and remove slots] + void next(); + void previous(); + +private: +//! [updateInterface() declaration] + void updateInterface(Mode mode); +//! [updateInterface() declaration] + QPushButton *addButton; +//! [buttons declaration] + QPushButton *editButton; + QPushButton *removeButton; +//! [buttons declaration] + QPushButton *submitButton; + QPushButton *cancelButton; + QPushButton *nextButton; + QPushButton *previousButton; + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; +//! [mode declaration] + Mode currentMode; +//! [mode declaration] +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part4/main.cpp b/doc/examples/addressbook-sdk/part4/main.cpp new file mode 100644 index 00000000000..b25d6561a9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part4/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} diff --git a/doc/examples/addressbook-sdk/part4/part4 b/doc/examples/addressbook-sdk/part4/part4 new file mode 100755 index 0000000000000000000000000000000000000000..4a65060243e104b1a047e9804b45873898812491 GIT binary patch literal 54363 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 CTI#d_ literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part4/part4.pro b/doc/examples/addressbook-sdk/part4/part4.pro new file mode 100644 index 00000000000..23ce3e60081 --- /dev/null +++ b/doc/examples/addressbook-sdk/part4/part4.pro @@ -0,0 +1,9 @@ +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part4 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part4.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part4 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part5/addressbook.cpp b/doc/examples/addressbook-sdk/part5/addressbook.cpp new file mode 100644 index 00000000000..5afb6b8e0ad --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/addressbook.cpp @@ -0,0 +1,315 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); + + editButton = new QPushButton(tr("&Edit")); + editButton->setEnabled(false); + removeButton = new QPushButton(tr("&Remove")); + removeButton->setEnabled(false); +//! [instantiating findButton] + findButton = new QPushButton(tr("&Find")); + findButton->setEnabled(false); +//! [instantiating findButton] + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); + + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); + +//! [instantiating FindDialog] + dialog = new FindDialog; +//! [instantiating FindDialog] + + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); + connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); +//! [signals and slots for find] + connect(findButton, SIGNAL(clicked()), this, SLOT(findContact())); +//! [signals and slots for find] + connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton); + buttonLayout1->addWidget(editButton); + buttonLayout1->addWidget(removeButton); +//! [adding findButton to layout] + buttonLayout1->addWidget(findButton); +//! [adding findButton to layout] + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); + + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); + mainLayout->addLayout(buttonLayout2, 2, 1); + + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + updateInterface(AddingMode); +} + +void AddressBook::editContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + updateInterface(EditingMode); +} + +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.")); + return; + } + + 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)); + return; + } + } 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)); + return; + } + } 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); + addressText->setText(oldAddress); + updateInterface(NavigationMode); +} + +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::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()); +} +//! [findContact() function] +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); +} +//! [findContact() function] + +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; + } +} diff --git a/doc/examples/addressbook-sdk/part5/addressbook.h b/doc/examples/addressbook-sdk/part5/addressbook.h new file mode 100644 index 00000000000..04dfa00ee89 --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/addressbook.h @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> +//! [include finddialog's header] +#include "finddialog.h" +//! [include finddialog's header] +QT_BEGIN_NAMESPACE +class QPushButton; +class QLabel; +class QLineEdit; +class QTextEdit; +QT_END_NAMESPACE + + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + enum Mode { NavigationMode, AddingMode, EditingMode }; + +public slots: + void addContact(); + void editContact(); + void submitContact(); + void cancel(); + void removeContact(); +//! [findContact() declaration] + void findContact(); +//! [findContact() declaration] + void next(); + void previous(); + +private: + void updateInterface(Mode mode); + + QPushButton *addButton; + QPushButton *editButton; + QPushButton *removeButton; +//! [findButton declaration] + QPushButton *findButton; +//! [findButton declaration] + QPushButton *submitButton; + QPushButton *cancelButton; + QPushButton *nextButton; + QPushButton *previousButton; + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; +//! [FindDialog declaration] + FindDialog *dialog; +//! [FindDialog declaration] + QString oldName; + QString oldAddress; + Mode currentMode; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part5/finddialog.cpp b/doc/examples/addressbook-sdk/part5/finddialog.cpp new file mode 100644 index 00000000000..f8839505b05 --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/finddialog.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "finddialog.h" + +//! [constructor] +FindDialog::FindDialog(QWidget *parent) + : QDialog(parent) +{ + QLabel *findLabel = new QLabel(tr("Enter the name of a contact:")); + lineEdit = new QLineEdit; + + findButton = new QPushButton(tr("&Find")); + findText = ""; + + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(findLabel); + layout->addWidget(lineEdit); + layout->addWidget(findButton); + + setLayout(layout); + setWindowTitle(tr("Find a Contact")); + connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked())); + connect(findButton, SIGNAL(clicked()), this, SLOT(accept())); +} +//! [constructor] +//! [findClicked() function] +void FindDialog::findClicked() +{ + QString text = lineEdit->text(); + + if (text.isEmpty()) { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name.")); + return; + } else { + findText = text; + lineEdit->clear(); + hide(); + } +} +//! [findClicked() function] +//! [getFindText() function] +QString FindDialog::getFindText() +{ + return findText; +} +//! [getFindText() function] diff --git a/doc/examples/addressbook-sdk/part5/finddialog.h b/doc/examples/addressbook-sdk/part5/finddialog.h new file mode 100644 index 00000000000..db60784f48c --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/finddialog.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FINDDIALOG_H +#define FINDDIALOG_H +//! [FindDialog header] +#include <QDialog> + +QT_BEGIN_NAMESPACE +class QLineEdit; +class QPushButton; +QT_END_NAMESPACE + +class FindDialog : public QDialog +{ + Q_OBJECT + +public: + FindDialog(QWidget *parent = 0); + QString getFindText(); + +public slots: + void findClicked(); + +private: + QPushButton *findButton; + QLineEdit *lineEdit; + QString findText; +}; +//! [FindDialog header] +#endif diff --git a/doc/examples/addressbook-sdk/part5/main.cpp b/doc/examples/addressbook-sdk/part5/main.cpp new file mode 100644 index 00000000000..b25d6561a9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} diff --git a/doc/examples/addressbook-sdk/part5/part5 b/doc/examples/addressbook-sdk/part5/part5 new file mode 100755 index 0000000000000000000000000000000000000000..ef8a38df97bbca21c6596b5287b918d354787ac2 GIT binary patch literal 64575 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�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 literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part5/part5.pro b/doc/examples/addressbook-sdk/part5/part5.pro new file mode 100644 index 00000000000..95123d000e0 --- /dev/null +++ b/doc/examples/addressbook-sdk/part5/part5.pro @@ -0,0 +1,11 @@ +SOURCES = addressbook.cpp \ + finddialog.cpp \ + main.cpp +HEADERS = addressbook.h \ + finddialog.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part5 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part5.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part5 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part6/addressbook.cpp b/doc/examples/addressbook-sdk/part6/addressbook.cpp new file mode 100644 index 00000000000..b7cd4469252 --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/addressbook.cpp @@ -0,0 +1,396 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); + + editButton = new QPushButton(tr("&Edit")); + editButton->setEnabled(false); + removeButton = new QPushButton(tr("&Remove")); + removeButton->setEnabled(false); + findButton = new QPushButton(tr("&Find")); + findButton->setEnabled(false); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); + + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); + + loadButton = new QPushButton(tr("&Load...")); +//! [tooltip 1] + loadButton->setToolTip(tr("Load contacts from a file")); +//! [tooltip 1] + saveButton = new QPushButton(tr("Sa&ve...")); +//! [tooltip 2] + saveButton->setToolTip(tr("Save contacts to a file")); +//! [tooltip 2] + saveButton->setEnabled(false); + + dialog = new FindDialog; + + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); + connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); + connect(findButton, SIGNAL(clicked()), this, SLOT(findContact())); + connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); + connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile())); + connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile())); + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton); + buttonLayout1->addWidget(editButton); + buttonLayout1->addWidget(removeButton); + buttonLayout1->addWidget(findButton); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addWidget(loadButton); + buttonLayout1->addWidget(saveButton); + buttonLayout1->addStretch(); + + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); + mainLayout->addLayout(buttonLayout2, 2, 1); + + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + updateInterface(AddingMode); +} + +void AddressBook::editContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + updateInterface(EditingMode); +} + +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.")); + return; + } + + 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)); + return; + } + } 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)); + return; + } + } 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); + addressText->setText(oldAddress); + updateInterface(NavigationMode); +} + +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::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::findContact() +{ + dialog->show(); + + if (dialog->exec() == 1) { + 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::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(); + + loadButton->setEnabled(false); + saveButton->setEnabled(false); + 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(); + + loadButton->setEnabled(true); + saveButton->setEnabled(number >= 1); + break; + } +} + +//! [saveToFile() function part1] +void AddressBook::saveToFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save Address Book"), "", + tr("Address Book (*.abk);;All Files (*)")); + +//! [saveToFile() function part1] +//! [saveToFile() function part2] + if (fileName.isEmpty()) + return; + else { + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::information(this, tr("Unable to open file"), + file.errorString()); + return; + } + +//! [saveToFile() function part2] +//! [saveToFile() function part3] + QDataStream out(&file); + out.setVersion(QDataStream::Qt_4_5); + out << contacts; + } +} +//! [saveToFile() function part3] + +//! [loadFromFile() function part1] +void AddressBook::loadFromFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open Address Book"), "", + tr("Address Book (*.abk);;All Files (*)")); +//! [loadFromFile() function part1] + +//! [loadFromFile() function part2] + 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; +//! [loadFromFile() function part2] + +//! [loadFromFile() function part3] + 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); +} +//! [loadFromFile() function part3] diff --git a/doc/examples/addressbook-sdk/part6/addressbook.h b/doc/examples/addressbook-sdk/part6/addressbook.h new file mode 100644 index 00000000000..5a36af3e69b --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/addressbook.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> +#include "finddialog.h" + +QT_BEGIN_NAMESPACE +class QPushButton; +class QLabel; +class QLineEdit; +class QTextEdit; +QT_END_NAMESPACE + + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + enum Mode { NavigationMode, AddingMode, EditingMode }; + +public slots: + void addContact(); + void editContact(); + void submitContact(); + void cancel(); + void removeContact(); + void findContact(); + void next(); + void previous(); +//! [save and load functions declaration] + void saveToFile(); + void loadFromFile(); +//! [save and load functions declaration] + +private: + void updateInterface(Mode mode); + + QPushButton *addButton; + QPushButton *editButton; + QPushButton *removeButton; + QPushButton *findButton; + QPushButton *submitButton; + QPushButton *cancelButton; + QPushButton *nextButton; + QPushButton *previousButton; +//! [save and load buttons declaration] + QPushButton *loadButton; + QPushButton *saveButton; +//! [save and load buttons declaration] + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + FindDialog *dialog; + QString oldName; + QString oldAddress; + Mode currentMode; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part6/finddialog.cpp b/doc/examples/addressbook-sdk/part6/finddialog.cpp new file mode 100644 index 00000000000..e28bbaef394 --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/finddialog.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "finddialog.h" + +FindDialog::FindDialog(QWidget *parent) + : QDialog(parent) +{ + QLabel *findLabel = new QLabel(tr("Enter the name of a contact:")); + lineEdit = new QLineEdit; + + findButton = new QPushButton(tr("&Find")); + findText = ""; + + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(findLabel); + layout->addWidget(lineEdit); + layout->addWidget(findButton); + + setLayout(layout); + setWindowTitle(tr("Find a Contact")); + connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked())); + connect(findButton, SIGNAL(clicked()), this, SLOT(accept())); +} + +void FindDialog::findClicked() +{ + QString text = lineEdit->text(); + + if (text.isEmpty()) { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name.")); + return; + } else { + findText = text; + lineEdit->clear(); + hide(); + } +} + +QString FindDialog::getFindText() +{ + return findText; +} diff --git a/doc/examples/addressbook-sdk/part6/finddialog.h b/doc/examples/addressbook-sdk/part6/finddialog.h new file mode 100644 index 00000000000..c94baad5d39 --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/finddialog.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FINDDIALOG_H +#define FINDDIALOG_H + +#include <QDialog> + +QT_BEGIN_NAMESPACE +class QLineEdit; +class QPushButton; +QT_END_NAMESPACE + +class FindDialog : public QDialog +{ + Q_OBJECT + +public: + FindDialog(QWidget *parent = 0); + QString getFindText(); + +public slots: + void findClicked(); + +private: + QPushButton *findButton; + QLineEdit *lineEdit; + QString findText; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part6/main.cpp b/doc/examples/addressbook-sdk/part6/main.cpp new file mode 100644 index 00000000000..b25d6561a9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} diff --git a/doc/examples/addressbook-sdk/part6/part6 b/doc/examples/addressbook-sdk/part6/part6 new file mode 100755 index 0000000000000000000000000000000000000000..b096b395c758aa1d0949446961f07610326c49b3 GIT binary patch literal 74880 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 b8^Vb3>P8>VOu7rx3H9D%nG-t1Fw_44^hiLq literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part6/part6.pro b/doc/examples/addressbook-sdk/part6/part6.pro new file mode 100644 index 00000000000..dc8956132aa --- /dev/null +++ b/doc/examples/addressbook-sdk/part6/part6.pro @@ -0,0 +1,11 @@ +SOURCES = addressbook.cpp \ + finddialog.cpp \ + main.cpp +HEADERS = addressbook.h \ + finddialog.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part6 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part6.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part6 +INSTALLS += target sources diff --git a/doc/examples/addressbook-sdk/part7/addressbook.cpp b/doc/examples/addressbook-sdk/part7/addressbook.cpp new file mode 100644 index 00000000000..2f81d2bd619 --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/addressbook.cpp @@ -0,0 +1,449 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); + + editButton = new QPushButton(tr("&Edit")); + editButton->setEnabled(false); + removeButton = new QPushButton(tr("&Remove")); + removeButton->setEnabled(false); + findButton = new QPushButton(tr("&Find")); + findButton->setEnabled(false); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); + + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); + + loadButton = new QPushButton(tr("&Load...")); + loadButton->setToolTip(tr("Load contacts from a file")); + saveButton = new QPushButton(tr("Sa&ve...")); + saveButton->setToolTip(tr("Save contacts to a file")); + saveButton->setEnabled(false); + + exportButton = new QPushButton(tr("E&xport")); + exportButton->setToolTip(tr("Export as vCard")); + exportButton->setEnabled(false); + + dialog = new FindDialog; + + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); + connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); + connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); + connect(findButton, SIGNAL(clicked()), this, SLOT(findContact())); + connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); + connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile())); + connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile())); + connect(exportButton, SIGNAL(clicked()), this, SLOT(exportAsVCard())); + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton); + buttonLayout1->addWidget(editButton); + buttonLayout1->addWidget(removeButton); + buttonLayout1->addWidget(findButton); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addWidget(loadButton); + buttonLayout1->addWidget(saveButton); + buttonLayout1->addWidget(exportButton); + buttonLayout1->addStretch(); + + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); + mainLayout->addLayout(buttonLayout2, 2, 1); + + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + updateInterface(AddingMode); +} + +void AddressBook::editContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + updateInterface(EditingMode); +} + +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.")); + return; + } + + 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)); + return; + } + } 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)); + return; + } + } 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); + addressText->setText(oldAddress); + updateInterface(NavigationMode); +} + +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::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::findContact() +{ + dialog->show(); + + if (dialog->exec() == 1) { + 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::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(); + + loadButton->setEnabled(false); + saveButton->setEnabled(false); + exportButton->setEnabled(false); + 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(); + + exportButton->setEnabled(number >= 1); + + loadButton->setEnabled(true); + saveButton->setEnabled(number >= 1); + break; + } +} + +void AddressBook::saveToFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save Address Book"), "", + tr("Address Book (*.abk);;All Files (*)")); + + 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_3); + out << contacts; + } + + updateInterface(NavigationMode); +} + +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_3); + contacts.empty(); // empty existing contacts + in >> contacts; + + QMap<QString, QString>::iterator i = contacts.begin(); + nameLine->setText(i.key()); + addressText->setText(i.value()); + } + + updateInterface(NavigationMode); +} + +//! [export function part1] +void AddressBook::exportAsVCard() +{ + QString name = nameLine->text(); + QString address = addressText->toPlainText(); + QString firstName; + QString lastName; + QStringList nameList; + + int index = name.indexOf(" "); + + if (index != -1) { + nameList = name.split(QRegExp("\\s+"), QString::SkipEmptyParts); + firstName = nameList.first(); + lastName = nameList.last(); + } else { + firstName = name; + lastName = ""; + } + + QString fileName = QFileDialog::getSaveFileName(this, + tr("Export Contact"), "", + tr("vCard Files (*.vcf);;All Files (*)")); + + if (fileName.isEmpty()) + return; + + QFile file(fileName); +//! [export function part1] + +//! [export function part2] + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::information(this, tr("Unable to open file"), + file.errorString()); + return; + } + + QTextStream out(&file); +//! [export function part2] + +//! [export function part3] + out << "BEGIN:VCARD" << "\n"; + out << "VERSION:2.1" << "\n"; + out << "N:" << lastName << ";" << firstName << "\n"; + + if (!nameList.isEmpty()) + out << "FN:" << nameList.join(" ") << "\n"; + else + out << "FN:" << firstName << "\n"; +//! [export function part3] + +//! [export function part4] + address.replace(";", "\\;", Qt::CaseInsensitive); + address.replace("\n", ";", Qt::CaseInsensitive); + address.replace(",", " ", Qt::CaseInsensitive); + + out << "ADR;HOME:;" << address << "\n"; + out << "END:VCARD" << "\n"; + + QMessageBox::information(this, tr("Export Successful"), + tr("\"%1\" has been exported as a vCard.").arg(name)); +} +//! [export function part4] diff --git a/doc/examples/addressbook-sdk/part7/addressbook.h b/doc/examples/addressbook-sdk/part7/addressbook.h new file mode 100644 index 00000000000..3a6ae41e76c --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/addressbook.h @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> +#include "finddialog.h" + +QT_BEGIN_NAMESPACE +class QPushButton; +class QLabel; +class QLineEdit; +class QTextEdit; +QT_END_NAMESPACE + + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = 0); + enum Mode { NavigationMode, AddingMode, EditingMode }; + +public slots: + void addContact(); + void editContact(); + void submitContact(); + void cancel(); + void removeContact(); + void findContact(); + void next(); + void previous(); + void saveToFile(); + void loadFromFile(); +//! [exportAsVCard() declaration] + void exportAsVCard(); +//! [exportAsVCard() declaration] + +private: + void updateInterface(Mode mode); + + QPushButton *addButton; + QPushButton *editButton; + QPushButton *removeButton; + QPushButton *findButton; + QPushButton *submitButton; + QPushButton *cancelButton; + QPushButton *nextButton; + QPushButton *previousButton; + QPushButton *loadButton; + QPushButton *saveButton; +//! [exportButton declaration] + QPushButton *exportButton; +//! [exportButton declaration] + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + FindDialog *dialog; + QString oldName; + QString oldAddress; + Mode currentMode; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part7/finddialog.cpp b/doc/examples/addressbook-sdk/part7/finddialog.cpp new file mode 100644 index 00000000000..e28bbaef394 --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/finddialog.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "finddialog.h" + +FindDialog::FindDialog(QWidget *parent) + : QDialog(parent) +{ + QLabel *findLabel = new QLabel(tr("Enter the name of a contact:")); + lineEdit = new QLineEdit; + + findButton = new QPushButton(tr("&Find")); + findText = ""; + + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(findLabel); + layout->addWidget(lineEdit); + layout->addWidget(findButton); + + setLayout(layout); + setWindowTitle(tr("Find a Contact")); + connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked())); + connect(findButton, SIGNAL(clicked()), this, SLOT(accept())); +} + +void FindDialog::findClicked() +{ + QString text = lineEdit->text(); + + if (text.isEmpty()) { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name.")); + return; + } else { + findText = text; + lineEdit->clear(); + hide(); + } +} + +QString FindDialog::getFindText() +{ + return findText; +} diff --git a/doc/examples/addressbook-sdk/part7/finddialog.h b/doc/examples/addressbook-sdk/part7/finddialog.h new file mode 100644 index 00000000000..c94baad5d39 --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/finddialog.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FINDDIALOG_H +#define FINDDIALOG_H + +#include <QDialog> + +QT_BEGIN_NAMESPACE +class QLineEdit; +class QPushButton; +QT_END_NAMESPACE + +class FindDialog : public QDialog +{ + Q_OBJECT + +public: + FindDialog(QWidget *parent = 0); + QString getFindText(); + +public slots: + void findClicked(); + +private: + QPushButton *findButton; + QLineEdit *lineEdit; + QString findText; +}; + +#endif diff --git a/doc/examples/addressbook-sdk/part7/main.cpp b/doc/examples/addressbook-sdk/part7/main.cpp new file mode 100644 index 00000000000..b25d6561a9d --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook *addressBook = new AddressBook; + addressBook->show(); + + return app.exec(); +} diff --git a/doc/examples/addressbook-sdk/part7/part7 b/doc/examples/addressbook-sdk/part7/part7 new file mode 100755 index 0000000000000000000000000000000000000000..595312aa7db302521bed90c888871b619da40379 GIT binary patch literal 84992 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APC9fC|JR7` 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 TPR{A&9COvK8_8#%D6al5rj@^G literal 0 HcmV?d00001 diff --git a/doc/examples/addressbook-sdk/part7/part7.pro b/doc/examples/addressbook-sdk/part7/part7.pro new file mode 100644 index 00000000000..a726d910038 --- /dev/null +++ b/doc/examples/addressbook-sdk/part7/part7.pro @@ -0,0 +1,11 @@ +SOURCES = addressbook.cpp \ + finddialog.cpp \ + main.cpp +HEADERS = addressbook.h \ + finddialog.h + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part7 +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS part7.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tutorials/addressbook/part7 +INSTALLS += target sources -- GitLab