-rw-r--r-- | core/pim/addressbook/TODO | 7 | ||||
-rw-r--r-- | core/pim/addressbook/abtable.cpp | 76 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.cpp | 47 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.h | 3 | ||||
-rw-r--r-- | core/pim/addressbook/configdlg.cpp | 16 | ||||
-rw-r--r-- | core/pim/addressbook/configdlg.h | 4 | ||||
-rw-r--r-- | core/pim/addressbook/configdlg_base.ui | 105 | ||||
-rw-r--r-- | core/pim/addressbook/opie-addressbook.control | 2 | ||||
-rw-r--r-- | core/pim/addressbook/picker.cpp | 12 |
9 files changed, 227 insertions, 45 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index 796dc49..80ec2d9 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -1,36 +1,39 @@ Stuff todo until OPIE 1.0 : +Pending bugfixes from previous work: + Urgent: - Font menu is invisible using german translation Important: +- Overview window cleanup needed.. - 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 - Reload if contacts were changed externally Less important: - The picker (alphabetical sort widget) should be placed verticaly or horizontally (configurable) - Use advanced database functions in abtable to decrease memory footprint and to make everything more easy ! (abtable should store Iterator for selected Category) Should be Fixed (not absolute sure, need further validation): - "Nonenglish" translation bug has to be fixed. Fixed: - Syncing: abtable not reloaded after sync. - Find widget should be replaced by something like qpdf has. - Adding a configuration dialog - Picker: Activated letter schould be more visible - Advanced handling of cursor keys (search..) +- Mail-Icon is missing +- Use opie-mail insted of qt-mail if possible. diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp index 97b26db..4feadeb 100644 --- a/core/pim/addressbook/abtable.cpp +++ b/core/pim/addressbook/abtable.cpp @@ -677,59 +677,71 @@ void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool us if ( currFindRow < -1 ) currFindRow = - 1; clearSelection( TRUE ); int rows, row; AbTableItem *ati; QRegExp r( findString ); r.setCaseSensitive( caseSensitive ); r.setWildcard( !useRegExp ); rows = numRows(); static bool wrapAround = true; + bool try_again = false; - if ( !backwards ) { - for ( row = currFindRow + 1; row < rows; row++ ) { - ati = static_cast<AbTableItem*>( item(row, 0) ); - if ( contactCompare( contactList[ati], r, category ) ) - break; + // We will loop until we found an entry or found nothing. + do { + if ( !backwards ) { + for ( row = currFindRow + 1; row < rows; row++ ) { + ati = static_cast<AbTableItem*>( item(row, 0) ); + if ( contactCompare( contactList[ati], r, category ) ){ + try_again = false; + break; + } + } + } else { + for ( row = currFindRow - 1; row > -1; row-- ) { + ati = static_cast<AbTableItem*>( item(row, 0) ); + if ( contactCompare( contactList[ati], r, category ) ){ + try_again = false; + break; + } + } } - } else { - for ( row = currFindRow - 1; row > -1; row-- ) { - ati = static_cast<AbTableItem*>( item(row, 0) ); - if ( contactCompare( contactList[ati], r, category ) ) - break; + if ( row >= rows || row < 0 ) { + if ( row < 0 ) + currFindRow = rows; + else + currFindRow = -1; + + if ( wrapAround ){ + emit signalWrapAround(); + try_again = true; + }else{ + emit signalNotFound(); + try_again = false; + } + + wrapAround = !wrapAround; + } else { + currFindRow = row; + QTableSelection foundSelection; + foundSelection.init( currFindRow, 0 ); + foundSelection.expandTo( currFindRow, numCols() - 1 ); + addSelection( foundSelection ); + setCurrentCell( currFindRow, 0 /* numCols() - 1 */ ); + wrapAround = true; + try_again = false; } - } - if ( row >= rows || row < 0 ) { - if ( row < 0 ) - currFindRow = rows; - else - currFindRow = -1; - - if ( wrapAround ) - emit signalWrapAround(); - else - emit signalNotFound(); - - wrapAround = !wrapAround; - } else { - currFindRow = row; - QTableSelection foundSelection; - foundSelection.init( currFindRow, 0 ); - foundSelection.expandTo( currFindRow, numCols() - 1 ); - addSelection( foundSelection ); - setCurrentCell( currFindRow, 0 /* numCols() - 1 */ ); - wrapAround = true; - } + } while ( try_again ); } static bool contactCompare( const OContact &cnt, const QRegExp &r, int category ) { bool returnMe; QArray<int> cats; cats = cnt.categories(); returnMe = false; if ( (cats.count() == 0) || (category == 0) ) returnMe = cnt.match( r ); else { diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp index 3466801..39d8321 100644 --- a/core/pim/addressbook/addressbook.cpp +++ b/core/pim/addressbook/addressbook.cpp @@ -71,35 +71,41 @@ static QString addressbookPersonalVCardName() "businesscard.vcf"); return filename; } AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, WFlags f ) : QMainWindow( parent, name, f ), abEditor(0), useRegExp(false), doNotifyWrapAround(true), caseSensitive(false), + m_useQtMail(true), + m_useOpieMail(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" ); + cfg.setGroup("Mail"); + m_useQtMail = cfg.readBoolEntry( "useQtMail" ); + m_useOpieMail=cfg.readBoolEntry( "useOpieMail" ); + initFields(); setCaption( tr("Contacts") ); setIcon( Resource::loadPixmap( "AddressBook" ) ); setToolBarsMovable( FALSE ); // Create Toolbars QPEToolBar *bar = new QPEToolBar( this ); bar->setHorizontalStretchable( TRUE ); @@ -160,25 +166,25 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, searchBar->setStretchableWidget( searchEdit ); connect( searchEdit, SIGNAL( returnPressed( ) ), this, SLOT( slotFind( ) ) ); a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( slotFindNext() ) ); a->addTo( searchBar ); 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" ), + a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "mail/sendmail" ), QString::null, 0, this, 0 ); //a->setEnabled( FALSE ); we got support for it now :) zecke actionMail = a; connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) ); a->addTo( edit ); a->addTo( listTools ); if ( Ir::supported() ) { a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null, 0, this, 0 ); @@ -273,30 +279,34 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, abList->setCurrentCell( 0, 0 ); isLoading = false; } void AddressbookWindow::slotConfig() { ConfigDlg* dlg = new ConfigDlg( this, "Config" ); dlg -> setUseRegExp ( useRegExp ); dlg -> setBeCaseSensitive( caseSensitive ); dlg -> setSignalWrapAround( doNotifyWrapAround ); + dlg -> setQtMail ( m_useQtMail ); + dlg -> setOpieMail ( m_useOpieMail ); dlg -> showMaximized(); if ( dlg -> exec() ) { qWarning ("Config Dialog accepted !"); useRegExp = dlg -> useRegExp(); caseSensitive = dlg -> beCaseSensitive(); doNotifyWrapAround = dlg -> signalWrapAround(); + m_useQtMail = dlg -> useQtMail(); + m_useOpieMail= dlg -> useOpieMail(); } delete dlg; } void AddressbookWindow::slotSetFont( int size ) { if (size > 2 || size < 0) size = 1; startFontSize = size; @@ -371,24 +381,27 @@ void AddressbookWindow::resizeEvent( QResizeEvent *e ) } AddressbookWindow::~AddressbookWindow() { Config cfg("AddressBook"); cfg.setGroup("Font"); cfg.writeEntry("fontSize", startFontSize); cfg.setGroup("Search"); cfg.writeEntry("useRegExp", useRegExp); cfg.writeEntry("caseSensitive", caseSensitive); cfg.writeEntry("doNotifyWrapAround", doNotifyWrapAround); + cfg.setGroup("Mail"); + cfg.writeEntry( "useQtMail", m_useQtMail ); + cfg.writeEntry( "useOpieMail", m_useOpieMail); } void AddressbookWindow::slotUpdateToolbar() { OContact ce = abList->currentEntry(); actionMail->setEnabled( !ce.defaultEmail().isEmpty() ); } void AddressbookWindow::showList() { bool visiblemView; @@ -485,26 +498,54 @@ void AddressbookWindow::slotViewEdit() QMessageBox::warning( this, tr("Contacts"), tr("Can not edit data, currently syncing") ); } } void AddressbookWindow::writeMail() { OContact c = abList->currentEntry(); QString name = c.fileAs(); QString email = c.defaultEmail(); - QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)"); - e << name << email; + + // I prefer the OPIE-Environment variable before the + // QPE-one.. + QString basepath = QString::fromLatin1( getenv("OPIEDIR") ); + if ( basepath.isEmpty() ) + basepath = QString::fromLatin1( getenv("QPEDIR") ); + + // Try to access the preferred. If not possible, try to + // switch to the other one.. + if ( m_useQtMail ){ + qWarning ("Accessing: %s", (basepath + "/bin/qtmail").latin1()); + if ( QFile::exists( basepath + "/bin/qtmail" ) ){ + qWarning ("QCop"); + QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)"); + e << name << email; + return; + } else + m_useOpieMail = true; + } + if ( m_useOpieMail ){ + qWarning ("Accessing: %s", (basepath + "/bin/mail").latin1()); + if ( QFile::exists( basepath + "/bin/mail" ) ){ + qWarning ("QCop"); + QCopEnvelope e("QPE/Application/mail", "writeMail(QString,QString)"); + e << name << email; + return; + } else + m_useQtMail = true; + } + } static const char * beamfile = "/tmp/obex/contact.vcf"; void AddressbookWindow::slotBeam() { QString filename; OContact c; if ( actionPersonal->isOn() ) { filename = addressbookPersonalVCardName(); if (!QFile::exists(filename)) return; // can't beam a non-existent file diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h index 299ed70..8027ccf 100644 --- a/core/pim/addressbook/addressbook.h +++ b/core/pim/addressbook/addressbook.h @@ -109,24 +109,27 @@ private: AbLabel *mView; LetterPicker *pLabel; AbTable *abList; QWidget *listContainer; // Searching stuff OFloatBar* searchBar; QLineEdit* searchEdit; bool useRegExp; bool doNotifyWrapAround; bool caseSensitive; + bool m_useQtMail; + bool m_useOpieMail; + QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail; bool bAbEditFirstTime; int viewMargin; bool syncing; QFont *defaultFont; int startFontSize; bool isLoading; }; diff --git a/core/pim/addressbook/configdlg.cpp b/core/pim/addressbook/configdlg.cpp index b7c3b77..c0195d1 100644 --- a/core/pim/addressbook/configdlg.cpp +++ b/core/pim/addressbook/configdlg.cpp @@ -6,40 +6,56 @@ ConfigDlg::ConfigDlg( QWidget *parent = 0, const char *name = 0 ): ConfigDlg_Base(parent, name, true ) {} bool ConfigDlg::useRegExp() const { return m_useRegExp->isOn(); } bool ConfigDlg::useWildCards() const { return m_useWildCard->isOn(); } +bool ConfigDlg::useQtMail() const +{ + return m_useQtMail->isOn(); +} +bool ConfigDlg::useOpieMail() const +{ + return m_useOpieMail->isOn(); +} bool ConfigDlg::beCaseSensitive() const { return m_useCaseSensitive->isChecked(); } bool ConfigDlg::signalWrapAround() const { return m_signalWrapAround->isChecked(); } void ConfigDlg::setUseRegExp( bool v ) { m_useRegExp->setChecked( v ); } void ConfigDlg::setUseWildCards( bool v ) { m_useWildCard->setChecked( v ); } void ConfigDlg::setBeCaseSensitive( bool v ) { m_useCaseSensitive->setChecked( v ); } void ConfigDlg::setSignalWrapAround( bool v ) { m_signalWrapAround->setChecked( v ); } +void ConfigDlg::setQtMail( bool v ) +{ + m_useQtMail->setChecked( v ); +} +void ConfigDlg::setOpieMail( bool v ) +{ + m_useOpieMail->setChecked( v ); +} diff --git a/core/pim/addressbook/configdlg.h b/core/pim/addressbook/configdlg.h index 8be469b..34e9718 100644 --- a/core/pim/addressbook/configdlg.h +++ b/core/pim/addressbook/configdlg.h @@ -5,21 +5,25 @@ class ConfigDlg: public ConfigDlg_Base { Q_OBJECT public: ConfigDlg( QWidget *parent = 0, const char *name = 0 ); // Search Settings bool useRegExp() const; bool useWildCards() const; bool beCaseSensitive() const; bool signalWrapAround() const; + bool useQtMail() const; + bool useOpieMail() const; void setUseRegExp( bool v ); void setUseWildCards( bool v ); void setBeCaseSensitive( bool v ); void setSignalWrapAround( bool v ); + void setQtMail( bool v ); + void setOpieMail( bool v ); }; #endif diff --git a/core/pim/addressbook/configdlg_base.ui b/core/pim/addressbook/configdlg_base.ui index e082702..d3ea12e 100644 --- a/core/pim/addressbook/configdlg_base.ui +++ b/core/pim/addressbook/configdlg_base.ui @@ -3,25 +3,25 @@ <author>Stefan Eilers</author> <widget> <class>QDialog</class> <property stdset="1"> <name>name</name> <cstring>Configuration</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>227</width> + <width>217</width> <height>287</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>MyDialog1</string> </property> <property stdset="1"> <name>sizeGripEnabled</name> <bool>true</bool> </property> <vbox> @@ -144,24 +144,127 @@ <enum>Expanding</enum> </property> <property> <name>sizeHint</name> <size> <width>20</width> <height>20</height> </size> </property> </spacer> </vbox> </widget> + <widget> + <class>QWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>tab</cstring> + </property> + <attribute> + <name>title</name> + <string>Mail</string> + </attribute> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>5</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QButtonGroup</class> + <property stdset="1"> + <name>name</name> + <cstring>ButtonGroup2</cstring> + </property> + <property stdset="1"> + <name>title</name> + <string>Mail</string> + </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QRadioButton</class> + <property stdset="1"> + <name>name</name> + <cstring>m_useQtMail</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Prefer QT-Mail </string> + </property> + <property stdset="1"> + <name>checked</name> + <bool>true</bool> + </property> + </widget> + <widget> + <class>QRadioButton</class> + <property stdset="1"> + <name>name</name> + <cstring>m_useOpieMail</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Prefer Opie-Mail</string> + </property> + </widget> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel1</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Notice: QT-Mail is just +provided in the SHARP +default ROM. Opie-Mail +is provided free !</string> + </property> + </widget> + </vbox> + </widget> + <spacer> + <property> + <name>name</name> + <cstring>Spacer2</cstring> + </property> + <property stdset="1"> + <name>orientation</name> + <enum>Vertical</enum> + </property> + <property stdset="1"> + <name>sizeType</name> + <enum>Expanding</enum> + </property> + <property> + <name>sizeHint</name> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </vbox> + </widget> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout1</cstring> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> diff --git a/core/pim/addressbook/opie-addressbook.control b/core/pim/addressbook/opie-addressbook.control index 14b0770..0a04ee6 100644 --- a/core/pim/addressbook/opie-addressbook.control +++ b/core/pim/addressbook/opie-addressbook.control @@ -1,9 +1,9 @@ Files: bin/addressbook apps/1Pim/addressbook.desktop Priority: optional Section: opie/applications -Maintainer: Warwick Allison <warwick@trolltech.com> +Maintainer: Stefan Eilers <eilers.stefan@epost.de> Architecture: arm Version: $QPE_VERSION-$SUB_VERSION Depends: opie-base ($QPE_VERSION) libopie Description: Contacts A simple addressbook for the Opie environment. diff --git a/core/pim/addressbook/picker.cpp b/core/pim/addressbook/picker.cpp index 7f4acb0..2c7dd71 100644 --- a/core/pim/addressbook/picker.cpp +++ b/core/pim/addressbook/picker.cpp @@ -84,61 +84,61 @@ void PickerLabel::mousePressEvent( QMouseEvent* e ) if ( ( currentLetter == 0 ) && ( lastLetter != '\0' ) ) mouseReleaseEvent( e ); } void PickerLabel::mouseReleaseEvent( QMouseEvent* /* e */ ) { QString tmpStr; if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3 && lastLetter != '\0') QTimer::singleShot( 0, this, SLOT(emitClearSignal()) ); switch (currentLetter) { case 0: - tmpStr = "<qt><u><font color=\"#7F0000\">"; + tmpStr = "<qt><u><b><font color=\"#FF00FF\">"; tmpStr += letter1; - tmpStr += "</font></u>"; + tmpStr += "</font></b></u>"; tmpStr += letter2; tmpStr += letter3; tmpStr += "</qt>"; setText(tmpStr); currentLetter++; lastLetter = letter1; emit selectedLetter( letter1 ); break; case 1: tmpStr = "<qt>"; tmpStr += letter1; - tmpStr += "<u><font color=\"#7F0000\">"; + tmpStr += "<u><b><font color=\"#FF00FF\">"; tmpStr += letter2; - tmpStr += "</font></u>"; + tmpStr += "</font></b></u>"; tmpStr += letter3; tmpStr += "</qt>"; setText(tmpStr); currentLetter++; lastLetter = letter2; emit selectedLetter( letter2 ); break; case 2: tmpStr = "<qt>"; tmpStr += letter1; tmpStr += letter2; - tmpStr += "<u><font color=\"#7F0000\">"; + tmpStr += "<u><b><font color=\"#FF00FF\">"; tmpStr += letter3; - tmpStr += "</font></u></qt>"; + tmpStr += "</font></b></u></qt>"; setText(tmpStr); currentLetter++; lastLetter = letter3; emit selectedLetter( letter3 ); break; default: clearLetter(); lastLetter = '\0'; emit selectedLetter( '\0' ); |