summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/abtable.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index e9e6a0b..3fa1a7c 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -533,64 +533,66 @@ bool AbTable::save( const QString &fn )
// remove the tmp file...
QFile::remove( strNewFile );
}
// remove the journal...
QFile::remove( journalFileName() );
return true;
}
void AbTable::load( const QString &fn )
{
setSorting( false );
loadFile( fn, false );
// merge in the journal
if ( QFile::exists( journalFileName() ) ) {
loadFile( journalFileName(), true );
save( fn );
}
setSorting( true );
resort();
}
void AbTable::loadFile( const QString &strFile, bool journalFile )
{
// QTime t;
// t.start();
QFile f( strFile );
if ( !f.open(IO_ReadOnly) )
return;
QList<Contact> list;
list.setAutoDelete( TRUE );
QByteArray ba = f.readAll();
f.close();
+ if (ba.isEmpty() )
+ return;
char *uc = ba.data();//(QChar *)data.unicode();
int len = ba.size();//data.length();
bool foundAction = false;
Contact::journal_action action;
bool foundKey = false;
int journalKey = 0;
const int JOURNALACTION = Qtopia::Notes + 1;
const int JOURNALROW = JOURNALACTION + 1;
// **********************************
// CHANGE THE SIZE OF THE DICT IF YOU ADD ANY MORE FIELDS!!!!
// **********************************
QAsciiDict<int> dict( 47 );
dict.setAutoDelete( TRUE );
dict.insert( "Uid", new int(Qtopia::AddressUid) );
dict.insert( "Title", new int(Qtopia::Title) );
dict.insert( "FirstName", new int(Qtopia::FirstName) );
dict.insert( "MiddleName", new int(Qtopia::MiddleName) );
dict.insert( "LastName", new int(Qtopia::LastName) );
dict.insert( "Suffix", new int(Qtopia::Suffix) );
dict.insert( "FileAs", new int(Qtopia::FileAs) );
dict.insert( "Categories", new int(Qtopia::AddressCategory) );
dict.insert( "DefaultEmail", new int(Qtopia::DefaultEmail) );
dict.insert( "Emails", new int(Qtopia::Emails) );
dict.insert( "HomeStreet", new int(Qtopia::HomeStreet) );
dict.insert( "HomeCity", new int(Qtopia::HomeCity) );
dict.insert( "HomeState", new int(Qtopia::HomeState) );
dict.insert( "HomeZip", new int(Qtopia::HomeZip) );
dict.insert( "HomeCountry", new int(Qtopia::HomeCountry) );
dict.insert( "HomePhone", new int(Qtopia::HomePhone) );
dict.insert( "HomeFax", new int(Qtopia::HomeFax) );
@@ -768,75 +770,82 @@ void AbTable::insertIntoTable( const Contact &cnt, int row )
strContact = findContactContact( cnt );
AbTableItem *ati;
ati = new AbTableItem( this, QTableItem::Never, strName, strContact);
contactList.insert( ati, cnt );
setItem( row, 0, ati );
ati = new AbTableItem( this, QTableItem::Never, strContact, strName);
setItem( row, 1, ati );
//### cannot do this; table only has two columns at this point
// setItem( row, 2, new AbPickItem( this ) );
// resort at some point?
}
void AbTable::internalAddEntries( QList<Contact> &list )
{
setUpdatesEnabled( FALSE );
setNumRows( list.count() );
int row = 0;
Contact *it;
for ( it = list.first(); it; it = list.next() )
insertIntoTable( *it, row++ );
resort();
setUpdatesEnabled( TRUE );
}
void AbTable::journalFreeReplace( const Contact &cnt, int row )
{
QString strName,
strContact;
- AbTableItem *ati;
+ AbTableItem *ati = 0l;
strName = findContactName( cnt );
strContact = findContactContact( cnt );
ati = static_cast<AbTableItem*>(item(row, 0));
- contactList.remove( ati );
- ati->setItem( strName, strContact );
- contactList.insert( ati, cnt );
-
- ati = static_cast<AbTableItem*>(item(row, 1));
- ati->setItem( strContact, strName );
+ if ( ati != 0 ) {
+ contactList.remove( ati );
+ ati->setItem( strName, strContact );
+ contactList.insert( ati, cnt );
+
+ ati = static_cast<AbTableItem*>(item(row, 1));
+ ati->setItem( strContact, strName );
+ }else{
+ int myrows = numRows();
+ setNumRows( myrows + 1 );
+ insertIntoTable( cnt, myrows );
+ // gets deleted when returning
+ }
}
void AbTable::journalFreeRemove( int row )
{
AbTableItem *ati;
ati = static_cast<AbTableItem*>(item(row, 0));
if ( !ati )
return;
contactList.remove( ati );
realignTable( row );
}
#if QT_VERSION <= 230
#ifndef SINGLE_APP
void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
{
// Region of the rect we should draw
QRegion reg( QRect( cx, cy, cw, ch ) );
// Subtract the table from it
reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) );
// And draw the rectangles (transformed as needed)
QArray<QRect> r = reg.rects();
for (unsigned int i=0; i<r.count(); i++)
p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) );
}
#endif
#endif
// int AbTable::rowHeight( int ) const
// {
// return 18;
@@ -1054,65 +1063,65 @@ void AbTable::updateVisible()
ati = static_cast<AbTableItem*>( item(row, 0) );
cnt = &contactList[ati];
cats = cnt->categories();
fileAsName = cnt->fileAs();
hide = false;
if ( !showCat.isEmpty() ) {
if ( showCat == tr( "Unfiled" ) ) {
if ( cats.count() > 0 )
hide = true;
} else {
// do some comparing
if ( !hide ) {
hide = true;
totalCats = int(cats.count());
for ( it = 0; it < totalCats; it++ ) {
if ( cats[it] == id ) {
hide = false;
break;
}
}
}
}
}
if ( showChar != '\0' ) {
tmpStr = fileAsName.left(1);
tmpStr = tmpStr.lower();
if ( tmpStr != QString(QChar(showChar)) && showChar != '#' ) {
hide = true;
}
if ( showChar == '#' ) {
if (tmpStr == "a")
hide = true;
-
+
if (tmpStr == "b")
hide = true;
if (tmpStr == "c")
hide = true;
if (tmpStr == "d")
hide = true;
if (tmpStr == "e")
hide = true;
if (tmpStr == "f")
hide = true;
if (tmpStr == "g")
hide = true;
if (tmpStr == "h")
hide = true;
if (tmpStr == "i")
hide = true;
if (tmpStr == "j")
hide = true;
if (tmpStr == "k")
hide = true;
if (tmpStr == "l")
hide = true;