author | eilers <eilers> | 2005-03-24 16:23:51 (UTC) |
---|---|---|
committer | eilers <eilers> | 2005-03-24 16:23:51 (UTC) |
commit | b390bcd32e188fc3c9fd7067bfc41b60b5e84ad4 (patch) (side-by-side diff) | |
tree | 38bc784605eb06a6669e8708c86cc9cebaa32b2a | |
parent | 29da9a4477210843435cbea3ede0d520775fe1a5 (diff) | |
download | opie-b390bcd32e188fc3c9fd7067bfc41b60b5e84ad4.zip opie-b390bcd32e188fc3c9fd7067bfc41b60b5e84ad4.tar.gz opie-b390bcd32e188fc3c9fd7067bfc41b60b5e84ad4.tar.bz2 |
In table view: Clicking on column 0 changes the sortorder.
Version of ths app was changed to 1.2.0
Requested by #1591
-rw-r--r-- | core/pim/addressbook/abtable.cpp | 93 | ||||
-rw-r--r-- | core/pim/addressbook/abtable.h | 1 | ||||
-rw-r--r-- | core/pim/addressbook/abview.cpp | 14 | ||||
-rw-r--r-- | core/pim/addressbook/abview.h | 2 | ||||
-rw-r--r-- | core/pim/addressbook/version.h | 4 |
5 files changed, 23 insertions, 91 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp index 49e66ad..60f3177 100644 --- a/core/pim/addressbook/abtable.cpp +++ b/core/pim/addressbook/abtable.cpp @@ -95,207 +95,158 @@ QWidget *AbPickItem::createEditor() const combo->setCurrentItem(cur); return combo; } void AbPickItem::setContentFromEditor( QWidget *w ) { if ( w->inherits("QComboBox") ) setText( ( (QComboBox*)w )->currentText() ); else QTableItem::setContentFromEditor( w ); } #endif /*! \class AbTable abtable.h \brief QTable based class for showing a list of entries */ AbTable::AbTable( const QValueList<int> order, QWidget *parent, const char *name ) : QTable( parent, name ), lastSortCol( -1 ), asc( TRUE ), intFields( order ), enablePainting( true ), columnVisible( true ), countNested( 0 ) { // odebug << "C'tor start" << oendl; setSelectionMode( NoSelection ); init(); - setSorting( TRUE ); + setSorting( false ); // The table should not sort by itself! + connect( this, SIGNAL(clicked(int,int,int,const QPoint&)), this, SLOT(itemClicked(int,int)) ); // contactList.clear(); // odebug << "C'tor end" << oendl; } AbTable::~AbTable() { } void AbTable::init() { // :SX showChar = '\0'; setNumRows( 0 ); setNumCols( 2 ); horizontalHeader()->setLabel( 0, tr( "Full Name" )); horizontalHeader()->setLabel( 1, tr( "Contact" )); setLeftMargin( 0 ); verticalHeader()->hide(); columnVisible = true; } void AbTable::setContacts( const Opie::OPimContactAccess::List& viewList ) { odebug << "AbTable::setContacts()" << oendl; clear(); m_viewList = viewList; - setSorting( false ); setPaintingEnabled( FALSE ); setNumRows( m_viewList.count() ); -// int row = 0; -// for ( it = m_viewList.begin(); it != m_viewList.end(); ++it ) -// insertIntoTable( *it, row++ ); - -// setSorting( true ); -// resort(); updateVisible(); setPaintingEnabled( TRUE ); } void AbTable::setOrderedList( const QValueList<int> ordered ) { intFields = ordered; } bool AbTable::selectContact( int UID ) { odebug << "AbTable::selectContact( " << UID << " )" << oendl; int rows = numRows(); bool found = false; setPaintingEnabled( FALSE ); odebug << "Search start" << oendl; for ( int r = 0; r < rows; ++r ) { if ( m_viewList.uidAt( r ) == UID ){ ensureCellVisible( r, 0 ); setCurrentCell( r, 0 ); found = true; break; } } odebug << "Search end" << oendl; if ( !found ){ ensureCellVisible( 0,0 ); setCurrentCell( 0, 0 ); } setPaintingEnabled( TRUE ); return true; } -#if 0 -void AbTable::insertIntoTable( const Opie::OPimContact& cnt, int row ) -{ - odebug << "void AbTable::insertIntoTable( const Opie::OPimContact& cnt, " - << row << " )" << oendl; - QString strName; - ContactItem contactItem; - - strName = findContactName( cnt ); - contactItem = findContactContact( cnt, row ); - - AbTableItem *ati; - ati = new AbTableItem( this, QTableItem::Never, strName, contactItem.value ); - contactList.insert( ati, cnt ); - setItem( row, 0, ati ); - ati = new AbTableItem( this, QTableItem::Never, contactItem.value, strName); - if ( !contactItem.icon.isNull() ) - ati->setPixmap( contactItem.icon ); - setItem( row, 1, ati ); - - //### cannot do this; table only has two columns at this point - // setItem( row, 2, new AbPickItem( this ) ); - -} -#endif - void AbTable::columnClicked( int col ) { - if ( !sorting() ) - return; - - if ( lastSortCol == -1 ) - lastSortCol = col; + odebug << "columClicked(" << col << ")" << oendl; - if ( col == lastSortCol ) { + if ( col == 0 ){ + odebug << "Change sort order: " << asc << oendl; asc = !asc; - } else { - lastSortCol = col; - asc = TRUE; + emit signalSortOrderChanged( asc ); } - //QMessageBox::information( this, "resort", "columnClicked" ); - resort(); } void AbTable::resort() { owarn << "void AbTable::resort() NOT POSSIBLE !!" << oendl; -#if 0 - setPaintingEnabled( FALSE ); - if ( sorting() ) { - if ( lastSortCol == -1 ) - lastSortCol = 0; - sortColumn( lastSortCol, asc, TRUE ); - //QMessageBox::information( this, "resort", "resort" ); - updateVisible(); - } - setPaintingEnabled( TRUE ); -#endif + } Opie::OPimContact AbTable::currentEntry() { return m_viewList[currentRow()]; } int AbTable::currentEntry_UID() { return ( currentEntry().uid() ); } void AbTable::clear() { odebug << "void AbTable::clear()" << oendl; // contactList.clear(); setPaintingEnabled( FALSE ); for ( int r = 0; r < numRows(); ++r ) { for ( int c = 0; c < numCols(); ++c ) { if ( cellWidget( r, c ) ) clearCellWidget( r, c ); clearCell( r, c ); } } setNumRows( 0 ); setPaintingEnabled( TRUE ); } // Refresh updates column 2 if the contactsettings changed void AbTable::refresh() { @@ -328,94 +279,64 @@ void AbTable::refresh() void AbTable::keyPressEvent( QKeyEvent *e ) { char key = toupper( e->ascii() ); if ( key >= 'A' && key <= 'Z' ) moveTo( key ); // odebug << "Received key .." << oendl; switch( e->key() ) { case Qt::Key_Space: case Qt::Key_Return: case Qt::Key_Enter: emit signalSwitch(); break; // case Qt::Key_Up: // odebug << "a" << oendl; // emit signalKeyUp(); // break; // case Qt::Key_Down: // odebug << "b" << oendl; // emit signalKeyDown(); // break; default: QTable::keyPressEvent( e ); } } void AbTable::moveTo( char /*c*/ ) { odebug << "void AbTable::moveTo( char c ) NOT IMPLEMENTED !!" << oendl; -#if 0 - int rows = numRows(); - QString value; - AbTableItem *abi; - int r; - if ( asc ) { - r = 0; - while ( r < rows-1) { - abi = static_cast<AbTableItem*>( item(r, 0) ); - QChar first = abi->key()[0]; - //### is there a bug in QChar to char comparison??? - if ( first.row() || first.cell() >= c ) - break; - r++; - } - } else { - //### should probably disable reverse sorting instead - r = rows - 1; - while ( r > 0 ) { - abi = static_cast<AbTableItem*>( item(r, 0) ); - QChar first = abi->key()[0]; - //### is there a bug in QChar to char comparison??? - if ( first.row() || first.cell() >= c ) - break; - r--; - } - } - setCurrentCell( r, currentColumn() ); - -#endif } #if 0 // Useless.. Nobody uses it .. (se) QString AbTable::findContactName( const Opie::OPimContact &entry ) { // We use the fileAs, then company, defaultEmail QString str; str = entry.fileAs(); if ( str.isEmpty() ) { str = entry.company(); if ( str.isEmpty() ) { str = entry.defaultEmail(); } } return str; } #endif void AbTable::resizeRows() { /* if (numRows()) { for (int i = 0; i < numRows(); i++) { setRowHeight( i, size ); } } updateVisible(); */ } diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h index 927a5a9..7d2818b 100644 --- a/core/pim/addressbook/abtable.h +++ b/core/pim/addressbook/abtable.h @@ -91,64 +91,65 @@ public: // Selects a contact of a specific UID bool selectContact( int UID ); // Get the current selected entry Opie::OPimContact currentEntry(); // Get the UID of the current selected Entry int currentEntry_UID(); // QString findContactName( const Opie::OPimContact &entry ); void init(); void clear(); void refresh(); void show(); void setPaintingEnabled( bool e ); void viewportPaintEvent( QPaintEvent* e); void paintCell(QPainter* p, int row, int col, const QRect&, bool ); // addresspicker mode (What's that ? se) // void setChoiceNames( const QStringList& list); // QStringList choiceNames() const; void setChoiceSelection( const QValueList<int>& list ); QStringList choiceSelection(int index) const; signals: void signalSwitch(); void signalEditor(); void signalKeyDown(); void signalKeyUp(); + void signalSortOrderChanged( bool order ); protected: virtual void keyPressEvent( QKeyEvent *e ); // int rowHeight( int ) const; // int rowPos( int row ) const; // virtual int rowAt( int pos ) const; protected slots: void moveTo( char ); virtual void columnClicked( int col ); void itemClicked(int,int col); void rowHeightChanged( int row ); private: // void insertIntoTable( const Opie::OPimContact &cnt, int row ); ContactItem findContactContact( const Opie::OPimContact &entry, int row ); void fitColumns(); void resizeRows(); void realignTable(); void resort(); void updateVisible(); int lastSortCol; bool asc; // QMap<AbTableItem*, Opie::OPimContact> contactList; QValueList<int> intFields; QStringList choicenames; bool enablePainting; bool columnVisible; int countNested; diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp index 8a2db96..9f7f71f 100644 --- a/core/pim/addressbook/abview.cpp +++ b/core/pim/addressbook/abview.cpp @@ -13,102 +13,105 @@ ** ** **********************************************************************/ #include "abview.h" #include <opie2/ocontactaccessbackend_vcard.h> #include <opie2/odebug.h> #include <qpe/global.h> #include <qlayout.h> #include <assert.h> // Is defined in LibQPE extern QString categoryFileName(); QString addressbookPersonalVCardName() { QString filename = Global::applicationFileName("addressbook", "businesscard.vcf"); return filename; } AbView::AbView ( QWidget* parent, const QValueList<int>& ordered ): QWidget(parent), mCat(0), m_inSearch( false ), m_inPersonal( false ), + m_sortOrder( true ), m_curr_category( 0 ), m_curr_View( TableView ), m_prev_View( TableView ), m_curr_Contact ( 0 ), m_contactdb ( 0l ), m_storedDB ( 0l ), m_viewStack( 0l ), m_abTable( 0l ), m_orderedFields( ordered ) { odebug << "AbView::c'tor" << oendl; // Load default database and handle syncing myself.. ! m_contactdb = new Opie::OPimContactAccess ( "addressbook", 0l, 0l, false ); m_contactdb -> setReadAhead( 16 ); // Use ReadAhead-Cache if available mCat.load( categoryFileName() ); // Create Layout and put WidgetStack into it. QVBoxLayout *vb = new QVBoxLayout( this ); m_viewStack = new QWidgetStack( this ); vb->addWidget( m_viewStack ); // Creat TableView QVBox* tableBox = new QVBox( m_viewStack ); m_abTable = new AbTable( m_orderedFields, tableBox, "table" ); m_abTable->setCurrentCell( 0, 0 ); m_abTable->setFocus(); // Add TableView to WidgetStack and raise it m_viewStack -> addWidget( tableBox , TableView ); // Create CardView and add it to WidgetStack QVBox* cardBox = new QVBox( m_viewStack ); m_ablabel = new AbLabel( cardBox, "CardView"); m_viewStack -> addWidget( cardBox , CardView ); // Connect views to me connect ( m_abTable, SIGNAL( signalSwitch(void) ), this, SLOT( slotSwitch(void) ) ); + connect ( m_abTable, SIGNAL( signalSortOrderChanged( bool ) ), + this, SLOT( slotSetSortOrder( bool ) ) ); connect ( m_ablabel, SIGNAL( signalOkPressed(void) ), this, SLOT( slotSwitch(void) ) ); load(); } AbView::~AbView() { m_contactdb -> save(); delete m_contactdb; if ( m_storedDB ){ m_storedDB -> save(); delete m_storedDB; } } void AbView::setView( Views view ) { odebug << "AbView::setView( Views view )" << oendl; m_curr_View = view; load(); } void AbView::addEntry( const Opie::OPimContact &newContact ) { odebug << "AbView::AddContact" << oendl; m_contactdb->add ( newContact ); load(); } @@ -132,73 +135,73 @@ Opie::OPimContact AbView::currentEntry() Opie::OPimContact currentContact; switch ( (int) m_curr_View ) { case TableView: currentContact = m_abTable -> currentEntry(); break; case CardView: currentContact = m_ablabel -> currentEntry(); break; } m_curr_Contact = currentContact.uid(); return currentContact; } bool AbView::save() { // odebug << "AbView::Save data" << oendl; return m_contactdb->save(); } void AbView::load() { odebug << "AbView::Load data" << oendl; // Letter Search is stopped at this place emit signalClearLetterPicker(); odebug << "selected Category: " << m_curr_category << oendl; if ( m_curr_category == -1 ) { // Show just unfiled contacts - m_list = m_contactdb->sorted( true, Opie::OPimContactAccess::SortFileAsName, + m_list = m_contactdb->sorted( m_sortOrder, Opie::OPimContactAccess::SortFileAsName, Opie::OPimContactAccess::DoNotShowWithCategory, 0 ); } else if ( m_curr_category == 0 ){ // Just show all contacts - m_list = m_contactdb->sorted( true, Opie::OPimContactAccess::SortFileAsName, + m_list = m_contactdb->sorted( m_sortOrder, Opie::OPimContactAccess::SortFileAsName, Opie::OPimBase::FilterOff, 0 ); } else { // Show contacts with given categories - m_list = m_contactdb->sorted( true, Opie::OPimContactAccess::SortFileAsName, + m_list = m_contactdb->sorted( m_sortOrder, Opie::OPimContactAccess::SortFileAsName, Opie::OPimBase::FilterCategory, m_curr_category ); } odebug << "Number of contacts: " << m_list.count() << oendl; updateView( true ); } void AbView::reload() { odebug << "AbView::::reload()" << oendl; m_contactdb->reload(); load(); } void AbView::clear() { // :SX } void AbView::setShowByCategory( const QString& cat ) { odebug << "AbView::setShowCategory( const QString& cat )" << oendl; int intCat = 0; // Unfiled will be stored as -1 if ( cat == tr( "Unfiled" ) ) intCat = -1; else if ( cat.isNull() ) @@ -387,64 +390,69 @@ void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, if ( m_curr_category != 0 ) clearForCategory(); // Now show all found entries updateView( true ); } void AbView::offSearch() { m_inSearch = false; load(); } void AbView::slotSwitch(){ // odebug << "AbView::slotSwitch()" << oendl; m_prev_View = m_curr_View; switch ( (int) m_curr_View ){ case TableView: odebug << "Switching to CardView" << oendl; m_curr_View = CardView; break; case CardView: odebug << "Switching to TableView" << oendl; m_curr_View = TableView; break; } updateView(); } +void AbView::slotSetSortOrder( bool order ){ + m_sortOrder = order; + reload(); +} + // END: Slots void AbView::clearForCategory() { Opie::OPimContactAccess::List::Iterator it; // Now remove all contacts with wrong category if any category selected Opie::OPimContactAccess::List allList = m_list; if ( m_curr_category != 0 ){ for ( it = allList.begin(); it != allList.end(); ++it ){ if ( !contactCompare( *it, m_curr_category ) ){ //odebug << "Removing " << (*it).uid() << oendl; m_list.remove( (*it).uid() ); } } } } bool AbView::contactCompare( const Opie::OPimContact &cnt, int category ) { // odebug << "bool AbView::contactCompare( const Opie::OPimContact &cnt, " // << category << " )" << oendl; bool returnMe; QArray<int> cats; cats = cnt.categories(); // odebug << "Number of categories: " << cats.count() << oendl; returnMe = false; if ( cats.count() == 0 && category == -1 ) diff --git a/core/pim/addressbook/abview.h b/core/pim/addressbook/abview.h index b8c8a08..07b6b28 100644 --- a/core/pim/addressbook/abview.h +++ b/core/pim/addressbook/abview.h @@ -29,62 +29,64 @@ public: void reload(); void clear(); void setView( Views view ); void showPersonal( bool personal ); void setCurrentUid( int uid ); void setShowByCategory( const QString& cat ); void setShowToView( Views view ); void setShowByLetter( char c, AbConfig::LPSearchMode mode = AbConfig::LastName ); void setListOrder( const QValueList<int>& ordered ); // Add Entry and put to current void addEntry( const Opie::OPimContact &newContact ); void removeEntry( const int UID ); void replaceEntry( const Opie::OPimContact &contact ); Opie::OPimContact currentEntry(); void inSearch() { m_inSearch = true; } void offSearch(); QString showCategory() const; QStringList categories(); signals: void signalNotFound(); void signalClearLetterPicker(); void signalViewSwitched ( int ); public slots: void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, bool backwards, QString category = QString::null ); void slotSwitch(); + void slotSetSortOrder( bool order ); private: void updateListinViews(); void updateView( bool newdata = false ); void clearForCategory(); bool contactCompare( const Opie::OPimContact &cnt, int category ); void parseName( const QString& name, QString *first, QString *middle, QString * last ); Categories mCat; bool m_inSearch; bool m_inPersonal; + bool m_sortOrder; int m_curr_category; Views m_curr_View; Views m_prev_View; int m_curr_Contact; Opie::OPimContactAccess* m_contactdb; Opie::OPimContactAccess* m_storedDB; Opie::OPimContactAccess::List m_list; QWidgetStack* m_viewStack; AbTable* m_abTable; AbLabel* m_ablabel; QValueList<int> m_orderedFields; }; #endif diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h index 7ce9752..8aafc85 100644 --- a/core/pim/addressbook/version.h +++ b/core/pim/addressbook/version.h @@ -1,10 +1,10 @@ #ifndef _VERSION_H_ #define _VERSION_H_ #define MAINVERSION "1" -#define SUBVERSION "1" -#define PATCHVERSION "1" +#define SUBVERSION "2" +#define PATCHVERSION "0" #define APPNAME "OPIE_ADDRESSBOOK" #endif |