summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (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
@@ -21,220 +21,221 @@
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