summaryrefslogtreecommitdiffabout
path: root/kaddressbook
authorzautrix <zautrix>2005-07-06 12:36:37 (UTC)
committer zautrix <zautrix>2005-07-06 12:36:37 (UTC)
commit794478c1f0b960af9256c480ec28abd9429f72c2 (patch) (unidiff)
treed1a1f1ca76a9c64536843e886f78eef3d4bdae4f /kaddressbook
parent1e5f0fbaac9814c7289137a74a460494553245c2 (diff)
downloadkdepimpi-794478c1f0b960af9256c480ec28abd9429f72c2.zip
kdepimpi-794478c1f0b960af9256c480ec28abd9429f72c2.tar.gz
kdepimpi-794478c1f0b960af9256c480ec28abd9429f72c2.tar.bz2
fixx
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/jumpbuttonbar.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/kaddressbook/jumpbuttonbar.cpp b/kaddressbook/jumpbuttonbar.cpp
index 7524fb7..aebf8a6 100644
--- a/kaddressbook/jumpbuttonbar.cpp
+++ b/kaddressbook/jumpbuttonbar.cpp
@@ -1,256 +1,257 @@
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 <qevent.h> 24#include <qevent.h>
25#include <qlayout.h> 25#include <qlayout.h>
26#include <qpushbutton.h> 26#include <qpushbutton.h>
27#include <qstring.h> 27#include <qstring.h>
28#include <qtl.h> 28#include <qtl.h>
29#include <qapplication.h> 29#include <qapplication.h>
30 30
31#include <kabc/addressbook.h> 31#include <kabc/addressbook.h>
32#include <kabc/field.h> 32#include <kabc/field.h>
33#include <kdebug.h> 33#include <kdebug.h>
34#include <klocale.h> 34#include <klocale.h>
35 35
36#include "kabcore.h" 36#include "kabcore.h"
37 37
38#include "jumpbuttonbar.h" 38#include "jumpbuttonbar.h"
39 39
40class JumpButton : public QPushButton 40class JumpButton : public QPushButton
41{ 41{
42 public: 42 public:
43 JumpButton( const QString &text, QWidget *parent, 43 JumpButton( const QString &text, QWidget *parent,
44 const QString &character ); 44 const QString &character );
45 45
46 void setCharacter( const QString &character ); 46 void setCharacter( const QString &character );
47 QString character() const; 47 QString character() const;
48 48
49 private: 49 private:
50 QString mCharacter; 50 QString mCharacter;
51}; 51};
52 52
53JumpButton::JumpButton( const QString &text, QWidget *parent, 53JumpButton::JumpButton( const QString &text, QWidget *parent,
54 const QString &character ) 54 const QString &character )
55 : QPushButton( text, parent ) 55 : QPushButton( text, parent )
56{ 56{
57 mCharacter = character; 57 mCharacter = character;
58} 58}
59 59
60void JumpButton::setCharacter( const QString &character ) 60void JumpButton::setCharacter( const QString &character )
61{ 61{
62 mCharacter = character; 62 mCharacter = character;
63 setText(mCharacter.upper() ); 63 setText(mCharacter.upper() );
64} 64}
65 65
66QString JumpButton::character() const 66QString JumpButton::character() const
67{ 67{
68 return mCharacter; 68 return mCharacter;
69} 69}
70 70
71JumpButtonBar::JumpButtonBar( KABCore *core, QWidget *parent, const char *name ) 71JumpButtonBar::JumpButtonBar( KABCore *core, QWidget *parent, const char *name )
72 : QWidget( parent, name ), mCore( core ) 72 : QWidget( parent, name ), mCore( core )
73{ 73{
74 if ( QApplication::desktop()->width() < 480 ) 74 if ( QApplication::desktop()->width() < 480 )
75 75
76 mButtonLayout = new QGridLayout( this, 1, 18 ); 76 mButtonLayout = new QGridLayout( this, 1, 18 );
77 else 77 else
78 mButtonLayout = new QGridLayout( this, 1, 20 ); 78 mButtonLayout = new QGridLayout( this, 1, 20 );
79 mButtonLayout->setAlignment( Qt::AlignTop ); 79 mButtonLayout->setAlignment( Qt::AlignTop );
80 80
81 recreateButtons(); 81 recreateButtons();
82} 82}
83 83
84JumpButtonBar::~JumpButtonBar() 84JumpButtonBar::~JumpButtonBar()
85{ 85{
86} 86}
87 87
88QSizePolicy JumpButtonBar::sizePolicy() const 88QSizePolicy JumpButtonBar::sizePolicy() const
89{ 89{
90#ifndef KAB_EMBEDDED 90#ifndef KAB_EMBEDDED
91 return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum, 91 return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum,
92 QSizePolicy::Vertically ); 92 QSizePolicy::Vertically );
93#else //KAB_EMBEDDED 93#else //KAB_EMBEDDED
94 return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum); 94 return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum);
95#endif //KAB_EMBEDDED 95#endif //KAB_EMBEDDED
96} 96}
97 97
98void JumpButtonBar::letterClicked() 98void JumpButtonBar::letterClicked()
99{ 99{
100 JumpButton *button = (JumpButton*)sender(); 100 JumpButton *button = (JumpButton*)sender();
101 QString character = button->character(); 101 QString character = button->character();
102 if ( character.length() == 2 ) 102 if ( character.length() == 2 )
103 character = character.left(1) +"-"+character.right(1); 103 character = character.left(1) +"-"+character.right(1);
104 if ( !character.isNull() ) 104 if ( !character.isNull() )
105 emit jumpToLetter( character ); 105 emit jumpToLetter( character );
106 //qDebug("emit *%s* ",character.latin1()); 106 //qDebug("emit *%s* ",character.latin1());
107} 107}
108 108
109void JumpButtonBar::recreateButtons() 109void JumpButtonBar::recreateButtons()
110{ 110{
111 // the easiest way to remove all buttons ;) 111 // the easiest way to remove all buttons ;)
112 //mButtons.setAutoDelete( true ); 112 //mButtons.setAutoDelete( true );
113 //mButtons.clear(); 113 //mButtons.clear();
114 //mButtons.setAutoDelete( false ); 114 //mButtons.setAutoDelete( false );
115 mCharacters.clear(); 115 mCharacters.clear();
116 116
117 QString character; 117 QString character;
118 118
119 KABC::AddressBook *ab = mCore->addressBook(); 119 KABC::AddressBook *ab = mCore->addressBook();
120 KABC::AddressBook::Iterator it; 120 KABC::AddressBook::Iterator it;
121 KABC::Field *field = mCore->currentSearchField(); 121 KABC::Field *field = mCore->currentSearchField();
122 if ( field ) { 122 if ( field ) {
123 setEnabled( true ); 123 setEnabled( true );
124 } else { 124 } else {
125 setEnabled( false ); 125 setEnabled( false );
126 return; 126 return;
127 } 127 }
128 mCharacters.append( "*"); 128 mCharacters.append( "*");
129 for ( it = ab->begin(); it != ab->end(); ++it ) { 129 for ( it = ab->begin(); it != ab->end(); ++it ) {
130 if ( !field->value( *it ).isEmpty() ) 130 if ( !field->value( *it ).isEmpty() )
131 character = field->value( *it )[ 0 ].lower(); 131 character = field->value( *it )[ 0 ].lower();
132 if ( character != "!" ) 132 if ( character != "!" ) {
133 if ( !character.isEmpty() && !mCharacters.contains( character ) ) 133 if ( !character.isEmpty() && !mCharacters.contains( character ) && character.at( 0 ).isLetter ())
134 mCharacters.append( character ); 134 mCharacters.append( character );
135 }
135 } 136 }
136 if ( mCharacters.count() == 0 ) { 137 if ( mCharacters.count() == 0 ) {
137 setEnabled( false ); 138 setEnabled( false );
138 return; 139 return;
139 } 140 }
140 141
141 int maxRows = mCharacters.count() / 2; // we use 2 columns 142 int maxRows = mCharacters.count() / 2; // we use 2 columns
142 if ( mCharacters.count() % 2 ) 143 if ( mCharacters.count() % 2 )
143 maxRows++; 144 maxRows++;
144 sortListLocaleAware( mCharacters ); 145 sortListLocaleAware( mCharacters );
145 bool skip2 = false; 146 bool skip2 = false;
146 int skipcount = 0; 147 int skipcount = 0;
147 int maxHei = 0; 148 int maxHei = 0;
148#ifdef DESKTOP_VERSION 149#ifdef DESKTOP_VERSION
149 int maxChar = 16; 150 int maxChar = 16;
150 int heightDiff = 200; 151 int heightDiff = 200;
151 int fixwid = 36; 152 int fixwid = 36;
152#else 153#else
153 //default for 240x320 diaplay: 154 //default for 240x320 diaplay:
154 int maxChar = 16; 155 int maxChar = 16;
155 int heightDiff = 64; 156 int heightDiff = 64;
156 int fixwid = 20; 157 int fixwid = 20;
157 158
158 if ( QApplication::desktop()->height() == 480 ) { 159 if ( QApplication::desktop()->height() == 480 ) {
159 maxChar = 16; 160 maxChar = 16;
160 heightDiff = 135; 161 heightDiff = 135;
161 fixwid = 34; 162 fixwid = 34;
162 } else if ( QApplication::desktop()->height() >= 640 ) { 163 } else if ( QApplication::desktop()->height() >= 640 ) {
163 maxChar = 20; 164 maxChar = 20;
164 heightDiff = 135; 165 heightDiff = 135;
165 fixwid = 34; 166 fixwid = 34;
166 } 167 }
167#endif 168#endif
168 169
169 if ( mCharacters.count() > maxChar ) 170 if ( mCharacters.count() > maxChar )
170 skipcount = mCharacters.count()- maxChar; 171 skipcount = mCharacters.count()- maxChar;
171 maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar); 172 maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar);
172 173
173 174
174 maxRows = 28; 175 maxRows = 28;
175 bool skipcurrent = false; 176 bool skipcurrent = false;
176 bool state = isUpdatesEnabled(); 177 bool state = isUpdatesEnabled();
177 setUpdatesEnabled( false ); 178 setUpdatesEnabled( false );
178 //qDebug("cc %d ",mCharacters.count() ); 179 //qDebug("cc %d ",mCharacters.count() );
179 JumpButton *button = 0; 180 JumpButton *button = 0;
180 int row = 0, col = 0; 181 int row = 0, col = 0;
181 JumpButton* cur = mButtons.first(); 182 JumpButton* cur = mButtons.first();
182 for ( uint i = 0; i < mCharacters.count(); ++i ) { 183 for ( uint i = 0; i < mCharacters.count(); ++i ) {
183 if ( skipcount > 0 && skipcurrent ) { 184 if ( skipcount > 0 && skipcurrent ) {
184 --skipcount; 185 --skipcount;
185 if ( button ) { 186 if ( button ) {
186 button->setCharacter( button->character() + mCharacters[ i ]); 187 button->setCharacter( button->character() + mCharacters[ i ]);
187 } 188 }
188 } else { 189 } else {
189 if ( cur ) { 190 if ( cur ) {
190 button = cur ; 191 button = cur ;
191 cur = mButtons.next(); 192 cur = mButtons.next();
192 button->setCharacter(mCharacters[ i ]); 193 button->setCharacter(mCharacters[ i ]);
193 } else { 194 } else {
194 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] ); 195 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] );
195 if ( fixwid ) 196 if ( fixwid )
196 button->setFixedWidth( fixwid ); 197 button->setFixedWidth( fixwid );
197 mButtons.append( button ); 198 mButtons.append( button );
198 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) ); 199 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) );
199 mButtonLayout->addWidget( button, row, col ); 200 mButtonLayout->addWidget( button, row, col );
200 } 201 }
201 if ( maxHei ) 202 if ( maxHei )
202 button->setMaximumHeight( maxHei ); 203 button->setMaximumHeight( maxHei );
203 button->show(); 204 button->show();
204 205
205 if ( col == maxRows ) { 206 if ( col == maxRows ) {
206 row = 0; 207 row = 0;
207 col++; 208 col++;
208 } else 209 } else
209 row++; 210 row++;
210 } 211 }
211 if ( i > 0 ) 212 if ( i > 0 )
212 skipcurrent = !skipcurrent; 213 skipcurrent = !skipcurrent;
213 } 214 }
214 while ( cur ) { 215 while ( cur ) {
215 cur->hide(); 216 cur->hide();
216 cur = mButtons.next(); 217 cur = mButtons.next();
217 } 218 }
218 219
219 mButtonLayout->activate(); 220 mButtonLayout->activate();
220 setUpdatesEnabled( state ); 221 setUpdatesEnabled( state );
221 update(); 222 update();
222} 223}
223 224
224void JumpButtonBar::sortListLocaleAware( QStringList &list ) 225void JumpButtonBar::sortListLocaleAware( QStringList &list )
225{ 226{
226 QStringList::Iterator beginIt = list.begin(); 227 QStringList::Iterator beginIt = list.begin();
227 QStringList::Iterator endIt = list.end(); 228 QStringList::Iterator endIt = list.end();
228 229
229 --endIt; 230 --endIt;
230 if ( beginIt == endIt ) // don't need sorting 231 if ( beginIt == endIt ) // don't need sorting
231 return; 232 return;
232 233
233 QStringList::Iterator walkBackIt = endIt; 234 QStringList::Iterator walkBackIt = endIt;
234 while ( beginIt != endIt ) { 235 while ( beginIt != endIt ) {
235 QStringList::Iterator j1 = list.begin(); 236 QStringList::Iterator j1 = list.begin();
236 QStringList::Iterator j2 = j1; 237 QStringList::Iterator j2 = j1;
237 ++j2; 238 ++j2;
238 while ( j1 != walkBackIt ) { 239 while ( j1 != walkBackIt ) {
239#ifndef KAB_EMBEDDED 240#ifndef KAB_EMBEDDED
240 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 ) 241 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 )
241#else //KAB_EMBEDDED 242#else //KAB_EMBEDDED
242 if ( QString::compare( *j2, *j1 ) < 0 ) 243 if ( QString::compare( *j2, *j1 ) < 0 )
243#endif //KAB_EMBEDDED 244#endif //KAB_EMBEDDED
244 qSwap( *j1, *j2 ); 245 qSwap( *j1, *j2 );
245 246
246 ++j1; 247 ++j1;
247 ++j2; 248 ++j2;
248 } 249 }
249 ++beginIt; 250 ++beginIt;
250 --walkBackIt; 251 --walkBackIt;
251 } 252 }
252} 253}
253 254
254#ifndef KAB_EMBEDDED 255#ifndef KAB_EMBEDDED
255#include "jumpbuttonbar.moc" 256#include "jumpbuttonbar.moc"
256#endif //KAB_EMBEDDED 257#endif //KAB_EMBEDDED