summaryrefslogtreecommitdiffabout
path: root/kaddressbook/jumpbuttonbar.cpp
Unidiff
Diffstat (limited to 'kaddressbook/jumpbuttonbar.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/jumpbuttonbar.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/kaddressbook/jumpbuttonbar.cpp b/kaddressbook/jumpbuttonbar.cpp
index 32922a6..7524fb7 100644
--- a/kaddressbook/jumpbuttonbar.cpp
+++ b/kaddressbook/jumpbuttonbar.cpp
@@ -1,256 +1,256 @@
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 ) )
134 mCharacters.append( character ); 134 mCharacters.append( character );
135 } 135 }
136 if ( mCharacters.count() == 0 ) { 136 if ( mCharacters.count() == 0 ) {
137 setEnabled( false ); 137 setEnabled( false );
138 return; 138 return;
139 } 139 }
140 140
141 int maxRows = mCharacters.count() / 2; // we use 2 columns 141 int maxRows = mCharacters.count() / 2; // we use 2 columns
142 if ( mCharacters.count() % 2 ) 142 if ( mCharacters.count() % 2 )
143 maxRows++; 143 maxRows++;
144 sortListLocaleAware( mCharacters ); 144 sortListLocaleAware( mCharacters );
145 bool skip2 = false; 145 bool skip2 = false;
146 int skipcount = 0; 146 int skipcount = 0;
147 int maxHei = 0; 147 int maxHei = 0;
148#ifdef DESKTOP_VERSION 148#ifdef DESKTOP_VERSION
149 int maxChar = 26; 149 int maxChar = 16;
150 int heightDiff = 200; 150 int heightDiff = 200;
151 int fixwid = 0; 151 int fixwid = 36;
152#else 152#else
153 //default for 240x320 diaplay: 153 //default for 240x320 diaplay:
154 int maxChar = 16; 154 int maxChar = 16;
155 int heightDiff = 64; 155 int heightDiff = 64;
156 int fixwid = 20; 156 int fixwid = 20;
157 157
158 if ( QApplication::desktop()->height() == 480 ) { 158 if ( QApplication::desktop()->height() == 480 ) {
159 maxChar = 16; 159 maxChar = 16;
160 heightDiff = 135; 160 heightDiff = 135;
161 fixwid = 34; 161 fixwid = 34;
162 } else if ( QApplication::desktop()->height() >= 640 ) { 162 } else if ( QApplication::desktop()->height() >= 640 ) {
163 maxChar = 20; 163 maxChar = 20;
164 heightDiff = 135; 164 heightDiff = 135;
165 fixwid = 34; 165 fixwid = 34;
166 } 166 }
167#endif 167#endif
168 168
169 if ( mCharacters.count() > maxChar ) 169 if ( mCharacters.count() > maxChar )
170 skipcount = mCharacters.count()- maxChar; 170 skipcount = mCharacters.count()- maxChar;
171 maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar); 171 maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar);
172 172
173 173
174 maxRows = 28; 174 maxRows = 28;
175 bool skipcurrent = false; 175 bool skipcurrent = false;
176 bool state = isUpdatesEnabled(); 176 bool state = isUpdatesEnabled();
177 setUpdatesEnabled( false ); 177 setUpdatesEnabled( false );
178 //qDebug("cc %d ",mCharacters.count() ); 178 //qDebug("cc %d ",mCharacters.count() );
179 JumpButton *button = 0; 179 JumpButton *button = 0;
180 int row = 0, col = 0; 180 int row = 0, col = 0;
181 JumpButton* cur = mButtons.first(); 181 JumpButton* cur = mButtons.first();
182 for ( uint i = 0; i < mCharacters.count(); ++i ) { 182 for ( uint i = 0; i < mCharacters.count(); ++i ) {
183 if ( skipcount > 0 && skipcurrent ) { 183 if ( skipcount > 0 && skipcurrent ) {
184 --skipcount; 184 --skipcount;
185 if ( button ) { 185 if ( button ) {
186 button->setCharacter( button->character() + mCharacters[ i ]); 186 button->setCharacter( button->character() + mCharacters[ i ]);
187 } 187 }
188 } else { 188 } else {
189 if ( cur ) { 189 if ( cur ) {
190 button = cur ; 190 button = cur ;
191 cur = mButtons.next(); 191 cur = mButtons.next();
192 button->setCharacter(mCharacters[ i ]); 192 button->setCharacter(mCharacters[ i ]);
193 } else { 193 } else {
194 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] ); 194 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] );
195 if ( fixwid ) 195 if ( fixwid )
196 button->setFixedWidth( fixwid ); 196 button->setFixedWidth( fixwid );
197 mButtons.append( button ); 197 mButtons.append( button );
198 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) ); 198 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) );
199 mButtonLayout->addWidget( button, row, col ); 199 mButtonLayout->addWidget( button, row, col );
200 } 200 }
201 if ( maxHei ) 201 if ( maxHei )
202 button->setMaximumHeight( maxHei ); 202 button->setMaximumHeight( maxHei );
203 button->show(); 203 button->show();
204 204
205 if ( col == maxRows ) { 205 if ( col == maxRows ) {
206 row = 0; 206 row = 0;
207 col++; 207 col++;
208 } else 208 } else
209 row++; 209 row++;
210 } 210 }
211 if ( i > 0 ) 211 if ( i > 0 )
212 skipcurrent = !skipcurrent; 212 skipcurrent = !skipcurrent;
213 } 213 }
214 while ( cur ) { 214 while ( cur ) {
215 cur->hide(); 215 cur->hide();
216 cur = mButtons.next(); 216 cur = mButtons.next();
217 } 217 }
218 218
219 mButtonLayout->activate(); 219 mButtonLayout->activate();
220 setUpdatesEnabled( state ); 220 setUpdatesEnabled( state );
221 update(); 221 update();
222} 222}
223 223
224void JumpButtonBar::sortListLocaleAware( QStringList &list ) 224void JumpButtonBar::sortListLocaleAware( QStringList &list )
225{ 225{
226 QStringList::Iterator beginIt = list.begin(); 226 QStringList::Iterator beginIt = list.begin();
227 QStringList::Iterator endIt = list.end(); 227 QStringList::Iterator endIt = list.end();
228 228
229 --endIt; 229 --endIt;
230 if ( beginIt == endIt ) // don't need sorting 230 if ( beginIt == endIt ) // don't need sorting
231 return; 231 return;
232 232
233 QStringList::Iterator walkBackIt = endIt; 233 QStringList::Iterator walkBackIt = endIt;
234 while ( beginIt != endIt ) { 234 while ( beginIt != endIt ) {
235 QStringList::Iterator j1 = list.begin(); 235 QStringList::Iterator j1 = list.begin();
236 QStringList::Iterator j2 = j1; 236 QStringList::Iterator j2 = j1;
237 ++j2; 237 ++j2;
238 while ( j1 != walkBackIt ) { 238 while ( j1 != walkBackIt ) {
239#ifndef KAB_EMBEDDED 239#ifndef KAB_EMBEDDED
240 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 ) 240 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 )
241#else //KAB_EMBEDDED 241#else //KAB_EMBEDDED
242 if ( QString::compare( *j2, *j1 ) < 0 ) 242 if ( QString::compare( *j2, *j1 ) < 0 )
243#endif //KAB_EMBEDDED 243#endif //KAB_EMBEDDED
244 qSwap( *j1, *j2 ); 244 qSwap( *j1, *j2 );
245 245
246 ++j1; 246 ++j1;
247 ++j2; 247 ++j2;
248 } 248 }
249 ++beginIt; 249 ++beginIt;
250 --walkBackIt; 250 --walkBackIt;
251 } 251 }
252} 252}
253 253
254#ifndef KAB_EMBEDDED 254#ifndef KAB_EMBEDDED
255#include "jumpbuttonbar.moc" 255#include "jumpbuttonbar.moc"
256#endif //KAB_EMBEDDED 256#endif //KAB_EMBEDDED