~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to doc/html/activeqt-qutlook-addressview-cpp.html

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="iso-8859-1"?>
 
2
<!DOCTYPE html
 
3
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
 
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
5
<head>
 
6
    <title>Qt 4.0: addressview.cpp Example File (activeqt/qutlook/addressview.cpp)</title>
 
7
    <style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
 
8
a:link { color: #004faf; text-decoration: none }
 
9
a:visited { color: #672967; text-decoration: none }
 
10
td.postheader { font-family: sans-serif }
 
11
tr.address { font-family: sans-serif }
 
12
body { background: #ffffff; color: black; }</style>
 
13
</head>
 
14
<body>
 
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 
16
<tr>
 
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
 
18
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a>&nbsp;&middot; <a href="classes.html"><font color="#004faf">All&nbsp;Classes</font></a>&nbsp;&middot; <a href="mainclasses.html"><font color="#004faf">Main&nbsp;Classes</font></a>&nbsp;&middot; <a href="annotated.html"><font color="#004faf">Annotated</font></a>&nbsp;&middot; <a href="groups.html"><font color="#004faf">Grouped&nbsp;Classes</font></a>&nbsp;&middot; <a href="functions.html"><font color="#004faf">Functions</font></a></td>
 
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">addressview.cpp Example File<br /><small><small>activeqt/qutlook/addressview.cpp</small></small></h1>
 
20
<pre>&nbsp;   /****************************************************************************
 
21
    **
 
22
    ** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
 
23
    **
 
24
    ** This file is part of the documentation of the Qt Toolkit.
 
25
    **
 
26
    ** This file may be distributed under the terms of the Q Public License
 
27
** as defined by Trolltech AS of Norway and appearing in the file
 
28
** LICENSE.QPL included in the packaging of this file.
 
29
**
 
30
** This file may be distributed and/or modified under the terms of the
 
31
** GNU General Public License version 2 as published by the Free Software
 
32
** Foundation and appearing in the file LICENSE.GPL included in the
 
33
** packaging of this file.
 
34
**
 
35
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
 
36
**   information about Qt Commercial License Agreements.
 
37
** See http://www.trolltech.com/qpl/ for QPL licensing information.
 
38
** See http://www.trolltech.com/gpl/ for GPL licensing information.
 
39
**
 
40
** Contact info@trolltech.com if any conditions of this licensing are
 
41
** not clear to you.
 
42
    **
 
43
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
44
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
45
    **
 
46
    ****************************************************************************/
 
47
 
 
48
    #include &lt;QtGui&gt;
 
49
 
 
50
    #include &quot;addressview.h&quot;
 
51
    #include &quot;msoutl.h&quot;
 
52
 
 
53
    class AddressBookModel : public QAbstractListModel
 
54
    {
 
55
    public:
 
56
        AddressBookModel(AddressView *parent);
 
57
        ~AddressBookModel();
 
58
 
 
59
        int rowCount(const QModelIndex &amp;parent = QModelIndex()) const;
 
60
        int columnCount(const QModelIndex &amp;parent) const;
 
61
        QVariant headerData(int section, Qt::Orientation orientation, int role) const;
 
62
        QVariant data(const QModelIndex &amp;index, int role) const;
 
63
 
 
64
        void changeItem(const QModelIndex &amp;index, const QString &amp;firstName, const QString &amp;lastName, const QString &amp;address, const QString &amp;email);
 
65
        void addItem(const QString &amp;firstName, const QString &amp;lastName, const QString &amp;address, const QString &amp;email);
 
66
        void update();
 
67
 
 
68
    private:
 
69
        Outlook::Application outlook;
 
70
        Outlook::Items * contactItems;
 
71
 
 
72
        mutable QHash&lt;QModelIndex, QStringList&gt; cache;
 
73
    };
 
74
 
 
75
    AddressBookModel::AddressBookModel(AddressView *parent)
 
76
    : QAbstractListModel(parent)
 
77
    {
 
78
        if (!outlook.isNull()) {
 
79
            Outlook::NameSpace session(outlook.Session());
 
80
            session.Logon();
 
81
            Outlook::MAPIFolder *folder = session.GetDefaultFolder(Outlook::olFolderContacts);
 
82
            contactItems = new Outlook::Items(folder-&gt;Items());
 
83
            connect(contactItems, SIGNAL(ItemAdd(IDispatch*)), parent, SLOT(updateOutlook()));
 
84
            connect(contactItems, SIGNAL(ItemChange(IDispatch*)), parent, SLOT(updateOutlook()));
 
85
            connect(contactItems, SIGNAL(ItemRemove()), parent, SLOT(updateOutlook()));
 
86
 
 
87
            delete folder;
 
88
        }
 
89
    }
 
90
 
 
91
    AddressBookModel::~AddressBookModel()
 
92
    {
 
93
        delete contactItems;
 
94
 
 
95
        if (!outlook.isNull())
 
96
            Outlook::NameSpace(outlook.Session()).Logoff();
 
97
    }
 
98
 
 
99
    int AddressBookModel::rowCount(const QModelIndex &amp;) const
 
100
    {
 
101
        return contactItems ? contactItems-&gt;Count() : 0;
 
102
    }
 
103
 
 
104
    int AddressBookModel::columnCount(const QModelIndex &amp;parent) const
 
105
    {
 
106
        return 4;
 
107
    }
 
108
 
 
109
    QVariant AddressBookModel::headerData(int section, Qt::Orientation orientation, int role) const
 
110
    {
 
111
        if (role != Qt::DisplayRole)
 
112
            return QVariant();
 
113
 
 
114
        switch (section) {
 
115
        case 0:
 
116
            return tr(&quot;First Name&quot;);
 
117
        case 1:
 
118
            return tr(&quot;Last Name&quot;);
 
119
        case 2:
 
120
            return tr(&quot;Address&quot;);
 
121
        case 3:
 
122
            return tr(&quot;Email&quot;);
 
123
        default:
 
124
            break;
 
125
        }
 
126
 
 
127
        return QVariant();
 
128
    }
 
129
 
 
130
    QVariant AddressBookModel::data(const QModelIndex &amp;index, int role) const
 
131
    {
 
132
        if (!index.isValid() || role != Qt::DisplayRole)
 
133
            return QVariant();
 
134
 
 
135
        QStringList data;
 
136
        if (cache.contains(index)) {
 
137
            data = cache.value(index);
 
138
        } else {
 
139
            Outlook::ContactItem contact(contactItems-&gt;Item(index.row() + 1));
 
140
            data &lt;&lt; contact.FirstName() &lt;&lt; contact.LastName() &lt;&lt; contact.HomeAddress() &lt;&lt; contact.Email1Address();
 
141
            cache.insert(index, data);
 
142
        }
 
143
 
 
144
        if (index.column() &lt; data.count())
 
145
            return data.at(index.column());
 
146
 
 
147
        return QVariant();
 
148
    }
 
149
 
 
150
    void AddressBookModel::changeItem(const QModelIndex &amp;index, const QString &amp;firstName, const QString &amp;lastName, const QString &amp;address, const QString &amp;email)
 
151
    {
 
152
        Outlook::ContactItem item(contactItems-&gt;Item(index.row() + 1));
 
153
 
 
154
        item.SetFirstName(firstName);
 
155
        item.SetLastName(lastName);
 
156
        item.SetHomeAddress(address);
 
157
        item.SetEmail1Address(email);
 
158
 
 
159
        item.Save();
 
160
 
 
161
        cache.take(index);
 
162
    }
 
163
 
 
164
    void AddressBookModel::addItem(const QString &amp;firstName, const QString &amp;lastName, const QString &amp;address, const QString &amp;email)
 
165
    {
 
166
        Outlook::ContactItem item(outlook.CreateItem(Outlook::olContactItem));
 
167
        if (!item.isNull()) {
 
168
            item.SetFirstName(firstName);
 
169
            item.SetLastName(lastName);
 
170
            item.SetHomeAddress(address);
 
171
            item.SetEmail1Address(email);
 
172
 
 
173
            item.Save();
 
174
        }
 
175
    }
 
176
 
 
177
    void AddressBookModel::update()
 
178
    {
 
179
        cache.clear();
 
180
 
 
181
        emit reset();
 
182
    }
 
183
 
 
184
    AddressView::AddressView(QWidget *parent)
 
185
    : QWidget(parent)
 
186
    {
 
187
        QGridLayout *mainGrid = new QGridLayout(this);
 
188
 
 
189
        QLabel *liFirstName = new QLabel(&quot;First &amp;Name&quot;, this);
 
190
        liFirstName-&gt;resize(liFirstName-&gt;sizeHint());
 
191
        mainGrid-&gt;addWidget(liFirstName, 0, 0);
 
192
 
 
193
        QLabel *liLastName = new QLabel(&quot;&amp;Last Name&quot;, this);
 
194
        liLastName-&gt;resize(liLastName-&gt;sizeHint());
 
195
        mainGrid-&gt;addWidget(liLastName, 0, 1);
 
196
 
 
197
        QLabel *liAddress = new QLabel(&quot;Add&amp;ress&quot;, this);
 
198
        liAddress-&gt;resize(liAddress-&gt;sizeHint());
 
199
        mainGrid-&gt;addWidget(liAddress, 0, 2);
 
200
 
 
201
        QLabel *liEMail = new QLabel(&quot;&amp;E-Mail&quot;, this);
 
202
        liEMail-&gt;resize(liEMail-&gt;sizeHint());
 
203
        mainGrid-&gt;addWidget(liEMail, 0, 3);
 
204
 
 
205
        add = new QPushButton(&quot;A&amp;dd&quot;, this);
 
206
        add-&gt;resize(add-&gt;sizeHint());
 
207
        mainGrid-&gt;addWidget(add, 0, 4);
 
208
        connect(add, SIGNAL(clicked()), this, SLOT(addEntry()));
 
209
 
 
210
        iFirstName = new QLineEdit(this);
 
211
        iFirstName-&gt;resize(iFirstName-&gt;sizeHint());
 
212
        mainGrid-&gt;addWidget(iFirstName, 1, 0);
 
213
        liFirstName-&gt;setBuddy(iFirstName);
 
214
 
 
215
        iLastName = new QLineEdit(this);
 
216
        iLastName-&gt;resize(iLastName-&gt;sizeHint());
 
217
        mainGrid-&gt;addWidget(iLastName, 1, 1);
 
218
        liLastName-&gt;setBuddy(iLastName);
 
219
 
 
220
        iAddress = new QLineEdit(this);
 
221
        iAddress-&gt;resize(iAddress-&gt;sizeHint());
 
222
        mainGrid-&gt;addWidget(iAddress, 1, 2);
 
223
        liAddress-&gt;setBuddy(iAddress);
 
224
 
 
225
        iEMail = new QLineEdit(this);
 
226
        iEMail-&gt;resize(iEMail-&gt;sizeHint());
 
227
        mainGrid-&gt;addWidget(iEMail, 1, 3);
 
228
        liEMail-&gt;setBuddy(iEMail);
 
229
 
 
230
        change = new QPushButton(&quot;&amp;Change&quot;, this);
 
231
        change-&gt;resize(change-&gt;sizeHint());
 
232
        mainGrid-&gt;addWidget(change, 1, 4);
 
233
        connect(change, SIGNAL(clicked()), this, SLOT(changeEntry()));
 
234
 
 
235
        treeView = new QTreeView(this);
 
236
        treeView-&gt;setSelectionMode(QTreeView::SingleSelection);
 
237
        treeView-&gt;setRootIsDecorated(false);
 
238
 
 
239
        model = new AddressBookModel(this);
 
240
        treeView-&gt;setModel(model);
 
241
 
 
242
        connect(treeView-&gt;selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(itemSelected(QModelIndex)));
 
243
 
 
244
        mainGrid-&gt;addWidget(treeView, 2, 0, 1, 5);
 
245
    }
 
246
 
 
247
    void AddressView::updateOutlook()
 
248
    {
 
249
        model-&gt;update();
 
250
    }
 
251
 
 
252
    void AddressView::addEntry()
 
253
    {
 
254
        if (!iFirstName-&gt;text().isEmpty() || !iLastName-&gt;text().isEmpty() ||
 
255
             !iAddress-&gt;text().isEmpty() || !iEMail-&gt;text().isEmpty()) {
 
256
            model-&gt;addItem(iFirstName-&gt;text(), iFirstName-&gt;text(), iAddress-&gt;text(), iEMail-&gt;text());
 
257
        }
 
258
 
 
259
        iFirstName-&gt;setText(&quot;&quot;);
 
260
        iLastName-&gt;setText(&quot;&quot;);
 
261
        iAddress-&gt;setText(&quot;&quot;);
 
262
        iEMail-&gt;setText(&quot;&quot;);
 
263
    }
 
264
 
 
265
    void AddressView::changeEntry()
 
266
    {
 
267
        QModelIndex current = treeView-&gt;currentIndex();
 
268
 
 
269
        if (current.isValid())
 
270
            model-&gt;changeItem(current, iFirstName-&gt;text(), iLastName-&gt;text(), iAddress-&gt;text(), iEMail-&gt;text());
 
271
    }
 
272
 
 
273
    void AddressView::itemSelected(const QModelIndex &amp;index)
 
274
    {
 
275
        if (!index.isValid())
 
276
            return;
 
277
 
 
278
        QAbstractItemModel *model = treeView-&gt;model();
 
279
        iFirstName-&gt;setText(model-&gt;data(model-&gt;index(index.row(), 0)).toString());
 
280
        iLastName-&gt;setText(model-&gt;data(model-&gt;index(index.row(), 1)).toString());
 
281
        iAddress-&gt;setText(model-&gt;data(model-&gt;index(index.row(), 2)).toString());
 
282
        iEMail-&gt;setText(model-&gt;data(model-&gt;index(index.row(), 3)).toString());
 
283
    }</pre>
 
284
<p /><address><hr /><div align="center">
 
285
<table width="100%" cellspacing="0" border="0"><tr class="address">
 
286
<td width="30%">Copyright &copy; 2005 <a href="trolltech.html">Trolltech</a></td>
 
287
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
 
288
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
 
289
</tr></table></div></address></body>
 
290
</html>