summaryrefslogtreecommitdiff
path: root/core/pim/addressbook/addressbook.cpp
Side-by-side diff
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
@@ -4,25 +4,25 @@
** This file is part of Qt Palmtop Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** 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
#include "contacteditor.h"
#include "ablabel.h"
#include "abtable.h"
#include "addresssettings.h"
#include "addressbook.h"
@@ -86,24 +86,26 @@ static QString addressbookPersonalVCardName()
"businesscard.vcf");
return filename;
}
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 );
// Create Toolbars
QPEToolBar *bar = new QPEToolBar( this );
bar->setHorizontalStretchable( TRUE );
@@ -178,155 +180,161 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
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 );
-
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 );
a = new QAction( tr( "Arrange Edit Fields"), QString::null, 0, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
a->addTo( edit );
// Create Views
// 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() );
QFile::remove(addressbookOldXMLFilename());
}
pLabel = new LetterPicker( listContainer );
connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char)));
vb->addWidget(pLabel);
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);
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::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(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;
}
}
void AddressbookWindow::importvCard() {
QString str = OFileDialog::getOpenFileName( 1,"/");//,"", "*", this );
if(!str.isEmpty() )
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 );
// }
}
}
void AddressbookWindow::resizeEvent( QResizeEvent *e )
{
@@ -338,72 +346,85 @@ void AddressbookWindow::resizeEvent( QResizeEvent *e )
showView();
}
AddressbookWindow::~AddressbookWindow()
{
Config cfg("AddressBook");
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();
setCentralWidget( abView() );
mView->show();
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()
{
abView()->init( abList->currentEntry() );
mView->sync();
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() )
strName = "No Name";
}
if ( QPEMessageBox::confirmDelete( this, tr( "Contacts" ),
strName ) ) {
@@ -432,50 +453,47 @@ void AddressbookWindow::slotViewEdit()
editEntry( EditEntry );
}
} else {
QMessageBox::warning( this, tr("Contacts"),
tr("Can not edit data, currently syncing") );
}
}
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" );
}
void AddressbookWindow::beamDone( Ir *ir )
{
delete ir;
unlink( beamfile );
@@ -513,25 +531,25 @@ static void parseName( const QString& name, QString *first, QString *middle,
void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
{
if (msg == "editPersonal()") {
editPersonal();
} else if (msg == "editPersonalAndClose()") {
editPersonal();
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 );
cnt.insertEmails( email );
cnt.setDefaultEmail( email );
cnt.setFileAs();
if ( bAbEditFirstTime ) {
abEditor = new ContactEditor( cnt, &orderedFields, &slOrderedFields,
@@ -572,45 +590,45 @@ void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) {
QStringList sel = picker.selection(i++);
e << sel;
}
}
#endif
}
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
abEditor->setEntry( me );
abEditor->setCaption(tr("Edit My Personal Details"));
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") );
}
void AddressbookWindow::slotPersonalView()
{
if (!actionPersonal->isOn()) {
// we just turned it off
setCaption( tr("Contacts") );
actionNew->setEnabled(TRUE);
@@ -624,62 +642,62 @@ void AddressbookWindow::slotPersonalView()
}
// XXX need to disable some QActions.
actionNew->setEnabled(FALSE);
actionTrash->setEnabled(FALSE);
#ifndef MAKE_FOR_SHARP_ROM
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() );
}
// other things may chane the caption.
abEditor->setCaption( tr("Edit Address") );
#if defined(Q_WS_QWS) || defined(_WS_QWS_)
abEditor->showMaximized();
#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();
showList();
}
void AddressbookWindow::listIsEmpty( bool empty )
{
if ( !empty ) {
@@ -715,24 +733,25 @@ void AddressbookWindow::closeEvent( QCloseEvent *e )
return;
}
if(syncing) {
/* shouldn't we save, I hear you say? well its already been set
so that an edit can not occur during a sync, and we flushed
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();
}
/*
Returns TRUE if it is OK to exit
*/
bool AddressbookWindow::save()
{
@@ -783,32 +802,31 @@ void AddressbookWindow::slotSettings()
abEditor->loadFields();
abList->refresh();
}
}
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++ ) {
allFields.append( i + 3 );
}
cfg.setGroup( "Version" );
version = cfg.readNumEntry( "version" );
i = 0;
@@ -874,25 +892,25 @@ void AddressbookWindow::initFields()
slOrderedFields.remove( tr("Default Email") );
slOrderedFields.remove( tr("Notes") );
slOrderedFields.remove( tr("Gender") );
}
}
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()
{
#ifndef MAKE_FOR_SHARP_ROM
if ( centralWidget() == abView() )
showList();
FindDialog frmFind( "Contacts", this );
@@ -902,58 +920,111 @@ void AddressbookWindow::slotFind()
frmFind.exec();
if ( abList->numSelections() )
abList->clearSelection();
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 );
}
+}
+