-rw-r--r-- | kaddressbook/jumpbuttonbar.cpp | 43 | ||||
-rw-r--r-- | kaddressbook/kabcore.cpp | 6 |
2 files changed, 34 insertions, 15 deletions
diff --git a/kaddressbook/jumpbuttonbar.cpp b/kaddressbook/jumpbuttonbar.cpp index e89ec52..32922a6 100644 --- a/kaddressbook/jumpbuttonbar.cpp +++ b/kaddressbook/jumpbuttonbar.cpp @@ -28,207 +28,222 @@ #include <qtl.h> #include <qapplication.h> #include <kabc/addressbook.h> #include <kabc/field.h> #include <kdebug.h> #include <klocale.h> #include "kabcore.h" #include "jumpbuttonbar.h" class JumpButton : public QPushButton { public: JumpButton( const QString &text, QWidget *parent, const QString &character ); void setCharacter( const QString &character ); QString character() const; private: QString mCharacter; }; JumpButton::JumpButton( const QString &text, QWidget *parent, const QString &character ) : QPushButton( text, parent ) { mCharacter = character; } void JumpButton::setCharacter( const QString &character ) { mCharacter = character; setText(mCharacter.upper() ); } QString JumpButton::character() const { return mCharacter; } JumpButtonBar::JumpButtonBar( KABCore *core, QWidget *parent, const char *name ) : QWidget( parent, name ), mCore( core ) { if ( QApplication::desktop()->width() < 480 ) - mButtonLayout = new QGridLayout( this, 2, 14 ); + mButtonLayout = new QGridLayout( this, 1, 18 ); else - mButtonLayout = new QGridLayout( this, 1, 28 ); + mButtonLayout = new QGridLayout( this, 1, 20 ); mButtonLayout->setAlignment( Qt::AlignTop ); recreateButtons(); } JumpButtonBar::~JumpButtonBar() { } QSizePolicy JumpButtonBar::sizePolicy() const { #ifndef KAB_EMBEDDED return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum, QSizePolicy::Vertically ); #else //KAB_EMBEDDED return QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Minimum); #endif //KAB_EMBEDDED } void JumpButtonBar::letterClicked() { JumpButton *button = (JumpButton*)sender(); QString character = button->character(); if ( character.length() == 2 ) character = character.left(1) +"-"+character.right(1); if ( !character.isNull() ) emit jumpToLetter( character ); //qDebug("emit *%s* ",character.latin1()); } void JumpButtonBar::recreateButtons() { // the easiest way to remove all buttons ;) //mButtons.setAutoDelete( true ); //mButtons.clear(); //mButtons.setAutoDelete( false ); mCharacters.clear(); QString character; KABC::AddressBook *ab = mCore->addressBook(); KABC::AddressBook::Iterator it; KABC::Field *field = mCore->currentSearchField(); if ( field ) { setEnabled( true ); } else { setEnabled( false ); return; } mCharacters.append( "*"); for ( it = ab->begin(); it != ab->end(); ++it ) { if ( !field->value( *it ).isEmpty() ) character = field->value( *it )[ 0 ].lower(); if ( character != "!" ) if ( !character.isEmpty() && !mCharacters.contains( character ) ) mCharacters.append( character ); } if ( mCharacters.count() == 0 ) { setEnabled( false ); return; } int maxRows = mCharacters.count() / 2; // we use 2 columns if ( mCharacters.count() % 2 ) maxRows++; - int fixwid = 20; sortListLocaleAware( mCharacters ); bool skip2 = false; int skipcount = 0; - int maxHei = 25; - int roW = 15;//13 is ok - if ( QApplication::desktop()->width() < 480 && mCharacters.count() > roW ) { - skipcount = mCharacters.count()-roW ; - maxHei = (QApplication::desktop()->height()-65)/roW ; - } - else { - fixwid = 30; - if ( mCharacters.count() > 16 ) - skipcount = mCharacters.count()- 16; - maxHei = (QApplication::desktop()->height()-120)/(16); + int maxHei = 0; +#ifdef DESKTOP_VERSION + int maxChar = 26; + int heightDiff = 200; + int fixwid = 0; +#else + //default for 240x320 diaplay: + int maxChar = 16; + int heightDiff = 64; + int fixwid = 20; + if ( QApplication::desktop()->height() == 480 ) { + maxChar = 16; + heightDiff = 135; + fixwid = 34; + } else if ( QApplication::desktop()->height() >= 640 ) { + maxChar = 20; + heightDiff = 135; + fixwid = 34; } +#endif + + if ( mCharacters.count() > maxChar ) + skipcount = mCharacters.count()- maxChar; + maxHei = (QApplication::desktop()->height()-heightDiff)/(maxChar); + + maxRows = 28; bool skipcurrent = false; bool state = isUpdatesEnabled(); setUpdatesEnabled( false ); //qDebug("cc %d ",mCharacters.count() ); JumpButton *button = 0; int row = 0, col = 0; JumpButton* cur = mButtons.first(); for ( uint i = 0; i < mCharacters.count(); ++i ) { if ( skipcount > 0 && skipcurrent ) { --skipcount; if ( button ) { button->setCharacter( button->character() + mCharacters[ i ]); } } else { if ( cur ) { button = cur ; cur = mButtons.next(); button->setCharacter(mCharacters[ i ]); } else { button = new JumpButton( mCharacters[ i ].upper(), this, mCharacters[ i ] ); + if ( fixwid ) button->setFixedWidth( fixwid ); mButtons.append( button ); connect( button, SIGNAL( clicked() ), this, SLOT( letterClicked() ) ); mButtonLayout->addWidget( button, row, col ); } + if ( maxHei ) button->setMaximumHeight( maxHei ); button->show(); if ( col == maxRows ) { row = 0; col++; } else row++; } if ( i > 0 ) skipcurrent = !skipcurrent; } while ( cur ) { cur->hide(); cur = mButtons.next(); } mButtonLayout->activate(); setUpdatesEnabled( state ); update(); } void JumpButtonBar::sortListLocaleAware( QStringList &list ) { QStringList::Iterator beginIt = list.begin(); QStringList::Iterator endIt = list.end(); --endIt; if ( beginIt == endIt ) // don't need sorting return; QStringList::Iterator walkBackIt = endIt; while ( beginIt != endIt ) { QStringList::Iterator j1 = list.begin(); QStringList::Iterator j2 = j1; ++j2; while ( j1 != walkBackIt ) { #ifndef KAB_EMBEDDED if ( QString::localeAwareCompare( *j2, *j1 ) < 0 ) #else //KAB_EMBEDDED if ( QString::compare( *j2, *j1 ) < 0 ) #endif //KAB_EMBEDDED qSwap( *j1, *j2 ); ++j1; ++j2; } ++beginIt; diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index 0def16e..5987e99 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp @@ -1,67 +1,67 @@ /* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - As a special exception, permission is given to link this program + Async a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ /*s Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include "kabcore.h" #include <stdaddressbook.h> #include <klocale.h> #include <kfiledialog.h> #include <qtimer.h> #include <qlabel.h> #include <qregexp.h> #include <qlineedit.h> #include <qcheckbox.h> #include <qpushbutton.h> #include <qprogressbar.h> #include <libkdepim/phoneaccess.h> #ifndef KAB_EMBEDDED #include <qclipboard.h> #include <qdir.h> #include <qfile.h> #include <qapplicaton.h> #include <qprogressbar.h> #include <qlayout.h> #include <qregexp.h> #include <qvbox.h> #include <kabc/addresseelist.h> #include <kabc/errorhandler.h> #include <kabc/resource.h> #include <kabc/vcardconverter.h> #include <kapplication.h> #include <kactionclasses.h> #include <kcmultidialog.h> #include <kdebug.h> #include <kdeversion.h> #include <kkeydialog.h> #include <kmessagebox.h> #include <kprinter.h> #include <kprotocolinfo.h> #include <kresources/selectdialog.h> @@ -2069,97 +2069,101 @@ void KABCore::initActions() "faq_about_data" ); mActionWN = new KAction( i18n( "What's New?" ), 0, this, SLOT( whatsnew() ), actionCollection(), "wn" ); mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0, this, SLOT( synchowto() ), actionCollection(), "sync" ); mActionKdeSyncHowto = new KAction( i18n( "Kde Sync HowTo" ), 0, this, SLOT( kdesynchowto() ), actionCollection(), "kdesync" ); mActionMultiSyncHowto = new KAction( i18n( "Multi Sync HowTo" ), 0, this, SLOT( multisynchowto() ), actionCollection(), "multisync" ); mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, this, SLOT( createAboutData() ), actionCollection(), "kaddressbook_about_data" ); #endif //KAB_EMBEDDED clipboardDataChanged(); connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); } //US we need this function, to plug all actions into the correct menues. // KDE uses a XML format to plug the actions, but we work her without this overhead. void KABCore::addActionsManually() { //US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); #ifdef KAB_EMBEDDED QPopupMenu *fileMenu = new QPopupMenu( this ); QPopupMenu *editMenu = new QPopupMenu( this ); QPopupMenu *helpMenu = new QPopupMenu( this ); KToolBar* tb = mMainWindow->toolBar(); #ifndef DESKTOP_VERSION if ( KABPrefs::instance()->mFullMenuBarVisible ) { #endif QMenuBar* mb = mMainWindow->menuBar(); //US setup menubar. //Disable the following block if you do not want to have a menubar. mb->insertItem( i18n("&File"), fileMenu ); mb->insertItem( i18n("&Edit"), editMenu ); mb->insertItem( i18n("&View"), viewMenu ); mb->insertItem( i18n("&Settings"), settingsMenu ); +#ifdef DESKTOP_VERSION mb->insertItem( i18n("Synchronize"), syncMenu ); +#else + mb->insertItem( i18n("Sync"), syncMenu ); +#endif //mb->insertItem( i18n("&Change"), changeMenu ); mb->insertItem( i18n("&Help"), helpMenu ); mIncSearchWidget = new IncSearchWidget( tb ); // tb->insertWidget(-1, 0, mIncSearchWidget); #ifndef DESKTOP_VERSION } else { //US setup toolbar QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); QPopupMenu *popupBarTB = new QPopupMenu( this ); menuBarTB->insertItem( "ME", popupBarTB); tb->insertWidget(-1, 0, menuBarTB); mIncSearchWidget = new IncSearchWidget( tb ); tb->enableMoving(false); popupBarTB->insertItem( i18n("&File"), fileMenu ); popupBarTB->insertItem( i18n("&Edit"), editMenu ); popupBarTB->insertItem( i18n("&View"), viewMenu ); popupBarTB->insertItem( i18n("&Settings"), settingsMenu ); popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); mViewManager->getFilterAction()->plug ( popupBarTB); //popupBarTB->insertItem( i18n("&Change selected"), changeMenu ); popupBarTB->insertItem( i18n("&Help"), helpMenu ); if (QApplication::desktop()->width() > 320 ) { // mViewManager->getFilterAction()->plug ( tb); } } #endif // mActionQuit->plug ( mMainWindow->toolBar()); //US Now connect the actions with the menue entries. #ifdef DESKTOP_VERSION mActionPrint->plug( fileMenu ); mActionPrintDetails->plug( fileMenu ); fileMenu->insertSeparator(); #endif mActionMail->plug( fileMenu ); fileMenu->insertSeparator(); mActionNewContact->plug( fileMenu ); mActionNewContact->plug( tb ); mActionEditAddressee->plug( fileMenu ); // if ((KGlobal::getDesktopSize() > KGlobal::Small ) || // (!KABPrefs::instance()->mMultipleViewsAtOnce )) mActionEditAddressee->plug( tb ); |