-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 @@ -665,83 +665,95 @@ void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool us bool backwards, QString cat /* int category */ ) { int category = 0; // Use the current Category if nothing else selected if ( cat.isEmpty() ) category = mCat.id( "Contacts", showCat ); else{ category = mCat.id("Contacts", cat ); } qWarning ("Found in Category %d", category); 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 { int i; for ( i = 0; i < int(cats.count()); i++ ) { if ( cats[i] == category ) { returnMe = cnt.match( r ); break; } } } return returnMe; } 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 @@ -59,59 +59,65 @@ #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <qdatetime.h> #include "picker.h" #include "configdlg.h" static QString addressbookPersonalVCardName() { QString filename = Global::applicationFileName("addressbook", "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 ); QPEMenuBar *mbList = new QPEMenuBar( bar ); mbList->setMargin( 0 ); QPopupMenu *edit = new QPopupMenu( this ); mbList->insertItem( tr( "Contact" ), edit ); listTools = new QPEToolBar( this, "list operations" ); QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); @@ -148,49 +154,49 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, actionFind = a; connect( a, SIGNAL(activated()), this, SLOT( slotFindOpen()) ); a->addTo( edit ); a->addTo( listTools ); // Much better search widget, taken from QTReader.. (se) searchBar = new OFloatBar( "Search", this, QMainWindow::Top, TRUE ); searchBar->setHorizontalStretchable( TRUE ); searchBar->hide(); searchEdit = new QLineEdit( searchBar, "searchEdit" ); // QFont f("unifont", 16 /*, QFont::Bold*/); // searchEdit->setFont( f ); 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 ); actionBeam = a; connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) ); a->addTo( edit ); a->addTo( listTools ); } edit->insertSeparator(); a = new QAction( tr("Import vCard"), QString::null, 0, 0, 0, TRUE ); actionPersonal = a; connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) ); a->addTo( edit ); @@ -261,54 +267,58 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, fontMenu->insertItem(tr( "Normal" ), 1); fontMenu->insertItem(tr( "Large" ), 2); defaultFont = new QFont( abList->font() ); slotSetFont(startFontSize); mbList->insertItem( tr("Font"), fontMenu); setCentralWidget(listContainer); // qDebug("adressbook contrsuction: t=%d", t.elapsed() ); 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; QFont *currentFont; switch (size) { case 0: fontMenu->setItemChecked(0, true); fontMenu->setItemChecked(1, false); fontMenu->setItemChecked(2, false); abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() - 2 ) ); currentFont = new QFont (abList->font()); // abList->resizeRows(currentFont->pixelSize() + 7); abList->resizeRows(); @@ -359,48 +369,51 @@ void AddressbookWindow::setDocument( const QString &filename ) } } void AddressbookWindow::resizeEvent( QResizeEvent *e ) { QMainWindow::resizeEvent( e ); if ( centralWidget() == listContainer ) showList(); else if ( centralWidget() == mView ) showView(); } 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; visiblemView = false; if ( mView ) { mView->hide(); visiblemView = true; } setCentralWidget( listContainer ); listContainer->show(); // update our focues... (or use a stack widget!); abList->setFocus(); // This makes sure we are scrolled all the way to the left abList->setContentsPos( 0, abList->contentsY() ); @@ -473,50 +486,78 @@ void AddressbookWindow::slotViewBack() void AddressbookWindow::slotViewEdit() { if(!syncing) { if (actionPersonal->isOn()) { editPersonal(); } else { if ( !bAbEditFirstTime ) abEditor->setEntry( abList->currentEntry() ); editEntry( EditEntry ); } } else { 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 c = OContact::readVCard( filename )[0]; } else { unlink( beamfile ); // delete if exists c = abList->currentEntry(); mkdir("/tmp/obex/", 0755); OContact::writeVCard( beamfile, c ); filename = beamfile; } Ir *ir = new Ir( this ); connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); QString description = c.fullName(); ir->send( filename, description, "text/x-vCard" ); 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 @@ -97,37 +97,40 @@ private slots: private: void initFields(); // inititialize our fields... AbLabel *abView(); void populateCategories(); QPopupMenu *catMenu, *fontMenu; QPEToolBar *listTools; QToolButton *deleteButton; QValueList<int> allFields, orderedFields; QStringList slOrderedFields; enum Panes { paneList=0, paneView, paneEdit }; ContactEditor *abEditor; 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; }; #endif 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 @@ -1,45 +1,61 @@ #include "configdlg.h" #include <qcheckbox.h> #include <qradiobutton.h> 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 @@ -1,25 +1,29 @@ #ifndef _CONFIGDLG_H_ #define _CONFIGDLG_H_ #include "configdlg_base.h" 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 @@ -1,39 +1,39 @@ <!DOCTYPE UI><UI> <class>ConfigDlg_Base</class> <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> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QTabWidget</class> <property stdset="1"> <name>name</name> @@ -132,48 +132,151 @@ </widget> <spacer> <property> <name>name</name> <cstring>Spacer3</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> + <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> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>buttonOk</cstring> </property> <property stdset="1"> <name>text</name> 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 @@ -72,85 +72,85 @@ void PickerLabel::clearLetter() setText(tmpStr); currentLetter = 0; } 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; 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' ); } } void PickerLabel::emitClearSignal() { emit clearAll(); } LetterPicker::LetterPicker( QWidget *parent, const char *name ) : QFrame( parent, name ) { |