summaryrefslogtreecommitdiffabout
path: root/kabc/addresseedialog.h
blob: 99c74bda32f2a5471b5710a0b9173b2057e09976 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
    This file is part of libkabc.
    Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.
*/

#ifndef KABC_ADDRESSEEDIALOG_H
#define KABC_ADDRESSEEDIALOG_H

#include <qdict.h>

#include <kdialogbase.h>
#include <klineedit.h>
#include <klistview.h>

#include "addressbook.h"

namespace KABC {

/**
  @short Special ListViewItem, that is used by the AddresseeDialog.
*/
class AddresseeItem : public QListViewItem
{
  public:

    /**
      Type of column
      @li @p Name -  Name in Addressee
      @li @p Email - Email in Addressee
    */
    enum columns { Name = 0, Email = 1 };

    /**
      Constructor.

      @param parent    The parent listview.
      @param addressee The associated addressee.
    */
    AddresseeItem( QListView *parent, const Addressee &addressee );

    /**
      Returns the addressee.
    */
    Addressee addressee() const { return mAddressee; }

    /**
      Method used by QListView to sort the items.
    */
    virtual QString key( int column, bool ascending ) const;

  private:
    Addressee mAddressee;
};

/**
  @short Dialog for selecting address book entries.
 
  This class provides a dialog for selecting entries from the standard KDE
  address book. Use the getAddressee() function to open a modal dialog,
  returning an address book entry.
 
  In the dialog you can select an entry from the list with the mouse or type in
  the first letters of the name or email address you are searching for. The
  entry matching best is automatically selected. Use double click, pressing
  return or pressing the ok button to return the selected addressee to the
  application.
*/
class AddresseeDialog : public KDialogBase
{
    Q_OBJECT

  public:
    /**
      Construct addressbook entry select dialog.
     
      @param parent parent widget
    */
    AddresseeDialog( QWidget *parent=0, bool multiple=false );

    /**
      Destructor.
    */
    virtual ~AddresseeDialog();

    /**
      Return the address chosen.
     
      If it is a multiple select, this will return only the first address chosen
    */
    Addressee addressee();

    /**
      Return the list of addresses chosen
    */
    Addressee::List addressees();

    /**
      Select a single address book entry.
     
      Open addressee select dialog and return the entry selected by the user.
      If the user doesn't select an entry or presses cancel, the returned
      addressee is empty.
    */
    static Addressee getAddressee( QWidget *parent );

    /**
      Select multiple address book entries.
      
      Open addressee select dialog and return the entries selected by the user.
      If the user doesn't select an entry or presses cancel, the returned
      addressee list is empty.
    */
    static Addressee::List getAddressees( QWidget *parent );

  private slots:
    void selectItem( const QString & );
    void selectNextItem( QListViewItem *item );
    void updateEdit( QListViewItem *item );
    void addSelected( QListViewItem *item );
    void removeSelected();
    void loadAddressBook();

  protected slots:
    void addressBookChanged();

  private:
    void addCompletionItem( const QString &str, QListViewItem *item );

    bool mMultiple;

    KListView *mAddresseeList;
    QLineEdit *mAddresseeEdit;

    KListView *mSelectedList;

    AddressBook *mAddressBook;

    QDict<QListViewItem> mItemDict;
    QDict<QListViewItem> mSelectedDict;

    class AddresseeDialogPrivate;
    AddresseeDialogPrivate *d;
};

}
#endif