summaryrefslogtreecommitdiff
path: root/core/pim/addressbook/addressbook.cpp
authoreilers <eilers>2002-10-08 12:33:52 (UTC)
committer eilers <eilers>2002-10-08 12:33:52 (UTC)
commita194611bf645fe7e2e9e83733ababc587fd42f1d (patch) (side-by-side diff)
tree2c21a5576bce48dba2fe83f6c849c0d16025a848 /core/pim/addressbook/addressbook.cpp
parent333fec32d47ea32de9fb4c8cd378a519785a1ff8 (diff)
downloadopie-a194611bf645fe7e2e9e83733ababc587fd42f1d.zip
opie-a194611bf645fe7e2e9e83733ababc587fd42f1d.tar.gz
opie-a194611bf645fe7e2e9e83733ababc587fd42f1d.tar.bz2
Joined development branch: It uses the new PIM API
Some features in "View" added by Darwin Zins, but they are not finished..
Diffstat (limited to 'core/pim/addressbook/addressbook.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/pim/addressbook/addressbook.cpp191
1 files changed, 131 insertions, 60 deletions
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 3255269..cf2eddf 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -10,13 +10,13 @@
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
-** Contact info@trolltech.com if any conditions of this licensing are
+** OContact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#define QTOPIA_INTERNAL_FD
@@ -92,12 +92,14 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
WFlags f )
: QMainWindow( parent, name, f ),
abEditor(0),
bAbEditFirstTime(TRUE),
syncing(FALSE)
{
+ isLoading = true;
+
initFields();
setCaption( tr("Contacts") );
setIcon( Resource::loadPixmap( "AddressBook" ) );
setToolBarsMovable( FALSE );
@@ -184,13 +186,12 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
a = new QAction( tr("Import vCard"), QString::null, 0, 0, 0, TRUE );
actionPersonal = a;
connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) );
a->addTo( edit );
-
edit->insertSeparator();
a = new QAction( tr("My Personal Details"), QString::null, 0, 0, 0, TRUE );
actionPersonal = a;
connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) );
a->addTo( edit );
@@ -204,32 +205,31 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
// This is safe to call without checking to see if it exists...
// not to mention it also does the necessary stuff for the
// journaling...
QString str = addressbookXMLFilename();
if ( str.isNull() ) {
- QMessageBox::warning( this, tr("Out of Space"),
+ QMessageBox::warning(
+ this,
+ tr("Out of Space"),
tr("There is not enough space to create\n"
"neccessary startup files.\n"
"\nFree up some space before\nentering data!")
);
}
listContainer = new QWidget( this );
QVBoxLayout *vb = new QVBoxLayout( listContainer );
abList = new AbTable( &orderedFields, listContainer, "table" );
vb->addWidget(abList);
- abList->setHScrollBarMode( QScrollView::AlwaysOff );
- connect( abList, SIGNAL( empty( bool ) ),
- this, SLOT( listIsEmpty( bool ) ) );
- connect( abList, SIGNAL( details() ),
- this, SLOT( slotListView() ) );
- connect( abList, SIGNAL(currentChanged(int,int)),
- this, SLOT(slotUpdateToolbar()) );
+ // abList->setHScrollBarMode( QScrollView::AlwaysOff );
+ connect( abList, SIGNAL( empty( bool ) ), this, SLOT( listIsEmpty( bool ) ) );
+ connect( abList, SIGNAL( details() ), this, SLOT( slotListView() ) );
+ connect( abList, SIGNAL(currentChanged(int,int)), this, SLOT(slotUpdateToolbar()) );
mView = 0;
abList->load( addressbookXMLFilename() );
if ( QFile::exists(addressbookOldXMLFilename()) ) {
abList->load( addressbookOldXMLFilename() );
@@ -242,13 +242,13 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
catMenu = new QPopupMenu( this );
catMenu->setCheckable( TRUE );
connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) );
populateCategories();
mbList->insertItem( tr("View"), catMenu );
- setCentralWidget( listContainer );
+ // setCentralWidget( listContainer );
fontMenu = new QPopupMenu(this);
fontMenu->setCheckable( true );
connect( fontMenu, SIGNAL(activated(int)), this, SLOT(slotSetFont(int)));
fontMenu->insertItem(tr( "Small" ), 0);
@@ -260,12 +260,16 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
slotSetFont(startFontSize);
mbList->insertItem( tr("Font"), fontMenu);
setCentralWidget(listContainer);
// qDebug("adressbook contrsuction: t=%d", t.elapsed() );
+
+ abList->setCurrentCell( 0, 0 );
+
+ isLoading = false;
}
void AddressbookWindow::slotSetFont( int size ) {
if (size > 2 || size < 0)
@@ -279,29 +283,32 @@ void AddressbookWindow::slotSetFont( int 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(currentFont->pixelSize() + 7);
+ abList->resizeRows();
break;
case 1:
fontMenu->setItemChecked(0, false);
fontMenu->setItemChecked(1, true);
fontMenu->setItemChecked(2, false);
abList->setFont( *defaultFont );
currentFont = new QFont (abList->font());
- abList->resizeRows(currentFont->pixelSize() + 7);
+ // abList->resizeRows(currentFont->pixelSize() + 7);
+ abList->resizeRows();
break;
case 2:
fontMenu->setItemChecked(0, false);
fontMenu->setItemChecked(1, false);
fontMenu->setItemChecked(2, true);
abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() + 2 ) );
currentFont = new QFont (abList->font());
- abList->resizeRows(currentFont->pixelSize() + 7);
+ //abList->resizeRows(currentFont->pixelSize() + 7);
+ abList->resizeRows();
break;
}
}
@@ -311,16 +318,17 @@ void AddressbookWindow::importvCard() {
setDocument((const QString&) str );
}
void AddressbookWindow::setDocument( const QString &filename )
{
- if ( filename.find(".vcf") != int(filename.length()) - 4 ) return;
+ if ( filename.find(".vcf") != int(filename.length()) - 4 )
+ return;
- QValueList<Contact> cl = Contact::readVCard( filename );
- for( QValueList<Contact>::Iterator it = cl.begin(); it != cl.end(); ++it ) {
+ QValueList<OContact> cl = OContact::readVCard( filename );
+ for( QValueList<OContact>::Iterator it = cl.begin(); it != cl.end(); ++it ) {
// QString msg = tr("You received a vCard for\n%1.\nDo You want to add it to your\naddressbook?")
// .arg( (*it).fullName() );
// if ( QMessageBox::information( this, tr("received contact"), msg, QMessageBox::Ok, QMessageBox::Cancel ) ==
// QMessageBox::Ok ) {
abList->addEntry( *it );
// }
@@ -344,23 +352,36 @@ AddressbookWindow::~AddressbookWindow()
cfg.setGroup("Font");
cfg.writeEntry("fontSize", startFontSize);
}
void AddressbookWindow::slotUpdateToolbar()
{
- Contact ce = abList->currentEntry();
+ OContact ce = abList->currentEntry();
actionMail->setEnabled( !ce.defaultEmail().isEmpty() );
}
void AddressbookWindow::showList()
{
- if ( mView ) mView->hide();
+ 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() );
+
+ //if ( visiblemView && abList->showBook() == "Cards" )
+ // abList->setShowCategory( abList->showBook(), abList->showCategory() );
+
}
void AddressbookWindow::showView()
{
if ( abList->numRows() > 0 ) {
listContainer->hide();
@@ -369,20 +390,20 @@ void AddressbookWindow::showView()
mView->setFocus();
}
}
void AddressbookWindow::slotListNew()
{
- Contact cnt;
+ OContact cnt;
if( !syncing ) {
if ( abEditor )
abEditor->setEntry( cnt );
abView()->init( cnt );
editEntry( NewEntry );
} else {
- QMessageBox::warning(this, tr("Contacts"),
+ QMessageBox::warning(this, tr("OContacts"),
tr("Can not edit data, currently syncing"));
}
}
void AddressbookWindow::slotListView()
{
@@ -391,13 +412,13 @@ void AddressbookWindow::slotListView()
showView();
}
void AddressbookWindow::slotListDelete()
{
if(!syncing) {
- Contact tmpEntry = abList->currentEntry();
+ OContact tmpEntry = abList->currentEntry();
// get a name, do the best we can...
QString strName = tmpEntry.fullName();
if ( strName.isEmpty() ) {
strName = tmpEntry.company();
if ( strName.isEmpty() )
@@ -438,38 +459,35 @@ void AddressbookWindow::slotViewEdit()
}
void AddressbookWindow::writeMail()
{
- Contact c = abList->currentEntry();
+ OContact c = abList->currentEntry();
QString name = c.fileAs();
QString email = c.defaultEmail();
QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)");
e << name << email;
}
-
-
-
static const char * beamfile = "/tmp/obex/contact.vcf";
void AddressbookWindow::slotBeam()
{
QString filename;
- Contact c;
+ OContact c;
if ( actionPersonal->isOn() ) {
filename = addressbookPersonalVCardName();
if (!QFile::exists(filename))
return; // can't beam a non-existent file
- c = Contact::readVCard( filename )[0];
+ c = OContact::readVCard( filename )[0];
} else {
unlink( beamfile ); // delete if exists
c = abList->currentEntry();
mkdir("/tmp/obex/", 0755);
- Contact::writeVCard( beamfile, c );
+ 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" );
@@ -519,13 +537,13 @@ void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
close();
} else if ( msg == "addContact(QString,QString)" ) {
QDataStream stream(data,IO_ReadOnly);
QString name, email;
stream >> name >> email;
- Contact cnt;
+ OContact cnt;
QString fn, mn, ln;
parseName( name, &fn, &mn, &ln );
// qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() );
cnt.setFirstName( fn );
cnt.setMiddleName( mn );
cnt.setLastName( ln );
@@ -578,15 +596,15 @@ void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
}
void AddressbookWindow::editPersonal()
{
QString filename = addressbookPersonalVCardName();
- Contact me;
+ OContact me;
if (QFile::exists(filename))
- me = Contact::readVCard( filename )[0];
+ me = OContact::readVCard( filename )[0];
if (bAbEditFirstTime) {
abEditor = new ContactEditor( me, &orderedFields, &slOrderedFields,
this, "editor" );
// don't create a new editor every time
bAbEditFirstTime = FALSE;
} else
@@ -596,15 +614,15 @@ void AddressbookWindow::editPersonal()
abEditor->showMaximized();
// fix the foxus...
abEditor->setNameFocus();
if ( abEditor->exec() ) {
setFocus();
- Contact new_personal = abEditor->entry();
+ OContact new_personal = abEditor->entry();
QString fname = addressbookPersonalVCardName();
- Contact::writeVCard( fname, new_personal );
+ OContact::writeVCard( fname, new_personal );
abView()->init(new_personal);
abView()->sync();
}
abEditor->setCaption( tr("Edit Address") );
}
@@ -630,27 +648,27 @@ void AddressbookWindow::slotPersonalView()
actionFind->setEnabled(FALSE);
#endif
actionMail->setEnabled(FALSE);
setCaption( tr("Contacts - My Personal Details") );
QString filename = addressbookPersonalVCardName();
- Contact me;
+ OContact me;
if (QFile::exists(filename))
- me = Contact::readVCard( filename )[0];
+ me = OContact::readVCard( filename )[0];
abView()->init( me );
abView()->sync();
listContainer->hide();
setCentralWidget( abView() );
mView->show();
mView->setFocus();
}
void AddressbookWindow::editEntry( EntryMode entryMode )
{
- Contact entry;
+ OContact entry;
if ( bAbEditFirstTime ) {
abEditor = new ContactEditor( entry, &orderedFields, &slOrderedFields,
this, "editor" );
bAbEditFirstTime = FALSE;
if ( entryMode == EditEntry )
abEditor->setEntry( abList->currentEntry() );
@@ -663,17 +681,17 @@ void AddressbookWindow::editEntry( EntryMode entryMode )
#endif
// fix the foxus...
abEditor->setNameFocus();
if ( abEditor->exec() ) {
setFocus();
if ( entryMode == NewEntry ) {
- Contact insertEntry = abEditor->entry();
+ OContact insertEntry = abEditor->entry();
insertEntry.assignUid();
abList->addEntry( insertEntry );
} else {
- Contact replaceEntry = abEditor->entry();
+ OContact replaceEntry = abEditor->entry();
if ( !replaceEntry.isValidUid() )
replaceEntry.assignUid();
abList->replaceCurrentEntry( replaceEntry );
}
}
populateCategories();
@@ -721,12 +739,13 @@ void AddressbookWindow::closeEvent( QCloseEvent *e )
at the start of the sync, so there is no need to save
Saving however itself would cause problems. */
e->accept();
return;
}
//################## shouldn't always save
+ // True, but the database handles this automatically ! (se)
if ( save() )
e->accept();
else
e->ignore();
}
@@ -789,20 +808,19 @@ void AddressbookWindow::slotSettings()
void AddressbookWindow::initFields()
{
// we really don't need the things from the configuration, anymore
// only thing that is important are the important categories. So,
// Call the contact functions that correspond to these old functions...
- QStringList xmlFields = Contact::fields();
- QStringList visibleFields = Contact::trfields();
+ QStringList xmlFields = OContact::fields();
+ QStringList visibleFields = OContact::trfields();
xmlFields.remove( "Title" );
visibleFields.remove( tr("Name Title") );
visibleFields.remove( tr("Notes") );
- int i,
- version;
+ int i, version;
Config cfg( "AddressBook" );
QString zn;
// ### Write a function to keep this from happening again...
QStringList::ConstIterator it;
for ( i = 0, it = xmlFields.begin(); it != xmlFields.end(); ++it, i++ ) {
@@ -880,13 +898,13 @@ void AddressbookWindow::initFields()
AbLabel *AddressbookWindow::abView()
{
if ( !mView ) {
mView = new AbLabel( this, "viewer" );
- mView->init( Contact() );
+ mView->init( OContact() );
connect( mView, SIGNAL( okPressed() ), this, SLOT( slotListView() ) );
}
return mView;
}
void AddressbookWindow::slotFind()
@@ -908,52 +926,105 @@ void AddressbookWindow::slotFind()
abList->clearFindRow();
#endif
}
void AddressbookWindow::slotSetCategory( int c )
{
+
+ QString cat, book;
+
if ( c <= 0 )
return;
- for ( unsigned int i = 1; i < catMenu->count(); i++ )
+
+ // Checkmark Book Menu Item Selected
+ if ( c < 6 )
+ for ( unsigned int i = 1; i < 6; i++ )
catMenu->setItemChecked( i, c == (int)i );
- if ( c == 1 ) {
- abList->setShowCategory( QString::null );
- setCaption( tr("Contacts") + " - " + tr ( "All" ) );
- } else if ( c == (int)catMenu->count() ) {
- abList->setShowCategory( tr( "Unfiled" ) );
- setCaption( tr("Contacts") + " - " + tr( "Unfiled" ) );
- } else {
- QString cat = abList->categories()[c - 2];
- abList->setShowCategory( cat );
- setCaption( tr("Contacts") + " - " + cat );
+
+ // Checkmark Category Menu Item Selected
+ else
+ for ( unsigned int i = 6; i < catMenu->count(); i++ )
+ catMenu->setItemChecked( i, c == (int)i );
+
+ for ( unsigned int i = 1; i < catMenu->count(); i++ ) {
+ if (catMenu->isItemChecked( i )) {
+ if ( i == 1 ) // default List view
+ book = QString::null;
+ else if ( i == 2 )
+ book = "Phone";
+ else if ( i == 3 )
+ book = "Company";
+ else if ( i == 4 )
+ book = "Email";
+ else if ( i == 5 )
+ book = "Cards";
+ else if ( i == 6 ) // default All Categories
+ cat = QString::null;
+ else if ( i == (unsigned int)catMenu->count() ) // last menu option will be Unfiled
+ cat = "Unfiled";
+ else
+ cat = abList->categories()[i - 7];
}
}
+ abList->setShowCategory( book, cat );
+
+ if ( book.isEmpty() )
+ book = "List";
+ if ( cat.isEmpty() )
+ cat = "All";
+
+ setCaption( tr( "Contacts" ) + " - " + tr( book ) + " - " + tr( cat ) );
+}
+
void AddressbookWindow::slotSetLetter( char c ) {
abList->setShowByLetter( c );
}
void AddressbookWindow::populateCategories()
{
catMenu->clear();
- int id,
- rememberId;
+ int id, rememberId;
id = 1;
rememberId = 0;
+
+ catMenu->insertItem( tr( "List" ), id++ );
+ catMenu->insertItem( tr( "Phone Book" ), id++ );
+ catMenu->insertItem( tr( "Company Book" ), id++ );
+ catMenu->insertItem( tr( "Email Book" ), id++ );
+ catMenu->insertItem( tr( "Cards" ), id++ );
+ catMenu->insertSeparator();
+
catMenu->insertItem( tr( "All" ), id++ );
QStringList categories = abList->categories();
categories.append( tr( "Unfiled" ) );
for ( QStringList::Iterator it = categories.begin();
it != categories.end(); ++it ) {
catMenu->insertItem( *it, id );
if ( *it == abList->showCategory() )
rememberId = id;
++id;
}
- if ( abList->showCategory().isEmpty() )
- slotSetCategory( 1 );
- else
+
+ if ( abList->showBook().isEmpty() ) {
+ catMenu->setItemChecked( 1, true );
+ } else if ( abList->showBook() == "Phone" ) {
+ catMenu->setItemChecked( 2, true );
+ } else if ( abList->showBook() == "Company" ) {
+ catMenu->setItemChecked( 3, true );
+ } else if ( abList->showBook() == "Email" ) {
+ catMenu->setItemChecked( 4, true );
+ } else if ( abList->showBook() == "Cards" ) {
+ catMenu->setItemChecked( 5, true );
+ }
+
+ if ( abList->showCategory().isEmpty() ) {
+ slotSetCategory( 6 );
+ }
+ else {
slotSetCategory( rememberId );
}
+}
+