-rw-r--r-- | core/pim/addressbook/abtable.cpp | 26 | ||||
-rw-r--r-- | core/pim/addressbook/abtable.h | 2 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.cpp | 12 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.h | 3 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.pro | 6 | ||||
-rw-r--r-- | core/pim/addressbook/picker.cpp | 234 | ||||
-rw-r--r-- | core/pim/addressbook/picker.h | 65 |
7 files changed, 344 insertions, 4 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp index 17277b4..759cb48 100644 --- a/core/pim/addressbook/abtable.cpp +++ b/core/pim/addressbook/abtable.cpp @@ -152,2 +152,3 @@ void AbTable::init() { + showChar = '\0'; setNumRows( 0 ); @@ -454,3 +455,3 @@ void AbTable::addEntry( const Contact &newCnt ) void AbTable::resizeRows( int size ) { - +/* if (numRows()) { @@ -459,3 +460,4 @@ void AbTable::resizeRows( int size ) { } - } + }*/ + updateVisible(); } @@ -1010,2 +1012,9 @@ void AbTable::setShowCategory( const QString &c ) +void AbTable::setShowByLetter( char c ) +{ + showChar = tolower(c); + qDebug( "AbTable::setShowByLetter %c", showChar); + updateVisible(); +} + QString AbTable::showCategory() const @@ -1034,2 +1043,4 @@ void AbTable::updateVisible() Contact *cnt; + QString fileAsName; + QString tmpStr; visible = 0; @@ -1045,2 +1056,3 @@ void AbTable::updateVisible() cats = cnt->categories(); + fileAsName = cnt->fileAs(); hide = false; @@ -1064,2 +1076,12 @@ void AbTable::updateVisible() } + if ( showChar != '\0' ) { + tmpStr = fileAsName.left(1); + tmpStr = tmpStr.lower(); + qDebug( "updateVisible "); + qDebug( tmpStr ); + qDebug( "updateVisible2 %c", showChar ); + if ( tmpStr != QString(QChar(showChar)) ) { + hide = true; + } + } if ( hide ) { diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h index 53635ee..d5ff279 100644 --- a/core/pim/addressbook/abtable.h +++ b/core/pim/addressbook/abtable.h @@ -86,2 +86,3 @@ public: void setShowCategory( const QString &c ); + void setShowByLetter( char c ); QString showCategory() const; @@ -132,2 +133,3 @@ private: bool asc; + char showChar; QMap<AbTableItem*, Contact> contactList; diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp index 360aa7e..e502cf6 100644 --- a/core/pim/addressbook/addressbook.cpp +++ b/core/pim/addressbook/addressbook.cpp @@ -65,2 +65,3 @@ +#include "picker.h" static QString addressbookOldXMLFilename() @@ -100,2 +101,3 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, + QBoxLayout *vb = new QVBoxLayout( this, 0, 0 ); // Create Toolbars @@ -191,2 +193,3 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, abList = new AbTable( &orderedFields, this, "table" ); + vb->insertWidget(0,abList); abList->setHScrollBarMode( QScrollView::AlwaysOff ); @@ -207,2 +210,5 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, + pLabel = new LetterPicker( abList ); + connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char))); + vb->insertWidget(1,pLabel); catMenu = new QPopupMenu( this ); @@ -886,2 +892,8 @@ void AddressbookWindow::slotSetCategory( int c ) +void AddressbookWindow::slotSetLetter( char c ) { + + abList->setShowByLetter( c ); + +} + void AddressbookWindow::populateCategories() diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h index e2a7100..31c4660 100644 --- a/core/pim/addressbook/addressbook.h +++ b/core/pim/addressbook/addressbook.h @@ -33,2 +33,3 @@ class Ir; class QAction; +class LetterPicker; @@ -71,2 +72,3 @@ private slots: void slotSetCategory( int ); + void slotSetLetter( char ); void slotUpdateToolbar(); @@ -87,2 +89,3 @@ private: AbLabel *mView; + LetterPicker *pLabel; AbTable *abList; diff --git a/core/pim/addressbook/addressbook.pro b/core/pim/addressbook/addressbook.pro index 53cf030..0d65c74 100644 --- a/core/pim/addressbook/addressbook.pro +++ b/core/pim/addressbook/addressbook.pro @@ -7,3 +7,4 @@ HEADERS = addressbook.h \ abtable.h \ - addresssettings.h + addresssettings.h \ + picker.h SOURCES = main.cpp \ @@ -13,3 +14,4 @@ SOURCES = main.cpp \ abtable.cpp \ - addresssettings.cpp + addresssettings.cpp \ + picker.cpp INTERFACES = addresssettingsbase.ui diff --git a/core/pim/addressbook/picker.cpp b/core/pim/addressbook/picker.cpp new file mode 100644 index 0000000..06dcc7d --- a/dev/null +++ b/core/pim/addressbook/picker.cpp @@ -0,0 +1,234 @@ +#include "picker.h" + +#include <qfont.h> +#include <qstring.h> +#include <qtimer.h> +#include <qlayout.h> + +char PickerLabel::lastLetter = '\0'; + +PickerLabel::PickerLabel( QWidget *parent, const char *name ) + : QLabel ( parent, name ) +{ + currentLetter = 0; + //lastLetter = 0; + + letter1 = '\0'; + letter2 = '\0'; + letter3 = '\0'; + + setFont( QFont( "smallsmooth", 9 ) ); + setTextFormat( Qt::RichText ); + +} + +PickerLabel::~PickerLabel() +{ + +} + +void PickerLabel::setLetters( char ch1, char ch2, char ch3 ) +{ + QString tmpStr; + + if (ch1 != '\0') + letter1 = ch1; + else + letter1 = ' '; + + if (ch2 != '\0') + letter2 = ch2; + else + letter2 = ' '; + + if (ch3 != '\0') + letter3 = ch3; + else + letter3 = ' '; + + tmpStr = "<qt>"; + tmpStr += letter1; + tmpStr += letter2; + tmpStr += letter3; + tmpStr += "</qt>"; + + setText(tmpStr); + + currentLetter = 0; + +} + +void PickerLabel::clearLetter() +{ + + QString tmpStr; + + tmpStr = "<qt>"; + tmpStr += letter1; + tmpStr += letter2; + tmpStr += letter3; + tmpStr += "</qt>"; + + setText(tmpStr); + + currentLetter = 0; + +} + +void PickerLabel::mouseReleaseEvent( QMouseEvent *e ) +{ + QString tmpStr; + + if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3) + QTimer::singleShot( 0, this, SLOT(emitClearSignal()) ); + + qDebug( "a" ); + switch (currentLetter) { + case 0: + tmpStr = "<qt><font color=\"#7F0000\">"; + tmpStr += letter1; + tmpStr += "</font>"; + tmpStr += letter2; + tmpStr += letter3; + tmpStr += "</qt>"; + + setText(tmpStr); + + currentLetter++; + lastLetter = letter1; + emit selectedLetter( letter1 ); + qDebug( "PickerLabel::mouseReleaseEvent %c", letter1 ); + break; + + case 1: + tmpStr = "<qt>"; + tmpStr += letter1; + tmpStr += "<font color=\"#7F0000\">"; + tmpStr += letter2; + tmpStr += "</font>"; + tmpStr += letter3; + tmpStr += "</qt>"; + + setText(tmpStr); + + currentLetter++; + lastLetter = letter2; + emit selectedLetter( letter2 ); + qDebug( "PickerLabel::mouseReleaseEvent %c", letter2 ); + break; + + case 2: + tmpStr = "<qt>"; + tmpStr += letter1; + tmpStr += letter2; + tmpStr += "<font color=\"#7F0000\">"; + tmpStr += letter3; + tmpStr += "</font></qt>"; + + setText(tmpStr); + + currentLetter++; + lastLetter = letter3; + emit selectedLetter( letter3 ); + qDebug( "PickerLabel::mouseReleaseEvent %c", letter3 ); + break; + + default: + clearLetter(); + lastLetter = '\0'; + emit selectedLetter( '\0' ); + + + } +} + +void PickerLabel::emitClearSignal() { + emit clearAll(); +} + +LetterPicker::LetterPicker( QWidget *parent, const char *name ) + : QFrame( parent, name ) +{ + QHBoxLayout *l = new QHBoxLayout(this); + + lblABC = new PickerLabel( this ); + l->addWidget( lblABC ); + + lblDEF = new PickerLabel( this ); + l->addWidget( lblDEF ); + + lblGHI = new PickerLabel( this ); + l->addWidget( lblGHI ); + + lblJKL = new PickerLabel( this ); + l->addWidget( lblJKL ); + + lblMNO = new PickerLabel( this ); + l->addWidget( lblMNO ); + + lblPQR = new PickerLabel( this ); + l->addWidget( lblPQR ); + + lblSTU = new PickerLabel( this ); + l->addWidget( lblSTU ); + + lblVWX = new PickerLabel( this ); + l->addWidget( lblVWX ); + + lblYZ = new PickerLabel( this ); + l->addWidget( lblYZ ); + + lblABC->setLetters( 'A', 'B', 'C' ); + lblDEF->setLetters( 'D', 'E', 'F' ); + lblGHI->setLetters( 'G', 'H', 'I' ); + lblJKL->setLetters( 'J', 'K', 'L' ); + lblMNO->setLetters( 'M', 'N', 'O' ); + lblPQR->setLetters( 'P', 'Q', 'R' ); + lblSTU->setLetters( 'S', 'T', 'U' ); + lblVWX->setLetters( 'V', 'W', 'X' ); + lblYZ->setLetters( 'Y', 'Z', '#' ); + + connect(lblABC, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblDEF, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblGHI, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblJKL, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblMNO, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblPQR, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblSTU, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblVWX, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblYZ, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); + connect(lblABC, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblDEF, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblGHI, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblJKL, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblMNO, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblPQR, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblSTU, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblVWX, SIGNAL(clearAll()), this, SLOT(clear())); + connect(lblYZ, SIGNAL(clearAll()), this, SLOT(clear())); + +} + +LetterPicker::~LetterPicker() +{ +} + +void LetterPicker::clear() +{ + lblABC->clearLetter(); + lblDEF->clearLetter(); + lblGHI->clearLetter(); + lblJKL->clearLetter(); + lblMNO->clearLetter(); + lblPQR->clearLetter(); + lblSTU->clearLetter(); + lblVWX->clearLetter(); + lblYZ->clearLetter(); +} + +void LetterPicker::newLetter( char letter ) +{ + qDebug( "LetterPicker::newLetter %c", letter ); + emit letterClicked( letter ); + +} diff --git a/core/pim/addressbook/picker.h b/core/pim/addressbook/picker.h new file mode 100644 index 0000000..de5bd9d --- a/dev/null +++ b/core/pim/addressbook/picker.h @@ -0,0 +1,65 @@ +/* + * Letter Chooser Widget. + * + * (c) 2002 Mike Crawford + * + * This file is FREE SOFTWARE covered under the GUN General Public License. + * + * +*/ +#ifndef PICKER_H +#define PICKER_H + +#include <qlabel.h> +#include <qframe.h> +#include <qevent.h> + +class PickerLabel: public QLabel { +Q_OBJECT + public: + PickerLabel( QWidget *parent = 0, const char *name = 0 ); + ~PickerLabel(); + + void setLetters( char ch1, char ch2, char ch3 ); + void clearLetter(); + + signals: + + void selectedLetter( char ); + void clearAll(); + + protected: + + void mouseReleaseEvent( QMouseEvent *e ); + + private: + + int currentLetter; + static char lastLetter; + char letter1, letter2, letter3; + + private slots: + + void emitClearSignal(); + +}; +class LetterPicker: public QFrame { +Q_OBJECT + public: + LetterPicker( QWidget *parent = 0, const char *name = 0 ); + ~LetterPicker(); + + public slots: + void clear(); + + signals: + void letterClicked( char ); + + private: + PickerLabel *lblABC, *lblDEF, *lblGHI, *lblJKL, *lblMNO, *lblPQR, *lblSTU, *lblVWX, *lblYZ; + + private slots: + void newLetter( char letter ); +}; + +#endif |