-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 | |||
@@ -1,312 +1,314 @@ | |||
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 KADDRESSBOOKVIEW_H | 24 | #ifndef KADDRESSBOOKVIEW_H |
25 | #define KADDRESSBOOKVIEW_H | 25 | #define KADDRESSBOOKVIEW_H |
26 | 26 | ||
27 | #ifndef KAB_EMBEDDED | 27 | #ifndef KAB_EMBEDDED |
28 | #include <klibloader.h> | 28 | #include <klibloader.h> |
29 | #endif //KAB_EMBEDDED | 29 | #endif //KAB_EMBEDDED |
30 | 30 | ||
31 | class KConfig; | 31 | class KConfig; |
32 | class QDropEvent; | 32 | class QDropEvent; |
33 | 33 | ||
34 | #include <qstringlist.h> | 34 | #include <qstringlist.h> |
35 | #include <kabc/field.h> | 35 | #include <kabc/field.h> |
36 | #include <qwidget.h> | 36 | #include <qwidget.h> |
37 | #include <qregexp.h> | 37 | #include <qregexp.h> |
38 | 38 | ||
39 | #include "viewconfigurewidget.h" | 39 | #include "viewconfigurewidget.h" |
40 | #include "filter.h" | 40 | #include "filter.h" |
41 | 41 | ||
42 | #ifdef DESKTOP_VERSION | 42 | #ifdef DESKTOP_VERSION |
43 | #include <qpaintdevicemetrics.h> | 43 | #include <qpaintdevicemetrics.h> |
44 | #include <qprinter.h> | 44 | #include <qprinter.h> |
45 | #include <qpainter.h> | 45 | #include <qpainter.h> |
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | namespace KABC { class AddressBook; } | 48 | namespace KABC { class AddressBook; } |
49 | 49 | ||
50 | /** | 50 | /** |
51 | Base class for all views in kaddressbook. This class implements | 51 | Base class for all views in kaddressbook. This class implements |
52 | all the common methods needed to provide a view to the user. | 52 | all the common methods needed to provide a view to the user. |
53 | 53 | ||
54 | To implement a specific view (table, card, etc), just inherit from | 54 | To implement a specific view (table, card, etc), just inherit from |
55 | this class and implement all the pure virtuals. | 55 | this class and implement all the pure virtuals. |
56 | 56 | ||
57 | @author Mike Pilone <mpilone@slac.com> | 57 | @author Mike Pilone <mpilone@slac.com> |
58 | */ | 58 | */ |
59 | class KAddressBookView : public QWidget | 59 | class KAddressBookView : public QWidget |
60 | { | 60 | { |
61 | Q_OBJECT | 61 | Q_OBJECT |
62 | 62 | ||
63 | public: | 63 | public: |
64 | enum DefaultFilterType { None = 0, Active = 1, Specific = 2 }; | 64 | enum DefaultFilterType { None = 0, Active = 1, Specific = 2 }; |
65 | 65 | ||
66 | KAddressBookView( KABC::AddressBook *ab, QWidget *parent, const char *name ); | 66 | KAddressBookView( KABC::AddressBook *ab, QWidget *parent, const char *name ); |
67 | virtual ~KAddressBookView(); | 67 | virtual ~KAddressBookView(); |
68 | 68 | ||
69 | /** | 69 | /** |
70 | Must be overloaded in subclasses. Should return a list of | 70 | Must be overloaded in subclasses. Should return a list of |
71 | all the uids of selected contacts. | 71 | all the uids of selected contacts. |
72 | */ | 72 | */ |
73 | virtual QStringList selectedUids() = 0; | 73 | virtual QStringList selectedUids() = 0; |
74 | virtual void doSearch( const QString& s ,KABC::Field *field ) = 0; | 74 | virtual void doSearch( const QString& s ,KABC::Field *field ) = 0; |
75 | virtual void scrollUP() = 0; | 75 | virtual void scrollUP() = 0; |
76 | virtual void scrollDOWN() = 0; | 76 | virtual void scrollDOWN() = 0; |
77 | virtual void setFocusAV() = 0; | 77 | virtual void setFocusAV() = 0; |
78 | 78 | ||
79 | /** | 79 | /** |
80 | Called whenever this view should read the config. This can be used | 80 | Called whenever this view should read the config. This can be used |
81 | as a sign that the config has changed, therefore the view should | 81 | as a sign that the config has changed, therefore the view should |
82 | assume the worst and rebuild itself if necessary. For example, | 82 | assume the worst and rebuild itself if necessary. For example, |
83 | in a table view this method may be called when the user adds or | 83 | in a table view this method may be called when the user adds or |
84 | removes columns from the view. | 84 | removes columns from the view. |
85 | 85 | ||
86 | If overloaded in the subclass, do not forget to call super class's | 86 | If overloaded in the subclass, do not forget to call super class's |
87 | method. | 87 | method. |
88 | 88 | ||
89 | @param config The KConfig object to read from. The group will already | 89 | @param config The KConfig object to read from. The group will already |
90 | be set, so do not change the group. | 90 | be set, so do not change the group. |
91 | */ | 91 | */ |
92 | virtual void readConfig( KConfig *config ); | 92 | virtual void readConfig( KConfig *config ); |
93 | 93 | ||
94 | /** | 94 | /** |
95 | Called whenever this view should write the config. The view should not | 95 | Called whenever this view should write the config. The view should not |
96 | write out information handled by the application, such as which fields | 96 | write out information handled by the application, such as which fields |
97 | are visible. The view should only write out information specific | 97 | are visible. The view should only write out information specific |
98 | to itself (i.e.: All information in the ViewConfigWidget) | 98 | to itself (i.e.: All information in the ViewConfigWidget) |
99 | 99 | ||
100 | If overloaded in the subclass, do not forget to call the super class's | 100 | If overloaded in the subclass, do not forget to call the super class's |
101 | method. | 101 | method. |
102 | 102 | ||
103 | @param config The KConfig object to read from. The group will already | 103 | @param config The KConfig object to read from. The group will already |
104 | be set, so do not change the group. | 104 | be set, so do not change the group. |
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,1722 +1,1751 @@ | |||
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; |
164 | QFontMetrics *mFm; | 165 | QFontMetrics *mFm; |
165 | QFontMetrics *mBFm; // bold font | 166 | QFontMetrics *mBFm; // bold font |
166 | QFont mHeaderFont; // custom header font | 167 | QFont mHeaderFont; // custom header font |
167 | CardView::SelectionMode mSelectionMode; | 168 | CardView::SelectionMode mSelectionMode; |
168 | bool mDrawCardBorder; | 169 | bool mDrawCardBorder; |
169 | bool mDrawFieldLabels; | 170 | bool mDrawFieldLabels; |
170 | bool mDrawSeparators; | 171 | bool mDrawSeparators; |
171 | int mSepWidth; | 172 | int mSepWidth; |
172 | bool mShowEmptyFields; | 173 | bool mShowEmptyFields; |
173 | bool mLayoutDirty; | 174 | bool mLayoutDirty; |
174 | bool mLastClickOnItem; | 175 | bool mLastClickOnItem; |
175 | uint mItemMargin; // internal margin in items | 176 | uint mItemMargin; // internal margin in items |
176 | uint mItemSpacing; // spacing between items, column seperators and border | 177 | uint mItemSpacing; // spacing between items, column seperators and border |
177 | int mItemWidth; // width of all items | 178 | int mItemWidth; // width of all items |
178 | uint mMaxFieldLines; // Max lines to dispaly pr field | 179 | uint mMaxFieldLines; // Max lines to dispaly pr field |
179 | CardViewItem *mCurrentItem; | 180 | CardViewItem *mCurrentItem; |
180 | QPoint mLastClickPos; | 181 | QPoint mLastClickPos; |
181 | QTimer *mTimer; // times out if mouse rests for more than 500 msecs | 182 | QTimer *mTimer; // times out if mouse rests for more than 500 msecs |
182 | CardViewTip *mTip; // passed to the item under a resting cursor to display full text | 183 | CardViewTip *mTip; // passed to the item under a resting cursor to display full text |
183 | bool mOnSeparator; // set/reset on mouse movement | 184 | bool mOnSeparator; // set/reset on mouse movement |
184 | // for resizing by dragging the separators | 185 | // for resizing by dragging the separators |
185 | int mResizeAnchor; // uint, ulong? the mouse down separator left | 186 | int mResizeAnchor; // uint, ulong? the mouse down separator left |
186 | int mRubberBandAnchor; // for erasing rubber bands | 187 | int mRubberBandAnchor; // for erasing rubber bands |
187 | // data used for resizing. | 188 | // data used for resizing. |
188 | // as they are beeded by each mouse move while resizing, we store them here, | 189 | // as they are beeded by each mouse move while resizing, we store them here, |
189 | // saving 8 calculations in each mouse move. | 190 | // saving 8 calculations in each mouse move. |
190 | int colspace; // amount of space between items pr column | 191 | int colspace; // amount of space between items pr column |
191 | uint first; // the first col to anchor at for painting rubber bands | 192 | uint first; // the first col to anchor at for painting rubber bands |
192 | int firstX; // X position of first in pixel | 193 | int firstX; // X position of first in pixel |
193 | int pressed; // the colummn that was pressed on at resizing start | 194 | int pressed; // the colummn that was pressed on at resizing start |
194 | int span; // pressed - first | 195 | int span; // pressed - first |
195 | // key completion | 196 | // key completion |
196 | QString mCompText; // current completion string | 197 | QString mCompText; // current completion string |
197 | QDateTime mCompUpdated; // ...was updated at this time | 198 | QDateTime mCompUpdated; // ...was updated at this time |
198 | }; | 199 | }; |
199 | 200 | ||
200 | class CardViewItemPrivate | 201 | class CardViewItemPrivate |
201 | { | 202 | { |
202 | public: | 203 | public: |
203 | CardViewItemPrivate() : | 204 | CardViewItemPrivate() : |
204 | mSelected( false ), | 205 | mSelected( false ), |
205 | x( 0 ), | 206 | x( 0 ), |
206 | y( 0 ){}; | 207 | y( 0 ){}; |
207 | 208 | ||
208 | 209 | ||
209 | QString mCaption; | 210 | QString mCaption; |
210 | QPtrList< CardViewItem::Field > mFieldList; | 211 | QPtrList< CardViewItem::Field > mFieldList; |
211 | bool mSelected; | 212 | bool mSelected; |
212 | int x; // horizontal position, set by the view | 213 | int x; // horizontal position, set by the view |
213 | int y; // vertical position, set by the view | 214 | int y; // vertical position, set by the view |
214 | int maxLabelWidth; // the width of the widest label, according to the view font. | 215 | int maxLabelWidth; // the width of the widest label, according to the view font. |
215 | int hcache; // height cache | 216 | int hcache; // height cache |
216 | }; | 217 | }; |
217 | //END Private Data | 218 | //END Private Data |
218 | 219 | ||
219 | //BEGIN CardViewItem | 220 | //BEGIN CardViewItem |
220 | 221 | ||
221 | CardViewItem::CardViewItem(CardView *parent, QString caption) | 222 | CardViewItem::CardViewItem(CardView *parent, QString caption) |
222 | : d(new CardViewItemPrivate()), mView(parent) | 223 | : d(new CardViewItemPrivate()), mView(parent) |
223 | { | 224 | { |
224 | d->mCaption = caption; | 225 | d->mCaption = caption; |
225 | 226 | ||
226 | initialize(); | 227 | initialize(); |
227 | } | 228 | } |
228 | 229 | ||
229 | CardViewItem::~CardViewItem() | 230 | CardViewItem::~CardViewItem() |
230 | { | 231 | { |
231 | // Remove ourself from the view | 232 | // Remove ourself from the view |
232 | if (mView != 0) | 233 | if (mView != 0) |
233 | mView->takeItem(this); | 234 | mView->takeItem(this); |
234 | 235 | ||
235 | delete d; | 236 | delete d; |
236 | d = 0; | 237 | d = 0; |
237 | } | 238 | } |
238 | 239 | ||
239 | void CardViewItem::initialize() | 240 | void CardViewItem::initialize() |
240 | { | 241 | { |
241 | d->mSelected = false; | 242 | d->mSelected = false; |
242 | d->mFieldList.setAutoDelete(true); | 243 | d->mFieldList.setAutoDelete(true); |
243 | d->maxLabelWidth = 0; | 244 | d->maxLabelWidth = 0; |
244 | d->hcache=0; | 245 | d->hcache=0; |
245 | 246 | ||
246 | //calcRect(); | 247 | //calcRect(); |
247 | 248 | ||
248 | // Add ourself to the view | 249 | // Add ourself to the view |
249 | if (mView != 0) | 250 | if (mView != 0) |
250 | mView->insertItem(this); | 251 | mView->insertItem(this); |
251 | } | 252 | } |
252 | 253 | ||
253 | void CardViewItem::paintCard(QPainter *p, QColorGroup &cg) | 254 | void CardViewItem::paintCard(QPainter *p, QColorGroup &cg) |
254 | { | 255 | { |
255 | 256 | ||
256 | if (!mView) | 257 | if (!mView) |
257 | return; | 258 | return; |
258 | 259 | ||
259 | QPen pen; | 260 | QPen pen; |
260 | QBrush brush; | 261 | QBrush brush; |
261 | QFontMetrics fm = *(mView->d->mFm); | 262 | QFontMetrics fm = *(mView->d->mFm); |
262 | QFontMetrics bFm = *(mView->d->mBFm); | 263 | QFontMetrics bFm = *(mView->d->mBFm); |
263 | bool drawLabels = mView->d->mDrawFieldLabels; | 264 | bool drawLabels = mView->d->mDrawFieldLabels; |
264 | bool drawBorder = mView->d->mDrawCardBorder; | 265 | bool drawBorder = mView->d->mDrawCardBorder; |
265 | int mg = mView->itemMargin(); | 266 | int mg = mView->itemMargin(); |
266 | int w = mView->itemWidth() - (mg*2); | 267 | int w = mView->itemWidth() - (mg*2); |
267 | int h = height() - (mg*2); | 268 | int h = height() - (mg*2); |
268 | const int colonWidth( fm.width(":") ); | 269 | const int colonWidth( fm.width(":") ); |
269 | int labelXPos = 2 + mg; | 270 | int labelXPos = 2 + mg; |
270 | int labelWidth = QMIN( w/2 - 4 - mg, d->maxLabelWidth + colonWidth + 4 ); | 271 | int labelWidth = QMIN( w/2 - 4 - mg, d->maxLabelWidth + colonWidth + 4 ); |
271 | int valueXPos = labelWidth + 4 + mg; | 272 | int valueXPos = labelWidth + 4 + mg; |
272 | int valueWidth = w - labelWidth - 4 - mg; | 273 | int valueWidth = w - labelWidth - 4 - mg; |
273 | 274 | ||
274 | p->setFont( mView->font() ); | 275 | p->setFont( mView->font() ); |
275 | labelWidth -= colonWidth; // extra space for the colon | 276 | labelWidth -= colonWidth; // extra space for the colon |
276 | 277 | ||
277 | if (!drawLabels) | 278 | if (!drawLabels) |
278 | { | 279 | { |
279 | valueXPos = labelXPos; | 280 | valueXPos = labelXPos; |
280 | valueWidth = w - 4; | 281 | valueWidth = w - 4; |
281 | } | 282 | } |
282 | 283 | ||
283 | // Draw a simple box | 284 | // Draw a simple box |
284 | if (isSelected()) | 285 | if (isSelected()) |
285 | pen = QPen(cg.highlight(), 1); | 286 | pen = QPen(cg.highlight(), 1); |
286 | else | 287 | else |
287 | pen = QPen(cg.button(), 1); | 288 | pen = QPen(cg.button(), 1); |
288 | p->setPen(pen); | 289 | p->setPen(pen); |
289 | 290 | ||
290 | // Draw the border - this is only draw if the user asks for it. | 291 | // Draw the border - this is only draw if the user asks for it. |
291 | if (drawBorder) | 292 | if (drawBorder) |
292 | p->drawRect( mg, mg, w, h ); | 293 | p->drawRect( mg, mg, w, h ); |
293 | 294 | ||
294 | // set the proper pen color for the caption box | 295 | // set the proper pen color for the caption box |
295 | if (isSelected()) | 296 | if (isSelected()) |
296 | brush = cg.brush(QColorGroup::Highlight); | 297 | brush = cg.brush(QColorGroup::Highlight); |
297 | else | 298 | else |
298 | brush = cg.brush(QColorGroup::Button); | 299 | brush = cg.brush(QColorGroup::Button); |
299 | 300 | ||
300 | p->fillRect(mg, mg, w, 4 + bFm.height(), brush); | 301 | p->fillRect(mg, mg, w, 4 + bFm.height(), brush); |
301 | 302 | ||
302 | // Now paint the caption | 303 | // Now paint the caption |
303 | p->save(); | 304 | p->save(); |
304 | QFont bFont = mView->headerFont(); | 305 | QFont bFont = mView->headerFont(); |
305 | //bFont.setBold(true); | 306 | //bFont.setBold(true); |
306 | p->setFont(bFont); | 307 | p->setFont(bFont); |
307 | if (isSelected()) | 308 | if (isSelected()) |
308 | p->setPen(cg.highlightedText()); | 309 | p->setPen(cg.highlightedText()); |
309 | else | 310 | else |
310 | p->setPen(cg.buttonText()); | 311 | p->setPen(cg.buttonText()); |
311 | p->drawText(2+mg, 2+mg + bFm.ascent()/*bFm.height()*//*-bFm.descent()*//*-bFm.leading()*/, trimString(d->mCaption, w-4, bFm)); | 312 | p->drawText(2+mg, 2+mg + bFm.ascent()/*bFm.height()*//*-bFm.descent()*//*-bFm.leading()*/, trimString(d->mCaption, w-4, bFm)); |
312 | p->restore(); | 313 | p->restore(); |
313 | 314 | ||
314 | // Go through the fields and draw them | 315 | // Go through the fields and draw them |
315 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); | 316 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); |
316 | QString label, value; | 317 | QString label, value; |
317 | int yPos = mg + 4 + bFm.height()/* + 1*/ + fm.height(); // why the + 1 ??? (anders) | 318 | int yPos = mg + 4 + bFm.height()/* + 1*/ + fm.height(); // why the + 1 ??? (anders) |
318 | p->setPen(cg.text()); | 319 | p->setPen(cg.text()); |
319 | 320 | ||
320 | int fh = fm.height(); | 321 | int fh = fm.height(); |
321 | int cln( 0 ); | 322 | int cln( 0 ); |
322 | QString tmp; | 323 | QString tmp; |
323 | int maxLines = mView->maxFieldLines(); | 324 | int maxLines = mView->maxFieldLines(); |
324 | for (iter.toFirst(); iter.current(); ++iter) | 325 | for (iter.toFirst(); iter.current(); ++iter) |
325 | { | 326 | { |
326 | value = (*iter)->second; | 327 | value = (*iter)->second; |
327 | if ( value.isEmpty() && ! mView->d->mShowEmptyFields ) | 328 | if ( value.isEmpty() && ! mView->d->mShowEmptyFields ) |
328 | continue; | 329 | continue; |
329 | 330 | ||
330 | if (drawLabels) | 331 | if (drawLabels) |
331 | { | 332 | { |
332 | label = trimString((*iter)->first, labelWidth, fm); | 333 | label = trimString((*iter)->first, labelWidth, fm); |
333 | p->drawText(labelXPos, yPos, label + ":"); | 334 | p->drawText(labelXPos, yPos, label + ":"); |
334 | } | 335 | } |
335 | /* US original | 336 | /* US original |
336 | for (cln=0; cln <= maxLines; cln++) | 337 | for (cln=0; cln <= maxLines; cln++) |
337 | { | 338 | { |
338 | tmp = value.section('\n',cln,cln); | 339 | tmp = value.section('\n',cln,cln); |
339 | if ( !tmp.isEmpty() ) p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); | 340 | if ( !tmp.isEmpty() ) p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); |
340 | else break; | 341 | else break; |
341 | } | 342 | } |
342 | */ | 343 | */ |
343 | 344 | ||
344 | //US new implementation | 345 | //US new implementation |
345 | QStringList strlst = QStringList::split('\n', value, true); | 346 | QStringList strlst = QStringList::split('\n', value, true); |
346 | 347 | ||
347 | for (cln=0; cln <= maxLines && cln <= (int)strlst.count(); cln++) | 348 | for (cln=0; cln <= maxLines && cln <= (int)strlst.count(); cln++) |
348 | { | 349 | { |
349 | tmp = strlst[cln]; | 350 | tmp = strlst[cln]; |
350 | 351 | ||
351 | if ( !tmp.isEmpty() ) | 352 | if ( !tmp.isEmpty() ) |
352 | p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); | 353 | p->drawText( valueXPos, yPos + cln*fh, trimString( tmp, valueWidth, fm ) ); |
353 | else | 354 | else |
354 | break; | 355 | break; |
355 | 356 | ||
356 | } | 357 | } |
357 | 358 | ||
358 | if ( cln == 0 ) cln = 1; | 359 | if ( cln == 0 ) cln = 1; |
359 | yPos += cln * fh + 2; | 360 | yPos += cln * fh + 2; |
360 | } | 361 | } |
361 | 362 | ||
362 | // if we are the current item and the view has focus, draw focus rect | 363 | // if we are the current item and the view has focus, draw focus rect |
363 | if ( mView->currentItem() == this && mView->hasFocus() ) | 364 | if ( mView->currentItem() == this && mView->hasFocus() ) |
364 | { | 365 | { |
365 | /*US | 366 | /*US |
366 | mView->style().drawPrimitive( QStyle::PE_FocusRect, p, | 367 | mView->style().drawPrimitive( QStyle::PE_FocusRect, p, |
367 | QRect(0, 0, mView->itemWidth(), h+(2*mg)), cg, | 368 | QRect(0, 0, mView->itemWidth(), h+(2*mg)), cg, |
368 | QStyle::Style_FocusAtBorder, | 369 | QStyle::Style_FocusAtBorder, |
369 | QStyleOption( isSelected() ? cg.highlight() : cg.base() ) ); | 370 | QStyleOption( isSelected() ? cg.highlight() : cg.base() ) ); |
370 | */ | 371 | */ |
371 | 372 | ||
372 | const QColor pHighl = isSelected() ? cg.highlight() : cg.base(); | 373 | const QColor pHighl = isSelected() ? cg.highlight() : cg.base(); |
373 | const QRect r(0, 0, mView->itemWidth(), h+(2*mg)); | 374 | const QRect r(0, 0, mView->itemWidth(), h+(2*mg)); |
374 | #ifndef DESKTOP_VERSION | 375 | #ifndef DESKTOP_VERSION |
375 | mView->style().drawFocusRect(p, r, cg, &pHighl, true); | 376 | mView->style().drawFocusRect(p, r, cg, &pHighl, true); |
376 | #endif | 377 | #endif |
377 | } | 378 | } |
378 | } | 379 | } |
379 | 380 | ||
380 | const QString &CardViewItem::caption() const | 381 | const QString &CardViewItem::caption() const |
381 | { | 382 | { |
382 | return d->mCaption; | 383 | return d->mCaption; |
383 | } | 384 | } |
384 | 385 | ||
385 | 386 | ||
386 | int CardViewItem::height( bool allowCache ) const | 387 | int CardViewItem::height( bool allowCache ) const |
387 | { | 388 | { |
388 | // use cache | 389 | // use cache |
389 | if ( allowCache && d->hcache ) | 390 | if ( allowCache && d->hcache ) |
390 | return d->hcache; | 391 | return d->hcache; |
391 | 392 | ||
392 | // Base height: | 393 | // Base height: |
393 | // 2 for line width | 394 | // 2 for line width |
394 | // 2 for top caption pad | 395 | // 2 for top caption pad |
395 | // 2 for bottom caption pad | 396 | // 2 for bottom caption pad |
396 | // 2 pad for the end | 397 | // 2 pad for the end |
397 | // + 2 times the advised margin | 398 | // + 2 times the advised margin |
398 | int baseHeight = 8 + ( 2 * mView->itemMargin() ); | 399 | int baseHeight = 8 + ( 2 * mView->itemMargin() ); |
399 | 400 | ||
400 | // size of font for each field | 401 | // size of font for each field |
401 | // 2 pad for each field | 402 | // 2 pad for each field |
402 | 403 | ||
403 | // anders: if the view does not show empty fields, check for value | 404 | // anders: if the view does not show empty fields, check for value |
404 | bool sef = mView->showEmptyFields(); | 405 | bool sef = mView->showEmptyFields(); |
405 | int fh = mView->d->mFm->height();//lineSpacing(); // font height | 406 | int fh = mView->d->mFm->height();//lineSpacing(); // font height |
406 | //int sp = QMAX( 0, 2- mView->d->mFm->leading() ); // field spacing NOTE make a property | 407 | //int sp = QMAX( 0, 2- mView->d->mFm->leading() ); // field spacing NOTE make a property |
407 | int fieldHeight = 0; | 408 | int fieldHeight = 0; |
408 | int lines; | 409 | int lines; |
409 | int maxLines( mView->maxFieldLines() ); | 410 | int maxLines( mView->maxFieldLines() ); |
410 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); | 411 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); |
411 | for (iter.toFirst(); iter.current(); ++iter) | 412 | for (iter.toFirst(); iter.current(); ++iter) |
412 | { | 413 | { |
413 | if ( !sef && (*iter)->second.isEmpty() ) | 414 | if ( !sef && (*iter)->second.isEmpty() ) |
414 | continue; | 415 | continue; |
415 | lines = QMIN( (*iter)->second.contains('\n') + 1, maxLines ); | 416 | lines = QMIN( (*iter)->second.contains('\n') + 1, maxLines ); |
416 | fieldHeight += ( lines * fh ) + 2;//sp; | 417 | fieldHeight += ( lines * fh ) + 2;//sp; |
417 | } | 418 | } |
418 | 419 | ||
419 | // height of caption font (bold) | 420 | // height of caption font (bold) |
420 | fieldHeight += mView->d->mBFm->height(); | 421 | fieldHeight += mView->d->mBFm->height(); |
421 | d->hcache = baseHeight + fieldHeight; | 422 | d->hcache = baseHeight + fieldHeight; |
422 | return d->hcache; | 423 | return d->hcache; |
423 | } | 424 | } |
424 | 425 | ||
425 | bool CardViewItem::isSelected() const | 426 | bool CardViewItem::isSelected() const |
426 | { | 427 | { |
427 | return d->mSelected; | 428 | return d->mSelected; |
428 | } | 429 | } |
429 | 430 | ||
430 | void CardViewItem::setSelected(bool selected) | 431 | void CardViewItem::setSelected(bool selected) |
431 | { | 432 | { |
432 | d->mSelected = selected; | 433 | d->mSelected = selected; |
433 | } | 434 | } |
434 | 435 | ||
435 | void CardViewItem::insertField(const QString &label, const QString &value) | 436 | void CardViewItem::insertField(const QString &label, const QString &value) |
436 | { | 437 | { |
437 | CardViewItem::Field *f = new CardViewItem::Field(label, value); | 438 | CardViewItem::Field *f = new CardViewItem::Field(label, value); |
438 | d->mFieldList.append(f); | 439 | d->mFieldList.append(f); |
439 | d->hcache=0; | 440 | d->hcache=0; |
440 | 441 | ||
441 | if (mView) | 442 | if (mView) |
442 | { | 443 | { |
443 | mView->setLayoutDirty(true); | 444 | mView->setLayoutDirty(true); |
444 | d->maxLabelWidth = QMAX( mView->d->mFm->width( label ), d->maxLabelWidth ); | 445 | d->maxLabelWidth = QMAX( mView->d->mFm->width( label ), d->maxLabelWidth ); |
445 | } | 446 | } |
446 | } | 447 | } |
447 | 448 | ||
448 | void CardViewItem::removeField(const QString &label) | 449 | void CardViewItem::removeField(const QString &label) |
449 | { | 450 | { |
450 | CardViewItem::Field *f; | 451 | CardViewItem::Field *f; |
451 | 452 | ||
452 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); | 453 | QPtrListIterator< CardViewItem::Field > iter(d->mFieldList); |
453 | for (iter.toFirst(); iter.current(); ++iter) | 454 | for (iter.toFirst(); iter.current(); ++iter) |
454 | { | 455 | { |
455 | f = *iter; | 456 | f = *iter; |
456 | if (f->first == label) | 457 | if (f->first == label) |
457 | break; | 458 | break; |
458 | } | 459 | } |
459 | 460 | ||
460 | if (*iter) | 461 | if (*iter) |
461 | d->mFieldList.remove(*iter); | 462 | d->mFieldList.remove(*iter); |
462 | d->hcache = 0; | 463 | d->hcache = 0; |
463 | 464 | ||
464 | if (mView) | 465 | if (mView) |
465 | mView->setLayoutDirty(true); | 466 | mView->setLayoutDirty(true); |
466 | } | 467 | } |
467 | 468 | ||
468 | void CardViewItem::clearFields() | 469 | void CardViewItem::clearFields() |
469 | { | 470 | { |
470 | d->mFieldList.clear(); | 471 | d->mFieldList.clear(); |
471 | d->hcache = 0; | 472 | d->hcache = 0; |
472 | 473 | ||
473 | if (mView) | 474 | if (mView) |
474 | mView->setLayoutDirty(true); | 475 | mView->setLayoutDirty(true); |
475 | } | 476 | } |
476 | 477 | ||
477 | QString CardViewItem::trimString(const QString &text, int width, | 478 | QString CardViewItem::trimString(const QString &text, int width, |
478 | QFontMetrics &fm) | 479 | QFontMetrics &fm) |
479 | { | 480 | { |
480 | if (fm.width(text) <= width) | 481 | if (fm.width(text) <= width) |
481 | return text; | 482 | return text; |
482 | 483 | ||
483 | QString dots = "..."; | 484 | QString dots = "..."; |
484 | int dotWidth = fm.width(dots); | 485 | int dotWidth = fm.width(dots); |
485 | QString trimmed; | 486 | QString trimmed; |
486 | int charNum = 0; | 487 | int charNum = 0; |
487 | 488 | ||
488 | while (fm.width(trimmed) + dotWidth < width) | 489 | while (fm.width(trimmed) + dotWidth < width) |
489 | { | 490 | { |
490 | trimmed += text[charNum]; | 491 | trimmed += text[charNum]; |
491 | charNum++; | 492 | charNum++; |
492 | } | 493 | } |
493 | 494 | ||
494 | // Now trim the last char, since it put the width over the top | 495 | // Now trim the last char, since it put the width over the top |
495 | trimmed = trimmed.left(trimmed.length()-1); | 496 | trimmed = trimmed.left(trimmed.length()-1); |
496 | trimmed += dots; | 497 | trimmed += dots; |
497 | 498 | ||
498 | return trimmed; | 499 | return trimmed; |
499 | } | 500 | } |
500 | 501 | ||
501 | CardViewItem *CardViewItem::nextItem() | 502 | CardViewItem *CardViewItem::nextItem() |
502 | { | 503 | { |
503 | CardViewItem *item = 0; | 504 | CardViewItem *item = 0; |
504 | 505 | ||
505 | if (mView) | 506 | if (mView) |
506 | item = mView->itemAfter(this); | 507 | item = mView->itemAfter(this); |
507 | 508 | ||
508 | return item; | 509 | return item; |
509 | } | 510 | } |
510 | 511 | ||
511 | void CardViewItem::repaintCard() | 512 | void CardViewItem::repaintCard() |
512 | { | 513 | { |
513 | if (mView) | 514 | if (mView) |
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); |
770 | repaintContents( QRect(item->d->x, item->d->y, d->mItemWidth, item->height()) ); | 773 | repaintContents( QRect(item->d->x, item->d->y, d->mItemWidth, item->height()) ); |
771 | } | 774 | } |
772 | 775 | ||
773 | void CardView::setSelectionMode(CardView::SelectionMode mode) | 776 | void CardView::setSelectionMode(CardView::SelectionMode mode) |
774 | { | 777 | { |
775 | selectAll(false); | 778 | selectAll(false); |
776 | 779 | ||
777 | d->mSelectionMode = mode; | 780 | d->mSelectionMode = mode; |
778 | } | 781 | } |
779 | 782 | ||
780 | CardView::SelectionMode CardView::selectionMode() const | 783 | CardView::SelectionMode CardView::selectionMode() const |
781 | { | 784 | { |
782 | return d->mSelectionMode; | 785 | return d->mSelectionMode; |
783 | } | 786 | } |
784 | 787 | ||
785 | void CardView::selectAll(bool state) | 788 | void CardView::selectAll(bool state) |
786 | { | 789 | { |
787 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 790 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
788 | if (!state) | 791 | if (!state) |
789 | { | 792 | { |
790 | for (iter.toFirst(); iter.current(); ++iter) | 793 | for (iter.toFirst(); iter.current(); ++iter) |
791 | { | 794 | { |
792 | if ((*iter)->isSelected()) | 795 | if ((*iter)->isSelected()) |
793 | { | 796 | { |
794 | (*iter)->setSelected(false); | 797 | (*iter)->setSelected(false); |
795 | (*iter)->repaintCard(); | 798 | (*iter)->repaintCard(); |
796 | } | 799 | } |
797 | } | 800 | } |
798 | //emit selectionChanged(); // WARNING FIXME | 801 | //emit selectionChanged(); // WARNING FIXME |
799 | emit selectionChanged(0); | 802 | emit selectionChanged(0); |
800 | } | 803 | } |
801 | else if (d->mSelectionMode != CardView::Single) | 804 | else if (d->mSelectionMode != CardView::Single) |
802 | { | 805 | { |
803 | for (iter.toFirst(); iter.current(); ++iter) | 806 | for (iter.toFirst(); iter.current(); ++iter) |
804 | { | 807 | { |
805 | (*iter)->setSelected(true); | 808 | (*iter)->setSelected(true); |
806 | } | 809 | } |
807 | 810 | ||
808 | if (d->mItemList.count() > 0) | 811 | if (d->mItemList.count() > 0) |
809 | { | 812 | { |
810 | // emit, since there must have been at least one selected | 813 | // emit, since there must have been at least one selected |
811 | emit selectionChanged(); | 814 | emit selectionChanged(); |
812 | //repaint();//??? | 815 | //repaint();//??? |
813 | viewport()->update(); | 816 | viewport()->update(); |
814 | } | 817 | } |
815 | } | 818 | } |
816 | } | 819 | } |
817 | 820 | ||
818 | void CardView::setSelected(CardViewItem *item, bool selected) | 821 | void CardView::setSelected(CardViewItem *item, bool selected) |
819 | { | 822 | { |
820 | if ((item == 0) || (item->isSelected() == selected)) | 823 | if ((item == 0) || (item->isSelected() == selected)) |
821 | return; | 824 | return; |
822 | 825 | ||
823 | if ( selected && d->mCurrentItem != item ) | 826 | if ( selected && d->mCurrentItem != item ) |
824 | { | 827 | { |
825 | CardViewItem *it = d->mCurrentItem; | 828 | CardViewItem *it = d->mCurrentItem; |
826 | d->mCurrentItem = item; | 829 | d->mCurrentItem = item; |
827 | if ( it ) | 830 | if ( it ) |
828 | it->repaintCard(); | 831 | it->repaintCard(); |
829 | } | 832 | } |
830 | 833 | ||
831 | if (d->mSelectionMode == CardView::Single) | 834 | if (d->mSelectionMode == CardView::Single) |
832 | { | 835 | { |
833 | bool b = signalsBlocked(); | 836 | bool b = signalsBlocked(); |
834 | blockSignals(true); | 837 | blockSignals(true); |
835 | selectAll(false); | 838 | selectAll(false); |
836 | blockSignals(b); | 839 | blockSignals(b); |
837 | 840 | ||
838 | if (selected) | 841 | if (selected) |
839 | { | 842 | { |
840 | item->setSelected(selected); | 843 | item->setSelected(selected); |
841 | item->repaintCard(); | 844 | item->repaintCard(); |
842 | emit selectionChanged(); | 845 | emit selectionChanged(); |
843 | emit selectionChanged(item); | 846 | emit selectionChanged(item); |
844 | } | 847 | } |
845 | else | 848 | else |
846 | { | 849 | { |
847 | emit selectionChanged(); | 850 | emit selectionChanged(); |
848 | emit selectionChanged(0); | 851 | emit selectionChanged(0); |
849 | } | 852 | } |
850 | } | 853 | } |
851 | else if (d->mSelectionMode == CardView::Multi) | 854 | else if (d->mSelectionMode == CardView::Multi) |
852 | { | 855 | { |
853 | item->setSelected(selected); | 856 | item->setSelected(selected); |
854 | item->repaintCard(); | 857 | item->repaintCard(); |
855 | emit selectionChanged(); | 858 | emit selectionChanged(); |
856 | } | 859 | } |
857 | else if (d->mSelectionMode == CardView::Extended) | 860 | else if (d->mSelectionMode == CardView::Extended) |
858 | { | 861 | { |
859 | bool b = signalsBlocked(); | 862 | bool b = signalsBlocked(); |
860 | blockSignals(true); | 863 | blockSignals(true); |
861 | selectAll(false); | 864 | selectAll(false); |
862 | blockSignals(b); | 865 | blockSignals(b); |
863 | 866 | ||
864 | item->setSelected(selected); | 867 | item->setSelected(selected); |
865 | item->repaintCard(); | 868 | item->repaintCard(); |
866 | emit selectionChanged(); | 869 | emit selectionChanged(); |
867 | } | 870 | } |
868 | } | 871 | } |
869 | 872 | ||
870 | bool CardView::isSelected(CardViewItem *item) const | 873 | bool CardView::isSelected(CardViewItem *item) const |
871 | { | 874 | { |
872 | return (item && item->isSelected()); | 875 | return (item && item->isSelected()); |
873 | } | 876 | } |
874 | 877 | ||
875 | CardViewItem *CardView::selectedItem() const | 878 | CardViewItem *CardView::selectedItem() const |
876 | { | 879 | { |
877 | // find the first selected item | 880 | // find the first selected item |
878 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 881 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
879 | for (iter.toFirst(); iter.current(); ++iter) | 882 | for (iter.toFirst(); iter.current(); ++iter) |
880 | { | 883 | { |
881 | if ((*iter)->isSelected()) | 884 | if ((*iter)->isSelected()) |
882 | return *iter; | 885 | return *iter; |
883 | } | 886 | } |
884 | 887 | ||
885 | return 0; | 888 | return 0; |
886 | } | 889 | } |
887 | 890 | ||
888 | CardViewItem *CardView::firstItem() const | 891 | CardViewItem *CardView::firstItem() const |
889 | { | 892 | { |
890 | return d->mItemList.first(); | 893 | return d->mItemList.first(); |
891 | } | 894 | } |
892 | 895 | ||
893 | int CardView::childCount() const | 896 | int CardView::childCount() const |
894 | { | 897 | { |
895 | return d->mItemList.count(); | 898 | return d->mItemList.count(); |
896 | } | 899 | } |
897 | /*US | 900 | /*US |
898 | CardViewItem *CardView::findItem(const QString &text, const QString &label, | 901 | CardViewItem *CardView::findItem(const QString &text, const QString &label, |
899 | Qt::StringComparisonMode compare) | 902 | Qt::StringComparisonMode compare) |
900 | { | 903 | { |
901 | // IF the text is empty, we will return null, since empty text will | 904 | // IF the text is empty, we will return null, since empty text will |
902 | // match anything! | 905 | // match anything! |
903 | if (text.isEmpty()) | 906 | if (text.isEmpty()) |
904 | return 0; | 907 | return 0; |
905 | 908 | ||
906 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 909 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
907 | if (compare & Qt::BeginsWith) | 910 | if (compare & Qt::BeginsWith) |
908 | { | 911 | { |
909 | QString value; | 912 | QString value; |
910 | for (iter.toFirst(); iter.current(); ++iter) | 913 | for (iter.toFirst(); iter.current(); ++iter) |
911 | { | 914 | { |
912 | value = (*iter)->fieldValue(label).upper(); | 915 | value = (*iter)->fieldValue(label).upper(); |
913 | if (value.startsWith(text.upper())) | 916 | if (value.startsWith(text.upper())) |
914 | return *iter; | 917 | return *iter; |
915 | } | 918 | } |
916 | } | 919 | } |
917 | else | 920 | else |
918 | { | 921 | { |
919 | kdDebug(5720) << "CardView::findItem: search method not implemented" << endl; | 922 | kdDebug(5720) << "CardView::findItem: search method not implemented" << endl; |
920 | } | 923 | } |
921 | 924 | ||
922 | return 0; | 925 | return 0; |
923 | } | 926 | } |
924 | */ | 927 | */ |
925 | 928 | ||
926 | uint CardView::columnWidth() | 929 | uint CardView::columnWidth() |
927 | { | 930 | { |
928 | return d->mDrawSeparators ? | 931 | return d->mDrawSeparators ? |
929 | d->mItemWidth + ( 2 * d->mItemSpacing ) + d->mSepWidth : | 932 | d->mItemWidth + ( 2 * d->mItemSpacing ) + d->mSepWidth : |
930 | d->mItemWidth + d->mItemSpacing; | 933 | d->mItemWidth + d->mItemSpacing; |
931 | } | 934 | } |
932 | 935 | ||
933 | void CardView::drawContents(QPainter *p, int clipx, int clipy, | 936 | void CardView::drawContents(QPainter *p, int clipx, int clipy, |
934 | int clipw, int cliph) | 937 | int clipw, int cliph) |
935 | { | 938 | { |
936 | QScrollView::drawContents(p, clipx, clipy, clipw, cliph); | 939 | QScrollView::drawContents(p, clipx, clipy, clipw, cliph); |
937 | 940 | ||
938 | if (d->mLayoutDirty) | 941 | if (d->mLayoutDirty) |
939 | calcLayout(); | 942 | calcLayout(); |
940 | 943 | ||
941 | //kdDebug() << "CardView::drawContents: " << clipx << ", " << clipy | 944 | //kdDebug() << "CardView::drawContents: " << clipx << ", " << clipy |
942 | // << ", " << clipw << ", " << cliph << endl; | 945 | // << ", " << clipw << ", " << cliph << endl; |
943 | 946 | ||
944 | QColorGroup cg = viewport()->palette().active(); // allow setting costum colors in the viewport pale | 947 | QColorGroup cg = viewport()->palette().active(); // allow setting costum colors in the viewport pale |
945 | 948 | ||
946 | QRect clipRect(clipx, clipy, clipw, cliph); | 949 | QRect clipRect(clipx, clipy, clipw, cliph); |
947 | QRect cardRect; | 950 | QRect cardRect; |
948 | QRect sepRect; | 951 | QRect sepRect; |
949 | CardViewItem *item; | 952 | CardViewItem *item; |
950 | CardViewSeparator *sep; | 953 | CardViewSeparator *sep; |
951 | 954 | ||
952 | // make sure the viewport is a pure background | 955 | // make sure the viewport is a pure background |
953 | viewport()->erase(clipRect); | 956 | viewport()->erase(clipRect); |
954 | 957 | ||
955 | // Now tell the cards to draw, if they are in the clip region | 958 | // Now tell the cards to draw, if they are in the clip region |
956 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 959 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
957 | for (iter.toFirst(); iter.current(); ++iter) | 960 | for (iter.toFirst(); iter.current(); ++iter) |
958 | { | 961 | { |
959 | item = *iter; | 962 | item = *iter; |
960 | cardRect.setRect( item->d->x, item->d->y, d->mItemWidth, item->height() ); | 963 | cardRect.setRect( item->d->x, item->d->y, d->mItemWidth, item->height() ); |
961 | 964 | ||
962 | if (clipRect.intersects(cardRect) || clipRect.contains(cardRect)) | 965 | if (clipRect.intersects(cardRect) || clipRect.contains(cardRect)) |
963 | { | 966 | { |
964 | //kdDebug() << "\trepainting card at: " << cardRect.x() << ", " | 967 | //kdDebug() << "\trepainting card at: " << cardRect.x() << ", " |
965 | // << cardRect.y() << endl; | 968 | // << cardRect.y() << endl; |
966 | 969 | ||
967 | // Tell the card to paint | 970 | // Tell the card to paint |
968 | p->save(); | 971 | p->save(); |
969 | p->translate(cardRect.x(), cardRect.y()); | 972 | p->translate(cardRect.x(), cardRect.y()); |
970 | item->paintCard(p, cg); | 973 | item->paintCard(p, cg); |
971 | p->restore(); | 974 | p->restore(); |
972 | } | 975 | } |
973 | } | 976 | } |
974 | 977 | ||
975 | // Followed by the separators if they are in the clip region | 978 | // Followed by the separators if they are in the clip region |
976 | QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); | 979 | QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); |
977 | for (sepIter.toFirst(); sepIter.current(); ++sepIter) | 980 | for (sepIter.toFirst(); sepIter.current(); ++sepIter) |
978 | { | 981 | { |
979 | sep = *sepIter; | 982 | sep = *sepIter; |
980 | sepRect = sep->mRect; | 983 | sepRect = sep->mRect; |
981 | 984 | ||
982 | if (clipRect.intersects(sepRect) || clipRect.contains(sepRect)) | 985 | if (clipRect.intersects(sepRect) || clipRect.contains(sepRect)) |
983 | { | 986 | { |
984 | p->save(); | 987 | p->save(); |
985 | p->translate(sepRect.x(), sepRect.y()); | 988 | p->translate(sepRect.x(), sepRect.y()); |
986 | sep->paintSeparator(p, cg); | 989 | sep->paintSeparator(p, cg); |
987 | p->restore(); | 990 | p->restore(); |
988 | } | 991 | } |
989 | } | 992 | } |
990 | } | 993 | } |
991 | 994 | ||
992 | void CardView::resizeEvent(QResizeEvent *e) | 995 | void CardView::resizeEvent(QResizeEvent *e) |
993 | { | 996 | { |
994 | QScrollView::resizeEvent(e); | 997 | QScrollView::resizeEvent(e); |
995 | 998 | ||
996 | setLayoutDirty(true); | 999 | setLayoutDirty(true); |
997 | } | 1000 | } |
998 | 1001 | ||
999 | void CardView::calcLayout() | 1002 | void CardView::calcLayout() |
1000 | { | 1003 | { |
1001 | //kdDebug() << "CardView::calcLayout:" << endl; | 1004 | //kdDebug() << "CardView::calcLayout:" << endl; |
1002 | 1005 | ||
1003 | // Start in the upper left corner and layout all the | 1006 | // Start in the upper left corner and layout all the |
1004 | // cars using their height and width | 1007 | // cars using their height and width |
1005 | int maxWidth = 0; | 1008 | int maxWidth = 0; |
1006 | int maxHeight = 0; | 1009 | int maxHeight = 0; |
1007 | int xPos = 0; | 1010 | int xPos = 0; |
1008 | int yPos = 0; | 1011 | int yPos = 0; |
1009 | int cardSpacing = d->mItemSpacing; | 1012 | int cardSpacing = d->mItemSpacing; |
1010 | 1013 | ||
1011 | // delete the old separators | 1014 | // delete the old separators |
1012 | d->mSeparatorList.clear(); | 1015 | d->mSeparatorList.clear(); |
1013 | 1016 | ||
1014 | QPtrListIterator<CardViewItem> iter(d->mItemList); | 1017 | QPtrListIterator<CardViewItem> iter(d->mItemList); |
1015 | CardViewItem *item = 0; | 1018 | CardViewItem *item = 0; |
1016 | CardViewSeparator *sep = 0; | 1019 | CardViewSeparator *sep = 0; |
1017 | xPos += cardSpacing; | 1020 | xPos += cardSpacing; |
1018 | 1021 | ||
1019 | for (iter.toFirst(); iter.current(); ++iter) | 1022 | for (iter.toFirst(); iter.current(); ++iter) |
1020 | { | 1023 | { |
1021 | item = *iter; | 1024 | item = *iter; |
1022 | 1025 | ||
1023 | yPos += cardSpacing; | 1026 | yPos += cardSpacing; |
1024 | 1027 | ||
1025 | if (yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height()) | 1028 | if (yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height()) |
1026 | { | 1029 | { |
1027 | maxHeight = QMAX(maxHeight, yPos); | 1030 | maxHeight = QMAX(maxHeight, yPos); |
1028 | 1031 | ||
1029 | // Drawing in this column would be greater than the height | 1032 | // Drawing in this column would be greater than the height |
1030 | // of the scroll view, so move to next column | 1033 | // of the scroll view, so move to next column |
1031 | yPos = cardSpacing; | 1034 | yPos = cardSpacing; |
1032 | xPos += cardSpacing + maxWidth; | 1035 | xPos += cardSpacing + maxWidth; |
1033 | if (d->mDrawSeparators) | 1036 | if (d->mDrawSeparators) |
1034 | { | 1037 | { |
1035 | // Create a separator since the user asked | 1038 | // Create a separator since the user asked |
1036 | sep = new CardViewSeparator(this); | 1039 | sep = new CardViewSeparator(this); |
1037 | sep->mRect.moveTopLeft(QPoint(xPos, yPos+d->mItemMargin)); | 1040 | sep->mRect.moveTopLeft(QPoint(xPos, yPos+d->mItemMargin)); |
1038 | xPos += d->mSepWidth + cardSpacing; | 1041 | xPos += d->mSepWidth + cardSpacing; |
1039 | d->mSeparatorList.append(sep); | 1042 | d->mSeparatorList.append(sep); |
1040 | } | 1043 | } |
1041 | 1044 | ||
1042 | maxWidth = 0; | 1045 | maxWidth = 0; |
1043 | } | 1046 | } |
1044 | 1047 | ||
1045 | item->d->x = xPos; | 1048 | item->d->x = xPos; |
1046 | item->d->y = yPos; | 1049 | item->d->y = yPos; |
1047 | 1050 | ||
1048 | yPos += item->height(); | 1051 | yPos += item->height(); |
1049 | maxWidth = QMAX(maxWidth, d->mItemWidth); | 1052 | maxWidth = QMAX(maxWidth, d->mItemWidth); |
1050 | } | 1053 | } |
1051 | 1054 | ||
1052 | xPos += maxWidth; | 1055 | xPos += maxWidth; |
1053 | resizeContents( xPos + cardSpacing, maxHeight ); | 1056 | resizeContents( xPos + cardSpacing, maxHeight ); |
1054 | 1057 | ||
1055 | // Update the height of all the separators now that we know the | 1058 | // Update the height of all the separators now that we know the |
1056 | // max height of a column | 1059 | // max height of a column |
1057 | QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); | 1060 | QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); |
1058 | for (sepIter.toFirst(); sepIter.current(); ++sepIter) | 1061 | for (sepIter.toFirst(); sepIter.current(); ++sepIter) |
1059 | { | 1062 | { |
1060 | (*sepIter)->mRect.setHeight(maxHeight - 2*cardSpacing - 2*d->mItemMargin); | 1063 | (*sepIter)->mRect.setHeight(maxHeight - 2*cardSpacing - 2*d->mItemMargin); |
1061 | } | 1064 | } |
1062 | 1065 | ||
1063 | d->mLayoutDirty = false; | 1066 | d->mLayoutDirty = false; |
1064 | } | 1067 | } |
1065 | 1068 | ||
1066 | CardViewItem *CardView::itemAfter(CardViewItem *item) | 1069 | CardViewItem *CardView::itemAfter(CardViewItem *item) |
1067 | { | 1070 | { |
1068 | /*int pos = */d->mItemList.findRef(item); | 1071 | /*int pos = */d->mItemList.findRef(item); |
1069 | return d->mItemList.next();//at(pos+1); | 1072 | return d->mItemList.next();//at(pos+1); |
1070 | } | 1073 | } |
1071 | 1074 | ||
1072 | uint CardView::itemMargin() | 1075 | uint CardView::itemMargin() |
1073 | { | 1076 | { |
1074 | return d->mItemMargin; | 1077 | return d->mItemMargin; |
1075 | } | 1078 | } |
1076 | 1079 | ||
1077 | void CardView::setItemMargin( uint margin ) | 1080 | void CardView::setItemMargin( uint margin ) |
1078 | { | 1081 | { |
1079 | if ( margin == d->mItemMargin ) | 1082 | if ( margin == d->mItemMargin ) |
1080 | return; | 1083 | return; |
1081 | 1084 | ||
1082 | d->mItemMargin = margin; | 1085 | d->mItemMargin = margin; |
1083 | setLayoutDirty( true ); | 1086 | setLayoutDirty( true ); |
1084 | } | 1087 | } |
1085 | 1088 | ||
1086 | uint CardView::itemSpacing() | 1089 | uint CardView::itemSpacing() |
1087 | { | 1090 | { |
1088 | return d->mItemSpacing; | 1091 | return d->mItemSpacing; |
1089 | } | 1092 | } |
1090 | 1093 | ||
1091 | void CardView::setItemSpacing( uint spacing ) | 1094 | void CardView::setItemSpacing( uint spacing ) |
1092 | { | 1095 | { |
1093 | if ( spacing == d->mItemSpacing ) | 1096 | if ( spacing == d->mItemSpacing ) |
1094 | return; | 1097 | return; |
1095 | 1098 | ||
1096 | d->mItemSpacing = spacing; | 1099 | d->mItemSpacing = spacing; |
1097 | setLayoutDirty( true ); | 1100 | setLayoutDirty( true ); |
1098 | } | 1101 | } |
1099 | 1102 | ||
1100 | void CardView::contentsMousePressEvent(QMouseEvent *e) | 1103 | void CardView::contentsMousePressEvent(QMouseEvent *e) |
1101 | { | 1104 | { |
1102 | QScrollView::contentsMousePressEvent(e); | 1105 | QScrollView::contentsMousePressEvent(e); |
1103 | 1106 | ||
1104 | QPoint pos = e->pos(); | 1107 | QPoint pos = e->pos(); |
1105 | d->mLastClickPos = pos; | 1108 | d->mLastClickPos = pos; |
1106 | 1109 | ||
1107 | CardViewItem *item = itemAt(pos); | 1110 | CardViewItem *item = itemAt(pos); |
1108 | 1111 | ||
1109 | if (item == 0) | 1112 | if (item == 0) |
1110 | { | 1113 | { |
1111 | d->mLastClickOnItem = false; | 1114 | d->mLastClickOnItem = false; |
1112 | if ( d->mOnSeparator) | 1115 | if ( d->mOnSeparator) |
1113 | { | 1116 | { |
1114 | d->mResizeAnchor = e->x()+contentsX(); | 1117 | d->mResizeAnchor = e->x()+contentsX(); |
1115 | d->colspace = (2*d->mItemSpacing) /*+ (2*d->mItemMargin)*/; | 1118 | d->colspace = (2*d->mItemSpacing) /*+ (2*d->mItemMargin)*/; |
1116 | int ccw = d->mItemWidth + d->colspace + d->mSepWidth; | 1119 | int ccw = d->mItemWidth + d->colspace + d->mSepWidth; |
1117 | d->first = (contentsX()+d->mSepWidth)/ccw; | 1120 | d->first = (contentsX()+d->mSepWidth)/ccw; |
1118 | d->pressed = (d->mResizeAnchor+d->mSepWidth)/ccw; | 1121 | d->pressed = (d->mResizeAnchor+d->mSepWidth)/ccw; |
1119 | d->span = d->pressed - d->first; | 1122 | d->span = d->pressed - d->first; |
1120 | d->firstX = d->first * ccw; | 1123 | d->firstX = d->first * ccw; |
1121 | if ( d->firstX ) d->firstX -= d->mSepWidth; // (no sep in col 0) | 1124 | if ( d->firstX ) d->firstX -= d->mSepWidth; // (no sep in col 0) |
1122 | } | 1125 | } |
1123 | else | 1126 | else |
1124 | { | 1127 | { |
1125 | selectAll(false); | 1128 | selectAll(false); |
1126 | } | 1129 | } |
1127 | return; | 1130 | return; |
1128 | } | 1131 | } |
1129 | 1132 | ||
1130 | d->mLastClickOnItem = true; | 1133 | d->mLastClickOnItem = true; |
1131 | 1134 | ||
1132 | CardViewItem *other = d->mCurrentItem; | 1135 | CardViewItem *other = d->mCurrentItem; |
1133 | setCurrentItem( item ); | 1136 | setCurrentItem( item ); |
1134 | 1137 | ||
1135 | // Always emit the selection | 1138 | // Always emit the selection |
1136 | emit clicked(item); | 1139 | emit clicked(item); |
1137 | 1140 | ||
1138 | // Check the selection type and update accordingly | 1141 | // Check the selection type and update accordingly |
1139 | if (d->mSelectionMode == CardView::Single) | 1142 | if (d->mSelectionMode == CardView::Single) |
1140 | { | 1143 | { |
1141 | // make sure it isn't already selected | 1144 | // make sure it isn't already selected |
1142 | if (item->isSelected()) | 1145 | if (item->isSelected()) |
1143 | return; | 1146 | return; |
1144 | 1147 | ||
1145 | bool b = signalsBlocked(); | 1148 | bool b = signalsBlocked(); |
1146 | blockSignals(true); | 1149 | blockSignals(true); |
1147 | selectAll(false); | 1150 | selectAll(false); |
1148 | blockSignals(b); | 1151 | blockSignals(b); |
1149 | 1152 | ||
1150 | item->setSelected(true); | 1153 | item->setSelected(true); |
1151 | item->repaintCard(); | 1154 | item->repaintCard(); |
1152 | emit selectionChanged(item); | 1155 | emit selectionChanged(item); |
1153 | } | 1156 | } |
1154 | 1157 | ||
1155 | else if (d->mSelectionMode == CardView::Multi) | 1158 | else if (d->mSelectionMode == CardView::Multi) |
1156 | { | 1159 | { |
1157 | // toggle the selection | 1160 | // toggle the selection |
1158 | item->setSelected(!item->isSelected()); | 1161 | item->setSelected(!item->isSelected()); |
1159 | item->repaintCard(); | 1162 | item->repaintCard(); |
1160 | emit selectionChanged(); | 1163 | emit selectionChanged(); |
1161 | } | 1164 | } |
1162 | 1165 | ||
1163 | else if (d->mSelectionMode == CardView::Extended) | 1166 | else if (d->mSelectionMode == CardView::Extended) |
1164 | { | 1167 | { |
1165 | if ((e->button() & Qt::LeftButton) && | 1168 | if ((e->button() & Qt::LeftButton) && |
1166 | (e->state() & Qt::ShiftButton)) | 1169 | (e->state() & Qt::ShiftButton)) |
1167 | { | 1170 | { |
1168 | if ( item == other ) return; | 1171 | if ( item == other ) return; |
1169 | 1172 | ||
1170 | bool s = ! item->isSelected(); | 1173 | bool s = ! item->isSelected(); |
1171 | 1174 | ||
1172 | if ( s && ! (e->state() & ControlButton) ) | 1175 | if ( s && ! (e->state() & ControlButton) ) |
1173 | { | 1176 | { |
1174 | bool b = signalsBlocked(); | 1177 | bool b = signalsBlocked(); |
1175 | blockSignals(true); | 1178 | blockSignals(true); |
1176 | selectAll(false); | 1179 | selectAll(false); |
1177 | blockSignals(b); | 1180 | blockSignals(b); |
1178 | } | 1181 | } |
1179 | 1182 | ||
1180 | int from, to, a, b; | 1183 | int from, to, a, b; |
1181 | a = d->mItemList.findRef( item ); | 1184 | a = d->mItemList.findRef( item ); |
1182 | b = d->mItemList.findRef( other ); | 1185 | b = d->mItemList.findRef( other ); |
1183 | from = a < b ? a : b; | 1186 | from = a < b ? a : b; |
1184 | to = a > b ? a : b; | 1187 | to = a > b ? a : b; |
1185 | //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; | 1188 | //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; |
1186 | CardViewItem *aItem; | 1189 | CardViewItem *aItem; |
1187 | for ( ; from <= to; from++ ) | 1190 | for ( ; from <= to; from++ ) |
1188 | { | 1191 | { |
1189 | aItem = d->mItemList.at( from ); | 1192 | aItem = d->mItemList.at( from ); |
1190 | aItem->setSelected( s ); | 1193 | aItem->setSelected( s ); |
1191 | repaintItem( aItem ); | 1194 | repaintItem( aItem ); |
1192 | } | 1195 | } |
1193 | emit selectionChanged(); | 1196 | emit selectionChanged(); |
1194 | } | 1197 | } |
1195 | else if ((e->button() & Qt::LeftButton) && | 1198 | else if ((e->button() & Qt::LeftButton) && |
1196 | (e->state() & Qt::ControlButton)) | 1199 | (e->state() & Qt::ControlButton)) |
1197 | { | 1200 | { |
1198 | item->setSelected(!item->isSelected()); | 1201 | item->setSelected(!item->isSelected()); |
1199 | item->repaintCard(); | 1202 | item->repaintCard(); |
1200 | emit selectionChanged(); | 1203 | emit selectionChanged(); |
1201 | } | 1204 | } |
1202 | 1205 | ||
1203 | else if (e->button() & Qt::LeftButton) | 1206 | else if (e->button() & Qt::LeftButton) |
1204 | { | 1207 | { |
1205 | bool b = signalsBlocked(); | 1208 | bool b = signalsBlocked(); |
1206 | blockSignals(true); | 1209 | blockSignals(true); |
1207 | selectAll(false); | 1210 | selectAll(false); |
1208 | blockSignals(b); | 1211 | blockSignals(b); |
1209 | 1212 | ||
1210 | item->setSelected(true); | 1213 | item->setSelected(true); |
1211 | item->repaintCard(); | 1214 | item->repaintCard(); |
1212 | emit selectionChanged(); | 1215 | emit selectionChanged(); |
1213 | } | 1216 | } |
1214 | } | 1217 | } |
1215 | 1218 | ||
1216 | } | 1219 | } |
1217 | 1220 | ||
1218 | void CardView::contentsMouseReleaseEvent(QMouseEvent *e) | 1221 | void CardView::contentsMouseReleaseEvent(QMouseEvent *e) |
1219 | { | 1222 | { |
1220 | QScrollView::contentsMouseReleaseEvent(e); | 1223 | QScrollView::contentsMouseReleaseEvent(e); |
1221 | 1224 | ||
1222 | if ( d->mResizeAnchor ) | 1225 | if ( d->mResizeAnchor ) |
1223 | { | 1226 | { |
1224 | // finish the resizing: | 1227 | // finish the resizing: |
1225 | unsetCursor(); | 1228 | unsetCursor(); |
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 | { |
1483 | // shift button: toggle range | 1494 | // shift button: toggle range |
1484 | // if control button is pressed, leave all items | 1495 | // if control button is pressed, leave all items |
1485 | // and toggle selection current->old current | 1496 | // and toggle selection current->old current |
1486 | // otherwise, ?????? | 1497 | // otherwise, ?????? |
1487 | bool s = ! aItem->isSelected(); | 1498 | bool s = ! aItem->isSelected(); |
1488 | int from, to, a, b; | 1499 | int from, to, a, b; |
1489 | a = d->mItemList.findRef( aItem ); | 1500 | a = d->mItemList.findRef( aItem ); |
1490 | b = d->mItemList.findRef( old ); | 1501 | b = d->mItemList.findRef( old ); |
1491 | from = a < b ? a : b; | 1502 | from = a < b ? a : b; |
1492 | to = a > b ? a : b; | 1503 | to = a > b ? a : b; |
1493 | 1504 | ||
1494 | if ( to - from > 1 ) | 1505 | if ( to - from > 1 ) |
1495 | { | 1506 | { |
1496 | bool b = signalsBlocked(); | 1507 | bool b = signalsBlocked(); |
1497 | blockSignals(true); | 1508 | blockSignals(true); |
1498 | selectAll(false); | 1509 | selectAll(false); |
1499 | blockSignals(b); | 1510 | blockSignals(b); |
1500 | } | 1511 | } |
1501 | 1512 | ||
1502 | //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; | 1513 | //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; |
1503 | CardViewItem *item; | 1514 | CardViewItem *item; |
1504 | for ( ; from <= to; from++ ) | 1515 | for ( ; from <= to; from++ ) |
1505 | { | 1516 | { |
1506 | item = d->mItemList.at( from ); | 1517 | item = d->mItemList.at( from ); |
1507 | item->setSelected( s ); | 1518 | item->setSelected( s ); |
1508 | repaintItem( item ); | 1519 | repaintItem( item ); |
1509 | } | 1520 | } |
1510 | emit selectionChanged(); | 1521 | emit selectionChanged(); |
1511 | } | 1522 | } |
1512 | else if ( (e->state() & ControlButton) ) | 1523 | else if ( (e->state() & ControlButton) ) |
1513 | { | 1524 | { |
1514 | // control button: do nothing | 1525 | // control button: do nothing |
1515 | } | 1526 | } |
1516 | else | 1527 | else |
1517 | { | 1528 | { |
1518 | // no button: move selection to this item | 1529 | // no button: move selection to this item |
1519 | bool b = signalsBlocked(); | 1530 | bool b = signalsBlocked(); |
1520 | blockSignals(true); | 1531 | blockSignals(true); |
1521 | selectAll(false); | 1532 | selectAll(false); |
1522 | blockSignals(b); | 1533 | blockSignals(b); |
1523 | 1534 | ||
1524 | setSelected( aItem, true ); | 1535 | setSelected( aItem, true ); |
1525 | emit selectionChanged(); | 1536 | emit selectionChanged(); |
1526 | } | 1537 | } |
1527 | } | 1538 | } |
1528 | } | 1539 | } |
1529 | } | 1540 | } |
1530 | 1541 | ||
1531 | void CardView::contentsWheelEvent( QWheelEvent * e ) | 1542 | void CardView::contentsWheelEvent( QWheelEvent * e ) |
1532 | { | 1543 | { |
1533 | scrollBy(2*e->delta()/-3, 0); | 1544 | scrollBy(2*e->delta()/-3, 0); |
1534 | } | 1545 | } |
1535 | 1546 | ||
1536 | void CardView::setLayoutDirty(bool dirty) | 1547 | void CardView::setLayoutDirty(bool dirty) |
1537 | { | 1548 | { |
1538 | if (d->mLayoutDirty != dirty) | 1549 | if (d->mLayoutDirty != dirty) |
1539 | { | 1550 | { |
1540 | d->mLayoutDirty = dirty; | 1551 | d->mLayoutDirty = dirty; |
1541 | repaint(); | 1552 | repaint(); |
1542 | } | 1553 | } |
1543 | } | 1554 | } |
1544 | 1555 | ||
1545 | void CardView::setDrawCardBorder(bool enabled) | 1556 | void CardView::setDrawCardBorder(bool enabled) |
1546 | { | 1557 | { |
1547 | if (enabled != d->mDrawCardBorder) | 1558 | if (enabled != d->mDrawCardBorder) |
1548 | { | 1559 | { |
1549 | d->mDrawCardBorder = enabled; | 1560 | d->mDrawCardBorder = enabled; |
1550 | repaint(); | 1561 | repaint(); |
1551 | } | 1562 | } |
1552 | } | 1563 | } |
1553 | 1564 | ||
1554 | bool CardView::drawCardBorder() const | 1565 | bool CardView::drawCardBorder() const |
1555 | { | 1566 | { |
1556 | return d->mDrawCardBorder; | 1567 | return d->mDrawCardBorder; |
1557 | } | 1568 | } |
1558 | 1569 | ||
1559 | void CardView::setDrawColSeparators(bool enabled) | 1570 | void CardView::setDrawColSeparators(bool enabled) |
1560 | { | 1571 | { |
1561 | if (enabled != d->mDrawSeparators) | 1572 | if (enabled != d->mDrawSeparators) |
1562 | { | 1573 | { |
1563 | d->mDrawSeparators = enabled; | 1574 | d->mDrawSeparators = enabled; |
1564 | setLayoutDirty(true); | 1575 | setLayoutDirty(true); |
1565 | } | 1576 | } |
1566 | } | 1577 | } |
1567 | 1578 | ||
1568 | bool CardView::drawColSeparators() const | 1579 | bool CardView::drawColSeparators() const |
1569 | { | 1580 | { |
1570 | return d->mDrawSeparators; | 1581 | return d->mDrawSeparators; |
1571 | } | 1582 | } |
1572 | 1583 | ||
1573 | void CardView::setDrawFieldLabels(bool enabled) | 1584 | void CardView::setDrawFieldLabels(bool enabled) |
1574 | { | 1585 | { |
1575 | if (enabled != d->mDrawFieldLabels) | 1586 | if (enabled != d->mDrawFieldLabels) |
1576 | { | 1587 | { |
1577 | d->mDrawFieldLabels = enabled; | 1588 | d->mDrawFieldLabels = enabled; |
1578 | repaint(); | 1589 | repaint(); |
1579 | } | 1590 | } |
1580 | } | 1591 | } |
1581 | 1592 | ||
1582 | bool CardView::drawFieldLabels() const | 1593 | bool CardView::drawFieldLabels() const |
1583 | { | 1594 | { |
1584 | return d->mDrawFieldLabels; | 1595 | return d->mDrawFieldLabels; |
1585 | } | 1596 | } |
1586 | 1597 | ||
1587 | void CardView::setShowEmptyFields(bool show) | 1598 | void CardView::setShowEmptyFields(bool show) |
1588 | { | 1599 | { |
1589 | if (show != d->mShowEmptyFields) | 1600 | if (show != d->mShowEmptyFields) |
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 | |||
@@ -1,473 +1,476 @@ | |||
1 | #ifndef CARDVIEW_H | 1 | #ifndef CARDVIEW_H |
2 | #define CARDVIEW_H | 2 | #define CARDVIEW_H |
3 | 3 | ||
4 | #include <qscrollview.h> | 4 | #include <qscrollview.h> |
5 | #include <qptrlist.h> | 5 | #include <qptrlist.h> |
6 | #include <qstring.h> | 6 | #include <qstring.h> |
7 | #include <qrect.h> | 7 | #include <qrect.h> |
8 | #include <qpair.h> | 8 | #include <qpair.h> |
9 | #include <qpoint.h> | 9 | #include <qpoint.h> |
10 | 10 | ||
11 | class QLabel; | 11 | class QLabel; |
12 | class QPainter; | 12 | class QPainter; |
13 | class QResizeEvent; | 13 | class QResizeEvent; |
14 | class QMouseEvent; | 14 | class QMouseEvent; |
15 | class CardView; | 15 | class CardView; |
16 | class CardViewPrivate; | 16 | class CardViewPrivate; |
17 | class CardViewItemPrivate; | 17 | class CardViewItemPrivate; |
18 | class CardViewTip; | 18 | class CardViewTip; |
19 | 19 | ||
20 | /** Represents a single card (item) in the card view. A card has a caption | 20 | /** Represents a single card (item) in the card view. A card has a caption |
21 | * and a list of fields. A Field is a label<->value pair. The labels in a | 21 | * and a list of fields. A Field is a label<->value pair. The labels in a |
22 | * card should be unique, since they will be used to index the values. | 22 | * card should be unique, since they will be used to index the values. |
23 | */ | 23 | */ |
24 | class CardViewItem | 24 | class CardViewItem |
25 | { | 25 | { |
26 | friend class CardView; | 26 | friend class CardView; |
27 | 27 | ||
28 | public: | 28 | public: |
29 | /** A single field in the card view. The first item is the label | 29 | /** A single field in the card view. The first item is the label |
30 | * and the second item is the value. | 30 | * and the second item is the value. |
31 | */ | 31 | */ |
32 | typedef QPair<QString, QString> Field; | 32 | typedef QPair<QString, QString> Field; |
33 | 33 | ||
34 | /** Constructor. | 34 | /** Constructor. |
35 | * | 35 | * |
36 | * @param parent The CardView that this card should be displayed on. | 36 | * @param parent The CardView that this card should be displayed on. |
37 | * @param caption The caption of the card. This is the text that will | 37 | * @param caption The caption of the card. This is the text that will |
38 | * appear at the top of the card. This is also the string that will | 38 | * appear at the top of the card. This is also the string that will |
39 | * be used to sort the cards in the view. | 39 | * be used to sort the cards in the view. |
40 | */ | 40 | */ |
41 | CardViewItem(CardView *parent, QString caption = QString::null); | 41 | CardViewItem(CardView *parent, QString caption = QString::null); |
42 | virtual ~CardViewItem(); | 42 | virtual ~CardViewItem(); |
43 | 43 | ||
44 | /** @return The caption of the card, or QString::null if none was ever | 44 | /** @return The caption of the card, or QString::null if none was ever |
45 | * set. | 45 | * set. |
46 | */ | 46 | */ |
47 | const QString &caption() const; | 47 | const QString &caption() const; |
48 | 48 | ||
49 | /** Sets the caption of the card. This is the text that will | 49 | /** Sets the caption of the card. This is the text that will |
50 | * appear at the top of the card. This is also the string that will | 50 | * appear at the top of the card. This is also the string that will |
51 | * be used to sort the cards in the view. | 51 | * be used to sort the cards in the view. |
52 | */ | 52 | */ |
53 | void setCaption(const QString &caption); | 53 | void setCaption(const QString &caption); |
54 | 54 | ||
55 | /** Paints the card using the given painter and color group. The | 55 | /** Paints the card using the given painter and color group. The |
56 | * card will handle painting itself selected if it is selected. | 56 | * card will handle painting itself selected if it is selected. |
57 | */ | 57 | */ |
58 | virtual void paintCard(QPainter *p, QColorGroup &cg); | 58 | virtual void paintCard(QPainter *p, QColorGroup &cg); |
59 | 59 | ||
60 | /** Repaints the card. This is done by sending a repaint event to the | 60 | /** Repaints the card. This is done by sending a repaint event to the |
61 | * view with the clip rect defined as this card. | 61 | * view with the clip rect defined as this card. |
62 | */ | 62 | */ |
63 | virtual void repaintCard(); | 63 | virtual void repaintCard(); |
64 | 64 | ||
65 | /** Adds a field to the card. | 65 | /** Adds a field to the card. |
66 | * | 66 | * |
67 | * @param label The label of the field. The field labels must be unique | 67 | * @param label The label of the field. The field labels must be unique |
68 | * within a card. | 68 | * within a card. |
69 | * @param The value of the field. | 69 | * @param The value of the field. |
70 | */ | 70 | */ |
71 | void insertField(const QString &label, const QString &value); | 71 | void insertField(const QString &label, const QString &value); |
72 | 72 | ||
73 | /** Removes the field with label <i>label</i> from the card. | 73 | /** Removes the field with label <i>label</i> from the card. |
74 | */ | 74 | */ |
75 | void removeField(const QString &label); | 75 | void removeField(const QString &label); |
76 | 76 | ||
77 | /** @return The value of the field with label <i>label</i>. | 77 | /** @return The value of the field with label <i>label</i>. |
78 | */ | 78 | */ |
79 | QString fieldValue(const QString &label); | 79 | QString fieldValue(const QString &label); |
80 | 80 | ||
81 | /** Removes all the fields from this card. | 81 | /** Removes all the fields from this card. |
82 | */ | 82 | */ |
83 | void clearFields(); | 83 | void clearFields(); |
84 | 84 | ||
85 | /** @return The next card item. The order of the items will be the same | 85 | /** @return The next card item. The order of the items will be the same |
86 | * as the display order in the view. 0 will be returned if this is the | 86 | * as the display order in the view. 0 will be returned if this is the |
87 | * last card. | 87 | * last card. |
88 | */ | 88 | */ |
89 | CardViewItem *nextItem(); | 89 | CardViewItem *nextItem(); |
90 | 90 | ||
91 | /** @return True if this card is currently selected, false otherwise. | 91 | /** @return True if this card is currently selected, false otherwise. |
92 | */ | 92 | */ |
93 | bool isSelected() const; | 93 | bool isSelected() const; |
94 | 94 | ||
95 | /** Called by the parent card view when the mouse has been resting for | 95 | /** Called by the parent card view when the mouse has been resting for |
96 | * a certain amount of time. If the label or value at pos is obscured | 96 | * a certain amount of time. If the label or value at pos is obscured |
97 | * (trimmed) make the label display the full text. | 97 | * (trimmed) make the label display the full text. |
98 | */ | 98 | */ |
99 | void showFullString( const QPoint &pos, CardViewTip *tip ); | 99 | void showFullString( const QPoint &pos, CardViewTip *tip ); |
100 | 100 | ||
101 | /** @return a pointer to the Field at the position itempos | 101 | /** @return a pointer to the Field at the position itempos |
102 | * in this item. 0 is returned if itempos is in the caption. | 102 | * in this item. 0 is returned if itempos is in the caption. |
103 | * @param itempos the position in item coordinates | 103 | * @param itempos the position in item coordinates |
104 | */ | 104 | */ |
105 | Field *fieldAt( const QPoint &itempos ) const; | 105 | Field *fieldAt( const QPoint &itempos ) const; |
106 | 106 | ||
107 | CardView *cardView() { return mView; }; | 107 | CardView *cardView() { return mView; }; |
108 | 108 | ||
109 | /** @return The height of this item as rendered, in pixels. | 109 | /** @return The height of this item as rendered, in pixels. |
110 | 110 | ||
111 | if @p allowCache is true, the item may use an internally | 111 | if @p allowCache is true, the item may use an internally |
112 | cached value rather than recalculating from scratch. The | 112 | cached value rather than recalculating from scratch. The |
113 | argument is mainly to allow the cardView to change global settings (like | 113 | argument is mainly to allow the cardView to change global settings (like |
114 | maxFieldLines) that might influence the items heights | 114 | maxFieldLines) that might influence the items heights |
115 | */ | 115 | */ |
116 | int height( bool allowCache=true ) const; | 116 | int height( bool allowCache=true ) const; |
117 | 117 | ||
118 | protected: | 118 | protected: |
119 | /** Sets the card as selected. This is usually only called from the | 119 | /** Sets the card as selected. This is usually only called from the |
120 | * card view. | 120 | * card view. |
121 | */ | 121 | */ |
122 | void setSelected(bool selected); | 122 | void setSelected(bool selected); |
123 | 123 | ||
124 | private: | 124 | private: |
125 | /** Sets the default values. | 125 | /** Sets the default values. |
126 | */ | 126 | */ |
127 | void initialize(); | 127 | void initialize(); |
128 | 128 | ||
129 | /** Trims a string to the width <i>width</i> using the font metrics | 129 | /** Trims a string to the width <i>width</i> using the font metrics |
130 | * to determine the width of each char. If the string is longer than | 130 | * to determine the width of each char. If the string is longer than |
131 | * <i>width</i>, then the string will be trimmed and a '...' will | 131 | * <i>width</i>, then the string will be trimmed and a '...' will |
132 | * be appended. | 132 | * be appended. |
133 | */ | 133 | */ |
134 | QString trimString(const QString &text, int width, QFontMetrics &fm); | 134 | QString trimString(const QString &text, int width, QFontMetrics &fm); |
135 | 135 | ||
136 | CardViewItemPrivate *d; | 136 | CardViewItemPrivate *d; |
137 | CardView *mView; | 137 | CardView *mView; |
138 | }; | 138 | }; |
139 | 139 | ||
140 | /** The CardView is a method of displaying data in cards. This idea is | 140 | /** The CardView is a method of displaying data in cards. This idea is |
141 | * similar to the idea of a rolodex or business cards. Each card has a | 141 | * similar to the idea of a rolodex or business cards. Each card has a |
142 | * caption and a list of fields, which are label<->value pairs. The CardView | 142 | * caption and a list of fields, which are label<->value pairs. The CardView |
143 | * displays multiple cards in a grid. The Cards are sorted based on their | 143 | * displays multiple cards in a grid. The Cards are sorted based on their |
144 | * caption. | 144 | * caption. |
145 | * | 145 | * |
146 | * The CardView class is designed to mirror the API of the QListView or | 146 | * The CardView class is designed to mirror the API of the QListView or |
147 | * QIconView. The CardView is also completely independant of KAddressBook and | 147 | * QIconView. The CardView is also completely independant of KAddressBook and |
148 | * can be used elsewhere. With the exception of a few simple config checks, | 148 | * can be used elsewhere. With the exception of a few simple config checks, |
149 | * the CardView is also 100% independant of KDE. | 149 | * the CardView is also 100% independant of KDE. |
150 | */ | 150 | */ |
151 | class CardView : public QScrollView | 151 | class CardView : public QScrollView |
152 | { | 152 | { |
153 | friend class CardViewItem; | 153 | friend class CardViewItem; |
154 | 154 | ||
155 | Q_OBJECT | 155 | Q_OBJECT |
156 | 156 | ||
157 | public: | 157 | public: |
158 | /** Constructor. | 158 | /** Constructor. |
159 | */ | 159 | */ |
160 | CardView(QWidget *parent, const char *name); | 160 | CardView(QWidget *parent, const char *name); |
161 | virtual ~CardView(); | 161 | virtual ~CardView(); |
162 | 162 | ||
163 | /** Inserts the item into the card view. This method does not have | 163 | /** Inserts the item into the card view. This method does not have |
164 | * to be called if you created the item with a proper parent. Once | 164 | * to be called if you created the item with a proper parent. Once |
165 | * inserted, the CardView takes ownership of the item. | 165 | * inserted, the CardView takes ownership of the item. |
166 | */ | 166 | */ |
167 | void insertItem(CardViewItem *item); | 167 | void insertItem(CardViewItem *item); |
168 | 168 | ||
169 | /** Takes the item from the view. The item will not be deleted and | 169 | /** Takes the item from the view. The item will not be deleted and |
170 | * ownership of the item is returned to the caller. | 170 | * ownership of the item is returned to the caller. |
171 | */ | 171 | */ |
172 | void takeItem(CardViewItem *item); | 172 | void takeItem(CardViewItem *item); |
173 | 173 | ||
174 | /** Clears the view and deletes all card view items | 174 | /** Clears the view and deletes all card view items |
175 | */ | 175 | */ |
176 | void clear(); | 176 | void clear(); |
177 | 177 | ||
178 | /** @return The current item, the item that has the focus. | 178 | /** @return The current item, the item that has the focus. |
179 | * Whenever the view has focus, this item has a focus rectangle painted | 179 | * Whenever the view has focus, this item has a focus rectangle painted |
180 | * at it's border. | 180 | * at it's border. |
181 | * @sa setCurrentItem() | 181 | * @sa setCurrentItem() |
182 | */ | 182 | */ |
183 | CardViewItem *currentItem(); | 183 | CardViewItem *currentItem(); |
184 | 184 | ||
185 | /** Sets the CardViewItem @p item to the current item in the view. | 185 | /** Sets the CardViewItem @p item to the current item in the view. |
186 | */ | 186 | */ |
187 | void setCurrentItem( CardViewItem *item ); | 187 | void setCurrentItem( CardViewItem *item ); |
188 | 188 | ||
189 | /** @return The item found at the given point, or 0 if there is no item | 189 | /** @return The item found at the given point, or 0 if there is no item |
190 | * at that point. | 190 | * at that point. |
191 | */ | 191 | */ |
192 | CardViewItem *itemAt(const QPoint &viewPos); | 192 | CardViewItem *itemAt(const QPoint &viewPos); |
193 | 193 | ||
194 | /** @return The bounding rect of the given item. | 194 | /** @return The bounding rect of the given item. |
195 | */ | 195 | */ |
196 | QRect itemRect(const CardViewItem *item); | 196 | QRect itemRect(const CardViewItem *item); |
197 | 197 | ||
198 | /** Ensures that the given item is in the viewable area of the widget | 198 | /** Ensures that the given item is in the viewable area of the widget |
199 | */ | 199 | */ |
200 | void ensureItemVisible(const CardViewItem *item); | 200 | void ensureItemVisible(const CardViewItem *item); |
201 | 201 | ||
202 | /** Repaints the given item. | 202 | /** Repaints the given item. |
203 | */ | 203 | */ |
204 | void repaintItem(const CardViewItem *item); | 204 | void repaintItem(const CardViewItem *item); |
205 | 205 | ||
206 | enum SelectionMode { Single, Multi, Extended, NoSelection }; | 206 | enum SelectionMode { Single, Multi, Extended, NoSelection }; |
207 | 207 | ||
208 | /** Sets the selection mode. | 208 | /** Sets the selection mode. |
209 | * | 209 | * |
210 | * @see QListView | 210 | * @see QListView |
211 | */ | 211 | */ |
212 | void setSelectionMode(SelectionMode mode); | 212 | void setSelectionMode(SelectionMode mode); |
213 | 213 | ||
214 | /** @return The current selection mode. | 214 | /** @return The current selection mode. |
215 | */ | 215 | */ |
216 | SelectionMode selectionMode() const; | 216 | SelectionMode selectionMode() const; |
217 | 217 | ||
218 | /** Selects or deselects the given item. This method honors the current | 218 | /** Selects or deselects the given item. This method honors the current |
219 | * selection mode, so if other items are selected, they may be unselected. | 219 | * selection mode, so if other items are selected, they may be unselected. |
220 | */ | 220 | */ |
221 | void setSelected(CardViewItem *item, bool selected); | 221 | void setSelected(CardViewItem *item, bool selected); |
222 | 222 | ||
223 | /** Selects or deselects all items. | 223 | /** Selects or deselects all items. |
224 | */ | 224 | */ |
225 | void selectAll(bool state); | 225 | void selectAll(bool state); |
226 | 226 | ||
227 | /** @return True if the given item is selected, false otherwise. | 227 | /** @return True if the given item is selected, false otherwise. |
228 | */ | 228 | */ |
229 | bool isSelected(CardViewItem *item) const; | 229 | bool isSelected(CardViewItem *item) const; |
230 | 230 | ||
231 | /** @return The first selected item. In single select mode, this will be | 231 | /** @return The first selected item. In single select mode, this will be |
232 | * the only selected item, in other modes this will be the first selected | 232 | * the only selected item, in other modes this will be the first selected |
233 | * item, but others may exist. 0 if no item is selected. | 233 | * item, but others may exist. 0 if no item is selected. |
234 | */ | 234 | */ |
235 | CardViewItem *selectedItem() const; | 235 | CardViewItem *selectedItem() const; |
236 | 236 | ||
237 | /** @return The first item in the view. This may be 0 if no items have | 237 | /** @return The first item in the view. This may be 0 if no items have |
238 | * been inserted. This method combined with CardViewItem::nextItem() | 238 | * been inserted. This method combined with CardViewItem::nextItem() |
239 | * can be used to iterator through the list of items. | 239 | * can be used to iterator through the list of items. |
240 | */ | 240 | */ |
241 | CardViewItem *firstItem() const; | 241 | CardViewItem *firstItem() const; |
242 | 242 | ||
243 | /** @return The item after the given item or 0 if the item is the last | 243 | /** @return The item after the given item or 0 if the item is the last |
244 | * item. | 244 | * item. |
245 | */ | 245 | */ |
246 | CardViewItem *itemAfter(CardViewItem *item); | 246 | CardViewItem *itemAfter(CardViewItem *item); |
247 | 247 | ||
248 | /** @return The number of items in the view. | 248 | /** @return The number of items in the view. |
249 | */ | 249 | */ |
250 | int childCount() const; | 250 | int childCount() const; |
251 | 251 | ||
252 | /** Attempts to find the first item matching the params. | 252 | /** Attempts to find the first item matching the params. |
253 | * | 253 | * |
254 | * @param text The text to match. | 254 | * @param text The text to match. |
255 | * @param label The label of the field to match against. | 255 | * @param label The label of the field to match against. |
256 | * @param compare The compare method to use in doing the search. | 256 | * @param compare The compare method to use in doing the search. |
257 | * | 257 | * |
258 | * @return The first matching item, or 0 if no items match. | 258 | * @return The first matching item, or 0 if no items match. |
259 | */ | 259 | */ |
260 | /*US | 260 | /*US |
261 | CardViewItem *findItem(const QString &text, const QString &label, | 261 | CardViewItem *findItem(const QString &text, const QString &label, |
262 | Qt::StringComparisonMode compare = Qt::BeginsWith); | 262 | Qt::StringComparisonMode compare = Qt::BeginsWith); |
263 | */ | 263 | */ |
264 | 264 | ||
265 | /** Returns the amounts of pixels required for one column. | 265 | /** Returns the amounts of pixels required for one column. |
266 | * This depends on wheather drawSeparators is enabled: | 266 | * This depends on wheather drawSeparators is enabled: |
267 | * If so, it is itemWidth + 2*itemSpacing + separatorWidth | 267 | * If so, it is itemWidth + 2*itemSpacing + separatorWidth |
268 | * If not, it is itemWidth + itemSpacing | 268 | * If not, it is itemWidth + itemSpacing |
269 | * @see itemWidth(), setItemWidth(), itemSpacing() and setItemSpacing() | 269 | * @see itemWidth(), setItemWidth(), itemSpacing() and setItemSpacing() |
270 | */ | 270 | */ |
271 | uint columnWidth(); | 271 | uint columnWidth(); |
272 | 272 | ||
273 | /** Sets if the border around a card should be draw. The border is a thing | 273 | /** Sets if the border around a card should be draw. The border is a thing |
274 | * (1 or 2 pixel) line that bounds the card. When drawn, it shows when | 274 | * (1 or 2 pixel) line that bounds the card. When drawn, it shows when |
275 | * a card is highlighted and when it isn't. | 275 | * a card is highlighted and when it isn't. |
276 | */ | 276 | */ |
277 | void setDrawCardBorder(bool enabled); | 277 | void setDrawCardBorder(bool enabled); |
278 | 278 | ||
279 | /** @return True if borders are drawn, false otherwise. | 279 | /** @return True if borders are drawn, false otherwise. |
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 | |||
@@ -1,503 +1,507 @@ | |||
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 <qdragobject.h> | 24 | #include <qdragobject.h> |
25 | #include <qevent.h> | 25 | #include <qevent.h> |
26 | #include <qiconview.h> | 26 | #include <qiconview.h> |
27 | #include <qlayout.h> | 27 | #include <qlayout.h> |
28 | #include <qstringlist.h> | 28 | #include <qstringlist.h> |
29 | #include <qregexp.h> | 29 | #include <qregexp.h> |
30 | #include <qapplication.h> | 30 | #include <qapplication.h> |
31 | 31 | ||
32 | #include <kabc/addressbook.h> | 32 | #include <kabc/addressbook.h> |
33 | #include <kabc/addressee.h> | 33 | #include <kabc/addressee.h> |
34 | #include <kconfig.h> | 34 | #include <kconfig.h> |
35 | #include <kdebug.h> | 35 | #include <kdebug.h> |
36 | #include <klocale.h> | 36 | #include <klocale.h> |
37 | 37 | ||
38 | #include "kabprefs.h" | 38 | #include "kabprefs.h" |
39 | #include "viewmanager.h" | 39 | #include "viewmanager.h" |
40 | 40 | ||
41 | 41 | ||
42 | #include "kaddressbookcardview.h" | 42 | #include "kaddressbookcardview.h" |
43 | 43 | ||
44 | #ifndef KAB_EMBEDDED | 44 | #ifndef KAB_EMBEDDED |
45 | extern "C" { | 45 | extern "C" { |
46 | void *init_libkaddrbk_cardview() | 46 | void *init_libkaddrbk_cardview() |
47 | { | 47 | { |
48 | return ( new CardViewFactory ); | 48 | return ( new CardViewFactory ); |
49 | } | 49 | } |
50 | } | 50 | } |
51 | #endif //KAB_EMBEDDED | 51 | #endif //KAB_EMBEDDED |
52 | 52 | ||
53 | //////////////////////////////// | 53 | //////////////////////////////// |
54 | // AddresseeCardViewItem (internal class) | 54 | // AddresseeCardViewItem (internal class) |
55 | class AddresseeCardViewItem : public CardViewItem | 55 | class AddresseeCardViewItem : public CardViewItem |
56 | { | 56 | { |
57 | public: | 57 | public: |
58 | AddresseeCardViewItem(const KABC::Field::List &fields, | 58 | AddresseeCardViewItem(const KABC::Field::List &fields, |
59 | bool showEmptyFields, | 59 | bool showEmptyFields, |
60 | KABC::AddressBook *doc, const KABC::Addressee &a, | 60 | KABC::AddressBook *doc, const KABC::Addressee &a, |
61 | CardView *parent) | 61 | CardView *parent) |
62 | : CardViewItem(parent, a.realName() ), | 62 | : CardViewItem(parent, a.realName() ), |
63 | mFields( fields ), mShowEmptyFields(showEmptyFields), | 63 | mFields( fields ), mShowEmptyFields(showEmptyFields), |
64 | mDocument(doc), mAddressee(a) | 64 | mDocument(doc), mAddressee(a) |
65 | { | 65 | { |
66 | if ( mFields.isEmpty() ) { | 66 | if ( mFields.isEmpty() ) { |
67 | mFields = KABC::Field::defaultFields(); | 67 | mFields = KABC::Field::defaultFields(); |
68 | } | 68 | } |
69 | refresh(); | 69 | refresh(); |
70 | } | 70 | } |
71 | 71 | ||
72 | const KABC::Addressee &addressee() const { return mAddressee; } | 72 | const KABC::Addressee &addressee() const { return mAddressee; } |
73 | 73 | ||
74 | void refresh() | 74 | void refresh() |
75 | { | 75 | { |
76 | // Update our addressee, since it may have changed elsewhere | 76 | // Update our addressee, since it may have changed elsewhere |
77 | mAddressee = mDocument->findByUid(mAddressee.uid()); | 77 | mAddressee = mDocument->findByUid(mAddressee.uid()); |
78 | 78 | ||
79 | if (!mAddressee.isEmpty()) | 79 | if (!mAddressee.isEmpty()) |
80 | { | 80 | { |
81 | clearFields(); | 81 | clearFields(); |
82 | 82 | ||
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() ) { |
345 | mCardView->setCurrentItem ( mCardView->firstItem() ); | 349 | mCardView->setCurrentItem ( mCardView->firstItem() ); |
346 | mCardView->setSelected ( mCardView->firstItem() , true ); | 350 | mCardView->setSelected ( mCardView->firstItem() , true ); |
347 | } | 351 | } |
348 | else | 352 | else |
349 | emit selected(QString::null); | 353 | emit selected(QString::null); |
350 | } | 354 | } |
351 | QStringList KAddressBookCardView::selectedUids() | 355 | QStringList KAddressBookCardView::selectedUids() |
352 | { | 356 | { |
353 | QStringList uidList; | 357 | QStringList uidList; |
354 | CardViewItem *item; | 358 | CardViewItem *item; |
355 | AddresseeCardViewItem *aItem; | 359 | AddresseeCardViewItem *aItem; |
356 | 360 | ||
357 | for (item = mCardView->firstItem(); item; item = item->nextItem()) | 361 | for (item = mCardView->firstItem(); item; item = item->nextItem()) |
358 | { | 362 | { |
359 | if (item->isSelected()) | 363 | if (item->isSelected()) |
360 | { | 364 | { |
361 | #ifndef KAB_EMBEDDED | 365 | #ifndef KAB_EMBEDDED |
362 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 366 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
363 | #else //KAB_EMBEDDED | 367 | #else //KAB_EMBEDDED |
364 | aItem = (AddresseeCardViewItem*)(item); | 368 | aItem = (AddresseeCardViewItem*)(item); |
365 | #endif //KAB_EMBEDDED | 369 | #endif //KAB_EMBEDDED |
366 | if (aItem) | 370 | if (aItem) |
367 | uidList << aItem->addressee().uid(); | 371 | uidList << aItem->addressee().uid(); |
368 | } | 372 | } |
369 | } | 373 | } |
370 | 374 | ||
371 | return uidList; | 375 | return uidList; |
372 | } | 376 | } |
373 | 377 | ||
374 | void KAddressBookCardView::refresh(QString uid) | 378 | void KAddressBookCardView::refresh(QString uid) |
375 | { | 379 | { |
376 | CardViewItem *item; | 380 | CardViewItem *item; |
377 | AddresseeCardViewItem *aItem; | 381 | AddresseeCardViewItem *aItem; |
378 | 382 | ||
379 | if (uid.isNull()) | 383 | if (uid.isNull()) |
380 | { | 384 | { |
381 | // Rebuild the view | 385 | // Rebuild the view |
382 | mCardView->viewport()->setUpdatesEnabled( false ); | 386 | mCardView->viewport()->setUpdatesEnabled( false ); |
383 | mCardView->clear(); | 387 | mCardView->clear(); |
384 | 388 | ||
385 | KABC::Addressee::List addresseeList = addressees(); | 389 | KABC::Addressee::List addresseeList = addressees(); |
386 | KABC::Addressee::List::Iterator iter; | 390 | KABC::Addressee::List::Iterator iter; |
387 | for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter) | 391 | for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter) |
388 | { | 392 | { |
389 | if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) | 393 | if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) |
390 | continue; | 394 | continue; |
391 | aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields, | 395 | aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields, |
392 | addressBook(), *iter, mCardView); | 396 | addressBook(), *iter, mCardView); |
393 | } | 397 | } |
394 | mCardView->viewport()->setUpdatesEnabled( true ); | 398 | mCardView->viewport()->setUpdatesEnabled( true ); |
395 | mCardView->viewport()->update(); | 399 | mCardView->viewport()->update(); |
396 | 400 | ||
397 | // by default nothing is selected | 401 | // by default nothing is selected |
398 | emit selected(QString::null); | 402 | emit selected(QString::null); |
399 | } | 403 | } |
400 | else | 404 | else |
401 | { | 405 | { |
402 | // Try to find the one to refresh | 406 | // Try to find the one to refresh |
403 | bool found = false; | 407 | bool found = false; |
404 | for (item = mCardView->firstItem(); item && !found; | 408 | for (item = mCardView->firstItem(); item && !found; |
405 | item = item->nextItem()) | 409 | item = item->nextItem()) |
406 | { | 410 | { |
407 | #ifndef KAB_EMBEDDED | 411 | #ifndef KAB_EMBEDDED |
408 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 412 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
409 | #else //KAB_EMBEDDED | 413 | #else //KAB_EMBEDDED |
410 | aItem = (AddresseeCardViewItem*)(item); | 414 | aItem = (AddresseeCardViewItem*)(item); |
411 | #endif //KAB_EMBEDDED | 415 | #endif //KAB_EMBEDDED |
412 | 416 | ||
413 | if ((aItem) && (aItem->addressee().uid() == uid)) | 417 | if ((aItem) && (aItem->addressee().uid() == uid)) |
414 | { | 418 | { |
415 | aItem->refresh(); | 419 | aItem->refresh(); |
416 | found = true; | 420 | found = true; |
417 | } | 421 | } |
418 | } | 422 | } |
419 | } | 423 | } |
420 | } | 424 | } |
421 | 425 | ||
422 | void KAddressBookCardView::setSelected(QString uid, bool selected) | 426 | void KAddressBookCardView::setSelected(QString uid, bool selected) |
423 | { | 427 | { |
424 | CardViewItem *item; | 428 | CardViewItem *item; |
425 | AddresseeCardViewItem *aItem; | 429 | AddresseeCardViewItem *aItem; |
426 | 430 | ||
427 | if (uid.isNull()) | 431 | if (uid.isNull()) |
428 | { | 432 | { |
429 | mCardView->selectAll(selected); | 433 | mCardView->selectAll(selected); |
430 | } | 434 | } |
431 | else | 435 | else |
432 | { | 436 | { |
433 | bool found = false; | 437 | bool found = false; |
434 | for (item = mCardView->firstItem(); item && !found; | 438 | for (item = mCardView->firstItem(); item && !found; |
435 | item = item->nextItem()) | 439 | item = item->nextItem()) |
436 | { | 440 | { |
437 | #ifndef KAB_EMBEDDED | 441 | #ifndef KAB_EMBEDDED |
438 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 442 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
439 | #else //KAB_EMBEDDED | 443 | #else //KAB_EMBEDDED |
440 | aItem = (AddresseeCardViewItem*)(item); | 444 | aItem = (AddresseeCardViewItem*)(item); |
441 | #endif //KAB_EMBEDDED | 445 | #endif //KAB_EMBEDDED |
442 | 446 | ||
443 | if ((aItem) && (aItem->addressee().uid() == uid)) | 447 | if ((aItem) && (aItem->addressee().uid() == uid)) |
444 | { | 448 | { |
445 | mCardView->setSelected(aItem, selected); | 449 | mCardView->setSelected(aItem, selected); |
446 | mCardView->ensureItemVisible(item); | 450 | mCardView->ensureItemVisible(item); |
447 | found = true; | 451 | found = true; |
448 | } | 452 | } |
449 | } | 453 | } |
450 | } | 454 | } |
451 | } | 455 | } |
452 | 456 | ||
453 | //US added an additional method without parameter | 457 | //US added an additional method without parameter |
454 | void KAddressBookCardView::setSelected() | 458 | void KAddressBookCardView::setSelected() |
455 | { | 459 | { |
456 | setSelected(QString::null, true); | 460 | setSelected(QString::null, true); |
457 | } | 461 | } |
458 | 462 | ||
459 | void KAddressBookCardView::addresseeExecuted(CardViewItem *item) | 463 | void KAddressBookCardView::addresseeExecuted(CardViewItem *item) |
460 | { | 464 | { |
461 | #ifndef KAB_EMBEDDED | 465 | #ifndef KAB_EMBEDDED |
462 | AddresseeCardViewItem *aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 466 | AddresseeCardViewItem *aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
463 | #else //KAB_EMBEDDED | 467 | #else //KAB_EMBEDDED |
464 | AddresseeCardViewItem *aItem = (AddresseeCardViewItem*)(item); | 468 | AddresseeCardViewItem *aItem = (AddresseeCardViewItem*)(item); |
465 | #endif //KAB_EMBEDDED | 469 | #endif //KAB_EMBEDDED |
466 | if (aItem) | 470 | if (aItem) |
467 | { | 471 | { |
468 | //kdDebug()<<"... even has a valid item:)"<<endl; | 472 | //kdDebug()<<"... even has a valid item:)"<<endl; |
469 | emit executed(aItem->addressee().uid()); | 473 | emit executed(aItem->addressee().uid()); |
470 | } | 474 | } |
471 | } | 475 | } |
472 | 476 | ||
473 | void KAddressBookCardView::addresseeSelected() | 477 | void KAddressBookCardView::addresseeSelected() |
474 | { | 478 | { |
475 | CardViewItem *item; | 479 | CardViewItem *item; |
476 | AddresseeCardViewItem *aItem; | 480 | AddresseeCardViewItem *aItem; |
477 | 481 | ||
478 | bool found = false; | 482 | bool found = false; |
479 | for (item = mCardView->firstItem(); item && !found; | 483 | for (item = mCardView->firstItem(); item && !found; |
480 | item = item->nextItem()) | 484 | item = item->nextItem()) |
481 | { | 485 | { |
482 | if (item->isSelected()) | 486 | if (item->isSelected()) |
483 | { | 487 | { |
484 | #ifndef KAB_EMBEDDED | 488 | #ifndef KAB_EMBEDDED |
485 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); | 489 | aItem = dynamic_cast<AddresseeCardViewItem*>(item); |
486 | #else //KAB_EMBEDDED | 490 | #else //KAB_EMBEDDED |
487 | aItem = (AddresseeCardViewItem*)(item); | 491 | aItem = (AddresseeCardViewItem*)(item); |
488 | #endif //KAB_EMBEDDED | 492 | #endif //KAB_EMBEDDED |
489 | if ( aItem ) | 493 | if ( aItem ) |
490 | { | 494 | { |
491 | emit selected(aItem->addressee().uid()); | 495 | emit selected(aItem->addressee().uid()); |
492 | found = true; | 496 | found = true; |
493 | } | 497 | } |
494 | } | 498 | } |
495 | } | 499 | } |
496 | 500 | ||
497 | if (!found) | 501 | if (!found) |
498 | emit selected(QString::null); | 502 | emit selected(QString::null); |
499 | 503 | ||
500 | } | 504 | } |
501 | #ifndef KAB_EMBEDDED | 505 | #ifndef KAB_EMBEDDED |
502 | #include "kaddressbookcardview.moc" | 506 | #include "kaddressbookcardview.moc" |
503 | #endif //KAB_EMBEDDED | 507 | #endif //KAB_EMBEDDED |
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,470 +1,474 @@ | |||
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); |
197 | 201 | ||
198 | mListView->saveLayout(config, config->group()); | 202 | mListView->saveLayout(config, config->group()); |
199 | } | 203 | } |
200 | 204 | ||
201 | void KAddressBookTableView::readConfig(KConfig *config) | 205 | void KAddressBookTableView::readConfig(KConfig *config) |
202 | { | 206 | { |
203 | KAddressBookView::readConfig( config ); | 207 | KAddressBookView::readConfig( config ); |
204 | // The config could have changed the fields, so we need to reconstruct | 208 | // The config could have changed the fields, so we need to reconstruct |
205 | // the listview. | 209 | // the listview. |
206 | reconstructListView(); | 210 | reconstructListView(); |
207 | 211 | ||
208 | // costum colors? | 212 | // costum colors? |
209 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) | 213 | if ( config->readBoolEntry( "EnableCustomColors", false ) ) |
210 | { | 214 | { |
211 | QPalette p( mListView->palette() ); | 215 | QPalette p( mListView->palette() ); |
212 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); | 216 | QColor c = p.color(QPalette::Normal, QColorGroup::Base ); |
213 | p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); | 217 | p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); |
214 | c = p.color(QPalette::Normal, QColorGroup::Text ); | 218 | c = p.color(QPalette::Normal, QColorGroup::Text ); |
215 | p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); | 219 | p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); |
216 | c = p.color(QPalette::Normal, QColorGroup::Button ); | 220 | c = p.color(QPalette::Normal, QColorGroup::Button ); |
217 | p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); | 221 | p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); |
218 | c = p.color(QPalette::Normal, QColorGroup::ButtonText ); | 222 | c = p.color(QPalette::Normal, QColorGroup::ButtonText ); |
219 | p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); | 223 | p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); |
220 | c = p.color(QPalette::Normal, QColorGroup::Highlight ); | 224 | c = p.color(QPalette::Normal, QColorGroup::Highlight ); |
221 | p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); | 225 | p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); |
222 | c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); | 226 | c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); |
223 | p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); | 227 | p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); |
224 | #ifndef KAB_EMBEDDED | 228 | #ifndef KAB_EMBEDDED |
225 | c = KGlobalSettings::alternateBackgroundColor(); | 229 | c = KGlobalSettings::alternateBackgroundColor(); |
226 | #else //KAB_EMBEDDED | 230 | #else //KAB_EMBEDDED |
227 | c = QColor(240, 240, 240); | 231 | c = QColor(240, 240, 240); |
228 | #endif //KAB_EMBEDDED | 232 | #endif //KAB_EMBEDDED |
229 | c = config->readColorEntry ("AlternatingBackgroundColor", &c); | 233 | c = config->readColorEntry ("AlternatingBackgroundColor", &c); |
230 | mListView->setAlternateColor(c); | 234 | mListView->setAlternateColor(c); |
231 | 235 | ||
232 | 236 | ||
233 | //US mListView->viewport()->setPalette( p ); | 237 | //US mListView->viewport()->setPalette( p ); |
234 | mListView->setPalette( p ); | 238 | mListView->setPalette( p ); |
235 | } | 239 | } |
236 | else | 240 | else |
237 | { | 241 | { |
238 | // needed if turned off during a session. | 242 | // needed if turned off during a session. |
239 | //US mListView->viewport()->setPalette( mListView->palette() ); | 243 | //US mListView->viewport()->setPalette( mListView->palette() ); |
240 | mListView->setPalette( mListView->palette() ); | 244 | mListView->setPalette( mListView->palette() ); |
241 | } | 245 | } |
242 | 246 | ||
243 | //custom fonts? | 247 | //custom fonts? |
244 | QFont f( font() ); | 248 | QFont f( font() ); |
245 | if ( config->readBoolEntry( "EnableCustomFonts", false ) ) | 249 | if ( config->readBoolEntry( "EnableCustomFonts", false ) ) |
246 | { | 250 | { |
247 | mListView->setFont( config->readFontEntry( "TextFont", &f) ); | 251 | mListView->setFont( config->readFontEntry( "TextFont", &f) ); |
248 | f.setBold( true ); | 252 | f.setBold( true ); |
249 | //US mListView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); | 253 | //US mListView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); |
250 | mListView->header()->setFont( config->readFontEntry( "HeaderFont", &f ) ); | 254 | mListView->header()->setFont( config->readFontEntry( "HeaderFont", &f ) ); |
251 | } | 255 | } |
252 | else | 256 | else |
253 | { | 257 | { |
254 | mListView->setFont( f ); | 258 | mListView->setFont( f ); |
255 | f.setBold( true ); | 259 | f.setBold( true ); |
256 | //US mListView->setHeaderFont( f ); | 260 | //US mListView->setHeaderFont( f ); |
257 | mListView->header()->setFont( f ); | 261 | mListView->header()->setFont( f ); |
258 | } | 262 | } |
259 | 263 | ||
260 | // Set the list view options | 264 | // Set the list view options |
261 | mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground", | 265 | mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground", |
262 | true)); | 266 | true)); |
263 | mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false)); | 267 | mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false)); |
264 | mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true)); | 268 | mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true)); |
265 | 269 | ||
266 | if (config->readBoolEntry("Background", false)) | 270 | if (config->readBoolEntry("Background", false)) |
267 | mListView->setBackgroundPixmap(config->readEntry("BackgroundName")); | 271 | mListView->setBackgroundPixmap(config->readEntry("BackgroundName")); |
268 | 272 | ||
269 | // Restore the layout of the listview | 273 | // Restore the layout of the listview |
270 | mListView->restoreLayout(config, config->group()); | 274 | mListView->restoreLayout(config, config->group()); |
271 | } | 275 | } |
272 | 276 | ||
273 | void KAddressBookTableView::refresh(QString uid) | 277 | void KAddressBookTableView::refresh(QString uid) |
274 | { | 278 | { |
275 | // For now just repopulate. In reality this method should | 279 | // For now just repopulate. In reality this method should |
276 | // check the value of uid, and if valid iterate through | 280 | // check the value of uid, and if valid iterate through |
277 | // the listview to find the entry, then tell it to refresh. | 281 | // the listview to find the entry, then tell it to refresh. |
278 | 282 | ||
279 | if (uid.isNull()) { | 283 | if (uid.isNull()) { |
280 | // Clear the list view | 284 | // Clear the list view |
281 | QString currentUID, nextUID; | 285 | QString currentUID, nextUID; |
282 | #ifndef KAB_EMBEDDED | 286 | #ifndef KAB_EMBEDDED |
283 | ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() ); | 287 | ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() ); |
284 | #else //KAB_EMBEDDED | 288 | #else //KAB_EMBEDDED |
285 | ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() ); | 289 | ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() ); |
286 | #endif //KAB_EMBEDDED | 290 | #endif //KAB_EMBEDDED |
287 | 291 | ||
288 | if ( currentItem ) { | 292 | if ( currentItem ) { |
289 | #ifndef KAB_EMBEDDED | 293 | #ifndef KAB_EMBEDDED |
290 | ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() ); | 294 | ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() ); |
291 | #else //KAB_EMBEDDED | 295 | #else //KAB_EMBEDDED |
292 | ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() ); | 296 | ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() ); |
293 | #endif //KAB_EMBEDDED | 297 | #endif //KAB_EMBEDDED |
294 | if ( nextItem ) | 298 | if ( nextItem ) |
295 | nextUID = nextItem->addressee().uid(); | 299 | nextUID = nextItem->addressee().uid(); |
296 | currentUID = currentItem->addressee().uid(); | 300 | currentUID = currentItem->addressee().uid(); |
297 | } | 301 | } |
298 | 302 | ||
299 | mListView->clear(); | 303 | mListView->clear(); |
300 | 304 | ||
301 | currentItem = 0; | 305 | currentItem = 0; |
302 | KABC::Addressee::List addresseeList = addressees(); | 306 | KABC::Addressee::List addresseeList = addressees(); |
303 | KABC::Addressee::List::Iterator it; | 307 | KABC::Addressee::List::Iterator it; |
304 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { | 308 | for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { |
305 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) | 309 | if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) |
306 | continue; | 310 | continue; |
307 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); | 311 | ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); |
308 | if ( (*it).uid() == currentUID ) | 312 | if ( (*it).uid() == currentUID ) |
309 | currentItem = item; | 313 | currentItem = item; |
310 | else if ( (*it).uid() == nextUID && !currentItem ) | 314 | else if ( (*it).uid() == nextUID && !currentItem ) |
311 | currentItem = item; | 315 | currentItem = item; |
312 | } | 316 | } |
313 | 317 | ||
314 | // Sometimes the background pixmap gets messed up when we add lots | 318 | // Sometimes the background pixmap gets messed up when we add lots |
315 | // of items. | 319 | // of items. |
316 | mListView->repaint(); | 320 | mListView->repaint(); |
317 | 321 | ||
318 | if ( currentItem ) { | 322 | if ( currentItem ) { |
319 | mListView->setCurrentItem( currentItem ); | 323 | mListView->setCurrentItem( currentItem ); |
320 | mListView->ensureItemVisible( currentItem ); | 324 | mListView->ensureItemVisible( currentItem ); |
321 | } | 325 | } |
322 | } else { | 326 | } else { |
323 | // Only need to update on entry. Iterate through and try to find it | 327 | // Only need to update on entry. Iterate through and try to find it |
324 | ContactListViewItem *ceItem; | 328 | ContactListViewItem *ceItem; |
325 | QListViewItemIterator it( mListView ); | 329 | QListViewItemIterator it( mListView ); |
326 | while ( it.current() ) { | 330 | while ( it.current() ) { |
327 | #ifndef KAB_EMBEDDED | 331 | #ifndef KAB_EMBEDDED |
328 | ceItem = dynamic_cast<ContactListViewItem*>( it.current() ); | 332 | ceItem = dynamic_cast<ContactListViewItem*>( it.current() ); |
329 | #else //KAB_EMBEDDED | 333 | #else //KAB_EMBEDDED |
330 | ceItem = (ContactListViewItem*)( it.current() ); | 334 | ceItem = (ContactListViewItem*)( it.current() ); |
331 | #endif //KAB_EMBEDDED | 335 | #endif //KAB_EMBEDDED |
332 | 336 | ||
333 | if ( ceItem && ceItem->addressee().uid() == uid ) { | 337 | if ( ceItem && ceItem->addressee().uid() == uid ) { |
334 | ceItem->refresh(); | 338 | ceItem->refresh(); |
335 | return; | 339 | return; |
336 | } | 340 | } |
337 | ++it; | 341 | ++it; |
338 | } | 342 | } |
339 | 343 | ||
340 | refresh( QString::null ); | 344 | refresh( QString::null ); |
341 | } | 345 | } |
342 | } | 346 | } |
343 | 347 | ||
344 | QStringList KAddressBookTableView::selectedUids() | 348 | QStringList KAddressBookTableView::selectedUids() |
345 | { | 349 | { |
346 | QStringList uidList; | 350 | QStringList uidList; |
347 | QListViewItem *item; | 351 | QListViewItem *item; |
348 | ContactListViewItem *ceItem; | 352 | ContactListViewItem *ceItem; |
349 | 353 | ||
350 | for(item = mListView->firstChild(); item; item = item->itemBelow()) | 354 | for(item = mListView->firstChild(); item; item = item->itemBelow()) |
351 | { | 355 | { |
352 | if (mListView->isSelected( item )) | 356 | if (mListView->isSelected( item )) |
353 | { | 357 | { |
354 | #ifndef KAB_EMBEDDED | 358 | #ifndef KAB_EMBEDDED |
355 | ceItem = dynamic_cast<ContactListViewItem*>(item); | 359 | ceItem = dynamic_cast<ContactListViewItem*>(item); |
356 | #else //KAB_EMBEDDED | 360 | #else //KAB_EMBEDDED |
357 | ceItem = (ContactListViewItem*)(item); | 361 | ceItem = (ContactListViewItem*)(item); |
358 | #endif //KAB_EMBEDDED | 362 | #endif //KAB_EMBEDDED |
359 | 363 | ||
360 | if (ceItem != 0L) | 364 | if (ceItem != 0L) |
361 | uidList << ceItem->addressee().uid(); | 365 | uidList << ceItem->addressee().uid(); |
362 | } | 366 | } |
363 | } | 367 | } |
364 | if ( uidList.count() == 0 ) | 368 | if ( uidList.count() == 0 ) |
365 | if ( mListView->currentItem() ) { | 369 | if ( mListView->currentItem() ) { |
366 | ceItem = (ContactListViewItem*)(mListView->currentItem()) ; | 370 | ceItem = (ContactListViewItem*)(mListView->currentItem()) ; |
367 | uidList << ceItem->addressee().uid(); | 371 | uidList << ceItem->addressee().uid(); |
368 | } | 372 | } |
369 | 373 | ||
370 | return uidList; | 374 | return uidList; |
371 | } | 375 | } |
372 | 376 | ||
373 | void KAddressBookTableView::setSelected(QString uid, bool selected) | 377 | void KAddressBookTableView::setSelected(QString uid, bool selected) |
374 | { | 378 | { |
375 | QListViewItem *item; | 379 | QListViewItem *item; |
376 | ContactListViewItem *ceItem; | 380 | ContactListViewItem *ceItem; |
377 | 381 | ||
378 | if (uid.isNull()) | 382 | if (uid.isNull()) |
379 | { | 383 | { |
380 | mListView->selectAll(selected); | 384 | mListView->selectAll(selected); |
381 | } | 385 | } |
382 | else | 386 | else |
383 | { | 387 | { |
384 | for(item = mListView->firstChild(); item; item = item->itemBelow()) | 388 | for(item = mListView->firstChild(); item; item = item->itemBelow()) |
385 | { | 389 | { |
386 | #ifndef KAB_EMBEDDED | 390 | #ifndef KAB_EMBEDDED |
387 | ceItem = dynamic_cast<ContactListViewItem*>(item); | 391 | ceItem = dynamic_cast<ContactListViewItem*>(item); |
388 | #else //KAB_EMBEDDED | 392 | #else //KAB_EMBEDDED |
389 | ceItem = (ContactListViewItem*)(item); | 393 | ceItem = (ContactListViewItem*)(item); |
390 | #endif //KAB_EMBEDDED | 394 | #endif //KAB_EMBEDDED |
391 | 395 | ||
392 | 396 | ||
393 | if ((ceItem != 0L) && (ceItem->addressee().uid() == uid)) | 397 | if ((ceItem != 0L) && (ceItem->addressee().uid() == uid)) |
394 | { | 398 | { |
395 | mListView->setSelected(item, selected); | 399 | mListView->setSelected(item, selected); |
396 | 400 | ||
397 | if (selected) | 401 | if (selected) |
398 | mListView->ensureItemVisible(item); | 402 | mListView->ensureItemVisible(item); |
399 | } | 403 | } |
400 | } | 404 | } |
401 | } | 405 | } |
402 | } | 406 | } |
403 | 407 | ||
404 | void KAddressBookTableView::addresseeSelected() | 408 | void KAddressBookTableView::addresseeSelected() |
405 | { | 409 | { |
406 | // We need to try to find the first selected item. This might not be the | 410 | // We need to try to find the first selected item. This might not be the |
407 | // last selected item, but when QListView is in multiselection mode, | 411 | // last selected item, but when QListView is in multiselection mode, |
408 | // there is no way to figure out which one was | 412 | // there is no way to figure out which one was |
409 | // selected last. | 413 | // selected last. |
410 | QListViewItem *item; | 414 | QListViewItem *item; |
411 | bool found =false; | 415 | bool found =false; |
412 | for (item = mListView->firstChild(); item && !found; | 416 | for (item = mListView->firstChild(); item && !found; |
413 | item = item->nextSibling()) | 417 | item = item->nextSibling()) |
414 | { | 418 | { |
415 | if (item->isSelected()) | 419 | if (item->isSelected()) |
416 | { | 420 | { |
417 | found = true; | 421 | found = true; |
418 | #ifndef KAB_EMBEDDED | 422 | #ifndef KAB_EMBEDDED |
419 | ContactListViewItem *ceItem | 423 | ContactListViewItem *ceItem |
420 | = dynamic_cast<ContactListViewItem*>(item); | 424 | = dynamic_cast<ContactListViewItem*>(item); |
421 | #else //KAB_EMBEDDED | 425 | #else //KAB_EMBEDDED |
422 | ContactListViewItem *ceItem | 426 | ContactListViewItem *ceItem |
423 | = (ContactListViewItem*)(item); | 427 | = (ContactListViewItem*)(item); |
424 | #endif //KAB_EMBEDDED | 428 | #endif //KAB_EMBEDDED |
425 | 429 | ||
426 | if ( ceItem ) emit selected(ceItem->addressee().uid()); | 430 | if ( ceItem ) emit selected(ceItem->addressee().uid()); |
427 | } | 431 | } |
428 | } | 432 | } |
429 | 433 | ||
430 | if (!found) | 434 | if (!found) |
431 | emit selected(QString::null); | 435 | emit selected(QString::null); |
432 | } | 436 | } |
433 | 437 | ||
434 | void KAddressBookTableView::addresseeExecuted(QListViewItem *item) | 438 | void KAddressBookTableView::addresseeExecuted(QListViewItem *item) |
435 | { | 439 | { |
436 | if (item) | 440 | if (item) |
437 | { | 441 | { |
438 | #ifndef KAB_EMBEDDED | 442 | #ifndef KAB_EMBEDDED |
439 | ContactListViewItem *ceItem | 443 | ContactListViewItem *ceItem |
440 | = dynamic_cast<ContactListViewItem*>(item); | 444 | = dynamic_cast<ContactListViewItem*>(item); |
441 | #else //KAB_EMBEDDED | 445 | #else //KAB_EMBEDDED |
442 | ContactListViewItem *ceItem | 446 | ContactListViewItem *ceItem |
443 | = (ContactListViewItem*)(item); | 447 | = (ContactListViewItem*)(item); |
444 | #endif //KAB_EMBEDDED | 448 | #endif //KAB_EMBEDDED |
445 | 449 | ||
446 | if (ceItem) | 450 | if (ceItem) |
447 | { | 451 | { |
448 | emit executed(ceItem->addressee().uid()); | 452 | emit executed(ceItem->addressee().uid()); |
449 | } | 453 | } |
450 | } | 454 | } |
451 | else | 455 | else |
452 | { | 456 | { |
453 | emit executed(QString::null); | 457 | emit executed(QString::null); |
454 | } | 458 | } |
455 | } | 459 | } |
456 | 460 | ||
457 | void KAddressBookTableView::addresseeDeleted() | 461 | void KAddressBookTableView::addresseeDeleted() |
458 | { | 462 | { |
459 | 463 | ||
460 | emit deleteRequest(); | 464 | emit deleteRequest(); |
461 | 465 | ||
462 | } | 466 | } |
463 | 467 | ||
464 | 468 | ||
465 | 469 | ||
466 | 470 | ||
467 | 471 | ||
468 | #ifndef KAB_EMBEDDED | 472 | #ifndef KAB_EMBEDDED |
469 | #include "kaddressbooktableview.moc" | 473 | #include "kaddressbooktableview.moc" |
470 | #endif //KAB_EMBEDDED | 474 | #endif //KAB_EMBEDDED |
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index ca35a86..b9ce4f4 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp | |||
@@ -1,1886 +1,1903 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> |
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 | 19 | ||
20 | #include <qpopupmenu.h> | 20 | #include <qpopupmenu.h> |
21 | #include <qfont.h> | 21 | #include <qfont.h> |
22 | #include <qfontmetrics.h> | 22 | #include <qfontmetrics.h> |
23 | #include <qkeycode.h> | 23 | #include <qkeycode.h> |
24 | #include <qhbox.h> | 24 | #include <qhbox.h> |
25 | #include <qvbox.h> | 25 | #include <qvbox.h> |
26 | #include <qwidgetstack.h> | 26 | #include <qwidgetstack.h> |
27 | #include <qpushbutton.h> | 27 | #include <qpushbutton.h> |
28 | #include <qtooltip.h> | 28 | #include <qtooltip.h> |
29 | #include <qpainter.h> | 29 | #include <qpainter.h> |
30 | #include <qtimer.h> | 30 | #include <qtimer.h> |
31 | #include <qwhatsthis.h> | 31 | #include <qwhatsthis.h> |
32 | #ifndef DESKTOP_VERSION | 32 | #ifndef DESKTOP_VERSION |
33 | #include <qpe/qpeapplication.h> | 33 | #include <qpe/qpeapplication.h> |
34 | #else | 34 | #else |
35 | #include <qapplication.h> | 35 | #include <qapplication.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #include <kdebug.h> | 38 | #include <kdebug.h> |
39 | #include <klocale.h> | 39 | #include <klocale.h> |
40 | #include <kglobal.h> | 40 | #include <kglobal.h> |
41 | #include <kconfig.h> | 41 | #include <kconfig.h> |
42 | #include <kiconloader.h> | 42 | #include <kiconloader.h> |
43 | 43 | ||
44 | #include <kcalendarsystem.h> | 44 | #include <kcalendarsystem.h> |
45 | 45 | ||
46 | #ifndef KORG_NOPRINTER | 46 | #ifndef KORG_NOPRINTER |
47 | #include "calprinter.h" | 47 | #include "calprinter.h" |
48 | #endif | 48 | #endif |
49 | #include "koprefs.h" | 49 | #include "koprefs.h" |
50 | #ifndef KORG_NOPLUGINS | 50 | #ifndef KORG_NOPLUGINS |
51 | #include "kocore.h" | 51 | #include "kocore.h" |
52 | #endif | 52 | #endif |
53 | #include "koglobals.h" | 53 | #include "koglobals.h" |
54 | #include <libkcal/kincidenceformatter.h> | 54 | #include <libkcal/kincidenceformatter.h> |
55 | 55 | ||
56 | #include "komonthview.h" | 56 | #include "komonthview.h" |
57 | 57 | ||
58 | #define PIXMAP_SIZE 5 | 58 | #define PIXMAP_SIZE 5 |
59 | #ifdef DESKTOP_VERSION | 59 | #ifdef DESKTOP_VERSION |
60 | QToolTipGroup *MonthViewCell::mToolTipGroup = 0; | 60 | QToolTipGroup *MonthViewCell::mToolTipGroup = 0; |
61 | #endif | 61 | #endif |
62 | class KNOWhatsThis :public QWhatsThis | 62 | class KNOWhatsThis :public QWhatsThis |
63 | { | 63 | { |
64 | public: | 64 | public: |
65 | KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { }; | 65 | KNOWhatsThis( KNoScrollListBox* sbox ) : QWhatsThis( sbox ), _wid( sbox) { }; |
66 | //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); }; | 66 | //~KNOWhatsThis( ) {qDebug("~KNOWhatsThis( ) "); }; |
67 | 67 | ||
68 | protected: | 68 | protected: |
69 | virtual QString text( const QPoint& p) | 69 | virtual QString text( const QPoint& p) |
70 | { | 70 | { |
71 | return _wid->getWhatsThisText(p) ; | 71 | return _wid->getWhatsThisText(p) ; |
72 | }; | 72 | }; |
73 | private: | 73 | private: |
74 | KNoScrollListBox* _wid; | 74 | KNoScrollListBox* _wid; |
75 | 75 | ||
76 | }; | 76 | }; |
77 | 77 | ||
78 | 78 | ||
79 | KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name) | 79 | KNoScrollListBox::KNoScrollListBox(QWidget *parent,const char *name) |
80 | : QListBox(parent, name, WRepaintNoErase) | 80 | : QListBox(parent, name, WRepaintNoErase) |
81 | { | 81 | { |
82 | #ifndef DESKTOP_VERSION | 82 | #ifndef DESKTOP_VERSION |
83 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); | 83 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); |
84 | #endif | 84 | #endif |
85 | mWT = new KNOWhatsThis(this); | 85 | mWT = new KNOWhatsThis(this); |
86 | } | 86 | } |
87 | KNoScrollListBox::~KNoScrollListBox() | 87 | KNoScrollListBox::~KNoScrollListBox() |
88 | { | 88 | { |
89 | 89 | ||
90 | } | 90 | } |
91 | QString KNoScrollListBox::getWhatsThisText(QPoint p) | 91 | QString KNoScrollListBox::getWhatsThisText(QPoint p) |
92 | { | 92 | { |
93 | QListBoxItem* item = itemAt ( p ); | 93 | QListBoxItem* item = itemAt ( p ); |
94 | if ( ! item ) { | 94 | if ( ! item ) { |
95 | return i18n("Click in the cell\nto add an event!"); | 95 | return i18n("Click in the cell\nto add an event!"); |
96 | } | 96 | } |
97 | return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), | 97 | return KIncidenceFormatter::instance()->getFormattedText(((MonthViewItem*) item)->incidence(), |
98 | KOPrefs::instance()->mWTshowDetails, | 98 | KOPrefs::instance()->mWTshowDetails, |
99 | KOPrefs::instance()->mWTshowCreated, | 99 | KOPrefs::instance()->mWTshowCreated, |
100 | KOPrefs::instance()->mWTshowChanged); | 100 | KOPrefs::instance()->mWTshowChanged); |
101 | } | 101 | } |
102 | void KNoScrollListBox::keyPressEvent(QKeyEvent *e) | 102 | void KNoScrollListBox::keyPressEvent(QKeyEvent *e) |
103 | { | 103 | { |
104 | //qDebug("KNoScrollListBox::keyPressEvent "); | 104 | //qDebug("KNoScrollListBox::keyPressEvent "); |
105 | switch(e->key()) { | 105 | switch(e->key()) { |
106 | case Key_Right: | 106 | case Key_Right: |
107 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 107 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
108 | { | 108 | { |
109 | e->ignore(); | 109 | e->ignore(); |
110 | return; | 110 | return; |
111 | } | 111 | } |
112 | scrollBy(10,0); | 112 | scrollBy(10,0); |
113 | break; | 113 | break; |
114 | case Key_Left: | 114 | case Key_Left: |
115 | if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 115 | if (e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
116 | { | 116 | { |
117 | e->ignore(); | 117 | e->ignore(); |
118 | return; | 118 | return; |
119 | } | 119 | } |
120 | scrollBy(-10,0); | 120 | scrollBy(-10,0); |
121 | break; | 121 | break; |
122 | case Key_Up: | 122 | case Key_Up: |
123 | if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { | 123 | if( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { |
124 | e->ignore(); | 124 | e->ignore(); |
125 | break; | 125 | break; |
126 | } | 126 | } |
127 | if ( count() ) { | 127 | if ( count() ) { |
128 | setCurrentItem((currentItem()+count()-1)%count()); | 128 | setCurrentItem((currentItem()+count()-1)%count()); |
129 | if(!itemVisible(currentItem())) { | 129 | if(!itemVisible(currentItem())) { |
130 | if((unsigned int) currentItem() == (count()-1)) { | 130 | if((unsigned int) currentItem() == (count()-1)) { |
131 | setTopItem(currentItem()-numItemsVisible()+1); | 131 | setTopItem(currentItem()-numItemsVisible()+1); |
132 | } else { | 132 | } else { |
133 | setTopItem(topItem()-1); | 133 | setTopItem(topItem()-1); |
134 | } | 134 | } |
135 | } | 135 | } |
136 | } | 136 | } |
137 | break; | 137 | break; |
138 | case Key_Down: | 138 | case Key_Down: |
139 | if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { | 139 | if(e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton) { |
140 | e->ignore(); | 140 | e->ignore(); |
141 | break; | 141 | break; |
142 | } | 142 | } |
143 | if ( count () ) { | 143 | if ( count () ) { |
144 | setCurrentItem((currentItem()+1)%count()); | 144 | setCurrentItem((currentItem()+1)%count()); |
145 | if(!itemVisible(currentItem())) { | 145 | if(!itemVisible(currentItem())) { |
146 | if(currentItem() == 0) { | 146 | if(currentItem() == 0) { |
147 | setTopItem(0); | 147 | setTopItem(0); |
148 | } else { | 148 | } else { |
149 | setTopItem(topItem()+1); | 149 | setTopItem(topItem()+1); |
150 | } | 150 | } |
151 | } | 151 | } |
152 | } | 152 | } |
153 | break; | 153 | break; |
154 | case Key_I: | 154 | case Key_I: |
155 | QTimer::singleShot( 11, this, SLOT ( oneDown() ) ); | 155 | QTimer::singleShot( 11, this, SLOT ( oneDown() ) ); |
156 | e->ignore(); | 156 | e->ignore(); |
157 | break; | 157 | break; |
158 | case Key_Return: | 158 | case Key_Return: |
159 | case Key_Enter: | 159 | case Key_Enter: |
160 | { | 160 | { |
161 | if ( currentItem() >= 0 ) { | 161 | if ( currentItem() >= 0 ) { |
162 | emit doubleClicked( item( currentItem() ) ); | 162 | emit doubleClicked( item( currentItem() ) ); |
163 | e->accept(); | 163 | e->accept(); |
164 | } else { | 164 | } else { |
165 | e->ignore(); | 165 | e->ignore(); |
166 | } | 166 | } |
167 | } | 167 | } |
168 | break; | 168 | break; |
169 | case Key_Shift: | 169 | case Key_Shift: |
170 | emit shiftDown(); | 170 | emit shiftDown(); |
171 | break; | 171 | break; |
172 | default: | 172 | default: |
173 | e->ignore(); | 173 | e->ignore(); |
174 | break; | 174 | break; |
175 | } | 175 | } |
176 | } | 176 | } |
177 | 177 | ||
178 | void KNoScrollListBox::oneDown() | 178 | void KNoScrollListBox::oneDown() |
179 | { | 179 | { |
180 | if ( count () ) { | 180 | if ( count () ) { |
181 | setCurrentItem((currentItem()+1)%count()); | 181 | setCurrentItem((currentItem()+1)%count()); |
182 | if(!itemVisible(currentItem())) { | 182 | if(!itemVisible(currentItem())) { |
183 | if(currentItem() == 0) { | 183 | if(currentItem() == 0) { |
184 | setTopItem(0); | 184 | setTopItem(0); |
185 | } else { | 185 | } else { |
186 | setTopItem(topItem()+1); | 186 | setTopItem(topItem()+1); |
187 | } | 187 | } |
188 | } | 188 | } |
189 | } | 189 | } |
190 | } | 190 | } |
191 | void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) | 191 | void KNoScrollListBox::keyReleaseEvent(QKeyEvent *e) |
192 | { | 192 | { |
193 | switch(e->key()) { | 193 | switch(e->key()) { |
194 | case Key_Shift: | 194 | case Key_Shift: |
195 | emit shiftUp(); | 195 | emit shiftUp(); |
196 | break; | 196 | break; |
197 | default: | 197 | default: |
198 | break; | 198 | break; |
199 | } | 199 | } |
200 | } | 200 | } |
201 | 201 | ||
202 | void KNoScrollListBox::mousePressEvent(QMouseEvent *e) | 202 | void KNoScrollListBox::mousePressEvent(QMouseEvent *e) |
203 | { | 203 | { |
204 | QListBox::mousePressEvent(e); | 204 | QListBox::mousePressEvent(e); |
205 | 205 | ||
206 | if(e->button() == RightButton) { | 206 | if(e->button() == RightButton) { |
207 | emit rightClick(); | 207 | emit rightClick(); |
208 | } | 208 | } |
209 | } | 209 | } |
210 | 210 | ||
211 | MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) | 211 | MonthViewItem::MonthViewItem( Incidence *incidence, QDate qd, const QString & s) |
212 | : QListBoxItem() | 212 | : QListBoxItem() |
213 | { | 213 | { |
214 | mblockRepaint = true; | 214 | mblockRepaint = true; |
215 | setText( s ); | 215 | setText( s ); |
216 | mMultiday = 0; | 216 | mMultiday = 0; |
217 | mIncidence = incidence; | 217 | mIncidence = incidence; |
218 | mDate = qd; | 218 | mDate = qd; |
219 | mRecur = false; | 219 | mRecur = false; |
220 | mAlarm = false; | 220 | mAlarm = false; |
221 | mReply = false; | 221 | mReply = false; |
222 | mInfo = false; | 222 | mInfo = false; |
223 | //qDebug("NEWWWWWWWWWWWWW "); | 223 | //qDebug("NEWWWWWWWWWWWWW "); |
224 | } | 224 | } |
225 | void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) | 225 | void MonthViewItem::recycle( Incidence *incidence, QDate qd, const QString & s) |
226 | { | 226 | { |
227 | setText( s ); | 227 | setText( s ); |
228 | mMultiday = 0; | 228 | mMultiday = 0; |
229 | mIncidence = incidence; | 229 | mIncidence = incidence; |
230 | mDate = qd; | 230 | mDate = qd; |
231 | mRecur = false; | 231 | mRecur = false; |
232 | mAlarm = false; | 232 | mAlarm = false; |
233 | mReply = false; | 233 | mReply = false; |
234 | mInfo = false; | 234 | mInfo = false; |
235 | //qDebug("recucleeeeeeeeeeeeeeeee "); | 235 | //qDebug("recucleeeeeeeeeeeeeeeee "); |
236 | } | 236 | } |
237 | 237 | ||
238 | void MonthViewItem::paint(QPainter *p) | 238 | void MonthViewItem::paint(QPainter *p) |
239 | { | 239 | { |
240 | if ( mblockRepaint ) { | 240 | if ( mblockRepaint ) { |
241 | //qDebug("block "); | 241 | //qDebug("block "); |
242 | return; | 242 | return; |
243 | } | 243 | } |
244 | //qDebug("NON block "); | 244 | //qDebug("NON block "); |
245 | #if QT_VERSION >= 0x030000 | 245 | #if QT_VERSION >= 0x030000 |
246 | bool sel = isSelected(); | 246 | bool sel = isSelected(); |
247 | #else | 247 | #else |
248 | bool sel = selected(); | 248 | bool sel = selected(); |
249 | #endif | 249 | #endif |
250 | 250 | ||
251 | 251 | ||
252 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) | 252 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) |
253 | { | 253 | { |
254 | p->setBackgroundColor( palette().color( QPalette::Normal, \ | 254 | p->setBackgroundColor( palette().color( QPalette::Normal, \ |
255 | sel ? QColorGroup::Highlight : QColorGroup::Background ) ); | 255 | sel ? QColorGroup::Highlight : QColorGroup::Background ) ); |
256 | p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); | 256 | p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); |
257 | } | 257 | } |
258 | int x = 1; | 258 | int x = 1; |
259 | //int y = 3;//(height() - mRecurPixmap.height()) /2; | 259 | //int y = 3;//(height() - mRecurPixmap.height()) /2; |
260 | int size = PIXMAP_SIZE; | 260 | int size = PIXMAP_SIZE; |
261 | if ( QApplication::desktop()->width() < 300 ) | 261 | if ( QApplication::desktop()->width() < 300 ) |
262 | size = 3; | 262 | size = 3; |
263 | int heihei = height( listBox () ); | 263 | int heihei = height( listBox () ); |
264 | int y = (heihei - size -1 ) /2; | 264 | int y = (heihei - size -1 ) /2; |
265 | 265 | ||
266 | if ( KOPrefs::instance()->mMonthShowIcons ) { | 266 | if ( KOPrefs::instance()->mMonthShowIcons ) { |
267 | if ( mInfo ) { | 267 | if ( mInfo ) { |
268 | p->fillRect ( x, y,size,size, Qt::darkGreen ); | 268 | p->fillRect ( x, y,size,size, Qt::darkGreen ); |
269 | x += size + 1; | 269 | x += size + 1; |
270 | } | 270 | } |
271 | if ( mRecur ) { | 271 | if ( mRecur ) { |
272 | p->fillRect ( x, y,size,size, Qt::blue ); | 272 | p->fillRect ( x, y,size,size, Qt::blue ); |
273 | x += size + 1; | 273 | x += size + 1; |
274 | } | 274 | } |
275 | if ( mAlarm ) { | 275 | if ( mAlarm ) { |
276 | p->fillRect ( x, y,size,size, Qt::red ); | 276 | p->fillRect ( x, y,size,size, Qt::red ); |
277 | x += size + 1; | 277 | x += size + 1; |
278 | } | 278 | } |
279 | if ( mReply ) { | 279 | if ( mReply ) { |
280 | p->fillRect ( x, y,size,size, Qt::yellow ); | 280 | p->fillRect ( x, y,size,size, Qt::yellow ); |
281 | x += size + 1; | 281 | x += size + 1; |
282 | } | 282 | } |
283 | } | 283 | } |
284 | if ( mMultiday ) { | 284 | if ( mMultiday ) { |
285 | int yyy = y+(size/2); | 285 | int yyy = y+(size/2); |
286 | int sizeM = size+2; | 286 | int sizeM = size+2; |
287 | p->setBrush( QBrush::SolidPattern ); | 287 | p->setBrush( QBrush::SolidPattern ); |
288 | p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ; | 288 | p->drawLine ( x+1, yyy, x +sizeM +sizeM/2-1, yyy ) ; |
289 | if ( mMultiday == 2 || mMultiday == 3 ) { | 289 | if ( mMultiday == 2 || mMultiday == 3 ) { |
290 | QPointArray pa ( 3 ); | 290 | QPointArray pa ( 3 ); |
291 | pa.setPoint (0, x, yyy ); | 291 | pa.setPoint (0, x, yyy ); |
292 | pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 ); | 292 | pa.setPoint (1, x+sizeM/2, yyy+sizeM/2 ); |
293 | pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 ); | 293 | pa.setPoint (2, x+sizeM/2, yyy-sizeM/2 ); |
294 | p->drawPolygon( pa ); | 294 | p->drawPolygon( pa ); |
295 | } | 295 | } |
296 | if ( mMultiday == 2 || mMultiday == 1 ) { | 296 | if ( mMultiday == 2 || mMultiday == 1 ) { |
297 | QPointArray pa ( 3 ); | 297 | QPointArray pa ( 3 ); |
298 | pa.setPoint (0, x+sizeM +sizeM/2, yyy ); | 298 | pa.setPoint (0, x+sizeM +sizeM/2, yyy ); |
299 | pa.setPoint (1, x+sizeM, yyy+sizeM/2 ); | 299 | pa.setPoint (1, x+sizeM, yyy+sizeM/2 ); |
300 | pa.setPoint (2, x+sizeM, yyy-sizeM/2 ); | 300 | pa.setPoint (2, x+sizeM, yyy-sizeM/2 ); |
301 | p->drawPolygon( pa ); | 301 | p->drawPolygon( pa ); |
302 | } | 302 | } |
303 | if ( mMultiday == 1 ) { | 303 | if ( mMultiday == 1 ) { |
304 | // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); | 304 | // p->fillRect ( x, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); |
305 | 305 | ||
306 | p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 ); | 306 | p->drawLine ( x+1, yyy-sizeM/2, x+1, yyy+sizeM/2 ); |
307 | } | 307 | } |
308 | if ( mMultiday == 3 ) { | 308 | if ( mMultiday == 3 ) { |
309 | // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); | 309 | // p->fillRect ( x+sizeM, yyy-sizeM/2+1, sizeM/2, size, QBrush ( QBrush::SolidPattern ) ); |
310 | p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 ); | 310 | p->drawLine ( x+sizeM +sizeM/2-1, yyy-sizeM/2, x+sizeM +sizeM/2-1, yyy+sizeM/2 ); |
311 | 311 | ||
312 | } | 312 | } |
313 | x += sizeM/2 + 1; | 313 | x += sizeM/2 + 1; |
314 | x += sizeM + 1; | 314 | x += sizeM + 1; |
315 | } | 315 | } |
316 | 316 | ||
317 | if ( mIncidence->type() == "Todo" ){ | 317 | if ( mIncidence->type() == "Todo" ){ |
318 | Todo* td = ( Todo* ) mIncidence; | 318 | Todo* td = ( Todo* ) mIncidence; |
319 | if ( td->isCompleted() ) { | 319 | if ( td->isCompleted() ) { |
320 | int half = size/2; | 320 | int half = size/2; |
321 | p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ; | 321 | p->drawLine ( x, heihei/2, x +half , heihei/2 +half ) ; |
322 | p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ; | 322 | p->drawLine ( x +half , heihei/2 +half , x +half+half +2 , heihei/2 -2 ) ; |
323 | x += half+half + 4; | 323 | x += half+half + 4; |
324 | 324 | ||
325 | } else { | 325 | } else { |
326 | int val = td->percentComplete()/20; | 326 | int val = td->percentComplete()/20; |
327 | p->fillRect ( x+1, y-2, val ,size+4,Qt::black ); | 327 | p->fillRect ( x+1, y-2, val ,size+4,Qt::black ); |
328 | p->drawRect ( x, y-2,7,size+4); | 328 | p->drawRect ( x, y-2,7,size+4); |
329 | x += size + 3; | 329 | x += size + 3; |
330 | } | 330 | } |
331 | } | 331 | } |
332 | QFontMetrics fm = p->fontMetrics(); | 332 | QFontMetrics fm = p->fontMetrics(); |
333 | int yPos; | 333 | int yPos; |
334 | int pmheight = size; | 334 | int pmheight = size; |
335 | if( pmheight < fm.height() ) | 335 | if( pmheight < fm.height() ) |
336 | yPos = fm.ascent() + fm.leading()/2; | 336 | yPos = fm.ascent() + fm.leading()/2; |
337 | else | 337 | else |
338 | yPos = pmheight/2 - fm.height()/2 + fm.ascent(); | 338 | yPos = pmheight/2 - fm.height()/2 + fm.ascent(); |
339 | p->setPen( palette().color( QPalette::Normal, sel ? \ | 339 | p->setPen( palette().color( QPalette::Normal, sel ? \ |
340 | QColorGroup::HighlightedText : QColorGroup::Foreground ) ); | 340 | QColorGroup::HighlightedText : QColorGroup::Foreground ) ); |
341 | p->drawText( x, yPos, text() ); | 341 | p->drawText( x, yPos, text() ); |
342 | if ( mIncidence->cancelled() ) { | 342 | if ( mIncidence->cancelled() ) { |
343 | int wid = fm.width( text() ); | 343 | int wid = fm.width( text() ); |
344 | p->drawLine( x, heihei/2-1 ,x+wid, heihei/2-1 ); | 344 | p->drawLine( x, heihei/2-1 ,x+wid, heihei/2-1 ); |
345 | } | 345 | } |
346 | 346 | ||
347 | } | 347 | } |
348 | 348 | ||
349 | int MonthViewItem::height(const QListBox *lb) const | 349 | int MonthViewItem::height(const QListBox *lb) const |
350 | { | 350 | { |
351 | int ret = 10; | 351 | int ret = 10; |
352 | if ( lb ) | 352 | if ( lb ) |
353 | ret = lb->fontMetrics().lineSpacing()+1; | 353 | ret = lb->fontMetrics().lineSpacing()+1; |
354 | return ret; | 354 | return ret; |
355 | } | 355 | } |
356 | 356 | ||
357 | int MonthViewItem::width(const QListBox *lb) const | 357 | int MonthViewItem::width(const QListBox *lb) const |
358 | { | 358 | { |
359 | 359 | ||
360 | if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) { | 360 | if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) { |
361 | int size = PIXMAP_SIZE; | 361 | int size = PIXMAP_SIZE; |
362 | if ( QApplication::desktop()->width() < 300 ) | 362 | if ( QApplication::desktop()->width() < 300 ) |
363 | size = 3; | 363 | size = 3; |
364 | int x = 1; | 364 | int x = 1; |
365 | if ( KOPrefs::instance()->mMonthShowIcons ) { | 365 | if ( KOPrefs::instance()->mMonthShowIcons ) { |
366 | if ( mInfo ) { | 366 | if ( mInfo ) { |
367 | x += size + 1; | 367 | x += size + 1; |
368 | } | 368 | } |
369 | if( mRecur ) { | 369 | if( mRecur ) { |
370 | x += size+1; | 370 | x += size+1; |
371 | } | 371 | } |
372 | if( mAlarm ) { | 372 | if( mAlarm ) { |
373 | x += size+1; | 373 | x += size+1; |
374 | } | 374 | } |
375 | if( mReply ) { | 375 | if( mReply ) { |
376 | x += size+1; | 376 | x += size+1; |
377 | } | 377 | } |
378 | } | 378 | } |
379 | if( mMultiday ) { | 379 | if( mMultiday ) { |
380 | x += size+1+2+size/2; | 380 | x += size+1+2+size/2; |
381 | } | 381 | } |
382 | return( x + lb->fontMetrics().width( text() ) + 1 ); | 382 | return( x + lb->fontMetrics().width( text() ) + 1 ); |
383 | } | 383 | } |
384 | if ( ! lb ) | 384 | if ( ! lb ) |
385 | return 10; | 385 | return 10; |
386 | //qDebug("ret wid %d ", lb->width()); | 386 | //qDebug("ret wid %d ", lb->width()); |
387 | return lb->width(); | 387 | return lb->width(); |
388 | } | 388 | } |
389 | 389 | ||
390 | 390 | ||
391 | MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) | 391 | MonthViewCell::MonthViewCell( KOMonthView *parent,QWidget* par ) |
392 | : KNoScrollListBox( par ), | 392 | : KNoScrollListBox( par ), |
393 | mMonthView( parent ) | 393 | mMonthView( parent ) |
394 | { | 394 | { |
395 | 395 | ||
396 | mCurrentAvailItem = 0; | 396 | mCurrentAvailItem = 0; |
397 | //QVBoxLayout *topLayout = new QVBoxLayout( this ); | 397 | //QVBoxLayout *topLayout = new QVBoxLayout( this ); |
398 | currentPalette = 0; | 398 | currentPalette = 0; |
399 | // mLabel = new QLabel( this );QPushButton | 399 | // mLabel = new QLabel( this );QPushButton |
400 | mLabel = new QPushButton( this ); | 400 | mLabel = new QPushButton( this ); |
401 | //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); | 401 | //mLabel->setFrameStyle( QFrame::Panel | QFrame::Plain ); |
402 | //mLabel->setLineWidth( 1 ); | 402 | //mLabel->setLineWidth( 1 ); |
403 | //mLabel->setAlignment( AlignCenter ); | 403 | //mLabel->setAlignment( AlignCenter ); |
404 | mLabel->setFlat( true ); | 404 | mLabel->setFlat( true ); |
405 | mLabel->setFocusPolicy(NoFocus); | 405 | mLabel->setFocusPolicy(NoFocus); |
406 | //mItemList = new KNoScrollListBox( this ); | 406 | //mItemList = new KNoScrollListBox( this ); |
407 | setMinimumSize( 10, 10 ); | 407 | setMinimumSize( 10, 10 ); |
408 | setFrameStyle( QFrame::Panel | QFrame::Plain ); | 408 | setFrameStyle( QFrame::Panel | QFrame::Plain ); |
409 | setLineWidth( 1 ); | 409 | setLineWidth( 1 ); |
410 | //topLayout->addWidget( mItemList ); | 410 | //topLayout->addWidget( mItemList ); |
411 | mLabel->raise(); | 411 | mLabel->raise(); |
412 | // QColor( 0,0,255 ) QColor( 160,1600,255 ) | 412 | // QColor( 0,0,255 ) QColor( 160,1600,255 ) |
413 | mStandardPalette = palette(); | 413 | mStandardPalette = palette(); |
414 | mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); | 414 | mStandardPalette.setColor(QColorGroup::Base, mStandardPalette.color( QPalette::Normal, QColorGroup::Background ) ); |
415 | 415 | ||
416 | enableScrollBars( false ); | 416 | enableScrollBars( false ); |
417 | updateConfig(); | 417 | updateConfig(); |
418 | //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); | 418 | //connect( mLabel, SIGNAL( clicked( )), SLOT( newEvent() )); |
419 | connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); | 419 | connect( mLabel, SIGNAL( clicked( )), SLOT( showDay() )); |
420 | connect( this , SIGNAL( doubleClicked( QListBoxItem *) ), | 420 | connect( this , SIGNAL( doubleClicked( QListBoxItem *) ), |
421 | SLOT( defaultAction( QListBoxItem * ) ) ); | 421 | SLOT( defaultAction( QListBoxItem * ) ) ); |
422 | connect( this, SIGNAL( rightButtonPressed( QListBoxItem *, | 422 | connect( this, SIGNAL( rightButtonPressed( QListBoxItem *, |
423 | const QPoint &) ), | 423 | const QPoint &) ), |
424 | SLOT( contextMenu( QListBoxItem * ) ) ); | 424 | SLOT( contextMenu( QListBoxItem * ) ) ); |
425 | connect( this, SIGNAL( highlighted( QListBoxItem *) ), | 425 | connect( this, SIGNAL( highlighted( QListBoxItem *) ), |
426 | SLOT( selection( QListBoxItem * ) ) ); | 426 | SLOT( selection( QListBoxItem * ) ) ); |
427 | connect( this, SIGNAL( clicked( QListBoxItem * ) ), | 427 | connect( this, SIGNAL( clicked( QListBoxItem * ) ), |
428 | SLOT( cellClicked( QListBoxItem * ) ) ); | 428 | SLOT( cellClicked( QListBoxItem * ) ) ); |
429 | connect( this, SIGNAL( clicked( QListBoxItem * ) ), | 429 | connect( this, SIGNAL( clicked( QListBoxItem * ) ), |
430 | SLOT( selection( QListBoxItem * ) ) ); | 430 | SLOT( selection( QListBoxItem * ) ) ); |
431 | } | 431 | } |
432 | #ifdef DESKTOP_VERSION | 432 | #ifdef DESKTOP_VERSION |
433 | QToolTipGroup *MonthViewCell::toolTipGroup() | 433 | QToolTipGroup *MonthViewCell::toolTipGroup() |
434 | { | 434 | { |
435 | if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); | 435 | if (!mToolTipGroup) mToolTipGroup = new QToolTipGroup(0); |
436 | return mToolTipGroup; | 436 | return mToolTipGroup; |
437 | } | 437 | } |
438 | #endif | 438 | #endif |
439 | 439 | ||
440 | void MonthViewCell::setDate( const QDate &date ) | 440 | void MonthViewCell::setDate( const QDate &date ) |
441 | { | 441 | { |
442 | // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; | 442 | // kdDebug() << "MonthViewCell::setDate(): " << date.toString() << endl; |
443 | mDate = date; | 443 | mDate = date; |
444 | 444 | ||
445 | 445 | ||
446 | 446 | ||
447 | //resizeEvent( 0 ); | 447 | //resizeEvent( 0 ); |
448 | } | 448 | } |
449 | 449 | ||
450 | QDate MonthViewCell::date() const | 450 | QDate MonthViewCell::date() const |
451 | { | 451 | { |
452 | return mDate; | 452 | return mDate; |
453 | } | 453 | } |
454 | 454 | ||
455 | void MonthViewCell::setPrimary( bool primary ) | 455 | void MonthViewCell::setPrimary( bool primary ) |
456 | { | 456 | { |
457 | mPrimary = primary; | 457 | mPrimary = primary; |
458 | //setMyPalette(); | 458 | //setMyPalette(); |
459 | } | 459 | } |
460 | void MonthViewCell::setMyPalette() | 460 | void MonthViewCell::setMyPalette() |
461 | { | 461 | { |
462 | 462 | ||
463 | if ( mHoliday) { | 463 | if ( mHoliday) { |
464 | if ( currentPalette == 1 ) return; | 464 | if ( currentPalette == 1 ) return; |
465 | mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) )); | 465 | mLabel->setPalette( QPalette ( mHolidayPalette.color( QPalette::Normal,QColorGroup::Base),mHolidayPalette.color(QPalette::Normal,QColorGroup::Base ) )); |
466 | setPalette( mHolidayPalette ); | 466 | setPalette( mHolidayPalette ); |
467 | //mLabel->setPalette( mHolidayPalette ); | 467 | //mLabel->setPalette( mHolidayPalette ); |
468 | currentPalette = 1; | 468 | currentPalette = 1; |
469 | 469 | ||
470 | } else { | 470 | } else { |
471 | if ( mPrimary ) { | 471 | if ( mPrimary ) { |
472 | if ( currentPalette == 2 ) return; | 472 | if ( currentPalette == 2 ) return; |
473 | mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); | 473 | mLabel->setPalette( QPalette ( mPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); |
474 | //mLabel->setPalette( mPrimaryPalette ); | 474 | //mLabel->setPalette( mPrimaryPalette ); |
475 | setPalette( mPrimaryPalette ); | 475 | setPalette( mPrimaryPalette ); |
476 | currentPalette = 2; | 476 | currentPalette = 2; |
477 | 477 | ||
478 | } else { | 478 | } else { |
479 | if ( currentPalette == 3 ) return; | 479 | if ( currentPalette == 3 ) return; |
480 | setPalette( mNonPrimaryPalette ); | 480 | setPalette( mNonPrimaryPalette ); |
481 | mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); | 481 | mLabel->setPalette( QPalette ( mNonPrimaryPalette.color( QPalette::Normal,QColorGroup::Base),mNonPrimaryPalette.color(QPalette::Normal,QColorGroup::Base ) )); |
482 | //mLabel->setPalette( mNonPrimaryPalette );; | 482 | //mLabel->setPalette( mNonPrimaryPalette );; |
483 | currentPalette = 3; | 483 | currentPalette = 3; |
484 | } | 484 | } |
485 | } | 485 | } |
486 | //QPalette pal = palette(); | 486 | //QPalette pal = palette(); |
487 | 487 | ||
488 | //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); | 488 | //mLabel->setPalette( QPalette ( pal.color( QPalette::Normal,QColorGroup::Base),pal.color(QPalette::Normal,QColorGroup::Base ) )); |
489 | } | 489 | } |
490 | QPalette MonthViewCell::getPalette () | 490 | QPalette MonthViewCell::getPalette () |
491 | { | 491 | { |
492 | if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) | 492 | if ( !KOPrefs::instance()->mMonthViewUsesDayColors ) |
493 | return mStandardPalette; | 493 | return mStandardPalette; |
494 | if ( mHoliday) { | 494 | if ( mHoliday) { |
495 | return mHolidayPalette ; | 495 | return mHolidayPalette ; |
496 | } else { | 496 | } else { |
497 | if ( mPrimary ) { | 497 | if ( mPrimary ) { |
498 | return mPrimaryPalette ; | 498 | return mPrimaryPalette ; |
499 | } | 499 | } |
500 | } | 500 | } |
501 | return mNonPrimaryPalette; | 501 | return mNonPrimaryPalette; |
502 | } | 502 | } |
503 | bool MonthViewCell::isPrimary() const | 503 | bool MonthViewCell::isPrimary() const |
504 | { | 504 | { |
505 | return mPrimary; | 505 | return mPrimary; |
506 | } | 506 | } |
507 | 507 | ||
508 | void MonthViewCell::setHoliday( bool holiday ) | 508 | void MonthViewCell::setHoliday( bool holiday ) |
509 | { | 509 | { |
510 | mHoliday = holiday; | 510 | mHoliday = holiday; |
511 | //setMyPalette(); | 511 | //setMyPalette(); |
512 | } | 512 | } |
513 | 513 | ||
514 | void MonthViewCell::setHoliday( const QString &holiday ) | 514 | void MonthViewCell::setHoliday( const QString &holiday ) |
515 | { | 515 | { |
516 | mHolidayString = holiday; | 516 | mHolidayString = holiday; |
517 | 517 | ||
518 | if ( !holiday.isEmpty() ) { | 518 | if ( !holiday.isEmpty() ) { |
519 | setHoliday( true ); | 519 | setHoliday( true ); |
520 | } | 520 | } |
521 | } | 521 | } |
522 | 522 | ||
523 | void MonthViewCell::startUpdateCell() | 523 | void MonthViewCell::startUpdateCell() |
524 | { | 524 | { |
525 | 525 | ||
526 | setFocusPolicy(NoFocus); | 526 | setFocusPolicy(NoFocus); |
527 | if ( !mMonthView->isUpdatePossible() ) | 527 | if ( !mMonthView->isUpdatePossible() ) |
528 | return; | 528 | return; |
529 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); | 529 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); |
530 | while ( mitem ) { | 530 | while ( mitem ) { |
531 | mitem->setBlockRepaint( true ); | 531 | mitem->setBlockRepaint( true ); |
532 | mitem = (MonthViewItem *)mitem->next(); | 532 | mitem = (MonthViewItem *)mitem->next(); |
533 | } | 533 | } |
534 | if ( mAvailItemList.count() > 20 ) { | 534 | if ( mAvailItemList.count() > 20 ) { |
535 | mAvailItemList.setAutoDelete( true ); | 535 | mAvailItemList.setAutoDelete( true ); |
536 | mAvailItemList.clear(); | 536 | mAvailItemList.clear(); |
537 | mAvailItemList.setAutoDelete( false ); | 537 | mAvailItemList.setAutoDelete( false ); |
538 | } | 538 | } |
539 | /* | 539 | /* |
540 | if ( !isVisible() ){ | 540 | if ( !isVisible() ){ |
541 | return; | 541 | return; |
542 | } | 542 | } |
543 | */ | 543 | */ |
544 | // qDebug("MonthViewCell::updateCell() "); | 544 | // qDebug("MonthViewCell::updateCell() "); |
545 | setPrimary( mDate.month()%2 ); | 545 | setPrimary( mDate.month()%2 ); |
546 | setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); | 546 | setHoliday( KOGlobals::self()->calendarSystem()->dayOfWeek(mDate) == KOGlobals::self()->calendarSystem()->weekDayOfPray() || ( mDate.dayOfWeek() == 6 ) && KOPrefs::instance()-> mExcludeSaturdays); |
547 | if ( mDate == QDate::currentDate() ) { | 547 | if ( mDate == QDate::currentDate() ) { |
548 | setLineWidth( 3 ); | 548 | setLineWidth( 3 ); |
549 | } else { | 549 | } else { |
550 | setLineWidth( 1 ); | 550 | setLineWidth( 1 ); |
551 | } | 551 | } |
552 | mCurrentAvailItem = (MonthViewItem*) firstItem (); | 552 | mCurrentAvailItem = (MonthViewItem*) firstItem (); |
553 | //clear(); | 553 | //clear(); |
554 | 554 | ||
555 | #ifdef DESKTOP_VERSION | 555 | #ifdef DESKTOP_VERSION |
556 | QToolTip::remove(this); | 556 | QToolTip::remove(this); |
557 | #endif | 557 | #endif |
558 | mToolTip.clear(); | 558 | mToolTip.clear(); |
559 | //qApp->processEvents(); | 559 | //qApp->processEvents(); |
560 | #if 0 | 560 | #if 0 |
561 | if ( !mHolidayString.isEmpty() ) { | 561 | if ( !mHolidayString.isEmpty() ) { |
562 | MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); | 562 | MonthViewItem *item = new MonthViewItem( 0, mDate, mHolidayString ); |
563 | item->setPalette( mHolidayPalette ); | 563 | item->setPalette( mHolidayPalette ); |
564 | insertItem( item ); | 564 | insertItem( item ); |
565 | mToolTip.append ( mHolidayString ); | 565 | mToolTip.append ( mHolidayString ); |
566 | } | 566 | } |
567 | #endif | 567 | #endif |
568 | } | 568 | } |
569 | 569 | ||
570 | void MonthViewCell::insertEvent(Event *event) | 570 | void MonthViewCell::insertEvent(Event *event) |
571 | { | 571 | { |
572 | QString mToolTipText; | 572 | QString mToolTipText; |
573 | bool insertNewItem = false; | 573 | bool insertNewItem = false; |
574 | setFocusPolicy(WheelFocus); | 574 | setFocusPolicy(WheelFocus); |
575 | if ( !(event->doesRecur() == Recurrence::rNone) ) { | 575 | if ( !(event->doesRecur() == Recurrence::rNone) ) { |
576 | if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) | 576 | if ( !KOPrefs::instance()->mMonthDailyRecur && event->doesRecur() == Recurrence::rDaily ) |
577 | return; | 577 | return; |
578 | else | 578 | else |
579 | if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) | 579 | if ( !KOPrefs::instance()->mMonthWeeklyRecur && event->doesRecur() == Recurrence::rWeekly ) |
580 | return; | 580 | return; |
581 | } | 581 | } |
582 | 582 | ||
583 | if ( event->isHoliday()) { | 583 | if ( event->isHoliday()) { |
584 | setHoliday( true ); | 584 | setHoliday( true ); |
585 | if ( mDate.dayOfWeek() == 7 ) | 585 | if ( mDate.dayOfWeek() == 7 ) |
586 | setLineWidth( 3 ); | 586 | setLineWidth( 3 ); |
587 | } | 587 | } |
588 | QString text; | 588 | QString text; |
589 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day | 589 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day |
590 | if (event->isMultiDay()) { | 590 | if (event->isMultiDay()) { |
591 | QString prefix = "<->";multiday = 2; | 591 | QString prefix = "<->";multiday = 2; |
592 | QString time; | 592 | QString time; |
593 | if ( event->doesRecur() ) { | 593 | if ( event->doesRecur() ) { |
594 | if ( event->recursOn( mDate) ) { | 594 | if ( event->recursOn( mDate) ) { |
595 | prefix ="->" ;multiday = 1; | 595 | prefix ="->" ;multiday = 1; |
596 | } | 596 | } |
597 | else { | 597 | else { |
598 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); | 598 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); |
599 | if ( event->recursOn( mDate.addDays( -days)) ) { | 599 | if ( event->recursOn( mDate.addDays( -days)) ) { |
600 | prefix ="<-" ;multiday = 3; | 600 | prefix ="<-" ;multiday = 3; |
601 | } | 601 | } |
602 | } | 602 | } |
603 | 603 | ||
604 | } else { | 604 | } else { |
605 | if (mDate == event->dtStart().date()) { | 605 | if (mDate == event->dtStart().date()) { |
606 | prefix ="->" ;multiday = 1; | 606 | prefix ="->" ;multiday = 1; |
607 | } else if (mDate == event->dtEnd().date()) { | 607 | } else if (mDate == event->dtEnd().date()) { |
608 | prefix ="<-" ;multiday = 3; | 608 | prefix ="<-" ;multiday = 3; |
609 | } | 609 | } |
610 | } | 610 | } |
611 | if ( !event->doesFloat() ) { | 611 | if ( !event->doesFloat() ) { |
612 | if ( mDate == event->dtStart().date () ) | 612 | if ( mDate == event->dtStart().date () ) |
613 | time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; | 613 | time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; |
614 | else if ( mDate == event->dtEnd().date () ) | 614 | else if ( mDate == event->dtEnd().date () ) |
615 | time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; | 615 | time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; |
616 | 616 | ||
617 | } | 617 | } |
618 | text = time + event->summary(); | 618 | text = time + event->summary(); |
619 | mToolTipText += prefix + text; | 619 | mToolTipText += prefix + text; |
620 | } else { | 620 | } else { |
621 | if (event->doesFloat()) { | 621 | if (event->doesFloat()) { |
622 | text = event->summary(); | 622 | text = event->summary(); |
623 | mToolTipText += text; | 623 | mToolTipText += text; |
624 | } | 624 | } |
625 | else { | 625 | else { |
626 | text = KGlobal::locale()->formatTime(event->dtStart().time()); | 626 | text = KGlobal::locale()->formatTime(event->dtStart().time()); |
627 | text += " " + event->summary(); | 627 | text += " " + event->summary(); |
628 | mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); | 628 | mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); |
629 | } | 629 | } |
630 | } | 630 | } |
631 | MonthViewItem *item ; | 631 | MonthViewItem *item ; |
632 | if ( mCurrentAvailItem ) { | 632 | if ( mCurrentAvailItem ) { |
633 | item = mCurrentAvailItem; | 633 | item = mCurrentAvailItem; |
634 | mCurrentAvailItem = (MonthViewItem*) item->next(); | 634 | mCurrentAvailItem = (MonthViewItem*) item->next(); |
635 | item->recycle( event, mDate, text ); | 635 | item->recycle( event, mDate, text ); |
636 | } else { | 636 | } else { |
637 | if ( mAvailItemList.count() ) { | 637 | if ( mAvailItemList.count() ) { |
638 | item = mAvailItemList.first(); | 638 | item = mAvailItemList.first(); |
639 | mAvailItemList.remove( item ); | 639 | mAvailItemList.remove( item ); |
640 | item->recycle( event, mDate, text ); | 640 | item->recycle( event, mDate, text ); |
641 | insertNewItem = true; | 641 | insertNewItem = true; |
642 | } else { | 642 | } else { |
643 | insertNewItem = true; | 643 | insertNewItem = true; |
644 | item = new MonthViewItem( event, mDate, text ); | 644 | item = new MonthViewItem( event, mDate, text ); |
645 | } | 645 | } |
646 | } | 646 | } |
647 | QPalette pal; | 647 | QPalette pal; |
648 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { | 648 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { |
649 | QStringList categories = event->categories(); | 649 | QStringList categories = event->categories(); |
650 | QString cat = categories.first(); | 650 | QString cat = categories.first(); |
651 | if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { | 651 | if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { |
652 | pal = getPalette(); | 652 | pal = getPalette(); |
653 | if (cat.isEmpty()) { | 653 | if (cat.isEmpty()) { |
654 | pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); | 654 | pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); |
655 | } else { | 655 | } else { |
656 | pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); | 656 | pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); |
657 | } | 657 | } |
658 | 658 | ||
659 | } else { | 659 | } else { |
660 | if (cat.isEmpty()) { | 660 | if (cat.isEmpty()) { |
661 | pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); | 661 | pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); |
662 | } else { | 662 | } else { |
663 | pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); | 663 | pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); |
664 | } | 664 | } |
665 | } | 665 | } |
666 | 666 | ||
667 | } else { | 667 | } else { |
668 | pal = mStandardPalette ; | 668 | pal = mStandardPalette ; |
669 | } | 669 | } |
670 | item->setPalette( pal ); | 670 | item->setPalette( pal ); |
671 | item->setRecur( event->recurrence()->doesRecur() ); | 671 | item->setRecur( event->recurrence()->doesRecur() ); |
672 | item->setAlarm( event->isAlarmEnabled() && multiday < 2 ); | 672 | item->setAlarm( event->isAlarmEnabled() && multiday < 2 ); |
673 | item->setMoreInfo( event->description().length() > 0 ); | 673 | item->setMoreInfo( event->description().length() > 0 ); |
674 | #ifdef DESKTOP_VERSION | 674 | #ifdef DESKTOP_VERSION |
675 | Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, | 675 | Attendee *me = event->attendeeByMails(KOPrefs::instance()->mAdditionalMails, |
676 | KOPrefs::instance()->email()); | 676 | KOPrefs::instance()->email()); |
677 | if ( me != 0 ) { | 677 | if ( me != 0 ) { |
678 | if ( me->status() == Attendee::NeedsAction && me->RSVP()) | 678 | if ( me->status() == Attendee::NeedsAction && me->RSVP()) |
679 | item->setReply(true && multiday < 2); | 679 | item->setReply(true && multiday < 2); |
680 | else | 680 | else |
681 | item->setReply(false); | 681 | item->setReply(false); |
682 | } else | 682 | } else |
683 | item->setReply(false); | 683 | item->setReply(false); |
684 | #endif | 684 | #endif |
685 | item->setMultiDay( multiday ); | 685 | item->setMultiDay( multiday ); |
686 | if ( insertNewItem) | 686 | if ( insertNewItem) |
687 | insertItem( item ); | 687 | insertItem( item ); |
688 | mToolTip.append( mToolTipText ); | 688 | mToolTip.append( mToolTipText ); |
689 | } | 689 | } |
690 | void MonthViewCell::insertTodo(Todo *todo) | 690 | void MonthViewCell::insertTodo(Todo *todo) |
691 | { | 691 | { |
692 | bool insertNewItem = false; | 692 | bool insertNewItem = false; |
693 | setFocusPolicy(WheelFocus); | 693 | setFocusPolicy(WheelFocus); |
694 | QString text; | 694 | QString text; |
695 | if (todo->hasDueDate()) { | 695 | if (todo->hasDueDate()) { |
696 | if (!todo->doesFloat()) { | 696 | if (!todo->doesFloat()) { |
697 | text += KGlobal::locale()->formatTime(todo->dtDue().time()); | 697 | text += KGlobal::locale()->formatTime(todo->dtDue().time()); |
698 | text += " "; | 698 | text += " "; |
699 | } | 699 | } |
700 | } | 700 | } |
701 | text += todo->summary(); | 701 | text += todo->summary(); |
702 | MonthViewItem *item ; | 702 | MonthViewItem *item ; |
703 | if ( mCurrentAvailItem ) { | 703 | if ( mCurrentAvailItem ) { |
704 | item = mCurrentAvailItem; | 704 | item = mCurrentAvailItem; |
705 | mCurrentAvailItem = (MonthViewItem*) item->next(); | 705 | mCurrentAvailItem = (MonthViewItem*) item->next(); |
706 | item->recycle( todo, mDate, text ); | 706 | item->recycle( todo, mDate, text ); |
707 | } else { | 707 | } else { |
708 | if ( mAvailItemList.count() ) { | 708 | if ( mAvailItemList.count() ) { |
709 | item = mAvailItemList.first(); | 709 | item = mAvailItemList.first(); |
710 | mAvailItemList.remove( item ); | 710 | mAvailItemList.remove( item ); |
711 | item->recycle( todo, mDate, text ); | 711 | item->recycle( todo, mDate, text ); |
712 | insertNewItem = true; | 712 | insertNewItem = true; |
713 | } else { | 713 | } else { |
714 | insertNewItem = true; | 714 | insertNewItem = true; |
715 | item = new MonthViewItem( todo, mDate, text ); | 715 | item = new MonthViewItem( todo, mDate, text ); |
716 | } | 716 | } |
717 | } | 717 | } |
718 | //MonthViewItem *item = new MonthViewItem( todo, mDate, text ); | 718 | //MonthViewItem *item = new MonthViewItem( todo, mDate, text ); |
719 | //item->setPalette( mStandardPalette ); | 719 | //item->setPalette( mStandardPalette ); |
720 | QPalette pal; | 720 | QPalette pal; |
721 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { | 721 | if (KOPrefs::instance()->mMonthViewUsesCategoryColor) { |
722 | QStringList categories = todo->categories(); | 722 | QStringList categories = todo->categories(); |
723 | QString cat = categories.first(); | 723 | QString cat = categories.first(); |
724 | if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { | 724 | if ( KOPrefs::instance()->mMonthViewUsesForegroundColor ) { |
725 | pal = getPalette(); | 725 | pal = getPalette(); |
726 | if (cat.isEmpty()) { | 726 | if (cat.isEmpty()) { |
727 | pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); | 727 | pal.setColor(QColorGroup::Foreground,KOPrefs::instance()->mEventColor); |
728 | } else { | 728 | } else { |
729 | pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); | 729 | pal.setColor(QColorGroup::Foreground, *(KOPrefs::instance()->categoryColor(cat))); |
730 | } | 730 | } |
731 | 731 | ||
732 | } else { | 732 | } else { |
733 | if (cat.isEmpty()) { | 733 | if (cat.isEmpty()) { |
734 | pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); | 734 | pal = QPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor); |
735 | } else { | 735 | } else { |
736 | pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); | 736 | pal = QPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat))); |
737 | } | 737 | } |
738 | } | 738 | } |
739 | 739 | ||
740 | } else { | 740 | } else { |
741 | pal = mStandardPalette ; | 741 | pal = mStandardPalette ; |
742 | } | 742 | } |
743 | item->setPalette( pal ); | 743 | item->setPalette( pal ); |
744 | item->setRecur( todo->recurrence()->doesRecur() ); | 744 | item->setRecur( todo->recurrence()->doesRecur() ); |
745 | item->setAlarm( todo->isAlarmEnabled() ); | 745 | item->setAlarm( todo->isAlarmEnabled() ); |
746 | item->setMoreInfo( todo->description().length() > 0 ); | 746 | item->setMoreInfo( todo->description().length() > 0 ); |
747 | if ( insertNewItem) | 747 | if ( insertNewItem) |
748 | insertItem( item ); | 748 | insertItem( item ); |
749 | mToolTip.append( text ); | 749 | mToolTip.append( text ); |
750 | } | 750 | } |
751 | void MonthViewCell::repaintfinishUpdateCell() | 751 | void MonthViewCell::repaintfinishUpdateCell() |
752 | { | 752 | { |
753 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); | 753 | MonthViewItem *mitem = (MonthViewItem*) firstItem (); |
754 | while ( mitem ) { | 754 | while ( mitem ) { |
755 | mitem->setBlockRepaint( false ); | 755 | mitem->setBlockRepaint( false ); |
756 | updateItem ( mitem ); | 756 | updateItem ( mitem ); |
757 | mitem = (MonthViewItem *)mitem->next(); | 757 | mitem = (MonthViewItem *)mitem->next(); |
758 | } | 758 | } |
759 | } | 759 | } |
760 | void MonthViewCell::finishUpdateCell() | 760 | void MonthViewCell::finishUpdateCell() |
761 | { | 761 | { |
762 | while ( mCurrentAvailItem ) { | 762 | while ( mCurrentAvailItem ) { |
763 | MonthViewItem *item = mCurrentAvailItem; | 763 | MonthViewItem *item = mCurrentAvailItem; |
764 | mCurrentAvailItem = (MonthViewItem *)item->next(); | 764 | mCurrentAvailItem = (MonthViewItem *)item->next(); |
765 | mAvailItemList.append( item ); | 765 | mAvailItemList.append( item ); |
766 | takeItem ( item ); | 766 | takeItem ( item ); |
767 | } | 767 | } |
768 | 768 | ||
769 | 769 | ||
770 | #ifdef DESKTOP_VERSION | 770 | #ifdef DESKTOP_VERSION |
771 | if (mToolTip.count() > 0 ) { | 771 | if (mToolTip.count() > 0 ) { |
772 | mToolTip.sort(); | 772 | mToolTip.sort(); |
773 | QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),""); | 773 | QToolTip::add(this,mToolTip.join("\n"),toolTipGroup(),""); |
774 | } | 774 | } |
775 | #endif | 775 | #endif |
776 | sort(); | 776 | sort(); |
777 | //setMyPalette(); | 777 | //setMyPalette(); |
778 | setMyPalette(); | 778 | setMyPalette(); |
779 | 779 | ||
780 | resizeEvent( 0 ); | 780 | resizeEvent( 0 ); |
781 | 781 | ||
782 | } | 782 | } |
783 | void MonthViewCell::updateCell() | 783 | void MonthViewCell::updateCell() |
784 | { | 784 | { |
785 | //qDebug("MonthViewCell::updateCell() "); | 785 | //qDebug("MonthViewCell::updateCell() "); |
786 | if ( !mMonthView->isUpdatePossible() ) | 786 | if ( !mMonthView->isUpdatePossible() ) |
787 | return; | 787 | return; |
788 | startUpdateCell(); | 788 | startUpdateCell(); |
789 | //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); | 789 | //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); |
790 | QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); | 790 | QPtrList<Event> events = mMonthView->calendar()->events( mDate, true ); |
791 | Event *event; | 791 | Event *event; |
792 | for( event = events.first(); event; event = events.next() ) { // for event | 792 | for( event = events.first(); event; event = events.next() ) { // for event |
793 | insertEvent(event); | 793 | insertEvent(event); |
794 | } | 794 | } |
795 | // insert due todos | 795 | // insert due todos |
796 | QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); | 796 | QPtrList<Todo> todos = mMonthView->calendar()->todos( mDate ); |
797 | Todo *todo; | 797 | Todo *todo; |
798 | for(todo = todos.first(); todo; todo = todos.next()) { | 798 | for(todo = todos.first(); todo; todo = todos.next()) { |
799 | insertTodo( todo ); | 799 | insertTodo( todo ); |
800 | } | 800 | } |
801 | finishUpdateCell(); | 801 | finishUpdateCell(); |
802 | // if ( isVisible()) | 802 | // if ( isVisible()) |
803 | //qApp->processEvents(); | 803 | //qApp->processEvents(); |
804 | } | 804 | } |
805 | 805 | ||
806 | void MonthViewCell::updateConfig( bool bigFont ) // = false | 806 | void MonthViewCell::updateConfig( bool bigFont ) // = false |
807 | { | 807 | { |
808 | 808 | ||
809 | if ( bigFont ) { | 809 | if ( bigFont ) { |
810 | QFont fo = KOPrefs::instance()->mMonthViewFont; | 810 | QFont fo = KOPrefs::instance()->mMonthViewFont; |
811 | int ps = fo.pointSize() + 2; | 811 | int ps = fo.pointSize() + 2; |
812 | if ( ps < 18 ) | 812 | if ( ps < 18 ) |
813 | ps += 2; | 813 | ps += 2; |
814 | fo.setPointSize( ps ); | 814 | fo.setPointSize( ps ); |
815 | setFont( fo ); | 815 | setFont( fo ); |
816 | } else | 816 | } else |
817 | setFont( KOPrefs::instance()->mMonthViewFont ); | 817 | setFont( KOPrefs::instance()->mMonthViewFont ); |
818 | 818 | ||
819 | QFontMetrics fm( font() ); | 819 | QFontMetrics fm( font() ); |
820 | mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); | 820 | mLabelSize = fm.size( 0, "30" ) + QSize( 4, 2 ); |
821 | mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); | 821 | mLabelBigSize = fm.size( 0, "Mag 30" ) + QSize( 2, 2 ); |
822 | mHolidayPalette = mStandardPalette; | 822 | mHolidayPalette = mStandardPalette; |
823 | mPrimaryPalette = mStandardPalette; | 823 | mPrimaryPalette = mStandardPalette; |
824 | mNonPrimaryPalette = mStandardPalette; | 824 | mNonPrimaryPalette = mStandardPalette; |
825 | if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { | 825 | if ( KOPrefs::instance()->mMonthViewUsesDayColors ) { |
826 | mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); | 826 | mHolidayPalette.setColor(QColorGroup::Base, KOPrefs::instance()->mMonthViewHolidayColor ); |
827 | mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); | 827 | mHolidayPalette.setColor(QColorGroup::Background, KOPrefs::instance()->mMonthViewHolidayColor ); |
828 | mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); | 828 | mHolidayPalette.setColor(QColorGroup::Foreground, KOPrefs::instance()->mMonthViewHolidayColor.dark()); |
829 | mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); | 829 | mPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewOddColor.dark()); |
830 | mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); | 830 | mPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewOddColor); |
831 | mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); | 831 | mPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewOddColor); |
832 | mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); | 832 | mNonPrimaryPalette.setColor(QColorGroup::Foreground,KOPrefs::instance()->mMonthViewEvenColor.dark()); |
833 | mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); | 833 | mNonPrimaryPalette.setColor(QColorGroup::Base,KOPrefs::instance()->mMonthViewEvenColor); |
834 | mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); | 834 | mNonPrimaryPalette.setColor(QColorGroup::Background,KOPrefs::instance()->mMonthViewEvenColor); |
835 | } | 835 | } |
836 | //updateCell(); | 836 | //updateCell(); |
837 | } | 837 | } |
838 | 838 | ||
839 | void MonthViewCell::enableScrollBars( bool enabled ) | 839 | void MonthViewCell::enableScrollBars( bool enabled ) |
840 | { | 840 | { |
841 | if ( enabled ) { | 841 | if ( enabled ) { |
842 | QListBoxItem *fi = firstItem (); | 842 | QListBoxItem *fi = firstItem (); |
843 | if (fi ) { | 843 | if (fi ) { |
844 | int ihei = fi->height( this ); | 844 | int ihei = fi->height( this ); |
845 | int hei = numRows () * ihei; | 845 | int hei = numRows () * ihei; |
846 | if ( hei < height() - horizontalScrollBar()->height () ) { | 846 | if ( hei < height() - horizontalScrollBar()->height () ) { |
847 | setVScrollBarMode(QScrollView::AlwaysOff); | 847 | setVScrollBarMode(QScrollView::AlwaysOff); |
848 | } | 848 | } |
849 | else | 849 | else |
850 | setVScrollBarMode(QScrollView::Auto); | 850 | setVScrollBarMode(QScrollView::Auto); |
851 | if ( ihei *3 > height() ) | 851 | if ( ihei *3 > height() ) |
852 | setHScrollBarMode(QScrollView::AlwaysOff); | 852 | setHScrollBarMode(QScrollView::AlwaysOff); |
853 | else | 853 | else |
854 | setHScrollBarMode(QScrollView::Auto); | 854 | setHScrollBarMode(QScrollView::Auto); |
855 | } else { | 855 | } else { |
856 | setVScrollBarMode(QScrollView::Auto); | 856 | setVScrollBarMode(QScrollView::Auto); |
857 | setHScrollBarMode(QScrollView::Auto); | 857 | setHScrollBarMode(QScrollView::Auto); |
858 | } | 858 | } |
859 | } else { | 859 | } else { |
860 | setVScrollBarMode(QScrollView::AlwaysOff); | 860 | setVScrollBarMode(QScrollView::AlwaysOff); |
861 | setHScrollBarMode(QScrollView::AlwaysOff); | 861 | setHScrollBarMode(QScrollView::AlwaysOff); |
862 | } | 862 | } |
863 | } | 863 | } |
864 | 864 | ||
865 | Incidence *MonthViewCell::selectedIncidence() | 865 | Incidence *MonthViewCell::selectedIncidence() |
866 | { | 866 | { |
867 | int index = currentItem(); | 867 | int index = currentItem(); |
868 | if ( index < 0 ) return 0; | 868 | if ( index < 0 ) return 0; |
869 | 869 | ||
870 | MonthViewItem *mitem = | 870 | MonthViewItem *mitem = |
871 | static_cast<MonthViewItem *>( item( index ) ); | 871 | static_cast<MonthViewItem *>( item( index ) ); |
872 | 872 | ||
873 | if ( !mitem ) return 0; | 873 | if ( !mitem ) return 0; |
874 | 874 | ||
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 |
1131 | mWidStack->raiseWidget( mMonthView ); | 1132 | mWidStack->raiseWidget( mMonthView ); |
1132 | #endif | 1133 | #endif |
1133 | 1134 | ||
1134 | emit incidenceSelected( 0 ); | 1135 | emit incidenceSelected( 0 ); |
1135 | 1136 | ||
1136 | mComputeLayoutTimer = new QTimer( this ); | 1137 | mComputeLayoutTimer = new QTimer( this ); |
1137 | connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout())); | 1138 | connect (mComputeLayoutTimer ,SIGNAL(timeout()), this, SLOT ( slotComputeLayout())); |
1138 | 1139 | ||
1139 | 1140 | ||
1140 | #ifndef DESKTOP_VERSION | 1141 | #ifndef DESKTOP_VERSION |
1141 | resize( QApplication::desktop()->size() ); | 1142 | resize( QApplication::desktop()->size() ); |
1142 | #else | 1143 | #else |
1143 | resize(640, 480 ); | 1144 | resize(640, 480 ); |
1144 | updatePossible = true; | 1145 | updatePossible = true; |
1145 | #endif | 1146 | #endif |
1146 | computeLayout(); | 1147 | computeLayout(); |
1147 | 1148 | ||
1148 | if ( mShowWeekView ) | 1149 | if ( mShowWeekView ) |
1149 | mWidStack->raiseWidget( mWeekView ); | 1150 | mWidStack->raiseWidget( mWeekView ); |
1150 | else | 1151 | else |
1151 | mWidStack->raiseWidget( mMonthView ); | 1152 | mWidStack->raiseWidget( mMonthView ); |
1152 | } | 1153 | } |
1153 | 1154 | ||
1154 | KOMonthView::~KOMonthView() | 1155 | KOMonthView::~KOMonthView() |
1155 | { | 1156 | { |
1156 | delete mContextMenu; | 1157 | delete mContextMenu; |
1157 | } | 1158 | } |
1158 | 1159 | ||
1159 | void KOMonthView::selectInternalWeekNum ( int n ) | 1160 | void KOMonthView::selectInternalWeekNum ( int n ) |
1160 | { | 1161 | { |
1161 | switchView(); | 1162 | switchView(); |
1162 | if ( !KOPrefs::instance()->mMonthViewWeek ) | 1163 | if ( !KOPrefs::instance()->mMonthViewWeek ) |
1163 | emit selectMonth (); | 1164 | emit selectMonth (); |
1164 | else | 1165 | else |
1165 | emit selectWeekNum ( n ); | 1166 | emit selectWeekNum ( n ); |
1166 | } | 1167 | } |
1167 | 1168 | ||
1168 | int KOMonthView::currentWeek() | 1169 | int KOMonthView::currentWeek() |
1169 | { | 1170 | { |
1170 | if ( mShowWeekView ) | 1171 | if ( mShowWeekView ) |
1171 | return mWeekLabelsW[0]->getWeekNum(); | 1172 | return mWeekLabelsW[0]->getWeekNum(); |
1172 | return mWeekLabels[0]->getWeekNum(); | 1173 | return mWeekLabels[0]->getWeekNum(); |
1173 | } | 1174 | } |
1174 | void KOMonthView::switchView() | 1175 | void KOMonthView::switchView() |
1175 | { | 1176 | { |
1176 | if ( selectedCell( ) ) | 1177 | if ( selectedCell( ) ) |
1177 | selectedCell()->deselect(); | 1178 | selectedCell()->deselect(); |
1178 | mShowWeekView = !mShowWeekView; | 1179 | mShowWeekView = !mShowWeekView; |
1179 | KOPrefs::instance()->mMonthViewWeek = mShowWeekView; | 1180 | KOPrefs::instance()->mMonthViewWeek = mShowWeekView; |
1180 | if ( clPending ) { | 1181 | if ( clPending ) { |
1181 | computeLayout(); | 1182 | computeLayout(); |
1182 | updateConfig(); | 1183 | updateConfig(); |
1183 | } | 1184 | } |
1184 | if ( mShowWeekView ) | 1185 | if ( mShowWeekView ) |
1185 | mWidStack->raiseWidget( mWeekView ); | 1186 | mWidStack->raiseWidget( mWeekView ); |
1186 | else | 1187 | else |
1187 | mWidStack->raiseWidget( mMonthView ); | 1188 | mWidStack->raiseWidget( mMonthView ); |
1188 | clPending = false; | 1189 | clPending = false; |
1189 | } | 1190 | } |
1190 | 1191 | ||
1191 | int KOMonthView::maxDatesHint() | 1192 | int KOMonthView::maxDatesHint() |
1192 | { | 1193 | { |
1193 | return mNumCells; | 1194 | return mNumCells; |
1194 | } | 1195 | } |
1195 | 1196 | ||
1196 | int KOMonthView::currentDateCount() | 1197 | int KOMonthView::currentDateCount() |
1197 | { | 1198 | { |
1198 | return mNumCells; | 1199 | return mNumCells; |
1199 | } | 1200 | } |
1200 | 1201 | ||
1201 | QPtrList<Incidence> KOMonthView::selectedIncidences() | 1202 | QPtrList<Incidence> KOMonthView::selectedIncidences() |
1202 | { | 1203 | { |
1203 | QPtrList<Incidence> selected; | 1204 | QPtrList<Incidence> selected; |
1204 | 1205 | ||
1205 | if ( mSelectedCell ) { | 1206 | if ( mSelectedCell ) { |
1206 | Incidence *incidence = mSelectedCell->selectedIncidence(); | 1207 | Incidence *incidence = mSelectedCell->selectedIncidence(); |
1207 | if ( incidence ) selected.append( incidence ); | 1208 | if ( incidence ) selected.append( incidence ); |
1208 | } | 1209 | } |
1209 | 1210 | ||
1210 | return selected; | 1211 | return selected; |
1211 | } | 1212 | } |
1212 | 1213 | ||
1213 | DateList KOMonthView::selectedDates() | 1214 | DateList KOMonthView::selectedDates() |
1214 | { | 1215 | { |
1215 | DateList selected; | 1216 | DateList selected; |
1216 | 1217 | ||
1217 | if ( mSelectedCell ) { | 1218 | if ( mSelectedCell ) { |
1218 | QDate qd = mSelectedCell->selectedIncidenceDate(); | 1219 | QDate qd = mSelectedCell->selectedIncidenceDate(); |
1219 | if ( qd.isValid() ) selected.append( qd ); | 1220 | if ( qd.isValid() ) selected.append( qd ); |
1220 | } | 1221 | } |
1221 | 1222 | ||
1222 | return selected; | 1223 | return selected; |
1223 | } | 1224 | } |
1224 | 1225 | ||
1225 | void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, | 1226 | void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, |
1226 | const QDate &td) | 1227 | const QDate &td) |
1227 | { | 1228 | { |
1228 | #ifndef KORG_NOPRINTER | 1229 | #ifndef KORG_NOPRINTER |
1229 | calPrinter->preview(CalPrinter::Month, fd, td); | 1230 | calPrinter->preview(CalPrinter::Month, fd, td); |
1230 | #endif | 1231 | #endif |
1231 | } | 1232 | } |
1232 | 1233 | ||
1233 | void KOMonthView::updateConfig() | 1234 | void KOMonthView::updateConfig() |
1234 | { | 1235 | { |
1235 | 1236 | ||
1236 | int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); | 1237 | int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); |
1237 | 1238 | ||
1238 | if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { | 1239 | if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { |
1239 | mWeekStartsMonday = true; | 1240 | mWeekStartsMonday = true; |
1240 | } | 1241 | } |
1241 | QFontMetrics fontmetric(mDayLabels[0]->font()); | 1242 | QFontMetrics fontmetric(mDayLabels[0]->font()); |
1242 | mWidthLongDayLabel = 0; | 1243 | mWidthLongDayLabel = 0; |
1243 | 1244 | ||
1244 | for (int i = 0; i < 7; i++) { | 1245 | for (int i = 0; i < 7; i++) { |
1245 | int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); | 1246 | int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); |
1246 | if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; | 1247 | if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; |
1247 | } | 1248 | } |
1248 | bool temp = mShowSatSunComp ; | 1249 | bool temp = mShowSatSunComp ; |
1249 | mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; | 1250 | mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; |
1250 | if ( ! mShowWeekView ) { | 1251 | if ( ! mShowWeekView ) { |
1251 | if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) | 1252 | if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) |
1252 | computeLayout(); | 1253 | computeLayout(); |
1253 | } | 1254 | } |
1254 | updateDayLabels(); | 1255 | updateDayLabels(); |
1255 | //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); | 1256 | //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); |
1256 | //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; | 1257 | //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; |
1257 | //resizeEvent( 0 ); | 1258 | //resizeEvent( 0 ); |
1258 | for (uint i = 0; i < mCells.count(); ++i) { | 1259 | for (uint i = 0; i < mCells.count(); ++i) { |
1259 | mCells[i]->updateConfig(); | 1260 | mCells[i]->updateConfig(); |
1260 | } | 1261 | } |
1261 | 1262 | ||
1262 | for (uint i = 0; i < mCellsW.count(); ++i) { | 1263 | for (uint i = 0; i < mCellsW.count(); ++i) { |
1263 | mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont); | 1264 | mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont); |
1264 | } | 1265 | } |
1265 | #ifdef DESKTOP_VERSION | 1266 | #ifdef DESKTOP_VERSION |
1266 | MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); | 1267 | MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); |
1267 | #endif | 1268 | #endif |
1268 | updateView(); | 1269 | updateView(); |
1269 | } | 1270 | } |
1270 | 1271 | ||
1271 | void KOMonthView::updateDayLabels() | 1272 | void KOMonthView::updateDayLabels() |
1272 | { | 1273 | { |
1273 | 1274 | ||
1274 | QPtrVector<QLabel> *mDayLabelsT; | 1275 | QPtrVector<QLabel> *mDayLabelsT; |
1275 | 1276 | ||
1276 | mDayLabelsT = &mDayLabelsW; | 1277 | mDayLabelsT = &mDayLabelsW; |
1277 | for (int i = 0; i < 7; i++) { | 1278 | for (int i = 0; i < 7; i++) { |
1278 | { | 1279 | { |
1279 | bool show = mShortDayLabelsW; | 1280 | bool show = mShortDayLabelsW; |
1280 | if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) | 1281 | if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) |
1281 | show = true; | 1282 | show = true; |
1282 | (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); | 1283 | (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); |
1283 | } | 1284 | } |
1284 | } | 1285 | } |
1285 | mDayLabelsT = &mDayLabels; | 1286 | mDayLabelsT = &mDayLabels; |
1286 | for (int i = 0; i < 7; i++) { | 1287 | for (int i = 0; i < 7; i++) { |
1287 | if (KGlobal::locale()->weekStartsMonday() || KOPrefs::instance()->mMonthViewSatSunTog ) { | 1288 | if (KGlobal::locale()->weekStartsMonday() || KOPrefs::instance()->mMonthViewSatSunTog ) { |
1288 | bool show = mShortDayLabelsM; | 1289 | bool show = mShortDayLabelsM; |
1289 | if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) | 1290 | if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) |
1290 | show = true; | 1291 | show = true; |
1291 | (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); | 1292 | (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); |
1292 | } else { | 1293 | } else { |
1293 | if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM)); | 1294 | if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM)); |
1294 | else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM)); | 1295 | else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM)); |
1295 | 1296 | ||
1296 | } | 1297 | } |
1297 | } | 1298 | } |
1298 | 1299 | ||
1299 | } | 1300 | } |
1300 | 1301 | ||
1301 | void KOMonthView::showDates(const QDate &start, const QDate &) | 1302 | void KOMonthView::showDates(const QDate &start, const QDate &) |
1302 | { | 1303 | { |
1303 | // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; | 1304 | // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; |
1304 | 1305 | ||
1305 | QPtrVector<MonthViewCell> *cells; | 1306 | QPtrVector<MonthViewCell> *cells; |
1306 | QPtrVector<QLabel> *dayLabels; | 1307 | QPtrVector<QLabel> *dayLabels; |
1307 | QPtrVector<KOWeekButton> *weekLabels; | 1308 | QPtrVector<KOWeekButton> *weekLabels; |
1308 | int weekNum = 6; | 1309 | int weekNum = 6; |
1309 | mStartDate = start; | 1310 | mStartDate = start; |
1310 | if ( mShowWeekView ) { | 1311 | if ( mShowWeekView ) { |
1311 | weekNum = 1; | 1312 | weekNum = 1; |
1312 | cells = &mCellsW; | 1313 | cells = &mCellsW; |
1313 | dayLabels = &mDayLabelsW; | 1314 | dayLabels = &mDayLabelsW; |
1314 | weekLabels = &mWeekLabelsW; | 1315 | weekLabels = &mWeekLabelsW; |
1315 | if ( !KGlobal::locale()->weekStartsMonday() ) { | 1316 | if ( !KGlobal::locale()->weekStartsMonday() ) { |
1316 | mStartDate = mStartDate.addDays( 1 ); | 1317 | mStartDate = mStartDate.addDays( 1 ); |
1317 | } | 1318 | } |
1318 | } else { | 1319 | } else { |
1319 | cells = &mCells; | 1320 | cells = &mCells; |
1320 | dayLabels = &mDayLabels; | 1321 | dayLabels = &mDayLabels; |
1321 | weekLabels = &mWeekLabels; | 1322 | weekLabels = &mWeekLabels; |
1322 | } | 1323 | } |
1323 | 1324 | ||
1324 | int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); | 1325 | int mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); |
1325 | 1326 | ||
1326 | if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { | 1327 | if ( mShowWeekView || KOPrefs::instance()->mMonthViewSatSunTog ) { |
1327 | mWeekStartsMonday = true; | 1328 | mWeekStartsMonday = true; |
1328 | } | 1329 | } |
1329 | int startWeekDay = mWeekStartsMonday ? 1 : 7; | 1330 | int startWeekDay = mWeekStartsMonday ? 1 : 7; |
1330 | 1331 | ||
1331 | while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { | 1332 | while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { |
1332 | mStartDate = mStartDate.addDays( -1 ); | 1333 | mStartDate = mStartDate.addDays( -1 ); |
1333 | } | 1334 | } |
1334 | bool primary = false; | 1335 | bool primary = false; |
1335 | uint i; | 1336 | uint i; |
1336 | for( i = 0; i < (*cells).size(); ++i ) { | 1337 | for( i = 0; i < (*cells).size(); ++i ) { |
1337 | QDate date = mStartDate.addDays( i ); | 1338 | QDate date = mStartDate.addDays( i ); |
1338 | (*cells)[i]->setDate( date ); | 1339 | (*cells)[i]->setDate( date ); |
1339 | 1340 | ||
1340 | #ifndef KORG_NOPLUGINS | 1341 | #ifndef KORG_NOPLUGINS |
1341 | // add holiday, if present | 1342 | // add holiday, if present |
1342 | QString hstring(KOCore::self()->holiday(date)); | 1343 | QString hstring(KOCore::self()->holiday(date)); |
1343 | (*cells)[i]->setHoliday( hstring ); | 1344 | (*cells)[i]->setHoliday( hstring ); |
1344 | #endif | 1345 | #endif |
1345 | 1346 | ||
1346 | } | 1347 | } |
1347 | QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); | 1348 | QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); |
1348 | for( i = 0; i < weekNum; ++i ) { | 1349 | for( i = 0; i < weekNum; ++i ) { |
1349 | int wno; | 1350 | int wno; |
1350 | // remember, according to ISO 8601, the first week of the year is the | 1351 | // remember, according to ISO 8601, the first week of the year is the |
1351 | // first week that contains a thursday. Thus we must subtract off 4, | 1352 | // first week that contains a thursday. Thus we must subtract off 4, |
1352 | // not just 1. | 1353 | // not just 1. |
1353 | int dayOfYear = date.dayOfYear(); | 1354 | int dayOfYear = date.dayOfYear(); |
1354 | if (dayOfYear % 7 != 0) | 1355 | if (dayOfYear % 7 != 0) |
1355 | wno = dayOfYear / 7 + 1; | 1356 | wno = dayOfYear / 7 + 1; |
1356 | else | 1357 | else |
1357 | wno =dayOfYear / 7; | 1358 | wno =dayOfYear / 7; |
1358 | (*weekLabels)[i]->setWeekNum( wno ); | 1359 | (*weekLabels)[i]->setWeekNum( wno ); |
1359 | date = date.addDays( 7 ); | 1360 | date = date.addDays( 7 ); |
1360 | } | 1361 | } |
1361 | updateView(); | 1362 | updateView(); |
1362 | } | 1363 | } |
1363 | 1364 | ||
1364 | void KOMonthView::showEvents(QPtrList<Event>) | 1365 | void KOMonthView::showEvents(QPtrList<Event>) |
1365 | { | 1366 | { |
1366 | qDebug("KOMonthView::selectEvents is not implemented yet. "); | 1367 | qDebug("KOMonthView::selectEvents is not implemented yet. "); |
1367 | } | 1368 | } |
1368 | 1369 | ||
1369 | void KOMonthView::changeEventDisplay(Event *, int) | 1370 | void KOMonthView::changeEventDisplay(Event *, int) |
1370 | { | 1371 | { |
1371 | // this should be re-written to be much more efficient, but this | 1372 | // this should be re-written to be much more efficient, but this |
1372 | // quick-and-dirty-hack gets the job done for right now. | 1373 | // quick-and-dirty-hack gets the job done for right now. |
1373 | updateView(); | 1374 | updateView(); |
1374 | } | 1375 | } |
1375 | 1376 | ||
1376 | void KOMonthView::updateView() | 1377 | void KOMonthView::updateView() |
1377 | { | 1378 | { |
1378 | 1379 | ||
1379 | if ( !updatePossible ) | 1380 | if ( !updatePossible ) |
1380 | return; | 1381 | return; |
1381 | //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "); | 1382 | //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "); |
1382 | //QTime ti; | 1383 | //QTime ti; |
1383 | //ti.start(); | 1384 | //ti.start(); |
1384 | clearSelection(); | 1385 | clearSelection(); |
1385 | QPtrVector<MonthViewCell> *cells; | 1386 | QPtrVector<MonthViewCell> *cells; |
1386 | if ( mShowWeekView ) { | 1387 | if ( mShowWeekView ) { |
1387 | cells = &mCellsW; | 1388 | cells = &mCellsW; |
1388 | } else { | 1389 | } else { |
1389 | cells = &mCells; | 1390 | cells = &mCells; |
1390 | } | 1391 | } |
1391 | #if 1 | 1392 | #if 1 |
1392 | int i; | 1393 | int i; |
1393 | int timeSpan = (*cells).size()-1; | 1394 | int timeSpan = (*cells).size()-1; |
1394 | if ( KOPrefs::instance()->mMonthViewWeek ) | 1395 | if ( KOPrefs::instance()->mMonthViewWeek ) |
1395 | timeSpan = 6; | 1396 | timeSpan = 6; |
1396 | for( i = 0; i < timeSpan + 1; ++i ) { | 1397 | for( i = 0; i < timeSpan + 1; ++i ) { |
1397 | (*cells)[i]->startUpdateCell(); | 1398 | (*cells)[i]->startUpdateCell(); |
1398 | } | 1399 | } |
1399 | 1400 | ||
1400 | QPtrList<Event> events = calendar()->events(); | 1401 | QPtrList<Event> events = calendar()->events(); |
1401 | Event *event; | 1402 | Event *event; |
1402 | QDateTime dt; | 1403 | QDateTime dt; |
1403 | bool ok; | 1404 | bool ok; |
1404 | QDate endDate = mStartDate.addDays( timeSpan ); | 1405 | QDate endDate = mStartDate.addDays( timeSpan ); |
1405 | for( event = events.first(); event; event = events.next() ) { // for event | 1406 | for( event = events.first(); event; event = events.next() ) { // for event |
1406 | if ( event->doesRecur() ) { | 1407 | if ( event->doesRecur() ) { |
1407 | bool last; | 1408 | bool last; |
1408 | QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); | 1409 | QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); |
1409 | QDateTime incidenceEnd; | 1410 | QDateTime incidenceEnd; |
1410 | int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); | 1411 | int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); |
1411 | bool invalid = false; | 1412 | bool invalid = false; |
1412 | while( true ) { | 1413 | while( true ) { |
1413 | if ( incidenceStart.isValid() ) { | 1414 | if ( incidenceStart.isValid() ) { |
1414 | incidenceEnd = incidenceStart.addDays( eventlen ); | 1415 | incidenceEnd = incidenceStart.addDays( eventlen ); |
1415 | int st = incidenceStart.date().daysTo( endDate ); | 1416 | int st = incidenceStart.date().daysTo( endDate ); |
1416 | if ( st >= 0 ) { // start before timeend | 1417 | if ( st >= 0 ) { // start before timeend |
1417 | int end = mStartDate.daysTo( incidenceEnd.date() ); | 1418 | int end = mStartDate.daysTo( incidenceEnd.date() ); |
1418 | if ( end >= 0 ) { // end after timestart --- got one! | 1419 | if ( end >= 0 ) { // end after timestart --- got one! |
1419 | //normalize | 1420 | //normalize |
1420 | st = timeSpan - st; | 1421 | st = timeSpan - st; |
1421 | if ( st < 0 ) st = 0; | 1422 | if ( st < 0 ) st = 0; |
1422 | if ( end > timeSpan ) end = timeSpan; | 1423 | if ( end > timeSpan ) end = timeSpan; |
1423 | int iii; | 1424 | int iii; |
1424 | //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); | 1425 | //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); |
1425 | for ( iii = st;iii<= end;++iii) | 1426 | for ( iii = st;iii<= end;++iii) |
1426 | (*cells)[iii]->insertEvent( event ); | 1427 | (*cells)[iii]->insertEvent( event ); |
1427 | } | 1428 | } |
1428 | } | 1429 | } |
1429 | } else { | 1430 | } else { |
1430 | if ( invalid ) | 1431 | if ( invalid ) |
1431 | break; | 1432 | break; |
1432 | invalid = true; | 1433 | invalid = true; |
1433 | //qDebug("invalid %s", event->summary().latin1()); | 1434 | //qDebug("invalid %s", event->summary().latin1()); |
1434 | incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; | 1435 | incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; |
1435 | } | 1436 | } |
1436 | if ( last ) | 1437 | if ( last ) |
1437 | break; | 1438 | break; |
1438 | bool ok; | 1439 | bool ok; |
1439 | incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); | 1440 | incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); |
1440 | if ( ! ok ) | 1441 | if ( ! ok ) |
1441 | break; | 1442 | break; |
1442 | if ( incidenceStart.date() > endDate ) | 1443 | if ( incidenceStart.date() > endDate ) |
1443 | break; | 1444 | break; |
1444 | } | 1445 | } |
1445 | } else { // no recur | 1446 | } else { // no recur |
1446 | int st = event->dtStart().date().daysTo( endDate ); | 1447 | int st = event->dtStart().date().daysTo( endDate ); |
1447 | if ( st >= 0 ) { // start before timeend | 1448 | if ( st >= 0 ) { // start before timeend |
1448 | int end = mStartDate.daysTo( event->dtEnd().date() ); | 1449 | int end = mStartDate.daysTo( event->dtEnd().date() ); |
1449 | if ( end >= 0 ) { // end after timestart --- got one! | 1450 | if ( end >= 0 ) { // end after timestart --- got one! |
1450 | //normalize | 1451 | //normalize |
1451 | st = timeSpan - st; | 1452 | st = timeSpan - st; |
1452 | if ( st < 0 ) st = 0; | 1453 | if ( st < 0 ) st = 0; |
1453 | if ( end > timeSpan ) end = timeSpan; | 1454 | if ( end > timeSpan ) end = timeSpan; |
1454 | int iii; | 1455 | int iii; |
1455 | for ( iii = st;iii<= end;++iii) | 1456 | for ( iii = st;iii<= end;++iii) |
1456 | (*cells)[iii]->insertEvent( event ); | 1457 | (*cells)[iii]->insertEvent( event ); |
1457 | } | 1458 | } |
1458 | } | 1459 | } |
1459 | } | 1460 | } |
1460 | } | 1461 | } |
1461 | // insert due todos | 1462 | // insert due todos |
1462 | QPtrList<Todo> todos = calendar()->todos( ); | 1463 | QPtrList<Todo> todos = calendar()->todos( ); |
1463 | Todo *todo; | 1464 | Todo *todo; |
1464 | for(todo = todos.first(); todo; todo = todos.next()) { | 1465 | for(todo = todos.first(); todo; todo = todos.next()) { |
1465 | //insertTodo( todo ); | 1466 | //insertTodo( todo ); |
1466 | if ( todo->hasDueDate() ) { | 1467 | if ( todo->hasDueDate() ) { |
1467 | int day = mStartDate.daysTo( todo->dtDue().date() ); | 1468 | int day = mStartDate.daysTo( todo->dtDue().date() ); |
1468 | if ( day >= 0 && day < timeSpan + 1) { | 1469 | if ( day >= 0 && day < timeSpan + 1) { |
1469 | (*cells)[day]->insertTodo( todo ); | 1470 | (*cells)[day]->insertTodo( todo ); |
1470 | } | 1471 | } |
1471 | } | 1472 | } |
1472 | } | 1473 | } |
1473 | 1474 | ||
1474 | for( i = 0; i < timeSpan+1; ++i ) { | 1475 | for( i = 0; i < timeSpan+1; ++i ) { |
1475 | (*cells)[i]->finishUpdateCell(); | 1476 | (*cells)[i]->finishUpdateCell(); |
1476 | } | 1477 | } |
1477 | processSelectionChange(); | 1478 | processSelectionChange(); |
1478 | //qApp->processEvents(); | 1479 | //qApp->processEvents(); |
1479 | for( i = 0; i < timeSpan+1; ++i ) { | 1480 | for( i = 0; i < timeSpan+1; ++i ) { |
1480 | (*cells)[i]->repaintfinishUpdateCell(); | 1481 | (*cells)[i]->repaintfinishUpdateCell(); |
1481 | } | 1482 | } |
1482 | setKeyBFocus(); | 1483 | setKeyBFocus(); |
1483 | #else | 1484 | #else |
1484 | // old code | 1485 | // old code |
1485 | //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); | 1486 | //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); |
1486 | int i; | 1487 | int i; |
1487 | for( i = 0; i < (*cells).count(); ++i ) { | 1488 | for( i = 0; i < (*cells).count(); ++i ) { |
1488 | (*cells)[i]->updateCell(); | 1489 | (*cells)[i]->updateCell(); |
1489 | } | 1490 | } |
1490 | 1491 | ||
1491 | //qDebug("KOMonthView::updateView() "); | 1492 | //qDebug("KOMonthView::updateView() "); |
1492 | processSelectionChange(); | 1493 | processSelectionChange(); |
1493 | // qDebug("---------------------------------------------------------------------+ "); | 1494 | // qDebug("---------------------------------------------------------------------+ "); |
1494 | (*cells)[0]->setFocus(); | 1495 | (*cells)[0]->setFocus(); |
1495 | #endif | 1496 | #endif |
1496 | 1497 | ||
1497 | //qDebug("update time %d ", ti.elapsed()); | 1498 | //qDebug("update time %d ", ti.elapsed()); |
1498 | } | 1499 | } |
1499 | 1500 | ||
1500 | void KOMonthView::setKeyBoardFocus() | 1501 | void KOMonthView::setKeyBoardFocus() |
1501 | { | 1502 | { |
1502 | bool shootAgain = false; | 1503 | bool shootAgain = false; |
1503 | if ( mShowWeekView ) { | 1504 | if ( mShowWeekView ) { |
1504 | shootAgain = !mWeekLabelsW[0]->hasFocus(); | 1505 | shootAgain = !mWeekLabelsW[0]->hasFocus(); |
1505 | mWeekLabelsW[0]->setFocus(); | 1506 | mWeekLabelsW[0]->setFocus(); |
1506 | } | 1507 | } |
1507 | else { | 1508 | else { |
1508 | shootAgain = !mWeekLabels[0]->hasFocus(); | 1509 | shootAgain = !mWeekLabels[0]->hasFocus(); |
1509 | mWeekLabels[0]->setFocus(); | 1510 | mWeekLabels[0]->setFocus(); |
1510 | } | 1511 | } |
1511 | if ( shootAgain ) { | 1512 | if ( shootAgain ) { |
1512 | QTimer::singleShot( 0, this, SLOT ( setKeyBFocus() ) ); | 1513 | QTimer::singleShot( 0, this, SLOT ( setKeyBFocus() ) ); |
1513 | } | 1514 | } |
1514 | } | 1515 | } |
1515 | void KOMonthView::setKeyBFocus() | 1516 | void KOMonthView::setKeyBFocus() |
1516 | { | 1517 | { |
1517 | //qDebug("KOMonthView::setKeyBFocus() "); | 1518 | //qDebug("KOMonthView::setKeyBFocus() "); |
1518 | QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) ); | 1519 | QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) ); |
1519 | } | 1520 | } |
1520 | void KOMonthView::resizeEvent(QResizeEvent * e) | 1521 | void KOMonthView::resizeEvent(QResizeEvent * e) |
1521 | { | 1522 | { |
1522 | //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); | 1523 | //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); |
1523 | if ( isVisible() ) { | 1524 | if ( isVisible() ) { |
1524 | //qDebug("KOMonthView::isVisible "); | 1525 | //qDebug("KOMonthView::isVisible "); |
1525 | slotComputeLayout(); | 1526 | slotComputeLayout(); |
1526 | } else | 1527 | } else |
1527 | mComputeLayoutTimer->start( 100 ); | 1528 | mComputeLayoutTimer->start( 100 ); |
1528 | } | 1529 | } |
1529 | 1530 | ||
1530 | void KOMonthView::slotComputeLayout() | 1531 | void KOMonthView::slotComputeLayout() |
1531 | { | 1532 | { |
1532 | mComputeLayoutTimer->stop(); | 1533 | mComputeLayoutTimer->stop(); |
1533 | //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() ); | 1534 | //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() ); |
1534 | computeLayout(); | 1535 | computeLayout(); |
1535 | clPending = true; | 1536 | clPending = true; |
1536 | setKeyBFocus(); | 1537 | setKeyBFocus(); |
1537 | } | 1538 | } |
1538 | void KOMonthView::computeLayoutWeek() | 1539 | void KOMonthView::computeLayoutWeek() |
1539 | { | 1540 | { |
1540 | static int lastWid = 0; | 1541 | static int lastWid = 0; |
1541 | static int lastHei = 0; | 1542 | static int lastHei = 0; |
1542 | int daysToShow; | 1543 | int daysToShow; |
1543 | bool combinedSatSun = false; | 1544 | bool combinedSatSun = false; |
1544 | if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { | 1545 | if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { |
1545 | daysToShow = 6; | 1546 | daysToShow = 6; |
1546 | combinedSatSun = true; | 1547 | combinedSatSun = true; |
1547 | } | 1548 | } |
1548 | int tWid = topLevelWidget()->size().width(); | 1549 | int tWid = topLevelWidget()->size().width(); |
1549 | int tHei = topLevelWidget()->size().height(); | 1550 | int tHei = topLevelWidget()->size().height(); |
1550 | 1551 | ||
1551 | int wid = width();//e | 1552 | int wid = width();//e |
1552 | int hei = height()-1-mNavigatorBar->height(); | 1553 | int hei = height()-1-mNavigatorBar->height(); |
1553 | 1554 | ||
1554 | if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) | 1555 | if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) |
1555 | return; | 1556 | return; |
1556 | 1557 | ||
1557 | if ( lastWid == width() && lastHei == height() ) { | 1558 | if ( lastWid == width() && lastHei == height() ) { |
1558 | //qDebug("KOListWeekView::No compute layout needed "); | 1559 | //qDebug("KOListWeekView::No compute layout needed "); |
1559 | return; | 1560 | return; |
1560 | } | 1561 | } |
1561 | lastWid = width(); | 1562 | lastWid = width(); |
1562 | lastHei = height(); | 1563 | lastHei = height(); |
1563 | 1564 | ||
1564 | 1565 | ||
1565 | if ( wid < hei ) | 1566 | if ( wid < hei ) |
1566 | daysToShow = 2; | 1567 | daysToShow = 2; |
1567 | else | 1568 | else |
1568 | daysToShow = 3; | 1569 | daysToShow = 3; |
1569 | mShowSatSunComp = true; | 1570 | mShowSatSunComp = true; |
1570 | combinedSatSun = true; | 1571 | combinedSatSun = true; |
1571 | 1572 | ||
1572 | //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); | 1573 | //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); |
1573 | QFontMetrics fm ( mWeekLabels[0]->font() ); | 1574 | QFontMetrics fm ( mWeekLabels[0]->font() ); |
1574 | int weeklabelwid = fm.width( "888" ); | 1575 | int weeklabelwid = fm.width( "888" ); |
1575 | wid -= weeklabelwid; | 1576 | wid -= weeklabelwid; |
1576 | 1577 | ||
1577 | int colWid = wid / daysToShow; | 1578 | int colWid = wid / daysToShow; |
1578 | int lastCol = wid - ( colWid*6 ); | 1579 | int lastCol = wid - ( colWid*6 ); |
1579 | int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); | 1580 | int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); |
1580 | int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); | 1581 | int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); |
1581 | int colModulo = wid % daysToShow; | 1582 | int colModulo = wid % daysToShow; |
1582 | int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; | 1583 | int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; |
1583 | //qDebug("rowmod %d ", rowModulo); | 1584 | //qDebug("rowmod %d ", rowModulo); |
1584 | int i; | 1585 | int i; |
1585 | int x,y,w,h; | 1586 | int x,y,w,h; |
1586 | x= 0; | 1587 | x= 0; |
1587 | y= 0; | 1588 | y= 0; |
1588 | w = colWid; | 1589 | w = colWid; |
1589 | h = dayLabelHei ; | 1590 | h = dayLabelHei ; |
1590 | for ( i = 0; i < 7; i++) { | 1591 | for ( i = 0; i < 7; i++) { |
1591 | if ( i && !( i % daysToShow) && i < 6) { | 1592 | if ( i && !( i % daysToShow) && i < 6) { |
1592 | y += hei/(5-daysToShow); | 1593 | y += hei/(5-daysToShow); |
1593 | x = 0; | 1594 | x = 0; |
1594 | w = colWid; | 1595 | w = colWid; |
1595 | } | 1596 | } |
1596 | if ( ((i) % daysToShow) >= daysToShow-colModulo ) { | 1597 | if ( ((i) % daysToShow) >= daysToShow-colModulo ) { |
1597 | ++w; | 1598 | ++w; |
1598 | } | 1599 | } |
1599 | if ( i >= 5 ) { | 1600 | if ( i >= 5 ) { |
1600 | mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); | 1601 | mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); |
1601 | x -= (w/2 ); | 1602 | x -= (w/2 ); |
1602 | } | 1603 | } |
1603 | else | 1604 | else |
1604 | mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w,h); | 1605 | mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w,h); |
1605 | x += w; | 1606 | x += w; |
1606 | } | 1607 | } |
1607 | x= 0; | 1608 | x= 0; |
1608 | y= dayLabelHei; | 1609 | y= dayLabelHei; |
1609 | w = colWid; | 1610 | w = colWid; |
1610 | h = cellHei; | 1611 | h = cellHei; |
1611 | int max = 0; | 1612 | int max = 0; |
1612 | for ( i = 0; i < mCellsW.count(); ++i) { | 1613 | for ( i = 0; i < mCellsW.count(); ++i) { |
1613 | if ( i > 6 ) { | 1614 | if ( i > 6 ) { |
1614 | mCellsW[i]->hide(); | 1615 | mCellsW[i]->hide(); |
1615 | continue; | 1616 | continue; |
1616 | } | 1617 | } |
1617 | 1618 | ||
1618 | w = colWid; | 1619 | w = colWid; |
1619 | if ( ((i) % daysToShow) >= daysToShow-colModulo ) { | 1620 | if ( ((i) % daysToShow) >= daysToShow-colModulo ) { |
1620 | ++w; | 1621 | ++w; |
1621 | } | 1622 | } |
1622 | if ( i == (daysToShow-1-rowModulo)*7) | 1623 | if ( i == (daysToShow-1-rowModulo)*7) |
1623 | ++h; | 1624 | ++h; |
1624 | 1625 | ||
1625 | if ( i >= 5 ) { | 1626 | if ( i >= 5 ) { |
1626 | if ( i ==5 ) { | 1627 | if ( i ==5 ) { |
1627 | max = h/2; | 1628 | max = h/2; |
1628 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); | 1629 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); |
1629 | x -= w ;y += h/2; | 1630 | x -= w ;y += h/2; |
1630 | } else { | 1631 | } else { |
1631 | if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) { | 1632 | if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) { |
1632 | ++w; | 1633 | ++w; |
1633 | } | 1634 | } |
1634 | max = h-h/2; | 1635 | max = h-h/2; |
1635 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); | 1636 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,max ); |
1636 | y -= h/2; | 1637 | y -= h/2; |
1637 | } | 1638 | } |
1638 | } else { | 1639 | } else { |
1639 | max = h; | 1640 | max = h; |
1640 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); | 1641 | mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); |
1641 | } | 1642 | } |
1642 | 1643 | ||
1643 | 1644 | ||
1644 | x += w; | 1645 | x += w; |
1645 | if ( x + w/2 > wid ) { | 1646 | if ( x + w/2 > wid ) { |
1646 | x = 0; | 1647 | x = 0; |
1647 | y += h+dayLabelHei ; | 1648 | y += h+dayLabelHei ; |
1648 | } | 1649 | } |
1649 | //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 ); | 1650 | //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 ); |
1650 | } | 1651 | } |
1651 | y= dayLabelHei; | 1652 | y= dayLabelHei; |
1652 | h = cellHei ; | 1653 | h = cellHei ; |
1653 | mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); | 1654 | mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); |
1654 | mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); | 1655 | mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); |
1655 | // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); | 1656 | // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); |
1656 | //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); | 1657 | //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); |
1657 | mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ; | 1658 | mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ; |
1658 | updateDayLabels(); | 1659 | updateDayLabels(); |
1659 | //bool forceUpdate = !updatePossible; | 1660 | //bool forceUpdate = !updatePossible; |
1660 | updatePossible = true; | 1661 | updatePossible = true; |
1661 | //mWeekLabels[mNumWeeks]->setText( i18n("M")); | 1662 | //mWeekLabels[mNumWeeks]->setText( i18n("M")); |
1662 | //if ( forceUpdate ) | 1663 | //if ( forceUpdate ) |
1663 | // updateView(); | 1664 | // updateView(); |
1664 | } | 1665 | } |
1665 | void KOMonthView::computeLayout() | 1666 | void KOMonthView::computeLayout() |
1666 | { | 1667 | { |
1667 | 1668 | ||
1668 | 1669 | ||
1669 | static int lastWid = 0; | 1670 | static int lastWid = 0; |
1670 | static int lastHei = 0; | 1671 | static int lastHei = 0; |
1671 | 1672 | ||
1672 | if ( mShowWeekView ){ | 1673 | if ( mShowWeekView ){ |
1673 | computeLayoutWeek(); | 1674 | computeLayoutWeek(); |
1674 | return; | 1675 | return; |
1675 | } | 1676 | } |
1676 | int daysToShow = 7; | 1677 | int daysToShow = 7; |
1677 | bool combinedSatSun = false; | 1678 | bool combinedSatSun = false; |
1678 | if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { | 1679 | if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { |
1679 | daysToShow = 6; | 1680 | daysToShow = 6; |
1680 | combinedSatSun = true; | 1681 | combinedSatSun = true; |
1681 | } | 1682 | } |
1682 | int tWid = topLevelWidget()->size().width(); | 1683 | int tWid = topLevelWidget()->size().width(); |
1683 | int tHei = topLevelWidget()->size().height(); | 1684 | int tHei = topLevelWidget()->size().height(); |
1684 | 1685 | ||
1685 | int wid = width();//e | 1686 | int wid = width();//e |
1686 | int hei = height()-1-mNavigatorBar->height(); | 1687 | int hei = height()-1-mNavigatorBar->height(); |
1687 | 1688 | ||
1688 | if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) { | 1689 | if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) { |
1689 | return; | 1690 | return; |
1690 | } | 1691 | } |
1691 | if ( lastWid == width() && lastHei == height() ){ | 1692 | if ( lastWid == width() && lastHei == height() ){ |
1692 | //qDebug("KOMonthview::No compute layout needed "); | 1693 | //qDebug("KOMonthview::No compute layout needed "); |
1693 | return; | 1694 | return; |
1694 | } | 1695 | } |
1695 | 1696 | ||
1696 | lastWid = width(); | 1697 | lastWid = width(); |
1697 | lastHei = height(); | 1698 | lastHei = height(); |
1698 | //qDebug("KOMonthView::computeLayout() MMM ------------------- "); | 1699 | //qDebug("KOMonthView::computeLayout() MMM ------------------- "); |
1699 | QFontMetrics fm ( mWeekLabels[0]->font() ); | 1700 | QFontMetrics fm ( mWeekLabels[0]->font() ); |
1700 | int weeklabelwid = fm.width( "888" ); | 1701 | int weeklabelwid = fm.width( "888" ); |
1701 | wid -= weeklabelwid; | 1702 | wid -= weeklabelwid; |
1702 | 1703 | ||
1703 | int colWid = wid / daysToShow; | 1704 | int colWid = wid / daysToShow; |
1704 | int lastCol = wid - ( colWid*6 ); | 1705 | int lastCol = wid - ( colWid*6 ); |
1705 | int dayLabelHei = mDayLabels[0]->sizeHint().height(); | 1706 | int dayLabelHei = mDayLabels[0]->sizeHint().height(); |
1706 | int cellHei = (hei - dayLabelHei) /6; | 1707 | int cellHei = (hei - dayLabelHei) /6; |
1707 | int colModulo = wid % daysToShow; | 1708 | int colModulo = wid % daysToShow; |
1708 | int rowModulo = (hei- dayLabelHei) % 6; | 1709 | int rowModulo = (hei- dayLabelHei) % 6; |
1709 | //qDebug("rowmod %d ", rowModulo); | 1710 | //qDebug("rowmod %d ", rowModulo); |
1710 | int i; | 1711 | int i; |
1711 | int x,y,w,h; | 1712 | int x,y,w,h; |
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 | |||
@@ -1,320 +1,321 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> |
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 | 19 | ||
20 | #ifndef _KOMONTHVIEW_H | 20 | #ifndef _KOMONTHVIEW_H |
21 | #define _KOMONTHVIEW_H | 21 | #define _KOMONTHVIEW_H |
22 | 22 | ||
23 | #include <qlabel.h> | 23 | #include <qlabel.h> |
24 | #include <qframe.h> | 24 | #include <qframe.h> |
25 | #include <qdatetime.h> | 25 | #include <qdatetime.h> |
26 | #include <qlistbox.h> | 26 | #include <qlistbox.h> |
27 | #include <qpoint.h> | 27 | #include <qpoint.h> |
28 | #include <qwidgetstack.h> | 28 | #include <qwidgetstack.h> |
29 | #include <qlayout.h> | 29 | #include <qlayout.h> |
30 | #include <qtimer.h> | 30 | #include <qtimer.h> |
31 | #include <qintdict.h> | 31 | #include <qintdict.h> |
32 | #include <qpushbutton.h> | 32 | #include <qpushbutton.h> |
33 | #include <qvaluelist.h> | 33 | #include <qvaluelist.h> |
34 | #include <qptrvector.h> | 34 | #include <qptrvector.h> |
35 | 35 | ||
36 | #include <libkcal/calendar.h> | 36 | #include <libkcal/calendar.h> |
37 | #include <libkcal/event.h> | 37 | #include <libkcal/event.h> |
38 | 38 | ||
39 | #include "koeventview.h" | 39 | #include "koeventview.h" |
40 | #include "navigatorbar.h" | 40 | #include "navigatorbar.h" |
41 | 41 | ||
42 | #ifdef DESKTOP_VERSION | 42 | #ifdef DESKTOP_VERSION |
43 | class QToolTipGroup; | 43 | class QToolTipGroup; |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | class KNOWhatsThis; | 46 | class KNOWhatsThis; |
47 | class KOWeekButton : public QPushButton | 47 | class KOWeekButton : public QPushButton |
48 | { | 48 | { |
49 | Q_OBJECT | 49 | Q_OBJECT |
50 | public: | 50 | public: |
51 | KOWeekButton( QWidget *parent=0, const char *name=0 ) : | 51 | KOWeekButton( QWidget *parent=0, const char *name=0 ) : |
52 | QPushButton( parent, name) | 52 | QPushButton( parent, name) |
53 | { | 53 | { |
54 | connect( this, SIGNAL( clicked() ), | 54 | connect( this, SIGNAL( clicked() ), |
55 | SLOT( bottonClicked() )); | 55 | SLOT( bottonClicked() )); |
56 | mNumber = -1; | 56 | mNumber = -1; |
57 | } | 57 | } |
58 | void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));} | 58 | void setWeekNum ( int num ) {mNumber = num; setText( QString::number ( num ));} |
59 | int getWeekNum() { return mNumber;} | 59 | int getWeekNum() { return mNumber;} |
60 | signals: | 60 | signals: |
61 | void selectWeekNum ( int ); | 61 | void selectWeekNum ( int ); |
62 | private: | 62 | private: |
63 | int mNumber; | 63 | int mNumber; |
64 | void keyPressEvent ( QKeyEvent * e ) | 64 | void keyPressEvent ( QKeyEvent * e ) |
65 | { | 65 | { |
66 | e->ignore(); | 66 | e->ignore(); |
67 | } | 67 | } |
68 | 68 | ||
69 | private slots : | 69 | private slots : |
70 | void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); } | 70 | void bottonClicked() { if ( mNumber > 0 ) emit selectWeekNum ( mNumber ); } |
71 | }; | 71 | }; |
72 | 72 | ||
73 | class KNoScrollListBox: public QListBox | 73 | class KNoScrollListBox: public QListBox |
74 | { | 74 | { |
75 | Q_OBJECT | 75 | Q_OBJECT |
76 | public: | 76 | public: |
77 | KNoScrollListBox(QWidget *parent=0, const char *name=0); | 77 | KNoScrollListBox(QWidget *parent=0, const char *name=0); |
78 | ~KNoScrollListBox(); | 78 | ~KNoScrollListBox(); |
79 | QString getWhatsThisText(QPoint p) ; | 79 | QString getWhatsThisText(QPoint p) ; |
80 | 80 | ||
81 | signals: | 81 | signals: |
82 | void shiftDown(); | 82 | void shiftDown(); |
83 | void shiftUp(); | 83 | void shiftUp(); |
84 | void rightClick(); | 84 | void rightClick(); |
85 | 85 | ||
86 | protected slots: | 86 | protected slots: |
87 | void oneDown(); | 87 | void oneDown(); |
88 | void keyPressEvent(QKeyEvent *); | 88 | void keyPressEvent(QKeyEvent *); |
89 | void keyReleaseEvent(QKeyEvent *); | 89 | void keyReleaseEvent(QKeyEvent *); |
90 | void mousePressEvent(QMouseEvent *); | 90 | void mousePressEvent(QMouseEvent *); |
91 | 91 | ||
92 | private: | 92 | private: |
93 | KNOWhatsThis * mWT; | 93 | KNOWhatsThis * mWT; |
94 | }; | 94 | }; |
95 | 95 | ||
96 | 96 | ||
97 | class MonthViewItem: public QListBoxItem | 97 | class MonthViewItem: public QListBoxItem |
98 | { | 98 | { |
99 | public: | 99 | public: |
100 | MonthViewItem( Incidence *, QDate qd, const QString & title ); | 100 | MonthViewItem( Incidence *, QDate qd, const QString & title ); |
101 | void recycle( Incidence *incidence, QDate qd, const QString & s); | 101 | void recycle( Incidence *incidence, QDate qd, const QString & s); |
102 | void setRecur(bool on) { mRecur = on; } | 102 | void setRecur(bool on) { mRecur = on; } |
103 | void setAlarm(bool on) { mAlarm = on; } | 103 | void setAlarm(bool on) { mAlarm = on; } |
104 | void setReply(bool on) { mReply = on; } | 104 | void setReply(bool on) { mReply = on; } |
105 | void setMoreInfo(bool on) { mInfo = on; } | 105 | void setMoreInfo(bool on) { mInfo = on; } |
106 | void setMultiDay(int type) { mMultiday = type; } | 106 | void setMultiDay(int type) { mMultiday = type; } |
107 | void setBlockRepaint(bool on) { mblockRepaint = on; } | 107 | void setBlockRepaint(bool on) { mblockRepaint = on; } |
108 | 108 | ||
109 | 109 | ||
110 | void setPalette(const QPalette &p) { mPalette = p; } | 110 | void setPalette(const QPalette &p) { mPalette = p; } |
111 | QPalette palette() const { return mPalette; } | 111 | QPalette palette() const { return mPalette; } |
112 | 112 | ||
113 | Incidence *incidence() const { return mIncidence; } | 113 | Incidence *incidence() const { return mIncidence; } |
114 | QDate incidenceDate() { return mDate; } | 114 | QDate incidenceDate() { return mDate; } |
115 | 115 | ||
116 | protected: | 116 | protected: |
117 | virtual void paint(QPainter *); | 117 | virtual void paint(QPainter *); |
118 | virtual int height(const QListBox *) const; | 118 | virtual int height(const QListBox *) const; |
119 | virtual int width(const QListBox *) const; | 119 | virtual int width(const QListBox *) const; |
120 | 120 | ||
121 | private: | 121 | private: |
122 | bool mblockRepaint; | 122 | bool mblockRepaint; |
123 | int mMultiday; | 123 | int mMultiday; |
124 | bool mRecur; | 124 | bool mRecur; |
125 | bool mAlarm; | 125 | bool mAlarm; |
126 | bool mReply; | 126 | bool mReply; |
127 | bool mInfo; | 127 | bool mInfo; |
128 | 128 | ||
129 | QPalette mPalette; | 129 | QPalette mPalette; |
130 | QDate mDate; | 130 | QDate mDate; |
131 | 131 | ||
132 | Incidence *mIncidence; | 132 | Incidence *mIncidence; |
133 | }; | 133 | }; |
134 | 134 | ||
135 | 135 | ||
136 | class KOMonthView; | 136 | class KOMonthView; |
137 | 137 | ||
138 | class MonthViewCell : public KNoScrollListBox | 138 | class MonthViewCell : public KNoScrollListBox |
139 | { | 139 | { |
140 | Q_OBJECT | 140 | Q_OBJECT |
141 | public: | 141 | public: |
142 | MonthViewCell(KOMonthView *,QWidget* ); | 142 | MonthViewCell(KOMonthView *,QWidget* ); |
143 | ~MonthViewCell() {mAvailItemList.setAutoDelete( true );} | 143 | ~MonthViewCell() {mAvailItemList.setAutoDelete( true );} |
144 | 144 | ||
145 | void setDate( const QDate & ); | 145 | void setDate( const QDate & ); |
146 | QDate date() const; | 146 | QDate date() const; |
147 | 147 | ||
148 | void setPrimary( bool ); | 148 | void setPrimary( bool ); |
149 | bool isPrimary() const; | 149 | bool isPrimary() const; |
150 | 150 | ||
151 | void setHoliday( bool ); | 151 | void setHoliday( bool ); |
152 | void setHoliday( const QString & ); | 152 | void setHoliday( const QString & ); |
153 | 153 | ||
154 | void updateCell(); | 154 | void updateCell(); |
155 | void startUpdateCell(); | 155 | void startUpdateCell(); |
156 | void finishUpdateCell(); | 156 | void finishUpdateCell(); |
157 | void repaintfinishUpdateCell(); | 157 | void repaintfinishUpdateCell(); |
158 | void insertEvent(Event *); | 158 | void insertEvent(Event *); |
159 | void insertTodo(Todo *); | 159 | void insertTodo(Todo *); |
160 | 160 | ||
161 | void updateConfig( bool bigFont = false ); | 161 | void updateConfig( bool bigFont = false ); |
162 | 162 | ||
163 | void enableScrollBars( bool ); | 163 | void enableScrollBars( bool ); |
164 | 164 | ||
165 | Incidence *selectedIncidence(); | 165 | Incidence *selectedIncidence(); |
166 | QDate selectedIncidenceDate(); | 166 | QDate selectedIncidenceDate(); |
167 | QPushButton * dateLabel() { return mLabel; } | 167 | QPushButton * dateLabel() { return mLabel; } |
168 | 168 | ||
169 | void deselect(); | 169 | void deselect(); |
170 | void select(); | 170 | void select(); |
171 | #ifdef DESKTOP_VERSION | 171 | #ifdef DESKTOP_VERSION |
172 | static QToolTipGroup *toolTipGroup(); | 172 | static QToolTipGroup *toolTipGroup(); |
173 | #endif | 173 | #endif |
174 | signals: | 174 | signals: |
175 | void defaultAction( Incidence * ); | 175 | void defaultAction( Incidence * ); |
176 | void newEventSignal( QDateTime ); | 176 | void newEventSignal( QDateTime ); |
177 | void showDaySignal( QDate ); | 177 | void showDaySignal( QDate ); |
178 | 178 | ||
179 | protected: | 179 | protected: |
180 | QStringList mToolTip; | 180 | QStringList mToolTip; |
181 | void resizeEvent( QResizeEvent * ); | 181 | void resizeEvent( QResizeEvent * ); |
182 | 182 | ||
183 | 183 | ||
184 | public slots: | 184 | public slots: |
185 | void showDay(); | 185 | void showDay(); |
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 | |||
@@ -1,1228 +1,1239 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | 2 | ||
3 | #include <qaction.h> | 3 | #include <qaction.h> |
4 | #include <qpopupmenu.h> | 4 | #include <qpopupmenu.h> |
5 | #include <qpainter.h> | 5 | #include <qpainter.h> |
6 | #include <qwhatsthis.h> | 6 | #include <qwhatsthis.h> |
7 | #include <qpushbutton.h> | 7 | #include <qpushbutton.h> |
8 | #include <qmessagebox.h> | 8 | #include <qmessagebox.h> |
9 | #include <qlineedit.h> | 9 | #include <qlineedit.h> |
10 | #include <qtextcodec.h> | 10 | #include <qtextcodec.h> |
11 | #include <qfile.h> | 11 | #include <qfile.h> |
12 | #include <qdir.h> | 12 | #include <qdir.h> |
13 | #include <qapp.h> | 13 | #include <qapp.h> |
14 | #include <qfileinfo.h> | 14 | #include <qfileinfo.h> |
15 | #include <qlabel.h> | 15 | #include <qlabel.h> |
16 | #include <qspinbox.h> | 16 | #include <qspinbox.h> |
17 | #include <qcheckbox.h> | 17 | #include <qcheckbox.h> |
18 | #include <qmap.h> | 18 | #include <qmap.h> |
19 | #include <qwmatrix.h> | 19 | #include <qwmatrix.h> |
20 | #include <qtextbrowser.h> | 20 | #include <qtextbrowser.h> |
21 | #include <qtextstream.h> | 21 | #include <qtextstream.h> |
22 | #ifndef DESKTOP_VERSION | 22 | #ifndef DESKTOP_VERSION |
23 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
24 | #include <qpe/qpemenubar.h> | 24 | #include <qpe/qpemenubar.h> |
25 | #include <qpe/qpetoolbar.h> | 25 | #include <qpe/qpetoolbar.h> |
26 | #include <qpe/resource.h> | 26 | #include <qpe/resource.h> |
27 | #include <qpe/qpeapplication.h> | 27 | #include <qpe/qpeapplication.h> |
28 | #include <qtopia/alarmserver.h> | 28 | #include <qtopia/alarmserver.h> |
29 | #include <qtopia/qcopenvelope_qws.h> | 29 | #include <qtopia/qcopenvelope_qws.h> |
30 | #include <unistd.h> // for sleep | 30 | #include <unistd.h> // for sleep |
31 | #else | 31 | #else |
32 | #include <qmenubar.h> | 32 | #include <qmenubar.h> |
33 | #include <qtoolbar.h> | 33 | #include <qtoolbar.h> |
34 | #include <qapplication.h> | 34 | #include <qapplication.h> |
35 | //#include <resource.h> | 35 | //#include <resource.h> |
36 | 36 | ||
37 | #endif | 37 | #endif |
38 | #include <libkcal/calendarlocal.h> | 38 | #include <libkcal/calendarlocal.h> |
39 | #include <libkcal/todo.h> | 39 | #include <libkcal/todo.h> |
40 | #include <libkcal/phoneformat.h> | 40 | #include <libkcal/phoneformat.h> |
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() ) ); |
333 | connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); | 344 | connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); |
334 | mSyncManager->setDefaultFileName( sentSyncFile()); | 345 | mSyncManager->setDefaultFileName( sentSyncFile()); |
335 | connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) ); | 346 | connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) ); |
336 | mSyncManager->fillSyncMenu(); | 347 | mSyncManager->fillSyncMenu(); |
337 | 348 | ||
338 | 349 | ||
339 | 350 | ||
340 | mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins ); | 351 | mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins ); |
341 | if ( showWarning ) { | 352 | if ( showWarning ) { |
342 | KMessageBox::information( this, | 353 | KMessageBox::information( this, |
343 | "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information"); | 354 | "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information"); |
344 | qApp->processEvents(); | 355 | qApp->processEvents(); |
345 | mView->dialogManager()->showSyncOptions(); | 356 | mView->dialogManager()->showSyncOptions(); |
346 | } | 357 | } |
347 | 358 | ||
348 | //US listen for result adressed from Ka/Pi | 359 | //US listen for result adressed from Ka/Pi |
349 | #ifndef DESKTOP_VERSION | 360 | #ifndef DESKTOP_VERSION |
350 | connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); | 361 | connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); |
351 | #endif | 362 | #endif |
352 | #ifndef DESKTOP_VERSION | 363 | #ifndef DESKTOP_VERSION |
353 | infrared = 0; | 364 | infrared = 0; |
354 | #endif | 365 | #endif |
355 | updateFilterToolbar(); | 366 | updateFilterToolbar(); |
356 | updateWeek( mView->startDate() ); | 367 | updateWeek( mView->startDate() ); |
357 | connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ), | 368 | connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ), |
358 | SLOT( updateWeekNum( const KCal::DateList & ) ) ); | 369 | SLOT( updateWeekNum( const KCal::DateList & ) ) ); |
359 | mBRdisabled = false; | 370 | mBRdisabled = false; |
360 | //toggleBeamReceive(); | 371 | //toggleBeamReceive(); |
361 | } | 372 | } |
362 | MainWindow::~MainWindow() | 373 | MainWindow::~MainWindow() |
363 | { | 374 | { |
364 | //qDebug("MainWindow::~MainWindow() "); | 375 | //qDebug("MainWindow::~MainWindow() "); |
365 | //save toolbar location | 376 | //save toolbar location |
366 | delete mCalendar; | 377 | delete mCalendar; |
367 | delete mSyncManager; | 378 | delete mSyncManager; |
368 | #ifndef DESKTOP_VERSION | 379 | #ifndef DESKTOP_VERSION |
369 | if ( infrared ) | 380 | if ( infrared ) |
370 | delete infrared; | 381 | delete infrared; |
371 | #endif | 382 | #endif |
372 | 383 | ||
373 | 384 | ||
374 | } | 385 | } |
375 | 386 | ||
376 | void MainWindow::disableBR(bool b) | 387 | void MainWindow::disableBR(bool b) |
377 | { | 388 | { |
378 | #ifndef DESKTOP_VERSION | 389 | #ifndef DESKTOP_VERSION |
379 | if ( b ) { | 390 | if ( b ) { |
380 | if ( infrared ) { | 391 | if ( infrared ) { |
381 | toggleBeamReceive(); | 392 | toggleBeamReceive(); |
382 | mBRdisabled = true; | 393 | mBRdisabled = true; |
383 | } | 394 | } |
384 | mBRdisabled = true; | 395 | mBRdisabled = true; |
385 | } else { | 396 | } else { |
386 | if ( mBRdisabled ) { | 397 | if ( mBRdisabled ) { |
387 | mBRdisabled = false; | 398 | mBRdisabled = false; |
388 | //makes no sense,because other cal ap is probably running | 399 | //makes no sense,because other cal ap is probably running |
389 | // toggleBeamReceive(); | 400 | // toggleBeamReceive(); |
390 | } | 401 | } |
391 | } | 402 | } |
392 | #endif | 403 | #endif |
393 | 404 | ||
394 | } | 405 | } |
395 | bool MainWindow::beamReceiveEnabled() | 406 | bool MainWindow::beamReceiveEnabled() |
396 | { | 407 | { |
397 | #ifndef DESKTOP_VERSION | 408 | #ifndef DESKTOP_VERSION |
398 | return ( infrared != 0 ); | 409 | return ( infrared != 0 ); |
399 | #endif | 410 | #endif |
400 | return false; | 411 | return false; |
401 | } | 412 | } |
402 | 413 | ||
403 | void MainWindow::toggleBeamReceive() | 414 | void MainWindow::toggleBeamReceive() |
404 | { | 415 | { |
405 | if ( mBRdisabled ) | 416 | if ( mBRdisabled ) |
406 | return; | 417 | return; |
407 | #ifndef DESKTOP_VERSION | 418 | #ifndef DESKTOP_VERSION |
408 | if ( infrared ) { | 419 | if ( infrared ) { |
409 | qDebug("disable BeamReceive "); | 420 | qDebug("disable BeamReceive "); |
410 | delete infrared; | 421 | delete infrared; |
411 | infrared = 0; | 422 | infrared = 0; |
412 | brAction->setOn(false); | 423 | brAction->setOn(false); |
413 | return; | 424 | return; |
414 | } | 425 | } |
415 | qDebug("enable BeamReceive "); | 426 | qDebug("enable BeamReceive "); |
416 | brAction->setOn(true); | 427 | brAction->setOn(true); |
417 | infrared = new QCopChannel("QPE/Application/datebook",this, "channel" ) ; | 428 | infrared = new QCopChannel("QPE/Application/datebook",this, "channel" ) ; |
418 | QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(recieve( const QCString&, const QByteArray& ))); | 429 | QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(recieve( const QCString&, const QByteArray& ))); |
419 | #endif | 430 | #endif |
420 | } | 431 | } |
421 | void MainWindow::showMaximized () | 432 | void MainWindow::showMaximized () |
422 | { | 433 | { |
423 | #ifndef DESKTOP_VERSION | 434 | #ifndef DESKTOP_VERSION |
424 | if ( ! globalFlagBlockStartup ) | 435 | if ( ! globalFlagBlockStartup ) |
425 | if ( mClosed ) | 436 | if ( mClosed ) |
426 | mView->goToday(); | 437 | mView->goToday(); |
427 | #endif | 438 | #endif |
428 | QWidget::showMaximized () ; | 439 | QWidget::showMaximized () ; |
429 | mClosed = false; | 440 | mClosed = false; |
430 | } | 441 | } |
431 | void MainWindow::closeEvent( QCloseEvent* ce ) | 442 | void MainWindow::closeEvent( QCloseEvent* ce ) |
432 | { | 443 | { |
433 | 444 | ||
434 | 445 | ||
435 | 446 | ||
436 | if ( ! KOPrefs::instance()->mAskForQuit ) { | 447 | if ( ! KOPrefs::instance()->mAskForQuit ) { |
437 | saveOnClose(); | 448 | saveOnClose(); |
438 | mClosed = true; | 449 | mClosed = true; |
439 | ce->accept(); | 450 | ce->accept(); |
440 | return; | 451 | return; |
441 | 452 | ||
442 | } | 453 | } |
443 | 454 | ||
444 | switch( QMessageBox::information( this, "KO/Pi", | 455 | switch( QMessageBox::information( this, "KO/Pi", |
445 | i18n("Do you really want\nto close KO/Pi?"), | 456 | i18n("Do you really want\nto close KO/Pi?"), |
446 | i18n("Close"), i18n("No"), | 457 | i18n("Close"), i18n("No"), |
447 | 0, 0 ) ) { | 458 | 0, 0 ) ) { |
448 | case 0: | 459 | case 0: |
449 | saveOnClose(); | 460 | saveOnClose(); |
450 | mClosed = true; | 461 | mClosed = true; |
451 | ce->accept(); | 462 | ce->accept(); |
452 | break; | 463 | break; |
453 | case 1: | 464 | case 1: |
454 | ce->ignore(); | 465 | ce->ignore(); |
455 | break; | 466 | break; |
456 | case 2: | 467 | case 2: |
457 | 468 | ||
458 | default: | 469 | default: |
459 | break; | 470 | break; |
460 | } | 471 | } |
461 | 472 | ||
462 | 473 | ||
463 | } | 474 | } |
464 | 475 | ||
465 | void MainWindow::recieve( const QCString& cmsg, const QByteArray& data ) | 476 | void MainWindow::recieve( const QCString& cmsg, const QByteArray& data ) |
466 | { | 477 | { |
467 | QDataStream stream( data, IO_ReadOnly ); | 478 | QDataStream stream( data, IO_ReadOnly ); |
468 | // QMessageBox::about( this, "About KOrganizer/Pi", "*" +msg +"*" ); | 479 | // QMessageBox::about( this, "About KOrganizer/Pi", "*" +msg +"*" ); |
469 | //QString datamess; | 480 | //QString datamess; |
470 | //qDebug("message "); | 481 | //qDebug("message "); |
471 | qDebug("KO: QCOP message received: %s ", cmsg.data() ); | 482 | qDebug("KO: QCOP message received: %s ", cmsg.data() ); |
472 | 483 | ||
473 | if ( cmsg == "setDocument(QString)" ) { | 484 | if ( cmsg == "setDocument(QString)" ) { |
474 | QDataStream stream( data, IO_ReadOnly ); | 485 | QDataStream stream( data, IO_ReadOnly ); |
475 | QString fileName; | 486 | QString fileName; |
476 | stream >> fileName; | 487 | stream >> fileName; |
477 | //qDebug("filename %s ", fileName.latin1()); | 488 | //qDebug("filename %s ", fileName.latin1()); |
478 | showMaximized(); | 489 | showMaximized(); |
479 | raise(); | 490 | raise(); |
480 | KOPrefs::instance()->mLastSyncedLocalFile = fileName ; | 491 | KOPrefs::instance()->mLastSyncedLocalFile = fileName ; |
481 | mSyncManager->slotSyncMenu( 1002 ); | 492 | mSyncManager->slotSyncMenu( 1002 ); |
482 | return; | 493 | return; |
483 | } | 494 | } |
484 | 495 | ||
485 | if ( cmsg == "-writeFile" ) { | 496 | if ( cmsg == "-writeFile" ) { |
486 | // I made from the "-writeFile" an "-writeAlarm" | 497 | // I made from the "-writeFile" an "-writeAlarm" |
487 | mView->viewManager()->showWhatsNextView(); | 498 | mView->viewManager()->showWhatsNextView(); |
488 | mCalendar->checkAlarmForIncidence( 0, true); | 499 | mCalendar->checkAlarmForIncidence( 0, true); |
489 | showMaximized(); | 500 | showMaximized(); |
490 | raise(); | 501 | raise(); |
491 | return; | 502 | return; |
492 | 503 | ||
493 | } | 504 | } |
494 | if ( cmsg == "-writeFileSilent" ) { | 505 | if ( cmsg == "-writeFileSilent" ) { |
495 | // I made from the "-writeFile" an "-writeAlarm" | 506 | // I made from the "-writeFile" an "-writeAlarm" |
496 | // mView->viewManager()->showWhatsNextView(); | 507 | // mView->viewManager()->showWhatsNextView(); |
497 | mCalendar->checkAlarmForIncidence( 0, true); | 508 | mCalendar->checkAlarmForIncidence( 0, true); |
498 | //showMaximized(); | 509 | //showMaximized(); |
499 | //raise(); | 510 | //raise(); |
500 | hide(); | 511 | hide(); |
501 | return; | 512 | return; |
502 | } | 513 | } |
503 | if ( cmsg == "-newCountdown" ) { | 514 | if ( cmsg == "-newCountdown" ) { |
504 | qDebug("newCountdown "); | 515 | qDebug("newCountdown "); |
505 | 516 | ||
506 | } | 517 | } |
507 | QString msg ; | 518 | QString msg ; |
508 | QString allmsg = cmsg; | 519 | QString allmsg = cmsg; |
509 | while ( allmsg.length() > 0 ) { | 520 | while ( allmsg.length() > 0 ) { |
510 | int nextC = allmsg.find( "-", 1 ); | 521 | int nextC = allmsg.find( "-", 1 ); |
511 | if ( nextC == -1 ) { | 522 | if ( nextC == -1 ) { |
512 | msg = allmsg; | 523 | msg = allmsg; |
513 | allmsg = ""; | 524 | allmsg = ""; |
514 | } else{ | 525 | } else{ |
515 | msg = allmsg.left( nextC ); | 526 | msg = allmsg.left( nextC ); |
516 | allmsg = allmsg.mid( nextC, allmsg.length()-nextC ); | 527 | allmsg = allmsg.mid( nextC, allmsg.length()-nextC ); |
517 | } | 528 | } |
518 | //qDebug("msg: %s all: %s ", msg.latin1(), allmsg.latin1() ); | 529 | //qDebug("msg: %s all: %s ", msg.latin1(), allmsg.latin1() ); |
519 | if ( msg == "-newEvent" ) { | 530 | if ( msg == "-newEvent" ) { |
520 | mView->newEvent(); | 531 | mView->newEvent(); |
521 | } | 532 | } |
522 | if ( msg == "-newTodo" ) { | 533 | if ( msg == "-newTodo" ) { |
523 | mView->newTodo(); | 534 | mView->newTodo(); |
524 | 535 | ||
525 | } | 536 | } |
526 | if ( msg == "-showWN" ) { | 537 | if ( msg == "-showWN" ) { |
527 | mView->viewManager()->showWhatsNextView(); | 538 | mView->viewManager()->showWhatsNextView(); |
528 | } | 539 | } |
529 | if ( msg == "-showTodo" ) { | 540 | if ( msg == "-showTodo" ) { |
530 | mView->viewManager()->showTodoView(); | 541 | mView->viewManager()->showTodoView(); |
531 | } | 542 | } |
532 | if ( msg == "-showList" ) { | 543 | if ( msg == "-showList" ) { |
533 | mView->viewManager()->showListView(); | 544 | mView->viewManager()->showListView(); |
534 | } | 545 | } |
535 | else if ( msg == "-showDay" ) { | 546 | else if ( msg == "-showDay" ) { |
536 | mView->viewManager()->showDayView(); | 547 | mView->viewManager()->showDayView(); |
537 | } | 548 | } |
538 | else if ( msg == "-showWWeek" ) { | 549 | else if ( msg == "-showWWeek" ) { |
539 | mView->viewManager()->showWorkWeekView(); | 550 | mView->viewManager()->showWorkWeekView(); |
540 | } | 551 | } |
541 | else if ( msg == "-ringSync" ) { | 552 | else if ( msg == "-ringSync" ) { |
542 | mSyncManager->multiSync( false ); | 553 | mSyncManager->multiSync( false ); |
543 | } | 554 | } |
544 | else if ( msg == "-showWeek" ) { | 555 | else if ( msg == "-showWeek" ) { |
545 | mView->viewManager()->showWeekView(); | 556 | mView->viewManager()->showWeekView(); |
546 | } | 557 | } |
547 | else if ( msg == "-showTodo" ) { | 558 | else if ( msg == "-showTodo" ) { |
548 | mView->viewManager()->showTodoView(); | 559 | mView->viewManager()->showTodoView(); |
549 | } | 560 | } |
550 | else if ( msg == "-showJournal" ) { | 561 | else if ( msg == "-showJournal" ) { |
551 | mView->dateNavigator()->selectDates( 1 ); | 562 | mView->dateNavigator()->selectDates( 1 ); |
552 | mView->dateNavigator()->selectToday(); | 563 | mView->dateNavigator()->selectToday(); |
553 | mView->viewManager()->showJournalView(); | 564 | mView->viewManager()->showJournalView(); |
554 | } | 565 | } |
555 | else if ( msg == "-showKO" ) { | 566 | else if ( msg == "-showKO" ) { |
556 | mView->viewManager()->showNextXView(); | 567 | mView->viewManager()->showNextXView(); |
557 | } | 568 | } |
558 | else if ( msg == "-showWNext" ) { | 569 | else if ( msg == "-showWNext" ) { |
559 | mView->viewManager()->showWhatsNextView(); | 570 | mView->viewManager()->showWhatsNextView(); |
560 | } | 571 | } |
561 | else if ( msg == "nextView()" ) { | 572 | else if ( msg == "nextView()" ) { |
562 | mView->viewManager()->showNextView(); | 573 | mView->viewManager()->showNextView(); |
563 | } | 574 | } |
564 | else if ( msg == "-showNextXView" ) { | 575 | else if ( msg == "-showNextXView" ) { |
565 | mView->viewManager()->showNextXView(); | 576 | mView->viewManager()->showNextXView(); |
566 | } | 577 | } |
567 | 578 | ||
568 | 579 | ||
569 | } | 580 | } |
570 | 581 | ||
571 | showMaximized(); | 582 | showMaximized(); |
572 | raise(); | 583 | raise(); |
573 | } | 584 | } |
574 | 585 | ||
575 | QPixmap MainWindow::loadPixmap( QString name ) | 586 | QPixmap MainWindow::loadPixmap( QString name ) |
576 | { | 587 | { |
577 | return SmallIcon( name ); | 588 | return SmallIcon( name ); |
578 | 589 | ||
579 | } | 590 | } |
580 | void MainWindow::initActions() | 591 | void MainWindow::initActions() |
581 | { | 592 | { |
582 | //KOPrefs::instance()->mShowFullMenu | 593 | //KOPrefs::instance()->mShowFullMenu |
583 | iconToolBar->clear(); | 594 | iconToolBar->clear(); |
584 | KOPrefs *p = KOPrefs::instance(); | 595 | KOPrefs *p = KOPrefs::instance(); |
585 | //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); | 596 | //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); |
586 | 597 | ||
587 | QPopupMenu *viewMenu = new QPopupMenu( this ); | 598 | QPopupMenu *viewMenu = new QPopupMenu( this ); |
588 | QPopupMenu *actionMenu = new QPopupMenu( this ); | 599 | QPopupMenu *actionMenu = new QPopupMenu( this ); |
589 | QPopupMenu *importMenu = new QPopupMenu( this ); | 600 | QPopupMenu *importMenu = new QPopupMenu( this ); |
590 | QPopupMenu *importMenu_X = new QPopupMenu( this ); | 601 | QPopupMenu *importMenu_X = new QPopupMenu( this ); |
591 | QPopupMenu *exportMenu_X = new QPopupMenu( this ); | 602 | QPopupMenu *exportMenu_X = new QPopupMenu( this ); |
592 | QPopupMenu *beamMenu_X = new QPopupMenu( this ); | 603 | QPopupMenu *beamMenu_X = new QPopupMenu( this ); |
593 | selectFilterMenu = new QPopupMenu( this ); | 604 | selectFilterMenu = new QPopupMenu( this ); |
594 | selectFilterMenu->setCheckable( true ); | 605 | selectFilterMenu->setCheckable( true ); |
595 | syncMenu = new QPopupMenu( this ); | 606 | syncMenu = new QPopupMenu( this ); |
596 | configureAgendaMenu = new QPopupMenu( this ); | 607 | configureAgendaMenu = new QPopupMenu( this ); |
597 | configureToolBarMenu = new QPopupMenu( this ); | 608 | configureToolBarMenu = new QPopupMenu( this ); |
598 | QPopupMenu *helpMenu = new QPopupMenu( this ); | 609 | QPopupMenu *helpMenu = new QPopupMenu( this ); |
599 | QIconSet icon; | 610 | QIconSet icon; |
600 | int pixWid = 22, pixHei = 22; | 611 | int pixWid = 22, pixHei = 22; |
601 | QString pathString = ""; | 612 | QString pathString = ""; |
602 | if ( !p->mToolBarMiniIcons ) { | 613 | if ( !p->mToolBarMiniIcons ) { |
603 | if ( QApplication::desktop()->width() < 480 ) { | 614 | if ( QApplication::desktop()->width() < 480 ) { |
604 | pathString += "icons16/"; | 615 | pathString += "icons16/"; |
605 | pixWid = 18; pixHei = 16; | 616 | pixWid = 18; pixHei = 16; |
606 | } | 617 | } |
607 | } else { | 618 | } else { |
608 | pathString += "iconsmini/"; | 619 | pathString += "iconsmini/"; |
609 | pixWid = 18; pixHei = 16; | 620 | pixWid = 18; pixHei = 16; |
610 | } | 621 | } |
611 | if ( KOPrefs::instance()->mShowFullMenu ) { | 622 | if ( KOPrefs::instance()->mShowFullMenu ) { |
612 | QMenuBar *menuBar1; | 623 | QMenuBar *menuBar1; |
613 | menuBar1 = menuBar(); | 624 | menuBar1 = menuBar(); |
614 | menuBar1->insertItem( i18n("File"), importMenu ); | 625 | menuBar1->insertItem( i18n("File"), importMenu ); |
615 | menuBar1->insertItem( i18n("View"), viewMenu ); | 626 | menuBar1->insertItem( i18n("View"), viewMenu ); |
616 | menuBar1->insertItem( i18n("Actions"), actionMenu ); | 627 | menuBar1->insertItem( i18n("Actions"), actionMenu ); |
617 | #ifdef DESKTOP_VERSION | 628 | #ifdef DESKTOP_VERSION |
618 | menuBar1->insertItem( i18n("Synchronize"), syncMenu ); | 629 | menuBar1->insertItem( i18n("Synchronize"), syncMenu ); |
619 | menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); | 630 | menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); |
620 | #else | 631 | #else |
621 | menuBar1->insertItem( i18n("Sync"), syncMenu ); | 632 | menuBar1->insertItem( i18n("Sync"), syncMenu ); |
622 | menuBar1->insertItem( i18n("Agenda"),configureAgendaMenu ); | 633 | menuBar1->insertItem( i18n("Agenda"),configureAgendaMenu ); |
623 | #endif | 634 | #endif |
624 | //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu ); | 635 | //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu ); |
625 | menuBar1->insertItem( i18n("Filter"),selectFilterMenu ); | 636 | menuBar1->insertItem( i18n("Filter"),selectFilterMenu ); |
626 | menuBar1->insertItem( i18n("Help"), helpMenu ); | 637 | menuBar1->insertItem( i18n("Help"), helpMenu ); |
627 | } else { | 638 | } else { |
628 | QPEMenuBar *menuBar1; | 639 | QPEMenuBar *menuBar1; |
629 | menuBar1 = new QPEMenuBar( iconToolBar ); | 640 | menuBar1 = new QPEMenuBar( iconToolBar ); |
630 | QPopupMenu *menuBar = new QPopupMenu( this ); | 641 | QPopupMenu *menuBar = new QPopupMenu( this ); |
631 | icon = loadPixmap( pathString + "z_menu" ); | 642 | icon = loadPixmap( pathString + "z_menu" ); |
632 | menuBar1->insertItem( icon.pixmap(), menuBar); | 643 | menuBar1->insertItem( icon.pixmap(), menuBar); |
633 | //menuBar1->insertItem( i18n("ME"), menuBar); | 644 | //menuBar1->insertItem( i18n("ME"), menuBar); |
634 | menuBar->insertItem( i18n("File"), importMenu ); | 645 | menuBar->insertItem( i18n("File"), importMenu ); |
635 | menuBar->insertItem( i18n("View"), viewMenu ); | 646 | menuBar->insertItem( i18n("View"), viewMenu ); |
636 | menuBar->insertItem( i18n("Actions"), actionMenu ); | 647 | menuBar->insertItem( i18n("Actions"), actionMenu ); |
637 | menuBar->insertItem( i18n("Synchronize"), syncMenu ); | 648 | menuBar->insertItem( i18n("Synchronize"), syncMenu ); |
638 | menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu ); | 649 | menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu ); |
639 | menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu ); | 650 | menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu ); |
640 | menuBar->insertItem( i18n("Filter"),selectFilterMenu ); | 651 | menuBar->insertItem( i18n("Filter"),selectFilterMenu ); |
641 | menuBar->insertItem( i18n("Help"), helpMenu ); | 652 | menuBar->insertItem( i18n("Help"), helpMenu ); |
642 | //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() ); | 653 | //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() ); |
643 | menuBar1->setMaximumSize( menuBar1->sizeHint( )); | 654 | menuBar1->setMaximumSize( menuBar1->sizeHint( )); |
644 | } | 655 | } |
645 | connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); | 656 | connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); |
646 | connect ( selectFilterMenu, SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenu() ) ); | 657 | connect ( selectFilterMenu, SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenu() ) ); |
647 | 658 | ||
648 | 659 | ||
649 | mWeekBgColor = iconToolBar->backgroundColor(); | 660 | mWeekBgColor = iconToolBar->backgroundColor(); |
650 | mWeekPixmap.resize( pixWid , pixHei ); | 661 | mWeekPixmap.resize( pixWid , pixHei ); |
651 | mWeekPixmap.fill( mWeekBgColor ); | 662 | mWeekPixmap.fill( mWeekBgColor ); |
652 | icon = mWeekPixmap; | 663 | icon = mWeekPixmap; |
653 | mWeekAction = new QAction( i18n("Select week number"),icon, i18n("Select week number"), 0, this ); | 664 | mWeekAction = new QAction( i18n("Select week number"),icon, i18n("Select week number"), 0, this ); |
654 | if ( p-> mShowIconWeekNum ) | 665 | if ( p-> mShowIconWeekNum ) |
655 | mWeekAction->addTo( iconToolBar ); | 666 | mWeekAction->addTo( iconToolBar ); |
656 | mWeekFont = font(); | 667 | mWeekFont = font(); |
657 | 668 | ||
658 | int fontPoint = mWeekFont.pointSize(); | 669 | int fontPoint = mWeekFont.pointSize(); |
659 | QFontMetrics f( mWeekFont ); | 670 | QFontMetrics f( mWeekFont ); |
660 | int fontWid = f.width( "30" ); | 671 | int fontWid = f.width( "30" ); |
661 | while ( fontWid > pixWid ) { | 672 | while ( fontWid > pixWid ) { |
662 | --fontPoint; | 673 | --fontPoint; |
663 | mWeekFont.setPointSize( fontPoint ); | 674 | mWeekFont.setPointSize( fontPoint ); |
664 | QFontMetrics f( mWeekFont ); | 675 | QFontMetrics f( mWeekFont ); |
665 | fontWid = f.width( "30" ); | 676 | fontWid = f.width( "30" ); |
666 | //qDebug("dec-- "); | 677 | //qDebug("dec-- "); |
667 | } | 678 | } |
668 | 679 | ||
669 | connect( mWeekAction, SIGNAL( activated() ), | 680 | connect( mWeekAction, SIGNAL( activated() ), |
670 | this, SLOT( weekAction() ) ); | 681 | this, SLOT( weekAction() ) ); |
671 | 682 | ||
672 | connect( this, SIGNAL( selectWeek ( int ) ), mView->dateNavigator(), SLOT( selectWeek ( int ) ) ); | 683 | connect( this, SIGNAL( selectWeek ( int ) ), mView->dateNavigator(), SLOT( selectWeek ( int ) ) ); |
673 | if ( p->mShowIconFilterview ) { | 684 | if ( p->mShowIconFilterview ) { |
674 | icon = loadPixmap( pathString + "filter" ); | 685 | icon = loadPixmap( pathString + "filter" ); |
675 | actionFilterMenuTB = new QAction( i18n("Filter selector"), icon, i18n("Filter selector"), 0, this ); | 686 | actionFilterMenuTB = new QAction( i18n("Filter selector"), icon, i18n("Filter selector"), 0, this ); |
676 | connect( actionFilterMenuTB, SIGNAL( activated() ), | 687 | connect( actionFilterMenuTB, SIGNAL( activated() ), |
677 | this, SLOT( fillFilterMenuTB() ) ); | 688 | this, SLOT( fillFilterMenuTB() ) ); |
678 | actionFilterMenuTB->addTo( iconToolBar ); | 689 | actionFilterMenuTB->addTo( iconToolBar ); |
679 | selectFilterMenuTB = new QPopupMenu( this ); | 690 | selectFilterMenuTB = new QPopupMenu( this ); |
680 | selectFilterMenuTB->setCheckable( true ); | 691 | selectFilterMenuTB->setCheckable( true ); |
681 | connect ( selectFilterMenuTB, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); | 692 | connect ( selectFilterMenuTB, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); |
682 | } | 693 | } |
683 | 694 | ||
684 | //#endif | 695 | //#endif |
685 | // ****************** | 696 | // ****************** |
686 | QAction *action; | 697 | QAction *action; |
687 | // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); | 698 | // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); |
688 | configureToolBarMenu->setCheckable( true ); | 699 | configureToolBarMenu->setCheckable( true ); |
689 | 700 | ||
690 | 701 | ||
691 | configureAgendaMenu->setCheckable( true ); | 702 | configureAgendaMenu->setCheckable( true ); |
692 | int iii ; | 703 | int iii ; |
693 | for ( iii = 1;iii<= 10 ;++iii ){ | 704 | for ( iii = 1;iii<= 10 ;++iii ){ |
694 | configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 ); | 705 | configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 ); |
695 | } | 706 | } |
696 | //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); | 707 | //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); |
697 | 708 | ||
698 | connect( configureAgendaMenu, SIGNAL( aboutToShow()), | 709 | connect( configureAgendaMenu, SIGNAL( aboutToShow()), |
699 | this, SLOT( showConfigureAgenda( ) ) ); | 710 | this, SLOT( showConfigureAgenda( ) ) ); |
700 | 711 | ||
701 | icon = loadPixmap( pathString + "configure" ); | 712 | icon = loadPixmap( pathString + "configure" ); |
702 | action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this ); | 713 | action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this ); |
703 | action->addTo( actionMenu ); | 714 | action->addTo( actionMenu ); |
704 | connect( action, SIGNAL( activated() ), | 715 | connect( action, SIGNAL( activated() ), |
705 | mView, SLOT( edit_options() ) ); | 716 | mView, SLOT( edit_options() ) ); |
706 | actionMenu->insertSeparator(); | 717 | actionMenu->insertSeparator(); |
707 | 718 | ||
708 | action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); | 719 | action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); |
709 | action->addTo( actionMenu ); | 720 | action->addTo( actionMenu ); |
710 | connect( action, SIGNAL( activated() ), | 721 | connect( action, SIGNAL( activated() ), |
711 | mView, SLOT( undo_delete() ) ); | 722 | mView, SLOT( undo_delete() ) ); |
712 | actionMenu->insertSeparator(); | 723 | actionMenu->insertSeparator(); |
713 | 724 | ||
714 | icon = loadPixmap( pathString + "newevent" ); | 725 | icon = loadPixmap( pathString + "newevent" ); |
715 | configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); | 726 | configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); |
716 | configureToolBarMenu->insertItem(i18n("Only one toolbar"), 6 ); | 727 | configureToolBarMenu->insertItem(i18n("Only one toolbar"), 6 ); |
717 | configureToolBarMenu->insertSeparator(); | 728 | configureToolBarMenu->insertSeparator(); |
718 | configureToolBarMenu->insertItem(i18n("Filtermenu"), 7 ); | 729 | configureToolBarMenu->insertItem(i18n("Filtermenu"), 7 ); |
719 | configureToolBarMenu->insertSeparator(); | 730 | configureToolBarMenu->insertSeparator(); |
720 | configureToolBarMenu->insertItem(i18n("Week Number"), 400); | 731 | configureToolBarMenu->insertItem(i18n("Week Number"), 400); |
721 | configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); | 732 | configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); |
722 | QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); | 733 | QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); |
723 | ne_action->addTo( actionMenu ); | 734 | ne_action->addTo( actionMenu ); |
724 | connect( ne_action, SIGNAL( activated() ), | 735 | connect( ne_action, SIGNAL( activated() ), |
725 | mView, SLOT( newEvent() ) ); | 736 | mView, SLOT( newEvent() ) ); |
726 | icon = loadPixmap( pathString + "newtodo" ); | 737 | icon = loadPixmap( pathString + "newtodo" ); |
727 | configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); | 738 | configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); |
728 | QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); | 739 | QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); |
729 | nt_action->addTo( actionMenu ); | 740 | nt_action->addTo( actionMenu ); |
730 | connect( nt_action, SIGNAL( activated() ), | 741 | connect( nt_action, SIGNAL( activated() ), |
731 | mView, SLOT( newTodo() ) ); | 742 | mView, SLOT( newTodo() ) ); |
732 | 743 | ||
733 | icon = loadPixmap( pathString + "today" ); | 744 | icon = loadPixmap( pathString + "today" ); |
734 | QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); | 745 | QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); |
735 | today_action->addTo( viewMenu ); | 746 | today_action->addTo( viewMenu ); |
736 | connect( today_action, SIGNAL( activated() ), | 747 | connect( today_action, SIGNAL( activated() ), |
737 | mView, SLOT( goToday() ) ); | 748 | mView, SLOT( goToday() ) ); |
738 | viewMenu->insertSeparator(); | 749 | viewMenu->insertSeparator(); |
739 | 750 | ||
740 | // *********************** | 751 | // *********************** |
741 | if ( KOPrefs::instance()->mVerticalScreen ) { | 752 | if ( KOPrefs::instance()->mVerticalScreen ) { |
742 | icon = SmallIcon( "1updownarrow" ); | 753 | icon = SmallIcon( "1updownarrow" ); |
743 | } else { | 754 | } else { |
744 | icon = SmallIcon("1leftrightarrow" ); | 755 | icon = SmallIcon("1leftrightarrow" ); |
745 | } | 756 | } |
746 | configureToolBarMenu->insertItem(icon, i18n("Toggle Fullscreen"), 28 ); | 757 | configureToolBarMenu->insertItem(icon, i18n("Toggle Fullscreen"), 28 ); |
747 | QAction* FSaction = new QAction( i18n("Toggle Fullscreen"), icon, i18n("Toggle Fullscreen"), 0, this ); | 758 | QAction* FSaction = new QAction( i18n("Toggle Fullscreen"), icon, i18n("Toggle Fullscreen"), 0, this ); |
748 | FSaction->addTo( viewMenu ); | 759 | FSaction->addTo( viewMenu ); |
749 | connect( FSaction, SIGNAL( activated() ), mView, SLOT( toggleExpand() )); | 760 | connect( FSaction, SIGNAL( activated() ), mView, SLOT( toggleExpand() )); |
750 | 761 | ||
751 | icon = loadPixmap( pathString + "navi" ); | 762 | icon = loadPixmap( pathString + "navi" ); |
752 | configureToolBarMenu->insertItem(icon, i18n("Toggle DateNavigator"), 22 ); | 763 | configureToolBarMenu->insertItem(icon, i18n("Toggle DateNavigator"), 22 ); |
753 | action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); | 764 | action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); |
754 | action->addTo( viewMenu ); | 765 | action->addTo( viewMenu ); |
755 | connect( action, SIGNAL( activated() ), | 766 | connect( action, SIGNAL( activated() ), |
756 | mView, SLOT( toggleDateNavigatorWidget() ) ); | 767 | mView, SLOT( toggleDateNavigatorWidget() ) ); |
757 | mToggleNav = action ; | 768 | mToggleNav = action ; |
758 | icon = loadPixmap( pathString + "filter" ); | 769 | icon = loadPixmap( pathString + "filter" ); |
759 | configureToolBarMenu->insertItem(icon, i18n("Filter menu icon"), 26 ); | 770 | configureToolBarMenu->insertItem(icon, i18n("Filter menu icon"), 26 ); |
760 | action = new QAction( i18n("Toggle FilterView"), icon, i18n("Toggle FilterView"), 0, this ); | 771 | action = new QAction( i18n("Toggle FilterView"), icon, i18n("Toggle FilterView"), 0, this ); |
761 | action->addTo( viewMenu ); | 772 | action->addTo( viewMenu ); |
762 | connect( action, SIGNAL( activated() ), | 773 | connect( action, SIGNAL( activated() ), |
763 | mView, SLOT( toggleFilter() ) ); | 774 | mView, SLOT( toggleFilter() ) ); |
764 | mToggleFilter = action; | 775 | mToggleFilter = action; |
765 | icon = loadPixmap( pathString + "allday" ); | 776 | icon = loadPixmap( pathString + "allday" ); |
766 | configureToolBarMenu->insertItem(icon, i18n("Toggle Allday"), 24 ); | 777 | configureToolBarMenu->insertItem(icon, i18n("Toggle Allday"), 24 ); |
767 | action = new QAction( i18n("Toggle Allday"), icon,i18n("Toggle Allday"), 0, this ); | 778 | action = new QAction( i18n("Toggle Allday"), icon,i18n("Toggle Allday"), 0, this ); |
768 | action->addTo( viewMenu ); | 779 | action->addTo( viewMenu ); |
769 | connect( action, SIGNAL( activated() ), | 780 | connect( action, SIGNAL( activated() ), |
770 | mView, SLOT( toggleAllDaySize() ) ); | 781 | mView, SLOT( toggleAllDaySize() ) ); |
771 | mToggleAllday = action; | 782 | mToggleAllday = action; |
772 | 783 | ||
773 | 784 | ||
774 | connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), | 785 | connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), |
775 | mToggleNav, SLOT( setEnabled ( bool ) ) ); | 786 | mToggleNav, SLOT( setEnabled ( bool ) ) ); |
776 | connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), | 787 | connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), |
777 | mToggleFilter, SLOT( setEnabled ( bool ) ) ); | 788 | mToggleFilter, SLOT( setEnabled ( bool ) ) ); |
778 | connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ), | 789 | connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ), |
779 | mToggleAllday, SLOT( setEnabled ( bool ) ) ); | 790 | mToggleAllday, SLOT( setEnabled ( bool ) ) ); |
780 | 791 | ||
781 | viewMenu->insertSeparator(); | 792 | viewMenu->insertSeparator(); |
782 | icon = loadPixmap( pathString + "picker" ); | 793 | icon = loadPixmap( pathString + "picker" ); |
783 | action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this ); | 794 | action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this ); |
784 | action->addTo( viewMenu ); | 795 | action->addTo( viewMenu ); |
785 | connect( action, SIGNAL( activated() ), | 796 | connect( action, SIGNAL( activated() ), |
786 | mView, SLOT( showDatePicker() ) ); | 797 | mView, SLOT( showDatePicker() ) ); |
787 | action->addTo( iconToolBar ); | 798 | action->addTo( iconToolBar ); |
788 | viewMenu->insertSeparator(); | 799 | viewMenu->insertSeparator(); |
789 | 800 | ||
790 | if ( p-> mShowIconToggleFull ) | 801 | if ( p-> mShowIconToggleFull ) |
791 | FSaction->addTo( iconToolBar ); | 802 | FSaction->addTo( iconToolBar ); |
792 | if ( p->mShowIconNavigator ) mToggleNav ->addTo( iconToolBar ); | 803 | if ( p->mShowIconNavigator ) mToggleNav ->addTo( iconToolBar ); |
793 | 804 | ||
794 | //******************** | 805 | //******************** |
795 | if ( p->mShowIconAllday ) mToggleAllday->addTo( iconToolBar ); | 806 | if ( p->mShowIconAllday ) mToggleAllday->addTo( iconToolBar ); |
796 | 807 | ||
797 | 808 | ||
798 | icon = loadPixmap( pathString + "whatsnext" ); | 809 | icon = loadPixmap( pathString + "whatsnext" ); |
799 | configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110 ); | 810 | configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110 ); |
800 | QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this ); | 811 | QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this ); |
801 | whatsnext_action->addTo( viewMenu ); | 812 | whatsnext_action->addTo( viewMenu ); |
802 | connect( whatsnext_action, SIGNAL( activated() ), | 813 | connect( whatsnext_action, SIGNAL( activated() ), |
803 | mView->viewManager(), SLOT( showWhatsNextView() ) ); | 814 | mView->viewManager(), SLOT( showWhatsNextView() ) ); |
804 | 815 | ||
805 | icon = loadPixmap( pathString + "xdays" ); | 816 | icon = loadPixmap( pathString + "xdays" ); |
806 | configureToolBarMenu->insertItem(icon, i18n("Next days"), 100 ); | 817 | configureToolBarMenu->insertItem(icon, i18n("Next days"), 100 ); |
807 | QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this ); | 818 | QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this ); |
808 | xdays_action->addTo( viewMenu ); | 819 | xdays_action->addTo( viewMenu ); |
809 | connect( xdays_action, SIGNAL( activated() ), | 820 | connect( xdays_action, SIGNAL( activated() ), |
810 | mView->viewManager(), SLOT( showNextXView() ) ); | 821 | mView->viewManager(), SLOT( showNextXView() ) ); |
811 | 822 | ||
812 | 823 | ||
813 | icon = loadPixmap( pathString + "journal" ); | 824 | icon = loadPixmap( pathString + "journal" ); |
814 | configureToolBarMenu->insertItem(icon, i18n("Journal"), 90 ); | 825 | configureToolBarMenu->insertItem(icon, i18n("Journal"), 90 ); |
815 | QAction* viewjournal_action = new QAction( i18n("Journal"), icon, i18n("Journal"), 0, this ); | 826 | QAction* viewjournal_action = new QAction( i18n("Journal"), icon, i18n("Journal"), 0, this ); |
816 | viewjournal_action->addTo( viewMenu ); | 827 | viewjournal_action->addTo( viewMenu ); |
817 | connect( viewjournal_action, SIGNAL( activated() ), | 828 | connect( viewjournal_action, SIGNAL( activated() ), |
818 | mView->viewManager(), SLOT( showJournalView() ) ); | 829 | mView->viewManager(), SLOT( showJournalView() ) ); |
819 | 830 | ||
820 | 831 | ||
821 | icon = loadPixmap( pathString + "day" ); | 832 | icon = loadPixmap( pathString + "day" ); |
822 | configureToolBarMenu->insertItem(icon, i18n("Day View"), 40 ); | 833 | configureToolBarMenu->insertItem(icon, i18n("Day View"), 40 ); |
823 | QAction* day1_action = new QAction( i18n("Day View"), icon, i18n("Day View"), 0, this ); | 834 | QAction* day1_action = new QAction( i18n("Day View"), icon, i18n("Day View"), 0, this ); |
824 | day1_action->addTo( viewMenu ); | 835 | day1_action->addTo( viewMenu ); |
825 | // action->addTo( toolBar ); | 836 | // action->addTo( toolBar ); |
826 | connect( day1_action, SIGNAL( activated() ), | 837 | connect( day1_action, SIGNAL( activated() ), |
827 | mView->viewManager(), SLOT( showDayView() ) ); | 838 | mView->viewManager(), SLOT( showDayView() ) ); |
828 | 839 | ||
829 | icon = loadPixmap( pathString + "workweek" ); | 840 | icon = loadPixmap( pathString + "workweek" ); |
830 | configureToolBarMenu->insertItem(icon, i18n("Work Week"), 50 ); | 841 | configureToolBarMenu->insertItem(icon, i18n("Work Week"), 50 ); |
831 | QAction* day5_action = new QAction( i18n("Work Week"), icon, i18n("Work Week"), 0, this ); | 842 | QAction* day5_action = new QAction( i18n("Work Week"), icon, i18n("Work Week"), 0, this ); |
832 | day5_action->addTo( viewMenu ); | 843 | day5_action->addTo( viewMenu ); |
833 | connect( day5_action, SIGNAL( activated() ), | 844 | connect( day5_action, SIGNAL( activated() ), |
834 | mView->viewManager(), SLOT( showWorkWeekView() ) ); | 845 | mView->viewManager(), SLOT( showWorkWeekView() ) ); |
835 | 846 | ||
836 | icon = loadPixmap( pathString + "week" ); | 847 | icon = loadPixmap( pathString + "week" ); |
837 | configureToolBarMenu->insertItem(icon, i18n("Week"), 60 ); | 848 | configureToolBarMenu->insertItem(icon, i18n("Week"), 60 ); |
838 | QAction* day7_action = new QAction( i18n("Week"), icon, i18n("Week"), 0, this ); | 849 | QAction* day7_action = new QAction( i18n("Week"), icon, i18n("Week"), 0, this ); |
839 | day7_action->addTo( viewMenu ); | 850 | day7_action->addTo( viewMenu ); |
840 | connect( day7_action, SIGNAL( activated() ), | 851 | connect( day7_action, SIGNAL( activated() ), |
841 | mView->viewManager(), SLOT( showWeekView() ) ); | 852 | mView->viewManager(), SLOT( showWeekView() ) ); |
842 | 853 | ||
843 | icon = loadPixmap( pathString + "workweek2" ); | 854 | icon = loadPixmap( pathString + "workweek2" ); |
844 | configureToolBarMenu->insertItem(icon, i18n("List week view"), 75 ); | 855 | configureToolBarMenu->insertItem(icon, i18n("List week view"), 75 ); |
845 | QAction* day6_action = new QAction( i18n("List week"), icon, i18n("List week"), 0, this ); | 856 | QAction* day6_action = new QAction( i18n("List week"), icon, i18n("List week"), 0, this ); |
846 | day6_action->addTo( viewMenu ); | 857 | day6_action->addTo( viewMenu ); |
847 | connect( day6_action, SIGNAL( activated() ), | 858 | connect( day6_action, SIGNAL( activated() ), |
848 | mView->viewManager(), SLOT( showMonthViewWeek() ) ); | 859 | mView->viewManager(), SLOT( showMonthViewWeek() ) ); |
849 | 860 | ||
850 | icon = loadPixmap( pathString + "month" ); | 861 | icon = loadPixmap( pathString + "month" ); |
851 | configureToolBarMenu->insertItem(icon, i18n("Month"), 70 ); | 862 | configureToolBarMenu->insertItem(icon, i18n("Month"), 70 ); |
852 | QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this ); | 863 | QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this ); |
853 | month_action->addTo( viewMenu ); | 864 | month_action->addTo( viewMenu ); |
854 | connect( month_action, SIGNAL( activated() ), | 865 | connect( month_action, SIGNAL( activated() ), |
855 | mView->viewManager(), SLOT( showMonthView() ) ); | 866 | mView->viewManager(), SLOT( showMonthView() ) ); |
856 | 867 | ||
857 | icon = loadPixmap( pathString + "list" ); | 868 | icon = loadPixmap( pathString + "list" ); |
858 | configureToolBarMenu->insertItem(icon, i18n("List View"), 30 ); | 869 | configureToolBarMenu->insertItem(icon, i18n("List View"), 30 ); |
859 | QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this ); | 870 | QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this ); |
860 | showlist_action->addTo( viewMenu ); | 871 | showlist_action->addTo( viewMenu ); |
861 | connect( showlist_action, SIGNAL( activated() ), | 872 | connect( showlist_action, SIGNAL( activated() ), |
862 | mView->viewManager(), SLOT( showListView() ) ); | 873 | mView->viewManager(), SLOT( showListView() ) ); |
863 | 874 | ||
864 | icon = loadPixmap( pathString + "todo" ); | 875 | icon = loadPixmap( pathString + "todo" ); |
865 | configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 ); | 876 | configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 ); |
866 | QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this ); | 877 | QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this ); |
867 | todoview_action->addTo( viewMenu ); | 878 | todoview_action->addTo( viewMenu ); |
868 | connect( todoview_action, SIGNAL( activated() ), | 879 | connect( todoview_action, SIGNAL( activated() ), |
869 | mView->viewManager(), SLOT( showTodoView() ) ); | 880 | mView->viewManager(), SLOT( showTodoView() ) ); |
870 | 881 | ||
871 | 882 | ||
872 | 883 | ||
873 | #if 0 | 884 | #if 0 |
874 | action = new QAction( "view_timespan", "Time Span", 0, this ); | 885 | action = new QAction( "view_timespan", "Time Span", 0, this ); |
875 | action->addTo( viewMenu ); | 886 | action->addTo( viewMenu ); |
876 | connect( action, SIGNAL( activated() ), | 887 | connect( action, SIGNAL( activated() ), |
877 | mView->viewManager(), SLOT( showTimeSpanView() ) ); | 888 | mView->viewManager(), SLOT( showTimeSpanView() ) ); |
878 | #endif | 889 | #endif |
879 | 890 | ||
880 | mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, | 891 | mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, |
881 | this ); | 892 | this ); |
882 | mNewSubTodoAction->addTo( actionMenu ); | 893 | mNewSubTodoAction->addTo( actionMenu ); |
883 | connect( mNewSubTodoAction, SIGNAL( activated() ), | 894 | connect( mNewSubTodoAction, SIGNAL( activated() ), |
884 | mView, SLOT( newSubTodo() ) ); | 895 | mView, SLOT( newSubTodo() ) ); |
885 | 896 | ||
886 | actionMenu->insertSeparator(); | 897 | actionMenu->insertSeparator(); |
887 | 898 | ||
888 | mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this ); | 899 | mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this ); |
889 | mShowAction->addTo( actionMenu ); | 900 | mShowAction->addTo( actionMenu ); |
890 | connect( mShowAction, SIGNAL( activated() ), | 901 | connect( mShowAction, SIGNAL( activated() ), |
891 | mView, SLOT( showIncidence() ) ); | 902 | mView, SLOT( showIncidence() ) ); |
892 | 903 | ||
893 | mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); | 904 | mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); |
894 | mEditAction->addTo( actionMenu ); | 905 | mEditAction->addTo( actionMenu ); |
895 | connect( mEditAction, SIGNAL( activated() ), | 906 | connect( mEditAction, SIGNAL( activated() ), |
896 | mView, SLOT( editIncidence() ) ); | 907 | mView, SLOT( editIncidence() ) ); |
897 | 908 | ||
898 | mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); | 909 | mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); |
899 | mDeleteAction->addTo( actionMenu ); | 910 | mDeleteAction->addTo( actionMenu ); |
900 | connect( mDeleteAction, SIGNAL( activated() ), | 911 | connect( mDeleteAction, SIGNAL( activated() ), |
901 | mView, SLOT( deleteIncidence() ) ); | 912 | mView, SLOT( deleteIncidence() ) ); |
902 | 913 | ||
903 | 914 | ||
904 | mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this ); | 915 | mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this ); |
905 | mCloneAction->addTo( actionMenu ); | 916 | mCloneAction->addTo( actionMenu ); |
906 | connect( mCloneAction, SIGNAL( activated() ), | 917 | connect( mCloneAction, SIGNAL( activated() ), |
907 | mView, SLOT( cloneIncidence() ) ); | 918 | mView, SLOT( cloneIncidence() ) ); |
908 | mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this ); | 919 | mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this ); |
909 | mMoveAction->addTo( actionMenu ); | 920 | mMoveAction->addTo( actionMenu ); |
910 | connect( mMoveAction, SIGNAL( activated() ), | 921 | connect( mMoveAction, SIGNAL( activated() ), |
911 | mView, SLOT( moveIncidence() ) ); | 922 | mView, SLOT( moveIncidence() ) ); |
912 | mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this ); | 923 | mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this ); |
913 | mBeamAction->addTo( actionMenu ); | 924 | mBeamAction->addTo( actionMenu ); |
914 | connect( mBeamAction, SIGNAL( activated() ), | 925 | connect( mBeamAction, SIGNAL( activated() ), |
915 | mView, SLOT( beamIncidence() ) ); | 926 | mView, SLOT( beamIncidence() ) ); |
916 | mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this ); | 927 | mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this ); |
917 | mCancelAction->addTo( actionMenu ); | 928 | mCancelAction->addTo( actionMenu ); |
918 | connect( mCancelAction, SIGNAL( activated() ), | 929 | connect( mCancelAction, SIGNAL( activated() ), |
919 | mView, SLOT( toggleCancelIncidence() ) ); | 930 | mView, SLOT( toggleCancelIncidence() ) ); |
920 | 931 | ||
921 | actionMenu->insertSeparator(); | 932 | actionMenu->insertSeparator(); |
922 | 933 | ||
923 | action = new QAction( "purge_completed", i18n("Purge Completed"), 0, | 934 | action = new QAction( "purge_completed", i18n("Purge Completed"), 0, |
924 | this ); | 935 | this ); |
925 | action->addTo( actionMenu ); | 936 | action->addTo( actionMenu ); |
926 | connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); | 937 | connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); |
927 | 938 | ||
928 | icon = loadPixmap( pathString + "search" ); | 939 | icon = loadPixmap( pathString + "search" ); |
929 | QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); | 940 | QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); |
930 | configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 5); | 941 | configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 5); |
931 | search_action->addTo( actionMenu ); | 942 | search_action->addTo( actionMenu ); |
932 | connect( search_action, SIGNAL( activated() ), | 943 | connect( search_action, SIGNAL( activated() ), |
933 | mView->dialogManager(), SLOT( showSearchDialog() ) ); | 944 | mView->dialogManager(), SLOT( showSearchDialog() ) ); |
934 | 945 | ||
935 | 946 | ||
936 | 947 | ||
937 | if ( KOPrefs::instance()->mShowFullMenu ) { | 948 | if ( KOPrefs::instance()->mShowFullMenu ) { |
938 | actionMenu->insertSeparator(); | 949 | actionMenu->insertSeparator(); |
939 | actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu ); | 950 | actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu ); |
940 | 951 | ||
941 | } | 952 | } |
942 | // actionMenu->insertSeparator(); | 953 | // actionMenu->insertSeparator(); |
943 | action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0, | 954 | action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0, |
944 | this ); | 955 | this ); |
945 | action->addTo( importMenu_X ); | 956 | action->addTo( importMenu_X ); |
946 | connect( action, SIGNAL( activated() ), SLOT( importIcal() ) ); | 957 | connect( action, SIGNAL( activated() ), SLOT( importIcal() ) ); |
947 | action = new QAction( "import_quick", i18n("Import last file"), 0, | 958 | action = new QAction( "import_quick", i18n("Import last file"), 0, |
948 | this ); | 959 | this ); |
949 | action->addTo( importMenu_X ); | 960 | action->addTo( importMenu_X ); |
950 | connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) ); | 961 | connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) ); |
951 | importMenu_X->insertSeparator(); | 962 | importMenu_X->insertSeparator(); |
952 | action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0, | 963 | action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0, |
953 | this ); | 964 | this ); |
954 | action->addTo( importMenu_X ); | 965 | action->addTo( importMenu_X ); |
955 | connect( action, SIGNAL( activated() ), SLOT( importBday() ) ); | 966 | connect( action, SIGNAL( activated() ), SLOT( importBday() ) ); |
956 | //#ifndef DESKTOP_VERSION | 967 | //#ifndef DESKTOP_VERSION |
957 | importMenu_X->insertSeparator(); | 968 | importMenu_X->insertSeparator(); |
958 | action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0, | 969 | action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0, |
959 | this ); | 970 | this ); |
960 | action->addTo( importMenu_X ); | 971 | action->addTo( importMenu_X ); |
961 | connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) ); | 972 | connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) ); |
962 | //#else | 973 | //#else |
963 | #ifdef _OL_IMPORT_ | 974 | #ifdef _OL_IMPORT_ |
964 | importMenu_X->insertSeparator(); | 975 | importMenu_X->insertSeparator(); |
965 | action = new QAction( "import_ol", i18n("Import from OL"), 0, | 976 | action = new QAction( "import_ol", i18n("Import from OL"), 0, |
966 | this ); | 977 | this ); |
967 | action->addTo( importMenu_X ); | 978 | action->addTo( importMenu_X ); |
968 | connect( action, SIGNAL( activated() ), SLOT( importOL() ) ); | 979 | connect( action, SIGNAL( activated() ), SLOT( importOL() ) ); |
969 | #endif | 980 | #endif |
970 | //#endif | 981 | //#endif |
971 | 982 | ||
972 | //importMenu->insertSeparator(); | 983 | //importMenu->insertSeparator(); |
973 | action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, | 984 | action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, |
974 | this ); | 985 | this ); |
975 | action->addTo( importMenu ); | 986 | action->addTo( importMenu ); |
976 | connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); | 987 | connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); |
977 | 988 | ||
978 | action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0, | 989 | action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0, |
979 | this ); | 990 | this ); |
980 | action->addTo( importMenu ); | 991 | action->addTo( importMenu ); |
981 | connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); | 992 | connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); |
982 | importMenu->insertSeparator(); | 993 | importMenu->insertSeparator(); |
983 | importMenu->insertItem( i18n("Import"), importMenu_X ); | 994 | importMenu->insertItem( i18n("Import"), importMenu_X ); |
984 | //importMenu->insertSeparator(); | 995 | //importMenu->insertSeparator(); |
985 | action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, | 996 | action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, |
986 | this ); | 997 | this ); |
987 | action->addTo( exportMenu_X ); | 998 | action->addTo( exportMenu_X ); |
988 | connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); | 999 | connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); |
989 | 1000 | ||
990 | 1001 | ||
991 | //LR | 1002 | //LR |
992 | QPopupMenu *ex2phone = new QPopupMenu( this ); | 1003 | QPopupMenu *ex2phone = new QPopupMenu( this ); |
993 | ex2phone->insertItem(i18n("Complete calendar..."), 1 ); | 1004 | ex2phone->insertItem(i18n("Complete calendar..."), 1 ); |
994 | ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); | 1005 | ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); |
995 | connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); | 1006 | connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); |
996 | exportMenu_X->insertItem( i18n("Export to phone"), ex2phone ); | 1007 | exportMenu_X->insertItem( i18n("Export to phone"), ex2phone ); |
997 | 1008 | ||
998 | importMenu->insertItem( i18n("Export"), exportMenu_X ); | 1009 | importMenu->insertItem( i18n("Export"), exportMenu_X ); |
999 | #ifndef DESKTOP_VERSION | 1010 | #ifndef DESKTOP_VERSION |
1000 | //importMenu->insertSeparator(); | 1011 | //importMenu->insertSeparator(); |
1001 | brAction = new QAction( "beam toggle", i18n("Beam receive enabled"), 0, | 1012 | brAction = new QAction( "beam toggle", i18n("Beam receive enabled"), 0, |
1002 | this ); | 1013 | this ); |
1003 | brAction->addTo( beamMenu_X ); | 1014 | brAction->addTo( beamMenu_X ); |
1004 | brAction->setToggleAction (true ) ; | 1015 | brAction->setToggleAction (true ) ; |
1005 | connect( brAction, SIGNAL( activated() ), this, SLOT( toggleBeamReceive() ) ); | 1016 | connect( brAction, SIGNAL( activated() ), this, SLOT( toggleBeamReceive() ) ); |
1006 | 1017 | ||
1007 | action = new QAction( "beam all", i18n("Beam complete calendar..."), 0, | 1018 | action = new QAction( "beam all", i18n("Beam complete calendar..."), 0, |
1008 | this ); | 1019 | this ); |
1009 | action->addTo( beamMenu_X ); | 1020 | action->addTo( beamMenu_X ); |
1010 | connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) ); | 1021 | connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) ); |
1011 | 1022 | ||
1012 | action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0, | 1023 | action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0, |
1013 | this ); | 1024 | this ); |
1014 | action->addTo( beamMenu_X ); | 1025 | action->addTo( beamMenu_X ); |
1015 | connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) ); | 1026 | connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) ); |
1016 | importMenu->insertItem( i18n("Beam"), beamMenu_X ); | 1027 | importMenu->insertItem( i18n("Beam"), beamMenu_X ); |
1017 | #else | 1028 | #else |
1018 | //importMenu->insertSeparator(); | 1029 | //importMenu->insertSeparator(); |
1019 | icon = loadPixmap( pathString + "print" ); | 1030 | icon = loadPixmap( pathString + "print" ); |
1020 | action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this ); | 1031 | action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this ); |
1021 | action->addTo( beamMenu_X ); | 1032 | action->addTo( beamMenu_X ); |
1022 | connect( action, SIGNAL( activated() ), | 1033 | connect( action, SIGNAL( activated() ), |
1023 | this, SLOT( printCal() ) ); | 1034 | this, SLOT( printCal() ) ); |
1024 | 1035 | ||
1025 | icon = loadPixmap( pathString + "print" ); | 1036 | icon = loadPixmap( pathString + "print" ); |
1026 | action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this ); | 1037 | action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this ); |
1027 | action->addTo( beamMenu_X ); | 1038 | action->addTo( beamMenu_X ); |
1028 | connect( action, SIGNAL( activated() ), | 1039 | connect( action, SIGNAL( activated() ), |
1029 | this, SLOT( printSel() ) ); | 1040 | this, SLOT( printSel() ) ); |
1030 | action = new QAction( i18n("Print What's Next View..."),icon,i18n("Print What's Next View..."), 0, this ); | 1041 | action = new QAction( i18n("Print What's Next View..."),icon,i18n("Print What's Next View..."), 0, this ); |
1031 | action->addTo( beamMenu_X ); | 1042 | action->addTo( beamMenu_X ); |
1032 | connect( action, SIGNAL( activated() ), | 1043 | connect( action, SIGNAL( activated() ), |
1033 | mView->viewManager(), SLOT( slotprintWNV() ) ); | 1044 | mView->viewManager(), SLOT( slotprintWNV() ) ); |
1034 | 1045 | ||
1035 | action = new QAction( i18n("Print selected event / todo..."),icon,i18n("Print selected event / todo..."), 0, this ); | 1046 | action = new QAction( i18n("Print selected event / todo..."),icon,i18n("Print selected event / todo..."), 0, this ); |
1036 | action->addTo( beamMenu_X ); | 1047 | action->addTo( beamMenu_X ); |
1037 | connect( action, SIGNAL( activated() ), | 1048 | connect( action, SIGNAL( activated() ), |
1038 | mView, SLOT( slotprintSelInc() ) ); | 1049 | mView, SLOT( slotprintSelInc() ) ); |
1039 | 1050 | ||
1040 | 1051 | ||
1041 | importMenu->insertItem( i18n("Print"), beamMenu_X ); | 1052 | importMenu->insertItem( i18n("Print"), beamMenu_X ); |
1042 | #endif | 1053 | #endif |
1043 | importMenu->insertSeparator(); | 1054 | importMenu->insertSeparator(); |
1044 | action = new QAction( "manage cat", i18n("Manage new categories..."), 0, | 1055 | action = new QAction( "manage cat", i18n("Manage new categories..."), 0, |
1045 | this ); | 1056 | this ); |
1046 | action->addTo( importMenu ); | 1057 | action->addTo( importMenu ); |
1047 | connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); | 1058 | connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); |
1048 | importMenu->insertSeparator(); | 1059 | importMenu->insertSeparator(); |
1049 | action = new QAction( "beam all", i18n("Save"), 0, | 1060 | action = new QAction( "beam all", i18n("Save"), 0, |
1050 | this ); | 1061 | this ); |
1051 | action->addTo( importMenu ); | 1062 | action->addTo( importMenu ); |
1052 | connect( action, SIGNAL( activated() ), this, SLOT( save() ) ); | 1063 | connect( action, SIGNAL( activated() ), this, SLOT( save() ) ); |
1053 | action = new QAction( "beam all", i18n("Exit (+save)"), 0, | 1064 | action = new QAction( "beam all", i18n("Exit (+save)"), 0, |
1054 | this ); | 1065 | this ); |
1055 | action->addTo( importMenu ); | 1066 | action->addTo( importMenu ); |
1056 | connect( action, SIGNAL( activated() ), this, SLOT( close() ) ); | 1067 | connect( action, SIGNAL( activated() ), this, SLOT( close() ) ); |
1057 | 1068 | ||
1058 | //menuBar->insertItem( "Configure",configureMenu ); | 1069 | //menuBar->insertItem( "Configure",configureMenu ); |
1059 | //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); | 1070 | //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); |
1060 | icon = loadPixmap( "korganizer/korganizer" ); | 1071 | icon = loadPixmap( "korganizer/korganizer" ); |
1061 | 1072 | ||
1062 | action = new QAction( "Whats New", i18n("What's new?"), 0,this ); | 1073 | action = new QAction( "Whats New", i18n("What's new?"), 0,this ); |
1063 | action->addTo( helpMenu ); | 1074 | action->addTo( helpMenu ); |
1064 | connect( action, SIGNAL( activated() ), | 1075 | connect( action, SIGNAL( activated() ), |
1065 | SLOT( whatsNew() ) ); | 1076 | SLOT( whatsNew() ) ); |
1066 | action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this ); | 1077 | action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this ); |
1067 | action->addTo( helpMenu ); | 1078 | action->addTo( helpMenu ); |
1068 | connect( action, SIGNAL( activated() ), | 1079 | connect( action, SIGNAL( activated() ), |
1069 | SLOT( features() ) ); | 1080 | SLOT( features() ) ); |
1070 | action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this ); | 1081 | action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this ); |
1071 | action->addTo( helpMenu ); | 1082 | action->addTo( helpMenu ); |
1072 | connect( action, SIGNAL( activated() ), | 1083 | connect( action, SIGNAL( activated() ), |
1073 | SLOT( keyBindings() ) ); | 1084 | SLOT( keyBindings() ) ); |
1074 | action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this ); | 1085 | action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this ); |
1075 | action->addTo( helpMenu ); | 1086 | action->addTo( helpMenu ); |
1076 | connect( action, SIGNAL( activated() ), | 1087 | connect( action, SIGNAL( activated() ), |
1077 | SLOT( synchowto() ) ); | 1088 | SLOT( synchowto() ) ); |
1078 | action = new QAction( "KDE Sync Howto", i18n("KDE Sync HowTo..."), 0,this ); | 1089 | action = new QAction( "KDE Sync Howto", i18n("KDE Sync HowTo..."), 0,this ); |
1079 | action->addTo( helpMenu ); | 1090 | action->addTo( helpMenu ); |
1080 | connect( action, SIGNAL( activated() ), | 1091 | connect( action, SIGNAL( activated() ), |
1081 | SLOT( kdesynchowto() ) ); | 1092 | SLOT( kdesynchowto() ) ); |
1082 | action = new QAction( "Multi Sync Howto", i18n("Multi Sync HowTo..."), 0,this ); | 1093 | action = new QAction( "Multi Sync Howto", i18n("Multi Sync HowTo..."), 0,this ); |
1083 | action->addTo( helpMenu ); | 1094 | action->addTo( helpMenu ); |
1084 | connect( action, SIGNAL( activated() ), | 1095 | connect( action, SIGNAL( activated() ), |
1085 | SLOT( multisynchowto() ) ); | 1096 | SLOT( multisynchowto() ) ); |
1086 | action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this ); | 1097 | action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this ); |
1087 | action->addTo( helpMenu ); | 1098 | action->addTo( helpMenu ); |
1088 | connect( action, SIGNAL( activated() ), | 1099 | connect( action, SIGNAL( activated() ), |
1089 | SLOT( aboutAutoSaving() ) ); | 1100 | SLOT( aboutAutoSaving() ) ); |
1090 | action = new QAction( "Problemd", i18n("Known Problems..."), 0,this ); | 1101 | action = new QAction( "Problemd", i18n("Known Problems..."), 0,this ); |
1091 | action->addTo( helpMenu ); | 1102 | action->addTo( helpMenu ); |
1092 | connect( action, SIGNAL( activated() ), | 1103 | connect( action, SIGNAL( activated() ), |
1093 | SLOT( aboutKnownBugs() ) ); | 1104 | SLOT( aboutKnownBugs() ) ); |
1094 | action = new QAction( "Translate Howto", i18n("User translation..."), 0,this ); | 1105 | action = new QAction( "Translate Howto", i18n("User translation..."), 0,this ); |
1095 | action->addTo( helpMenu ); | 1106 | action->addTo( helpMenu ); |
1096 | connect( action, SIGNAL( activated() ), | 1107 | connect( action, SIGNAL( activated() ), |
1097 | SLOT( usertrans() ) ); | 1108 | SLOT( usertrans() ) ); |
1098 | action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this ); | 1109 | action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this ); |
1099 | action->addTo( helpMenu ); | 1110 | action->addTo( helpMenu ); |
1100 | connect( action, SIGNAL( activated() ), | 1111 | connect( action, SIGNAL( activated() ), |
1101 | SLOT( faq() ) ); | 1112 | SLOT( faq() ) ); |
1102 | action = new QAction( "licence", i18n("Licence..."), 0, this ); | 1113 | action = new QAction( "licence", i18n("Licence..."), 0, this ); |
1103 | action->addTo( helpMenu ); | 1114 | action->addTo( helpMenu ); |
1104 | connect( action, SIGNAL( activated() ), | 1115 | connect( action, SIGNAL( activated() ), |
1105 | SLOT( licence() ) ); | 1116 | SLOT( licence() ) ); |
1106 | action = new QAction( "about", i18n("About..."), 0, this ); | 1117 | action = new QAction( "about", i18n("About..."), 0, this ); |
1107 | action->addTo( helpMenu ); | 1118 | action->addTo( helpMenu ); |
1108 | connect( action, SIGNAL( activated() ), | 1119 | connect( action, SIGNAL( activated() ), |
1109 | SLOT( about() ) ); | 1120 | SLOT( about() ) ); |
1110 | //menuBar->insertSeparator(); | 1121 | //menuBar->insertSeparator(); |
1111 | 1122 | ||
1112 | // ****************************************************** | 1123 | // ****************************************************** |
1113 | // menubar icons | 1124 | // menubar icons |
1114 | 1125 | ||
1115 | 1126 | ||
1116 | 1127 | ||
1117 | //menuBar->insertItem( iconToolBar ); | 1128 | //menuBar->insertItem( iconToolBar ); |
1118 | //xdays_action | 1129 | //xdays_action |
1119 | if (p-> mShowIconNewEvent) | 1130 | if (p-> mShowIconNewEvent) |
1120 | ne_action->addTo( iconToolBar ); | 1131 | ne_action->addTo( iconToolBar ); |
1121 | if (p->mShowIconNewTodo ) | 1132 | if (p->mShowIconNewTodo ) |
1122 | nt_action->addTo( iconToolBar ); | 1133 | nt_action->addTo( iconToolBar ); |
1123 | if (p-> mShowIconSearch) | 1134 | if (p-> mShowIconSearch) |
1124 | search_action->addTo( iconToolBar ); | 1135 | search_action->addTo( iconToolBar ); |
1125 | if (p-> mShowIconWhatsThis) | 1136 | if (p-> mShowIconWhatsThis) |
1126 | QWhatsThis::whatsThisButton ( iconToolBar ); | 1137 | QWhatsThis::whatsThisButton ( iconToolBar ); |
1127 | if (p-> mShowIconNext) | 1138 | if (p-> mShowIconNext) |
1128 | whatsnext_action->addTo( viewToolBar ); | 1139 | whatsnext_action->addTo( viewToolBar ); |
1129 | if (p-> mShowIconNextDays) | 1140 | if (p-> mShowIconNextDays) |
1130 | xdays_action->addTo( viewToolBar ); | 1141 | xdays_action->addTo( viewToolBar ); |
1131 | if (p-> mShowIconJournal) | 1142 | if (p-> mShowIconJournal) |
1132 | viewjournal_action->addTo( viewToolBar ); | 1143 | viewjournal_action->addTo( viewToolBar ); |
1133 | if (p-> mShowIconDay1) | 1144 | if (p-> mShowIconDay1) |
1134 | day1_action->addTo( viewToolBar ); | 1145 | day1_action->addTo( viewToolBar ); |
1135 | if (p-> mShowIconDay5) | 1146 | if (p-> mShowIconDay5) |
1136 | day5_action->addTo( viewToolBar ); | 1147 | day5_action->addTo( viewToolBar ); |
1137 | if (p-> mShowIconDay7) | 1148 | if (p-> mShowIconDay7) |
1138 | day7_action->addTo( viewToolBar ); | 1149 | day7_action->addTo( viewToolBar ); |
1139 | if (p-> mShowIconDay6) | 1150 | if (p-> mShowIconDay6) |
1140 | day6_action->addTo( viewToolBar ); | 1151 | day6_action->addTo( viewToolBar ); |
1141 | if (p-> mShowIconMonth) | 1152 | if (p-> mShowIconMonth) |
1142 | month_action->addTo( viewToolBar ); | 1153 | month_action->addTo( viewToolBar ); |
1143 | if (p-> mShowIconList) | 1154 | if (p-> mShowIconList) |
1144 | showlist_action->addTo( viewToolBar ); | 1155 | showlist_action->addTo( viewToolBar ); |
1145 | if (p-> mShowIconTodoview) | 1156 | if (p-> mShowIconTodoview) |
1146 | todoview_action->addTo( viewToolBar ); | 1157 | todoview_action->addTo( viewToolBar ); |
1147 | 1158 | ||
1148 | icon = loadPixmap( pathString + "2leftarrowB" ); | 1159 | icon = loadPixmap( pathString + "2leftarrowB" ); |
1149 | configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200); | 1160 | configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200); |
1150 | if (p-> mShowIconBackFast) { | 1161 | if (p-> mShowIconBackFast) { |
1151 | action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this ); | 1162 | action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this ); |
1152 | connect( action, SIGNAL( activated() ), | 1163 | connect( action, SIGNAL( activated() ), |
1153 | mView, SLOT( goPreviousMonth() ) ); | 1164 | mView, SLOT( goPreviousMonth() ) ); |
1154 | action->addTo( navigatorToolBar ); | 1165 | action->addTo( navigatorToolBar ); |
1155 | } | 1166 | } |
1156 | icon = loadPixmap( pathString + "1leftarrowB" ); | 1167 | icon = loadPixmap( pathString + "1leftarrowB" ); |
1157 | configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210); | 1168 | configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210); |
1158 | if (p-> mShowIconBack) { | 1169 | if (p-> mShowIconBack) { |
1159 | action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this ); | 1170 | action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this ); |
1160 | connect( action, SIGNAL( activated() ), | 1171 | connect( action, SIGNAL( activated() ), |
1161 | mView, SLOT( goPrevious() ) ); | 1172 | mView, SLOT( goPrevious() ) ); |
1162 | action->addTo( navigatorToolBar ); | 1173 | action->addTo( navigatorToolBar ); |
1163 | } | 1174 | } |
1164 | icon = loadPixmap( pathString + "today" ); | 1175 | icon = loadPixmap( pathString + "today" ); |
1165 | configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130); | 1176 | configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130); |
1166 | if (p-> mShowIconToday) | 1177 | if (p-> mShowIconToday) |
1167 | today_action->addTo( navigatorToolBar ); | 1178 | today_action->addTo( navigatorToolBar ); |
1168 | icon = loadPixmap( pathString + "1rightarrowB" ); | 1179 | icon = loadPixmap( pathString + "1rightarrowB" ); |
1169 | configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220); | 1180 | configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220); |
1170 | if (p-> mShowIconForward) { | 1181 | if (p-> mShowIconForward) { |
1171 | action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this ); | 1182 | action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this ); |
1172 | connect( action, SIGNAL( activated() ), | 1183 | connect( action, SIGNAL( activated() ), |
1173 | mView, SLOT( goNext() ) ); | 1184 | mView, SLOT( goNext() ) ); |
1174 | action->addTo( navigatorToolBar ); | 1185 | action->addTo( navigatorToolBar ); |
1175 | } | 1186 | } |
1176 | icon = loadPixmap( pathString + "2rightarrowB" ); | 1187 | icon = loadPixmap( pathString + "2rightarrowB" ); |
1177 | configureToolBarMenu->insertItem(icon, i18n("Next month"), 230); | 1188 | configureToolBarMenu->insertItem(icon, i18n("Next month"), 230); |
1178 | if (p-> mShowIconForwardFast) { | 1189 | if (p-> mShowIconForwardFast) { |
1179 | action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this ); | 1190 | action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this ); |
1180 | connect( action, SIGNAL( activated() ), | 1191 | connect( action, SIGNAL( activated() ), |
1181 | mView, SLOT( goNextMonth() ) ); | 1192 | mView, SLOT( goNextMonth() ) ); |
1182 | action->addTo( navigatorToolBar ); | 1193 | action->addTo( navigatorToolBar ); |
1183 | } | 1194 | } |
1184 | 1195 | ||
1185 | 1196 | ||
1186 | configureToolBarMenu->insertItem(i18n("What's This?"), 300, 6); | 1197 | configureToolBarMenu->insertItem(i18n("What's This?"), 300, 6); |
1187 | 1198 | ||
1188 | 1199 | ||
1189 | if ( p->mShowIconNavigator ) configureToolBarMenu->setItemChecked( 22 , true); | 1200 | if ( p->mShowIconNavigator ) configureToolBarMenu->setItemChecked( 22 , true); |
1190 | if ( p->mShowIconAllday ) configureToolBarMenu->setItemChecked( 24 , true); | 1201 | if ( p->mShowIconAllday ) configureToolBarMenu->setItemChecked( 24 , true); |
1191 | if ( p->mShowIconFilterview ) configureToolBarMenu->setItemChecked( 26 , true); | 1202 | if ( p->mShowIconFilterview ) configureToolBarMenu->setItemChecked( 26 , true); |
1192 | if ( p->mShowIconToggleFull ) configureToolBarMenu->setItemChecked( 28 , true); | 1203 | if ( p->mShowIconToggleFull ) configureToolBarMenu->setItemChecked( 28 , true); |
1193 | 1204 | ||
1194 | if (p-> mShowIconNewEvent) | 1205 | if (p-> mShowIconNewEvent) |
1195 | configureToolBarMenu->setItemChecked( 10, true ); | 1206 | configureToolBarMenu->setItemChecked( 10, true ); |
1196 | if (p->mShowIconNewTodo ) | 1207 | if (p->mShowIconNewTodo ) |
1197 | configureToolBarMenu->setItemChecked( 20, true ); | 1208 | configureToolBarMenu->setItemChecked( 20, true ); |
1198 | if (p-> mShowIconSearch) | 1209 | if (p-> mShowIconSearch) |
1199 | configureToolBarMenu->setItemChecked( 120, true ); | 1210 | configureToolBarMenu->setItemChecked( 120, true ); |
1200 | if (p-> mShowIconList) | 1211 | if (p-> mShowIconList) |
1201 | configureToolBarMenu->setItemChecked( 30, true ); | 1212 | configureToolBarMenu->setItemChecked( 30, true ); |
1202 | if (p-> mShowIconDay1) | 1213 | if (p-> mShowIconDay1) |
1203 | configureToolBarMenu->setItemChecked( 40, true ); | 1214 | configureToolBarMenu->setItemChecked( 40, true ); |
1204 | if (p-> mShowIconDay5) | 1215 | if (p-> mShowIconDay5) |
1205 | configureToolBarMenu->setItemChecked( 50, true ); | 1216 | configureToolBarMenu->setItemChecked( 50, true ); |
1206 | if (p-> mShowIconDay6) | 1217 | if (p-> mShowIconDay6) |
1207 | configureToolBarMenu->setItemChecked( 75, true ); | 1218 | configureToolBarMenu->setItemChecked( 75, true ); |
1208 | if (p-> mShowIconDay7) | 1219 | if (p-> mShowIconDay7) |
1209 | configureToolBarMenu->setItemChecked( 60, true ); | 1220 | configureToolBarMenu->setItemChecked( 60, true ); |
1210 | if (p-> mShowIconMonth) | 1221 | if (p-> mShowIconMonth) |
1211 | configureToolBarMenu->setItemChecked( 70, true ); | 1222 | configureToolBarMenu->setItemChecked( 70, true ); |
1212 | if (p-> mShowIconTodoview) | 1223 | if (p-> mShowIconTodoview) |
1213 | configureToolBarMenu->setItemChecked( 80, true ); | 1224 | configureToolBarMenu->setItemChecked( 80, true ); |
1214 | if (p-> mShowIconBackFast) | 1225 | if (p-> mShowIconBackFast) |
1215 | configureToolBarMenu->setItemChecked( 200, true ); | 1226 | configureToolBarMenu->setItemChecked( 200, true ); |
1216 | if (p-> mShowIconBack) | 1227 | if (p-> mShowIconBack) |
1217 | configureToolBarMenu->setItemChecked( 210, true ); | 1228 | configureToolBarMenu->setItemChecked( 210, true ); |
1218 | if (p-> mShowIconToday) | 1229 | if (p-> mShowIconToday) |
1219 | configureToolBarMenu->setItemChecked( 130, true ); | 1230 | configureToolBarMenu->setItemChecked( 130, true ); |
1220 | if (p-> mShowIconForward) | 1231 | if (p-> mShowIconForward) |
1221 | configureToolBarMenu->setItemChecked( 220, true ); | 1232 | configureToolBarMenu->setItemChecked( 220, true ); |
1222 | if (p-> mShowIconForwardFast) | 1233 | if (p-> mShowIconForwardFast) |
1223 | configureToolBarMenu->setItemChecked( 230, true ); | 1234 | configureToolBarMenu->setItemChecked( 230, true ); |
1224 | if (p-> mShowIconNextDays) | 1235 | if (p-> mShowIconNextDays) |
1225 | configureToolBarMenu->setItemChecked( 100, true ); | 1236 | configureToolBarMenu->setItemChecked( 100, true ); |
1226 | if (p-> mShowIconNext) | 1237 | if (p-> mShowIconNext) |
1227 | configureToolBarMenu->setItemChecked( 110, true ); | 1238 | configureToolBarMenu->setItemChecked( 110, true ); |
1228 | if (p-> mShowIconJournal) | 1239 | if (p-> mShowIconJournal) |
@@ -1389,1024 +1400,1037 @@ void MainWindow::multisynchowto() | |||
1389 | { | 1400 | { |
1390 | KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); | 1401 | KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); |
1391 | } | 1402 | } |
1392 | void MainWindow::synchowto() | 1403 | void MainWindow::synchowto() |
1393 | { | 1404 | { |
1394 | KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); | 1405 | KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); |
1395 | } | 1406 | } |
1396 | void MainWindow::faq() | 1407 | void MainWindow::faq() |
1397 | { | 1408 | { |
1398 | KApplication::showFile( i18n("KO/Pi FAQ"), "kdepim/korganizer/kopiFAQ.txt" ); | 1409 | KApplication::showFile( i18n("KO/Pi FAQ"), "kdepim/korganizer/kopiFAQ.txt" ); |
1399 | 1410 | ||
1400 | } | 1411 | } |
1401 | void MainWindow::whatsNew() | 1412 | void MainWindow::whatsNew() |
1402 | { | 1413 | { |
1403 | KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); | 1414 | KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); |
1404 | 1415 | ||
1405 | } | 1416 | } |
1406 | void MainWindow::licence() | 1417 | void MainWindow::licence() |
1407 | { | 1418 | { |
1408 | KApplication::showLicence(); | 1419 | KApplication::showLicence(); |
1409 | 1420 | ||
1410 | } | 1421 | } |
1411 | void MainWindow::about() | 1422 | void MainWindow::about() |
1412 | { | 1423 | { |
1413 | QString version; | 1424 | QString version; |
1414 | #include <../version> | 1425 | #include <../version> |
1415 | QMessageBox::about( this, i18n("About KOrganizer/Pi"), | 1426 | QMessageBox::about( this, i18n("About KOrganizer/Pi"), |
1416 | i18n("KOrganizer/Platform-independent\n") + | 1427 | i18n("KOrganizer/Platform-independent\n") + |
1417 | "(KO/Pi) " + version + " - " + | 1428 | "(KO/Pi) " + version + " - " + |
1418 | 1429 | ||
1419 | #ifdef DESKTOP_VERSION | 1430 | #ifdef DESKTOP_VERSION |
1420 | i18n("Desktop Edition\n") + | 1431 | i18n("Desktop Edition\n") + |
1421 | #else | 1432 | #else |
1422 | i18n("PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n") + | 1433 | i18n("PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n") + |
1423 | #endif | 1434 | #endif |
1424 | i18n("(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!") ); | 1435 | i18n("(c)2004 Lutz Rogowski (rogowski@kde.org)\nKO/Pi is based on KOrganizer\n(c)2002,2003 Cornelius Schumacher\n(schumacher@kde.org) and the KDE team.\nKOrganizer/Pi is licensed under the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.pi-sync.info --- www.korganizer.org\nSpecial thanks to Michael and Ben\nfor intensive testing!") ); |
1425 | } | 1436 | } |
1426 | void MainWindow::keyBindings() | 1437 | void MainWindow::keyBindings() |
1427 | { | 1438 | { |
1428 | QString cap = i18n("KO/Pi Keys + Colors"); | 1439 | QString cap = i18n("KO/Pi Keys + Colors"); |
1429 | QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + | 1440 | QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + |
1430 | i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ | 1441 | i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ |
1431 | i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + | 1442 | i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + |
1432 | i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ | 1443 | i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ |
1433 | i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ | 1444 | i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ |
1434 | i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ | 1445 | i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ |
1435 | i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ | 1446 | i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ |
1436 | i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ | 1447 | i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ |
1437 | i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ | 1448 | i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ |
1438 | i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ | 1449 | i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ |
1439 | i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ | 1450 | i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ |
1440 | i18n("<p><b>K</b>: Week view in Month view syle</p>\n")+ | 1451 | i18n("<p><b>K</b>: Week view in Month view syle</p>\n")+ |
1441 | i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ | 1452 | i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ |
1442 | i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ | 1453 | i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ |
1443 | i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ | 1454 | i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ |
1444 | i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ | 1455 | i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ |
1445 | i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ | 1456 | i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ |
1446 | i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ | 1457 | i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ |
1447 | i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ | 1458 | i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ |
1448 | i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ | 1459 | i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ |
1449 | i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ | 1460 | i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ |
1450 | i18n("<p><h3>In agenda view:</h3></p>\n") + | 1461 | i18n("<p><h3>In agenda view:</h3></p>\n") + |
1451 | i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ | 1462 | i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ |
1452 | i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ | 1463 | i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ |
1453 | i18n("<p><h3>In todo view:</h3></p>\n") + | 1464 | i18n("<p><h3>In todo view:</h3></p>\n") + |
1454 | i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+ | 1465 | i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+ |
1455 | i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+ | 1466 | i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+ |
1456 | i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+ | 1467 | i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+ |
1457 | i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ | 1468 | i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ |
1458 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ | 1469 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ |
1459 | i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ | 1470 | i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ |
1460 | i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ | 1471 | i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ |
1461 | i18n("<p><h3>In list view:</h3></p>\n") + | 1472 | i18n("<p><h3>In list view:</h3></p>\n") + |
1462 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ | 1473 | i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ |
1463 | i18n("<p><b>return</b>: Select item+one step down</p>\n")+ | 1474 | i18n("<p><b>return</b>: Select item+one step down</p>\n")+ |
1464 | i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ | 1475 | i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ |
1465 | i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ | 1476 | i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ |
1466 | i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ | 1477 | i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ |
1467 | i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ | 1478 | i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ |
1468 | i18n("<p><h3>In event/todo viewer:</h3></p>\n") + | 1479 | i18n("<p><h3>In event/todo viewer:</h3></p>\n") + |
1469 | i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ | 1480 | i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ |
1470 | i18n("<p><b>A</b>: Show agenda view.</p>\n")+ | 1481 | i18n("<p><b>A</b>: Show agenda view.</p>\n")+ |
1471 | i18n("<p><b>E</b>: Edit item</p>\n") + | 1482 | i18n("<p><b>E</b>: Edit item</p>\n") + |
1472 | i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + | 1483 | i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + |
1473 | i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + | 1484 | i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + |
1474 | i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ | 1485 | i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ |
1475 | i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ | 1486 | i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ |
1476 | i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ | 1487 | i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ |
1477 | i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ | 1488 | i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ |
1478 | i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ | 1489 | i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ |
1479 | i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + | 1490 | i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + |
1480 | i18n("<p><b>White</b>: Item readonly</p>\n"); | 1491 | i18n("<p><b>White</b>: Item readonly</p>\n"); |
1481 | displayText( text, cap); | 1492 | displayText( text, cap); |
1482 | } | 1493 | } |
1483 | void MainWindow::aboutAutoSaving() | 1494 | void MainWindow::aboutAutoSaving() |
1484 | { | 1495 | { |
1485 | QString text = i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"); | 1496 | QString text = i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"); |
1486 | 1497 | ||
1487 | KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text); | 1498 | KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text); |
1488 | 1499 | ||
1489 | } | 1500 | } |
1490 | void MainWindow::aboutKnownBugs() | 1501 | void MainWindow::aboutKnownBugs() |
1491 | { | 1502 | { |
1492 | QMessageBox* msg; | 1503 | QMessageBox* msg; |
1493 | msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), | 1504 | msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), |
1494 | i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ | 1505 | i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ |
1495 | i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ | 1506 | i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ |
1496 | i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n") + | 1507 | i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n") + |
1497 | i18n("\nor report them in the bugtracker on\n") + | 1508 | i18n("\nor report them in the bugtracker on\n") + |
1498 | i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), | 1509 | i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), |
1499 | QMessageBox::NoIcon, | 1510 | QMessageBox::NoIcon, |
1500 | QMessageBox::Ok, | 1511 | QMessageBox::Ok, |
1501 | QMessageBox::NoButton, | 1512 | QMessageBox::NoButton, |
1502 | QMessageBox::NoButton); | 1513 | QMessageBox::NoButton); |
1503 | msg->exec(); | 1514 | msg->exec(); |
1504 | delete msg; | 1515 | delete msg; |
1505 | 1516 | ||
1506 | } | 1517 | } |
1507 | 1518 | ||
1508 | QString MainWindow::defaultFileName() | 1519 | QString MainWindow::defaultFileName() |
1509 | { | 1520 | { |
1510 | return locateLocal( "data", "korganizer/mycalendar.ics" ); | 1521 | return locateLocal( "data", "korganizer/mycalendar.ics" ); |
1511 | } | 1522 | } |
1512 | QString MainWindow::syncFileName() | 1523 | QString MainWindow::syncFileName() |
1513 | { | 1524 | { |
1514 | #ifdef DESKTOP_VERSION | 1525 | #ifdef DESKTOP_VERSION |
1515 | return locateLocal( "tmp", "synccalendar.ics" ); | 1526 | return locateLocal( "tmp", "synccalendar.ics" ); |
1516 | #else | 1527 | #else |
1517 | return QString( "/tmp/synccalendar.ics" ); | 1528 | return QString( "/tmp/synccalendar.ics" ); |
1518 | #endif | 1529 | #endif |
1519 | } | 1530 | } |
1520 | #include "koglobals.h" | 1531 | #include "koglobals.h" |
1521 | #include <kcalendarsystem.h> | 1532 | #include <kcalendarsystem.h> |
1522 | void MainWindow::updateWeek(QDate seda) | 1533 | void MainWindow::updateWeek(QDate seda) |
1523 | { | 1534 | { |
1524 | int weekNum = KGlobal::locale()->weekNum ( seda ); | 1535 | int weekNum = KGlobal::locale()->weekNum ( seda ); |
1525 | mWeekPixmap.fill( mWeekBgColor ); | 1536 | mWeekPixmap.fill( mWeekBgColor ); |
1526 | QPainter p ( &mWeekPixmap ); | 1537 | QPainter p ( &mWeekPixmap ); |
1527 | p.setFont( mWeekFont ); | 1538 | p.setFont( mWeekFont ); |
1528 | p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) ); | 1539 | p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) ); |
1529 | p.end(); | 1540 | p.end(); |
1530 | QIconSet icon3 ( mWeekPixmap ); | 1541 | QIconSet icon3 ( mWeekPixmap ); |
1531 | mWeekAction->setIconSet ( icon3 ); | 1542 | mWeekAction->setIconSet ( icon3 ); |
1532 | 1543 | ||
1533 | } | 1544 | } |
1534 | void MainWindow::updateWeekNum(const DateList &selectedDates) | 1545 | void MainWindow::updateWeekNum(const DateList &selectedDates) |
1535 | { | 1546 | { |
1536 | updateWeek( selectedDates.first() ); | 1547 | updateWeek( selectedDates.first() ); |
1537 | } | 1548 | } |
1538 | void MainWindow::processIncidenceSelection( Incidence *incidence ) | 1549 | void MainWindow::processIncidenceSelection( Incidence *incidence ) |
1539 | { | 1550 | { |
1540 | 1551 | ||
1541 | if ( !incidence ) { | 1552 | if ( !incidence ) { |
1542 | enableIncidenceActions( false ); | 1553 | enableIncidenceActions( false ); |
1543 | 1554 | ||
1544 | mNewSubTodoAction->setEnabled( false ); | 1555 | mNewSubTodoAction->setEnabled( false ); |
1545 | setCaptionToDates(); | 1556 | setCaptionToDates(); |
1546 | return; | 1557 | return; |
1547 | 1558 | ||
1548 | } | 1559 | } |
1549 | 1560 | ||
1550 | //KGlobal::locale()->formatDateTime(nextA, true); | 1561 | //KGlobal::locale()->formatDateTime(nextA, true); |
1551 | QString startString = ""; | 1562 | QString startString = ""; |
1552 | if ( incidence->type() != "Todo" ) { | 1563 | if ( incidence->type() != "Todo" ) { |
1553 | if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { | 1564 | if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { |
1554 | if ( incidence->doesFloat() ) { | 1565 | if ( incidence->doesFloat() ) { |
1555 | startString += ": "+incidence->dtStartDateStr( true ); | 1566 | startString += ": "+incidence->dtStartDateStr( true ); |
1556 | startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); | 1567 | startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); |
1557 | 1568 | ||
1558 | } else { | 1569 | } else { |
1559 | startString = ": "+incidence->dtStartStr(true); | 1570 | startString = ": "+incidence->dtStartStr(true); |
1560 | startString += " --- "+((Event*)incidence)->dtEndStr(true); | 1571 | startString += " --- "+((Event*)incidence)->dtEndStr(true); |
1561 | 1572 | ||
1562 | } | 1573 | } |
1563 | 1574 | ||
1564 | } else { | 1575 | } else { |
1565 | if ( incidence->dtStart().time() != incidence->dtEnd().time() ) | 1576 | if ( incidence->dtStart().time() != incidence->dtEnd().time() ) |
1566 | startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ | 1577 | startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ |
1567 | "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); | 1578 | "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); |
1568 | if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) { | 1579 | if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) { |
1569 | bool ok; | 1580 | bool ok; |
1570 | QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok ); | 1581 | QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok ); |
1571 | if ( ok ) { | 1582 | if ( ok ) { |
1572 | int years = noc.date().year() - incidence->dtStart().date().year(); | 1583 | int years = noc.date().year() - incidence->dtStart().date().year(); |
1573 | startString += i18n(" (%1 y.)"). arg( years ); | 1584 | startString += i18n(" (%1 y.)"). arg( years ); |
1574 | } | 1585 | } |
1575 | } | 1586 | } |
1576 | else | 1587 | else |
1577 | startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); | 1588 | startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); |
1578 | } | 1589 | } |
1579 | 1590 | ||
1580 | } | 1591 | } |
1581 | else | 1592 | else |
1582 | startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); | 1593 | startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); |
1583 | if ( !incidence->location().isEmpty() ) | 1594 | if ( !incidence->location().isEmpty() ) |
1584 | startString += " (" +incidence->location()+")"; | 1595 | startString += " (" +incidence->location()+")"; |
1585 | setCaption( incidence->summary()+startString); | 1596 | setCaption( incidence->summary()+startString); |
1586 | 1597 | ||
1587 | enableIncidenceActions( true ); | 1598 | enableIncidenceActions( true ); |
1588 | 1599 | ||
1589 | if ( incidence->type() == "Event" ) { | 1600 | if ( incidence->type() == "Event" ) { |
1590 | mShowAction->setText( i18n("Show Event...") ); | 1601 | mShowAction->setText( i18n("Show Event...") ); |
1591 | mEditAction->setText( i18n("Edit Event...") ); | 1602 | mEditAction->setText( i18n("Edit Event...") ); |
1592 | mDeleteAction->setText( i18n("Delete Event...") ); | 1603 | mDeleteAction->setText( i18n("Delete Event...") ); |
1593 | 1604 | ||
1594 | mNewSubTodoAction->setEnabled( false ); | 1605 | mNewSubTodoAction->setEnabled( false ); |
1595 | } else if ( incidence->type() == "Todo" ) { | 1606 | } else if ( incidence->type() == "Todo" ) { |
1596 | mShowAction->setText( i18n("Show Todo...") ); | 1607 | mShowAction->setText( i18n("Show Todo...") ); |
1597 | mEditAction->setText( i18n("Edit Todo...") ); | 1608 | mEditAction->setText( i18n("Edit Todo...") ); |
1598 | mDeleteAction->setText( i18n("Delete Todo...") ); | 1609 | mDeleteAction->setText( i18n("Delete Todo...") ); |
1599 | 1610 | ||
1600 | mNewSubTodoAction->setEnabled( true ); | 1611 | mNewSubTodoAction->setEnabled( true ); |
1601 | } else { | 1612 | } else { |
1602 | mShowAction->setText( i18n("Show...") ); | 1613 | mShowAction->setText( i18n("Show...") ); |
1603 | mShowAction->setText( i18n("Edit...") ); | 1614 | mShowAction->setText( i18n("Edit...") ); |
1604 | mShowAction->setText( i18n("Delete...") ); | 1615 | mShowAction->setText( i18n("Delete...") ); |
1605 | 1616 | ||
1606 | mNewSubTodoAction->setEnabled( false ); | 1617 | mNewSubTodoAction->setEnabled( false ); |
1607 | } | 1618 | } |
1608 | } | 1619 | } |
1609 | 1620 | ||
1610 | void MainWindow::enableIncidenceActions( bool enabled ) | 1621 | void MainWindow::enableIncidenceActions( bool enabled ) |
1611 | { | 1622 | { |
1612 | mShowAction->setEnabled( enabled ); | 1623 | mShowAction->setEnabled( enabled ); |
1613 | mEditAction->setEnabled( enabled ); | 1624 | mEditAction->setEnabled( enabled ); |
1614 | mDeleteAction->setEnabled( enabled ); | 1625 | mDeleteAction->setEnabled( enabled ); |
1615 | 1626 | ||
1616 | mCloneAction->setEnabled( enabled ); | 1627 | mCloneAction->setEnabled( enabled ); |
1617 | mMoveAction->setEnabled( enabled ); | 1628 | mMoveAction->setEnabled( enabled ); |
1618 | mBeamAction->setEnabled( enabled ); | 1629 | mBeamAction->setEnabled( enabled ); |
1619 | mCancelAction->setEnabled( enabled ); | 1630 | mCancelAction->setEnabled( enabled ); |
1620 | } | 1631 | } |
1621 | 1632 | ||
1622 | void MainWindow::importOL() | 1633 | void MainWindow::importOL() |
1623 | { | 1634 | { |
1624 | #ifdef _OL_IMPORT_ | 1635 | #ifdef _OL_IMPORT_ |
1625 | KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); | 1636 | KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); |
1626 | id->exec(); | 1637 | id->exec(); |
1627 | delete id; | 1638 | delete id; |
1628 | mView->updateView(); | 1639 | mView->updateView(); |
1629 | #endif | 1640 | #endif |
1630 | } | 1641 | } |
1631 | void MainWindow::importBday() | 1642 | void MainWindow::importBday() |
1632 | { | 1643 | { |
1633 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1644 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1634 | i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), | 1645 | i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), |
1635 | i18n("Import!"), i18n("Cancel"), 0, | 1646 | i18n("Import!"), i18n("Cancel"), 0, |
1636 | 0, 1 ); | 1647 | 0, 1 ); |
1637 | if ( result == 0 ) { | 1648 | if ( result == 0 ) { |
1638 | mView->importBday(); | 1649 | mView->importBday(); |
1639 | 1650 | ||
1640 | } | 1651 | } |
1641 | 1652 | ||
1642 | 1653 | ||
1643 | } | 1654 | } |
1644 | void MainWindow::importQtopia() | 1655 | void MainWindow::importQtopia() |
1645 | { | 1656 | { |
1646 | //#ifndef DESKTOP_VERSION | 1657 | //#ifndef DESKTOP_VERSION |
1647 | QString mess = i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"); | 1658 | QString mess = i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"); |
1648 | #ifdef DESKTOP_VERSION | 1659 | #ifdef DESKTOP_VERSION |
1649 | mess += i18n("The content of the following files will be\nimported (located in your home directory (hd)):\n(hd)/Applications/datebook/datebook.xml\n(hd)/Applications/todolist/todolist.xml\nThe following category file will be used:\n(hd)/Settings/Categories.xml"); | 1660 | mess += i18n("The content of the following files will be\nimported (located in your home directory (hd)):\n(hd)/Applications/datebook/datebook.xml\n(hd)/Applications/todolist/todolist.xml\nThe following category file will be used:\n(hd)/Settings/Categories.xml"); |
1650 | #endif | 1661 | #endif |
1651 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mess, | 1662 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mess, |
1652 | i18n("Import!"), i18n("Cancel"), 0, | 1663 | i18n("Import!"), i18n("Cancel"), 0, |
1653 | 0, 1 ); | 1664 | 0, 1 ); |
1654 | if ( result == 0 ) { | 1665 | if ( result == 0 ) { |
1655 | #ifndef DESKTOP_VERSION | 1666 | #ifndef DESKTOP_VERSION |
1656 | QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); | 1667 | QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); |
1657 | QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); | 1668 | QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); |
1658 | QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; | 1669 | QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; |
1659 | #else | 1670 | #else |
1660 | QString datebook = QDir::homeDirPath()+ "/Applications/datebook/datebook.xml"; | 1671 | QString datebook = QDir::homeDirPath()+ "/Applications/datebook/datebook.xml"; |
1661 | QString todolist = QDir::homeDirPath()+ "/Applications/todolist/todolist.xml"; | 1672 | QString todolist = QDir::homeDirPath()+ "/Applications/todolist/todolist.xml"; |
1662 | QString categories = QDir::homeDirPath()+ "/Settings/Categories.xml"; | 1673 | QString categories = QDir::homeDirPath()+ "/Settings/Categories.xml"; |
1663 | #endif | 1674 | #endif |
1664 | mView->importQtopia( categories, datebook, todolist ); | 1675 | mView->importQtopia( categories, datebook, todolist ); |
1665 | } | 1676 | } |
1666 | #if 0 | 1677 | #if 0 |
1667 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 1678 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
1668 | i18n("Not supported \non desktop!\n"), | 1679 | i18n("Not supported \non desktop!\n"), |
1669 | i18n("Ok"), i18n("Cancel"), 0, | 1680 | i18n("Ok"), i18n("Cancel"), 0, |
1670 | 0, 1 ); | 1681 | 0, 1 ); |
1671 | 1682 | ||
1672 | #endif | 1683 | #endif |
1673 | } | 1684 | } |
1674 | 1685 | ||
1675 | void MainWindow::saveOnClose() | 1686 | void MainWindow::saveOnClose() |
1676 | { | 1687 | { |
1677 | KOPrefs *p = KOPrefs::instance(); | 1688 | KOPrefs *p = KOPrefs::instance(); |
1678 | p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); | 1689 | p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); |
1679 | p->mToolBarHorV = ( viewToolBar->orientation () == Qt:: Horizontal ); | 1690 | p->mToolBarHorV = ( viewToolBar->orientation () == Qt:: Horizontal ); |
1680 | p->mToolBarHorN = ( navigatorToolBar->orientation () == Qt:: Horizontal ); | 1691 | p->mToolBarHorN = ( navigatorToolBar->orientation () == Qt:: Horizontal ); |
1681 | if ( filterToolBar ) { | 1692 | if ( filterToolBar ) { |
1682 | p->mToolBarHorF = ( filterToolBar->orientation () == Qt:: Horizontal ); | 1693 | p->mToolBarHorF = ( filterToolBar->orientation () == Qt:: Horizontal ); |
1683 | } | 1694 | } |
1684 | #ifdef DESKTOP_VERSION | 1695 | #ifdef DESKTOP_VERSION |
1685 | 1696 | ||
1686 | QPoint myP; | 1697 | QPoint myP; |
1687 | myP = mapFromGlobal( iconToolBar->mapToGlobal( QPoint( 0,0) ) ); | 1698 | myP = mapFromGlobal( iconToolBar->mapToGlobal( QPoint( 0,0) ) ); |
1688 | if ( p->mToolBarHor ) | 1699 | if ( p->mToolBarHor ) |
1689 | p->mToolBarUp = myP.y() > height()/2; | 1700 | p->mToolBarUp = myP.y() > height()/2; |
1690 | else | 1701 | else |
1691 | p->mToolBarUp = myP.x() > width()/2; | 1702 | p->mToolBarUp = myP.x() > width()/2; |
1692 | myP = mapFromGlobal( viewToolBar->mapToGlobal( QPoint( 0,0) ) ); | 1703 | myP = mapFromGlobal( viewToolBar->mapToGlobal( QPoint( 0,0) ) ); |
1693 | if ( p->mToolBarHorV ) | 1704 | if ( p->mToolBarHorV ) |
1694 | p->mToolBarUpV = myP.y() > height()/2; | 1705 | p->mToolBarUpV = myP.y() > height()/2; |
1695 | else | 1706 | else |
1696 | p->mToolBarUpV = myP.x() > width()/2 ; | 1707 | p->mToolBarUpV = myP.x() > width()/2 ; |
1697 | myP = mapFromGlobal( navigatorToolBar->mapToGlobal( QPoint( 0,0) ) ); | 1708 | myP = mapFromGlobal( navigatorToolBar->mapToGlobal( QPoint( 0,0) ) ); |
1698 | if ( p->mToolBarHorN ) | 1709 | if ( p->mToolBarHorN ) |
1699 | p->mToolBarUpN = myP.y() > height()/2; | 1710 | p->mToolBarUpN = myP.y() > height()/2; |
1700 | else | 1711 | else |
1701 | p->mToolBarUpN = myP.x() > width()/2 ; | 1712 | p->mToolBarUpN = myP.x() > width()/2 ; |
1702 | if ( filterToolBar ) { | 1713 | if ( filterToolBar ) { |
1703 | myP = mapFromGlobal( filterToolBar->mapToGlobal( QPoint( 0,0) ) ); | 1714 | myP = mapFromGlobal( filterToolBar->mapToGlobal( QPoint( 0,0) ) ); |
1704 | if ( p->mToolBarHorF ) | 1715 | if ( p->mToolBarHorF ) |
1705 | p->mToolBarUpF = myP.y() > height()/2; | 1716 | p->mToolBarUpF = myP.y() > height()/2; |
1706 | else | 1717 | else |
1707 | p->mToolBarUpF = myP.x() > width()/2 ; | 1718 | p->mToolBarUpF = myP.x() > width()/2 ; |
1708 | } | 1719 | } |
1709 | #else | 1720 | #else |
1710 | if ( p->mToolBarHor ) | 1721 | if ( p->mToolBarHor ) |
1711 | p->mToolBarUp = iconToolBar->y() > height()/2; | 1722 | p->mToolBarUp = iconToolBar->y() > height()/2; |
1712 | else | 1723 | else |
1713 | p->mToolBarUp = iconToolBar->x() > width()/2; | 1724 | p->mToolBarUp = iconToolBar->x() > width()/2; |
1714 | if ( p->mToolBarHorV ) | 1725 | if ( p->mToolBarHorV ) |
1715 | p->mToolBarUpV = viewToolBar->y() > height()/2; | 1726 | p->mToolBarUpV = viewToolBar->y() > height()/2; |
1716 | else | 1727 | else |
1717 | p->mToolBarUpV = viewToolBar->x() > width()/2 ; | 1728 | p->mToolBarUpV = viewToolBar->x() > width()/2 ; |
1718 | 1729 | ||
1719 | if ( p->mToolBarHorN ) | 1730 | if ( p->mToolBarHorN ) |
1720 | p->mToolBarUpN = navigatorToolBar->y() > height()/2; | 1731 | p->mToolBarUpN = navigatorToolBar->y() > height()/2; |
1721 | else | 1732 | else |
1722 | p->mToolBarUpN = navigatorToolBar->x() > width()/2 ; | 1733 | p->mToolBarUpN = navigatorToolBar->x() > width()/2 ; |
1723 | if ( filterToolBar ) { | 1734 | if ( filterToolBar ) { |
1724 | if ( p->mToolBarHorF ) | 1735 | if ( p->mToolBarHorF ) |
1725 | p->mToolBarUpF = filterToolBar->y() > height()/2; | 1736 | p->mToolBarUpF = filterToolBar->y() > height()/2; |
1726 | else | 1737 | else |
1727 | p->mToolBarUpF = filterToolBar->x() > width()/2 ; | 1738 | p->mToolBarUpF = filterToolBar->x() > width()/2 ; |
1728 | } | 1739 | } |
1729 | #endif | 1740 | #endif |
1730 | 1741 | ||
1731 | 1742 | ||
1732 | mView->writeSettings(); | 1743 | mView->writeSettings(); |
1733 | if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) | 1744 | if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) |
1734 | save(); | 1745 | save(); |
1735 | } | 1746 | } |
1736 | void MainWindow::slotModifiedChanged( bool changed ) | 1747 | void MainWindow::slotModifiedChanged( bool changed ) |
1737 | { | 1748 | { |
1738 | if ( mBlockAtStartup ) | 1749 | if ( mBlockAtStartup ) |
1739 | return; | 1750 | return; |
1740 | 1751 | ||
1741 | int msec; | 1752 | int msec; |
1742 | // we store the changes after 1 minute, | 1753 | // we store the changes after 1 minute, |
1743 | // and for safety reasons after 10 minutes again | 1754 | // and for safety reasons after 10 minutes again |
1744 | if ( !mSyncManager->blockSave() ) | 1755 | if ( !mSyncManager->blockSave() ) |
1745 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; | 1756 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; |
1746 | else | 1757 | else |
1747 | msec = 1000 * 600; | 1758 | msec = 1000 * 600; |
1748 | mSaveTimer.start( msec, true ); // 1 minute | 1759 | mSaveTimer.start( msec, true ); // 1 minute |
1749 | qDebug("KO: Saving File in %d secs!", msec/1000); | 1760 | qDebug("KO: Saving File in %d secs!", msec/1000); |
1750 | mCalendarModifiedFlag = true; | 1761 | mCalendarModifiedFlag = true; |
1751 | } | 1762 | } |
1752 | void MainWindow::saveStopTimer() | 1763 | void MainWindow::saveStopTimer() |
1753 | { | 1764 | { |
1754 | mSaveTimer.stop(); | 1765 | mSaveTimer.stop(); |
1755 | if (mSaveTimer.isActive() ) | 1766 | if (mSaveTimer.isActive() ) |
1756 | qDebug("ti active "); | 1767 | qDebug("ti active "); |
1757 | else | 1768 | else |
1758 | qDebug("KO: Save timer stopped"); | 1769 | qDebug("KO: Save timer stopped"); |
1759 | } | 1770 | } |
1760 | void MainWindow::save() | 1771 | void MainWindow::save() |
1761 | { | 1772 | { |
1762 | if ( !mCalendarModifiedFlag ) { | 1773 | if ( !mCalendarModifiedFlag ) { |
1763 | qDebug("KO: Calendar not modified. Nothing saved."); | 1774 | qDebug("KO: Calendar not modified. Nothing saved."); |
1764 | return; | 1775 | return; |
1765 | } | 1776 | } |
1766 | if ( mSyncManager->blockSave() ) | 1777 | if ( mSyncManager->blockSave() ) |
1767 | return; | 1778 | return; |
1768 | mSyncManager->setBlockSave(true); | 1779 | mSyncManager->setBlockSave(true); |
1769 | if ( mView->checkFileVersion( defaultFileName()) ) { | 1780 | if ( mView->checkFileVersion( defaultFileName()) ) { |
1770 | QTime neededSaveTime = QDateTime::currentDateTime().time(); | 1781 | QTime neededSaveTime = QDateTime::currentDateTime().time(); |
1771 | setCaption(i18n("KO/Pi:Saving Data to File ..." )); | 1782 | setCaption(i18n("KO/Pi:Saving Data to File ..." )); |
1772 | qDebug("KO: Start saving data to file!"); | 1783 | qDebug("KO: Start saving data to file!"); |
1773 | mView->saveCalendar( defaultFileName() ); | 1784 | mView->saveCalendar( defaultFileName() ); |
1774 | mCalendarModifiedFlag = false; | 1785 | mCalendarModifiedFlag = false; |
1775 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); | 1786 | int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); |
1776 | qDebug("KO: Needed %d ms for saving.",msNeeded ); | 1787 | qDebug("KO: Needed %d ms for saving.",msNeeded ); |
1777 | QString savemes; | 1788 | QString savemes; |
1778 | savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); | 1789 | savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); |
1779 | setCaption(savemes); | 1790 | setCaption(savemes); |
1780 | } else | 1791 | } else |
1781 | setCaption(i18n("Saving cancelled!")); | 1792 | setCaption(i18n("Saving cancelled!")); |
1782 | mSyncManager->setBlockSave( false ); | 1793 | mSyncManager->setBlockSave( false ); |
1783 | } | 1794 | } |
1784 | 1795 | ||
1785 | void MainWindow::keyReleaseEvent ( QKeyEvent * e) | 1796 | void MainWindow::keyReleaseEvent ( QKeyEvent * e) |
1786 | { | 1797 | { |
1787 | if ( !e->isAutoRepeat() ) { | 1798 | if ( !e->isAutoRepeat() ) { |
1788 | mFlagKeyPressed = false; | 1799 | mFlagKeyPressed = false; |
1789 | } | 1800 | } |
1790 | } | 1801 | } |
1791 | void MainWindow::keyPressEvent ( QKeyEvent * e ) | 1802 | void MainWindow::keyPressEvent ( QKeyEvent * e ) |
1792 | { | 1803 | { |
1793 | qApp->processEvents(); | 1804 | qApp->processEvents(); |
1794 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { | 1805 | if ( e->isAutoRepeat() && !mFlagKeyPressed ) { |
1795 | e->ignore(); | 1806 | e->ignore(); |
1796 | // qDebug(" ignore %d",e->isAutoRepeat() ); | 1807 | // qDebug(" ignore %d",e->isAutoRepeat() ); |
1797 | return; | 1808 | return; |
1798 | } | 1809 | } |
1799 | if (! e->isAutoRepeat() ) | 1810 | if (! e->isAutoRepeat() ) |
1800 | mFlagKeyPressed = true; | 1811 | mFlagKeyPressed = true; |
1801 | KOPrefs *p = KOPrefs::instance(); | 1812 | KOPrefs *p = KOPrefs::instance(); |
1802 | bool showSelectedDates = false; | 1813 | bool showSelectedDates = false; |
1803 | int size; | 1814 | int size; |
1804 | int pro = 0; | 1815 | int pro = 0; |
1805 | //qDebug("MainWindow::keyPressEvent "); | 1816 | //qDebug("MainWindow::keyPressEvent "); |
1806 | switch ( e->key() ) { | 1817 | switch ( e->key() ) { |
1807 | case Qt::Key_Right: | 1818 | case Qt::Key_Right: |
1808 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) | 1819 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1809 | mView->goNextMonth(); | 1820 | mView->goNextMonth(); |
1810 | else | 1821 | else |
1811 | mView->goNext(); | 1822 | mView->goNext(); |
1812 | showSelectedDates = true; | 1823 | showSelectedDates = true; |
1813 | break; | 1824 | break; |
1814 | case Qt::Key_Left: | 1825 | case Qt::Key_Left: |
1815 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1826 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1816 | mView->goPreviousMonth(); | 1827 | mView->goPreviousMonth(); |
1817 | else | 1828 | else |
1818 | mView->goPrevious(); | 1829 | mView->goPrevious(); |
1819 | showSelectedDates = true; | 1830 | showSelectedDates = true; |
1820 | break; | 1831 | break; |
1821 | case Qt::Key_Down: | 1832 | case Qt::Key_Down: |
1822 | mView->viewManager()->agendaView()->scrollOneHourDown(); | 1833 | mView->viewManager()->agendaView()->scrollOneHourDown(); |
1823 | break; | 1834 | break; |
1824 | case Qt::Key_Up: | 1835 | case Qt::Key_Up: |
1825 | mView->viewManager()->agendaView()->scrollOneHourUp(); | 1836 | mView->viewManager()->agendaView()->scrollOneHourUp(); |
1826 | break; | 1837 | break; |
1827 | case Qt::Key_K: | 1838 | case Qt::Key_K: |
1828 | mView->viewManager()->showMonthViewWeek(); | 1839 | mView->viewManager()->showMonthViewWeek(); |
1829 | break; | 1840 | break; |
1830 | case Qt::Key_I: | 1841 | case Qt::Key_I: |
1831 | mView->showIncidence(); | 1842 | mView->showIncidence(); |
1832 | break; | 1843 | break; |
1833 | case Qt::Key_Delete: | 1844 | case Qt::Key_Delete: |
1834 | case Qt::Key_Backspace: | 1845 | case Qt::Key_Backspace: |
1835 | mView->deleteIncidence(); | 1846 | mView->deleteIncidence(); |
1836 | break; | 1847 | break; |
1837 | case Qt::Key_D: | 1848 | case Qt::Key_D: |
1838 | mView->viewManager()->showDayView(); | 1849 | mView->viewManager()->showDayView(); |
1839 | showSelectedDates = true; | 1850 | showSelectedDates = true; |
1840 | break; | 1851 | break; |
1841 | case Qt::Key_O: | 1852 | case Qt::Key_O: |
1842 | mView->toggleFilerEnabled( ); | 1853 | mView->toggleFilerEnabled( ); |
1843 | break; | 1854 | break; |
1844 | case Qt::Key_0: | 1855 | case Qt::Key_0: |
1845 | case Qt::Key_1: | 1856 | case Qt::Key_1: |
1846 | case Qt::Key_2: | 1857 | case Qt::Key_2: |
1847 | case Qt::Key_3: | 1858 | case Qt::Key_3: |
1848 | case Qt::Key_4: | 1859 | case Qt::Key_4: |
1849 | case Qt::Key_5: | 1860 | case Qt::Key_5: |
1850 | case Qt::Key_6: | 1861 | case Qt::Key_6: |
1851 | case Qt::Key_7: | 1862 | case Qt::Key_7: |
1852 | case Qt::Key_8: | 1863 | case Qt::Key_8: |
1853 | case Qt::Key_9: | 1864 | case Qt::Key_9: |
1854 | pro = e->key()-48; | 1865 | pro = e->key()-48; |
1855 | if ( pro == 0 ) | 1866 | if ( pro == 0 ) |
1856 | pro = 10; | 1867 | pro = 10; |
1857 | if ( e->state() == Qt::ControlButton) | 1868 | if ( e->state() == Qt::ControlButton) |
1858 | pro += 10; | 1869 | pro += 10; |
1859 | break; | 1870 | break; |
1860 | case Qt::Key_M: | 1871 | case Qt::Key_M: |
1861 | mView->viewManager()->showMonthView(); | 1872 | mView->viewManager()->showMonthView(); |
1862 | showSelectedDates = true; | 1873 | showSelectedDates = true; |
1863 | break; | 1874 | break; |
1864 | case Qt::Key_Insert: | 1875 | case Qt::Key_Insert: |
1865 | mView->newEvent(); | 1876 | mView->newEvent(); |
1866 | break; | 1877 | break; |
1867 | case Qt::Key_S : | 1878 | case Qt::Key_S : |
1868 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) | 1879 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1869 | mView->newSubTodo(); | 1880 | mView->newSubTodo(); |
1870 | else | 1881 | else |
1871 | mView->dialogManager()->showSearchDialog(); | 1882 | mView->dialogManager()->showSearchDialog(); |
1872 | break; | 1883 | break; |
1873 | case Qt::Key_Y : | 1884 | case Qt::Key_Y : |
1874 | case Qt::Key_Z : | 1885 | case Qt::Key_Z : |
1875 | mView->viewManager()->showWorkWeekView(); | 1886 | mView->viewManager()->showWorkWeekView(); |
1876 | showSelectedDates = true; | 1887 | showSelectedDates = true; |
1877 | break; | 1888 | break; |
1878 | case Qt::Key_U : | 1889 | case Qt::Key_U : |
1879 | mView->viewManager()->showWeekView(); | 1890 | mView->viewManager()->showWeekView(); |
1880 | showSelectedDates = true; | 1891 | showSelectedDates = true; |
1881 | break; | 1892 | break; |
1882 | case Qt::Key_H : | 1893 | case Qt::Key_H : |
1883 | keyBindings(); | 1894 | keyBindings(); |
1884 | break; | 1895 | break; |
1885 | case Qt::Key_W: | 1896 | case Qt::Key_W: |
1886 | mView->viewManager()->showWhatsNextView(); | 1897 | mView->viewManager()->showWhatsNextView(); |
1887 | break; | 1898 | break; |
1888 | case Qt::Key_L: | 1899 | case Qt::Key_L: |
1889 | mView->viewManager()->showListView(); | 1900 | mView->viewManager()->showListView(); |
1890 | break; | 1901 | break; |
1891 | case Qt::Key_N: | 1902 | case Qt::Key_N: |
1892 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) | 1903 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) |
1893 | mView->viewManager()->showNextView(); | 1904 | mView->viewManager()->showNextView(); |
1894 | else { | 1905 | else { |
1895 | mView->viewManager()->showNextXView(); | 1906 | mView->viewManager()->showNextXView(); |
1896 | showSelectedDates = true; | 1907 | showSelectedDates = true; |
1897 | } | 1908 | } |
1898 | break; | 1909 | break; |
1899 | case Qt::Key_V: | 1910 | case Qt::Key_V: |
1900 | mView->viewManager()->showTodoView(); | 1911 | mView->viewManager()->showTodoView(); |
1901 | break; | 1912 | break; |
1902 | case Qt::Key_C: | 1913 | case Qt::Key_C: |
1903 | mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); | 1914 | mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); |
1904 | break; | 1915 | break; |
1905 | case Qt::Key_P: | 1916 | case Qt::Key_P: |
1906 | mView->showDatePicker( ); | 1917 | mView->showDatePicker( ); |
1907 | break; | 1918 | break; |
1908 | case Qt::Key_F: | 1919 | case Qt::Key_F: |
1909 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1920 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1910 | mView->editFilters(); | 1921 | mView->editFilters(); |
1911 | else | 1922 | else |
1912 | mView->toggleFilter(); | 1923 | mView->toggleFilter(); |
1913 | break; | 1924 | break; |
1914 | case Qt::Key_X: | 1925 | case Qt::Key_X: |
1915 | mView->toggleDateNavigatorWidget(); | 1926 | mView->toggleDateNavigatorWidget(); |
1916 | break; | 1927 | break; |
1917 | case Qt::Key_Space: | 1928 | case Qt::Key_Space: |
1918 | mView->toggleExpand(); | 1929 | mView->toggleExpand(); |
1919 | break; | 1930 | break; |
1920 | case Qt::Key_A: | 1931 | case Qt::Key_A: |
1921 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) | 1932 | if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton ) |
1922 | mView->showNextAlarms(); | 1933 | mView->showNextAlarms(); |
1923 | else | 1934 | else |
1924 | mView->toggleAllDaySize(); | 1935 | mView->toggleAllDaySize(); |
1925 | break; | 1936 | break; |
1926 | case Qt::Key_T: | 1937 | case Qt::Key_T: |
1927 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1938 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1928 | mView->newTodo(); | 1939 | mView->newTodo(); |
1929 | else { | 1940 | else { |
1930 | mView->goToday(); | 1941 | mView->goToday(); |
1931 | showSelectedDates = true; | 1942 | showSelectedDates = true; |
1932 | } | 1943 | } |
1933 | break; | 1944 | break; |
1934 | case Qt::Key_J: | 1945 | case Qt::Key_J: |
1935 | mView->viewManager()->showJournalView(); | 1946 | mView->viewManager()->showJournalView(); |
1936 | break; | 1947 | break; |
1937 | case Qt::Key_B: | 1948 | case Qt::Key_B: |
1938 | mView->editIncidenceDescription();; | 1949 | mView->editIncidenceDescription();; |
1939 | break; | 1950 | break; |
1940 | // case Qt::Key_Return: | 1951 | // case Qt::Key_Return: |
1941 | case Qt::Key_E: | 1952 | case Qt::Key_E: |
1942 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) | 1953 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) |
1943 | mView->newEvent(); | 1954 | mView->newEvent(); |
1944 | else | 1955 | else |
1945 | mView->editIncidence(); | 1956 | mView->editIncidence(); |
1946 | break; | 1957 | break; |
1947 | case Qt::Key_Plus: | 1958 | case Qt::Key_Plus: |
1948 | size = p->mHourSize +2; | 1959 | size = p->mHourSize +2; |
1949 | if ( size <= 22 ) | 1960 | if ( size <= 22 ) |
1950 | configureAgenda( size ); | 1961 | configureAgenda( size ); |
1951 | break; | 1962 | break; |
1952 | case Qt::Key_Minus: | 1963 | case Qt::Key_Minus: |
1953 | size = p->mHourSize - 2; | 1964 | size = p->mHourSize - 2; |
1954 | if ( size >= 4 ) | 1965 | if ( size >= 4 ) |
1955 | configureAgenda( size ); | 1966 | configureAgenda( size ); |
1956 | break; | 1967 | break; |
1957 | 1968 | ||
1958 | 1969 | ||
1959 | default: | 1970 | default: |
1960 | e->ignore(); | 1971 | e->ignore(); |
1961 | } | 1972 | } |
1962 | if ( pro > 0 ) { | 1973 | if ( pro > 0 ) { |
1963 | mView->selectFilter( pro-1 ); | 1974 | mView->selectFilter( pro-1 ); |
1964 | } | 1975 | } |
1965 | if ( showSelectedDates ) { | 1976 | if ( showSelectedDates ) { |
1966 | ;// setCaptionToDates(); | 1977 | ;// setCaptionToDates(); |
1967 | } | 1978 | } |
1968 | 1979 | ||
1969 | } | 1980 | } |
1970 | void MainWindow::fillFilterMenuTB() | 1981 | void MainWindow::fillFilterMenuTB() |
1971 | { | 1982 | { |
1972 | selectFilterMenuTB->clear(); | 1983 | selectFilterMenuTB->clear(); |
1973 | selectFilterMenuTB->insertItem(i18n ( "Edit Filters" ), 0 ); | 1984 | selectFilterMenuTB->insertItem(i18n ( "Edit Filters" ), 0 ); |
1974 | selectFilterMenuTB->insertSeparator(); | 1985 | selectFilterMenuTB->insertSeparator(); |
1975 | selectFilterMenuTB->insertItem(i18n ( "No Filter" ), 1 ); | 1986 | selectFilterMenuTB->insertItem(i18n ( "No Filter" ), 1 ); |
1976 | 1987 | ||
1977 | selectFilterMenuTB->insertSeparator(); | 1988 | selectFilterMenuTB->insertSeparator(); |
1978 | QPtrList<CalFilter> fili = mView->filters(); | 1989 | QPtrList<CalFilter> fili = mView->filters(); |
1979 | CalFilter *curfilter = mView->filterView()->selectedFilter(); | 1990 | CalFilter *curfilter = mView->filterView()->selectedFilter(); |
1980 | CalFilter *filter = fili.first(); | 1991 | CalFilter *filter = fili.first(); |
1981 | int iii = 2; | 1992 | int iii = 2; |
1982 | bool checkitem = mView->filterView()->filtersEnabled(); | 1993 | bool checkitem = mView->filterView()->filtersEnabled(); |
1983 | while(filter) { | 1994 | while(filter) { |
1984 | selectFilterMenuTB->insertItem( filter->name(), iii ); | 1995 | selectFilterMenuTB->insertItem( filter->name(), iii ); |
1985 | if ( filter == curfilter) | 1996 | if ( filter == curfilter) |
1986 | selectFilterMenuTB->setItemChecked( iii, checkitem ); | 1997 | selectFilterMenuTB->setItemChecked( iii, checkitem ); |
1987 | filter = fili.next(); | 1998 | filter = fili.next(); |
1988 | ++iii; | 1999 | ++iii; |
1989 | } | 2000 | } |
1990 | if ( !checkitem ) | 2001 | if ( !checkitem ) |
1991 | selectFilterMenuTB->setItemChecked( 1, true ); | 2002 | selectFilterMenuTB->setItemChecked( 1, true ); |
1992 | 2003 | ||
1993 | int x = 0; | 2004 | int x = 0; |
1994 | int y = iconToolBar->height(); | 2005 | int y = iconToolBar->height(); |
1995 | int dX = 0; | 2006 | int dX = 0; |
1996 | int dY = 0; | 2007 | int dY = 0; |
1997 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { | 2008 | if ( iconToolBar->orientation () == Qt:: Horizontal ) { |
1998 | if ( iconToolBar->y() > height()/2 ) { | 2009 | if ( iconToolBar->y() > height()/2 ) { |
1999 | dY = selectFilterMenuTB->sizeHint().height()+8; | 2010 | dY = selectFilterMenuTB->sizeHint().height()+8; |
2000 | y = 0; | 2011 | y = 0; |
2001 | } | 2012 | } |
2002 | } else { | 2013 | } else { |
2003 | if ( iconToolBar->x() > width()/2 ) { // right side | 2014 | if ( iconToolBar->x() > width()/2 ) { // right side |
2004 | x=0; | 2015 | x=0; |
2005 | dX= selectFilterMenuTB->sizeHint().width()+8; | 2016 | dX= selectFilterMenuTB->sizeHint().width()+8; |
2006 | y = 0; | 2017 | y = 0; |
2007 | } else { | 2018 | } else { |
2008 | x= iconToolBar->width(); | 2019 | x= iconToolBar->width(); |
2009 | y = 0; | 2020 | y = 0; |
2010 | } | 2021 | } |
2011 | } | 2022 | } |
2012 | //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); | 2023 | //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); |
2013 | selectFilterMenuTB->popup(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY))); | 2024 | selectFilterMenuTB->popup(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY))); |
2014 | } | 2025 | } |
2015 | void MainWindow::fillFilterMenu() | 2026 | void MainWindow::fillFilterMenu() |
2016 | { | 2027 | { |
2017 | selectFilterMenu->clear(); | 2028 | selectFilterMenu->clear(); |
2018 | selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); | 2029 | selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); |
2019 | selectFilterMenu->insertSeparator(); | 2030 | selectFilterMenu->insertSeparator(); |
2020 | selectFilterMenu->insertItem(i18n ( "No Filter" ), 1 ); | 2031 | selectFilterMenu->insertItem(i18n ( "No Filter" ), 1 ); |
2021 | 2032 | ||
2022 | selectFilterMenu->insertSeparator(); | 2033 | selectFilterMenu->insertSeparator(); |
2023 | QPtrList<CalFilter> fili = mView->filters(); | 2034 | QPtrList<CalFilter> fili = mView->filters(); |
2024 | CalFilter *curfilter = mView->filterView()->selectedFilter(); | 2035 | CalFilter *curfilter = mView->filterView()->selectedFilter(); |
2025 | CalFilter *filter = fili.first(); | 2036 | CalFilter *filter = fili.first(); |
2026 | int iii = 2; | 2037 | int iii = 2; |
2027 | bool checkitem = mView->filterView()->filtersEnabled(); | 2038 | bool checkitem = mView->filterView()->filtersEnabled(); |
2028 | while(filter) { | 2039 | while(filter) { |
2029 | selectFilterMenu->insertItem( filter->name(), iii ); | 2040 | selectFilterMenu->insertItem( filter->name(), iii ); |
2030 | if ( filter == curfilter) | 2041 | if ( filter == curfilter) |
2031 | selectFilterMenu->setItemChecked( iii, checkitem ); | 2042 | selectFilterMenu->setItemChecked( iii, checkitem ); |
2032 | filter = fili.next(); | 2043 | filter = fili.next(); |
2033 | ++iii; | 2044 | ++iii; |
2034 | } | 2045 | } |
2035 | if ( !checkitem ) | 2046 | if ( !checkitem ) |
2036 | selectFilterMenu->setItemChecked( 1, true ); | 2047 | selectFilterMenu->setItemChecked( 1, true ); |
2037 | } | 2048 | } |
2038 | void MainWindow::fillFilterMenuPopup() | 2049 | void MainWindow::fillFilterMenuPopup() |
2039 | { | 2050 | { |
2040 | filterPopupMenu->clear(); | 2051 | filterPopupMenu->clear(); |
2041 | filterPopupMenu->insertItem(i18n ( "No Filter" ), 0 ); | 2052 | filterPopupMenu->insertItem(i18n ( "No Filter" ), 0 ); |
2042 | 2053 | ||
2043 | filterPopupMenu->insertSeparator(); | 2054 | filterPopupMenu->insertSeparator(); |
2044 | QPtrList<CalFilter> fili = mView->filters(); | 2055 | QPtrList<CalFilter> fili = mView->filters(); |
2045 | CalFilter *curfilter = mView->filterView()->selectedFilter(); | 2056 | CalFilter *curfilter = mView->filterView()->selectedFilter(); |
2046 | CalFilter *filter = fili.first(); | 2057 | CalFilter *filter = fili.first(); |
2047 | int iii = 1; | 2058 | int iii = 1; |
2048 | bool checkitem = mView->filterView()->filtersEnabled(); | 2059 | bool checkitem = mView->filterView()->filtersEnabled(); |
2049 | while(filter) { | 2060 | while(filter) { |
2050 | filterPopupMenu->insertItem( filter->name(), iii ); | 2061 | filterPopupMenu->insertItem( filter->name(), iii ); |
2051 | if ( filter == curfilter) | 2062 | if ( filter == curfilter) |
2052 | filterPopupMenu->setItemChecked( iii, checkitem ); | 2063 | filterPopupMenu->setItemChecked( iii, checkitem ); |
2053 | filter = fili.next(); | 2064 | filter = fili.next(); |
2054 | ++iii; | 2065 | ++iii; |
2055 | } | 2066 | } |
2056 | if ( !checkitem ) | 2067 | if ( !checkitem ) |
2057 | filterPopupMenu->setItemChecked( 0, true ); | 2068 | filterPopupMenu->setItemChecked( 0, true ); |
2058 | } | 2069 | } |
2059 | void MainWindow::selectFilter( int fil ) | 2070 | void MainWindow::selectFilter( int fil ) |
2060 | { | 2071 | { |
2061 | 2072 | ||
2062 | if ( fil == 0 ) { | 2073 | if ( fil == 0 ) { |
2063 | mView->editFilters( ); | 2074 | mView->editFilters( ); |
2064 | } else if ( fil == 1 ){ | 2075 | } else if ( fil == 1 ){ |
2065 | if ( mView->filterView()->filtersEnabled() ) | 2076 | if ( mView->filterView()->filtersEnabled() ) |
2066 | mView->toggleFilerEnabled( ); | 2077 | mView->toggleFilerEnabled( ); |
2067 | } else { | 2078 | } else { |
2068 | if ( !mView->filterView()->filtersEnabled() ) { | 2079 | if ( !mView->filterView()->filtersEnabled() ) { |
2069 | mView->filterView()->blockSignals( true ); | 2080 | mView->filterView()->blockSignals( true ); |
2070 | mView->toggleFilerEnabled( ); | 2081 | mView->toggleFilerEnabled( ); |
2071 | mView->filterView()->blockSignals( false ); | 2082 | mView->filterView()->blockSignals( false ); |
2072 | } | 2083 | } |
2073 | mView->selectFilter( fil-2 ); | 2084 | mView->selectFilter( fil-2 ); |
2074 | } | 2085 | } |
2075 | } | 2086 | } |
2076 | void MainWindow::updateFilterToolbar() | 2087 | void MainWindow::updateFilterToolbar() |
2077 | { | 2088 | { |
2078 | if ( filterMenubar ) { | 2089 | if ( filterMenubar ) { |
2079 | if ( !mView->filterView()->filtersEnabled() ) { | 2090 | if ( !mView->filterView()->filtersEnabled() ) { |
2080 | filterMenubar->changeItem( 0, i18n("No Filter") ); | 2091 | filterMenubar->changeItem( 0, i18n("No Filter") ); |
2081 | } else { | 2092 | } else { |
2082 | CalFilter *curfilter = mView->filterView()->selectedFilter(); | 2093 | CalFilter *curfilter = mView->filterView()->selectedFilter(); |
2083 | if ( curfilter ) { | 2094 | if ( curfilter ) { |
2084 | filterMenubar->changeItem( 0, curfilter->name() ); | 2095 | filterMenubar->changeItem( 0, curfilter->name() ); |
2085 | } | 2096 | } |
2086 | } | 2097 | } |
2087 | } | 2098 | } |
2088 | } | 2099 | } |
2089 | void MainWindow::selectFilterPopup( int fil ) | 2100 | void MainWindow::selectFilterPopup( int fil ) |
2090 | { | 2101 | { |
2091 | selectFilter( fil + 1 ); | 2102 | selectFilter( fil + 1 ); |
2092 | 2103 | ||
2093 | } | 2104 | } |
2094 | void MainWindow::configureToolBar( int item ) | 2105 | void MainWindow::configureToolBar( int item ) |
2095 | { | 2106 | { |
2096 | 2107 | ||
2097 | configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); | 2108 | configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); |
2098 | KOPrefs *p = KOPrefs::instance(); | 2109 | KOPrefs *p = KOPrefs::instance(); |
2099 | p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); | 2110 | p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); |
2100 | p-> mShowIconOnetoolbar = configureToolBarMenu->isItemChecked( 6 ); | 2111 | p-> mShowIconOnetoolbar = configureToolBarMenu->isItemChecked( 6 ); |
2101 | p-> mShowIconFilter = configureToolBarMenu->isItemChecked( 7 ); | 2112 | p-> mShowIconFilter = configureToolBarMenu->isItemChecked( 7 ); |
2102 | p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); | 2113 | p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); |
2103 | p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); | 2114 | p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); |
2104 | p->mShowIconNavigator = configureToolBarMenu->isItemChecked( 22 ); | 2115 | p->mShowIconNavigator = configureToolBarMenu->isItemChecked( 22 ); |
2105 | p->mShowIconAllday = configureToolBarMenu->isItemChecked( 24 ); | 2116 | p->mShowIconAllday = configureToolBarMenu->isItemChecked( 24 ); |
2106 | p->mShowIconFilterview = configureToolBarMenu->isItemChecked( 26 ); | 2117 | p->mShowIconFilterview = configureToolBarMenu->isItemChecked( 26 ); |
2107 | p->mShowIconToggleFull = configureToolBarMenu->isItemChecked( 28 ); | 2118 | p->mShowIconToggleFull = configureToolBarMenu->isItemChecked( 28 ); |
2108 | p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); | 2119 | p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); |
2109 | p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); | 2120 | p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); |
2110 | p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); | 2121 | p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); |
2111 | p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); | 2122 | p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); |
2112 | p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 ); | 2123 | p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 ); |
2113 | p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); | 2124 | p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); |
2114 | p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); | 2125 | p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); |
2115 | p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); | 2126 | p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); |
2116 | p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); | 2127 | p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); |
2117 | p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); | 2128 | p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); |
2118 | p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); | 2129 | p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); |
2119 | p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); | 2130 | p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); |
2120 | p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); | 2131 | p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); |
2121 | p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); | 2132 | p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); |
2122 | p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); | 2133 | p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); |
2123 | p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); | 2134 | p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); |
2124 | p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); | 2135 | p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); |
2125 | p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 ); | 2136 | p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 ); |
2126 | // initActions(); | 2137 | // initActions(); |
2127 | } | 2138 | } |
2128 | void MainWindow::setCaption ( const QString & c ) | 2139 | void MainWindow::setCaption ( const QString & c ) |
2129 | { | 2140 | { |
2130 | QString cap = c; | 2141 | QString cap = c; |
2131 | cap.replace( QRegExp("\n"), " " ); | 2142 | cap.replace( QRegExp("\n"), " " ); |
2132 | cap = cap.stripWhiteSpace(); | 2143 | cap = cap.stripWhiteSpace(); |
2133 | if ( cap.isEmpty() ) | 2144 | if ( cap.isEmpty() ) |
2134 | cap = "KO/Pi"; | 2145 | cap = "KO/Pi"; |
2135 | QWidget::setCaption( cap ); | 2146 | QWidget::setCaption( cap ); |
2136 | } | 2147 | } |
2137 | void MainWindow::setCaptionToDates() | 2148 | void MainWindow::setCaptionToDates() |
2138 | { | 2149 | { |
2139 | QString selDates; | 2150 | QString selDates; |
2140 | QDate date = mView->startDate(); | 2151 | QDate date = mView->startDate(); |
2141 | if ( ! date.isValid() ) { | 2152 | if ( ! date.isValid() ) { |
2142 | setCaption(""); | 2153 | setCaption(""); |
2143 | return; | 2154 | return; |
2144 | } | 2155 | } |
2145 | selDates = KGlobal::locale()->formatDate( date, true); | 2156 | selDates = KGlobal::locale()->formatDate( date, true); |
2146 | if (mView->startDate() < mView->endDate() ) | 2157 | if (mView->startDate() < mView->endDate() ) |
2147 | selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); | 2158 | selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); |
2148 | else { | 2159 | else { |
2149 | QString addString; | 2160 | QString addString; |
2150 | if ( date == QDateTime::currentDateTime().date() ) | 2161 | if ( date == QDateTime::currentDateTime().date() ) |
2151 | addString = i18n("Today"); | 2162 | addString = i18n("Today"); |
2152 | else if ( date == QDateTime::currentDateTime().date().addDays(1) ) | 2163 | else if ( date == QDateTime::currentDateTime().date().addDays(1) ) |
2153 | addString = i18n("Tomorrow"); | 2164 | addString = i18n("Tomorrow"); |
2154 | if ( !addString.isEmpty() ) | 2165 | if ( !addString.isEmpty() ) |
2155 | selDates = addString+", "+selDates ; | 2166 | selDates = addString+", "+selDates ; |
2156 | } | 2167 | } |
2157 | setCaption( i18n("Dates: ") + selDates ); | 2168 | setCaption( i18n("Dates: ") + selDates ); |
2158 | 2169 | ||
2159 | } | 2170 | } |
2160 | void MainWindow::showConfigureAgenda( ) | 2171 | void MainWindow::showConfigureAgenda( ) |
2161 | { | 2172 | { |
2162 | int iii; | 2173 | int iii; |
2163 | for ( iii = 1;iii<= 10 ;++iii ){ | 2174 | for ( iii = 1;iii<= 10 ;++iii ){ |
2164 | configureAgendaMenu->setItemChecked( (iii+1)*2, false ); | 2175 | configureAgendaMenu->setItemChecked( (iii+1)*2, false ); |
2165 | } | 2176 | } |
2166 | configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true ); | 2177 | configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true ); |
2167 | } | 2178 | } |
2168 | void MainWindow::configureAgenda( int item ) | 2179 | void MainWindow::configureAgenda( int item ) |
2169 | { | 2180 | { |
2170 | if ( KOPrefs::instance()->mHourSize == item ) | 2181 | if ( KOPrefs::instance()->mHourSize == item ) |
2171 | return; | 2182 | return; |
2172 | KOPrefs::instance()->mHourSize=item; | 2183 | KOPrefs::instance()->mHourSize=item; |
2173 | mView->viewManager()->agendaView()->updateConfig(); | 2184 | mView->viewManager()->agendaView()->updateConfig(); |
2174 | } | 2185 | } |
2175 | 2186 | ||
2176 | void MainWindow::saveCalendar() | 2187 | void MainWindow::saveCalendar() |
2177 | { | 2188 | { |
2178 | QString fn = KOPrefs::instance()->mLastSaveFile; | 2189 | QString fn = KOPrefs::instance()->mLastSaveFile; |
2179 | fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); | 2190 | fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); |
2180 | 2191 | ||
2181 | if ( fn == "" ) | 2192 | if ( fn == "" ) |
2182 | return; | 2193 | return; |
2183 | QFileInfo info; | 2194 | QFileInfo info; |
2184 | info.setFile( fn ); | 2195 | info.setFile( fn ); |
2185 | QString mes; | 2196 | QString mes; |
2186 | bool createbup = true; | 2197 | bool createbup = true; |
2187 | if ( info. exists() ) { | 2198 | if ( info. exists() ) { |
2188 | mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; | 2199 | mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; |
2189 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 2200 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
2190 | i18n("Overwrite!"), i18n("Cancel"), 0, | 2201 | i18n("Overwrite!"), i18n("Cancel"), 0, |
2191 | 0, 1 ); | 2202 | 0, 1 ); |
2192 | if ( result != 0 ) { | 2203 | if ( result != 0 ) { |
2193 | createbup = false; | 2204 | createbup = false; |
2194 | } | 2205 | } |
2195 | } | 2206 | } |
2196 | if ( createbup ) { | 2207 | if ( createbup ) { |
2197 | mView->saveCalendar( fn ); | 2208 | mView->saveCalendar( fn ); |
2198 | mes = i18n("KO/Pi:Saved %1").arg(fn); | 2209 | mes = i18n("KO/Pi:Saved %1").arg(fn); |
2199 | KOPrefs::instance()->mLastSaveFile = fn; | 2210 | KOPrefs::instance()->mLastSaveFile = fn; |
2200 | setCaption(mes); | 2211 | setCaption(mes); |
2201 | } | 2212 | } |
2202 | } | 2213 | } |
2203 | void MainWindow::loadCalendar() | 2214 | void MainWindow::loadCalendar() |
2204 | { | 2215 | { |
2205 | 2216 | ||
2206 | QString fn = KOPrefs::instance()->mLastLoadFile; | 2217 | QString fn = KOPrefs::instance()->mLastLoadFile; |
2207 | fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); | 2218 | fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); |
2208 | 2219 | ||
2209 | if ( fn == "" ) | 2220 | if ( fn == "" ) |
2210 | return; | 2221 | return; |
2211 | QFileInfo info; | 2222 | QFileInfo info; |
2212 | info.setFile( fn ); | 2223 | info.setFile( fn ); |
2213 | QString mess; | 2224 | QString mess; |
2214 | bool loadbup = true; | 2225 | bool loadbup = true; |
2215 | if ( info. exists() ) { | 2226 | if ( info. exists() ) { |
2216 | mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); | 2227 | mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); |
2217 | int result = QMessageBox::warning( this, "KO/Pi: Warning!", | 2228 | int result = QMessageBox::warning( this, "KO/Pi: Warning!", |
2218 | mess, | 2229 | mess, |
2219 | i18n("Load!"), i18n("Cancel"), 0, | 2230 | i18n("Load!"), i18n("Cancel"), 0, |
2220 | 0, 1 ); | 2231 | 0, 1 ); |
2221 | if ( result != 0 ) { | 2232 | if ( result != 0 ) { |
2222 | loadbup = false; | 2233 | loadbup = false; |
2223 | } | 2234 | } |
2224 | } else { | 2235 | } else { |
2225 | QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 2236 | QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
2226 | i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, | 2237 | i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, |
2227 | 0, 1 ); | 2238 | 0, 1 ); |
2228 | 2239 | ||
2229 | return; | 2240 | return; |
2230 | } | 2241 | } |
2231 | if ( loadbup ) { | 2242 | if ( loadbup ) { |
2232 | mView->openCalendar( fn ); | 2243 | mView->openCalendar( fn ); |
2233 | KOPrefs::instance()->mLastLoadFile = fn; | 2244 | KOPrefs::instance()->mLastLoadFile = fn; |
2234 | mess = i18n("KO/Pi:Loaded %1").arg(fn) ; | 2245 | mess = i18n("KO/Pi:Loaded %1").arg(fn) ; |
2235 | setCaption(mess); | 2246 | setCaption(mess); |
2236 | } | 2247 | } |
2237 | 2248 | ||
2238 | } | 2249 | } |
2239 | void MainWindow::quickImportIcal() | 2250 | void MainWindow::quickImportIcal() |
2240 | { | 2251 | { |
2241 | importFile( KOPrefs::instance()->mLastImportFile, false ); | 2252 | importFile( KOPrefs::instance()->mLastImportFile, false ); |
2242 | } | 2253 | } |
2243 | void MainWindow::importFile( QString fn, bool quick ) | 2254 | void MainWindow::importFile( QString fn, bool quick ) |
2244 | { | 2255 | { |
2245 | QFileInfo info; | 2256 | QFileInfo info; |
2246 | info.setFile( fn ); | 2257 | info.setFile( fn ); |
2247 | QString mess; | 2258 | QString mess; |
2248 | bool loadbup = true; | 2259 | bool loadbup = true; |
2249 | if ( !info. exists() ) { | 2260 | if ( !info. exists() ) { |
2250 | mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); | 2261 | mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); |
2251 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), | 2262 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), |
2252 | mess ); | 2263 | mess ); |
2253 | return; | 2264 | return; |
2254 | } | 2265 | } |
2255 | int result = 0; | 2266 | int result = 0; |
2256 | if ( !quick ) { | 2267 | if ( !quick ) { |
2257 | mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); | 2268 | mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); |
2258 | result = QMessageBox::warning( this, "KO/Pi: Warning!", | 2269 | result = QMessageBox::warning( this, "KO/Pi: Warning!", |
2259 | mess, | 2270 | mess, |
2260 | "Import", "Cancel", 0, | 2271 | "Import", "Cancel", 0, |
2261 | 0, 1 ); | 2272 | 0, 1 ); |
2262 | } | 2273 | } |
2263 | if ( result == 0 ) { | 2274 | if ( result == 0 ) { |
2264 | if ( mView->openCalendar( fn, true )) { | 2275 | if ( mView->openCalendar( fn, true )) { |
2265 | KOPrefs::instance()->mLastImportFile = fn; | 2276 | KOPrefs::instance()->mLastImportFile = fn; |
2266 | setCaption(i18n("Imported file successfully")); | 2277 | setCaption(i18n("Imported file successfully")); |
2267 | } else { | 2278 | } else { |
2268 | setCaption(i18n("Error importing file")); | 2279 | setCaption(i18n("Error importing file")); |
2269 | } | 2280 | } |
2270 | } | 2281 | } |
2271 | } | 2282 | } |
2272 | 2283 | ||
2273 | void MainWindow::importIcal() | 2284 | void MainWindow::importIcal() |
2274 | { | 2285 | { |
2275 | 2286 | ||
2276 | QString fn =KOPrefs::instance()->mLastImportFile; | 2287 | QString fn =KOPrefs::instance()->mLastImportFile; |
2277 | 2288 | ||
2278 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); | 2289 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); |
2279 | if ( fn == "" ) | 2290 | if ( fn == "" ) |
2280 | return; | 2291 | return; |
2281 | importFile( fn, true ); | 2292 | importFile( fn, true ); |
2282 | 2293 | ||
2283 | } | 2294 | } |
2284 | 2295 | ||
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 | |||
@@ -1,172 +1,173 @@ | |||
1 | #ifndef KORGE_MAINWINDOW_H | 1 | #ifndef KORGE_MAINWINDOW_H |
2 | #define KORGE_MAINWINDOW_H | 2 | #define KORGE_MAINWINDOW_H |
3 | 3 | ||
4 | #include <qmainwindow.h> | 4 | #include <qmainwindow.h> |
5 | #include <qtimer.h> | 5 | #include <qtimer.h> |
6 | #include <qdict.h> | 6 | #include <qdict.h> |
7 | #include <qfile.h> | 7 | #include <qfile.h> |
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 |