Diffstat (limited to 'core/pim/addressbook/abview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/pim/addressbook/abview.cpp | 186 |
1 files changed, 150 insertions, 36 deletions
diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp index d35e392..8d22129 100644 --- a/core/pim/addressbook/abview.cpp +++ b/core/pim/addressbook/abview.cpp @@ -2,2 +2,9 @@ +#include <qlayout.h> + +#include <qpe/global.h> + +#include <opie/ocontactaccessbackend_vcard.h> + + // Is defined in LibQPE @@ -5,5 +12,11 @@ extern QString categoryFileName(); -#include <qlayout.h> +QString addressbookPersonalVCardName() +{ + QString filename = Global::applicationFileName("addressbook", + "businesscard.vcf"); + return filename; +} -AbView::AbView ( QWidget* parent, const QValueList<int>& ordered, const QStringList& slOrderedFields ): + +AbView::AbView ( QWidget* parent, const QValueList<int>& ordered ): QWidget(parent), @@ -11,3 +24,4 @@ AbView::AbView ( QWidget* parent, const QValueList<int>& ordered, const QStringL m_inSearch( false ), - m_curr_category( 0 ), + m_inPersonal( false ), + m_curr_category( -1 ), m_curr_View( TableView ), @@ -15,8 +29,10 @@ AbView::AbView ( QWidget* parent, const QValueList<int>& ordered, const QStringL m_curr_Contact ( 0 ), - m_contactdb ( "addressbook", 0l, 0l, false ), // Handle syncing myself.. ! + m_contactdb ( 0l ), + m_storedDB ( 0l ), m_viewStack( 0l ), m_abTable( 0l ), - m_orderedFields( ordered ), - m_slOrderedFields( slOrderedFields ) + m_orderedFields( ordered ) { + // Load default database and handle syncing myself.. ! + m_contactdb = new OContactAccess ( "addressbook", 0l, 0l, false ), mCat.load( categoryFileName() ); @@ -30,3 +46,3 @@ AbView::AbView ( QWidget* parent, const QValueList<int>& ordered, const QStringL QVBox* tableBox = new QVBox( m_viewStack ); - m_abTable = new AbTable( &m_orderedFields, tableBox, "table" ); + m_abTable = new AbTable( m_orderedFields, tableBox, "table" ); m_abTable->setCurrentCell( 0, 0 ); @@ -51,2 +67,14 @@ AbView::AbView ( QWidget* parent, const QValueList<int>& ordered, const QStringL +AbView::~AbView() +{ + m_contactdb -> save(); + delete m_contactdb; + + if ( m_storedDB ){ + m_storedDB -> save(); + delete m_storedDB; + } +} + + void AbView::setView( Views view ) @@ -61,3 +89,3 @@ void AbView::addEntry( const OContact &newContact ) qWarning("abview:AddContact"); - m_contactdb.add ( newContact ); + m_contactdb->add ( newContact ); load(); @@ -68,3 +96,3 @@ void AbView::removeEntry( const int UID ) qWarning("abview:RemoveContact"); - m_contactdb.remove( UID ); + m_contactdb->remove( UID ); load(); @@ -75,3 +103,3 @@ void AbView::replaceEntry( const OContact &contact ) qWarning("abview:ReplaceContact"); - m_contactdb.replace( contact ); + m_contactdb->replace( contact ); load(); @@ -97,6 +125,5 @@ bool AbView::save() - return m_contactdb.save(); + return m_contactdb->save(); } -// :SX Add: Just load for specific Category void AbView::load() @@ -105,5 +132,11 @@ void AbView::load() - m_list = m_contactdb.allRecords(); + if ( m_inPersonal ) + m_list = m_contactdb->allRecords(); + else + m_list = m_contactdb->sorted( true, 0, 0, 0 ); + clearForCategory(); - m_curr_Contact = 0; + + // Feed all views with new lists + updateListinViews(); @@ -117,3 +150,5 @@ void AbView::reload() { - m_contactdb.reload(); + qWarning( "void AbView::reload()" ); + + m_contactdb->reload(); load(); @@ -129,14 +164,39 @@ void AbView::setShowByCategory( Views view, const QString& cat ) qWarning("AbView::setShowCategory( Views view, const QString& cat )"); - m_curr_View = view; - emit signalClearLetterPicker(); +// if ( view == PersonalView ){ +// if ( ! m_inPersonal ) +// showPersonal( true ); + +// }else{ +// if ( m_inPersonal ) +// showPersonal( false ); - if ( !cat.isNull() ) - m_curr_category = mCat.id("Contacts", cat ); +// m_curr_View = view; +// } + + int intCat = 0; + + // All (cat == NULL) will be stored as -1 + if ( cat.isNull() ) + intCat = -1; else - m_curr_category = -1; // Set to all + intCat = mCat.id("Contacts", cat ); - qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category); + // If we just change the view, we don't have to reload any data.. + // This speeds up a lot of things ! + if ( intCat == m_curr_category ){ + qWarning ("Just change the View (Category is: %d)", m_curr_category); + m_prev_View = m_curr_View; + m_curr_View = view; - load(); + updateView(); + }else{ + qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category); + + m_curr_View = view; + m_curr_category = intCat; + emit signalClearLetterPicker(); + + load(); + } @@ -152,3 +212,3 @@ void AbView::setShowByLetter( char c ) query.setLastName( QString("%1*").arg(c) ); - m_list = m_contactdb.queryByExample( query, OContactAccess::WildCards ); + m_list = m_contactdb->queryByExample( query, OContactAccess::WildCards ); clearForCategory(); @@ -159,2 +219,9 @@ void AbView::setShowByLetter( char c ) +void AbView::setListOrder( const QValueList<int>& ordered ) +{ + m_orderedFields = ordered; + updateView(); +} + + QString AbView::showCategory() const @@ -164,6 +231,40 @@ QString AbView::showCategory() const -void AbView::showContact( const OContact& cnt ) +void AbView::showPersonal( bool personal ) { - qWarning ("void AbView::showContact( const OContact& cnt )"); - // :SX + qWarning ("void AbView::showPersonal( %d )", personal); + + if ( personal ){ + + if ( m_inPersonal ) + return; + + // Now switch to vCard Backend and load data. + // The current default backend will be stored + // to avoid unneeded load/stores. + m_storedDB = m_contactdb; + + OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, + addressbookPersonalVCardName() ); + m_contactdb = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); + + m_inPersonal = true; + m_curr_View = CardView; + + }else{ + + if ( !m_inPersonal ) + return; + + // Remove vCard Backend and restore default + m_contactdb->save(); + delete m_contactdb; + + m_contactdb = m_storedDB; + m_storedDB = 0l; + + m_curr_View = TableView; + m_inPersonal = false; + + } + load(); } @@ -182,4 +283,7 @@ void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, qWarning( "void AbView::slotDoFind" ); - // Use the current Category if nothing else selected + // We reloading the data: Deselect Letterpicker + emit signalClearLetterPicker(); + + // Use the current Category if nothing else selected int category = 0; @@ -199,3 +303,3 @@ void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, // Get all matching entries out of the database - m_list = m_contactdb.matchRegexp( r ); + m_list = m_contactdb->matchRegexp( r ); @@ -247,5 +351,6 @@ void AbView::clearForCategory() // Now remove all contacts with wrong category if any category selected - // This algorithm is a litte bit ineffective + + OContactAccess::List allList = m_list; if ( m_curr_category != -1 ){ - for ( it = m_list.begin(); it != m_list.end(); ++it ){ + for ( it = allList.begin(); it != allList.end(); ++it ){ if ( !contactCompare( *it, m_curr_category ) ){ @@ -253,3 +358,2 @@ void AbView::clearForCategory() m_list.remove( (*it).uid() ); - it = m_list.begin(); } @@ -257,2 +361,3 @@ void AbView::clearForCategory() } + } @@ -270,3 +375,4 @@ bool AbView::contactCompare( const OContact &cnt, int category ) returnMe = false; - if ( cats.count() == 0 ) + if ( cats.count() == 0 && category == 0 ) + // Contacts with no category will just shown on "All" and "Unfiled" returnMe = true; @@ -286,2 +392,9 @@ bool AbView::contactCompare( const OContact &cnt, int category ) +// In Some rare cases we have to update all lists.. +void AbView::updateListinViews() +{ + m_abTable -> setContacts( m_list ); + m_ablabel -> setContacts( m_list ); +} + void AbView::updateView() @@ -295,3 +408,3 @@ void AbView::updateView() // If we switching the view, we have to store some information - if ( m_prev_View != m_curr_View ){ + if ( m_list.count() ){ switch ( (int) m_prev_View ) { @@ -304,3 +417,5 @@ void AbView::updateView() } - } + emit signalViewSwitched ( (int) m_curr_View ); + }else + m_curr_Contact = 0; @@ -311,2 +426,3 @@ void AbView::updateView() case TableView: + m_abTable -> setChoiceSelection( m_orderedFields ); m_abTable -> setContacts( m_list ); @@ -315,3 +431,2 @@ void AbView::updateView() m_abTable -> setFocus(); - emit signalViewSwitched ( (int) m_curr_View ); break; @@ -322,3 +437,2 @@ void AbView::updateView() m_ablabel -> setFocus(); - emit signalViewSwitched ( (int) m_curr_View ); break; |