From 507afe645a86191815a2f85380a452ab6797e383 Mon Sep 17 00:00:00 2001 From: eilers Date: Mon, 21 Oct 2002 16:29:20 +0000 Subject: Some usability updates in picker and find.. --- (limited to 'core/pim/addressbook') diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index 4daa2a8..796dc49 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -6,10 +6,11 @@ Urgent: Important: -- Picker: Activated letter schould be more visible +- Cursor keys should work in detail-view (ablabel) - "What's this" should be added - Store last settings of combo-boxes - Mail-Icon is missing +- Overview window cleanup needed.. - Finishing of new View functions (List, Phonebook...) - The names of the countries are sorted by there english names, only.. Even if they are translated.. :S @@ -30,4 +31,6 @@ Fixed: - Syncing: abtable not reloaded after sync. - Find widget should be replaced by something like qpdf has. -- Adding a configuration dialog \ No newline at end of file +- Adding a configuration dialog +- Picker: Activated letter schould be more visible +- Advanced handling of cursor keys (search..) diff --git a/core/pim/addressbook/ablabel.cpp b/core/pim/addressbook/ablabel.cpp index cf1e39f..ea80700 100644 --- a/core/pim/addressbook/ablabel.cpp +++ b/core/pim/addressbook/ablabel.cpp @@ -47,7 +47,44 @@ void AbLabel::sync() void AbLabel::keyPressEvent( QKeyEvent *e ) { - if ( e->key() == Qt::Key_F33 ) { - emit okPressed(); - } + // Commonly handled keys + switch( e->key() ) { + case Qt::Key_Left: + qWarning( "Left.."); + case Qt::Key_F33: + qWarning( "OK.."); + emit okPressed(); + break; + } + + + if ( /* m_inSearch */ false ) { + // Running in seach-mode, therefore we will interprete + // some key differently + qWarning("Received key in search mode"); + switch( e->key() ) { + case Qt::Key_Up: + qWarning("a"); + // emit signalSearchBackward(); + break; + case Qt::Key_Down: + qWarning("b"); + // emit signalSearchNext(); + break; + } + + } else { + qWarning("Received key in NON search mode"); + + switch( e->key() ) { + case Qt::Key_Up: + qWarning("a"); + // emit signalSearchBackward(); + break; + case Qt::Key_Down: + qWarning("b"); + // emit signalSearchNext(); + break; + } + } } diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp index d4dcf7b..97b26db 100644 --- a/core/pim/addressbook/abtable.cpp +++ b/core/pim/addressbook/abtable.cpp @@ -130,6 +130,7 @@ AbTable::AbTable( const QValueList *order, QWidget *parent, const char *nam intFields( order ), currFindRow( -1 ), mCat( 0 ), + m_inSearch (false), m_contactdb ("addressbook", 0l, 0l, false) // Handle syncing myself.. ! { mCat.load( categoryFileName() ); @@ -260,14 +261,40 @@ void AbTable::keyPressEvent( QKeyEvent *e ) if ( key >= 'A' && key <= 'Z' ) moveTo( key ); - switch( e->key() ) { - case Qt::Key_Space: - case Qt::Key_Return: - case Qt::Key_Enter: - emit details(); - break; - default: - QTable::keyPressEvent( e ); + if ( m_inSearch ) { + // Running in seach-mode, therefore we will interprete + // some key differently + qWarning("Received key in search mode"); + switch( e->key() ) { + case Qt::Key_Space: + case Qt::Key_Return: + case Qt::Key_Enter: + emit details(); + break; + case Qt::Key_Up: + qWarning("a"); + emit signalSearchBackward(); + break; + case Qt::Key_Down: + qWarning("b"); + emit signalSearchNext(); + break; + default: + QTable::keyPressEvent( e ); + } + + } else { + qWarning("Received key in NON search mode"); + + switch( e->key() ) { + case Qt::Key_Space: + case Qt::Key_Return: + case Qt::Key_Enter: + emit details(); + break; + default: + QTable::keyPressEvent( e ); + } } } @@ -683,7 +710,7 @@ void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool us emit signalWrapAround(); else emit signalNotFound(); - + wrapAround = !wrapAround; } else { currFindRow = row; diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h index b445874..35a1e9e 100644 --- a/core/pim/addressbook/abtable.h +++ b/core/pim/addressbook/abtable.h @@ -98,6 +98,9 @@ public: QString showBook() const; + void inSearch() { m_inSearch = true; } + void offSearch() { m_inSearch = false; } + public slots: void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, bool backwards, QString category = QString::null ); @@ -106,6 +109,8 @@ signals: void details(); void signalNotFound(); void signalWrapAround(); + void signalSearchBackward(); // Signalled if backward search is requested + void signalSearchNext(); // Singalled if forward search is requested protected: virtual void keyPressEvent( QKeyEvent *e ); @@ -148,6 +153,8 @@ private: QString showBk; bool columnVisible; + bool m_inSearch; + OContactAccess m_contactdb; }; diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp index f7e4c95..3466801 100644 --- a/core/pim/addressbook/addressbook.cpp +++ b/core/pim/addressbook/addressbook.cpp @@ -78,13 +78,20 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, : QMainWindow( parent, name, f ), abEditor(0), useRegExp(false), - DoSignalWrapAround(false), + doNotifyWrapAround(true), caseSensitive(false), bAbEditFirstTime(TRUE), syncing(FALSE) { isLoading = true; + // Read Config settings + Config cfg("AddressBook"); + cfg.setGroup("Search"); + useRegExp = cfg.readBoolEntry( "useRegExp" ); + caseSensitive = cfg.readBoolEntry( "caseSensitive" ); + doNotifyWrapAround = cfg.readBoolEntry( "doNotifyWrapAround" ); + initFields(); setCaption( tr("Contacts") ); @@ -161,7 +168,7 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( slotFindClose() ) ); a->addTo( searchBar ); - + a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "qtmail/reply" ), QString::null, 0, this, 0 ); //a->setEnabled( FALSE ); we got support for it now :) zecke @@ -223,7 +230,13 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, // abList->setHScrollBarMode( QScrollView::AlwaysOff ); connect( abList, SIGNAL( empty( bool ) ), this, SLOT( listIsEmpty( bool ) ) ); connect( abList, SIGNAL( details() ), this, SLOT( slotListView() ) ); - connect( abList, SIGNAL(currentChanged(int,int)), this, SLOT(slotUpdateToolbar()) ); + connect( abList, SIGNAL( currentChanged(int,int) ), this, SLOT( slotUpdateToolbar() ) ); + connect( abList, SIGNAL( signalSearchNext() ), this, SLOT( slotFindNext() ) ); + connect( abList, SIGNAL( signalSearchBackward() ), this, SLOT( slotFindPrevious() ) ); + + // Maybe we should react on Wraparound and notfound ? + QObject::connect( abList, SIGNAL(signalNotFound()), this, SLOT(slotNotFound()) ); + QObject::connect( abList, SIGNAL(signalWrapAround()), this, SLOT(slotWrapAround()) ); mView = 0; @@ -258,13 +271,6 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, // qDebug("adressbook contrsuction: t=%d", t.elapsed() ); abList->setCurrentCell( 0, 0 ); - - // Read Config settings - Config cfg("AddressBook"); - cfg.setGroup("Search"); - useRegExp = cfg.readBoolEntry( "useRegExp" ); - caseSensitive = cfg.readBoolEntry( "caseSensitive" ); - DoSignalWrapAround = cfg.readBoolEntry( "signalWrapAround" ); isLoading = false; } @@ -275,13 +281,13 @@ void AddressbookWindow::slotConfig() ConfigDlg* dlg = new ConfigDlg( this, "Config" ); dlg -> setUseRegExp ( useRegExp ); dlg -> setBeCaseSensitive( caseSensitive ); - dlg -> setSignalWrapAround( DoSignalWrapAround ); + dlg -> setSignalWrapAround( doNotifyWrapAround ); dlg -> showMaximized(); if ( dlg -> exec() ) { qWarning ("Config Dialog accepted !"); useRegExp = dlg -> useRegExp(); caseSensitive = dlg -> beCaseSensitive(); - DoSignalWrapAround = dlg -> signalWrapAround(); + doNotifyWrapAround = dlg -> signalWrapAround(); } delete dlg; @@ -373,7 +379,7 @@ AddressbookWindow::~AddressbookWindow() cfg.setGroup("Search"); cfg.writeEntry("useRegExp", useRegExp); cfg.writeEntry("caseSensitive", caseSensitive); - cfg.writeEntry("signalWrapAround", DoSignalWrapAround); + cfg.writeEntry("doNotifyWrapAround", doNotifyWrapAround); } void AddressbookWindow::slotUpdateToolbar() @@ -656,9 +662,7 @@ void AddressbookWindow::slotPersonalView() setCaption( tr("Contacts") ); actionNew->setEnabled(TRUE); actionTrash->setEnabled(TRUE); -#ifndef MAKE_FOR_SHARP_ROM actionFind->setEnabled(TRUE); -#endif slotUpdateToolbar(); // maybe some of the above could be moved there showList(); return; @@ -928,11 +932,13 @@ AbLabel *AddressbookWindow::abView() void AddressbookWindow::slotFindOpen() { searchBar->show(); + abList -> inSearch(); searchEdit->setFocus(); } void AddressbookWindow::slotFindClose() { searchBar->hide(); + abList -> offSearch(); abList->setFocus(); } void AddressbookWindow::slotFindNext() @@ -940,12 +946,20 @@ void AddressbookWindow::slotFindNext() if ( centralWidget() == abView() ) showList(); - // Maybe we should react on Wraparound and notfound ? -// QObject::connect( abList, SIGNAL(signalNotFound()), &frmFind, SLOT(slotNotFound()) ); -// QObject::connect( abList, SIGNAL(signalWrapAround()), &frmFind, SLOT(slotWrapAround()) ); - abList->slotDoFind( searchEdit->text(), caseSensitive, useRegExp, false); + searchEdit->clearFocus(); + abList->setFocus(); + if ( abList->numSelections() ) + abList->clearSelection(); + +} +void AddressbookWindow::slotFindPrevious() +{ + if ( centralWidget() == abView() ) + showList(); + + abList->slotDoFind( searchEdit->text(), caseSensitive, useRegExp, true); if ( abList->numSelections() ) abList->clearSelection(); @@ -959,6 +973,24 @@ void AddressbookWindow::slotFind() slotFindNext(); } +void AddressbookWindow::slotNotFound() +{ + qWarning("Got notfound signal !"); + QMessageBox::information( this, tr( "Not Found" ), + tr( "Unable to find a contact for this" ) + "\n" + + tr( "search pattern !" ) ); + + +} +void AddressbookWindow::slotWrapAround() +{ + qWarning("Got wrap signal !"); + if ( doNotifyWrapAround ) + QMessageBox::information( this, tr( "End of list" ), + tr( "End of list. Wrap around now.. !" ) + "\n" ); + +} + void AddressbookWindow::slotSetCategory( int c ) { diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h index 18b083f..299ed70 100644 --- a/core/pim/addressbook/addressbook.h +++ b/core/pim/addressbook/addressbook.h @@ -62,6 +62,8 @@ public slots: void reload(); void appMessage(const QCString &, const QByteArray &); void setDocument( const QString & ); + void slotFindNext(); + void slotFindPrevious(); #ifdef __DEBUG_RELEASE void slotSave(); #endif @@ -87,7 +89,8 @@ private slots: void slotFindOpen(); void slotFindClose(); void slotFind(); - void slotFindNext(); + void slotNotFound(); + void slotWrapAround(); void slotConfig(); @@ -112,7 +115,7 @@ private: OFloatBar* searchBar; QLineEdit* searchEdit; bool useRegExp; - bool DoSignalWrapAround; + bool doNotifyWrapAround; bool caseSensitive; QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail; diff --git a/core/pim/addressbook/picker.cpp b/core/pim/addressbook/picker.cpp index a165451..7f4acb0 100644 --- a/core/pim/addressbook/picker.cpp +++ b/core/pim/addressbook/picker.cpp @@ -75,7 +75,16 @@ void PickerLabel::clearLetter() } -void PickerLabel::mouseReleaseEvent( QMouseEvent *e ) +void PickerLabel::mousePressEvent( QMouseEvent* e ) +{ + // If one pickerlabel is was, and an other is now selected, we + // have to simulate the releaseevent.. Otherwise the new label + // will not get a highlighted letter.. + // Maybe there is a more intelligent solution, but this works and I am tired.. (se) + if ( ( currentLetter == 0 ) && ( lastLetter != '\0' ) ) mouseReleaseEvent( e ); +} + +void PickerLabel::mouseReleaseEvent( QMouseEvent* /* e */ ) { QString tmpStr; @@ -84,9 +93,9 @@ void PickerLabel::mouseReleaseEvent( QMouseEvent *e ) switch (currentLetter) { case 0: - tmpStr = ""; + tmpStr = ""; tmpStr += letter1; - tmpStr += ""; + tmpStr += ""; tmpStr += letter2; tmpStr += letter3; tmpStr += ""; @@ -101,9 +110,9 @@ void PickerLabel::mouseReleaseEvent( QMouseEvent *e ) case 1: tmpStr = ""; tmpStr += letter1; - tmpStr += ""; + tmpStr += ""; tmpStr += letter2; - tmpStr += ""; + tmpStr += ""; tmpStr += letter3; tmpStr += ""; @@ -118,9 +127,9 @@ void PickerLabel::mouseReleaseEvent( QMouseEvent *e ) tmpStr = ""; tmpStr += letter1; tmpStr += letter2; - tmpStr += ""; + tmpStr += ""; tmpStr += letter3; - tmpStr += ""; + tmpStr += ""; setText(tmpStr); @@ -224,6 +233,7 @@ void LetterPicker::clear() void LetterPicker::newLetter( char letter ) { + qWarning("LetterClicked"); emit letterClicked( letter ); } diff --git a/core/pim/addressbook/picker.h b/core/pim/addressbook/picker.h index de5bd9d..d76d582 100644 --- a/core/pim/addressbook/picker.h +++ b/core/pim/addressbook/picker.h @@ -31,6 +31,7 @@ Q_OBJECT protected: void mouseReleaseEvent( QMouseEvent *e ); + void mousePressEvent( QMouseEvent *e ); private: @@ -48,6 +49,7 @@ Q_OBJECT public: LetterPicker( QWidget *parent = 0, const char *name = 0 ); ~LetterPicker(); + public slots: void clear(); @@ -57,6 +59,7 @@ Q_OBJECT private: PickerLabel *lblABC, *lblDEF, *lblGHI, *lblJKL, *lblMNO, *lblPQR, *lblSTU, *lblVWX, *lblYZ; + PickerLabel *lastLabel; private slots: void newLetter( char letter ); -- cgit v0.9.0.2