summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/jumpbuttonbar.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/kaddressbook/jumpbuttonbar.cpp b/kaddressbook/jumpbuttonbar.cpp
index b12d9e7..e89ec52 100644
--- a/kaddressbook/jumpbuttonbar.cpp
+++ b/kaddressbook/jumpbuttonbar.cpp
@@ -1,240 +1,241 @@
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, 2, 14 ); 76 mButtonLayout = new QGridLayout( this, 2, 14 );
77 else 77 else
78 mButtonLayout = new QGridLayout( this, 1, 28 ); 78 mButtonLayout = new QGridLayout( this, 1, 28 );
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 int fixwid = 20; 144 int fixwid = 20;
145 sortListLocaleAware( mCharacters ); 145 sortListLocaleAware( mCharacters );
146 bool skip2 = false; 146 bool skip2 = false;
147 int skipcount = 0; 147 int skipcount = 0;
148 int maxHei = 25; 148 int maxHei = 25;
149 if ( QApplication::desktop()->width() < 480 && mCharacters.count() > 13) { 149 int roW = 15;//13 is ok
150 skipcount = mCharacters.count()-13; 150 if ( QApplication::desktop()->width() < 480 && mCharacters.count() > roW ) {
151 maxHei = (QApplication::desktop()->height()-65)/13; 151 skipcount = mCharacters.count()-roW ;
152 maxHei = (QApplication::desktop()->height()-65)/roW ;
152 } 153 }
153 else { 154 else {
154 fixwid = 30; 155 fixwid = 30;
155 if ( mCharacters.count() > 20 ) 156 if ( mCharacters.count() > 16 )
156 skipcount = mCharacters.count()- 20; 157 skipcount = mCharacters.count()- 16;
157 maxHei = (QApplication::desktop()->height()-120)/(mCharacters.count()-skipcount); 158 maxHei = (QApplication::desktop()->height()-120)/(16);
158 159
159 } 160 }
160 maxRows = 28; 161 maxRows = 28;
161 bool skipcurrent = false; 162 bool skipcurrent = false;
162 bool state = isUpdatesEnabled(); 163 bool state = isUpdatesEnabled();
163 setUpdatesEnabled( false ); 164 setUpdatesEnabled( false );
164 //qDebug("cc %d ",mCharacters.count() ); 165 //qDebug("cc %d ",mCharacters.count() );
165 JumpButton *button = 0; 166 JumpButton *button = 0;
166 int row = 0, col = 0; 167 int row = 0, col = 0;
167 JumpButton* cur = mButtons.first(); 168 JumpButton* cur = mButtons.first();
168 for ( uint i = 0; i < mCharacters.count(); ++i ) { 169 for ( uint i = 0; i < mCharacters.count(); ++i ) {
169 if ( skipcount > 0 && skipcurrent ) { 170 if ( skipcount > 0 && skipcurrent ) {
170 --skipcount; 171 --skipcount;
171 if ( button ) { 172 if ( button ) {
172 button->setCharacter( button->character() + mCharacters[ i ]); 173 button->setCharacter( button->character() + mCharacters[ i ]);
173 } 174 }
174 } else { 175 } else {
175 if ( cur ) { 176 if ( cur ) {
176 button = cur ; 177 button = cur ;
177 cur = mButtons.next(); 178 cur = mButtons.next();
178 button->setCharacter(mCharacters[ i ]); 179 button->setCharacter(mCharacters[ i ]);
179 } else { 180 } else {
180 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] ); 181 button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] );
181 button->setFixedWidth( fixwid ); 182 button->setFixedWidth( fixwid );
182 mButtons.append( button ); 183 mButtons.append( button );
183 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) ); 184 connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) );
184 mButtonLayout->addWidget( button, row, col ); 185 mButtonLayout->addWidget( button, row, col );
185 } 186 }
186 button->setMaximumHeight( maxHei ); 187 button->setMaximumHeight( maxHei );
187 button->show(); 188 button->show();
188 189
189 if ( col == maxRows ) { 190 if ( col == maxRows ) {
190 row = 0; 191 row = 0;
191 col++; 192 col++;
192 } else 193 } else
193 row++; 194 row++;
194 } 195 }
195 if ( i > 0 ) 196 if ( i > 0 )
196 skipcurrent = !skipcurrent; 197 skipcurrent = !skipcurrent;
197 } 198 }
198 while ( cur ) { 199 while ( cur ) {
199 cur->hide(); 200 cur->hide();
200 cur = mButtons.next(); 201 cur = mButtons.next();
201 } 202 }
202 203
203 mButtonLayout->activate(); 204 mButtonLayout->activate();
204 setUpdatesEnabled( state ); 205 setUpdatesEnabled( state );
205 update(); 206 update();
206} 207}
207 208
208void JumpButtonBar::sortListLocaleAware( QStringList &list ) 209void JumpButtonBar::sortListLocaleAware( QStringList &list )
209{ 210{
210 QStringList::Iterator beginIt = list.begin(); 211 QStringList::Iterator beginIt = list.begin();
211 QStringList::Iterator endIt = list.end(); 212 QStringList::Iterator endIt = list.end();
212 213
213 --endIt; 214 --endIt;
214 if ( beginIt == endIt ) // don't need sorting 215 if ( beginIt == endIt ) // don't need sorting
215 return; 216 return;
216 217
217 QStringList::Iterator walkBackIt = endIt; 218 QStringList::Iterator walkBackIt = endIt;
218 while ( beginIt != endIt ) { 219 while ( beginIt != endIt ) {
219 QStringList::Iterator j1 = list.begin(); 220 QStringList::Iterator j1 = list.begin();
220 QStringList::Iterator j2 = j1; 221 QStringList::Iterator j2 = j1;
221 ++j2; 222 ++j2;
222 while ( j1 != walkBackIt ) { 223 while ( j1 != walkBackIt ) {
223#ifndef KAB_EMBEDDED 224#ifndef KAB_EMBEDDED
224 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 ) 225 if ( QString::localeAwareCompare( *j2, *j1 ) < 0 )
225#else //KAB_EMBEDDED 226#else //KAB_EMBEDDED
226 if ( QString::compare( *j2, *j1 ) < 0 ) 227 if ( QString::compare( *j2, *j1 ) < 0 )
227#endif //KAB_EMBEDDED 228#endif //KAB_EMBEDDED
228 qSwap( *j1, *j2 ); 229 qSwap( *j1, *j2 );
229 230
230 ++j1; 231 ++j1;
231 ++j2; 232 ++j2;
232 } 233 }
233 ++beginIt; 234 ++beginIt;
234 --walkBackIt; 235 --walkBackIt;
235 } 236 }
236} 237}
237 238
238#ifndef KAB_EMBEDDED 239#ifndef KAB_EMBEDDED
239#include "jumpbuttonbar.moc" 240#include "jumpbuttonbar.moc"
240#endif //KAB_EMBEDDED 241#endif //KAB_EMBEDDED