author | zautrix <zautrix> | 2005-03-30 23:17:42 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-03-30 23:17:42 (UTC) |
commit | 529c0fb8a8bf15e7bd375ddeb355c5802baf4c93 (patch) (unidiff) | |
tree | 72ebca6de7e54f2cf89d3d6df61d3b40aa66a444 | |
parent | 28ac86e2efbc10f210dbd2d5ac0053f4e6198d57 (diff) | |
download | kdepimpi-529c0fb8a8bf15e7bd375ddeb355c5802baf4c93.zip kdepimpi-529c0fb8a8bf15e7bd375ddeb355c5802baf4c93.tar.gz kdepimpi-529c0fb8a8bf15e7bd375ddeb355c5802baf4c93.tar.bz2 |
key fix
-rw-r--r-- | kaddressbook/kaddressbookview.cpp | 4 | ||||
-rw-r--r-- | kaddressbook/kaddressbookview.h | 6 | ||||
-rw-r--r-- | kaddressbook/views/cardview.cpp | 31 | ||||
-rw-r--r-- | kaddressbook/views/cardview.h | 7 | ||||
-rw-r--r-- | kaddressbook/views/contactlistview.cpp | 29 | ||||
-rw-r--r-- | kaddressbook/views/contactlistview.h | 4 | ||||
-rw-r--r-- | kaddressbook/views/kaddressbookcardview.cpp | 4 | ||||
-rw-r--r-- | kaddressbook/views/kaddressbooktableview.cpp | 4 | ||||
-rw-r--r-- | korganizer/komonthview.cpp | 19 | ||||
-rw-r--r-- | korganizer/komonthview.h | 3 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 26 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 1 |
12 files changed, 129 insertions, 9 deletions
diff --git a/kaddressbook/kaddressbookview.cpp b/kaddressbook/kaddressbookview.cpp index 09859c2..86898e2 100644 --- a/kaddressbook/kaddressbookview.cpp +++ b/kaddressbook/kaddressbookview.cpp | |||
@@ -1,186 +1,188 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KAddressBook. | 2 | This file is part of KAddressBook. |
3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> | 3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #ifndef KAB_EMBEDDED | 24 | #ifndef KAB_EMBEDDED |
25 | #include <qapplication.h> | 25 | #include <qapplication.h> |
26 | 26 | ||
27 | #include <kabc/distributionlistdialog.h> | 27 | #include <kabc/distributionlistdialog.h> |
28 | #include <kconfig.h> | 28 | #include <kconfig.h> |
29 | #include <klocale.h> | 29 | #include <klocale.h> |
30 | 30 | ||
31 | #include "viewmanager.h" | 31 | #include "viewmanager.h" |
32 | 32 | ||
33 | #endif //KAB_EMBEDDED | 33 | #endif //KAB_EMBEDDED |
34 | #include <qlayout.h> | 34 | #include <qlayout.h> |
35 | 35 | ||
36 | #include <kabc/distributionlistdialog.h> | 36 | #include <kabc/distributionlistdialog.h> |
37 | #include <kabc/addressbook.h> | 37 | #include <kabc/addressbook.h> |
38 | #include <kdebug.h> | 38 | #include <kdebug.h> |
39 | 39 | ||
40 | #include "kaddressbookview.h" | 40 | #include "kaddressbookview.h" |
41 | 41 | ||
42 | KAddressBookView::KAddressBookView( KABC::AddressBook *ab, QWidget *parent, | 42 | KAddressBookView::KAddressBookView( KABC::AddressBook *ab, QWidget *parent, |
43 | const char *name ) | 43 | const char *name ) |
44 | : QWidget( parent, name ), mAddressBook( ab ), mFieldList() | 44 | : QWidget( parent, name ), mAddressBook( ab ), mFieldList() |
45 | { | 45 | { |
46 | 46 | ||
47 | initGUI(); | 47 | initGUI(); |
48 | } | 48 | } |
49 | 49 | ||
50 | KAddressBookView::~KAddressBookView() | 50 | KAddressBookView::~KAddressBookView() |
51 | { | 51 | { |
52 | 52 | ||
53 | } | 53 | } |
54 | 54 | ||
55 | QRegExp KAddressBookView::getRegExp( const QString s ) | 55 | QRegExp KAddressBookView::getRegExp( const QString s ) |
56 | { | 56 | { |
57 | QRegExp re; | 57 | QRegExp re; |
58 | 58 | ||
59 | if ( s.length() == 3 && s.mid(1,1) == "-" ) { | 59 | if ( s.length() == 3 && s.mid(1,1) == "-" ) { |
60 | QString pattern = "^[" + s.lower() +"]"; | 60 | QString pattern = "^[" + s.lower() +"]"; |
61 | re.setCaseSensitive(false); | 61 | re.setCaseSensitive(false); |
62 | re.setPattern( pattern ); | 62 | re.setPattern( pattern ); |
63 | } else { | 63 | } else { |
64 | QString pattern = s.lower()+"*"; | 64 | QString pattern = s.lower()+"*"; |
65 | re.setWildcard(true); // most people understand these better. | 65 | re.setWildcard(true); // most people understand these better. |
66 | re.setCaseSensitive(false); | 66 | re.setCaseSensitive(false); |
67 | re.setPattern( pattern ); | 67 | re.setPattern( pattern ); |
68 | } | 68 | } |
69 | return re; | 69 | return re; |
70 | } | 70 | } |
71 | 71 | ||
72 | void KAddressBookView::readConfig( KConfig *config ) | 72 | void KAddressBookView::readConfig( KConfig *config ) |
73 | { | 73 | { |
74 | mFieldList = KABC::Field::restoreFields( config, "KABCFields" ); | 74 | mFieldList = KABC::Field::restoreFields( config, "KABCFields" ); |
75 | 75 | ||
76 | if ( mFieldList.isEmpty() ) | 76 | if ( mFieldList.isEmpty() ) |
77 | mFieldList = KABC::Field::defaultFields(); | 77 | mFieldList = KABC::Field::defaultFields(); |
78 | 78 | ||
79 | mDefaultFilterType = (DefaultFilterType)config->readNumEntry( "DefaultFilterType", 1 ); | 79 | mDefaultFilterType = (DefaultFilterType)config->readNumEntry( "DefaultFilterType", 1 ); |
80 | mDefaultFilterName = config->readEntry( "DefaultFilterName", QString::null ); | 80 | mDefaultFilterName = config->readEntry( "DefaultFilterName", QString::null ); |
81 | } | 81 | } |
82 | 82 | ||
83 | void KAddressBookView::writeConfig( KConfig* ) | 83 | void KAddressBookView::writeConfig( KConfig* ) |
84 | { | 84 | { |
85 | // Most of writing the config is handled by the ConfigureViewDialog | 85 | // Most of writing the config is handled by the ConfigureViewDialog |
86 | } | 86 | } |
87 | 87 | ||
88 | QString KAddressBookView::selectedEmails() | 88 | QString KAddressBookView::selectedEmails() |
89 | { | 89 | { |
90 | bool first = true; | 90 | bool first = true; |
91 | QString emailAddrs; | 91 | QString emailAddrs; |
92 | QStringList uidList = selectedUids(); | 92 | QStringList uidList = selectedUids(); |
93 | KABC::Addressee addr; | 93 | KABC::Addressee addr; |
94 | QString email; | 94 | QString email; |
95 | 95 | ||
96 | QStringList::Iterator it; | 96 | QStringList::Iterator it; |
97 | for ( it = uidList.begin(); it != uidList.end(); ++it ) { | 97 | for ( it = uidList.begin(); it != uidList.end(); ++it ) { |
98 | addr = mAddressBook->findByUid( *it ); | 98 | addr = mAddressBook->findByUid( *it ); |
99 | 99 | ||
100 | if ( !addr.isEmpty() ) { | 100 | if ( !addr.isEmpty() ) { |
101 | QString m = QString::null; | 101 | QString m = QString::null; |
102 | 102 | ||
103 | if ( addr.emails().count() > 1 ) | 103 | if ( addr.emails().count() > 1 ) |
104 | m = KABC::EmailSelector::getEmail( addr.emails(), addr.preferredEmail(), this ); | 104 | m = KABC::EmailSelector::getEmail( addr.emails(), addr.preferredEmail(), this ); |
105 | 105 | ||
106 | email = addr.fullEmail( m ); | 106 | email = addr.fullEmail( m ); |
107 | 107 | ||
108 | if ( !first ) | 108 | if ( !first ) |
109 | emailAddrs += ", "; | 109 | emailAddrs += ", "; |
110 | else | 110 | else |
111 | first = false; | 111 | first = false; |
112 | 112 | ||
113 | emailAddrs += email; | 113 | emailAddrs += email; |
114 | } | 114 | } |
115 | } | 115 | } |
116 | 116 | ||
117 | return emailAddrs; | 117 | return emailAddrs; |
118 | } | 118 | } |
119 | 119 | ||
120 | KABC::Addressee::List KAddressBookView::addressees() | 120 | KABC::Addressee::List KAddressBookView::addressees() |
121 | { | 121 | { |
122 | KABC::Addressee::List addresseeList; | 122 | KABC::Addressee::List addresseeList; |
123 | 123 | ||
124 | KABC::AddressBook::Iterator it; | 124 | KABC::AddressBook::Iterator it; |
125 | for (it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { | 125 | for (it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { |
126 | if ( mFilter.filterAddressee( *it ) ) | 126 | if ( mFilter.filterAddressee( *it ) ) |
127 | addresseeList.append( *it ); | 127 | addresseeList.append( *it ); |
128 | } | 128 | } |
129 | 129 | ||
130 | return addresseeList; | 130 | return addresseeList; |
131 | } | 131 | } |
132 | 132 | ||
133 | void KAddressBookView::initGUI() | 133 | void KAddressBookView::initGUI() |
134 | { | 134 | { |
135 | // Create the layout | 135 | // Create the layout |
136 | QVBoxLayout *layout = new QVBoxLayout( this ); | 136 | QVBoxLayout *layout = new QVBoxLayout( this ); |
137 | 137 | ||
138 | // Add the view widget | 138 | // Add the view widget |
139 | mViewWidget = new QWidget( this ); | 139 | mViewWidget = new QWidget( this ); |
140 | layout->addWidget( mViewWidget ); | 140 | layout->addWidget( mViewWidget ); |
141 | } | 141 | } |
142 | 142 | ||
143 | KABC::Field::List KAddressBookView::fields() const | 143 | KABC::Field::List KAddressBookView::fields() const |
144 | { | 144 | { |
145 | return mFieldList; | 145 | return mFieldList; |
146 | } | 146 | } |
147 | KABC::Field::List KAddressBookView::allFields() const | 147 | KABC::Field::List KAddressBookView::allFields() const |
148 | { | 148 | { |
149 | return KABC::Field::allFields(); | 149 | return KABC::Field::allFields(); |
150 | } | 150 | } |
151 | 151 | ||
152 | void KAddressBookView::setFilter( const Filter &filter ) | 152 | void KAddressBookView::setFilter( const Filter &filter ) |
153 | { | 153 | { |
154 | mFilter = filter; | 154 | mFilter = filter; |
155 | } | 155 | } |
156 | 156 | ||
157 | KAddressBookView::DefaultFilterType KAddressBookView::defaultFilterType() const | 157 | KAddressBookView::DefaultFilterType KAddressBookView::defaultFilterType() const |
158 | { | 158 | { |
159 | return mDefaultFilterType; | 159 | return mDefaultFilterType; |
160 | } | 160 | } |
161 | 161 | ||
162 | const QString &KAddressBookView::defaultFilterName() const | 162 | const QString &KAddressBookView::defaultFilterName() const |
163 | { | 163 | { |
164 | return mDefaultFilterName; | 164 | return mDefaultFilterName; |
165 | } | 165 | } |
166 | 166 | ||
167 | KABC::AddressBook *KAddressBookView::addressBook() const | 167 | KABC::AddressBook *KAddressBookView::addressBook() const |
168 | { | 168 | { |
169 | return mAddressBook; | 169 | return mAddressBook; |
170 | } | 170 | } |
171 | 171 | ||
172 | QWidget *KAddressBookView::viewWidget() | 172 | QWidget *KAddressBookView::viewWidget() |
173 | { | 173 | { |
174 | return mViewWidget; | 174 | return mViewWidget; |
175 | } | 175 | } |
176 | 176 | ||
177 | ViewConfigureWidget *ViewFactory::configureWidget( KABC::AddressBook *ab, | 177 | ViewConfigureWidget *ViewFactory::configureWidget( KABC::AddressBook *ab, |
178 | QWidget *parent, | 178 | QWidget *parent, |
179 | const char *name ) | 179 | const char *name ) |
180 | { | 180 | { |
181 | return new ViewConfigureWidget( ab, parent, name ); | 181 | return new ViewConfigureWidget( ab, parent, name ); |
182 | } | 182 | } |
183 | 183 | ||
184 | |||
185 | |||
184 | #ifndef KAB_EMBEDDED | 186 | #ifndef KAB_EMBEDDED |
185 | #include "kaddressbookview.moc" | 187 | #include "kaddressbookview.moc" |
186 | #endif //KAB_EMBEDDED | 188 | #endif //KAB_EMBEDDED |
diff --git a/kaddressbook/kaddressbookview.h b/kaddressbook/kaddressbookview.h index 6bbb9c2..3a3f71a 100644 --- a/kaddressbook/kaddressbookview.h +++ b/kaddressbook/kaddressbookview.h | |||
@@ -105,208 +105,210 @@ class KAddressBookView : public QWidget | |||
105 | */ | 105 | */ |
106 | virtual void writeConfig( KConfig *config ); | 106 | virtual void writeConfig( KConfig *config ); |
107 | 107 | ||
108 | /** | 108 | /** |
109 | Returns a QString with all the selected email addresses concatenated | 109 | Returns a QString with all the selected email addresses concatenated |
110 | together with a ',' seperator. | 110 | together with a ',' seperator. |
111 | */ | 111 | */ |
112 | virtual QString selectedEmails(); | 112 | virtual QString selectedEmails(); |
113 | 113 | ||
114 | /** | 114 | /** |
115 | Return the type of the view: Icon, Table, etc. Please make sure that | 115 | Return the type of the view: Icon, Table, etc. Please make sure that |
116 | this is the same value that ViewWrapper::type() will return for your | 116 | this is the same value that ViewWrapper::type() will return for your |
117 | view. | 117 | view. |
118 | */ | 118 | */ |
119 | virtual QString type() const = 0; | 119 | virtual QString type() const = 0; |
120 | 120 | ||
121 | /** | 121 | /** |
122 | Returns a list of the fields that should be displayed. The list | 122 | Returns a list of the fields that should be displayed. The list |
123 | is composed of the fields proper names (ie: Home Address), so | 123 | is composed of the fields proper names (ie: Home Address), so |
124 | the view may need to translate them in order to get the | 124 | the view may need to translate them in order to get the |
125 | value from the addressee. | 125 | value from the addressee. |
126 | 126 | ||
127 | This list is generated from the config file, so it is advisable to call | 127 | This list is generated from the config file, so it is advisable to call |
128 | this method whenever a readConfig() is called in order to get the newest | 128 | this method whenever a readConfig() is called in order to get the newest |
129 | list of fields. | 129 | list of fields. |
130 | */ | 130 | */ |
131 | KABC::Field::List fields() const; | 131 | KABC::Field::List fields() const; |
132 | 132 | ||
133 | KABC::Field::List allFields() const; | 133 | KABC::Field::List allFields() const; |
134 | 134 | ||
135 | /** | 135 | /** |
136 | Sets the active filter. This filter will be used for filtering | 136 | Sets the active filter. This filter will be used for filtering |
137 | the list of addressees to display. The view will <b>not</b> | 137 | the list of addressees to display. The view will <b>not</b> |
138 | automatically refresh itself, so in most cases you will want to call | 138 | automatically refresh itself, so in most cases you will want to call |
139 | KAddressBookView::refresh() after this method. | 139 | KAddressBookView::refresh() after this method. |
140 | */ | 140 | */ |
141 | void setFilter( const Filter& ); | 141 | void setFilter( const Filter& ); |
142 | 142 | ||
143 | /** | 143 | /** |
144 | @return The default filter type selection. If the selection | 144 | @return The default filter type selection. If the selection |
145 | is SpecificFilter, the name of the filter can be retrieved with | 145 | is SpecificFilter, the name of the filter can be retrieved with |
146 | defaultFilterName() | 146 | defaultFilterName() |
147 | */ | 147 | */ |
148 | DefaultFilterType defaultFilterType() const; | 148 | DefaultFilterType defaultFilterType() const; |
149 | 149 | ||
150 | /** | 150 | /** |
151 | @return The name of the default filter. This string is | 151 | @return The name of the default filter. This string is |
152 | only valid if defaultFilterType() is returning SpecificFilter. | 152 | only valid if defaultFilterType() is returning SpecificFilter. |
153 | */ | 153 | */ |
154 | const QString &defaultFilterName() const; | 154 | const QString &defaultFilterName() const; |
155 | 155 | ||
156 | /** | 156 | /** |
157 | @return The address book. | 157 | @return The address book. |
158 | */ | 158 | */ |
159 | KABC::AddressBook *addressBook() const; | 159 | KABC::AddressBook *addressBook() const; |
160 | void printMyView() { emit printView() ;} | 160 | void printMyView() { emit printView() ;} |
161 | 161 | ||
162 | public slots: | 162 | public slots: |
163 | /** | 163 | /** |
164 | Must be overloaded in subclasses to refresh the view. | 164 | Must be overloaded in subclasses to refresh the view. |
165 | Refreshing includes updating the view to ensure that only items | 165 | Refreshing includes updating the view to ensure that only items |
166 | in the document are visible. If <i>uid</i> is valid, only the | 166 | in the document are visible. If <i>uid</i> is valid, only the |
167 | addressee with uid needs to be refreshed. This is an optimization | 167 | addressee with uid needs to be refreshed. This is an optimization |
168 | only. | 168 | only. |
169 | */ | 169 | */ |
170 | virtual void refresh( QString uid = QString::null ) = 0; | 170 | virtual void refresh( QString uid = QString::null ) = 0; |
171 | 171 | ||
172 | /** | 172 | /** |
173 | This method must be overloaded in subclasses. Select (highlight) | 173 | This method must be overloaded in subclasses. Select (highlight) |
174 | the addressee matching <i>uid</i>. If uid | 174 | the addressee matching <i>uid</i>. If uid |
175 | is equal to QString::null, then all addressees should be selected. | 175 | is equal to QString::null, then all addressees should be selected. |
176 | */ | 176 | */ |
177 | #ifndef KAB_EMBEDDED | 177 | #ifndef KAB_EMBEDDED |
178 | //MOC_SKIP_BEGIN | 178 | //MOC_SKIP_BEGIN |
179 | virtual void setSelected( QString uid = QString::null, bool selected = true ) = 0; | 179 | virtual void setSelected( QString uid = QString::null, bool selected = true ) = 0; |
180 | //MOC_SKIP_END | 180 | //MOC_SKIP_END |
181 | #else //KAB_EMBEDDED | 181 | #else //KAB_EMBEDDED |
182 | //US my moc can not handle the default parameters. Is this a problem ??? | 182 | //US my moc can not handle the default parameters. Is this a problem ??? |
183 | virtual void setSelected( QString uid, bool selected) = 0; | 183 | virtual void setSelected( QString uid, bool selected) = 0; |
184 | #endif //KAB_EMBEDDED | 184 | #endif //KAB_EMBEDDED |
185 | 185 | ||
186 | signals: | 186 | signals: |
187 | 187 | ||
188 | void printView(); | 188 | void printView(); |
189 | /** | 189 | /** |
190 | This signal should be emitted by a subclass whenever an addressee | 190 | This signal should be emitted by a subclass whenever an addressee |
191 | is modified. | 191 | is modified. |
192 | */ | 192 | */ |
193 | void modified(); | 193 | void modified(); |
194 | 194 | ||
195 | /** | 195 | /** |
196 | This signal should be emitted by a subclass whenever an addressee | 196 | This signal should be emitted by a subclass whenever an addressee |
197 | is selected. Selected means that the addressee was given the focus. | 197 | is selected. Selected means that the addressee was given the focus. |
198 | Some widgets may call this 'highlighted'. The view is responsible for | 198 | Some widgets may call this 'highlighted'. The view is responsible for |
199 | emitting this signal multiple times if multiple items are selected, | 199 | emitting this signal multiple times if multiple items are selected, |
200 | with the last item selected being the last emit. | 200 | with the last item selected being the last emit. |
201 | 201 | ||
202 | @param uid The uid of the selected addressee. | 202 | @param uid The uid of the selected addressee. |
203 | 203 | ||
204 | @see KListView | 204 | @see KListView |
205 | */ | 205 | */ |
206 | void selected( const QString &uid ); | 206 | void selected( const QString &uid ); |
207 | void deleteRequest(); | 207 | void deleteRequest(); |
208 | /** | 208 | /** |
209 | This signal should be emitted by a subclass whenever an addressee | 209 | This signal should be emitted by a subclass whenever an addressee |
210 | is executed. This is defined by the KDE system wide config, but it | 210 | is executed. This is defined by the KDE system wide config, but it |
211 | either means single or doubleclicked. | 211 | either means single or doubleclicked. |
212 | 212 | ||
213 | @param ui The uid of the selected addressee | 213 | @param ui The uid of the selected addressee |
214 | 214 | ||
215 | @see KListView | 215 | @see KListView |
216 | */ | 216 | */ |
217 | void executed( const QString &uid ); | 217 | void executed( const QString &uid ); |
218 | 218 | ||
219 | /** | 219 | /** |
220 | This signal is emitted whenever a user attempts to start a drag | 220 | This signal is emitted whenever a user attempts to start a drag |
221 | in the view. The slot connected to this signal would usually want | 221 | in the view. The slot connected to this signal would usually want |
222 | to create a QDragObject. | 222 | to create a QDragObject. |
223 | */ | 223 | */ |
224 | void startDrag(); | 224 | void startDrag(); |
225 | 225 | ||
226 | /** | 226 | /** |
227 | This signal is emitted whenever the user drops something on the | 227 | This signal is emitted whenever the user drops something on the |
228 | view. The individual view should handle checking if the item is | 228 | view. The individual view should handle checking if the item is |
229 | droppable (ie: if it is a vcard). | 229 | droppable (ie: if it is a vcard). |
230 | */ | 230 | */ |
231 | void dropped( QDropEvent* ); | 231 | void dropped( QDropEvent* ); |
232 | 232 | ||
233 | protected: | 233 | protected: |
234 | |||
234 | /** | 235 | /** |
235 | Returns a list of the addressees that should be displayed. This method | 236 | Returns a list of the addressees that should be displayed. This method |
236 | should always be used by the subclass to get a list of addressees. This | 237 | should always be used by the subclass to get a list of addressees. This |
237 | method internally takes many factors into account, including the current | 238 | method internally takes many factors into account, including the current |
238 | filter. | 239 | filter. |
239 | */ | 240 | */ |
240 | KABC::Addressee::List addressees(); | 241 | KABC::Addressee::List addressees(); |
241 | 242 | ||
242 | /** | 243 | /** |
243 | This method returns the widget that should be used as the parent for | 244 | This method returns the widget that should be used as the parent for |
244 | all view components. By using this widget as the parent and not | 245 | all view components. By using this widget as the parent and not |
245 | 'this', the view subclass has the option of placing other widgets | 246 | 'this', the view subclass has the option of placing other widgets |
246 | around the view (ie: search fields, etc). Do not delete this widget! | 247 | around the view (ie: search fields, etc). Do not delete this widget! |
247 | */ | 248 | */ |
248 | QWidget *viewWidget(); | 249 | QWidget *viewWidget(); |
249 | QRegExp getRegExp( const QString ); | 250 | QRegExp getRegExp( const QString ); |
250 | 251 | ||
251 | private: | 252 | private: |
252 | void initGUI(); | 253 | void initGUI(); |
253 | 254 | ||
254 | DefaultFilterType mDefaultFilterType; | 255 | DefaultFilterType mDefaultFilterType; |
255 | Filter mFilter; | 256 | Filter mFilter; |
256 | QString mDefaultFilterName; | 257 | QString mDefaultFilterName; |
257 | KABC::AddressBook *mAddressBook; | 258 | KABC::AddressBook *mAddressBook; |
258 | KABC::Field::List mFieldList; | 259 | KABC::Field::List mFieldList; |
259 | 260 | ||
260 | QWidget *mViewWidget; | 261 | QWidget *mViewWidget; |
261 | }; | 262 | }; |
262 | 263 | ||
263 | #ifndef KAB_EMBEDDED | 264 | #ifndef KAB_EMBEDDED |
264 | //MOC_SKIP_BEGIN | 265 | //MOC_SKIP_BEGIN |
265 | class ViewFactory : public KLibFactory | 266 | class ViewFactory : public KLibFactory |
266 | //MOC_SKIP_END | 267 | //MOC_SKIP_END |
267 | #else //KAB_EMBEDDED | 268 | #else //KAB_EMBEDDED |
268 | class ViewFactory | 269 | class ViewFactory |
269 | #endif //KAB_EMBEDDED | 270 | #endif //KAB_EMBEDDED |
270 | { | 271 | { |
271 | 272 | ||
272 | public: | 273 | public: |
273 | virtual KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, | 274 | virtual KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, |
274 | const char *name = 0 ) = 0; | 275 | const char *name = 0 ) = 0; |
275 | 276 | ||
276 | /** | 277 | /** |
277 | @return The type of the view. This is normally a small one word | 278 | @return The type of the view. This is normally a small one word |
278 | string (ie: Table, Icon, Tree, etc). | 279 | string (ie: Table, Icon, Tree, etc). |
279 | */ | 280 | */ |
280 | virtual QString type() const = 0; | 281 | virtual QString type() const = 0; |
281 | 282 | ||
282 | /** | 283 | /** |
283 | @return The description of the view. This should be a 3 to | 284 | @return The description of the view. This should be a 3 to |
284 | 4 line string (don't actually use return characters in the string) | 285 | 4 line string (don't actually use return characters in the string) |
285 | describing the features offered by the view. | 286 | describing the features offered by the view. |
286 | */ | 287 | */ |
287 | virtual QString description() const = 0; | 288 | virtual QString description() const = 0; |
288 | 289 | ||
289 | /** | 290 | /** |
290 | Creates a config dialog for the view type. The default | 291 | Creates a config dialog for the view type. The default |
291 | implementation will return a ViewConfigDialog. This default | 292 | implementation will return a ViewConfigDialog. This default |
292 | dialog will allow the user to set the visible fields only. If | 293 | dialog will allow the user to set the visible fields only. If |
293 | you need more config options (as most views will), this method | 294 | you need more config options (as most views will), this method |
294 | can be overloaded to return your sublcass of ViewConfigDialog. | 295 | can be overloaded to return your sublcass of ViewConfigDialog. |
295 | If this method is over loaded the base classes method should | 296 | If this method is over loaded the base classes method should |
296 | <B>not</B> be called. | 297 | <B>not</B> be called. |
297 | */ | 298 | */ |
298 | virtual ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, | 299 | virtual ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, |
299 | QWidget *parent, | 300 | QWidget *parent, |
300 | const char *name = 0 ); | 301 | const char *name = 0 ); |
301 | 302 | ||
302 | protected: | 303 | protected: |
303 | virtual QObject* createObject( QObject*, const char*, const char*, | 304 | virtual QObject* createObject( QObject*, const char*, const char*, |
304 | const QStringList & ) | 305 | const QStringList & ) |
305 | { | 306 | { |
306 | return 0; | 307 | return 0; |
307 | } | 308 | } |
309 | |||
308 | 310 | ||
309 | }; | 311 | }; |
310 | 312 | ||
311 | 313 | ||
312 | #endif | 314 | #endif |
diff --git a/kaddressbook/views/cardview.cpp b/kaddressbook/views/cardview.cpp index 03df444..84d3116 100644 --- a/kaddressbook/views/cardview.cpp +++ b/kaddressbook/views/cardview.cpp | |||
@@ -1,163 +1,164 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KAddressBook. | 2 | This file is part of KAddressBook. |
3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> | 3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | //BEGIN Includes | 24 | //BEGIN Includes |
25 | #include "cardview.h" | 25 | #include "cardview.h" |
26 | 26 | ||
27 | #include <limits.h> | 27 | #include <limits.h> |
28 | 28 | ||
29 | #include <qpainter.h> | 29 | #include <qpainter.h> |
30 | #include <qtimer.h> | 30 | #include <qtimer.h> |
31 | #include <qdatetime.h> | 31 | #include <qdatetime.h> |
32 | #include <qlabel.h> | 32 | #include <qlabel.h> |
33 | #include <qstyle.h> | 33 | #include <qstyle.h> |
34 | #include <qcursor.h> | 34 | #include <qcursor.h> |
35 | #include <qtooltip.h> | 35 | #include <qtooltip.h> |
36 | #include <qapplication.h> | ||
36 | 37 | ||
37 | #include "kabprefs.h" | 38 | #include "kabprefs.h" |
38 | #include <kdebug.h> | 39 | #include <kdebug.h> |
39 | #include <kglobalsettings.h> | 40 | #include <kglobalsettings.h> |
40 | //END includes | 41 | //END includes |
41 | 42 | ||
42 | #define MIN_ITEM_WIDTH 80 | 43 | #define MIN_ITEM_WIDTH 80 |
43 | 44 | ||
44 | //BEGIN Helpers | 45 | //BEGIN Helpers |
45 | ////////////////////////////////////// | 46 | ////////////////////////////////////// |
46 | // CardViewTip | 47 | // CardViewTip |
47 | class CardViewTip : public QLabel { | 48 | class CardViewTip : public QLabel { |
48 | public: | 49 | public: |
49 | CardViewTip(QWidget *parent=0, const char *name=0) : QLabel( parent, name ) | 50 | CardViewTip(QWidget *parent=0, const char *name=0) : QLabel( parent, name ) |
50 | { | 51 | { |
51 | setPalette( QToolTip::palette() ); | 52 | setPalette( QToolTip::palette() ); |
52 | setFrameStyle( Panel|Plain ); | 53 | setFrameStyle( Panel|Plain ); |
53 | setMidLineWidth(0); | 54 | setMidLineWidth(0); |
54 | setIndent(1); | 55 | setIndent(1); |
55 | } | 56 | } |
56 | 57 | ||
57 | ~CardViewTip() {}; | 58 | ~CardViewTip() {}; |
58 | protected: | 59 | protected: |
59 | void leaveEvent( QEvent * ) | 60 | void leaveEvent( QEvent * ) |
60 | { | 61 | { |
61 | hide(); | 62 | hide(); |
62 | } | 63 | } |
63 | }; | 64 | }; |
64 | 65 | ||
65 | ////////////////////////////////////// | 66 | ////////////////////////////////////// |
66 | // CardViewItemList | 67 | // CardViewItemList |
67 | 68 | ||
68 | 69 | ||
69 | // | 70 | // |
70 | // Warning: make sure you use findRef() instead of find() to find an | 71 | // Warning: make sure you use findRef() instead of find() to find an |
71 | // item! Only the pointer value is unique in the list. | 72 | // item! Only the pointer value is unique in the list. |
72 | // | 73 | // |
73 | class CardViewItemList : public QPtrList<CardViewItem> | 74 | class CardViewItemList : public QPtrList<CardViewItem> |
74 | { | 75 | { |
75 | protected: | 76 | protected: |
76 | virtual int compareItems(QPtrCollection::Item item1, | 77 | virtual int compareItems(QPtrCollection::Item item1, |
77 | QPtrCollection::Item item2) | 78 | QPtrCollection::Item item2) |
78 | { | 79 | { |
79 | CardViewItem *cItem1 = (CardViewItem*)item1; | 80 | CardViewItem *cItem1 = (CardViewItem*)item1; |
80 | CardViewItem *cItem2 = (CardViewItem*)item2; | 81 | CardViewItem *cItem2 = (CardViewItem*)item2; |
81 | 82 | ||
82 | if ( cItem1 == cItem2 ) | 83 | if ( cItem1 == cItem2 ) |
83 | return 0; | 84 | return 0; |
84 | 85 | ||
85 | if ((cItem1 == 0) || (cItem2 == 0)) | 86 | if ((cItem1 == 0) || (cItem2 == 0)) |
86 | return cItem1 ? -1 : 1; | 87 | return cItem1 ? -1 : 1; |
87 | 88 | ||
88 | if (cItem1->caption() < cItem2->caption()) | 89 | if (cItem1->caption() < cItem2->caption()) |
89 | return -1; | 90 | return -1; |
90 | 91 | ||
91 | else if (cItem1->caption() > cItem2->caption()) | 92 | else if (cItem1->caption() > cItem2->caption()) |
92 | return 1; | 93 | return 1; |
93 | 94 | ||
94 | return 0; | 95 | return 0; |
95 | } | 96 | } |
96 | 97 | ||
97 | private: | 98 | private: |
98 | /*int find( const CardViewItem * ) | 99 | /*int find( const CardViewItem * ) |
99 | { | 100 | { |
100 | qDebug("DON'T USE CardViewItemList::find( item )! Use findRef( item )!"); | 101 | qDebug("DON'T USE CardViewItemList::find( item )! Use findRef( item )!"); |
101 | }*/ | 102 | }*/ |
102 | }; | 103 | }; |
103 | 104 | ||
104 | ////////////////////////////////////// | 105 | ////////////////////////////////////// |
105 | // CardViewSeparator | 106 | // CardViewSeparator |
106 | class CardViewSeparator | 107 | class CardViewSeparator |
107 | { | 108 | { |
108 | friend class CardView; | 109 | friend class CardView; |
109 | 110 | ||
110 | public: | 111 | public: |
111 | CardViewSeparator(CardView *view) | 112 | CardViewSeparator(CardView *view) |
112 | : mView(view) | 113 | : mView(view) |
113 | { | 114 | { |
114 | mRect = QRect(0, 0, view->separatorWidth(), 0); | 115 | mRect = QRect(0, 0, view->separatorWidth(), 0); |
115 | } | 116 | } |
116 | 117 | ||
117 | ~CardViewSeparator() {} | 118 | ~CardViewSeparator() {} |
118 | 119 | ||
119 | void paintSeparator(QPainter *p, QColorGroup &cg) | 120 | void paintSeparator(QPainter *p, QColorGroup &cg) |
120 | { | 121 | { |
121 | p->fillRect(0, 0, mRect.width(), mRect.height(), | 122 | p->fillRect(0, 0, mRect.width(), mRect.height(), |
122 | cg.brush(QColorGroup::Button)); | 123 | cg.brush(QColorGroup::Button)); |
123 | } | 124 | } |
124 | 125 | ||
125 | void repaintSeparator() | 126 | void repaintSeparator() |
126 | { | 127 | { |
127 | mView->repaintContents(mRect); | 128 | mView->repaintContents(mRect); |
128 | } | 129 | } |
129 | 130 | ||
130 | private: | 131 | private: |
131 | CardView *mView; | 132 | CardView *mView; |
132 | QRect mRect; | 133 | QRect mRect; |
133 | }; | 134 | }; |
134 | 135 | ||
135 | //END Helpers | 136 | //END Helpers |
136 | 137 | ||
137 | //BEGIN Private Data | 138 | //BEGIN Private Data |
138 | 139 | ||
139 | class CardViewPrivate | 140 | class CardViewPrivate |
140 | { | 141 | { |
141 | public: | 142 | public: |
142 | CardViewPrivate() | 143 | CardViewPrivate() |
143 | : mSelectionMode( CardView::Multi ), | 144 | : mSelectionMode( CardView::Multi ), |
144 | mDrawCardBorder( true ), | 145 | mDrawCardBorder( true ), |
145 | mDrawFieldLabels( true ), | 146 | mDrawFieldLabels( true ), |
146 | mDrawSeparators( true), | 147 | mDrawSeparators( true), |
147 | mSepWidth( 2 ), | 148 | mSepWidth( 2 ), |
148 | mShowEmptyFields( false ), | 149 | mShowEmptyFields( false ), |
149 | mLayoutDirty( true ), | 150 | mLayoutDirty( true ), |
150 | mLastClickOnItem( false ), | 151 | mLastClickOnItem( false ), |
151 | mItemMargin( 0 ), | 152 | mItemMargin( 0 ), |
152 | mItemSpacing( 10 ), | 153 | mItemSpacing( 10 ), |
153 | mItemWidth( 200 ), | 154 | mItemWidth( 200 ), |
154 | mMaxFieldLines( INT_MAX ), | 155 | mMaxFieldLines( INT_MAX ), |
155 | mCurrentItem( 0L ), | 156 | mCurrentItem( 0L ), |
156 | mLastClickPos( QPoint(0, 0) ), | 157 | mLastClickPos( QPoint(0, 0) ), |
157 | mResizeAnchor(0), | 158 | mResizeAnchor(0), |
158 | mRubberBandAnchor( 0 ), | 159 | mRubberBandAnchor( 0 ), |
159 | mCompText( QString::null ) | 160 | mCompText( QString::null ) |
160 | {}; | 161 | {}; |
161 | 162 | ||
162 | CardViewItemList mItemList; | 163 | CardViewItemList mItemList; |
163 | QPtrList<CardViewSeparator> mSeparatorList; | 164 | QPtrList<CardViewSeparator> mSeparatorList; |
@@ -514,256 +515,258 @@ void CardViewItem::repaintCard() | |||
514 | mView->repaintItem(this); | 515 | mView->repaintItem(this); |
515 | } | 516 | } |
516 | 517 | ||
517 | void CardViewItem::setCaption(const QString &caption) | 518 | void CardViewItem::setCaption(const QString &caption) |
518 | { | 519 | { |
519 | d->mCaption = caption; | 520 | d->mCaption = caption; |
520 | repaintCard(); | 521 | repaintCard(); |
521 | } | 522 | } |
522 | 523 | ||
523 | QString CardViewItem::fieldValue(const QString &label) | 524 | QString CardViewItem::fieldValue(const QString &label) |
524 | { | 525 | { |
525 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); | 526 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); |
526 | for (iter.toFirst(); iter.current(); ++iter) | 527 | for (iter.toFirst(); iter.current(); ++iter) |
527 | if ((*iter)->first == label) | 528 | if ((*iter)->first == label) |
528 | return (*iter)->second; | 529 | return (*iter)->second; |
529 | 530 | ||
530 | return QString(); | 531 | return QString(); |
531 | } | 532 | } |
532 | 533 | ||
533 | 534 | ||
534 | void CardViewItem::showFullString( const QPoint &itempos, CardViewTip *tip ) | 535 | void CardViewItem::showFullString( const QPoint &itempos, CardViewTip *tip ) |
535 | { | 536 | { |
536 | bool trimmed( false ); | 537 | bool trimmed( false ); |
537 | QString s; | 538 | QString s; |
538 | int mrg = mView->itemMargin(); | 539 | int mrg = mView->itemMargin(); |
539 | int y = mView->d->mBFm->height() + 6 + mrg; | 540 | int y = mView->d->mBFm->height() + 6 + mrg; |
540 | int w = mView->itemWidth() - (2*mrg); | 541 | int w = mView->itemWidth() - (2*mrg); |
541 | int lw; | 542 | int lw; |
542 | bool drawLabels = mView->drawFieldLabels(); | 543 | bool drawLabels = mView->drawFieldLabels(); |
543 | bool isLabel = drawLabels && itempos.x() < w/2 ? true : false; | 544 | bool isLabel = drawLabels && itempos.x() < w/2 ? true : false; |
544 | 545 | ||
545 | if ( itempos.y() < y ) | 546 | if ( itempos.y() < y ) |
546 | { | 547 | { |
547 | if ( itempos.y() < 8 + mrg || itempos.y() > y - 4 ) | 548 | if ( itempos.y() < 8 + mrg || itempos.y() > y - 4 ) |
548 | return; | 549 | return; |
549 | // this is the caption | 550 | // this is the caption |
550 | s = caption(); | 551 | s = caption(); |
551 | trimmed = mView->d->mBFm->width( s ) > w - 4; | 552 | trimmed = mView->d->mBFm->width( s ) > w - 4; |
552 | y = 2 + mrg; | 553 | y = 2 + mrg; |
553 | lw = 0; | 554 | lw = 0; |
554 | isLabel=true; | 555 | isLabel=true; |
555 | } else { | 556 | } else { |
556 | // find the field | 557 | // find the field |
557 | Field *f = fieldAt( itempos ); | 558 | Field *f = fieldAt( itempos ); |
558 | if ( !f || ( !mView->showEmptyFields() && f->second.isEmpty() ) ) | 559 | if ( !f || ( !mView->showEmptyFields() && f->second.isEmpty() ) ) |
559 | return; | 560 | return; |
560 | 561 | ||
561 | // y position: | 562 | // y position: |
562 | // header font height + 4px hader margin + 2px leading + item margin | 563 | // header font height + 4px hader margin + 2px leading + item margin |
563 | // + actual field index * (fontheight + 2px leading) | 564 | // + actual field index * (fontheight + 2px leading) |
564 | int maxLines = mView->maxFieldLines(); | 565 | int maxLines = mView->maxFieldLines(); |
565 | bool se = mView->showEmptyFields(); | 566 | bool se = mView->showEmptyFields(); |
566 | int fh = mView->d->mFm->height(); | 567 | int fh = mView->d->mFm->height(); |
567 | // { | 568 | // { |
568 | Field *_f; | 569 | Field *_f; |
569 | for (_f = d->mFieldList.first(); _f != f; _f = d->mFieldList.next()) | 570 | for (_f = d->mFieldList.first(); _f != f; _f = d->mFieldList.next()) |
570 | if ( se || ! _f->second.isEmpty() ) | 571 | if ( se || ! _f->second.isEmpty() ) |
571 | y += ( QMIN(_f->second.contains('\n')+1, maxLines) * fh ) + 2; | 572 | y += ( QMIN(_f->second.contains('\n')+1, maxLines) * fh ) + 2; |
572 | // } | 573 | // } |
573 | if ( isLabel && itempos.y() > y + fh ) | 574 | if ( isLabel && itempos.y() > y + fh ) |
574 | return; | 575 | return; |
575 | // label or data? | 576 | // label or data? |
576 | s = isLabel ? f->first : f->second; | 577 | s = isLabel ? f->first : f->second; |
577 | // trimmed? | 578 | // trimmed? |
578 | int colonWidth = mView->d->mFm->width(":"); | 579 | int colonWidth = mView->d->mFm->width(":"); |
579 | lw = drawLabels ? // label width | 580 | lw = drawLabels ? // label width |
580 | QMIN( w/2 - 4 - mrg, d->maxLabelWidth + colonWidth + 4 ) : | 581 | QMIN( w/2 - 4 - mrg, d->maxLabelWidth + colonWidth + 4 ) : |
581 | 0; | 582 | 0; |
582 | int mw = isLabel ? lw - colonWidth : w - lw - (mrg*2); // max width for string | 583 | int mw = isLabel ? lw - colonWidth : w - lw - (mrg*2); // max width for string |
583 | if ( isLabel ) | 584 | if ( isLabel ) |
584 | { | 585 | { |
585 | trimmed = mView->d->mFm->width( s ) > mw - colonWidth; | 586 | trimmed = mView->d->mFm->width( s ) > mw - colonWidth; |
586 | } else { | 587 | } else { |
587 | QRect r( mView->d->mFm->boundingRect( 0, 0, INT_MAX, INT_MAX, Qt::AlignTop|Qt::AlignLeft, s ) ); | 588 | QRect r( mView->d->mFm->boundingRect( 0, 0, INT_MAX, INT_MAX, Qt::AlignTop|Qt::AlignLeft, s ) ); |
588 | trimmed = r.width() > mw || r.height()/fh > QMIN(s.contains('\n') + 1, maxLines); | 589 | trimmed = r.width() > mw || r.height()/fh > QMIN(s.contains('\n') + 1, maxLines); |
589 | } | 590 | } |
590 | } | 591 | } |
591 | if ( trimmed ) | 592 | if ( trimmed ) |
592 | { | 593 | { |
593 | tip->setFont( (isLabel && !lw) ? mView->headerFont() : mView->font() ); // if condition is true, a header | 594 | tip->setFont( (isLabel && !lw) ? mView->headerFont() : mView->font() ); // if condition is true, a header |
594 | tip->setText( s ); | 595 | tip->setText( s ); |
595 | tip->adjustSize(); | 596 | tip->adjustSize(); |
596 | // find a proper position | 597 | // find a proper position |
597 | int lx; | 598 | int lx; |
598 | lx = isLabel || !drawLabels ? mrg : lw + mrg + 2 /*-1*/; | 599 | lx = isLabel || !drawLabels ? mrg : lw + mrg + 2 /*-1*/; |
599 | QPoint pnt(mView->contentsToViewport( QPoint(d->x, d->y) )); | 600 | QPoint pnt(mView->contentsToViewport( QPoint(d->x, d->y) )); |
600 | pnt += QPoint(lx, y); | 601 | pnt += QPoint(lx, y); |
601 | if ( pnt.x() < 0 ) | 602 | if ( pnt.x() < 0 ) |
602 | pnt.setX( 0 ); | 603 | pnt.setX( 0 ); |
603 | if ( pnt.x() + tip->width() > mView->visibleWidth() ) | 604 | if ( pnt.x() + tip->width() > mView->visibleWidth() ) |
604 | pnt.setX( mView->visibleWidth() - tip->width() ); | 605 | pnt.setX( mView->visibleWidth() - tip->width() ); |
605 | if ( pnt.y() + tip->height() > mView->visibleHeight() ) | 606 | if ( pnt.y() + tip->height() > mView->visibleHeight() ) |
606 | pnt.setY( QMAX( 0, mView->visibleHeight() - tip->height() ) ); | 607 | pnt.setY( QMAX( 0, mView->visibleHeight() - tip->height() ) ); |
607 | // show | 608 | // show |
608 | tip->move( pnt ); | 609 | tip->move( pnt ); |
609 | tip->show(); | 610 | tip->show(); |
610 | } | 611 | } |
611 | } | 612 | } |
612 | 613 | ||
613 | CardViewItem::Field *CardViewItem::fieldAt( const QPoint & itempos ) const | 614 | CardViewItem::Field *CardViewItem::fieldAt( const QPoint & itempos ) const |
614 | { | 615 | { |
615 | int ypos = mView->d->mBFm->height() + 7 + mView->d->mItemMargin; | 616 | int ypos = mView->d->mBFm->height() + 7 + mView->d->mItemMargin; |
616 | int iy = itempos.y(); | 617 | int iy = itempos.y(); |
617 | // skip below caption | 618 | // skip below caption |
618 | if ( iy <= ypos ) | 619 | if ( iy <= ypos ) |
619 | return 0; | 620 | return 0; |
620 | // try find a field | 621 | // try find a field |
621 | bool showEmpty = mView->showEmptyFields(); | 622 | bool showEmpty = mView->showEmptyFields(); |
622 | int fh = mView->d->mFm->height(); | 623 | int fh = mView->d->mFm->height(); |
623 | int maxLines = mView->maxFieldLines(); | 624 | int maxLines = mView->maxFieldLines(); |
624 | Field *f; | 625 | Field *f; |
625 | for ( f = d->mFieldList.first(); f; f = d->mFieldList.next() ) | 626 | for ( f = d->mFieldList.first(); f; f = d->mFieldList.next() ) |
626 | { | 627 | { |
627 | if ( showEmpty || !f->second.isEmpty() ) | 628 | if ( showEmpty || !f->second.isEmpty() ) |
628 | ypos += ( QMIN( f->second.contains('\n')+1, maxLines ) *fh)+2; | 629 | ypos += ( QMIN( f->second.contains('\n')+1, maxLines ) *fh)+2; |
629 | if ( iy <= ypos ) | 630 | if ( iy <= ypos ) |
630 | break; | 631 | break; |
631 | } | 632 | } |
632 | return f ? f : 0; | 633 | return f ? f : 0; |
633 | } | 634 | } |
634 | //END CardViewItem | 635 | //END CardViewItem |
635 | 636 | ||
636 | //BEGIN CardView | 637 | //BEGIN CardView |
637 | 638 | ||
638 | CardView::CardView(QWidget *parent, const char *name) | 639 | CardView::CardView(QWidget *parent, const char *name) |
639 | : QScrollView(parent, name), | 640 | : QScrollView(parent, name), |
640 | d(new CardViewPrivate()) | 641 | d(new CardViewPrivate()) |
641 | { | 642 | { |
643 | mFlagKeyPressed = false; | ||
644 | mFlagBlockKeyPressed = false; | ||
642 | d->mItemList.setAutoDelete(true); | 645 | d->mItemList.setAutoDelete(true); |
643 | d->mSeparatorList.setAutoDelete(true); | 646 | d->mSeparatorList.setAutoDelete(true); |
644 | 647 | ||
645 | QFont f = font(); | 648 | QFont f = font(); |
646 | d->mFm = new QFontMetrics(f); | 649 | d->mFm = new QFontMetrics(f); |
647 | f.setBold(true); | 650 | f.setBold(true); |
648 | d->mHeaderFont = f; | 651 | d->mHeaderFont = f; |
649 | d->mBFm = new QFontMetrics(f); | 652 | d->mBFm = new QFontMetrics(f); |
650 | d->mTip = ( new CardViewTip( viewport() ) ), | 653 | d->mTip = ( new CardViewTip( viewport() ) ), |
651 | d->mTip->hide(); | 654 | d->mTip->hide(); |
652 | d->mTimer = ( new QTimer(this, "mouseTimer") ), | 655 | d->mTimer = ( new QTimer(this, "mouseTimer") ), |
653 | 656 | ||
654 | viewport()->setMouseTracking( true ); | 657 | viewport()->setMouseTracking( true ); |
655 | viewport()->setFocusProxy(this); | 658 | viewport()->setFocusProxy(this); |
656 | viewport()->setFocusPolicy(WheelFocus); | 659 | viewport()->setFocusPolicy(WheelFocus); |
657 | viewport()->setBackgroundMode(PaletteBase); | 660 | viewport()->setBackgroundMode(PaletteBase); |
658 | 661 | ||
659 | connect( d->mTimer, SIGNAL(timeout()), this, SLOT(tryShowFullText()) ); | 662 | connect( d->mTimer, SIGNAL(timeout()), this, SLOT(tryShowFullText()) ); |
660 | 663 | ||
661 | //US setBackgroundMode(PaletteBackground, PaletteBase); | 664 | //US setBackgroundMode(PaletteBackground, PaletteBase); |
662 | setBackgroundMode(PaletteBackground); | 665 | setBackgroundMode(PaletteBackground); |
663 | 666 | ||
664 | // no reason for a vertical scrollbar | 667 | // no reason for a vertical scrollbar |
665 | setVScrollBarMode(AlwaysOff); | 668 | setVScrollBarMode(AlwaysOff); |
666 | } | 669 | } |
667 | 670 | ||
668 | CardView::~CardView() | 671 | CardView::~CardView() |
669 | { | 672 | { |
670 | delete d->mFm; | 673 | delete d->mFm; |
671 | delete d->mBFm; | 674 | delete d->mBFm; |
672 | delete d; | 675 | delete d; |
673 | d = 0; | 676 | d = 0; |
674 | } | 677 | } |
675 | 678 | ||
676 | void CardView::insertItem(CardViewItem *item) | 679 | void CardView::insertItem(CardViewItem *item) |
677 | { | 680 | { |
678 | d->mItemList.inSort(item); | 681 | d->mItemList.inSort(item); |
679 | setLayoutDirty(true); | 682 | setLayoutDirty(true); |
680 | } | 683 | } |
681 | 684 | ||
682 | void CardView::takeItem(CardViewItem *item) | 685 | void CardView::takeItem(CardViewItem *item) |
683 | { | 686 | { |
684 | if ( d->mCurrentItem == item ) | 687 | if ( d->mCurrentItem == item ) |
685 | d->mCurrentItem = item->nextItem(); | 688 | d->mCurrentItem = item->nextItem(); |
686 | d->mItemList.take(d->mItemList.findRef(item)); | 689 | d->mItemList.take(d->mItemList.findRef(item)); |
687 | 690 | ||
688 | setLayoutDirty(true); | 691 | setLayoutDirty(true); |
689 | } | 692 | } |
690 | 693 | ||
691 | void CardView::clear() | 694 | void CardView::clear() |
692 | { | 695 | { |
693 | d->mItemList.clear(); | 696 | d->mItemList.clear(); |
694 | 697 | ||
695 | setLayoutDirty(true); | 698 | setLayoutDirty(true); |
696 | } | 699 | } |
697 | 700 | ||
698 | CardViewItem *CardView::currentItem() | 701 | CardViewItem *CardView::currentItem() |
699 | { | 702 | { |
700 | if ( ! d->mCurrentItem && d->mItemList.count() ) | 703 | if ( ! d->mCurrentItem && d->mItemList.count() ) |
701 | d->mCurrentItem = d->mItemList.first(); | 704 | d->mCurrentItem = d->mItemList.first(); |
702 | return d->mCurrentItem; | 705 | return d->mCurrentItem; |
703 | } | 706 | } |
704 | 707 | ||
705 | void CardView::setCurrentItem( CardViewItem *item ) | 708 | void CardView::setCurrentItem( CardViewItem *item ) |
706 | { | 709 | { |
707 | if ( !item ) | 710 | if ( !item ) |
708 | return; | 711 | return; |
709 | else if ( item->cardView() != this ) | 712 | else if ( item->cardView() != this ) |
710 | { | 713 | { |
711 | kdDebug(5720)<<"CardView::setCurrentItem: Item ("<<item<<") not owned! Backing out.."<<endl; | 714 | kdDebug(5720)<<"CardView::setCurrentItem: Item ("<<item<<") not owned! Backing out.."<<endl; |
712 | return; | 715 | return; |
713 | } | 716 | } |
714 | else if ( item == currentItem() ) | 717 | else if ( item == currentItem() ) |
715 | { | 718 | { |
716 | return; | 719 | return; |
717 | } | 720 | } |
718 | 721 | ||
719 | if ( d->mSelectionMode == Single ) | 722 | if ( d->mSelectionMode == Single ) |
720 | { | 723 | { |
721 | setSelected( item, true ); | 724 | setSelected( item, true ); |
722 | } | 725 | } |
723 | else | 726 | else |
724 | { | 727 | { |
725 | CardViewItem *it = d->mCurrentItem; | 728 | CardViewItem *it = d->mCurrentItem; |
726 | d->mCurrentItem = item; | 729 | d->mCurrentItem = item; |
727 | if ( it ) | 730 | if ( it ) |
728 | it->repaintCard(); | 731 | it->repaintCard(); |
729 | item->repaintCard(); | 732 | item->repaintCard(); |
730 | } | 733 | } |
731 | if ( ! d->mOnSeparator ) | 734 | if ( ! d->mOnSeparator ) |
732 | ensureItemVisible( item ); | 735 | ensureItemVisible( item ); |
733 | emit currentChanged( item ); | 736 | emit currentChanged( item ); |
734 | } | 737 | } |
735 | 738 | ||
736 | CardViewItem *CardView::itemAt(const QPoint &viewPos) | 739 | CardViewItem *CardView::itemAt(const QPoint &viewPos) |
737 | { | 740 | { |
738 | CardViewItem *item = 0; | 741 | CardViewItem *item = 0; |
739 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 742 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
740 | bool found = false; | 743 | bool found = false; |
741 | for (iter.toFirst(); iter.current() && !found; ++iter) | 744 | for (iter.toFirst(); iter.current() && !found; ++iter) |
742 | { | 745 | { |
743 | item = *iter; | 746 | item = *iter; |
744 | //if (item->d->mRect.contains(viewPos)) | 747 | //if (item->d->mRect.contains(viewPos)) |
745 | if (QRect(item->d->x, item->d->y, d->mItemWidth, item->height()).contains(viewPos)) | 748 | if (QRect(item->d->x, item->d->y, d->mItemWidth, item->height()).contains(viewPos)) |
746 | found = true; | 749 | found = true; |
747 | } | 750 | } |
748 | 751 | ||
749 | if (found) | 752 | if (found) |
750 | return item; | 753 | return item; |
751 | 754 | ||
752 | return 0; | 755 | return 0; |
753 | } | 756 | } |
754 | 757 | ||
755 | QRect CardView::itemRect(const CardViewItem *item) | 758 | QRect CardView::itemRect(const CardViewItem *item) |
756 | { | 759 | { |
757 | //return item->d->mRect; | 760 | //return item->d->mRect; |
758 | return QRect(item->d->x, item->d->y, d->mItemWidth, item->height()); | 761 | return QRect(item->d->x, item->d->y, d->mItemWidth, item->height()); |
759 | } | 762 | } |
760 | 763 | ||
761 | void CardView::ensureItemVisible(const CardViewItem *item) | 764 | void CardView::ensureItemVisible(const CardViewItem *item) |
762 | { | 765 | { |
763 | ensureVisible(item->d->x , item->d->y, d->mItemSpacing, 0); | 766 | ensureVisible(item->d->x , item->d->y, d->mItemSpacing, 0); |
764 | ensureVisible(item->d->x + d->mItemWidth, item->d->y, d->mItemSpacing, 0); | 767 | ensureVisible(item->d->x + d->mItemWidth, item->d->y, d->mItemSpacing, 0); |
765 | } | 768 | } |
766 | 769 | ||
767 | void CardView::repaintItem(const CardViewItem *item) | 770 | void CardView::repaintItem(const CardViewItem *item) |
768 | { | 771 | { |
769 | //repaintContents(item->d->mRect); | 772 | //repaintContents(item->d->mRect); |
@@ -1226,257 +1229,265 @@ void CardView::contentsMouseReleaseEvent(QMouseEvent *e) | |||
1226 | // hide rubber bands | 1229 | // hide rubber bands |
1227 | int newiw = d->mItemWidth - ((d->mResizeAnchor - d->mRubberBandAnchor)/d->span); | 1230 | int newiw = d->mItemWidth - ((d->mResizeAnchor - d->mRubberBandAnchor)/d->span); |
1228 | drawRubberBands( 0 ); | 1231 | drawRubberBands( 0 ); |
1229 | // we should move to reflect the new position if we are scrolled. | 1232 | // we should move to reflect the new position if we are scrolled. |
1230 | if ( contentsX() ) | 1233 | if ( contentsX() ) |
1231 | { | 1234 | { |
1232 | int newX = QMAX( 0, ( d->pressed * ( newiw + d->colspace + d->mSepWidth ) ) - e->x() ); | 1235 | int newX = QMAX( 0, ( d->pressed * ( newiw + d->colspace + d->mSepWidth ) ) - e->x() ); |
1233 | setContentsPos( newX, contentsY() ); | 1236 | setContentsPos( newX, contentsY() ); |
1234 | } | 1237 | } |
1235 | // set new item width | 1238 | // set new item width |
1236 | setItemWidth( newiw ); | 1239 | setItemWidth( newiw ); |
1237 | // reset anchors | 1240 | // reset anchors |
1238 | d->mResizeAnchor = 0; | 1241 | d->mResizeAnchor = 0; |
1239 | d->mRubberBandAnchor = 0; | 1242 | d->mRubberBandAnchor = 0; |
1240 | return; | 1243 | return; |
1241 | } | 1244 | } |
1242 | 1245 | ||
1243 | // If there are accel keys, we will not emit signals | 1246 | // If there are accel keys, we will not emit signals |
1244 | if ((e->state() & Qt::ShiftButton) || (e->state() & Qt::ControlButton)) | 1247 | if ((e->state() & Qt::ShiftButton) || (e->state() & Qt::ControlButton)) |
1245 | return; | 1248 | return; |
1246 | 1249 | ||
1247 | // Get the item at this position | 1250 | // Get the item at this position |
1248 | CardViewItem *item = itemAt(e->pos()); | 1251 | CardViewItem *item = itemAt(e->pos()); |
1249 | 1252 | ||
1250 | if (item && KABPrefs::instance()->mHonorSingleClick) | 1253 | if (item && KABPrefs::instance()->mHonorSingleClick) |
1251 | { | 1254 | { |
1252 | emit executed(item); | 1255 | emit executed(item); |
1253 | } | 1256 | } |
1254 | } | 1257 | } |
1255 | 1258 | ||
1256 | void CardView::contentsMouseDoubleClickEvent(QMouseEvent *e) | 1259 | void CardView::contentsMouseDoubleClickEvent(QMouseEvent *e) |
1257 | { | 1260 | { |
1258 | QScrollView::contentsMouseDoubleClickEvent(e); | 1261 | QScrollView::contentsMouseDoubleClickEvent(e); |
1259 | 1262 | ||
1260 | CardViewItem *item = itemAt(e->pos()); | 1263 | CardViewItem *item = itemAt(e->pos()); |
1261 | 1264 | ||
1262 | if (item) | 1265 | if (item) |
1263 | { | 1266 | { |
1264 | d->mCurrentItem = item; | 1267 | d->mCurrentItem = item; |
1265 | } | 1268 | } |
1266 | 1269 | ||
1267 | if (item && !KABPrefs::instance()->mHonorSingleClick) | 1270 | if (item && !KABPrefs::instance()->mHonorSingleClick) |
1268 | { | 1271 | { |
1269 | emit executed(item); | 1272 | emit executed(item); |
1270 | } else | 1273 | } else |
1271 | emit doubleClicked(item); | 1274 | emit doubleClicked(item); |
1272 | } | 1275 | } |
1273 | 1276 | ||
1274 | void CardView::contentsMouseMoveEvent( QMouseEvent *e ) | 1277 | void CardView::contentsMouseMoveEvent( QMouseEvent *e ) |
1275 | { | 1278 | { |
1276 | // resizing | 1279 | // resizing |
1277 | if ( d->mResizeAnchor ) | 1280 | if ( d->mResizeAnchor ) |
1278 | { | 1281 | { |
1279 | int x = e->x(); | 1282 | int x = e->x(); |
1280 | if ( x != d->mRubberBandAnchor ) | 1283 | if ( x != d->mRubberBandAnchor ) |
1281 | drawRubberBands( x ); | 1284 | drawRubberBands( x ); |
1282 | return; | 1285 | return; |
1283 | } | 1286 | } |
1284 | 1287 | ||
1285 | if (d->mLastClickOnItem && (e->state() & Qt::LeftButton) && | 1288 | if (d->mLastClickOnItem && (e->state() & Qt::LeftButton) && |
1286 | ((e->pos() - d->mLastClickPos).manhattanLength() > 4)) { | 1289 | ((e->pos() - d->mLastClickPos).manhattanLength() > 4)) { |
1287 | 1290 | ||
1288 | startDrag(); | 1291 | startDrag(); |
1289 | return; | 1292 | return; |
1290 | } | 1293 | } |
1291 | 1294 | ||
1292 | d->mTimer->start( 500 ); | 1295 | d->mTimer->start( 500 ); |
1293 | 1296 | ||
1294 | // see if we are over a separator | 1297 | // see if we are over a separator |
1295 | // only if we actually have them painted? | 1298 | // only if we actually have them painted? |
1296 | if ( d->mDrawSeparators ) | 1299 | if ( d->mDrawSeparators ) |
1297 | { | 1300 | { |
1298 | int colcontentw = d->mItemWidth + (2*d->mItemSpacing); | 1301 | int colcontentw = d->mItemWidth + (2*d->mItemSpacing); |
1299 | int colw = colcontentw + d->mSepWidth; | 1302 | int colw = colcontentw + d->mSepWidth; |
1300 | int m = e->x()%colw; | 1303 | int m = e->x()%colw; |
1301 | if ( m >= colcontentw && m > 0 ) | 1304 | if ( m >= colcontentw && m > 0 ) |
1302 | { | 1305 | { |
1303 | setCursor( SplitVCursor ); // Why does this fail sometimes? | 1306 | setCursor( SplitVCursor ); // Why does this fail sometimes? |
1304 | d->mOnSeparator = true; | 1307 | d->mOnSeparator = true; |
1305 | } | 1308 | } |
1306 | else | 1309 | else |
1307 | { | 1310 | { |
1308 | setCursor( ArrowCursor ); | 1311 | setCursor( ArrowCursor ); |
1309 | d->mOnSeparator = false; | 1312 | d->mOnSeparator = false; |
1310 | } | 1313 | } |
1311 | } | 1314 | } |
1312 | } | 1315 | } |
1313 | 1316 | ||
1314 | void CardView::enterEvent( QEvent * ) | 1317 | void CardView::enterEvent( QEvent * ) |
1315 | { | 1318 | { |
1316 | d->mTimer->start( 500 ); | 1319 | d->mTimer->start( 500 ); |
1317 | } | 1320 | } |
1318 | 1321 | ||
1319 | void CardView::leaveEvent( QEvent * ) | 1322 | void CardView::leaveEvent( QEvent * ) |
1320 | { | 1323 | { |
1321 | d->mTimer->stop(); | 1324 | d->mTimer->stop(); |
1322 | if (d->mOnSeparator) | 1325 | if (d->mOnSeparator) |
1323 | { | 1326 | { |
1324 | d->mOnSeparator = false; | 1327 | d->mOnSeparator = false; |
1325 | setCursor( ArrowCursor ); | 1328 | setCursor( ArrowCursor ); |
1326 | } | 1329 | } |
1327 | } | 1330 | } |
1328 | 1331 | ||
1329 | void CardView::focusInEvent( QFocusEvent * ) | 1332 | void CardView::focusInEvent( QFocusEvent * ) |
1330 | { | 1333 | { |
1331 | if (!d->mCurrentItem && d->mItemList.count() ) | 1334 | if (!d->mCurrentItem && d->mItemList.count() ) |
1332 | { | 1335 | { |
1333 | setCurrentItem( d->mItemList.first() ); | 1336 | setCurrentItem( d->mItemList.first() ); |
1334 | } | 1337 | } |
1335 | else if ( d->mCurrentItem ) | 1338 | else if ( d->mCurrentItem ) |
1336 | { | 1339 | { |
1337 | d->mCurrentItem->repaintCard(); | 1340 | d->mCurrentItem->repaintCard(); |
1338 | } | 1341 | } |
1339 | } | 1342 | } |
1340 | 1343 | ||
1341 | void CardView::focusOutEvent( QFocusEvent * ) | 1344 | void CardView::focusOutEvent( QFocusEvent * ) |
1342 | { | 1345 | { |
1343 | if (d->mCurrentItem) | 1346 | if (d->mCurrentItem) |
1344 | d->mCurrentItem->repaintCard(); | 1347 | d->mCurrentItem->repaintCard(); |
1345 | } | 1348 | } |
1346 | 1349 | ||
1347 | void CardView::keyPressEvent( QKeyEvent *e ) | 1350 | void CardView::keyPressEvent( QKeyEvent *e ) |
1348 | { | 1351 | { |
1349 | if ( ! ( childCount() && d->mCurrentItem ) ) | 1352 | if ( ! ( childCount() && d->mCurrentItem ) ) |
1350 | { | 1353 | { |
1351 | e->ignore(); | 1354 | e->ignore(); |
1352 | return; | 1355 | return; |
1353 | } | 1356 | } |
1354 | 1357 | if ( mFlagBlockKeyPressed ) | |
1358 | return; | ||
1359 | qApp->processEvents(); | ||
1360 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | ||
1361 | e->accept(); | ||
1362 | return; | ||
1363 | } | ||
1364 | if (! e->isAutoRepeat() ) | ||
1365 | mFlagKeyPressed = true; | ||
1355 | uint pos = d->mItemList.findRef( d->mCurrentItem ); | 1366 | uint pos = d->mItemList.findRef( d->mCurrentItem ); |
1356 | CardViewItem *aItem = 0L; // item that gets the focus | 1367 | CardViewItem *aItem = 0L; // item that gets the focus |
1357 | CardViewItem *old = d->mCurrentItem; | 1368 | CardViewItem *old = d->mCurrentItem; |
1358 | 1369 | ||
1359 | switch ( e->key() ) | 1370 | switch ( e->key() ) |
1360 | { | 1371 | { |
1361 | case Key_Up: | 1372 | case Key_Up: |
1362 | if ( pos > 0 ) | 1373 | if ( pos > 0 ) |
1363 | { | 1374 | { |
1364 | aItem = d->mItemList.at( pos - 1 ); | 1375 | aItem = d->mItemList.at( pos - 1 ); |
1365 | setCurrentItem( aItem ); | 1376 | setCurrentItem( aItem ); |
1366 | } | 1377 | } |
1367 | break; | 1378 | break; |
1368 | case Key_Down: | 1379 | case Key_Down: |
1369 | if ( pos < d->mItemList.count() - 1 ) | 1380 | if ( pos < d->mItemList.count() - 1 ) |
1370 | { | 1381 | { |
1371 | aItem = d->mItemList.at( pos + 1 ); | 1382 | aItem = d->mItemList.at( pos + 1 ); |
1372 | setCurrentItem( aItem ); | 1383 | setCurrentItem( aItem ); |
1373 | } | 1384 | } |
1374 | break; | 1385 | break; |
1375 | case Key_Left: | 1386 | case Key_Left: |
1376 | { | 1387 | { |
1377 | // look for an item in the previous/next column, starting from | 1388 | // look for an item in the previous/next column, starting from |
1378 | // the vertical middle of the current item. | 1389 | // the vertical middle of the current item. |
1379 | // FIXME use nice calculatd measures!!! | 1390 | // FIXME use nice calculatd measures!!! |
1380 | QPoint aPoint( d->mCurrentItem->d->x, d->mCurrentItem->d->y ); | 1391 | QPoint aPoint( d->mCurrentItem->d->x, d->mCurrentItem->d->y ); |
1381 | aPoint -= QPoint( 30,-(d->mCurrentItem->height()/2) ); | 1392 | aPoint -= QPoint( 30,-(d->mCurrentItem->height()/2) ); |
1382 | aItem = itemAt( aPoint ); | 1393 | aItem = itemAt( aPoint ); |
1383 | // maybe we hit some space below an item | 1394 | // maybe we hit some space below an item |
1384 | while ( !aItem && aPoint.y() > 27 ) | 1395 | while ( !aItem && aPoint.y() > 27 ) |
1385 | { | 1396 | { |
1386 | aPoint -= QPoint( 0, 16 ); | 1397 | aPoint -= QPoint( 0, 16 ); |
1387 | aItem = itemAt( aPoint ); | 1398 | aItem = itemAt( aPoint ); |
1388 | } | 1399 | } |
1389 | if ( aItem ) | 1400 | if ( aItem ) |
1390 | setCurrentItem( aItem ); | 1401 | setCurrentItem( aItem ); |
1391 | } | 1402 | } |
1392 | break; | 1403 | break; |
1393 | case Key_Right: | 1404 | case Key_Right: |
1394 | { | 1405 | { |
1395 | // FIXME use nice calculated measures!!! | 1406 | // FIXME use nice calculated measures!!! |
1396 | QPoint aPoint( d->mCurrentItem->d->x + d->mItemWidth, d->mCurrentItem->d->y ); | 1407 | QPoint aPoint( d->mCurrentItem->d->x + d->mItemWidth, d->mCurrentItem->d->y ); |
1397 | aPoint += QPoint( 30,(d->mCurrentItem->height()/2) ); | 1408 | aPoint += QPoint( 30,(d->mCurrentItem->height()/2) ); |
1398 | aItem = itemAt( aPoint ); | 1409 | aItem = itemAt( aPoint ); |
1399 | while ( !aItem && aPoint.y() > 27 ) | 1410 | while ( !aItem && aPoint.y() > 27 ) |
1400 | { | 1411 | { |
1401 | aPoint -= QPoint( 0, 16 ); | 1412 | aPoint -= QPoint( 0, 16 ); |
1402 | aItem = itemAt( aPoint ); | 1413 | aItem = itemAt( aPoint ); |
1403 | } | 1414 | } |
1404 | if ( aItem ) | 1415 | if ( aItem ) |
1405 | setCurrentItem( aItem ); | 1416 | setCurrentItem( aItem ); |
1406 | } | 1417 | } |
1407 | break; | 1418 | break; |
1408 | case Key_Home: | 1419 | case Key_Home: |
1409 | aItem = d->mItemList.first(); | 1420 | aItem = d->mItemList.first(); |
1410 | setCurrentItem( aItem ); | 1421 | setCurrentItem( aItem ); |
1411 | break; | 1422 | break; |
1412 | case Key_End: | 1423 | case Key_End: |
1413 | aItem = d->mItemList.last(); | 1424 | aItem = d->mItemList.last(); |
1414 | setCurrentItem( aItem ); | 1425 | setCurrentItem( aItem ); |
1415 | break; | 1426 | break; |
1416 | case Key_Prior: // PageUp | 1427 | case Key_Prior: // PageUp |
1417 | { | 1428 | { |
1418 | // QListView: "Make the item above the top visible and current" | 1429 | // QListView: "Make the item above the top visible and current" |
1419 | // TODO if contentsY(), pick the top item of the leftmost visible column | 1430 | // TODO if contentsY(), pick the top item of the leftmost visible column |
1420 | if ( contentsX() <= 0 ) | 1431 | if ( contentsX() <= 0 ) |
1421 | return; | 1432 | return; |
1422 | int cw = columnWidth(); | 1433 | int cw = columnWidth(); |
1423 | int theCol = ( QMAX( 0, ( contentsX()/cw) * cw ) ) + d->mItemSpacing; | 1434 | int theCol = ( QMAX( 0, ( contentsX()/cw) * cw ) ) + d->mItemSpacing; |
1424 | aItem = itemAt( QPoint( theCol + 1, d->mItemSpacing + 1 ) ); | 1435 | aItem = itemAt( QPoint( theCol + 1, d->mItemSpacing + 1 ) ); |
1425 | if ( aItem ) | 1436 | if ( aItem ) |
1426 | setCurrentItem( aItem ); | 1437 | setCurrentItem( aItem ); |
1427 | } | 1438 | } |
1428 | break; | 1439 | break; |
1429 | case Key_Next: // PageDown | 1440 | case Key_Next: // PageDown |
1430 | { | 1441 | { |
1431 | // QListView: "Make the item below the bottom visible and current" | 1442 | // QListView: "Make the item below the bottom visible and current" |
1432 | // find the first not fully visible column. | 1443 | // find the first not fully visible column. |
1433 | // TODO: consider if a partly visible (or even hidden) item at the | 1444 | // TODO: consider if a partly visible (or even hidden) item at the |
1434 | // bottom of the rightmost column exists | 1445 | // bottom of the rightmost column exists |
1435 | int cw = columnWidth(); | 1446 | int cw = columnWidth(); |
1436 | int theCol = ( (( contentsX() + visibleWidth() )/cw) * cw ) + d->mItemSpacing + 1; | 1447 | int theCol = ( (( contentsX() + visibleWidth() )/cw) * cw ) + d->mItemSpacing + 1; |
1437 | // if separators are on, we may need to we may be one column further right if only the spacing/sep is hidden | 1448 | // if separators are on, we may need to we may be one column further right if only the spacing/sep is hidden |
1438 | if ( d->mDrawSeparators && cw - (( contentsX() + visibleWidth() )%cw) <= int( d->mItemSpacing + d->mSepWidth ) ) | 1449 | if ( d->mDrawSeparators && cw - (( contentsX() + visibleWidth() )%cw) <= int( d->mItemSpacing + d->mSepWidth ) ) |
1439 | theCol += cw; | 1450 | theCol += cw; |
1440 | 1451 | ||
1441 | // make sure this is not too far right | 1452 | // make sure this is not too far right |
1442 | while ( theCol > contentsWidth() ) | 1453 | while ( theCol > contentsWidth() ) |
1443 | theCol -= columnWidth(); | 1454 | theCol -= columnWidth(); |
1444 | 1455 | ||
1445 | aItem = itemAt( QPoint( theCol, d->mItemSpacing + 1 ) ); | 1456 | aItem = itemAt( QPoint( theCol, d->mItemSpacing + 1 ) ); |
1446 | 1457 | ||
1447 | if ( aItem ) | 1458 | if ( aItem ) |
1448 | setCurrentItem( aItem ); | 1459 | setCurrentItem( aItem ); |
1449 | } | 1460 | } |
1450 | break; | 1461 | break; |
1451 | case Key_Space: | 1462 | case Key_Space: |
1452 | setSelected( d->mCurrentItem, !d->mCurrentItem->isSelected() ); | 1463 | setSelected( d->mCurrentItem, !d->mCurrentItem->isSelected() ); |
1453 | emit selectionChanged(); | 1464 | emit selectionChanged(); |
1454 | break; | 1465 | break; |
1455 | case Key_Return: | 1466 | case Key_Return: |
1456 | case Key_Enter: | 1467 | case Key_Enter: |
1457 | { | 1468 | { |
1458 | emit returnPressed( d->mCurrentItem ); | 1469 | emit returnPressed( d->mCurrentItem ); |
1459 | emit executed( d->mCurrentItem ); | 1470 | emit executed( d->mCurrentItem ); |
1460 | } | 1471 | } |
1461 | break; | 1472 | break; |
1462 | default: | 1473 | default: |
1463 | if ( (e->state() & ControlButton) && e->key() == Key_A ) | 1474 | if ( (e->state() & ControlButton) && e->key() == Key_A ) |
1464 | { | 1475 | { |
1465 | // select all | 1476 | // select all |
1466 | selectAll( true ); | 1477 | selectAll( true ); |
1467 | break; | 1478 | break; |
1468 | } | 1479 | } |
1469 | // if we have a string, do autosearch | 1480 | // if we have a string, do autosearch |
1470 | else if ( ! e->text().isEmpty() && e->text()[0].isPrint() ) | 1481 | else if ( ! e->text().isEmpty() && e->text()[0].isPrint() ) |
1471 | { | 1482 | { |
1472 | 1483 | ||
1473 | } | 1484 | } |
1474 | break; | 1485 | break; |
1475 | } | 1486 | } |
1476 | // handle selection | 1487 | // handle selection |
1477 | if ( aItem ) | 1488 | if ( aItem ) |
1478 | { | 1489 | { |
1479 | if ( d->mSelectionMode == CardView::Extended ) | 1490 | if ( d->mSelectionMode == CardView::Extended ) |
1480 | { | 1491 | { |
1481 | if ( (e->state() & ShiftButton) ) | 1492 | if ( (e->state() & ShiftButton) ) |
1482 | { | 1493 | { |
@@ -1590,133 +1601,151 @@ void CardView::setShowEmptyFields(bool show) | |||
1590 | { | 1601 | { |
1591 | d->mShowEmptyFields = show; | 1602 | d->mShowEmptyFields = show; |
1592 | setLayoutDirty(true); | 1603 | setLayoutDirty(true); |
1593 | } | 1604 | } |
1594 | } | 1605 | } |
1595 | 1606 | ||
1596 | bool CardView::showEmptyFields() const | 1607 | bool CardView::showEmptyFields() const |
1597 | { | 1608 | { |
1598 | return d->mShowEmptyFields; | 1609 | return d->mShowEmptyFields; |
1599 | } | 1610 | } |
1600 | 1611 | ||
1601 | void CardView::startDrag() | 1612 | void CardView::startDrag() |
1602 | { | 1613 | { |
1603 | // The default implementation is a no-op. It must be | 1614 | // The default implementation is a no-op. It must be |
1604 | // reimplemented in a subclass to be useful | 1615 | // reimplemented in a subclass to be useful |
1605 | } | 1616 | } |
1606 | void CardView::tryShowFullText() | 1617 | void CardView::tryShowFullText() |
1607 | { | 1618 | { |
1608 | d->mTimer->stop(); | 1619 | d->mTimer->stop(); |
1609 | // if we have an item | 1620 | // if we have an item |
1610 | QPoint cpos = viewportToContents( viewport()->mapFromGlobal( QCursor::pos() ) ); | 1621 | QPoint cpos = viewportToContents( viewport()->mapFromGlobal( QCursor::pos() ) ); |
1611 | CardViewItem *item = itemAt( cpos ); | 1622 | CardViewItem *item = itemAt( cpos ); |
1612 | if ( item ) | 1623 | if ( item ) |
1613 | { | 1624 | { |
1614 | // query it for a value to display | 1625 | // query it for a value to display |
1615 | //QString s = item ? item->caption() : "(no item)"; | 1626 | //QString s = item ? item->caption() : "(no item)"; |
1616 | //kdDebug()<<"MOUSE REST: "<<s<<endl; | 1627 | //kdDebug()<<"MOUSE REST: "<<s<<endl; |
1617 | QPoint ipos = cpos - itemRect( item ).topLeft(); | 1628 | QPoint ipos = cpos - itemRect( item ).topLeft(); |
1618 | item->showFullString( ipos, d->mTip ); | 1629 | item->showFullString( ipos, d->mTip ); |
1619 | } | 1630 | } |
1620 | } | 1631 | } |
1621 | 1632 | ||
1622 | void CardView::drawRubberBands( int pos ) | 1633 | void CardView::drawRubberBands( int pos ) |
1623 | { | 1634 | { |
1624 | if ( pos && ((pos-d->firstX)/d->span) - d->colspace - d->mSepWidth < MIN_ITEM_WIDTH ) return; | 1635 | if ( pos && ((pos-d->firstX)/d->span) - d->colspace - d->mSepWidth < MIN_ITEM_WIDTH ) return; |
1625 | 1636 | ||
1626 | int tmpcw = (d->mRubberBandAnchor-d->firstX)/d->span; | 1637 | int tmpcw = (d->mRubberBandAnchor-d->firstX)/d->span; |
1627 | int x = d->firstX + tmpcw - d->mSepWidth - contentsX(); | 1638 | int x = d->firstX + tmpcw - d->mSepWidth - contentsX(); |
1628 | int h = visibleHeight(); | 1639 | int h = visibleHeight(); |
1629 | 1640 | ||
1630 | QPainter p( viewport() ); | 1641 | QPainter p( viewport() ); |
1631 | p.setRasterOp( XorROP ); | 1642 | p.setRasterOp( XorROP ); |
1632 | p.setPen( gray ); | 1643 | p.setPen( gray ); |
1633 | p.setBrush( gray ); | 1644 | p.setBrush( gray ); |
1634 | uint n = d->first; | 1645 | uint n = d->first; |
1635 | // erase | 1646 | // erase |
1636 | if ( d->mRubberBandAnchor ) | 1647 | if ( d->mRubberBandAnchor ) |
1637 | do { | 1648 | do { |
1638 | p.drawRect( x, 0, 2, h ); | 1649 | p.drawRect( x, 0, 2, h ); |
1639 | x += tmpcw; | 1650 | x += tmpcw; |
1640 | n++; | 1651 | n++; |
1641 | } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); | 1652 | } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); |
1642 | // paint new | 1653 | // paint new |
1643 | if ( ! pos ) return; | 1654 | if ( ! pos ) return; |
1644 | tmpcw = (pos - d->firstX)/d->span; | 1655 | tmpcw = (pos - d->firstX)/d->span; |
1645 | n = d->first; | 1656 | n = d->first; |
1646 | x = d->firstX + tmpcw - d->mSepWidth - contentsX(); | 1657 | x = d->firstX + tmpcw - d->mSepWidth - contentsX(); |
1647 | do { | 1658 | do { |
1648 | p.drawRect( x, 0, 2, h ); | 1659 | p.drawRect( x, 0, 2, h ); |
1649 | x += tmpcw; | 1660 | x += tmpcw; |
1650 | n++; | 1661 | n++; |
1651 | } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); | 1662 | } while ( x < visibleWidth() && n < d->mSeparatorList.count() ); |
1652 | d->mRubberBandAnchor = pos; | 1663 | d->mRubberBandAnchor = pos; |
1653 | } | 1664 | } |
1654 | 1665 | ||
1655 | 1666 | ||
1656 | int CardView::itemWidth() const | 1667 | int CardView::itemWidth() const |
1657 | { | 1668 | { |
1658 | return d->mItemWidth; | 1669 | return d->mItemWidth; |
1659 | } | 1670 | } |
1660 | 1671 | ||
1661 | void CardView::setItemWidth( int w ) | 1672 | void CardView::setItemWidth( int w ) |
1662 | { | 1673 | { |
1663 | if ( w == d->mItemWidth ) | 1674 | if ( w == d->mItemWidth ) |
1664 | return; | 1675 | return; |
1665 | if ( w < MIN_ITEM_WIDTH ) | 1676 | if ( w < MIN_ITEM_WIDTH ) |
1666 | w = MIN_ITEM_WIDTH; | 1677 | w = MIN_ITEM_WIDTH; |
1667 | d->mItemWidth = w; | 1678 | d->mItemWidth = w; |
1668 | setLayoutDirty( true ); | 1679 | setLayoutDirty( true ); |
1669 | #ifndef KAB_EMBEDDED | 1680 | #ifndef KAB_EMBEDDED |
1670 | updateContents(); | 1681 | updateContents(); |
1671 | #else //KAB_EMBEDDED | 1682 | #else //KAB_EMBEDDED |
1672 | //US updateContents( d->contentsX(), d->contentsY(), visibleWidth(), visibleHeight() ); | 1683 | //US updateContents( d->contentsX(), d->contentsY(), visibleWidth(), visibleHeight() ); |
1673 | qDebug("CardView::setItemWidth has to be verified"); | 1684 | qDebug("CardView::setItemWidth has to be verified"); |
1674 | updateContents( contentsX(), contentsY(), visibleWidth(), visibleHeight() ); | 1685 | updateContents( contentsX(), contentsY(), visibleWidth(), visibleHeight() ); |
1675 | #endif //KAB_EMBEDDED | 1686 | #endif //KAB_EMBEDDED |
1676 | } | 1687 | } |
1677 | 1688 | ||
1678 | void CardView::setHeaderFont( const QFont &fnt ) | 1689 | void CardView::setHeaderFont( const QFont &fnt ) |
1679 | { | 1690 | { |
1680 | d->mHeaderFont = fnt; | 1691 | d->mHeaderFont = fnt; |
1681 | delete d->mBFm; | 1692 | delete d->mBFm; |
1682 | d->mBFm = new QFontMetrics( fnt ); | 1693 | d->mBFm = new QFontMetrics( fnt ); |
1683 | } | 1694 | } |
1684 | 1695 | ||
1685 | QFont CardView::headerFont() const | 1696 | QFont CardView::headerFont() const |
1686 | { | 1697 | { |
1687 | return d->mHeaderFont; | 1698 | return d->mHeaderFont; |
1688 | } | 1699 | } |
1689 | 1700 | ||
1690 | void CardView::setFont( const QFont &fnt ) | 1701 | void CardView::setFont( const QFont &fnt ) |
1691 | { | 1702 | { |
1692 | QScrollView::setFont( fnt ); | 1703 | QScrollView::setFont( fnt ); |
1693 | delete d->mFm; | 1704 | delete d->mFm; |
1694 | d->mFm = new QFontMetrics( fnt ); | 1705 | d->mFm = new QFontMetrics( fnt ); |
1695 | } | 1706 | } |
1696 | 1707 | ||
1697 | int CardView::separatorWidth() | 1708 | int CardView::separatorWidth() |
1698 | { | 1709 | { |
1699 | return d->mSepWidth; | 1710 | return d->mSepWidth; |
1700 | } | 1711 | } |
1701 | 1712 | ||
1702 | void CardView::setSeparatorWidth( int width ) | 1713 | void CardView::setSeparatorWidth( int width ) |
1703 | { | 1714 | { |
1704 | d->mSepWidth = width; | 1715 | d->mSepWidth = width; |
1705 | setLayoutDirty( true ); // hmm, actually I could just adjust the x'es... | 1716 | setLayoutDirty( true ); // hmm, actually I could just adjust the x'es... |
1706 | } | 1717 | } |
1707 | 1718 | ||
1708 | int CardView::maxFieldLines() const | 1719 | int CardView::maxFieldLines() const |
1709 | { | 1720 | { |
1710 | return d->mMaxFieldLines; | 1721 | return d->mMaxFieldLines; |
1711 | } | 1722 | } |
1712 | 1723 | ||
1713 | void CardView::setMaxFieldLines( int howmany ) | 1724 | void CardView::setMaxFieldLines( int howmany ) |
1714 | { | 1725 | { |
1715 | d->mMaxFieldLines = howmany ? howmany : INT_MAX; | 1726 | d->mMaxFieldLines = howmany ? howmany : INT_MAX; |
1716 | // FIXME update, forcing the items to recalc height!! | 1727 | // FIXME update, forcing the items to recalc height!! |
1717 | } | 1728 | } |
1729 | |||
1730 | void CardView::keyReleaseEvent ( QKeyEvent * e ) | ||
1731 | { | ||
1732 | if ( mFlagBlockKeyPressed ) | ||
1733 | return; | ||
1734 | if ( !e->isAutoRepeat() ) { | ||
1735 | mFlagBlockKeyPressed = true; | ||
1736 | qApp->processEvents(); | ||
1737 | mFlagBlockKeyPressed = false; | ||
1738 | mFlagKeyPressed = false; | ||
1739 | } | ||
1740 | QScrollView::keyReleaseEvent ( e ); | ||
1741 | } | ||
1742 | |||
1743 | |||
1744 | |||
1745 | |||
1746 | |||
1718 | //END Cardview | 1747 | //END Cardview |
1719 | 1748 | ||
1720 | #ifndef KAB_EMBEDDED | 1749 | #ifndef KAB_EMBEDDED |
1721 | #include "cardview.moc" | 1750 | #include "cardview.moc" |
1722 | #endif //KAB_EMBEDDED | 1751 | #endif //KAB_EMBEDDED |
diff --git a/kaddressbook/views/cardview.h b/kaddressbook/views/cardview.h index 37dddb6..2ea3771 100644 --- a/kaddressbook/views/cardview.h +++ b/kaddressbook/views/cardview.h | |||
@@ -280,194 +280,197 @@ class CardView : public QScrollView | |||
280 | */ | 280 | */ |
281 | bool drawCardBorder() const; | 281 | bool drawCardBorder() const; |
282 | 282 | ||
283 | /** Sets if the column separator should be drawn. The column separator | 283 | /** Sets if the column separator should be drawn. The column separator |
284 | * is a thin verticle line (1 or 2 pixels) that is used to separate the | 284 | * is a thin verticle line (1 or 2 pixels) that is used to separate the |
285 | * columns in the list view. The separator is just for esthetics and it | 285 | * columns in the list view. The separator is just for esthetics and it |
286 | * does not serve a functional purpose. | 286 | * does not serve a functional purpose. |
287 | */ | 287 | */ |
288 | void setDrawColSeparators(bool enabled); | 288 | void setDrawColSeparators(bool enabled); |
289 | 289 | ||
290 | /** @return True if column separators are drawn, false otherwise. | 290 | /** @return True if column separators are drawn, false otherwise. |
291 | */ | 291 | */ |
292 | bool drawColSeparators() const; | 292 | bool drawColSeparators() const; |
293 | 293 | ||
294 | /** Sets if the field labels should be drawn. The field labels are the | 294 | /** Sets if the field labels should be drawn. The field labels are the |
295 | * unique strings used to identify the fields. Sometimes drawing these | 295 | * unique strings used to identify the fields. Sometimes drawing these |
296 | * labels makes sense as a source of clarity for the user, othertimes they | 296 | * labels makes sense as a source of clarity for the user, othertimes they |
297 | * waste too much space and do not assist the user. | 297 | * waste too much space and do not assist the user. |
298 | */ | 298 | */ |
299 | void setDrawFieldLabels(bool enabled); | 299 | void setDrawFieldLabels(bool enabled); |
300 | 300 | ||
301 | /** @return True if the field labels are drawn, false otherwise. | 301 | /** @return True if the field labels are drawn, false otherwise. |
302 | */ | 302 | */ |
303 | bool drawFieldLabels() const; | 303 | bool drawFieldLabels() const; |
304 | 304 | ||
305 | /** Sets if fields with no value should be drawn (of cause the label only, | 305 | /** Sets if fields with no value should be drawn (of cause the label only, |
306 | * but it allows for embedded editing sometimes...) | 306 | * but it allows for embedded editing sometimes...) |
307 | */ | 307 | */ |
308 | void setShowEmptyFields(bool show); | 308 | void setShowEmptyFields(bool show); |
309 | 309 | ||
310 | /** @return Wheather empty fields should be shown | 310 | /** @return Wheather empty fields should be shown |
311 | */ | 311 | */ |
312 | bool showEmptyFields() const; | 312 | bool showEmptyFields() const; |
313 | 313 | ||
314 | /** @return the advisory internal margin in items. Setting a value above 1 means | 314 | /** @return the advisory internal margin in items. Setting a value above 1 means |
315 | * a space between the item contents and the focus recttangle drawn around | 315 | * a space between the item contents and the focus recttangle drawn around |
316 | * the current item. The default value is 0. | 316 | * the current item. The default value is 0. |
317 | * The value should be used by CardViewItem and derived classes. | 317 | * The value should be used by CardViewItem and derived classes. |
318 | * Note that this should not be greater than half of the minimal item width, | 318 | * Note that this should not be greater than half of the minimal item width, |
319 | * which is 80. It is currently not checked, so setting a value greater than 40 | 319 | * which is 80. It is currently not checked, so setting a value greater than 40 |
320 | * will probably mean a crash in the items painting routine. | 320 | * will probably mean a crash in the items painting routine. |
321 | * @private Note: I looked for a value in QStyle::PixelMetric to use, but I could | 321 | * @private Note: I looked for a value in QStyle::PixelMetric to use, but I could |
322 | * not see a usefull one. One may turn up in a future version of Qt. | 322 | * not see a usefull one. One may turn up in a future version of Qt. |
323 | */ | 323 | */ |
324 | uint itemMargin(); | 324 | uint itemMargin(); |
325 | 325 | ||
326 | /** Sets the internal item margin. @see itemMargin(). | 326 | /** Sets the internal item margin. @see itemMargin(). |
327 | */ | 327 | */ |
328 | void setItemMargin( uint margin ); | 328 | void setItemMargin( uint margin ); |
329 | 329 | ||
330 | /** @return the item spacing. | 330 | /** @return the item spacing. |
331 | * The item spacing is the space (in pixels) between each item in a | 331 | * The item spacing is the space (in pixels) between each item in a |
332 | * column, between the items and column separators if drawn, and between | 332 | * column, between the items and column separators if drawn, and between |
333 | * the items and the borders of the widget. The default value is set to | 333 | * the items and the borders of the widget. The default value is set to |
334 | * 10. | 334 | * 10. |
335 | * @private Note: There is no usefull QStyle::PixelMetric to use for this atm. | 335 | * @private Note: There is no usefull QStyle::PixelMetric to use for this atm. |
336 | * An option would be using KDialog::spacingHint(). | 336 | * An option would be using KDialog::spacingHint(). |
337 | */ | 337 | */ |
338 | uint itemSpacing(); | 338 | uint itemSpacing(); |
339 | 339 | ||
340 | /** Sets the item spacing. | 340 | /** Sets the item spacing. |
341 | * @see itemSpacing() | 341 | * @see itemSpacing() |
342 | */ | 342 | */ |
343 | void setItemSpacing( uint spacing ); | 343 | void setItemSpacing( uint spacing ); |
344 | 344 | ||
345 | /** @return the width made available to the card items. */ | 345 | /** @return the width made available to the card items. */ |
346 | int itemWidth() const; | 346 | int itemWidth() const; |
347 | 347 | ||
348 | /** Sets the width made available to card items. */ | 348 | /** Sets the width made available to card items. */ |
349 | void setItemWidth( int width ); | 349 | void setItemWidth( int width ); |
350 | 350 | ||
351 | /** Sets the header font */ | 351 | /** Sets the header font */ |
352 | void setHeaderFont( const QFont &fnt ); | 352 | void setHeaderFont( const QFont &fnt ); |
353 | 353 | ||
354 | /** @return the header font */ | 354 | /** @return the header font */ |
355 | QFont headerFont() const; | 355 | QFont headerFont() const; |
356 | 356 | ||
357 | /** @reimp */ | 357 | /** @reimp */ |
358 | void setFont( const QFont &fnt ); | 358 | void setFont( const QFont &fnt ); |
359 | 359 | ||
360 | /** Sets the column separator width */ | 360 | /** Sets the column separator width */ |
361 | void setSeparatorWidth( int width ); | 361 | void setSeparatorWidth( int width ); |
362 | 362 | ||
363 | /** @return the column separator width */ | 363 | /** @return the column separator width */ |
364 | int separatorWidth(); | 364 | int separatorWidth(); |
365 | 365 | ||
366 | /** Sets the maximum number of lines to display pr field. | 366 | /** Sets the maximum number of lines to display pr field. |
367 | If set to 0 (the default) all lines will be displayed. | 367 | If set to 0 (the default) all lines will be displayed. |
368 | */ | 368 | */ |
369 | void setMaxFieldLines( int howmany ); | 369 | void setMaxFieldLines( int howmany ); |
370 | 370 | ||
371 | /** @return the maximum number of lines pr field */ | 371 | /** @return the maximum number of lines pr field */ |
372 | int maxFieldLines() const; | 372 | int maxFieldLines() const; |
373 | 373 | ||
374 | signals: | 374 | signals: |
375 | /** Emitted whenever the selection changes. This means a user highlighted | 375 | /** Emitted whenever the selection changes. This means a user highlighted |
376 | * a new item or unhighlighted a currently selected item. | 376 | * a new item or unhighlighted a currently selected item. |
377 | */ | 377 | */ |
378 | void selectionChanged(); | 378 | void selectionChanged(); |
379 | 379 | ||
380 | /** Same as above method, only it carries the item that was selected. This | 380 | /** Same as above method, only it carries the item that was selected. This |
381 | * method will only be emitted in single select mode, since it defineds | 381 | * method will only be emitted in single select mode, since it defineds |
382 | * which item was selected. | 382 | * which item was selected. |
383 | */ | 383 | */ |
384 | void selectionChanged(CardViewItem *); | 384 | void selectionChanged(CardViewItem *); |
385 | 385 | ||
386 | /** This method is emitted whenever an item is clicked. | 386 | /** This method is emitted whenever an item is clicked. |
387 | */ | 387 | */ |
388 | void clicked(CardViewItem *); | 388 | void clicked(CardViewItem *); |
389 | 389 | ||
390 | /** Emitted whenever the user 'executes' an item. This is dependant on | 390 | /** Emitted whenever the user 'executes' an item. This is dependant on |
391 | * the KDE global config. This could be a single click or a doubleclick. | 391 | * the KDE global config. This could be a single click or a doubleclick. |
392 | * Also emitted when the return key is pressed on an item. | 392 | * Also emitted when the return key is pressed on an item. |
393 | */ | 393 | */ |
394 | void executed(CardViewItem *); | 394 | void executed(CardViewItem *); |
395 | 395 | ||
396 | /** Emitted whenever the user double clicks on an item. | 396 | /** Emitted whenever the user double clicks on an item. |
397 | */ | 397 | */ |
398 | void doubleClicked(CardViewItem *); | 398 | void doubleClicked(CardViewItem *); |
399 | 399 | ||
400 | /** Emitted when the current item changes | 400 | /** Emitted when the current item changes |
401 | */ | 401 | */ |
402 | void currentChanged( CardViewItem * ); | 402 | void currentChanged( CardViewItem * ); |
403 | 403 | ||
404 | /** Emitted when the return key is pressed in an item. | 404 | /** Emitted when the return key is pressed in an item. |
405 | */ | 405 | */ |
406 | void returnPressed( CardViewItem * ); | 406 | void returnPressed( CardViewItem * ); |
407 | 407 | ||
408 | protected: | 408 | protected: |
409 | bool mFlagKeyPressed; | ||
410 | bool mFlagBlockKeyPressed; | ||
411 | virtual void keyPressEvent ( QKeyEvent * ); | ||
412 | virtual void keyReleaseEvent ( QKeyEvent * ); | ||
409 | /** Determines which cards intersect that region and tells them to paint | 413 | /** Determines which cards intersect that region and tells them to paint |
410 | * themselves. | 414 | * themselves. |
411 | */ | 415 | */ |
412 | void drawContents(QPainter *p, int clipx, int clipy, int clipw, int cliph); | 416 | void drawContents(QPainter *p, int clipx, int clipy, int clipw, int cliph); |
413 | 417 | ||
414 | /** Sets the layout to dirty and repaints. | 418 | /** Sets the layout to dirty and repaints. |
415 | */ | 419 | */ |
416 | void resizeEvent(QResizeEvent *e); | 420 | void resizeEvent(QResizeEvent *e); |
417 | 421 | ||
418 | /** Changes the direction the canvas scolls. | 422 | /** Changes the direction the canvas scolls. |
419 | */ | 423 | */ |
420 | void contentsWheelEvent(QWheelEvent *e); | 424 | void contentsWheelEvent(QWheelEvent *e); |
421 | 425 | ||
422 | /** Sets the layout to dirty and calls for a repaint. | 426 | /** Sets the layout to dirty and calls for a repaint. |
423 | */ | 427 | */ |
424 | void setLayoutDirty(bool dirty); | 428 | void setLayoutDirty(bool dirty); |
425 | 429 | ||
426 | /** Does the math based on the bounding rect of the cards to properly | 430 | /** Does the math based on the bounding rect of the cards to properly |
427 | * lay the cards out on the screen. This is only done if the layout is | 431 | * lay the cards out on the screen. This is only done if the layout is |
428 | * marked as dirty. | 432 | * marked as dirty. |
429 | */ | 433 | */ |
430 | void calcLayout(); | 434 | void calcLayout(); |
431 | 435 | ||
432 | // virtual void mousePressEvent(QMouseEvent *e); | 436 | // virtual void mousePressEvent(QMouseEvent *e); |
433 | // virtual void mouseReleaseEvent(QMouseEvent *e); | 437 | // virtual void mouseReleaseEvent(QMouseEvent *e); |
434 | // virtual void mouseMoveEvent(QMouseEvent *e); | 438 | // virtual void mouseMoveEvent(QMouseEvent *e); |
435 | 439 | ||
436 | virtual void contentsMousePressEvent(QMouseEvent *e); | 440 | virtual void contentsMousePressEvent(QMouseEvent *e); |
437 | virtual void contentsMouseMoveEvent(QMouseEvent *e); | 441 | virtual void contentsMouseMoveEvent(QMouseEvent *e); |
438 | virtual void contentsMouseReleaseEvent(QMouseEvent *e); | 442 | virtual void contentsMouseReleaseEvent(QMouseEvent *e); |
439 | virtual void contentsMouseDoubleClickEvent(QMouseEvent *e); | 443 | virtual void contentsMouseDoubleClickEvent(QMouseEvent *e); |
440 | 444 | ||
441 | virtual void enterEvent( QEvent * ); | 445 | virtual void enterEvent( QEvent * ); |
442 | virtual void leaveEvent( QEvent * ); | 446 | virtual void leaveEvent( QEvent * ); |
443 | 447 | ||
444 | virtual void focusInEvent( QFocusEvent * ); | 448 | virtual void focusInEvent( QFocusEvent * ); |
445 | virtual void focusOutEvent( QFocusEvent * ); | 449 | virtual void focusOutEvent( QFocusEvent * ); |
446 | 450 | ||
447 | virtual void keyPressEvent( QKeyEvent * ); | ||
448 | 451 | ||
449 | /** Overload this method to be told when a drag should be started. | 452 | /** Overload this method to be told when a drag should be started. |
450 | * In most cases you will want to start a drag event with the currently | 453 | * In most cases you will want to start a drag event with the currently |
451 | * selected item. | 454 | * selected item. |
452 | */ | 455 | */ |
453 | virtual void startDrag(); | 456 | virtual void startDrag(); |
454 | 457 | ||
455 | private slots: | 458 | private slots: |
456 | /** Called by a timer to display a label with truncated text. | 459 | /** Called by a timer to display a label with truncated text. |
457 | * Pop up a label, if there is a field with obscured text or | 460 | * Pop up a label, if there is a field with obscured text or |
458 | * label at the cursor position. | 461 | * label at the cursor position. |
459 | */ | 462 | */ |
460 | void tryShowFullText(); | 463 | void tryShowFullText(); |
461 | 464 | ||
462 | private: | 465 | private: |
463 | /** draws and erases the rubber bands while columns are resized. | 466 | /** draws and erases the rubber bands while columns are resized. |
464 | * @p pos is the horizontal position inside the viewport to use as | 467 | * @p pos is the horizontal position inside the viewport to use as |
465 | * the anchor. | 468 | * the anchor. |
466 | * If pos is 0, only erase is done. | 469 | * If pos is 0, only erase is done. |
467 | */ | 470 | */ |
468 | void drawRubberBands( int pos ); | 471 | void drawRubberBands( int pos ); |
469 | 472 | ||
470 | CardViewPrivate *d; | 473 | CardViewPrivate *d; |
471 | }; | 474 | }; |
472 | 475 | ||
473 | #endif | 476 | #endif |
diff --git a/kaddressbook/views/contactlistview.cpp b/kaddressbook/views/contactlistview.cpp index e75810e..09d9c03 100644 --- a/kaddressbook/views/contactlistview.cpp +++ b/kaddressbook/views/contactlistview.cpp | |||
@@ -1,400 +1,429 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KAddressBook. | 2 | This file is part of KAddressBook. |
3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> | 3 | Copyright (c) 2002 Mike Pilone <mpilone@slac.com> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <qheader.h> | 24 | #include <qheader.h> |
25 | #include <qiconset.h> | 25 | #include <qiconset.h> |
26 | #include <qimage.h> | 26 | #include <qimage.h> |
27 | #include <qdragobject.h> | 27 | #include <qdragobject.h> |
28 | #include <qcombobox.h> | 28 | #include <qcombobox.h> |
29 | #include <qpainter.h> | 29 | #include <qpainter.h> |
30 | #include <qbrush.h> | 30 | #include <qbrush.h> |
31 | #include <qevent.h> | 31 | #include <qevent.h> |
32 | #include <qapplication.h> | ||
32 | 33 | ||
33 | #include <klocale.h> | 34 | #include <klocale.h> |
34 | #include <kglobalsettings.h> | 35 | #include <kglobalsettings.h> |
35 | #include <kiconloader.h> | 36 | #include <kiconloader.h> |
36 | #include <kdebug.h> | 37 | #include <kdebug.h> |
37 | #include <kconfig.h> | 38 | #include <kconfig.h> |
38 | #include <kapplication.h> | 39 | #include <kapplication.h> |
39 | #include <kurl.h> | 40 | #include <kurl.h> |
40 | 41 | ||
41 | #include "kaddressbooktableview.h" | 42 | #include "kaddressbooktableview.h" |
42 | 43 | ||
43 | #include "contactlistview.h" | 44 | #include "contactlistview.h" |
44 | 45 | ||
45 | ///////////////////////////////// | 46 | ///////////////////////////////// |
46 | // DynamicTip Methods | 47 | // DynamicTip Methods |
47 | 48 | ||
48 | DynamicTip::DynamicTip( ContactListView *parent) | 49 | DynamicTip::DynamicTip( ContactListView *parent) |
49 | : QToolTip( parent ) | 50 | : QToolTip( parent ) |
50 | { | 51 | { |
51 | } | 52 | } |
52 | 53 | ||
53 | void DynamicTip::maybeTip( const QPoint &pos ) | 54 | void DynamicTip::maybeTip( const QPoint &pos ) |
54 | { | 55 | { |
55 | static bool ishidden = true; | 56 | static bool ishidden = true; |
56 | if (!parentWidget()->inherits( "ContactListView" )) | 57 | if (!parentWidget()->inherits( "ContactListView" )) |
57 | return; | 58 | return; |
58 | 59 | ||
59 | ContactListView *plv = (ContactListView*)parentWidget(); | 60 | ContactListView *plv = (ContactListView*)parentWidget(); |
60 | if (!plv->tooltips()) | 61 | if (!plv->tooltips()) |
61 | return; | 62 | return; |
62 | 63 | ||
63 | QPoint posVp = plv->viewport()->pos(); | 64 | QPoint posVp = plv->viewport()->pos(); |
64 | 65 | ||
65 | QListViewItem *lvi = plv->itemAt( pos - posVp ); | 66 | QListViewItem *lvi = plv->itemAt( pos - posVp ); |
66 | if (!lvi) | 67 | if (!lvi) |
67 | return; | 68 | return; |
68 | 69 | ||
69 | #ifndef KAB_EMBEDDED | 70 | #ifndef KAB_EMBEDDED |
70 | ContactListViewItem *plvi = dynamic_cast< ContactListViewItem* >(lvi); | 71 | ContactListViewItem *plvi = dynamic_cast< ContactListViewItem* >(lvi); |
71 | #else //KAB_EMBEDDED | 72 | #else //KAB_EMBEDDED |
72 | ContactListViewItem *plvi = (ContactListViewItem*)(lvi); | 73 | ContactListViewItem *plvi = (ContactListViewItem*)(lvi); |
73 | #endif //KAB_EMBEDDED | 74 | #endif //KAB_EMBEDDED |
74 | 75 | ||
75 | if (!plvi) | 76 | if (!plvi) |
76 | return; | 77 | return; |
77 | 78 | ||
78 | if (ishidden) { | 79 | if (ishidden) { |
79 | QString s; | 80 | QString s; |
80 | QRect r = plv->itemRect( lvi ); | 81 | QRect r = plv->itemRect( lvi ); |
81 | r.moveBy( posVp.x(), posVp.y() ); | 82 | r.moveBy( posVp.x(), posVp.y() ); |
82 | 83 | ||
83 | //kdDebug() << "Tip rec: " << r.x() << "," << r.y() << "," << r.width() | 84 | //kdDebug() << "Tip rec: " << r.x() << "," << r.y() << "," << r.width() |
84 | // << "," << r.height() << endl; | 85 | // << "," << r.height() << endl; |
85 | 86 | ||
86 | KABC::Addressee a = plvi->addressee(); | 87 | KABC::Addressee a = plvi->addressee(); |
87 | if (a.isEmpty()) | 88 | if (a.isEmpty()) |
88 | return; | 89 | return; |
89 | 90 | ||
90 | s += i18n("label: value", "%1: %2").arg(a.formattedNameLabel()) | 91 | s += i18n("label: value", "%1: %2").arg(a.formattedNameLabel()) |
91 | .arg(a.formattedName()); | 92 | .arg(a.formattedName()); |
92 | 93 | ||
93 | s += '\n'; | 94 | s += '\n'; |
94 | s += i18n("label: value", "%1: %2").arg(a.organizationLabel()) | 95 | s += i18n("label: value", "%1: %2").arg(a.organizationLabel()) |
95 | .arg(a.organization()); | 96 | .arg(a.organization()); |
96 | 97 | ||
97 | QString notes = a.note().stripWhiteSpace(); | 98 | QString notes = a.note().stripWhiteSpace(); |
98 | if ( !notes.isEmpty() ) { | 99 | if ( !notes.isEmpty() ) { |
99 | notes += '\n'; | 100 | notes += '\n'; |
100 | s += '\n' + i18n("label: value", "%1: \n").arg(a.noteLabel()); | 101 | s += '\n' + i18n("label: value", "%1: \n").arg(a.noteLabel()); |
101 | QFontMetrics fm( font() ); | 102 | QFontMetrics fm( font() ); |
102 | 103 | ||
103 | // Begin word wrap code based on QMultiLineEdit code | 104 | // Begin word wrap code based on QMultiLineEdit code |
104 | int i = 0; | 105 | int i = 0; |
105 | bool doBreak = false; | 106 | bool doBreak = false; |
106 | int linew = 0; | 107 | int linew = 0; |
107 | int lastSpace = -1; | 108 | int lastSpace = -1; |
108 | int a = 0; | 109 | int a = 0; |
109 | int lastw = 0; | 110 | int lastw = 0; |
110 | 111 | ||
111 | while ( i < int(notes.length()) ) { | 112 | while ( i < int(notes.length()) ) { |
112 | doBreak = FALSE; | 113 | doBreak = FALSE; |
113 | if ( notes[i] != '\n' ) | 114 | if ( notes[i] != '\n' ) |
114 | linew += fm.width( notes[i] ); | 115 | linew += fm.width( notes[i] ); |
115 | 116 | ||
116 | if ( lastSpace >= a && notes[i] != '\n' ) | 117 | if ( lastSpace >= a && notes[i] != '\n' ) |
117 | if (linew >= parentWidget()->width()) { | 118 | if (linew >= parentWidget()->width()) { |
118 | doBreak = TRUE; | 119 | doBreak = TRUE; |
119 | if ( lastSpace > a ) { | 120 | if ( lastSpace > a ) { |
120 | i = lastSpace; | 121 | i = lastSpace; |
121 | linew = lastw; | 122 | linew = lastw; |
122 | } | 123 | } |
123 | else | 124 | else |
124 | i = QMAX( a, i-1 ); | 125 | i = QMAX( a, i-1 ); |
125 | } | 126 | } |
126 | 127 | ||
127 | if ( notes[i] == '\n' || doBreak ) { | 128 | if ( notes[i] == '\n' || doBreak ) { |
128 | s += notes.mid( a, i - a + (doBreak?1:0) ) +"\n"; | 129 | s += notes.mid( a, i - a + (doBreak?1:0) ) +"\n"; |
129 | 130 | ||
130 | a = i + 1; | 131 | a = i + 1; |
131 | lastSpace = a; | 132 | lastSpace = a; |
132 | linew = 0; | 133 | linew = 0; |
133 | } | 134 | } |
134 | 135 | ||
135 | if ( notes[i].isSpace() ) { | 136 | if ( notes[i].isSpace() ) { |
136 | lastSpace = i; | 137 | lastSpace = i; |
137 | lastw = linew; | 138 | lastw = linew; |
138 | } | 139 | } |
139 | 140 | ||
140 | if ( lastSpace <= a ) { | 141 | if ( lastSpace <= a ) { |
141 | lastw = linew; | 142 | lastw = linew; |
142 | } | 143 | } |
143 | 144 | ||
144 | ++i; | 145 | ++i; |
145 | } | 146 | } |
146 | } | 147 | } |
147 | 148 | ||
148 | tip( r, s ); | 149 | tip( r, s ); |
149 | } | 150 | } |
150 | else | 151 | else |
151 | hide(); | 152 | hide(); |
152 | ishidden = !ishidden; | 153 | ishidden = !ishidden; |
153 | 154 | ||
154 | } | 155 | } |
155 | 156 | ||
156 | /////////////////////////// | 157 | /////////////////////////// |
157 | // ContactListViewItem Methods | 158 | // ContactListViewItem Methods |
158 | 159 | ||
159 | ContactListViewItem::ContactListViewItem(const KABC::Addressee &a, | 160 | ContactListViewItem::ContactListViewItem(const KABC::Addressee &a, |
160 | ContactListView *parent, | 161 | ContactListView *parent, |
161 | KABC::AddressBook *doc, | 162 | KABC::AddressBook *doc, |
162 | const KABC::Field::List &fields ) | 163 | const KABC::Field::List &fields ) |
163 | : KListViewItem(parent), mAddressee(a), mFields( fields ), | 164 | : KListViewItem(parent), mAddressee(a), mFields( fields ), |
164 | parentListView( parent ), mDocument(doc) | 165 | parentListView( parent ), mDocument(doc) |
165 | { | 166 | { |
166 | refresh(); | 167 | refresh(); |
167 | } | 168 | } |
168 | 169 | ||
169 | QString ContactListViewItem::key(int column, bool ascending) const | 170 | QString ContactListViewItem::key(int column, bool ascending) const |
170 | { | 171 | { |
171 | #ifndef DESKTOP_VERSION | 172 | #ifndef DESKTOP_VERSION |
172 | int lan = KGlobal::locale()->language(); | 173 | int lan = KGlobal::locale()->language(); |
173 | //qDebug("language %d ", lan); | 174 | //qDebug("language %d ", lan); |
174 | if ( lan == 1 ) { //GERMAN | 175 | if ( lan == 1 ) { //GERMAN |
175 | QString ret = QListViewItem::key(column, ascending).lower().utf8(); | 176 | QString ret = QListViewItem::key(column, ascending).lower().utf8(); |
176 | int start = -1; | 177 | int start = -1; |
177 | while ( (start = ret.find( 'ä', start+1)) > 0 ) { | 178 | while ( (start = ret.find( 'ä', start+1)) > 0 ) { |
178 | ret.at(start-1) = 'a'; | 179 | ret.at(start-1) = 'a'; |
179 | } | 180 | } |
180 | start = -1; | 181 | start = -1; |
181 | while ( (start = ret.find( 'ö', start+1)) > 0 ) { | 182 | while ( (start = ret.find( 'ö', start+1)) > 0 ) { |
182 | ret.at(start-1) = 'o'; | 183 | ret.at(start-1) = 'o'; |
183 | } | 184 | } |
184 | start = -1; | 185 | start = -1; |
185 | while ( (start = ret.find( 'ü', start+1)) > 0 ) { | 186 | while ( (start = ret.find( 'ü', start+1)) > 0 ) { |
186 | ret.at(start-1) = 'o'; | 187 | ret.at(start-1) = 'o'; |
187 | } | 188 | } |
188 | start = -1; | 189 | start = -1; |
189 | while ( (start = ret.find( 'ß', start+1)) > 0 ) { | 190 | while ( (start = ret.find( 'ß', start+1)) > 0 ) { |
190 | ret.at(start-1) = 's'; | 191 | ret.at(start-1) = 's'; |
191 | } | 192 | } |
192 | //qDebug("conv string %s ", ret.latin1()); | 193 | //qDebug("conv string %s ", ret.latin1()); |
193 | 194 | ||
194 | return ret; | 195 | return ret; |
195 | 196 | ||
196 | } | 197 | } |
197 | else | 198 | else |
198 | #endif | 199 | #endif |
199 | return QListViewItem::key(column, ascending).lower(); | 200 | return QListViewItem::key(column, ascending).lower(); |
200 | } | 201 | } |
201 | 202 | ||
202 | void ContactListViewItem::paintCell(QPainter * p, | 203 | void ContactListViewItem::paintCell(QPainter * p, |
203 | const QColorGroup & cg, | 204 | const QColorGroup & cg, |
204 | int column, | 205 | int column, |
205 | int width, | 206 | int width, |
206 | int align) | 207 | int align) |
207 | { | 208 | { |
208 | KListViewItem::paintCell(p, cg, column, width, align); | 209 | KListViewItem::paintCell(p, cg, column, width, align); |
209 | 210 | ||
210 | if ( !p ) | 211 | if ( !p ) |
211 | return; | 212 | return; |
212 | 213 | ||
213 | if (parentListView->singleLine()) { | 214 | if (parentListView->singleLine()) { |
214 | p->setPen( parentListView->alternateColor() ); | 215 | p->setPen( parentListView->alternateColor() ); |
215 | p->drawLine( 0, height() - 1, width, height() - 1 ); | 216 | p->drawLine( 0, height() - 1, width, height() - 1 ); |
216 | } | 217 | } |
217 | } | 218 | } |
218 | 219 | ||
219 | 220 | ||
220 | ContactListView *ContactListViewItem::parent() | 221 | ContactListView *ContactListViewItem::parent() |
221 | { | 222 | { |
222 | return parentListView; | 223 | return parentListView; |
223 | } | 224 | } |
224 | 225 | ||
225 | 226 | ||
226 | void ContactListViewItem::refresh() | 227 | void ContactListViewItem::refresh() |
227 | { | 228 | { |
228 | // Update our addressee, since it may have changed else were | 229 | // Update our addressee, since it may have changed else were |
229 | mAddressee = mDocument->findByUid(mAddressee.uid()); | 230 | mAddressee = mDocument->findByUid(mAddressee.uid()); |
230 | if (mAddressee.isEmpty()) | 231 | if (mAddressee.isEmpty()) |
231 | return; | 232 | return; |
232 | 233 | ||
233 | int i = 0; | 234 | int i = 0; |
234 | KABC::Field::List::ConstIterator it; | 235 | KABC::Field::List::ConstIterator it; |
235 | for( it = mFields.begin(); it != mFields.end(); ++it ) { | 236 | for( it = mFields.begin(); it != mFields.end(); ++it ) { |
236 | setText( i++, (*it)->value( mAddressee ) ); | 237 | setText( i++, (*it)->value( mAddressee ) ); |
237 | } | 238 | } |
238 | } | 239 | } |
239 | 240 | ||
240 | /////////////////////////////// | 241 | /////////////////////////////// |
241 | // ContactListView | 242 | // ContactListView |
242 | 243 | ||
243 | ContactListView::ContactListView(KAddressBookTableView *view, | 244 | ContactListView::ContactListView(KAddressBookTableView *view, |
244 | KABC::AddressBook* /* doc */, | 245 | KABC::AddressBook* /* doc */, |
245 | QWidget *parent, | 246 | QWidget *parent, |
246 | const char *name ) | 247 | const char *name ) |
247 | : KListView( parent, name ), | 248 | : KListView( parent, name ), |
248 | pabWidget( view ), | 249 | pabWidget( view ), |
249 | oldColumn( 0 ) | 250 | oldColumn( 0 ) |
250 | { | 251 | { |
252 | mFlagBlockKeyPressed = false; | ||
253 | mFlagKeyPressed = false; | ||
251 | mABackground = true; | 254 | mABackground = true; |
252 | mSingleLine = false; | 255 | mSingleLine = false; |
253 | mToolTips = true; | 256 | mToolTips = true; |
254 | #ifndef KAB_EMBEDDED | 257 | #ifndef KAB_EMBEDDED |
255 | mAlternateColor = KGlobalSettings::alternateBackgroundColor(); | 258 | mAlternateColor = KGlobalSettings::alternateBackgroundColor(); |
256 | #else //KAB_EMBEDDED | 259 | #else //KAB_EMBEDDED |
257 | mAlternateColor = QColor(240, 240, 240); | 260 | mAlternateColor = QColor(240, 240, 240); |
258 | #endif //KAB_EMBEDDED | 261 | #endif //KAB_EMBEDDED |
259 | 262 | ||
260 | setAlternateBackgroundEnabled(mABackground); | 263 | setAlternateBackgroundEnabled(mABackground); |
261 | setAcceptDrops( true ); | 264 | setAcceptDrops( true ); |
262 | viewport()->setAcceptDrops( true ); | 265 | viewport()->setAcceptDrops( true ); |
263 | setAllColumnsShowFocus( true ); | 266 | setAllColumnsShowFocus( true ); |
264 | setShowSortIndicator(true); | 267 | setShowSortIndicator(true); |
265 | 268 | ||
266 | setSelectionModeExt( KListView::Extended ); | 269 | setSelectionModeExt( KListView::Extended ); |
267 | setDropVisualizer(false); | 270 | setDropVisualizer(false); |
268 | // setFrameStyle(QFrame::NoFrame); | 271 | // setFrameStyle(QFrame::NoFrame); |
269 | //setLineWidth ( 0 ); | 272 | //setLineWidth ( 0 ); |
270 | //setMidLineWidth ( 0 ); | 273 | //setMidLineWidth ( 0 ); |
271 | //setMargin ( 0 ); | 274 | //setMargin ( 0 ); |
272 | #ifndef KAB_EMBEDDED | 275 | #ifndef KAB_EMBEDDED |
273 | connect(this, SIGNAL(dropped(QDropEvent*)), | 276 | connect(this, SIGNAL(dropped(QDropEvent*)), |
274 | this, SLOT(itemDropped(QDropEvent*))); | 277 | this, SLOT(itemDropped(QDropEvent*))); |
275 | #endif //KAB_EMBEDDED | 278 | #endif //KAB_EMBEDDED |
276 | 279 | ||
277 | 280 | ||
278 | new DynamicTip( this ); | 281 | new DynamicTip( this ); |
279 | } | 282 | } |
280 | void ContactListView::printMe() | 283 | void ContactListView::printMe() |
281 | { | 284 | { |
282 | #ifdef DESKTOP_VERSION | 285 | #ifdef DESKTOP_VERSION |
283 | QPrinter printer; | 286 | QPrinter printer; |
284 | if (!printer.setup() ) | 287 | if (!printer.setup() ) |
285 | return; | 288 | return; |
286 | QPainter p; | 289 | QPainter p; |
287 | p.begin ( &printer ); | 290 | p.begin ( &printer ); |
288 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); | 291 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); |
289 | float dx, dy; | 292 | float dx, dy; |
290 | int wid = (m.width() * 9)/10; | 293 | int wid = (m.width() * 9)/10; |
291 | dx = (float) wid/(float)contentsWidth (); | 294 | dx = (float) wid/(float)contentsWidth (); |
292 | dy = (float)(m.height()) / (float)contentsHeight (); | 295 | dy = (float)(m.height()) / (float)contentsHeight (); |
293 | float scale; | 296 | float scale; |
294 | // scale to fit the width or height of the paper | 297 | // scale to fit the width or height of the paper |
295 | if ( dx < dy ) | 298 | if ( dx < dy ) |
296 | scale = dx; | 299 | scale = dx; |
297 | else | 300 | else |
298 | scale = dy; | 301 | scale = dy; |
299 | p.translate( m.width()/10,0 ); | 302 | p.translate( m.width()/10,0 ); |
300 | p.scale( scale, scale ); | 303 | p.scale( scale, scale ); |
301 | qDebug("scale %f ", scale); | 304 | qDebug("scale %f ", scale); |
302 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); | 305 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); |
303 | p.end(); | 306 | p.end(); |
304 | qDebug("Why does it not print??? "); | 307 | qDebug("Why does it not print??? "); |
305 | #endif | 308 | #endif |
306 | } | 309 | } |
307 | 310 | ||
308 | void ContactListView::setAlternateColor(const QColor &m_AlternateColor) | 311 | void ContactListView::setAlternateColor(const QColor &m_AlternateColor) |
309 | { | 312 | { |
310 | mAlternateColor = m_AlternateColor; | 313 | mAlternateColor = m_AlternateColor; |
311 | } | 314 | } |
312 | 315 | ||
313 | void ContactListView::paintEmptyArea( QPainter * p, const QRect & rect ) | 316 | void ContactListView::paintEmptyArea( QPainter * p, const QRect & rect ) |
314 | { | 317 | { |
315 | QBrush b = palette().brush(QPalette::Active, QColorGroup::Base); | 318 | QBrush b = palette().brush(QPalette::Active, QColorGroup::Base); |
316 | 319 | ||
317 | // Get the brush, which will have the background pixmap if there is one. | 320 | // Get the brush, which will have the background pixmap if there is one. |
318 | if (b.pixmap()) | 321 | if (b.pixmap()) |
319 | { | 322 | { |
320 | p->drawTiledPixmap( rect.left(), rect.top(), rect.width(), rect.height(), | 323 | p->drawTiledPixmap( rect.left(), rect.top(), rect.width(), rect.height(), |
321 | *(b.pixmap()), | 324 | *(b.pixmap()), |
322 | rect.left() + contentsX(), | 325 | rect.left() + contentsX(), |
323 | rect.top() + contentsY() ); | 326 | rect.top() + contentsY() ); |
324 | } | 327 | } |
325 | 328 | ||
326 | else | 329 | else |
327 | { | 330 | { |
328 | // Do a normal paint | 331 | // Do a normal paint |
329 | KListView::paintEmptyArea(p, rect); | 332 | KListView::paintEmptyArea(p, rect); |
330 | } | 333 | } |
331 | } | 334 | } |
332 | 335 | ||
333 | void ContactListView::contentsMousePressEvent(QMouseEvent* e) | 336 | void ContactListView::contentsMousePressEvent(QMouseEvent* e) |
334 | { | 337 | { |
335 | presspos = e->pos(); | 338 | presspos = e->pos(); |
336 | KListView::contentsMousePressEvent(e); | 339 | KListView::contentsMousePressEvent(e); |
337 | } | 340 | } |
338 | 341 | ||
339 | 342 | ||
340 | // To initiate a drag operation | 343 | // To initiate a drag operation |
341 | void ContactListView::contentsMouseMoveEvent( QMouseEvent *e ) | 344 | void ContactListView::contentsMouseMoveEvent( QMouseEvent *e ) |
342 | { | 345 | { |
343 | if ((e->state() & LeftButton) && (e->pos() - presspos).manhattanLength() > 4 ) { | 346 | if ((e->state() & LeftButton) && (e->pos() - presspos).manhattanLength() > 4 ) { |
344 | emit startAddresseeDrag(); | 347 | emit startAddresseeDrag(); |
345 | } | 348 | } |
346 | else | 349 | else |
347 | KListView::contentsMouseMoveEvent( e ); | 350 | KListView::contentsMouseMoveEvent( e ); |
348 | } | 351 | } |
349 | 352 | ||
350 | bool ContactListView::acceptDrag(QDropEvent *e) const | 353 | bool ContactListView::acceptDrag(QDropEvent *e) const |
351 | { | 354 | { |
352 | #ifndef KAB_EMBEDDED | 355 | #ifndef KAB_EMBEDDED |
353 | return QTextDrag::canDecode(e); | 356 | return QTextDrag::canDecode(e); |
354 | #else //KAB_EMBEDDED | 357 | #else //KAB_EMBEDDED |
355 | qDebug("ContactListView::acceptDrag has to be fixed"); | 358 | qDebug("ContactListView::acceptDrag has to be fixed"); |
356 | return false; | 359 | return false; |
357 | #endif //KAB_EMBEDDED | 360 | #endif //KAB_EMBEDDED |
358 | } | 361 | } |
359 | 362 | ||
360 | void ContactListView::itemDropped(QDropEvent *e) | 363 | void ContactListView::itemDropped(QDropEvent *e) |
361 | { | 364 | { |
362 | contentsDropEvent(e); | 365 | contentsDropEvent(e); |
363 | } | 366 | } |
364 | 367 | ||
365 | void ContactListView::contentsDropEvent( QDropEvent *e ) | 368 | void ContactListView::contentsDropEvent( QDropEvent *e ) |
366 | { | 369 | { |
367 | emit addresseeDropped(e); | 370 | emit addresseeDropped(e); |
368 | } | 371 | } |
369 | 372 | ||
370 | void ContactListView::setAlternateBackgroundEnabled(bool enabled) | 373 | void ContactListView::setAlternateBackgroundEnabled(bool enabled) |
371 | { | 374 | { |
372 | mABackground = enabled; | 375 | mABackground = enabled; |
373 | 376 | ||
374 | if (mABackground) | 377 | if (mABackground) |
375 | { | 378 | { |
376 | setAlternateBackground(mAlternateColor); | 379 | setAlternateBackground(mAlternateColor); |
377 | } | 380 | } |
378 | else | 381 | else |
379 | { | 382 | { |
380 | setAlternateBackground(QColor()); | 383 | setAlternateBackground(QColor()); |
381 | } | 384 | } |
382 | } | 385 | } |
383 | 386 | ||
384 | void ContactListView::setBackgroundPixmap(const QString &filename) | 387 | void ContactListView::setBackgroundPixmap(const QString &filename) |
385 | { | 388 | { |
386 | if (filename.isEmpty()) | 389 | if (filename.isEmpty()) |
387 | { | 390 | { |
388 | unsetPalette(); | 391 | unsetPalette(); |
389 | } | 392 | } |
390 | else | 393 | else |
391 | { | 394 | { |
392 | qDebug("ContactListView::setBackgroundPixmap has to be verified"); | 395 | qDebug("ContactListView::setBackgroundPixmap has to be verified"); |
393 | //US setPaletteBackgroundPixmap(QPixmap(filename)); | 396 | //US setPaletteBackgroundPixmap(QPixmap(filename)); |
394 | KListView::setBackgroundPixmap((const QPixmap&)QPixmap(filename)); | 397 | KListView::setBackgroundPixmap((const QPixmap&)QPixmap(filename)); |
395 | } | 398 | } |
396 | 399 | ||
397 | } | 400 | } |
401 | |||
402 | void ContactListView::keyPressEvent ( QKeyEvent * e ) | ||
403 | { | ||
404 | if ( mFlagBlockKeyPressed ) | ||
405 | return; | ||
406 | qApp->processEvents(); | ||
407 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | ||
408 | e->accept(); | ||
409 | return; | ||
410 | } | ||
411 | if (! e->isAutoRepeat() ) | ||
412 | mFlagKeyPressed = true; | ||
413 | KListView::keyPressEvent ( e ); | ||
414 | } | ||
415 | void ContactListView::keyReleaseEvent ( QKeyEvent * e ) | ||
416 | { | ||
417 | if ( mFlagBlockKeyPressed ) | ||
418 | return; | ||
419 | if ( !e->isAutoRepeat() ) { | ||
420 | mFlagBlockKeyPressed = true; | ||
421 | qApp->processEvents(); | ||
422 | mFlagBlockKeyPressed = false; | ||
423 | mFlagKeyPressed = false; | ||
424 | } | ||
425 | KListView::keyReleaseEvent ( e ); | ||
426 | } | ||
398 | #ifndef KAB_EMBEDDED | 427 | #ifndef KAB_EMBEDDED |
399 | #include "contactlistview.moc" | 428 | #include "contactlistview.moc" |
400 | #endif //KAB_EMBEDDED | 429 | #endif //KAB_EMBEDDED |
diff --git a/kaddressbook/views/contactlistview.h b/kaddressbook/views/contactlistview.h index 9d1a672..46477e1 100644 --- a/kaddressbook/views/contactlistview.h +++ b/kaddressbook/views/contactlistview.h | |||
@@ -1,130 +1,134 @@ | |||
1 | #ifndef CONTACTLISTVIEW_H | 1 | #ifndef CONTACTLISTVIEW_H |
2 | #define CONTACTLISTVIEW_H | 2 | #define CONTACTLISTVIEW_H |
3 | 3 | ||
4 | #include <qcolor.h> | 4 | #include <qcolor.h> |
5 | #include <qpixmap.h> | 5 | #include <qpixmap.h> |
6 | #include <qtooltip.h> | 6 | #include <qtooltip.h> |
7 | #include <qstring.h> | 7 | #include <qstring.h> |
8 | 8 | ||
9 | #include <klistview.h> | 9 | #include <klistview.h> |
10 | 10 | ||
11 | #include <kabc/field.h> | 11 | #include <kabc/field.h> |
12 | #include <kabc/addressee.h> | 12 | #include <kabc/addressee.h> |
13 | #include <kabc/addressbook.h> | 13 | #include <kabc/addressbook.h> |
14 | 14 | ||
15 | 15 | ||
16 | class QDropEvent; | 16 | class QDropEvent; |
17 | class KAddressBookTableView; | 17 | class KAddressBookTableView; |
18 | class ContactListView; | 18 | class ContactListView; |
19 | 19 | ||
20 | /** The whole tooltip design needs a lot of work. Currently it is | 20 | /** The whole tooltip design needs a lot of work. Currently it is |
21 | * hacked together to function. | 21 | * hacked together to function. |
22 | */ | 22 | */ |
23 | class DynamicTip : public QToolTip | 23 | class DynamicTip : public QToolTip |
24 | { | 24 | { |
25 | public: | 25 | public: |
26 | DynamicTip( ContactListView * parent ); | 26 | DynamicTip( ContactListView * parent ); |
27 | 27 | ||
28 | protected: | 28 | protected: |
29 | void maybeTip( const QPoint & ); | 29 | void maybeTip( const QPoint & ); |
30 | 30 | ||
31 | private: | 31 | private: |
32 | }; | 32 | }; |
33 | 33 | ||
34 | class ContactListViewItem : public KListViewItem | 34 | class ContactListViewItem : public KListViewItem |
35 | { | 35 | { |
36 | 36 | ||
37 | public: | 37 | public: |
38 | ContactListViewItem(const KABC::Addressee &a, ContactListView* parent, | 38 | ContactListViewItem(const KABC::Addressee &a, ContactListView* parent, |
39 | KABC::AddressBook *doc, const KABC::Field::List &fields ); | 39 | KABC::AddressBook *doc, const KABC::Field::List &fields ); |
40 | const KABC::Addressee &addressee() const { return mAddressee; } | 40 | const KABC::Addressee &addressee() const { return mAddressee; } |
41 | virtual void refresh(); | 41 | virtual void refresh(); |
42 | virtual ContactListView* parent(); | 42 | virtual ContactListView* parent(); |
43 | virtual QString key ( int, bool ) const; | 43 | virtual QString key ( int, bool ) const; |
44 | 44 | ||
45 | /** Adds the border around the cell if the user wants it. | 45 | /** Adds the border around the cell if the user wants it. |
46 | * This is how the single line config option is implemented. | 46 | * This is how the single line config option is implemented. |
47 | */ | 47 | */ |
48 | virtual void paintCell(QPainter * p, const QColorGroup & cg, | 48 | virtual void paintCell(QPainter * p, const QColorGroup & cg, |
49 | int column, int width, int align ); | 49 | int column, int width, int align ); |
50 | 50 | ||
51 | private: | 51 | private: |
52 | KABC::Addressee mAddressee; | 52 | KABC::Addressee mAddressee; |
53 | KABC::Field::List mFields; | 53 | KABC::Field::List mFields; |
54 | ContactListView *parentListView; | 54 | ContactListView *parentListView; |
55 | KABC::AddressBook *mDocument; | 55 | KABC::AddressBook *mDocument; |
56 | }; | 56 | }; |
57 | 57 | ||
58 | 58 | ||
59 | ///////////////////////////////////////////// | 59 | ///////////////////////////////////////////// |
60 | // ContactListView | 60 | // ContactListView |
61 | 61 | ||
62 | class ContactListView : public KListView | 62 | class ContactListView : public KListView |
63 | { | 63 | { |
64 | Q_OBJECT | 64 | Q_OBJECT |
65 | 65 | ||
66 | public: | 66 | public: |
67 | ContactListView(KAddressBookTableView *view, | 67 | ContactListView(KAddressBookTableView *view, |
68 | KABC::AddressBook *doc, | 68 | KABC::AddressBook *doc, |
69 | QWidget *parent, | 69 | QWidget *parent, |
70 | const char *name = 0L ); | 70 | const char *name = 0L ); |
71 | virtual ~ContactListView() {} | 71 | virtual ~ContactListView() {} |
72 | //void resort(); | 72 | //void resort(); |
73 | 73 | ||
74 | /** Returns true if tooltips should be displayed, false otherwise | 74 | /** Returns true if tooltips should be displayed, false otherwise |
75 | */ | 75 | */ |
76 | bool tooltips() const { return mToolTips; } | 76 | bool tooltips() const { return mToolTips; } |
77 | void setToolTipsEnabled(bool enabled) { mToolTips = enabled; } | 77 | void setToolTipsEnabled(bool enabled) { mToolTips = enabled; } |
78 | 78 | ||
79 | bool alternateBackground() const { return mABackground; } | 79 | bool alternateBackground() const { return mABackground; } |
80 | void setAlternateBackgroundEnabled(bool enabled); | 80 | void setAlternateBackgroundEnabled(bool enabled); |
81 | 81 | ||
82 | bool singleLine() const { return mSingleLine; } | 82 | bool singleLine() const { return mSingleLine; } |
83 | void setSingleLineEnabled(bool enabled) { mSingleLine = enabled; } | 83 | void setSingleLineEnabled(bool enabled) { mSingleLine = enabled; } |
84 | 84 | ||
85 | const QColor &alternateColor() const { return mAlternateColor; } | 85 | const QColor &alternateColor() const { return mAlternateColor; } |
86 | void setAlternateColor(const QColor &mAlternateColor); | 86 | void setAlternateColor(const QColor &mAlternateColor); |
87 | 87 | ||
88 | /** Sets the background pixmap to <i>filename</i>. If the | 88 | /** Sets the background pixmap to <i>filename</i>. If the |
89 | * QString is empty (QString::isEmpty()), then the background | 89 | * QString is empty (QString::isEmpty()), then the background |
90 | * pixmap will be disabled. | 90 | * pixmap will be disabled. |
91 | */ | 91 | */ |
92 | void setBackgroundPixmap(const QString &filename); | 92 | void setBackgroundPixmap(const QString &filename); |
93 | 93 | ||
94 | protected: | 94 | protected: |
95 | bool mFlagKeyPressed; | ||
96 | bool mFlagBlockKeyPressed; | ||
97 | virtual void keyPressEvent ( QKeyEvent * ); | ||
98 | virtual void keyReleaseEvent ( QKeyEvent * ); | ||
95 | /** Paints the background pixmap in the empty area. This method is needed | 99 | /** Paints the background pixmap in the empty area. This method is needed |
96 | * since Qt::FixedPixmap will not scroll with the list view. | 100 | * since Qt::FixedPixmap will not scroll with the list view. |
97 | */ | 101 | */ |
98 | virtual void paintEmptyArea( QPainter * p, const QRect & rect ); | 102 | virtual void paintEmptyArea( QPainter * p, const QRect & rect ); |
99 | virtual void contentsMousePressEvent(QMouseEvent*); | 103 | virtual void contentsMousePressEvent(QMouseEvent*); |
100 | void contentsMouseMoveEvent( QMouseEvent *e ); | 104 | void contentsMouseMoveEvent( QMouseEvent *e ); |
101 | void contentsDropEvent( QDropEvent *e ); | 105 | void contentsDropEvent( QDropEvent *e ); |
102 | virtual bool acceptDrag(QDropEvent *e) const; | 106 | virtual bool acceptDrag(QDropEvent *e) const; |
103 | 107 | ||
104 | protected slots: | 108 | protected slots: |
105 | void itemDropped(QDropEvent *e); | 109 | void itemDropped(QDropEvent *e); |
106 | 110 | ||
107 | public slots: | 111 | public slots: |
108 | void printMe(); | 112 | void printMe(); |
109 | 113 | ||
110 | signals: | 114 | signals: |
111 | void startAddresseeDrag(); | 115 | void startAddresseeDrag(); |
112 | void addresseeDropped(QDropEvent *); | 116 | void addresseeDropped(QDropEvent *); |
113 | 117 | ||
114 | private: | 118 | private: |
115 | KAddressBookTableView *pabWidget; | 119 | KAddressBookTableView *pabWidget; |
116 | int oldColumn; | 120 | int oldColumn; |
117 | int column; | 121 | int column; |
118 | bool ascending; | 122 | bool ascending; |
119 | 123 | ||
120 | bool mABackground; | 124 | bool mABackground; |
121 | bool mSingleLine; | 125 | bool mSingleLine; |
122 | bool mToolTips; | 126 | bool mToolTips; |
123 | 127 | ||
124 | QColor mAlternateColor; | 128 | QColor mAlternateColor; |
125 | 129 | ||
126 | QPoint presspos; | 130 | QPoint presspos; |
127 | }; | 131 | }; |
128 | 132 | ||
129 | 133 | ||
130 | #endif | 134 | #endif |
diff --git a/kaddressbook/views/kaddressbookcardview.cpp b/kaddressbook/views/kaddressbookcardview.cpp index cce68b9..9c35fd6 100644 --- a/kaddressbook/views/kaddressbookcardview.cpp +++ b/kaddressbook/views/kaddressbookcardview.cpp | |||
@@ -83,262 +83,266 @@ class AddresseeCardViewItem : public CardViewItem | |||
83 | // Try all the selected fields until we find one with text. | 83 | // Try all the selected fields until we find one with text. |
84 | // This will limit the number of unlabeled icons in the view | 84 | // This will limit the number of unlabeled icons in the view |
85 | KABC::Field::List::Iterator iter; | 85 | KABC::Field::List::Iterator iter; |
86 | for (iter = mFields.begin(); iter != mFields.end(); ++iter) | 86 | for (iter = mFields.begin(); iter != mFields.end(); ++iter) |
87 | { | 87 | { |
88 | // insert empty fields or not? not doing so saves a bit of memory and CPU | 88 | // insert empty fields or not? not doing so saves a bit of memory and CPU |
89 | // (during geometry calculations), but prevents having equally | 89 | // (during geometry calculations), but prevents having equally |
90 | // wide label columns in all cards, unless CardViewItem/CardView search | 90 | // wide label columns in all cards, unless CardViewItem/CardView search |
91 | // globally for the widest label. (anders) | 91 | // globally for the widest label. (anders) |
92 | //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty()) | 92 | //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty()) |
93 | insertField((*iter)->label(), (*iter)->value( mAddressee )); | 93 | insertField((*iter)->label(), (*iter)->value( mAddressee )); |
94 | } | 94 | } |
95 | 95 | ||
96 | // We might want to make this the first field. hmm... -mpilone | 96 | // We might want to make this the first field. hmm... -mpilone |
97 | setCaption( mAddressee.realName() ); | 97 | setCaption( mAddressee.realName() ); |
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | private: | 101 | private: |
102 | KABC::Field::List mFields; | 102 | KABC::Field::List mFields; |
103 | bool mShowEmptyFields; | 103 | bool mShowEmptyFields; |
104 | KABC::AddressBook *mDocument; | 104 | KABC::AddressBook *mDocument; |
105 | KABC::Addressee mAddressee; | 105 | KABC::Addressee mAddressee; |
106 | }; | 106 | }; |
107 | 107 | ||
108 | /////////////////////////////// | 108 | /////////////////////////////// |
109 | // AddresseeCardView | 109 | // AddresseeCardView |
110 | 110 | ||
111 | AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name) | 111 | AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name) |
112 | : CardView(parent, name) | 112 | : CardView(parent, name) |
113 | { | 113 | { |
114 | setAcceptDrops(true); | 114 | setAcceptDrops(true); |
115 | } | 115 | } |
116 | 116 | ||
117 | AddresseeCardView::~AddresseeCardView() | 117 | AddresseeCardView::~AddresseeCardView() |
118 | { | 118 | { |
119 | } | 119 | } |
120 | void AddresseeCardView::printMe() | 120 | void AddresseeCardView::printMe() |
121 | { | 121 | { |
122 | #ifdef DESKTOP_VERSION | 122 | #ifdef DESKTOP_VERSION |
123 | QPrinter printer; | 123 | QPrinter printer; |
124 | if (!printer.setup() ) | 124 | if (!printer.setup() ) |
125 | return; | 125 | return; |
126 | QPainter p; | 126 | QPainter p; |
127 | p.begin ( &printer ); | 127 | p.begin ( &printer ); |
128 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); | 128 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); |
129 | float dx, dy; | 129 | float dx, dy; |
130 | int wid = (m.width() * 9)/10; | 130 | int wid = (m.width() * 9)/10; |
131 | dx = (float) wid/(float)contentsWidth (); | 131 | dx = (float) wid/(float)contentsWidth (); |
132 | dy = (float)(m.height()) / (float)contentsHeight (); | 132 | dy = (float)(m.height()) / (float)contentsHeight (); |
133 | float scale; | 133 | float scale; |
134 | // scale to fit the width or height of the paper | 134 | // scale to fit the width or height of the paper |
135 | if ( dx < dy ) | 135 | if ( dx < dy ) |
136 | scale = dx; | 136 | scale = dx; |
137 | else | 137 | else |
138 | scale = dy; | 138 | scale = dy; |
139 | p.translate( m.width()/10,0 ); | 139 | p.translate( m.width()/10,0 ); |
140 | p.scale( scale, scale ); | 140 | p.scale( scale, scale ); |
141 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); | 141 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); |
142 | p.end(); | 142 | p.end(); |
143 | repaint(); | 143 | repaint(); |
144 | #endif | 144 | #endif |
145 | } | 145 | } |
146 | 146 | ||
147 | 147 | ||
148 | void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e) | 148 | void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e) |
149 | { | 149 | { |
150 | #ifndef KAB_EMBEDDED | 150 | #ifndef KAB_EMBEDDED |
151 | if (QTextDrag::canDecode(e)) | 151 | if (QTextDrag::canDecode(e)) |
152 | e->accept(); | 152 | e->accept(); |
153 | #else //KAB_EMBEDDED | 153 | #else //KAB_EMBEDDED |
154 | qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented"); | 154 | qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented"); |
155 | #endif //KAB_EMBEDDED | 155 | #endif //KAB_EMBEDDED |
156 | } | 156 | } |
157 | 157 | ||
158 | void AddresseeCardView::dropEvent(QDropEvent *e) | 158 | void AddresseeCardView::dropEvent(QDropEvent *e) |
159 | { | 159 | { |
160 | emit addresseeDropped(e); | 160 | emit addresseeDropped(e); |
161 | } | 161 | } |
162 | 162 | ||
163 | void AddresseeCardView::startDrag() | 163 | void AddresseeCardView::startDrag() |
164 | { | 164 | { |
165 | emit startAddresseeDrag(); | 165 | emit startAddresseeDrag(); |
166 | } | 166 | } |
167 | 167 | ||
168 | 168 | ||
169 | /////////////////////////////// | 169 | /////////////////////////////// |
170 | // KAddressBookCardView | 170 | // KAddressBookCardView |
171 | 171 | ||
172 | KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab, | 172 | KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab, |
173 | QWidget *parent, const char *name ) | 173 | QWidget *parent, const char *name ) |
174 | : KAddressBookView( ab, parent, name ) | 174 | : KAddressBookView( ab, parent, name ) |
175 | { | 175 | { |
176 | mShowEmptyFields = false; | 176 | mShowEmptyFields = false; |
177 | 177 | ||
178 | // Init the GUI | 178 | // Init the GUI |
179 | QVBoxLayout *layout = new QVBoxLayout(viewWidget()); | 179 | QVBoxLayout *layout = new QVBoxLayout(viewWidget()); |
180 | 180 | ||
181 | mCardView = new AddresseeCardView(viewWidget(), "mCardView"); | 181 | mCardView = new AddresseeCardView(viewWidget(), "mCardView"); |
182 | mCardView->setSelectionMode(CardView::Extended); | 182 | mCardView->setSelectionMode(CardView::Extended); |
183 | layout->addWidget(mCardView); | 183 | layout->addWidget(mCardView); |
184 | 184 | ||
185 | // Connect up the signals | 185 | // Connect up the signals |
186 | connect(mCardView, SIGNAL(executed(CardViewItem *)), | 186 | connect(mCardView, SIGNAL(executed(CardViewItem *)), |
187 | this, SLOT(addresseeExecuted(CardViewItem *))); | 187 | this, SLOT(addresseeExecuted(CardViewItem *))); |
188 | connect(mCardView, SIGNAL(selectionChanged()), | 188 | connect(mCardView, SIGNAL(selectionChanged()), |
189 | this, SLOT(addresseeSelected())); | 189 | this, SLOT(addresseeSelected())); |
190 | connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)), | 190 | connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)), |
191 | this, SIGNAL(dropped(QDropEvent*))); | 191 | this, SIGNAL(dropped(QDropEvent*))); |
192 | connect(mCardView, SIGNAL(startAddresseeDrag()), | 192 | connect(mCardView, SIGNAL(startAddresseeDrag()), |
193 | this, SIGNAL(startDrag())); | 193 | this, SIGNAL(startDrag())); |
194 | connect(this, SIGNAL(printView()), | 194 | connect(this, SIGNAL(printView()), |
195 | mCardView , SLOT(printMe())); | 195 | mCardView , SLOT(printMe())); |
196 | } | 196 | } |
197 | 197 | ||
198 | KAddressBookCardView::~KAddressBookCardView() | 198 | KAddressBookCardView::~KAddressBookCardView() |
199 | { | 199 | { |
200 | } | 200 | } |
201 | void KAddressBookCardView::setFocusAV() | 201 | void KAddressBookCardView::setFocusAV() |
202 | { | 202 | { |
203 | if ( mCardView ) | 203 | if ( mCardView ) |
204 | mCardView->setFocus(); | 204 | mCardView->setFocus(); |
205 | 205 | ||
206 | } | 206 | } |
207 | void KAddressBookCardView::scrollUP() | 207 | void KAddressBookCardView::scrollUP() |
208 | { | 208 | { |
209 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); | 209 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); |
210 | QApplication::postEvent( mCardView, ev ); | 210 | QApplication::postEvent( mCardView, ev ); |
211 | ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Up, 0,0 ); | ||
212 | QApplication::postEvent( mCardView, ev ); | ||
211 | 213 | ||
212 | } | 214 | } |
213 | void KAddressBookCardView::scrollDOWN() | 215 | void KAddressBookCardView::scrollDOWN() |
214 | { | 216 | { |
215 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); | 217 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); |
216 | QApplication::postEvent( mCardView, ev ); | 218 | QApplication::postEvent( mCardView, ev ); |
219 | ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Down, 0,0 ); | ||
220 | QApplication::postEvent( mCardView, ev ); | ||
217 | } | 221 | } |
218 | void KAddressBookCardView::readConfig(KConfig *config) | 222 | void KAddressBookCardView::readConfig(KConfig *config) |
219 | { | 223 | { |
220 | KAddressBookView::readConfig(config); | 224 | KAddressBookView::readConfig(config); |
221 | 225 | ||
222 | // costum colors? | 226 | // costum colors? |
223 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) | 227 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) |
224 | { | 228 | { |
225 | QPalette p( mCardView->palette() ); | 229 | QPalette p( mCardView->palette() ); |
226 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); | 230 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); |
227 | p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); | 231 | p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); |
228 | c = p.color(QPalette::Normal, QColorGroup::Text ); | 232 | c = p.color(QPalette::Normal, QColorGroup::Text ); |
229 | p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); | 233 | p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); |
230 | c = p.color(QPalette::Normal, QColorGroup::Button ); | 234 | c = p.color(QPalette::Normal, QColorGroup::Button ); |
231 | p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); | 235 | p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); |
232 | c = p.color(QPalette::Normal, QColorGroup::ButtonText ); | 236 | c = p.color(QPalette::Normal, QColorGroup::ButtonText ); |
233 | p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); | 237 | p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); |
234 | c = p.color(QPalette::Normal, QColorGroup::Highlight ); | 238 | c = p.color(QPalette::Normal, QColorGroup::Highlight ); |
235 | p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); | 239 | p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); |
236 | c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); | 240 | c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); |
237 | p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); | 241 | p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); |
238 | mCardView->viewport()->setPalette( p ); | 242 | mCardView->viewport()->setPalette( p ); |
239 | } | 243 | } |
240 | else | 244 | else |
241 | { | 245 | { |
242 | // needed if turned off during a session. | 246 | // needed if turned off during a session. |
243 | mCardView->viewport()->setPalette( mCardView->palette() ); | 247 | mCardView->viewport()->setPalette( mCardView->palette() ); |
244 | } | 248 | } |
245 | 249 | ||
246 | //custom fonts? | 250 | //custom fonts? |
247 | QFont f( font() ); | 251 | QFont f( font() ); |
248 | if ( config->readBoolEntry( "EnableCustomFonts", false ) ) | 252 | if ( config->readBoolEntry( "EnableCustomFonts", false ) ) |
249 | { | 253 | { |
250 | mCardView->setFont( config->readFontEntry( "TextFont", &f) ); | 254 | mCardView->setFont( config->readFontEntry( "TextFont", &f) ); |
251 | f.setBold( true ); | 255 | f.setBold( true ); |
252 | mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); | 256 | mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); |
253 | } | 257 | } |
254 | else | 258 | else |
255 | { | 259 | { |
256 | mCardView->setFont( f ); | 260 | mCardView->setFont( f ); |
257 | f.setBold( true ); | 261 | f.setBold( true ); |
258 | mCardView->setHeaderFont( f ); | 262 | mCardView->setHeaderFont( f ); |
259 | } | 263 | } |
260 | 264 | ||
261 | mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true)); | 265 | mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true)); |
262 | mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators", | 266 | mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators", |
263 | true)); | 267 | true)); |
264 | mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false)); | 268 | mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false)); |
265 | mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false); | 269 | mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false); |
266 | 270 | ||
267 | mCardView->setShowEmptyFields( mShowEmptyFields ); | 271 | mCardView->setShowEmptyFields( mShowEmptyFields ); |
268 | 272 | ||
269 | mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) ); | 273 | mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) ); |
270 | mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) ); | 274 | mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) ); |
271 | mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) ); | 275 | mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) ); |
272 | mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) ); | 276 | mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) ); |
273 | 277 | ||
274 | #if 0 | 278 | #if 0 |
275 | // LR KABPrefs::instance()->mHonorSingleClick is handled and fixed in cardviews contentsMouseDoubleClickEven | 279 | // LR KABPrefs::instance()->mHonorSingleClick is handled and fixed in cardviews contentsMouseDoubleClickEven |
276 | disconnect(mCardView, SIGNAL(executed(CardViewItem *)), | 280 | disconnect(mCardView, SIGNAL(executed(CardViewItem *)), |
277 | this, SLOT(addresseeExecuted(CardViewItem *))); | 281 | this, SLOT(addresseeExecuted(CardViewItem *))); |
278 | 282 | ||
279 | if (KABPrefs::instance()->mHonorSingleClick) | 283 | if (KABPrefs::instance()->mHonorSingleClick) |
280 | connect(mCardView, SIGNAL(executed(CardViewItem *)), | 284 | connect(mCardView, SIGNAL(executed(CardViewItem *)), |
281 | this, SLOT(addresseeExecuted(CardViewItem *))); | 285 | this, SLOT(addresseeExecuted(CardViewItem *))); |
282 | else | 286 | else |
283 | connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), | 287 | connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), |
284 | this, SLOT(addresseeExecuted(CardViewItem *))); | 288 | this, SLOT(addresseeExecuted(CardViewItem *))); |
285 | #endif | 289 | #endif |
286 | 290 | ||
287 | connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), | 291 | connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), |
288 | this, SLOT(addresseeExecuted(CardViewItem *))); | 292 | this, SLOT(addresseeExecuted(CardViewItem *))); |
289 | } | 293 | } |
290 | 294 | ||
291 | void KAddressBookCardView::writeConfig( KConfig *config ) | 295 | void KAddressBookCardView::writeConfig( KConfig *config ) |
292 | { | 296 | { |
293 | config->writeEntry( "ItemWidth", mCardView->itemWidth() ); | 297 | config->writeEntry( "ItemWidth", mCardView->itemWidth() ); |
294 | KAddressBookView::writeConfig( config ); | 298 | KAddressBookView::writeConfig( config ); |
295 | } | 299 | } |
296 | void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) | 300 | void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) |
297 | { | 301 | { |
298 | mCardView->clear(); | 302 | mCardView->clear(); |
299 | if ( s.isEmpty() || s == "*" ) { | 303 | if ( s.isEmpty() || s == "*" ) { |
300 | refresh(); | 304 | refresh(); |
301 | return; | 305 | return; |
302 | } | 306 | } |
303 | QRegExp re = getRegExp( s ); | 307 | QRegExp re = getRegExp( s ); |
304 | if (!re.isValid()) | 308 | if (!re.isValid()) |
305 | return; | 309 | return; |
306 | mCardView->viewport()->setUpdatesEnabled( false ); | 310 | mCardView->viewport()->setUpdatesEnabled( false ); |
307 | KABC::Addressee::List addresseeList = addressees(); | 311 | KABC::Addressee::List addresseeList = addressees(); |
308 | KABC::Addressee::List::Iterator it; | 312 | KABC::Addressee::List::Iterator it; |
309 | if ( field ) { | 313 | if ( field ) { |
310 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 314 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
311 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 315 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
312 | continue; | 316 | continue; |
313 | #if QT_VERSION >= 0x030000 | 317 | #if QT_VERSION >= 0x030000 |
314 | if (re.search(field->value( *it ).lower()) != -1) | 318 | if (re.search(field->value( *it ).lower()) != -1) |
315 | #else | 319 | #else |
316 | if (re.match(field->value( *it ).lower()) != -1) | 320 | if (re.match(field->value( *it ).lower()) != -1) |
317 | #endif | 321 | #endif |
318 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | 322 | new AddresseeCardViewItem(fields(), mShowEmptyFields, |
319 | addressBook(), *it, mCardView); | 323 | addressBook(), *it, mCardView); |
320 | 324 | ||
321 | } | 325 | } |
322 | } else { | 326 | } else { |
323 | KABC::Field::List fieldList = allFields(); | 327 | KABC::Field::List fieldList = allFields(); |
324 | KABC::Field::List::ConstIterator fieldIt; | 328 | KABC::Field::List::ConstIterator fieldIt; |
325 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 329 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
326 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 330 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
327 | continue; | 331 | continue; |
328 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { | 332 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { |
329 | #if QT_VERSION >= 0x030000 | 333 | #if QT_VERSION >= 0x030000 |
330 | if (re.search((*fieldIt)->value( *it ).lower()) != -1) | 334 | if (re.search((*fieldIt)->value( *it ).lower()) != -1) |
331 | #else | 335 | #else |
332 | if (re.match((*fieldIt)->value( *it ).lower()) != -1) | 336 | if (re.match((*fieldIt)->value( *it ).lower()) != -1) |
333 | #endif | 337 | #endif |
334 | { | 338 | { |
335 | new AddresseeCardViewItem(fields(), mShowEmptyFields, | 339 | new AddresseeCardViewItem(fields(), mShowEmptyFields, |
336 | addressBook(), *it, mCardView); | 340 | addressBook(), *it, mCardView); |
337 | break; | 341 | break; |
338 | } | 342 | } |
339 | } | 343 | } |
340 | } | 344 | } |
341 | } | 345 | } |
342 | mCardView->viewport()->setUpdatesEnabled( true ); | 346 | mCardView->viewport()->setUpdatesEnabled( true ); |
343 | mCardView->viewport()->update(); | 347 | mCardView->viewport()->update(); |
344 | if ( mCardView->firstItem() ) { | 348 | if ( mCardView->firstItem() ) { |
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp index f4b008c..e322473 100644 --- a/kaddressbook/views/kaddressbooktableview.cpp +++ b/kaddressbook/views/kaddressbooktableview.cpp | |||
@@ -1,196 +1,200 @@ | |||
1 | // $Id$ | 1 | // $Id$ |
2 | 2 | ||
3 | #include <qvbox.h> | 3 | #include <qvbox.h> |
4 | #include <qlistbox.h> | 4 | #include <qlistbox.h> |
5 | #include <qwidget.h> | 5 | #include <qwidget.h> |
6 | #include <qfile.h> | 6 | #include <qfile.h> |
7 | #include <qimage.h> | 7 | #include <qimage.h> |
8 | #include <qcombobox.h> | 8 | #include <qcombobox.h> |
9 | #include <qapplication.h> | 9 | #include <qapplication.h> |
10 | #include <qdragobject.h> | 10 | #include <qdragobject.h> |
11 | #include <qevent.h> | 11 | #include <qevent.h> |
12 | #include <qurl.h> | 12 | #include <qurl.h> |
13 | #include <qpixmap.h> | 13 | #include <qpixmap.h> |
14 | 14 | ||
15 | #include <kabc/addressbook.h> | 15 | #include <kabc/addressbook.h> |
16 | #include <kapplication.h> | 16 | #include <kapplication.h> |
17 | #include <kconfig.h> | 17 | #include <kconfig.h> |
18 | #include <kcolorbutton.h> | 18 | #include <kcolorbutton.h> |
19 | #include <kdebug.h> | 19 | #include <kdebug.h> |
20 | #include <kglobal.h> | 20 | #include <kglobal.h> |
21 | #include <kiconloader.h> | 21 | #include <kiconloader.h> |
22 | #include <klineedit.h> | 22 | #include <klineedit.h> |
23 | #include <klocale.h> | 23 | #include <klocale.h> |
24 | #include <kmessagebox.h> | 24 | #include <kmessagebox.h> |
25 | #include <kurl.h> | 25 | #include <kurl.h> |
26 | #include <kurlrequester.h> | 26 | #include <kurlrequester.h> |
27 | 27 | ||
28 | //US#include "configuretableviewdialog.h" | 28 | //US#include "configuretableviewdialog.h" |
29 | #include "contactlistview.h" | 29 | #include "contactlistview.h" |
30 | #include "kabprefs.h" | 30 | #include "kabprefs.h" |
31 | #include "undocmds.h" | 31 | #include "undocmds.h" |
32 | #include "viewmanager.h" | 32 | #include "viewmanager.h" |
33 | 33 | ||
34 | #include <qlayout.h> | 34 | #include <qlayout.h> |
35 | #include <qheader.h> | 35 | #include <qheader.h> |
36 | #include <qregexp.h> | 36 | #include <qregexp.h> |
37 | 37 | ||
38 | #include "kaddressbooktableview.h" | 38 | #include "kaddressbooktableview.h" |
39 | 39 | ||
40 | 40 | ||
41 | KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab, | 41 | KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab, |
42 | QWidget *parent, const char *name ) | 42 | QWidget *parent, const char *name ) |
43 | : KAddressBookView( ab, parent, name ) | 43 | : KAddressBookView( ab, parent, name ) |
44 | { | 44 | { |
45 | mainLayout = new QVBoxLayout( viewWidget(), 2 ); | 45 | mainLayout = new QVBoxLayout( viewWidget(), 2 ); |
46 | 46 | ||
47 | // The list view will be created when the config is read. | 47 | // The list view will be created when the config is read. |
48 | mListView = 0; | 48 | mListView = 0; |
49 | } | 49 | } |
50 | 50 | ||
51 | KAddressBookTableView::~KAddressBookTableView() | 51 | KAddressBookTableView::~KAddressBookTableView() |
52 | { | 52 | { |
53 | } | 53 | } |
54 | void KAddressBookTableView::setFocusAV() | 54 | void KAddressBookTableView::setFocusAV() |
55 | { | 55 | { |
56 | if ( mListView ) | 56 | if ( mListView ) |
57 | mListView->setFocus(); | 57 | mListView->setFocus(); |
58 | 58 | ||
59 | } | 59 | } |
60 | void KAddressBookTableView::scrollUP() | 60 | void KAddressBookTableView::scrollUP() |
61 | { | 61 | { |
62 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); | 62 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 ); |
63 | QApplication::postEvent( mListView, ev ); | 63 | QApplication::postEvent( mListView, ev ); |
64 | ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Up, 0,0 ); | ||
65 | QApplication::postEvent( mListView, ev ); | ||
64 | } | 66 | } |
65 | void KAddressBookTableView::scrollDOWN() | 67 | void KAddressBookTableView::scrollDOWN() |
66 | { | 68 | { |
67 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); | 69 | QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 ); |
68 | QApplication::postEvent( mListView, ev ); | 70 | QApplication::postEvent( mListView, ev ); |
71 | ev = new QKeyEvent ( QEvent::KeyRelease, Qt::Key_Down, 0,0 ); | ||
72 | QApplication::postEvent( mListView, ev ); | ||
69 | } | 73 | } |
70 | void KAddressBookTableView::reconstructListView() | 74 | void KAddressBookTableView::reconstructListView() |
71 | { | 75 | { |
72 | if (mListView) | 76 | if (mListView) |
73 | { | 77 | { |
74 | disconnect(mListView, SIGNAL(selectionChanged()), | 78 | disconnect(mListView, SIGNAL(selectionChanged()), |
75 | this, SLOT(addresseeSelected())); | 79 | this, SLOT(addresseeSelected())); |
76 | disconnect(mListView, SIGNAL(executed(QListViewItem*)), | 80 | disconnect(mListView, SIGNAL(executed(QListViewItem*)), |
77 | this, SLOT(addresseeExecuted(QListViewItem*))); | 81 | this, SLOT(addresseeExecuted(QListViewItem*))); |
78 | disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)), | 82 | disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)), |
79 | this, SLOT(addresseeExecuted(QListViewItem*))); | 83 | this, SLOT(addresseeExecuted(QListViewItem*))); |
80 | disconnect(mListView, SIGNAL(startAddresseeDrag()), this, | 84 | disconnect(mListView, SIGNAL(startAddresseeDrag()), this, |
81 | SIGNAL(startDrag())); | 85 | SIGNAL(startDrag())); |
82 | disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)), | 86 | disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)), |
83 | this, SLOT(addresseeExecuted(QListViewItem*))); | 87 | this, SLOT(addresseeExecuted(QListViewItem*))); |
84 | 88 | ||
85 | disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, | 89 | disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, |
86 | SIGNAL(dropped(QDropEvent*))); | 90 | SIGNAL(dropped(QDropEvent*))); |
87 | delete mListView; | 91 | delete mListView; |
88 | } | 92 | } |
89 | 93 | ||
90 | mListView = new ContactListView( this, addressBook(), viewWidget() ); | 94 | mListView = new ContactListView( this, addressBook(), viewWidget() ); |
91 | 95 | ||
92 | connect(this, SIGNAL(printView()), | 96 | connect(this, SIGNAL(printView()), |
93 | mListView , SLOT(printMe())); | 97 | mListView , SLOT(printMe())); |
94 | //US set singleClick manually, because it is no global configparameter in embedded space | 98 | //US set singleClick manually, because it is no global configparameter in embedded space |
95 | mListView->setSingleClick(KABPrefs::instance()->mHonorSingleClick); | 99 | mListView->setSingleClick(KABPrefs::instance()->mHonorSingleClick); |
96 | 100 | ||
97 | // Add the columns | 101 | // Add the columns |
98 | KABC::Field::List fieldList = fields(); | 102 | KABC::Field::List fieldList = fields(); |
99 | KABC::Field::List::ConstIterator it; | 103 | KABC::Field::List::ConstIterator it; |
100 | 104 | ||
101 | int c = 0; | 105 | int c = 0; |
102 | for( it = fieldList.begin(); it != fieldList.end(); ++it ) { | 106 | for( it = fieldList.begin(); it != fieldList.end(); ++it ) { |
103 | mListView->addColumn( (*it)->label() ); | 107 | mListView->addColumn( (*it)->label() ); |
104 | mListView->setColumnWidthMode(c++, QListView::Manual); | 108 | mListView->setColumnWidthMode(c++, QListView::Manual); |
105 | //US | 109 | //US |
106 | // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1()); | 110 | // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1()); |
107 | } | 111 | } |
108 | 112 | ||
109 | connect(mListView, SIGNAL(selectionChanged()), | 113 | connect(mListView, SIGNAL(selectionChanged()), |
110 | this, SLOT(addresseeSelected())); | 114 | this, SLOT(addresseeSelected())); |
111 | connect(mListView, SIGNAL(startAddresseeDrag()), this, | 115 | connect(mListView, SIGNAL(startAddresseeDrag()), this, |
112 | SIGNAL(startDrag())); | 116 | SIGNAL(startDrag())); |
113 | connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, | 117 | connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, |
114 | SIGNAL(dropped(QDropEvent*))); | 118 | SIGNAL(dropped(QDropEvent*))); |
115 | 119 | ||
116 | if (KABPrefs::instance()->mHonorSingleClick) { | 120 | if (KABPrefs::instance()->mHonorSingleClick) { |
117 | // qDebug("KAddressBookTableView::reconstructListView single"); | 121 | // qDebug("KAddressBookTableView::reconstructListView single"); |
118 | connect(mListView, SIGNAL(executed(QListViewItem*)), | 122 | connect(mListView, SIGNAL(executed(QListViewItem*)), |
119 | this, SLOT(addresseeExecuted(QListViewItem*))); | 123 | this, SLOT(addresseeExecuted(QListViewItem*))); |
120 | } else { | 124 | } else { |
121 | // qDebug("KAddressBookTableView::reconstructListView double"); | 125 | // qDebug("KAddressBookTableView::reconstructListView double"); |
122 | connect(mListView, SIGNAL(doubleClicked(QListViewItem*)), | 126 | connect(mListView, SIGNAL(doubleClicked(QListViewItem*)), |
123 | this, SLOT(addresseeExecuted(QListViewItem*))); | 127 | this, SLOT(addresseeExecuted(QListViewItem*))); |
124 | } | 128 | } |
125 | connect(mListView, SIGNAL(returnPressed(QListViewItem*)), | 129 | connect(mListView, SIGNAL(returnPressed(QListViewItem*)), |
126 | this, SLOT(addresseeExecuted(QListViewItem*))); | 130 | this, SLOT(addresseeExecuted(QListViewItem*))); |
127 | connect(mListView, SIGNAL(signalDelete()), | 131 | connect(mListView, SIGNAL(signalDelete()), |
128 | this, SLOT(addresseeDeleted())); | 132 | this, SLOT(addresseeDeleted())); |
129 | 133 | ||
130 | //US performceimprovement. Refresh is done from the outside | 134 | //US performceimprovement. Refresh is done from the outside |
131 | //US refresh(); | 135 | //US refresh(); |
132 | 136 | ||
133 | mListView->setSorting( 0, true ); | 137 | mListView->setSorting( 0, true ); |
134 | mainLayout->addWidget( mListView ); | 138 | mainLayout->addWidget( mListView ); |
135 | mainLayout->activate(); | 139 | mainLayout->activate(); |
136 | mListView->show(); | 140 | mListView->show(); |
137 | } | 141 | } |
138 | 142 | ||
139 | void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) | 143 | void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) |
140 | { | 144 | { |
141 | mListView->clear(); | 145 | mListView->clear(); |
142 | if ( s.isEmpty() || s == "*" ) { | 146 | if ( s.isEmpty() || s == "*" ) { |
143 | refresh(); | 147 | refresh(); |
144 | return; | 148 | return; |
145 | } | 149 | } |
146 | QRegExp re = getRegExp( s ); | 150 | QRegExp re = getRegExp( s ); |
147 | if (!re.isValid()) | 151 | if (!re.isValid()) |
148 | return; | 152 | return; |
149 | KABC::Addressee::List addresseeList = addressees(); | 153 | KABC::Addressee::List addresseeList = addressees(); |
150 | KABC::Addressee::List::Iterator it; | 154 | KABC::Addressee::List::Iterator it; |
151 | if ( field ) { | 155 | if ( field ) { |
152 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 156 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
153 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 157 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
154 | continue; | 158 | continue; |
155 | #if QT_VERSION >= 0x030000 | 159 | #if QT_VERSION >= 0x030000 |
156 | if (re.search(field->value( *it ).lower()) == 0) | 160 | if (re.search(field->value( *it ).lower()) == 0) |
157 | #else | 161 | #else |
158 | if (re.match(field->value( *it ).lower()) != -1) | 162 | if (re.match(field->value( *it ).lower()) != -1) |
159 | #endif | 163 | #endif |
160 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | 164 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); |
161 | 165 | ||
162 | } | 166 | } |
163 | } else { | 167 | } else { |
164 | KABC::Field::List fieldList = allFields(); | 168 | KABC::Field::List fieldList = allFields(); |
165 | KABC::Field::List::ConstIterator fieldIt; | 169 | KABC::Field::List::ConstIterator fieldIt; |
166 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 170 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
167 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 171 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
168 | continue; | 172 | continue; |
169 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { | 173 | for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { |
170 | #if QT_VERSION >= 0x030000 | 174 | #if QT_VERSION >= 0x030000 |
171 | if (re.search((*fieldIt)->value( *it ).lower()) != -1) | 175 | if (re.search((*fieldIt)->value( *it ).lower()) != -1) |
172 | #else | 176 | #else |
173 | if (re.match((*fieldIt)->value( *it ).lower()) != -1) | 177 | if (re.match((*fieldIt)->value( *it ).lower()) != -1) |
174 | #endif | 178 | #endif |
175 | { | 179 | { |
176 | //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); | 180 | //qDebug("match %s %s %s", pattern.latin1(), (*fieldIt)->value( *it ).latin1(), (*fieldIt)->label().latin1() ); |
177 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | 181 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); |
178 | break; | 182 | break; |
179 | } | 183 | } |
180 | } | 184 | } |
181 | } | 185 | } |
182 | } | 186 | } |
183 | // Sometimes the background pixmap gets messed up when we add lots | 187 | // Sometimes the background pixmap gets messed up when we add lots |
184 | // of items. | 188 | // of items. |
185 | mListView->repaint(); | 189 | mListView->repaint(); |
186 | if ( mListView->firstChild() ) { | 190 | if ( mListView->firstChild() ) { |
187 | mListView->setCurrentItem ( mListView->firstChild() ); | 191 | mListView->setCurrentItem ( mListView->firstChild() ); |
188 | mListView->setSelected ( mListView->firstChild(), true ); | 192 | mListView->setSelected ( mListView->firstChild(), true ); |
189 | } | 193 | } |
190 | else | 194 | else |
191 | emit selected(QString::null); | 195 | emit selected(QString::null); |
192 | 196 | ||
193 | } | 197 | } |
194 | void KAddressBookTableView::writeConfig(KConfig *config) | 198 | void KAddressBookTableView::writeConfig(KConfig *config) |
195 | { | 199 | { |
196 | KAddressBookView::writeConfig(config); | 200 | KAddressBookView::writeConfig(config); |
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index ca35a86..b9ce4f4 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp | |||
@@ -875,256 +875,257 @@ Incidence *MonthViewCell::selectedIncidence() | |||
875 | return mitem->incidence(); | 875 | return mitem->incidence(); |
876 | } | 876 | } |
877 | 877 | ||
878 | QDate MonthViewCell::selectedIncidenceDate() | 878 | QDate MonthViewCell::selectedIncidenceDate() |
879 | { | 879 | { |
880 | QDate qd; | 880 | QDate qd; |
881 | int index = currentItem(); | 881 | int index = currentItem(); |
882 | if ( index < 0 ) return qd; | 882 | if ( index < 0 ) return qd; |
883 | 883 | ||
884 | MonthViewItem *mitem = | 884 | MonthViewItem *mitem = |
885 | static_cast<MonthViewItem *>( item( index ) ); | 885 | static_cast<MonthViewItem *>( item( index ) ); |
886 | 886 | ||
887 | if ( !mitem ) return qd; | 887 | if ( !mitem ) return qd; |
888 | 888 | ||
889 | return mitem->incidenceDate(); | 889 | return mitem->incidenceDate(); |
890 | } | 890 | } |
891 | 891 | ||
892 | void MonthViewCell::deselect() | 892 | void MonthViewCell::deselect() |
893 | { | 893 | { |
894 | clearSelection(); | 894 | clearSelection(); |
895 | enableScrollBars( false ); | 895 | enableScrollBars( false ); |
896 | // updateCell(); | 896 | // updateCell(); |
897 | } | 897 | } |
898 | void MonthViewCell::select() | 898 | void MonthViewCell::select() |
899 | { | 899 | { |
900 | ;// updateCell(); | 900 | ;// updateCell(); |
901 | } | 901 | } |
902 | 902 | ||
903 | void MonthViewCell::resizeEvent ( QResizeEvent * e ) | 903 | void MonthViewCell::resizeEvent ( QResizeEvent * e ) |
904 | { | 904 | { |
905 | if ( !mMonthView->isUpdatePossible() ) | 905 | if ( !mMonthView->isUpdatePossible() ) |
906 | return; | 906 | return; |
907 | //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height()); | 907 | //qDebug("++++++++++++++MonthViewCell::resizeEvent %d %d ", width(), height()); |
908 | deselect(); | 908 | deselect(); |
909 | mLabel->setMaximumHeight( height() - lineWidth()*2 ); | 909 | mLabel->setMaximumHeight( height() - lineWidth()*2 ); |
910 | 910 | ||
911 | QString text; | 911 | QString text; |
912 | mLabel->setText( text ); | 912 | mLabel->setText( text ); |
913 | bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; | 913 | bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; |
914 | if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { | 914 | if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { |
915 | text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; | 915 | text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; |
916 | mLabel->resize( mLabelBigSize ); | 916 | mLabel->resize( mLabelBigSize ); |
917 | text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); | 917 | text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); |
918 | } else { | 918 | } else { |
919 | mLabel->resize( mLabelSize ); | 919 | mLabel->resize( mLabelSize ); |
920 | text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); | 920 | text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); |
921 | } | 921 | } |
922 | mLabel->setText( text ); | 922 | mLabel->setText( text ); |
923 | 923 | ||
924 | int size = height() - mLabel->height() - lineWidth()-1; | 924 | int size = height() - mLabel->height() - lineWidth()-1; |
925 | //qDebug("LW %d ", lineWidth()); | 925 | //qDebug("LW %d ", lineWidth()); |
926 | if ( size > 0 ) | 926 | if ( size > 0 ) |
927 | verticalScrollBar()->setMaximumHeight( size ); | 927 | verticalScrollBar()->setMaximumHeight( size ); |
928 | size = width() - mLabel->width() -lineWidth()-1; | 928 | size = width() - mLabel->width() -lineWidth()-1; |
929 | if ( size > 0 ) | 929 | if ( size > 0 ) |
930 | horizontalScrollBar()->setMaximumWidth( size ); | 930 | horizontalScrollBar()->setMaximumWidth( size ); |
931 | mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() ); | 931 | mLabel->move( width()-lineWidth() - mLabel->width(), height()-lineWidth() - mLabel->height() ); |
932 | //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); | 932 | //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); |
933 | // mItemList->resize ( width(), height () ); | 933 | // mItemList->resize ( width(), height () ); |
934 | if ( e ) | 934 | if ( e ) |
935 | KNoScrollListBox::resizeEvent ( e ); | 935 | KNoScrollListBox::resizeEvent ( e ); |
936 | } | 936 | } |
937 | 937 | ||
938 | void MonthViewCell::defaultAction( QListBoxItem *item ) | 938 | void MonthViewCell::defaultAction( QListBoxItem *item ) |
939 | { | 939 | { |
940 | if ( !item ) return; | 940 | if ( !item ) return; |
941 | 941 | ||
942 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); | 942 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); |
943 | Incidence *incidence = eventItem->incidence(); | 943 | Incidence *incidence = eventItem->incidence(); |
944 | if ( incidence ) mMonthView->defaultAction( incidence ); | 944 | if ( incidence ) mMonthView->defaultAction( incidence ); |
945 | } | 945 | } |
946 | void MonthViewCell::showDay() | 946 | void MonthViewCell::showDay() |
947 | { | 947 | { |
948 | emit showDaySignal( date() ); | 948 | emit showDaySignal( date() ); |
949 | } | 949 | } |
950 | void MonthViewCell::newEvent() | 950 | void MonthViewCell::newEvent() |
951 | { | 951 | { |
952 | QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); | 952 | QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); |
953 | emit newEventSignal( dt ); | 953 | emit newEventSignal( dt ); |
954 | } | 954 | } |
955 | void MonthViewCell::cellClicked( QListBoxItem *item ) | 955 | void MonthViewCell::cellClicked( QListBoxItem *item ) |
956 | { | 956 | { |
957 | static QListBoxItem * lastClicked = 0; | 957 | static QListBoxItem * lastClicked = 0; |
958 | if ( item == 0 ) { | 958 | if ( item == 0 ) { |
959 | QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); | 959 | QDateTime dt( date(), QTime( KOPrefs::instance()->mStartTime, 0 ) ); |
960 | emit newEventSignal( dt ); | 960 | emit newEventSignal( dt ); |
961 | return; | 961 | return; |
962 | } | 962 | } |
963 | /* | 963 | /* |
964 | if ( lastClicked ) | 964 | if ( lastClicked ) |
965 | if ( ! item ) { | 965 | if ( ! item ) { |
966 | if ( lastClicked->listBox() != item->listBox() ) | 966 | if ( lastClicked->listBox() != item->listBox() ) |
967 | lastClicked->listBox()->clearSelection(); | 967 | lastClicked->listBox()->clearSelection(); |
968 | } | 968 | } |
969 | */ | 969 | */ |
970 | 970 | ||
971 | mMonthView->setSelectedCell( this ); | 971 | mMonthView->setSelectedCell( this ); |
972 | if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true ); | 972 | if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true ); |
973 | select(); | 973 | select(); |
974 | } | 974 | } |
975 | 975 | ||
976 | void MonthViewCell::contextMenu( QListBoxItem *item ) | 976 | void MonthViewCell::contextMenu( QListBoxItem *item ) |
977 | { | 977 | { |
978 | if ( !item ) return; | 978 | if ( !item ) return; |
979 | 979 | ||
980 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); | 980 | MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); |
981 | Incidence *incidence = eventItem->incidence(); | 981 | Incidence *incidence = eventItem->incidence(); |
982 | if ( incidence ) mMonthView->showContextMenu( incidence ); | 982 | if ( incidence ) mMonthView->showContextMenu( incidence ); |
983 | } | 983 | } |
984 | 984 | ||
985 | void MonthViewCell::selection( QListBoxItem *item ) | 985 | void MonthViewCell::selection( QListBoxItem *item ) |
986 | { | 986 | { |
987 | if ( !item ) return; | 987 | if ( !item ) return; |
988 | 988 | ||
989 | mMonthView->setSelectedCell( this ); | 989 | mMonthView->setSelectedCell( this ); |
990 | } | 990 | } |
991 | 991 | ||
992 | 992 | ||
993 | // ******************************************************************************* | 993 | // ******************************************************************************* |
994 | // ******************************************************************************* | 994 | // ******************************************************************************* |
995 | // ******************************************************************************* | 995 | // ******************************************************************************* |
996 | 996 | ||
997 | 997 | ||
998 | KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) | 998 | KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) |
999 | : KOEventView( calendar, parent, name ), | 999 | : KOEventView( calendar, parent, name ), |
1000 | mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), | 1000 | mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), |
1001 | mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) | 1001 | mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) |
1002 | { | 1002 | { |
1003 | mFlagKeyPressed = false; | ||
1003 | mShortDayLabelsM = false; | 1004 | mShortDayLabelsM = false; |
1004 | mShortDayLabelsW = false; | 1005 | mShortDayLabelsW = false; |
1005 | skipResize = false; | 1006 | skipResize = false; |
1006 | clPending = true; | 1007 | clPending = true; |
1007 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); | 1008 | mNavigatorBar = new NavigatorBar( QDate::currentDate(), this, "useBigPixmaps" ); |
1008 | mWidStack = new QWidgetStack( this ); | 1009 | mWidStack = new QWidgetStack( this ); |
1009 | QVBoxLayout* hb = new QVBoxLayout( this ); | 1010 | QVBoxLayout* hb = new QVBoxLayout( this ); |
1010 | mMonthView = new QWidget( mWidStack ); | 1011 | mMonthView = new QWidget( mWidStack ); |
1011 | mWeekView = new QWidget( mWidStack ); | 1012 | mWeekView = new QWidget( mWidStack ); |
1012 | #if QT_VERSION >= 0x030000 | 1013 | #if QT_VERSION >= 0x030000 |
1013 | mWidStack->addWidget(mMonthView ); | 1014 | mWidStack->addWidget(mMonthView ); |
1014 | mWidStack->addWidget(mWeekView ); | 1015 | mWidStack->addWidget(mWeekView ); |
1015 | #else | 1016 | #else |
1016 | mWidStack->addWidget( mMonthView, 1 ); | 1017 | mWidStack->addWidget( mMonthView, 1 ); |
1017 | mWidStack->addWidget( mWeekView , 1 ); | 1018 | mWidStack->addWidget( mWeekView , 1 ); |
1018 | #endif | 1019 | #endif |
1019 | hb->addWidget( mNavigatorBar ); | 1020 | hb->addWidget( mNavigatorBar ); |
1020 | hb->addWidget( mWidStack ); | 1021 | hb->addWidget( mWidStack ); |
1021 | mShowWeekView = KOPrefs::instance()->mMonthViewWeek; | 1022 | mShowWeekView = KOPrefs::instance()->mMonthViewWeek; |
1022 | updatePossible = false; | 1023 | updatePossible = false; |
1023 | //updatePossible = true; | 1024 | //updatePossible = true; |
1024 | mCells.setAutoDelete( true ); | 1025 | mCells.setAutoDelete( true ); |
1025 | mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; | 1026 | mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; |
1026 | mDayLabels.resize( mDaysPerWeek ); | 1027 | mDayLabels.resize( mDaysPerWeek ); |
1027 | mDayLabelsW.resize( mDaysPerWeek ); | 1028 | mDayLabelsW.resize( mDaysPerWeek ); |
1028 | QFont bfont = font(); | 1029 | QFont bfont = font(); |
1029 | if ( QApplication::desktop()->width() < 650 ) { | 1030 | if ( QApplication::desktop()->width() < 650 ) { |
1030 | bfont.setPointSize( bfont.pointSize() - 2 ); | 1031 | bfont.setPointSize( bfont.pointSize() - 2 ); |
1031 | } | 1032 | } |
1032 | bfont.setBold( true ); | 1033 | bfont.setBold( true ); |
1033 | int i; | 1034 | int i; |
1034 | 1035 | ||
1035 | for( i = 0; i < mDaysPerWeek; i++ ) { | 1036 | for( i = 0; i < mDaysPerWeek; i++ ) { |
1036 | QLabel *label = new QLabel( mMonthView ); | 1037 | QLabel *label = new QLabel( mMonthView ); |
1037 | label->setFont(bfont); | 1038 | label->setFont(bfont); |
1038 | label->setFrameStyle(QFrame::Panel|QFrame::Raised); | 1039 | label->setFrameStyle(QFrame::Panel|QFrame::Raised); |
1039 | label->setLineWidth(1); | 1040 | label->setLineWidth(1); |
1040 | label->setAlignment(AlignCenter); | 1041 | label->setAlignment(AlignCenter); |
1041 | mDayLabels.insert( i, label ); | 1042 | mDayLabels.insert( i, label ); |
1042 | label = new QLabel( mWeekView ); | 1043 | label = new QLabel( mWeekView ); |
1043 | label->setFont(bfont); | 1044 | label->setFont(bfont); |
1044 | label->setFrameStyle(QFrame::Panel|QFrame::Raised); | 1045 | label->setFrameStyle(QFrame::Panel|QFrame::Raised); |
1045 | label->setLineWidth(1); | 1046 | label->setLineWidth(1); |
1046 | label->setAlignment(AlignCenter); | 1047 | label->setAlignment(AlignCenter); |
1047 | mDayLabelsW.insert( i, label ); | 1048 | mDayLabelsW.insert( i, label ); |
1048 | } | 1049 | } |
1049 | 1050 | ||
1050 | bfont.setBold( false ); | 1051 | bfont.setBold( false ); |
1051 | mWeekLabels.resize( mNumWeeks+1 ); | 1052 | mWeekLabels.resize( mNumWeeks+1 ); |
1052 | mWeekLabelsW.resize( 2 ); | 1053 | mWeekLabelsW.resize( 2 ); |
1053 | for( i = 0; i < mNumWeeks+1; i++ ) { | 1054 | for( i = 0; i < mNumWeeks+1; i++ ) { |
1054 | KOWeekButton *label = new KOWeekButton( mMonthView ); | 1055 | KOWeekButton *label = new KOWeekButton( mMonthView ); |
1055 | label->setFocusPolicy(NoFocus); | 1056 | label->setFocusPolicy(NoFocus); |
1056 | label->setFont(bfont); | 1057 | label->setFont(bfont); |
1057 | connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); | 1058 | connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); |
1058 | label->setFlat(true); | 1059 | label->setFlat(true); |
1059 | QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); | 1060 | QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); |
1060 | //label->setFrameStyle(QFrame::Panel|QFrame::Raised); | 1061 | //label->setFrameStyle(QFrame::Panel|QFrame::Raised); |
1061 | //label->setLineWidth(1); | 1062 | //label->setLineWidth(1); |
1062 | //label->setAlignment(AlignCenter); | 1063 | //label->setAlignment(AlignCenter); |
1063 | mWeekLabels.insert( i, label ); | 1064 | mWeekLabels.insert( i, label ); |
1064 | } | 1065 | } |
1065 | mWeekLabels[mNumWeeks]->setText( i18n("W")); | 1066 | mWeekLabels[mNumWeeks]->setText( i18n("W")); |
1066 | mWeekLabels[0]->setFocusPolicy(WheelFocus); | 1067 | mWeekLabels[0]->setFocusPolicy(WheelFocus); |
1067 | QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); | 1068 | QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); |
1068 | 1069 | ||
1069 | for( i = 0; i < 1+1; i++ ) { | 1070 | for( i = 0; i < 1+1; i++ ) { |
1070 | KOWeekButton *label = new KOWeekButton( mWeekView ); | 1071 | KOWeekButton *label = new KOWeekButton( mWeekView ); |
1071 | label->setFocusPolicy(NoFocus); | 1072 | label->setFocusPolicy(NoFocus); |
1072 | label->setFont(bfont); | 1073 | label->setFont(bfont); |
1073 | connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); | 1074 | connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); |
1074 | label->setFlat(true); | 1075 | label->setFlat(true); |
1075 | QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); | 1076 | QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); |
1076 | //label->setFrameStyle(QFrame::Panel|QFrame::Raised); | 1077 | //label->setFrameStyle(QFrame::Panel|QFrame::Raised); |
1077 | //label->setLineWidth(1); | 1078 | //label->setLineWidth(1); |
1078 | //label->setAlignment(AlignCenter); | 1079 | //label->setAlignment(AlignCenter); |
1079 | mWeekLabelsW.insert( i, label ); | 1080 | mWeekLabelsW.insert( i, label ); |
1080 | } | 1081 | } |
1081 | mWeekLabelsW[1]->setText( i18n("W")); | 1082 | mWeekLabelsW[1]->setText( i18n("W")); |
1082 | mWeekLabelsW[0]->setFocusPolicy(WheelFocus); | 1083 | mWeekLabelsW[0]->setFocusPolicy(WheelFocus); |
1083 | 1084 | ||
1084 | 1085 | ||
1085 | int row, col; | 1086 | int row, col; |
1086 | mCells.resize( mNumCells ); | 1087 | mCells.resize( mNumCells ); |
1087 | for( row = 0; row < mNumWeeks; ++row ) { | 1088 | for( row = 0; row < mNumWeeks; ++row ) { |
1088 | for( col = 0; col < mDaysPerWeek; ++col ) { | 1089 | for( col = 0; col < mDaysPerWeek; ++col ) { |
1089 | MonthViewCell *cell = new MonthViewCell( this, mMonthView ); | 1090 | MonthViewCell *cell = new MonthViewCell( this, mMonthView ); |
1090 | mCells.insert( row * mDaysPerWeek + col, cell ); | 1091 | mCells.insert( row * mDaysPerWeek + col, cell ); |
1091 | 1092 | ||
1092 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), | 1093 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), |
1093 | SLOT( defaultAction( Incidence * ) ) ); | 1094 | SLOT( defaultAction( Incidence * ) ) ); |
1094 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), | 1095 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), |
1095 | SIGNAL( newEventSignal( QDateTime ) ) ); | 1096 | SIGNAL( newEventSignal( QDateTime ) ) ); |
1096 | connect( cell, SIGNAL( showDaySignal( QDate ) ), | 1097 | connect( cell, SIGNAL( showDaySignal( QDate ) ), |
1097 | SIGNAL( showDaySignal( QDate ) ) ); | 1098 | SIGNAL( showDaySignal( QDate ) ) ); |
1098 | } | 1099 | } |
1099 | } | 1100 | } |
1100 | mCellsW.resize( mDaysPerWeek ); | 1101 | mCellsW.resize( mDaysPerWeek ); |
1101 | for( col = 0; col < mDaysPerWeek; ++col ) { | 1102 | for( col = 0; col < mDaysPerWeek; ++col ) { |
1102 | MonthViewCell *cell = new MonthViewCell( this, mWeekView ); | 1103 | MonthViewCell *cell = new MonthViewCell( this, mWeekView ); |
1103 | mCellsW.insert( col, cell ); | 1104 | mCellsW.insert( col, cell ); |
1104 | 1105 | ||
1105 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), | 1106 | connect( cell, SIGNAL( defaultAction( Incidence * ) ), |
1106 | SLOT( defaultAction( Incidence * ) ) ); | 1107 | SLOT( defaultAction( Incidence * ) ) ); |
1107 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), | 1108 | connect( cell, SIGNAL( newEventSignal( QDateTime ) ), |
1108 | SIGNAL( newEventSignal( QDateTime ) ) ); | 1109 | SIGNAL( newEventSignal( QDateTime ) ) ); |
1109 | connect( cell, SIGNAL( showDaySignal( QDate ) ), | 1110 | connect( cell, SIGNAL( showDaySignal( QDate ) ), |
1110 | SIGNAL( showDaySignal( QDate ) ) ); | 1111 | SIGNAL( showDaySignal( QDate ) ) ); |
1111 | cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); | 1112 | cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); |
1112 | } | 1113 | } |
1113 | 1114 | ||
1114 | //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); | 1115 | //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); |
1115 | mContextMenu = eventPopup(); | 1116 | mContextMenu = eventPopup(); |
1116 | // updateConfig(); //useless here... | 1117 | // updateConfig(); //useless here... |
1117 | // ... but we need mWidthLongDayLabel computed | 1118 | // ... but we need mWidthLongDayLabel computed |
1118 | QFontMetrics fontmetric(mDayLabels[0]->font()); | 1119 | QFontMetrics fontmetric(mDayLabels[0]->font()); |
1119 | mWidthLongDayLabel = 0; | 1120 | mWidthLongDayLabel = 0; |
1120 | for (int i = 0; i < 7; i++) { | 1121 | for (int i = 0; i < 7; i++) { |
1121 | int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); | 1122 | int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); |
1122 | if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; | 1123 | if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; |
1123 | } | 1124 | } |
1124 | 1125 | ||
1125 | //mWeekLabels[mNumWeeks]->setText( i18n("W")); | 1126 | //mWeekLabels[mNumWeeks]->setText( i18n("W")); |
1126 | 1127 | ||
1127 | #if 0 | 1128 | #if 0 |
1128 | if ( mShowWeekView ) | 1129 | if ( mShowWeekView ) |
1129 | mWidStack->raiseWidget( mWeekView ); | 1130 | mWidStack->raiseWidget( mWeekView ); |
1130 | else | 1131 | else |
@@ -1712,175 +1713,191 @@ void KOMonthView::computeLayout() | |||
1712 | x= 0; | 1713 | x= 0; |
1713 | y= 0; | 1714 | y= 0; |
1714 | w = colWid; | 1715 | w = colWid; |
1715 | h = dayLabelHei ; | 1716 | h = dayLabelHei ; |
1716 | for ( i = 0; i < 7; i++) { | 1717 | for ( i = 0; i < 7; i++) { |
1717 | if ( i == daysToShow-colModulo ) | 1718 | if ( i == daysToShow-colModulo ) |
1718 | ++w; | 1719 | ++w; |
1719 | if ( combinedSatSun ) { | 1720 | if ( combinedSatSun ) { |
1720 | if ( i >= daysToShow-1 ) { | 1721 | if ( i >= daysToShow-1 ) { |
1721 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); | 1722 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); |
1722 | x -= w/2 ; | 1723 | x -= w/2 ; |
1723 | } | 1724 | } |
1724 | else | 1725 | else |
1725 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); | 1726 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); |
1726 | } else | 1727 | } else |
1727 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); | 1728 | mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); |
1728 | x += w; | 1729 | x += w; |
1729 | } | 1730 | } |
1730 | x= 0; | 1731 | x= 0; |
1731 | y= dayLabelHei; | 1732 | y= dayLabelHei; |
1732 | w = colWid; | 1733 | w = colWid; |
1733 | h = cellHei ; | 1734 | h = cellHei ; |
1734 | int max = 0; | 1735 | int max = 0; |
1735 | for ( i = 0; i < mCells.count(); ++i) { | 1736 | for ( i = 0; i < mCells.count(); ++i) { |
1736 | //qDebug("iii %d ", i); | 1737 | //qDebug("iii %d ", i); |
1737 | w = colWid; | 1738 | w = colWid; |
1738 | if ( ((i) % 7) >= 7-colModulo ) { | 1739 | if ( ((i) % 7) >= 7-colModulo ) { |
1739 | ++w; | 1740 | ++w; |
1740 | } | 1741 | } |
1741 | if ( i == (6-rowModulo)*7) | 1742 | if ( i == (6-rowModulo)*7) |
1742 | ++h; | 1743 | ++h; |
1743 | if ( combinedSatSun ) { | 1744 | if ( combinedSatSun ) { |
1744 | if ( (i)%7 >= daysToShow-1 ) { | 1745 | if ( (i)%7 >= daysToShow-1 ) { |
1745 | if ( (i)%7 == daysToShow-1 ) { | 1746 | if ( (i)%7 == daysToShow-1 ) { |
1746 | max = h/2; | 1747 | max = h/2; |
1747 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); | 1748 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); |
1748 | x -= w ;y += h/2; | 1749 | x -= w ;y += h/2; |
1749 | } else { | 1750 | } else { |
1750 | max = h-h/2; | 1751 | max = h-h/2; |
1751 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); | 1752 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,max ); |
1752 | y -= h/2; | 1753 | y -= h/2; |
1753 | } | 1754 | } |
1754 | } else { | 1755 | } else { |
1755 | max = h; | 1756 | max = h; |
1756 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); | 1757 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); |
1757 | } | 1758 | } |
1758 | 1759 | ||
1759 | } | 1760 | } |
1760 | else { | 1761 | else { |
1761 | max = h; | 1762 | max = h; |
1762 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); | 1763 | mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); |
1763 | } | 1764 | } |
1764 | x += w; | 1765 | x += w; |
1765 | if ( x + w/2 > wid ) { | 1766 | if ( x + w/2 > wid ) { |
1766 | x = 0; | 1767 | x = 0; |
1767 | y += h; | 1768 | y += h; |
1768 | } | 1769 | } |
1769 | //mCells[i]->dateLabel()->setMaximumHeight( max- mCells[i]->lineWidth()*2 ); | 1770 | //mCells[i]->dateLabel()->setMaximumHeight( max- mCells[i]->lineWidth()*2 ); |
1770 | } | 1771 | } |
1771 | y= dayLabelHei; | 1772 | y= dayLabelHei; |
1772 | h = cellHei ; | 1773 | h = cellHei ; |
1773 | for ( i = 0; i < 6; i++) { | 1774 | for ( i = 0; i < 6; i++) { |
1774 | if ( i == (6-rowModulo)) | 1775 | if ( i == (6-rowModulo)) |
1775 | ++h; | 1776 | ++h; |
1776 | mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); | 1777 | mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); |
1777 | y += h; | 1778 | y += h; |
1778 | } | 1779 | } |
1779 | mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); | 1780 | mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); |
1780 | // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); | 1781 | // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); |
1781 | //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); | 1782 | //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); |
1782 | mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ; | 1783 | mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ; |
1783 | updateDayLabels(); | 1784 | updateDayLabels(); |
1784 | //bool forceUpdate = !updatePossible; | 1785 | //bool forceUpdate = !updatePossible; |
1785 | updatePossible = true; | 1786 | updatePossible = true; |
1786 | //mWeekLabels[mNumWeeks]->setText( i18n("W")); | 1787 | //mWeekLabels[mNumWeeks]->setText( i18n("W")); |
1787 | } | 1788 | } |
1788 | 1789 | ||
1789 | void KOMonthView::showContextMenu( Incidence *incidence ) | 1790 | void KOMonthView::showContextMenu( Incidence *incidence ) |
1790 | { | 1791 | { |
1791 | mContextMenu->showIncidencePopup(incidence); | 1792 | mContextMenu->showIncidencePopup(incidence); |
1792 | /* | 1793 | /* |
1793 | if( incidence && incidence->type() == "Event" ) { | 1794 | if( incidence && incidence->type() == "Event" ) { |
1794 | Event *event = static_cast<Event *>(incidence); | 1795 | Event *event = static_cast<Event *>(incidence); |
1795 | mContextMenu->showEventPopup(event); | 1796 | mContextMenu->showEventPopup(event); |
1796 | } else { | 1797 | } else { |
1797 | kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; | 1798 | kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; |
1798 | } | 1799 | } |
1799 | */ | 1800 | */ |
1800 | } | 1801 | } |
1801 | MonthViewCell * KOMonthView::selectedCell( ) | 1802 | MonthViewCell * KOMonthView::selectedCell( ) |
1802 | { | 1803 | { |
1803 | return mSelectedCell; | 1804 | return mSelectedCell; |
1804 | } | 1805 | } |
1805 | void KOMonthView::setSelectedCell( MonthViewCell *cell ) | 1806 | void KOMonthView::setSelectedCell( MonthViewCell *cell ) |
1806 | { | 1807 | { |
1807 | //qDebug("KOMonthView::setSelectedCell "); | 1808 | //qDebug("KOMonthView::setSelectedCell "); |
1808 | if ( mSelectedCell && mSelectedCell != cell ) { | 1809 | if ( mSelectedCell && mSelectedCell != cell ) { |
1809 | MonthViewCell * mvc = mSelectedCell; | 1810 | MonthViewCell * mvc = mSelectedCell; |
1810 | mSelectedCell = cell; | 1811 | mSelectedCell = cell; |
1811 | mvc->deselect(); | 1812 | mvc->deselect(); |
1812 | } else | 1813 | } else |
1813 | mSelectedCell = cell; | 1814 | mSelectedCell = cell; |
1814 | // if ( mSelectedCell ) | 1815 | // if ( mSelectedCell ) |
1815 | // mSelectedCell->select(); | 1816 | // mSelectedCell->select(); |
1816 | if ( !mSelectedCell ) | 1817 | if ( !mSelectedCell ) |
1817 | emit incidenceSelected( 0 ); | 1818 | emit incidenceSelected( 0 ); |
1818 | else | 1819 | else |
1819 | emit incidenceSelected( mSelectedCell->selectedIncidence() ); | 1820 | emit incidenceSelected( mSelectedCell->selectedIncidence() ); |
1820 | } | 1821 | } |
1821 | 1822 | ||
1822 | void KOMonthView::processSelectionChange() | 1823 | void KOMonthView::processSelectionChange() |
1823 | { | 1824 | { |
1824 | QPtrList<Incidence> incidences = selectedIncidences(); | 1825 | QPtrList<Incidence> incidences = selectedIncidences(); |
1825 | if (incidences.count() > 0) { | 1826 | if (incidences.count() > 0) { |
1826 | emit incidenceSelected( incidences.first() ); | 1827 | emit incidenceSelected( incidences.first() ); |
1827 | } else { | 1828 | } else { |
1828 | emit incidenceSelected( 0 ); | 1829 | emit incidenceSelected( 0 ); |
1829 | clearSelection(); | 1830 | clearSelection(); |
1830 | } | 1831 | } |
1831 | } | 1832 | } |
1832 | 1833 | ||
1833 | void KOMonthView::clearSelection() | 1834 | void KOMonthView::clearSelection() |
1834 | { | 1835 | { |
1835 | if ( mSelectedCell ) { | 1836 | if ( mSelectedCell ) { |
1836 | mSelectedCell->deselect(); | 1837 | mSelectedCell->deselect(); |
1837 | mSelectedCell = 0; | 1838 | mSelectedCell = 0; |
1838 | } | 1839 | } |
1839 | } | 1840 | } |
1841 | |||
1842 | void KOMonthView::keyReleaseEvent ( QKeyEvent * e) | ||
1843 | { | ||
1844 | if ( !e->isAutoRepeat() ) { | ||
1845 | mFlagKeyPressed = false; | ||
1846 | } | ||
1847 | } | ||
1848 | |||
1840 | void KOMonthView::keyPressEvent ( QKeyEvent * e ) | 1849 | void KOMonthView::keyPressEvent ( QKeyEvent * e ) |
1841 | { | 1850 | { |
1842 | //qDebug("KOMonthView::keyPressEvent "); | 1851 | |
1852 | qApp->processEvents(); | ||
1853 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | ||
1854 | //e->ignore(); | ||
1855 | e->accept(); | ||
1856 | return; | ||
1857 | } | ||
1858 | if (! e->isAutoRepeat() ) | ||
1859 | mFlagKeyPressed = true; | ||
1843 | switch(e->key()) { | 1860 | switch(e->key()) { |
1844 | case Key_Up: | 1861 | case Key_Up: |
1845 | { | 1862 | { |
1846 | if ( mShowWeekView ) { | 1863 | if ( mShowWeekView ) { |
1847 | emit selectWeekNum ( currentWeek() - 1 ); | 1864 | emit selectWeekNum ( currentWeek() - 1 ); |
1848 | } | 1865 | } |
1849 | else { | 1866 | else { |
1850 | emit prevMonth(); | 1867 | emit prevMonth(); |
1851 | } | 1868 | } |
1852 | } | 1869 | } |
1853 | e->accept(); | 1870 | e->accept(); |
1854 | break; | 1871 | break; |
1855 | case Key_Down: | 1872 | case Key_Down: |
1856 | { | 1873 | { |
1857 | if ( mShowWeekView ) { | 1874 | if ( mShowWeekView ) { |
1858 | emit selectWeekNum ( currentWeek() +1); | 1875 | emit selectWeekNum ( currentWeek() +1); |
1859 | } | 1876 | } |
1860 | else { | 1877 | else { |
1861 | emit nextMonth(); | 1878 | emit nextMonth(); |
1862 | } | 1879 | } |
1863 | 1880 | ||
1864 | } | 1881 | } |
1865 | e->accept(); | 1882 | e->accept(); |
1866 | break; | 1883 | break; |
1867 | case Key_Return: | 1884 | case Key_Return: |
1868 | case Key_Enter: | 1885 | case Key_Enter: |
1869 | { | 1886 | { |
1870 | selectInternalWeekNum ( currentWeek() ); | 1887 | selectInternalWeekNum ( currentWeek() ); |
1871 | } | 1888 | } |
1872 | e->accept(); | 1889 | e->accept(); |
1873 | break; | 1890 | break; |
1874 | case Key_D: | 1891 | case Key_D: |
1875 | if ( mSelectedCell ) { | 1892 | if ( mSelectedCell ) { |
1876 | mSelectedCell->showDay(); | 1893 | mSelectedCell->showDay(); |
1877 | e->accept(); | 1894 | e->accept(); |
1878 | } else { | 1895 | } else { |
1879 | e->ignore(); | 1896 | e->ignore(); |
1880 | } | 1897 | } |
1881 | break; | 1898 | break; |
1882 | default: | 1899 | default: |
1883 | e->ignore(); | 1900 | e->ignore(); |
1884 | break; | 1901 | break; |
1885 | } | 1902 | } |
1886 | } | 1903 | } |
diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h index c1ca3d4..88050fe 100644 --- a/korganizer/komonthview.h +++ b/korganizer/komonthview.h | |||
@@ -186,135 +186,136 @@ public slots: | |||
186 | 186 | ||
187 | protected slots: | 187 | protected slots: |
188 | void defaultAction( QListBoxItem * ); | 188 | void defaultAction( QListBoxItem * ); |
189 | void contextMenu( QListBoxItem * ); | 189 | void contextMenu( QListBoxItem * ); |
190 | void selection( QListBoxItem * ); | 190 | void selection( QListBoxItem * ); |
191 | void cellClicked( QListBoxItem * ); | 191 | void cellClicked( QListBoxItem * ); |
192 | void newEvent(); | 192 | void newEvent(); |
193 | 193 | ||
194 | private: | 194 | private: |
195 | MonthViewItem* mCurrentAvailItem; | 195 | MonthViewItem* mCurrentAvailItem; |
196 | QPtrList <MonthViewItem> mAvailItemList; | 196 | QPtrList <MonthViewItem> mAvailItemList; |
197 | KOMonthView *mMonthView; | 197 | KOMonthView *mMonthView; |
198 | int currentPalette; | 198 | int currentPalette; |
199 | 199 | ||
200 | QDate mDate; | 200 | QDate mDate; |
201 | bool mPrimary; | 201 | bool mPrimary; |
202 | bool mHoliday; | 202 | bool mHoliday; |
203 | QString mHolidayString; | 203 | QString mHolidayString; |
204 | 204 | ||
205 | //QLabel *mLabel; | 205 | //QLabel *mLabel; |
206 | QPushButton *mLabel; | 206 | QPushButton *mLabel; |
207 | //QListBox *mItemList; | 207 | //QListBox *mItemList; |
208 | #ifdef DESKTOP_VERSION | 208 | #ifdef DESKTOP_VERSION |
209 | static QToolTipGroup *mToolTipGroup; | 209 | static QToolTipGroup *mToolTipGroup; |
210 | #endif | 210 | #endif |
211 | QSize mLabelSize; | 211 | QSize mLabelSize; |
212 | QSize mLabelBigSize; | 212 | QSize mLabelBigSize; |
213 | QPalette mHolidayPalette; | 213 | QPalette mHolidayPalette; |
214 | QPalette mStandardPalette; | 214 | QPalette mStandardPalette; |
215 | QPalette mPrimaryPalette; | 215 | QPalette mPrimaryPalette; |
216 | QPalette mNonPrimaryPalette; | 216 | QPalette mNonPrimaryPalette; |
217 | void setMyPalette(); | 217 | void setMyPalette(); |
218 | QPalette getPalette (); | 218 | QPalette getPalette (); |
219 | 219 | ||
220 | }; | 220 | }; |
221 | 221 | ||
222 | 222 | ||
223 | class KOMonthView: public KOEventView | 223 | class KOMonthView: public KOEventView |
224 | { | 224 | { |
225 | Q_OBJECT | 225 | Q_OBJECT |
226 | public: | 226 | public: |
227 | KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 ); | 227 | KOMonthView(Calendar *cal, QWidget *parent = 0, const char *name = 0 ); |
228 | ~KOMonthView(); | 228 | ~KOMonthView(); |
229 | 229 | ||
230 | /** Returns maximum number of days supported by the komonthview */ | 230 | /** Returns maximum number of days supported by the komonthview */ |
231 | virtual int maxDatesHint(); | 231 | virtual int maxDatesHint(); |
232 | 232 | ||
233 | /** Returns number of currently shown dates. */ | 233 | /** Returns number of currently shown dates. */ |
234 | virtual int currentDateCount(); | 234 | virtual int currentDateCount(); |
235 | 235 | ||
236 | /** returns the currently selected events */ | 236 | /** returns the currently selected events */ |
237 | virtual QPtrList<Incidence> selectedIncidences(); | 237 | virtual QPtrList<Incidence> selectedIncidences(); |
238 | 238 | ||
239 | /** returns dates of the currently selected events */ | 239 | /** returns dates of the currently selected events */ |
240 | virtual DateList selectedDates(); | 240 | virtual DateList selectedDates(); |
241 | 241 | ||
242 | virtual void printPreview(CalPrinter *calPrinter, | 242 | virtual void printPreview(CalPrinter *calPrinter, |
243 | const QDate &, const QDate &); | 243 | const QDate &, const QDate &); |
244 | bool isMonthView() { return !mShowWeekView; } | 244 | bool isMonthView() { return !mShowWeekView; } |
245 | bool isUpdatePossible() { return updatePossible; } | 245 | bool isUpdatePossible() { return updatePossible; } |
246 | 246 | ||
247 | MonthViewCell * selectedCell(); | 247 | MonthViewCell * selectedCell(); |
248 | bool skipResize; | 248 | bool skipResize; |
249 | NavigatorBar* navigatorBar() { return mNavigatorBar ;} | 249 | NavigatorBar* navigatorBar() { return mNavigatorBar ;} |
250 | public slots: | 250 | public slots: |
251 | virtual void updateView(); | 251 | virtual void updateView(); |
252 | virtual void updateConfig(); | 252 | virtual void updateConfig(); |
253 | virtual void showDates(const QDate &start, const QDate &end); | 253 | virtual void showDates(const QDate &start, const QDate &end); |
254 | virtual void showEvents(QPtrList<Event> eventList); | 254 | virtual void showEvents(QPtrList<Event> eventList); |
255 | 255 | ||
256 | void changeEventDisplay(Event *, int); | 256 | void changeEventDisplay(Event *, int); |
257 | 257 | ||
258 | void clearSelection(); | 258 | void clearSelection(); |
259 | 259 | ||
260 | void showContextMenu( Incidence * ); | 260 | void showContextMenu( Incidence * ); |
261 | 261 | ||
262 | void setSelectedCell( MonthViewCell * ); | 262 | void setSelectedCell( MonthViewCell * ); |
263 | void switchView(); | 263 | void switchView(); |
264 | void setKeyBoardFocus(); | 264 | void setKeyBoardFocus(); |
265 | void setKeyBFocus(); | 265 | void setKeyBFocus(); |
266 | 266 | ||
267 | protected slots: | 267 | protected slots: |
268 | void slotComputeLayout(); | 268 | void slotComputeLayout(); |
269 | void selectInternalWeekNum ( int ); | 269 | void selectInternalWeekNum ( int ); |
270 | void processSelectionChange(); | 270 | void processSelectionChange(); |
271 | signals: | 271 | signals: |
272 | void nextMonth(); | 272 | void nextMonth(); |
273 | void prevMonth(); | 273 | void prevMonth(); |
274 | void selectWeekNum ( int ); | 274 | void selectWeekNum ( int ); |
275 | void selectMonth (); | 275 | void selectMonth (); |
276 | void showDaySignal( QDate ); | 276 | void showDaySignal( QDate ); |
277 | protected: | 277 | protected: |
278 | void resizeEvent(QResizeEvent *); | 278 | void resizeEvent(QResizeEvent *); |
279 | void viewChanged(); | 279 | void viewChanged(); |
280 | void updateDayLabels(); | 280 | void updateDayLabels(); |
281 | 281 | ||
282 | private: | 282 | private: |
283 | QTimer* mComputeLayoutTimer; | 283 | QTimer* mComputeLayoutTimer; |
284 | NavigatorBar* mNavigatorBar; | 284 | NavigatorBar* mNavigatorBar; |
285 | int currentWeek(); | 285 | int currentWeek(); |
286 | bool clPending; | 286 | bool clPending; |
287 | QWidgetStack * mWidStack; | 287 | QWidgetStack * mWidStack; |
288 | QWidget* mMonthView; | 288 | QWidget* mMonthView; |
289 | QWidget* mWeekView; | 289 | QWidget* mWeekView; |
290 | bool mShowWeekView; | 290 | bool mShowWeekView; |
291 | bool updatePossible; | 291 | bool updatePossible; |
292 | int mDaysPerWeek; | 292 | int mDaysPerWeek; |
293 | int mNumWeeks; | 293 | int mNumWeeks; |
294 | int mNumCells; | 294 | int mNumCells; |
295 | //bool mWeekStartsMonday; | 295 | //bool mWeekStartsMonday; |
296 | bool mShowSatSunComp; | 296 | bool mShowSatSunComp; |
297 | void computeLayout(); | 297 | void computeLayout(); |
298 | void computeLayoutWeek(); | 298 | void computeLayoutWeek(); |
299 | 299 | ||
300 | QPtrVector<MonthViewCell> mCells; | 300 | QPtrVector<MonthViewCell> mCells; |
301 | QPtrVector<QLabel> mDayLabels; | 301 | QPtrVector<QLabel> mDayLabels; |
302 | QPtrVector<KOWeekButton> mWeekLabels; | 302 | QPtrVector<KOWeekButton> mWeekLabels; |
303 | QPtrVector<MonthViewCell> mCellsW; | 303 | QPtrVector<MonthViewCell> mCellsW; |
304 | QPtrVector<QLabel> mDayLabelsW; | 304 | QPtrVector<QLabel> mDayLabelsW; |
305 | QPtrVector<KOWeekButton> mWeekLabelsW; | 305 | QPtrVector<KOWeekButton> mWeekLabelsW; |
306 | 306 | ||
307 | bool mShortDayLabelsM; | 307 | bool mShortDayLabelsM; |
308 | bool mShortDayLabelsW; | 308 | bool mShortDayLabelsW; |
309 | int mWidthLongDayLabel; | 309 | int mWidthLongDayLabel; |
310 | 310 | ||
311 | QDate mStartDate; | 311 | QDate mStartDate; |
312 | 312 | ||
313 | MonthViewCell *mSelectedCell; | 313 | MonthViewCell *mSelectedCell; |
314 | 314 | bool mFlagKeyPressed; | |
315 | KOEventPopupMenu *mContextMenu; | 315 | KOEventPopupMenu *mContextMenu; |
316 | void keyPressEvent ( QKeyEvent * ) ; | 316 | void keyPressEvent ( QKeyEvent * ) ; |
317 | void keyReleaseEvent ( QKeyEvent * ) ; | ||
317 | 318 | ||
318 | }; | 319 | }; |
319 | 320 | ||
320 | #endif | 321 | #endif |
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index ae03a09..09a0880 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -41,292 +41,303 @@ | |||
41 | #include <libkdepim/ksyncprofile.h> | 41 | #include <libkdepim/ksyncprofile.h> |
42 | #include <libkdepim/phoneaccess.h> | 42 | #include <libkdepim/phoneaccess.h> |
43 | #include <libkcal/kincidenceformatter.h> | 43 | #include <libkcal/kincidenceformatter.h> |
44 | #include <libkdepim/kpimglobalprefs.h> | 44 | #include <libkdepim/kpimglobalprefs.h> |
45 | 45 | ||
46 | #include "calendarview.h" | 46 | #include "calendarview.h" |
47 | #include "koviewmanager.h" | 47 | #include "koviewmanager.h" |
48 | #include "datenavigator.h" | 48 | #include "datenavigator.h" |
49 | #include "koagendaview.h" | 49 | #include "koagendaview.h" |
50 | #include "koagenda.h" | 50 | #include "koagenda.h" |
51 | #include "kodialogmanager.h" | 51 | #include "kodialogmanager.h" |
52 | #include "kdialogbase.h" | 52 | #include "kdialogbase.h" |
53 | #include "kapplication.h" | 53 | #include "kapplication.h" |
54 | #include "kofilterview.h" | 54 | #include "kofilterview.h" |
55 | #include "kstandarddirs.h" | 55 | #include "kstandarddirs.h" |
56 | #include "koprefs.h" | 56 | #include "koprefs.h" |
57 | #include "kfiledialog.h" | 57 | #include "kfiledialog.h" |
58 | #include "koglobals.h" | 58 | #include "koglobals.h" |
59 | #include "kglobal.h" | 59 | #include "kglobal.h" |
60 | #include "ktoolbar.h" | 60 | #include "ktoolbar.h" |
61 | #include "klocale.h" | 61 | #include "klocale.h" |
62 | #include "kconfig.h" | 62 | #include "kconfig.h" |
63 | #include "simplealarmclient.h" | 63 | #include "simplealarmclient.h" |
64 | #include "externalapphandler.h" | 64 | #include "externalapphandler.h" |
65 | 65 | ||
66 | using namespace KCal; | 66 | using namespace KCal; |
67 | #ifndef _WIN32_ | 67 | #ifndef _WIN32_ |
68 | #include <unistd.h> | 68 | #include <unistd.h> |
69 | #else | 69 | #else |
70 | #ifdef _OL_IMPORT_ | 70 | #ifdef _OL_IMPORT_ |
71 | #include "koimportoldialog.h" | 71 | #include "koimportoldialog.h" |
72 | #endif | 72 | #endif |
73 | #endif | 73 | #endif |
74 | #include "mainwindow.h" | 74 | #include "mainwindow.h" |
75 | 75 | ||
76 | 76 | ||
77 | class KOex2phonePrefs : public QDialog | 77 | class KOex2phonePrefs : public QDialog |
78 | { | 78 | { |
79 | public: | 79 | public: |
80 | KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : | 80 | KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : |
81 | QDialog( parent, name, true ) | 81 | QDialog( parent, name, true ) |
82 | { | 82 | { |
83 | setCaption( i18n("Export to phone options") ); | 83 | setCaption( i18n("Export to phone options") ); |
84 | QVBoxLayout* lay = new QVBoxLayout( this ); | 84 | QVBoxLayout* lay = new QVBoxLayout( this ); |
85 | lay->setSpacing( 3 ); | 85 | lay->setSpacing( 3 ); |
86 | lay->setMargin( 3 ); | 86 | lay->setMargin( 3 ); |
87 | QLabel *lab; | 87 | QLabel *lab; |
88 | lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); | 88 | lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); |
89 | lab->setAlignment (AlignHCenter ); | 89 | lab->setAlignment (AlignHCenter ); |
90 | QHBox* temphb; | 90 | QHBox* temphb; |
91 | temphb = new QHBox( this ); | 91 | temphb = new QHBox( this ); |
92 | new QLabel( i18n("I/O device: "), temphb ); | 92 | new QLabel( i18n("I/O device: "), temphb ); |
93 | mPhoneDevice = new QLineEdit( temphb); | 93 | mPhoneDevice = new QLineEdit( temphb); |
94 | lay->addWidget( temphb ); | 94 | lay->addWidget( temphb ); |
95 | temphb = new QHBox( this ); | 95 | temphb = new QHBox( this ); |
96 | new QLabel( i18n("Connection: "), temphb ); | 96 | new QLabel( i18n("Connection: "), temphb ); |
97 | mPhoneConnection = new QLineEdit( temphb); | 97 | mPhoneConnection = new QLineEdit( temphb); |
98 | lay->addWidget( temphb ); | 98 | lay->addWidget( temphb ); |
99 | temphb = new QHBox( this ); | 99 | temphb = new QHBox( this ); |
100 | new QLabel( i18n("Model(opt.): "), temphb ); | 100 | new QLabel( i18n("Model(opt.): "), temphb ); |
101 | mPhoneModel = new QLineEdit( temphb); | 101 | mPhoneModel = new QLineEdit( temphb); |
102 | lay->addWidget( temphb ); | 102 | lay->addWidget( temphb ); |
103 | mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); | 103 | mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); |
104 | mWriteBackFuture->setChecked( true ); | 104 | mWriteBackFuture->setChecked( true ); |
105 | lay->addWidget( mWriteBackFuture ); | 105 | lay->addWidget( mWriteBackFuture ); |
106 | temphb = new QHBox( this ); | 106 | temphb = new QHBox( this ); |
107 | new QLabel( i18n("Max. weeks in future: ") , temphb ); | 107 | new QLabel( i18n("Max. weeks in future: ") , temphb ); |
108 | mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); | 108 | mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); |
109 | mWriteBackFutureWeeks->setValue( 8 ); | 109 | mWriteBackFutureWeeks->setValue( 8 ); |
110 | lay->addWidget( temphb ); | 110 | lay->addWidget( temphb ); |
111 | lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) ); | 111 | lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) ); |
112 | lab->setAlignment (AlignHCenter ); | 112 | lab->setAlignment (AlignHCenter ); |
113 | QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); | 113 | QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); |
114 | lay->addWidget( ok ); | 114 | lay->addWidget( ok ); |
115 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); | 115 | QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); |
116 | lay->addWidget( cancel ); | 116 | lay->addWidget( cancel ); |
117 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); | 117 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); |
118 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); | 118 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); |
119 | resize( 220, 240 ); | 119 | resize( 220, 240 ); |
120 | qApp->processEvents(); | 120 | qApp->processEvents(); |
121 | int dw = QApplication::desktop()->width(); | 121 | int dw = QApplication::desktop()->width(); |
122 | int dh = QApplication::desktop()->height(); | 122 | int dh = QApplication::desktop()->height(); |
123 | move( (dw-width())/2, (dh - height() )/2 ); | 123 | move( (dw-width())/2, (dh - height() )/2 ); |
124 | } | 124 | } |
125 | 125 | ||
126 | public: | 126 | public: |
127 | QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; | 127 | QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; |
128 | QCheckBox* mWriteBackFuture; | 128 | QCheckBox* mWriteBackFuture; |
129 | QSpinBox* mWriteBackFutureWeeks; | 129 | QSpinBox* mWriteBackFutureWeeks; |
130 | }; | 130 | }; |
131 | 131 | ||
132 | int globalFlagBlockStartup; | 132 | int globalFlagBlockStartup; |
133 | MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : | 133 | MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : |
134 | QMainWindow( parent, name ) | 134 | QMainWindow( parent, name ) |
135 | { | 135 | { |
136 | 136 | ||
137 | mClosed = false; | 137 | mClosed = false; |
138 | //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; | 138 | //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; |
139 | QString confFile = locateLocal("config","korganizerrc"); | 139 | QString confFile = locateLocal("config","korganizerrc"); |
140 | QFileInfo finf ( confFile ); | 140 | QFileInfo finf ( confFile ); |
141 | bool showWarning = !finf.exists(); | 141 | bool showWarning = !finf.exists(); |
142 | setIcon(SmallIcon( "ko24" ) ); | 142 | setIcon(SmallIcon( "ko24" ) ); |
143 | mBlockAtStartup = true; | 143 | mBlockAtStartup = true; |
144 | mFlagKeyPressed = false; | 144 | mFlagKeyPressed = false; |
145 | setCaption("KO/Pi"); | 145 | setCaption("KO/Pi"); |
146 | KOPrefs *p = KOPrefs::instance(); | 146 | KOPrefs *p = KOPrefs::instance(); |
147 | KPimGlobalPrefs::instance()->setGlobalConfig(); | 147 | KPimGlobalPrefs::instance()->setGlobalConfig(); |
148 | if ( p->mHourSize > 22 ) | 148 | if ( p->mHourSize > 22 ) |
149 | p->mHourSize = 22; | 149 | p->mHourSize = 22; |
150 | QMainWindow::ToolBarDock tbd; | 150 | QMainWindow::ToolBarDock tbd; |
151 | if ( p->mToolBarHor ) { | 151 | if ( p->mToolBarHor ) { |
152 | if ( p->mToolBarUp ) | 152 | if ( p->mToolBarUp ) |
153 | tbd = Bottom; | 153 | tbd = Bottom; |
154 | else | 154 | else |
155 | tbd = Top; | 155 | tbd = Top; |
156 | } | 156 | } |
157 | else { | 157 | else { |
158 | if ( p->mToolBarUp ) | 158 | if ( p->mToolBarUp ) |
159 | tbd = Right; | 159 | tbd = Right; |
160 | else | 160 | else |
161 | tbd = Left; | 161 | tbd = Left; |
162 | } | 162 | } |
163 | if ( KOPrefs::instance()->mUseAppColors ) | 163 | if ( KOPrefs::instance()->mUseAppColors ) |
164 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); | 164 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); |
165 | globalFlagBlockStartup = 1; | 165 | globalFlagBlockStartup = 1; |
166 | iconToolBar = new QPEToolBar( this ); | 166 | iconToolBar = new QPEToolBar( this ); |
167 | addToolBar (iconToolBar , tbd ); | 167 | addToolBar (iconToolBar , tbd ); |
168 | 168 | ||
169 | if ( KOPrefs::instance()->mShowIconFilter ) { | 169 | #ifdef DESKTOP_VERSION |
170 | if ( KOPrefs::instance()->mShowIconFilter ) | ||
171 | #else | ||
172 | if ( KOPrefs::instance()->mShowIconFilter || !p->mShowIconOnetoolbar ) | ||
173 | #endif | ||
174 | |||
175 | { | ||
170 | if ( p->mToolBarHorF ) { | 176 | if ( p->mToolBarHorF ) { |
171 | if ( p->mToolBarUpF ) | 177 | if ( p->mToolBarUpF ) |
172 | tbd = Bottom; | 178 | tbd = Bottom; |
173 | else | 179 | else |
174 | tbd = Top; | 180 | tbd = Top; |
175 | } | 181 | } |
176 | else { | 182 | else { |
177 | if ( p->mToolBarUpF ) | 183 | if ( p->mToolBarUpF ) |
178 | tbd = Right; | 184 | tbd = Right; |
179 | else | 185 | else |
180 | tbd = Left; | 186 | tbd = Left; |
181 | } | 187 | } |
182 | filterToolBar = new QPEToolBar ( this ); | 188 | filterToolBar = new QPEToolBar ( this ); |
183 | filterMenubar = new QPEMenuBar( filterToolBar ); | 189 | filterMenubar = new QPEMenuBar( filterToolBar ); |
184 | QFontMetrics fm ( filterMenubar->font() ); | 190 | QFontMetrics fm ( filterMenubar->font() ); |
185 | 191 | ||
186 | filterPopupMenu = new QPopupMenu( this ); | 192 | filterPopupMenu = new QPopupMenu( this ); |
187 | filterMenubar->insertItem( i18n("No Filter"), filterPopupMenu,0 ); | 193 | filterMenubar->insertItem( i18n("No Filter"), filterPopupMenu,0 ); |
188 | QString addTest = "Ax"; | 194 | QString addTest = "Ax"; |
189 | #ifdef DESKTOP_VERSION | 195 | #ifdef DESKTOP_VERSION |
190 | addTest = "AAAx"; | 196 | addTest = "AAAx"; |
191 | #endif | 197 | #endif |
192 | filterMenubar->setFixedWidth( fm.width( i18n("No Filter")+addTest ) ); | 198 | filterMenubar->setFixedWidth( fm.width( i18n("No Filter")+addTest ) ); |
193 | addToolBar (filterToolBar , tbd ); | 199 | addToolBar (filterToolBar , tbd ); |
194 | connect ( filterPopupMenu , SIGNAL( activated ( int ) ), this, SLOT (selectFilterPopup( int ) ) ); | 200 | connect ( filterPopupMenu , SIGNAL( activated ( int ) ), this, SLOT (selectFilterPopup( int ) ) ); |
195 | connect ( filterPopupMenu , SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenuPopup() ) ); | 201 | connect ( filterPopupMenu , SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenuPopup() ) ); |
202 | if ( !KOPrefs::instance()->mShowIconFilter && !p->mShowIconOnetoolbar ) | ||
203 | filterToolBar->hide(); | ||
196 | } else { | 204 | } else { |
197 | filterToolBar = 0; | 205 | filterToolBar = 0; |
198 | filterMenubar = 0; | 206 | filterMenubar = 0; |
199 | filterPopupMenu = 0; | 207 | filterPopupMenu = 0; |
200 | } | 208 | } |
201 | if ( p->mShowIconOnetoolbar ) { | 209 | if ( p->mShowIconOnetoolbar ) { |
202 | viewToolBar = iconToolBar ; | 210 | viewToolBar = iconToolBar ; |
203 | navigatorToolBar = iconToolBar ; | 211 | navigatorToolBar = iconToolBar ; |
204 | } else { | 212 | } else { |
213 | #ifndef DESKTOP_VERSION | ||
214 | setToolBarsMovable( false ); | ||
215 | #endif | ||
205 | if ( p->mToolBarHorV ) { | 216 | if ( p->mToolBarHorV ) { |
206 | if ( p->mToolBarUpV ) | 217 | if ( p->mToolBarUpV ) |
207 | tbd = Bottom; | 218 | tbd = Bottom; |
208 | else | 219 | else |
209 | tbd = Top; | 220 | tbd = Top; |
210 | } | 221 | } |
211 | else { | 222 | else { |
212 | if ( p->mToolBarUpV ) | 223 | if ( p->mToolBarUpV ) |
213 | tbd = Right; | 224 | tbd = Right; |
214 | else | 225 | else |
215 | tbd = Left; | 226 | tbd = Left; |
216 | } | 227 | } |
217 | viewToolBar = new QPEToolBar( this ); | 228 | viewToolBar = new QPEToolBar( this ); |
218 | addToolBar (viewToolBar , tbd ); | 229 | addToolBar (viewToolBar , tbd ); |
219 | if ( p->mToolBarHorN ) { | 230 | if ( p->mToolBarHorN ) { |
220 | if ( p->mToolBarUpN ) | 231 | if ( p->mToolBarUpN ) |
221 | tbd = Bottom; | 232 | tbd = Bottom; |
222 | else | 233 | else |
223 | tbd = Top; | 234 | tbd = Top; |
224 | } | 235 | } |
225 | else { | 236 | else { |
226 | if ( p->mToolBarUpN ) | 237 | if ( p->mToolBarUpN ) |
227 | tbd = Right; | 238 | tbd = Right; |
228 | else | 239 | else |
229 | tbd = Left; | 240 | tbd = Left; |
230 | } | 241 | } |
231 | navigatorToolBar = new QPEToolBar( this ); | 242 | navigatorToolBar = new QPEToolBar( this ); |
232 | addToolBar (navigatorToolBar , tbd ); | 243 | addToolBar (navigatorToolBar , tbd ); |
233 | } | 244 | } |
234 | 245 | ||
235 | 246 | ||
236 | 247 | ||
237 | mCalendarModifiedFlag = false; | 248 | mCalendarModifiedFlag = false; |
238 | QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); | 249 | QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); |
239 | splash->setAlignment ( AlignCenter ); | 250 | splash->setAlignment ( AlignCenter ); |
240 | setCentralWidget( splash ); | 251 | setCentralWidget( splash ); |
241 | #ifndef DESKTOP_VERSION | 252 | #ifndef DESKTOP_VERSION |
242 | showMaximized(); | 253 | showMaximized(); |
243 | #endif | 254 | #endif |
244 | 255 | ||
245 | //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); | 256 | //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); |
246 | setDefaultPreferences(); | 257 | setDefaultPreferences(); |
247 | mCalendar = new CalendarLocal(); | 258 | mCalendar = new CalendarLocal(); |
248 | mView = new CalendarView( mCalendar, this,"mCalendar " ); | 259 | mView = new CalendarView( mCalendar, this,"mCalendar " ); |
249 | mView->hide(); | 260 | mView->hide(); |
250 | //mView->resize(splash->size() ); | 261 | //mView->resize(splash->size() ); |
251 | initActions(); | 262 | initActions(); |
252 | mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu); | 263 | mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu); |
253 | mSyncManager->setBlockSave(false); | 264 | mSyncManager->setBlockSave(false); |
254 | mView->setSyncManager(mSyncManager); | 265 | mView->setSyncManager(mSyncManager); |
255 | #ifndef DESKTOP_VERSION | 266 | #ifndef DESKTOP_VERSION |
256 | iconToolBar->show(); | 267 | iconToolBar->show(); |
257 | qApp->processEvents(); | 268 | qApp->processEvents(); |
258 | #endif | 269 | #endif |
259 | //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); | 270 | //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); |
260 | int vh = height() ; | 271 | int vh = height() ; |
261 | int vw = width(); | 272 | int vw = width(); |
262 | //qDebug("Toolbar hei %d ",iconToolBar->height() ); | 273 | //qDebug("Toolbar hei %d ",iconToolBar->height() ); |
263 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { | 274 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { |
264 | vh -= iconToolBar->height(); | 275 | vh -= iconToolBar->height(); |
265 | } else { | 276 | } else { |
266 | vw -= iconToolBar->height(); | 277 | vw -= iconToolBar->height(); |
267 | } | 278 | } |
268 | //mView->setMaximumSize( splash->size() ); | 279 | //mView->setMaximumSize( splash->size() ); |
269 | //mView->resize( splash->size() ); | 280 | //mView->resize( splash->size() ); |
270 | //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); | 281 | //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); |
271 | mView->readSettings(); | 282 | mView->readSettings(); |
272 | bool newFile = false; | 283 | bool newFile = false; |
273 | if( !QFile::exists( defaultFileName() ) ) { | 284 | if( !QFile::exists( defaultFileName() ) ) { |
274 | QFileInfo finfo ( defaultFileName() ); | 285 | QFileInfo finfo ( defaultFileName() ); |
275 | QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); | 286 | QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); |
276 | qDebug("oldfile %s ", oldFile.latin1()); | 287 | qDebug("oldfile %s ", oldFile.latin1()); |
277 | QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; | 288 | QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; |
278 | finfo.setFile( oldFile ); | 289 | finfo.setFile( oldFile ); |
279 | if (finfo.exists() ) { | 290 | if (finfo.exists() ) { |
280 | KMessageBox::information( this, message); | 291 | KMessageBox::information( this, message); |
281 | mView->openCalendar( oldFile ); | 292 | mView->openCalendar( oldFile ); |
282 | qApp->processEvents(); | 293 | qApp->processEvents(); |
283 | } else { | 294 | } else { |
284 | oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); | 295 | oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); |
285 | finfo.setFile( oldFile ); | 296 | finfo.setFile( oldFile ); |
286 | if (finfo.exists() ) { | 297 | if (finfo.exists() ) { |
287 | KMessageBox::information( this, message); | 298 | KMessageBox::information( this, message); |
288 | mView->openCalendar( oldFile ); | 299 | mView->openCalendar( oldFile ); |
289 | qApp->processEvents(); | 300 | qApp->processEvents(); |
290 | } | 301 | } |
291 | } | 302 | } |
292 | mView->saveCalendar( defaultFileName() ); | 303 | mView->saveCalendar( defaultFileName() ); |
293 | newFile = true; | 304 | newFile = true; |
294 | } | 305 | } |
295 | 306 | ||
296 | QTime neededSaveTime = QDateTime::currentDateTime().time(); | 307 | QTime neededSaveTime = QDateTime::currentDateTime().time(); |
297 | mView->openCalendar( defaultFileName() ); | 308 | mView->openCalendar( defaultFileName() ); |
298 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); | 309 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); |
299 | qDebug("KO: Calendar loading time: %d ms",msNeeded ); | 310 | qDebug("KO: Calendar loading time: %d ms",msNeeded ); |
300 | 311 | ||
301 | if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) { | 312 | if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) { |
302 | KOPrefs::instance()->setAllDefaults(); | 313 | KOPrefs::instance()->setAllDefaults(); |
303 | int count = mView->addCategories(); | 314 | int count = mView->addCategories(); |
304 | } | 315 | } |
305 | processIncidenceSelection( 0 ); | 316 | processIncidenceSelection( 0 ); |
306 | connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), | 317 | connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), |
307 | SLOT( processIncidenceSelection( Incidence * ) ) ); | 318 | SLOT( processIncidenceSelection( Incidence * ) ) ); |
308 | connect( mView, SIGNAL( modifiedChanged( bool ) ), | 319 | connect( mView, SIGNAL( modifiedChanged( bool ) ), |
309 | SLOT( slotModifiedChanged( bool ) ) ); | 320 | SLOT( slotModifiedChanged( bool ) ) ); |
310 | 321 | ||
311 | 322 | ||
312 | connect( mView, SIGNAL( tempDisableBR(bool) ), | 323 | connect( mView, SIGNAL( tempDisableBR(bool) ), |
313 | SLOT( disableBR(bool) ) ); | 324 | SLOT( disableBR(bool) ) ); |
314 | connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); | 325 | connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); |
315 | mView->setModified( false ); | 326 | mView->setModified( false ); |
316 | mBlockAtStartup = false; | 327 | mBlockAtStartup = false; |
317 | mView->setModified( false ); | 328 | mView->setModified( false ); |
318 | setCentralWidget( mView ); | 329 | setCentralWidget( mView ); |
319 | globalFlagBlockStartup = 0; | 330 | globalFlagBlockStartup = 0; |
320 | mView->show(); | 331 | mView->show(); |
321 | delete splash; | 332 | delete splash; |
322 | if ( newFile ) | 333 | if ( newFile ) |
323 | mView->updateConfig(); | 334 | mView->updateConfig(); |
324 | // qApp->processEvents(); | 335 | // qApp->processEvents(); |
325 | //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); | 336 | //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); |
326 | //fillSyncMenu(); | 337 | //fillSyncMenu(); |
327 | 338 | ||
328 | 339 | ||
329 | connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) ); | 340 | connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) ); |
330 | connect(mView , SIGNAL( save() ), this, SLOT( save() ) ); | 341 | connect(mView , SIGNAL( save() ), this, SLOT( save() ) ); |
331 | connect(mView , SIGNAL( saveStopTimer() ), this, SLOT( saveStopTimer() ) ); | 342 | connect(mView , SIGNAL( saveStopTimer() ), this, SLOT( saveStopTimer() ) ); |
332 | connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); | 343 | connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); |
@@ -2285,128 +2296,141 @@ void MainWindow::importIcal() | |||
2285 | void MainWindow::exportVCalendar() | 2296 | void MainWindow::exportVCalendar() |
2286 | { | 2297 | { |
2287 | QString fn = KOPrefs::instance()->mLastVcalFile; | 2298 | QString fn = KOPrefs::instance()->mLastVcalFile; |
2288 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); | 2299 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); |
2289 | if ( fn == "" ) | 2300 | if ( fn == "" ) |
2290 | return; | 2301 | return; |
2291 | QFileInfo info; | 2302 | QFileInfo info; |
2292 | info.setFile( fn ); | 2303 | info.setFile( fn ); |
2293 | QString mes; | 2304 | QString mes; |
2294 | bool createbup = true; | 2305 | bool createbup = true; |
2295 | if ( info. exists() ) { | 2306 | if ( info. exists() ) { |
2296 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); | 2307 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); |
2297 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 2308 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
2298 | i18n("Overwrite!"), i18n("Cancel"), 0, | 2309 | i18n("Overwrite!"), i18n("Cancel"), 0, |
2299 | 0, 1 ); | 2310 | 0, 1 ); |
2300 | if ( result != 0 ) { | 2311 | if ( result != 0 ) { |
2301 | createbup = false; | 2312 | createbup = false; |
2302 | } | 2313 | } |
2303 | } | 2314 | } |
2304 | if ( createbup ) { | 2315 | if ( createbup ) { |
2305 | if ( mView->exportVCalendar( fn ) ) { | 2316 | if ( mView->exportVCalendar( fn ) ) { |
2306 | KOPrefs::instance()->mLastVcalFile = fn; | 2317 | KOPrefs::instance()->mLastVcalFile = fn; |
2307 | if ( fn.length() > 20 ) | 2318 | if ( fn.length() > 20 ) |
2308 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; | 2319 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; |
2309 | else | 2320 | else |
2310 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); | 2321 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); |
2311 | setCaption(mes); | 2322 | setCaption(mes); |
2312 | } | 2323 | } |
2313 | } | 2324 | } |
2314 | 2325 | ||
2315 | } | 2326 | } |
2316 | QString MainWindow::sentSyncFile() | 2327 | QString MainWindow::sentSyncFile() |
2317 | { | 2328 | { |
2318 | #ifdef DESKTOP_VERSION | 2329 | #ifdef DESKTOP_VERSION |
2319 | return locateLocal( "tmp", "copysynccal.ics" ); | 2330 | return locateLocal( "tmp", "copysynccal.ics" ); |
2320 | #else | 2331 | #else |
2321 | return QString( "/tmp/copysynccal.ics" ); | 2332 | return QString( "/tmp/copysynccal.ics" ); |
2322 | #endif | 2333 | #endif |
2323 | } | 2334 | } |
2324 | 2335 | ||
2325 | void MainWindow::syncFileRequest() | 2336 | void MainWindow::syncFileRequest() |
2326 | { | 2337 | { |
2327 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { | 2338 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { |
2328 | mSyncManager->slotSyncMenu( 999 ); | 2339 | mSyncManager->slotSyncMenu( 999 ); |
2329 | } | 2340 | } |
2330 | 2341 | ||
2331 | setCaption(i18n("Saving Data to temp file ..." )); | 2342 | setCaption(i18n("Saving Data to temp file ..." )); |
2332 | mView->saveCalendar( sentSyncFile() ); | 2343 | mView->saveCalendar( sentSyncFile() ); |
2333 | setCaption(i18n("Data saved to temp file!" )); | 2344 | setCaption(i18n("Data saved to temp file!" )); |
2334 | 2345 | ||
2335 | } | 2346 | } |
2336 | void MainWindow::getFile( bool success ) | 2347 | void MainWindow::getFile( bool success ) |
2337 | { | 2348 | { |
2338 | if ( ! success ) { | 2349 | if ( ! success ) { |
2339 | setCaption( i18n("Error receiving file. Nothing changed!") ); | 2350 | setCaption( i18n("Error receiving file. Nothing changed!") ); |
2340 | return; | 2351 | return; |
2341 | } | 2352 | } |
2342 | mView->openCalendar( sentSyncFile() ); | 2353 | mView->openCalendar( sentSyncFile() ); |
2343 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { | 2354 | if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { |
2344 | mSyncManager->slotSyncMenu( 999 ); | 2355 | mSyncManager->slotSyncMenu( 999 ); |
2345 | } | 2356 | } |
2346 | setCaption( i18n("Pi-Sync successful!") ); | 2357 | setCaption( i18n("Pi-Sync successful!") ); |
2347 | } | 2358 | } |
2348 | 2359 | ||
2349 | void MainWindow::printSel( ) | 2360 | void MainWindow::printSel( ) |
2350 | { | 2361 | { |
2351 | mView->viewManager()->agendaView()->agenda()->printSelection(); | 2362 | mView->viewManager()->agendaView()->agenda()->printSelection(); |
2352 | } | 2363 | } |
2353 | 2364 | ||
2354 | void MainWindow::printCal() | 2365 | void MainWindow::printCal() |
2355 | { | 2366 | { |
2356 | mView->print();//mCp->showDialog(); | 2367 | mView->print();//mCp->showDialog(); |
2357 | } | 2368 | } |
2358 | 2369 | ||
2359 | 2370 | ||
2360 | #include "libkdepim/kdatepicker.h" | 2371 | #include "libkdepim/kdatepicker.h" |
2361 | #include <kdatetbl.h> | 2372 | #include <kdatetbl.h> |
2362 | 2373 | ||
2363 | void MainWindow::weekAction() | 2374 | void MainWindow::weekAction() |
2364 | { | 2375 | { |
2365 | int month; | 2376 | int month; |
2366 | KPopupFrame* popup = new KPopupFrame(this); | 2377 | KPopupFrame* popup = new KPopupFrame(this); |
2367 | KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); | 2378 | KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); |
2368 | // ----- | 2379 | // ----- |
2369 | picker->resize(picker->sizeHint()); | 2380 | picker->resize(picker->sizeHint()); |
2370 | popup->setMainWidget(picker); | 2381 | popup->setMainWidget(picker); |
2371 | picker->setFocus(); | 2382 | picker->setFocus(); |
2372 | connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); | 2383 | connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); |
2373 | int x = 0; | 2384 | int x = 0; |
2374 | int y = iconToolBar->height(); | 2385 | int y = iconToolBar->height(); |
2375 | int dX = 0; | 2386 | int dX = 0; |
2376 | int dY = 0; | 2387 | int dY = 0; |
2377 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { | 2388 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { |
2378 | if ( iconToolBar->y() > height()/2 ) { | 2389 | if ( iconToolBar->y() > height()/2 ) { |
2379 | dY = picker->sizeHint().height()+8; | 2390 | dY = picker->sizeHint().height()+8; |
2380 | y = 0; | 2391 | y = 0; |
2381 | } | 2392 | } |
2382 | } else { | 2393 | } else { |
2383 | if ( iconToolBar->x() > width()/2 ) { // right side | 2394 | if ( iconToolBar->x() > width()/2 ) { // right side |
2384 | x=0; | 2395 | x=0; |
2385 | dX= picker->sizeHint().width()+8; | 2396 | dX= picker->sizeHint().width()+8; |
2386 | y = 0; | 2397 | y = 0; |
2387 | } else { | 2398 | } else { |
2388 | x= iconToolBar->width(); | 2399 | x= iconToolBar->width(); |
2389 | y = 0; | 2400 | y = 0; |
2390 | } | 2401 | } |
2391 | } | 2402 | } |
2392 | //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); | 2403 | //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); |
2393 | if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY)))) | 2404 | if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY)))) |
2394 | { | 2405 | { |
2395 | month = picker->getResult(); | 2406 | month = picker->getResult(); |
2396 | emit selectWeek ( month ); | 2407 | emit selectWeek ( month ); |
2397 | //qDebug("weekSelected %d ", month); | 2408 | //qDebug("weekSelected %d ", month); |
2398 | } | 2409 | } |
2399 | delete popup; | 2410 | delete popup; |
2400 | } | 2411 | } |
2401 | 2412 | ||
2402 | void MainWindow::hideEvent ( QHideEvent * ) | 2413 | void MainWindow::hideEvent ( QHideEvent * ) |
2403 | { | 2414 | { |
2404 | QString message; | 2415 | QString message; |
2405 | QDateTime nextA = mCalendar->nextAlarmEventDateTime(); | 2416 | QDateTime nextA = mCalendar->nextAlarmEventDateTime(); |
2406 | if ( nextA.isValid() ) { | 2417 | if ( nextA.isValid() ) { |
2407 | QString sum = mCalendar->nextSummary(); | 2418 | QString sum = mCalendar->nextSummary(); |
2408 | 2419 | ||
2409 | message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false)); | 2420 | message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false)); |
2410 | setCaption( message ); | 2421 | setCaption( message ); |
2411 | } | 2422 | } |
2412 | } | 2423 | } |
2424 | |||
2425 | void MainWindow::resizeEvent( QResizeEvent* e) | ||
2426 | { | ||
2427 | #ifndef DESKTOP_VERSION | ||
2428 | if ( !KOPrefs::instance()->mShowIconFilter && !KOPrefs::instance()->mShowIconOnetoolbar ) { | ||
2429 | if (QApplication::desktop()->width() > QApplication::desktop()->height() ) | ||
2430 | filterToolBar->hide(); | ||
2431 | else | ||
2432 | filterToolBar->show(); | ||
2433 | } | ||
2434 | #endif | ||
2435 | QMainWindow::resizeEvent( e); | ||
2436 | } | ||
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 7c16aeb..4d1753f 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h | |||
@@ -8,165 +8,166 @@ | |||
8 | #include <qmenubar.h> | 8 | #include <qmenubar.h> |
9 | #include <qtextstream.h> | 9 | #include <qtextstream.h> |
10 | #include <qregexp.h> | 10 | #include <qregexp.h> |
11 | 11 | ||
12 | #include <libkcal/incidence.h> | 12 | #include <libkcal/incidence.h> |
13 | #include "simplealarmclient.h" | 13 | #include "simplealarmclient.h" |
14 | #include <ksyncmanager.h> | 14 | #include <ksyncmanager.h> |
15 | #ifndef DESKTOP_VERSION | 15 | #ifndef DESKTOP_VERSION |
16 | #include <qcopchannel_qws.h> | 16 | #include <qcopchannel_qws.h> |
17 | #endif | 17 | #endif |
18 | class QAction; | 18 | class QAction; |
19 | class CalendarView; | 19 | class CalendarView; |
20 | class KSyncProfile; | 20 | class KSyncProfile; |
21 | #ifdef DESKTOP_VERSION | 21 | #ifdef DESKTOP_VERSION |
22 | 22 | ||
23 | #define QPEToolBar QToolBar | 23 | #define QPEToolBar QToolBar |
24 | #define QPEMenuBar QMenuBar | 24 | #define QPEMenuBar QMenuBar |
25 | #endif | 25 | #endif |
26 | class QPEToolBar; | 26 | class QPEToolBar; |
27 | class QPEMenuBar; | 27 | class QPEMenuBar; |
28 | 28 | ||
29 | 29 | ||
30 | namespace KCal { | 30 | namespace KCal { |
31 | class CalendarLocal; | 31 | class CalendarLocal; |
32 | } | 32 | } |
33 | 33 | ||
34 | class KOMenuBar : public QMenuBar | 34 | class KOMenuBar : public QMenuBar |
35 | { | 35 | { |
36 | public: | 36 | public: |
37 | KOMenuBar( QWidget *parent=0 ): QMenuBar (parent ) {;} | 37 | KOMenuBar( QWidget *parent=0 ): QMenuBar (parent ) {;} |
38 | QSize sizeHint () const{ qDebug("sizejint ");return QSize ( 40,25 );} | 38 | QSize sizeHint () const{ qDebug("sizejint ");return QSize ( 40,25 );} |
39 | }; | 39 | }; |
40 | 40 | ||
41 | using namespace KCal; | 41 | using namespace KCal; |
42 | 42 | ||
43 | class MainWindow : public QMainWindow | 43 | class MainWindow : public QMainWindow |
44 | { | 44 | { |
45 | Q_OBJECT | 45 | Q_OBJECT |
46 | public: | 46 | public: |
47 | MainWindow( QWidget *parent = 0, const char *name = 0, QString command = ""); | 47 | MainWindow( QWidget *parent = 0, const char *name = 0, QString command = ""); |
48 | ~MainWindow(); | 48 | ~MainWindow(); |
49 | bool beamReceiveEnabled(); | 49 | bool beamReceiveEnabled(); |
50 | static QString defaultFileName(); | 50 | static QString defaultFileName(); |
51 | static QString syncFileName(); | 51 | static QString syncFileName(); |
52 | static QString resourcePath(); | 52 | static QString resourcePath(); |
53 | public slots: | 53 | public slots: |
54 | void setCaption ( const QString & ); | 54 | void setCaption ( const QString & ); |
55 | void updateWeekNum(const KCal::DateList &); | 55 | void updateWeekNum(const KCal::DateList &); |
56 | void updateWeek(QDate); | 56 | void updateWeek(QDate); |
57 | void updateFilterToolbar(); | 57 | void updateFilterToolbar(); |
58 | virtual void showMaximized (); | 58 | virtual void showMaximized (); |
59 | void configureAgenda( int ); | 59 | void configureAgenda( int ); |
60 | void recieve( const QCString& msg, const QByteArray& data ); | 60 | void recieve( const QCString& msg, const QByteArray& data ); |
61 | protected slots: | 61 | protected slots: |
62 | void setCaptionToDates(); | 62 | void setCaptionToDates(); |
63 | void weekAction(); | 63 | void weekAction(); |
64 | void about(); | 64 | void about(); |
65 | void licence(); | 65 | void licence(); |
66 | void faq(); | 66 | void faq(); |
67 | void usertrans(); | 67 | void usertrans(); |
68 | void features(); | 68 | void features(); |
69 | void synchowto(); | 69 | void synchowto(); |
70 | void kdesynchowto(); | 70 | void kdesynchowto(); |
71 | void multisynchowto(); | 71 | void multisynchowto(); |
72 | void whatsNew(); | 72 | void whatsNew(); |
73 | void keyBindings(); | 73 | void keyBindings(); |
74 | void aboutAutoSaving();; | 74 | void aboutAutoSaving();; |
75 | void aboutKnownBugs(); | 75 | void aboutKnownBugs(); |
76 | 76 | ||
77 | void processIncidenceSelection( Incidence * ); | 77 | void processIncidenceSelection( Incidence * ); |
78 | 78 | ||
79 | void importQtopia(); | 79 | void importQtopia(); |
80 | void importBday(); | 80 | void importBday(); |
81 | void importOL(); | 81 | void importOL(); |
82 | void importIcal(); | 82 | void importIcal(); |
83 | void importFile( QString, bool ); | 83 | void importFile( QString, bool ); |
84 | void quickImportIcal(); | 84 | void quickImportIcal(); |
85 | 85 | ||
86 | void slotModifiedChanged( bool ); | 86 | void slotModifiedChanged( bool ); |
87 | 87 | ||
88 | void save(); | 88 | void save(); |
89 | void saveStopTimer(); | 89 | void saveStopTimer(); |
90 | void configureToolBar( int ); | 90 | void configureToolBar( int ); |
91 | void printSel(); | 91 | void printSel(); |
92 | void printCal(); | 92 | void printCal(); |
93 | void saveCalendar(); | 93 | void saveCalendar(); |
94 | void loadCalendar(); | 94 | void loadCalendar(); |
95 | void exportVCalendar(); | 95 | void exportVCalendar(); |
96 | void fillFilterMenu(); | 96 | void fillFilterMenu(); |
97 | void fillFilterMenuTB(); | 97 | void fillFilterMenuTB(); |
98 | void selectFilter( int ); | 98 | void selectFilter( int ); |
99 | void fillFilterMenuPopup(); | 99 | void fillFilterMenuPopup(); |
100 | void selectFilterPopup( int ); | 100 | void selectFilterPopup( int ); |
101 | void exportToPhone( int ); | 101 | void exportToPhone( int ); |
102 | void toggleBeamReceive(); | 102 | void toggleBeamReceive(); |
103 | void disableBR(bool); | 103 | void disableBR(bool); |
104 | signals: | 104 | signals: |
105 | void selectWeek ( int ); | 105 | void selectWeek ( int ); |
106 | private slots: | 106 | private slots: |
107 | void showConfigureAgenda(); | 107 | void showConfigureAgenda(); |
108 | void getFile( bool ); | 108 | void getFile( bool ); |
109 | void syncFileRequest(); | 109 | void syncFileRequest(); |
110 | 110 | ||
111 | protected: | 111 | protected: |
112 | void hideEvent ( QHideEvent * ); | 112 | void hideEvent ( QHideEvent * ); |
113 | QString sentSyncFile(); | 113 | QString sentSyncFile(); |
114 | void displayText( QString, QString); | 114 | void displayText( QString, QString); |
115 | void enableIncidenceActions( bool ); | 115 | void enableIncidenceActions( bool ); |
116 | 116 | ||
117 | private: | 117 | private: |
118 | bool mBRdisabled; | 118 | bool mBRdisabled; |
119 | #ifndef DESKTOP_VERSION | 119 | #ifndef DESKTOP_VERSION |
120 | QCopChannel* infrared; | 120 | QCopChannel* infrared; |
121 | #endif | 121 | #endif |
122 | QAction* brAction; | 122 | QAction* brAction; |
123 | KSyncManager* mSyncManager; | 123 | KSyncManager* mSyncManager; |
124 | bool mClosed; | 124 | bool mClosed; |
125 | void saveOnClose(); | 125 | void saveOnClose(); |
126 | bool mFlagKeyPressed; | 126 | bool mFlagKeyPressed; |
127 | bool mBlockAtStartup; | 127 | bool mBlockAtStartup; |
128 | QPEToolBar *iconToolBar; | 128 | QPEToolBar *iconToolBar; |
129 | QPEToolBar *viewToolBar; | 129 | QPEToolBar *viewToolBar; |
130 | QPEToolBar *navigatorToolBar; | 130 | QPEToolBar *navigatorToolBar; |
131 | QPEToolBar *filterToolBar; | 131 | QPEToolBar *filterToolBar; |
132 | QPEMenuBar *filterMenubar; | 132 | QPEMenuBar *filterMenubar; |
133 | QPopupMenu * filterPopupMenu; | 133 | QPopupMenu * filterPopupMenu; |
134 | void initActions(); | 134 | void initActions(); |
135 | void setDefaultPreferences(); | 135 | void setDefaultPreferences(); |
136 | void resizeEvent( QResizeEvent* e); | ||
136 | void keyPressEvent ( QKeyEvent * ) ; | 137 | void keyPressEvent ( QKeyEvent * ) ; |
137 | void keyReleaseEvent ( QKeyEvent * ) ; | 138 | void keyReleaseEvent ( QKeyEvent * ) ; |
138 | QPopupMenu *configureToolBarMenu; | 139 | QPopupMenu *configureToolBarMenu; |
139 | QPopupMenu *selectFilterMenu; | 140 | QPopupMenu *selectFilterMenu; |
140 | QPopupMenu *selectFilterMenuTB; | 141 | QPopupMenu *selectFilterMenuTB; |
141 | QPopupMenu *configureAgendaMenu, *syncMenu; | 142 | QPopupMenu *configureAgendaMenu, *syncMenu; |
142 | CalendarLocal *mCalendar; | 143 | CalendarLocal *mCalendar; |
143 | CalendarView *mView; | 144 | CalendarView *mView; |
144 | QAction *mNewSubTodoAction; | 145 | QAction *mNewSubTodoAction; |
145 | QAction *mWeekAction; | 146 | QAction *mWeekAction; |
146 | QFont mWeekFont; | 147 | QFont mWeekFont; |
147 | QPixmap mWeekPixmap; | 148 | QPixmap mWeekPixmap; |
148 | QColor mWeekBgColor; | 149 | QColor mWeekBgColor; |
149 | 150 | ||
150 | QAction *mShowAction; | 151 | QAction *mShowAction; |
151 | QAction *mEditAction; | 152 | QAction *mEditAction; |
152 | QAction *mDeleteAction; | 153 | QAction *mDeleteAction; |
153 | QAction *mCloneAction; | 154 | QAction *mCloneAction; |
154 | QAction *mMoveAction; | 155 | QAction *mMoveAction; |
155 | QAction *mBeamAction; | 156 | QAction *mBeamAction; |
156 | QAction *mCancelAction; | 157 | QAction *mCancelAction; |
157 | 158 | ||
158 | QAction *mToggleNav; | 159 | QAction *mToggleNav; |
159 | QAction *mToggleFilter; | 160 | QAction *mToggleFilter; |
160 | QAction *mToggleAllday; | 161 | QAction *mToggleAllday; |
161 | QAction *actionFilterMenuTB; | 162 | QAction *actionFilterMenuTB; |
162 | 163 | ||
163 | void closeEvent( QCloseEvent* ce ); | 164 | void closeEvent( QCloseEvent* ce ); |
164 | SimpleAlarmClient mAlarmClient; | 165 | SimpleAlarmClient mAlarmClient; |
165 | QTimer mSaveTimer; | 166 | QTimer mSaveTimer; |
166 | //bool mBlockSaveFlag; | 167 | //bool mBlockSaveFlag; |
167 | bool mCalendarModifiedFlag; | 168 | bool mCalendarModifiedFlag; |
168 | QPixmap loadPixmap( QString ); | 169 | QPixmap loadPixmap( QString ); |
169 | }; | 170 | }; |
170 | 171 | ||
171 | 172 | ||
172 | #endif | 173 | #endif |