summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/abtable.cpp4
-rw-r--r--core/pim/addressbook/abview.cpp3
-rw-r--r--core/pim/addressbook/addressbook.pro2
-rw-r--r--core/pim/addressbook/configdlg.cpp2
-rw-r--r--core/pim/addressbook/contacteditor.cpp1
-rw-r--r--core/pim/addressbook/contacteditor.h3
6 files changed, 6 insertions, 9 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 4705c78..70330c7 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -1,848 +1,848 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de)
**
** 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
** not clear to you.
**
**********************************************************************/
#include <qpe/categoryselect.h>
#include <qpe/config.h>
#include <qpe/stringutil.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/timestring.h>
#include <qpe/resource.h>
#include <opie/orecordlist.h>
#include <qasciidict.h>
#include <qdatetime.h>
#include <qfile.h>
#include <qregexp.h>
#include <qmessagebox.h>
#include "abtable.h"
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h> //toupper() for key hack
#if 0
/*!
\class AbTableItem abtable.h
\brief QTableItem based class for showing a field of an entry
*/
AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s,
const QString &secondSortKey)
: QTableItem( t, et, s )
{
// sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower();
sortKey = Qtopia::buildSortKey( s, secondSortKey );
}
int AbTableItem::alignment() const
{
return AlignLeft|AlignVCenter;
}
QString AbTableItem::key() const
{
return sortKey;
}
// A way to reset the item, without out doing a delete or a new...
void AbTableItem::setItem( const QString &txt, const QString &secondKey )
{
setText( txt );
sortKey = Qtopia::buildSortKey( txt, secondKey );
// sortKey = txt.lower() + QChar( '\0' ) + secondKey.lower();
}
/*!
\class AbPickItem abtable.h
\brief QTableItem based class for showing slection of an entry
*/
AbPickItem::AbPickItem( QTable *t ) :
QTableItem(t, WhenCurrent, "?")
{
}
QWidget *AbPickItem::createEditor() const
{
QComboBox* combo = new QComboBox( table()->viewport() );
( (AbPickItem*)this )->cb = combo;
AbTable* t = static_cast<AbTable*>(table());
QStringList c = t->choiceNames();
int cur = 0;
for (QStringList::ConstIterator it = c.begin(); it!=c.end(); ++it) {
if ( *it == text() )
cur = combo->count();
combo->insertItem(*it);
}
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 )
{
// qWarning("C'tor start");
setSelectionMode( NoSelection );
init();
setSorting( TRUE );
connect( this, SIGNAL(clicked(int,int,int,const QPoint &)),
this, SLOT(itemClicked(int,int)) );
// contactList.clear();
// qWarning("C'tor end");
}
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 OContactAccess::List& viewList )
{
qWarning("AbTable::setContacts()");
clear();
m_viewList = viewList;
setSorting( false );
setPaintingEnabled( FALSE );
OContactAccess::List::Iterator it;
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 )
{
qWarning( "AbTable::selectContact( %d )", UID );
int rows = numRows();
OContact* foundContact = 0l;
bool found = false;
setPaintingEnabled( FALSE );
qWarning( "search start" );
for ( int r = 0; r < rows; ++r ) {
if ( m_viewList.uidAt( r ) == UID ){
ensureCellVisible( r, 0 );
setCurrentCell( r, 0 );
found = true;
break;
}
}
qWarning( "search end" );
if ( !found ){
ensureCellVisible( 0,0 );
setCurrentCell( 0, 0 );
}
setPaintingEnabled( TRUE );
return true;
}
#if 0
void AbTable::insertIntoTable( const OContact& cnt, int row )
{
qWarning( "void AbTable::insertIntoTable( const OContact& cnt, %d )", row );
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;
if ( col == lastSortCol ) {
asc = !asc;
} else {
lastSortCol = col;
asc = TRUE;
}
//QMessageBox::information( this, "resort", "columnClicked" );
resort();
}
void AbTable::resort()
{
qWarning( "void AbTable::resort() NOT POSSIBLE !!" );
#if 0
setPaintingEnabled( FALSE );
if ( sorting() ) {
if ( lastSortCol == -1 )
lastSortCol = 0;
sortColumn( lastSortCol, asc, TRUE );
//QMessageBox::information( this, "resort", "resort" );
updateVisible();
}
setPaintingEnabled( TRUE );
#endif
}
OContact AbTable::currentEntry()
{
return m_viewList[currentRow()];
}
int AbTable::currentEntry_UID()
{
return ( currentEntry().uid() );
}
void AbTable::clear()
{
qWarning( "void AbTable::clear()" );
// 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()
{
qWarning( "void AbTable::refresh() NOT IMPLEMENTED !!" );
#if 0
int rows = numRows();
AbTableItem *abi;
ContactItem contactItem;
setPaintingEnabled( FALSE );
for ( int r = 0; r < rows; ++r ) {
abi = static_cast<AbTableItem*>( item(r, 0) );
contactItem = findContactContact( contactList[abi], r );
static_cast<AbTableItem*>( item(r, 1) )->setItem( contactItem.value, abi->text() );
if ( !contactItem.icon.isNull() ){
static_cast<AbTableItem*>( item(r, 1) )->
setPixmap( contactItem.icon );
}else{
static_cast<AbTableItem*>( item(r, 1) )->
setPixmap( QPixmap() );
}
}
resort();
setPaintingEnabled( TRUE );
#endif
}
void AbTable::keyPressEvent( QKeyEvent *e )
{
char key = toupper( e->ascii() );
if ( key >= 'A' && key <= 'Z' )
moveTo( key );
// qWarning("Received key ..");
switch( e->key() ) {
case Qt::Key_Space:
case Qt::Key_Return:
case Qt::Key_Enter:
emit signalSwitch();
break;
// case Qt::Key_Up:
// qWarning("a");
// emit signalKeyUp();
// break;
// case Qt::Key_Down:
// qWarning("b");
// emit signalKeyDown();
// break;
default:
QTable::keyPressEvent( e );
}
}
void AbTable::moveTo( char c )
{
qWarning( "void AbTable::moveTo( char c ) NOT IMPLEMENTED !!" );
#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 OContact &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();
*/
}
void AbTable::realignTable()
{
// qWarning( "void AbTable::realignTable()" );
setPaintingEnabled( FALSE );
resizeRows();
fitColumns();
setPaintingEnabled( TRUE );
}
#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;
// }
// int AbTable::rowPos( int row ) const
// {
// return 18*row;
// }
// int AbTable::rowAt( int pos ) const
// {
// return QMIN( pos/18, numRows()-1 );
// }
void AbTable::fitColumns()
{
- // qWarning( "void AbTable::fitColumns()" );
- int contentsWidth = visibleWidth() / 2; // :SX Why too low
+ qWarning( "void AbTable::fitColumns()" );
+ int contentsWidth = visibleWidth() / 2;
// Fix to better value
// contentsWidth = 130;
setPaintingEnabled( FALSE );
if ( columnVisible == false ){
showColumn(0);
columnVisible = true;
}
// qWarning("Width: %d", contentsWidth);
setColumnWidth( 0, contentsWidth );
adjustColumn(1);
if ( columnWidth(1) < contentsWidth )
setColumnWidth( 1, contentsWidth );
setPaintingEnabled( TRUE );
}
void AbTable::show()
{
// qWarning( "void AbTable::show()" );
realignTable();
QTable::show();
}
#if 0
void AbTable::setChoiceNames( const QStringList& list)
{
choicenames = list;
if ( choicenames.isEmpty() ) {
// hide pick column
setNumCols( 2 );
} else {
// show pick column
setNumCols( 3 );
setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 );
horizontalHeader()->setLabel( 2, tr( "Pick" ));
}
fitColumns();
}
#endif
void AbTable::itemClicked(int,int col)
{
// qWarning( "AbTable::itemClicked(int, col:%d)", col);
if ( col == 2 ) {
return;
} else {
// qWarning ("Emitting signalSwitch()");
emit signalSwitch();
}
}
#if 0
QStringList AbTable::choiceNames() const
{
return choicenames;
}
#endif
void AbTable::setChoiceSelection( const QValueList<int>& list )
{
intFields = list;
}
QStringList AbTable::choiceSelection(int /*index*/) const
{
QStringList r;
/* ######
QString selname = choicenames.at(index);
for (each row) {
OContact *c = contactForRow(row);
if ( text(row,2) == selname ) {
r.append(c->email);
}
}
*/
return r;
}
void AbTable::updateVisible()
{
// qWarning("void AbTable::updateVisible()");
int visible,
totalRows,
row,
selectedRow = 0;
visible = 0;
setPaintingEnabled( FALSE );
realignTable();
totalRows = numRows();
for ( row = 0; row < totalRows; row++ ) {
if ( rowHeight(row) == 0 ) {
showRow( row );
adjustRow( row );
if ( isSelected( row,0 ) || isSelected( row,1 ) )
selectedRow = row;
}
visible++;
}
if ( selectedRow )
setCurrentCell( selectedRow, 0 );
if ( !visible )
setCurrentCell( -1, 0 );
setPaintingEnabled( TRUE );
}
void AbTable::setPaintingEnabled( bool e )
{
// qWarning("IN void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested );
if ( e ) {
if ( countNested > 0 )
--countNested;
if ( ! countNested ){
setUpdatesEnabled( true );
enablePainting = true;
rowHeightChanged( 0 );
viewport()->update();
}
} else {
++countNested;
enablePainting = false;
setUpdatesEnabled( false );
}
// qWarning("OUT void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested );
}
void AbTable::viewportPaintEvent( QPaintEvent* e ) {
// qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting);
if ( enablePainting )
QTable::viewportPaintEvent( e );
}
void AbTable::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) {
const QColorGroup &cg = colorGroup();
p->save();
//qWarning( "Paint row: %d", row );
OContact act_contact = m_viewList[row];
// Paint alternating background bars
if ( (row % 2 ) == 0 ) {
p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
p->setPen( QPen( cg.text() ) );
}
else {
p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Background ) );
p->setPen( QPen( cg.buttonText() ) );
}
QFont f = p->font();
QFontMetrics fm(f);
int marg = 2;
int x = 0;
int y = ( cr.height() - 14 ) / 2;
QString nameText = act_contact.fileAs();
switch( col ){
case 0:
p->drawText( x + marg,2 + fm.ascent(), nameText );
break;
case 1:{
ContactItem contactItem = findContactContact( act_contact, 0 );
QPixmap contactPic = contactItem.icon; /* pixmap( row, col ); */
QString contactText = contactItem.value;
if ( !contactPic.isNull() )
{
p->drawPixmap( x + marg, y, contactPic );
p->drawText( x + marg + contactPic.width()
+ 4,2 + fm.ascent(), contactText );
}
else
{
p->drawText( x + marg,2 + fm.ascent(), contactText );
}
}
break;
}
p->restore();
}
void AbTable::rowHeightChanged( int row )
{
if ( enablePainting )
QTable::rowHeightChanged( row );
}
ContactItem AbTable::findContactContact( const OContact &entry, int /* row */ )
{
ContactItem item;
item.value = "";
for ( QValueList<int>::ConstIterator it = intFields.begin();
it != intFields.end(); ++it ) {
switch ( *it ) {
default:
break;
case Qtopia::Title:
item.value = entry.title();
break;
case Qtopia::Suffix:
item.value = entry.suffix();
break;
case Qtopia::FileAs:
item.value = entry.fileAs();
break;
case Qtopia::DefaultEmail:
item.value = entry.defaultEmail();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/email" );
break;
case Qtopia::Emails:
item.value = entry.emails();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/email" );
break;
case Qtopia::HomeStreet:
item.value = entry.homeStreet();
break;
case Qtopia::HomeCity:
item.value = entry.homeCity();
break;
case Qtopia::HomeState:
item.value = entry.homeState();
break;
case Qtopia::HomeZip:
item.value = entry.homeZip();
break;
case Qtopia::HomeCountry:
item.value = entry.homeCountry();
break;
case Qtopia::HomePhone:
item.value = entry.homePhone();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/phonehome" );
break;
case Qtopia::HomeFax:
item.value = entry.homeFax();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/faxhome" );
break;
case Qtopia::HomeMobile:
item.value = entry.homeMobile();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/mobilehome" );
break;
case Qtopia::HomeWebPage:
item.value = entry.homeWebpage();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/webpagehome" );
break;
case Qtopia::Company:
item.value = entry.company();
break;
case Qtopia::BusinessCity:
item.value = entry.businessCity();
break;
case Qtopia::BusinessStreet:
item.value = entry.businessStreet();
break;
case Qtopia::BusinessZip:
item.value = entry.businessZip();
break;
case Qtopia::BusinessCountry:
item.value = entry.businessCountry();
break;
case Qtopia::BusinessWebPage:
item.value = entry.businessWebpage();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/webpagework" );
break;
case Qtopia::JobTitle:
item.value = entry.jobTitle();
break;
case Qtopia::Department:
item.value = entry.department();
break;
case Qtopia::Office:
item.value = entry.office();
break;
case Qtopia::BusinessPhone:
item.value = entry.businessPhone();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/phonework" );
break;
case Qtopia::BusinessFax:
item.value = entry.businessFax();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/faxwork" );
break;
case Qtopia::BusinessMobile:
item.value = entry.businessMobile();
if ( !item.value.isEmpty() )
item.icon = Resource::loadPixmap( "addressbook/mobilework" );
break;
case Qtopia::BusinessPager:
item.value = entry.businessPager();
break;
case Qtopia::Profession:
item.value = entry.profession();
break;
case Qtopia::Assistant:
item.value = entry.assistant();
break;
case Qtopia::Manager:
item.value = entry.manager();
break;
case Qtopia::Spouse:
item.value = entry.spouse();
break;
case Qtopia::Gender:
item.value = entry.gender();
break;
case Qtopia::Birthday:
if ( ! entry.birthday().isNull() ){
item.value = TimeString::numberDateString( entry.birthday() );
}
break;
case Qtopia::Anniversary:
if ( ! entry.anniversary().isNull() ){
item.value = TimeString::numberDateString( entry.anniversary() );
}
break;
case Qtopia::Nickname:
item.value = entry.nickname();
break;
case Qtopia::Children:
item.value = entry.children();
break;
case Qtopia::Notes:
item.value = entry.notes();
break;
}
if ( !item.value.isEmpty() )
break;
}
return item;
}
diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp
index 6cbd556..670cdb0 100644
--- a/core/pim/addressbook/abview.cpp
+++ b/core/pim/addressbook/abview.cpp
@@ -1,505 +1,506 @@
/**********************************************************************
** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de)
**
** 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.
**
**
**********************************************************************/
#include "abview.h"
#include <qlayout.h>
#include <qpe/global.h>
#include <opie/ocontactaccessbackend_vcard.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_curr_category( -1 ),
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 )
{
qWarning("AbView::c'tor");
// Load default database and handle syncing myself.. !
- m_contactdb = new OContactAccess ( "addressbook", 0l, 0l, false ),
+ m_contactdb = new OContactAccess ( "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_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 )
{
qWarning("AbView::setView( Views view )");
m_curr_View = view;
load();
}
void AbView::addEntry( const OContact &newContact )
{
qWarning("abview:AddContact");
m_contactdb->add ( newContact );
load();
}
void AbView::removeEntry( const int UID )
{
qWarning("abview:RemoveContact");
m_contactdb->remove( UID );
load();
}
void AbView::replaceEntry( const OContact &contact )
{
qWarning("abview:ReplaceContact");
m_contactdb->replace( contact );
load();
}
OContact AbView::currentEntry()
{
OContact 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()
{
// qWarning("abView:Save data");
return m_contactdb->save();
}
void AbView::load()
{
qWarning("abView:Load data");
// Letter Search is stopped at this place
emit signalClearLetterPicker();
if ( m_inPersonal )
// VCard Backend does not sort..
m_list = m_contactdb->allRecords();
else{
m_list = m_contactdb->sorted( true, 0, 0, 0 );
if ( m_curr_category != -1 )
clearForCategory();
}
qWarning ("Number of contacts: %d", m_list.count());
updateView( true );
}
void AbView::reload()
{
qWarning( "void AbView::reload()" );
m_contactdb->reload();
load();
}
void AbView::clear()
{
// :SX
}
void AbView::setShowByCategory( const QString& cat )
{
qWarning("AbView::setShowCategory( const QString& cat )");
int intCat = 0;
// All (cat == NULL) will be stored as -1
if ( cat.isNull() )
intCat = -1;
else
intCat = mCat.id("Contacts", cat );
// Just do anything if we really change the category
if ( intCat != m_curr_category ){
// qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category);
m_curr_category = intCat;
emit signalClearLetterPicker();
load();
}
}
void AbView::setShowToView( Views view )
{
qWarning("void AbView::setShowToView( View %d )", view);
if ( m_curr_View != view ){
qWarning ("Change the View (Category is: %d)", m_curr_category);
m_prev_View = m_curr_View;
m_curr_View = view;
updateView();
}
}
void AbView::setShowByLetter( char c, AbConfig::LPSearchMode mode )
{
qWarning("void AbView::setShowByLetter( %c, %d )", c, mode );
assert( mode < AbConfig::LASTELEMENT );
OContact query;
if ( c == 0 ){
load();
return;
}else{
// If the current Backend is unable to solve the query, we will
// ignore the request ..
if ( ! m_contactdb->hasQuerySettings( OContactAccess::WildCards | OContactAccess::IgnoreCase ) ){
return;
}
switch( mode ){
case AbConfig::LastName:
query.setLastName( QString("%1*").arg(c) );
break;
case AbConfig::FileAs:
query.setFileAs( QString("%1*").arg(c) );
break;
default:
qWarning( "Unknown Searchmode for AbView::setShowByLetter ! -> %d", mode );
qWarning( "I will ignore it.." );
return;
}
m_list = m_contactdb->queryByExample( query, OContactAccess::WildCards | OContactAccess::IgnoreCase );
if ( m_curr_category != -1 )
clearForCategory();
m_curr_Contact = 0;
}
updateView( true );
}
void AbView::setListOrder( const QValueList<int>& ordered )
{
m_orderedFields = ordered;
if ( m_abTable ){
m_abTable->setOrderedList( ordered );
m_abTable->refresh();
}
updateView();
}
QString AbView::showCategory() const
{
return mCat.label( "Contacts", m_curr_category );
}
void AbView::showPersonal( bool personal )
{
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();
}
void AbView::setCurrentUid( int uid ){
m_curr_Contact = uid;
updateView( true ); //true: Don't modificate the UID !
}
QStringList AbView::categories()
{
mCat.load( categoryFileName() );
QStringList categoryList = mCat.labels( "Contacts" );
return categoryList;
}
// BEGIN: Slots
void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
bool , QString cat )
{
// qWarning( "void AbView::slotDoFind" );
// We reloading the data: Deselect Letterpicker
emit signalClearLetterPicker();
// Use the current Category if nothing else selected
int category = 0;
if ( cat.isEmpty() )
category = m_curr_category;
else{
category = mCat.id("Contacts", cat );
}
// qWarning ("Find in Category %d", category);
QRegExp r( str );
r.setCaseSensitive( caseSensitive );
r.setWildcard( !useRegExp );
// Get all matching entries out of the database
m_list = m_contactdb->matchRegexp( r );
// qWarning( "found: %d", m_list.count() );
if ( m_list.count() == 0 ){
emit signalNotFound();
return;
}
// Now remove all contacts with wrong category (if any selected)
// This algorithm is a litte bit ineffective, but
// we will not have a lot of matching entries..
if ( m_curr_category != -1 )
clearForCategory();
// Now show all found entries
updateView( true );
}
void AbView::offSearch()
{
m_inSearch = false;
load();
}
void AbView::slotSwitch(){
// qWarning("AbView::slotSwitch()");
m_prev_View = m_curr_View;
switch ( (int) m_curr_View ){
case TableView:
qWarning("Switching to CardView");
m_curr_View = CardView;
break;
case CardView:
qWarning("Switching to TableView");
m_curr_View = TableView;
break;
}
updateView();
}
// END: Slots
void AbView::clearForCategory()
{
OContactAccess::List::Iterator it;
// Now remove all contacts with wrong category if any category selected
OContactAccess::List allList = m_list;
if ( m_curr_category != -1 ){
for ( it = allList.begin(); it != allList.end(); ++it ){
if ( !contactCompare( *it, m_curr_category ) ){
// qWarning("Removing %d", (*it).uid());
m_list.remove( (*it).uid() );
}
}
}
}
bool AbView::contactCompare( const OContact &cnt, int category )
{
// qWarning ("bool AbView::contactCompare( const OContact &cnt, %d )", category);
bool returnMe;
QArray<int> cats;
cats = cnt.categories();
// qWarning ("Number of categories: %d", cats.count() );
returnMe = false;
if ( cats.count() == 0 && category == 0 )
// Contacts with no category will just shown on "All" and "Unfiled"
returnMe = true;
else {
int i;
for ( i = 0; i < int(cats.count()); i++ ) {
// qWarning("Comparing %d with %d",cats[i],category );
if ( cats[i] == category ) {
returnMe = true;
break;
}
}
}
// qWarning ("Return: %d", returnMe);
return returnMe;
}
// 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( bool newdata )
{
// qWarning("AbView::updateView()");
if ( m_viewStack -> visibleWidget() ){
m_viewStack -> visibleWidget() -> clearFocus();
}
// If we switching the view, we have to store some information
if ( !newdata ){
if ( m_list.count() ){
switch ( (int) m_prev_View ) {
case TableView:
m_curr_Contact = m_abTable -> currentEntry_UID();
break;
case CardView:
m_curr_Contact = m_ablabel -> currentEntry_UID();
break;
}
}else
m_curr_Contact = 0;
}
// Feed all views with new lists
if ( newdata )
updateListinViews();
// Tell the world that the view is changed
if ( m_curr_View != m_prev_View )
emit signalViewSwitched ( (int) m_curr_View );
m_prev_View = m_curr_View;
// Switch to new View
switch ( (int) m_curr_View ) {
case TableView:
m_abTable -> setChoiceSelection( m_orderedFields );
if ( m_curr_Contact != 0 )
m_abTable -> selectContact ( m_curr_Contact );
m_abTable -> setFocus();
break;
case CardView:
if ( m_curr_Contact != 0 )
m_ablabel -> selectContact( m_curr_Contact );
m_ablabel -> setFocus();
break;
}
// Raise the current View
m_viewStack -> raiseWidget( m_curr_View );
}
diff --git a/core/pim/addressbook/addressbook.pro b/core/pim/addressbook/addressbook.pro
index 1637cac..c90568a 100644
--- a/core/pim/addressbook/addressbook.pro
+++ b/core/pim/addressbook/addressbook.pro
@@ -1,53 +1,51 @@
TEMPLATE = app
#CONFIG = qt warn_on release
CONFIG = qt warn_on debug
DESTDIR = $(OPIEDIR)/bin
HEADERS = addressbook.h \
contacteditor.h \
- ocontactfields.h \
ablabel.h \
abtable.h \
picker.h \
ofloatbar.h \
configdlg.h \
abconfig.h \
abview.h
SOURCES = main.cpp \
addressbook.cpp \
contacteditor.cpp \
- ocontactfields.cpp \
ablabel.cpp \
abtable.cpp \
picker.cpp \
configdlg.cpp \
abconfig.cpp \
abview.cpp
INTERFACES = configdlg_base.ui
TARGET = addressbook
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopie
TRANSLATIONS = ../../../i18n/de/addressbook.ts \
../../../i18n/nl/addressbook.ts \
../../../i18n/da/addressbook.ts \
../../../i18n/xx/addressbook.ts \
../../../i18n/en/addressbook.ts \
../../../i18n/es/addressbook.ts \
../../../i18n/fr/addressbook.ts \
../../../i18n/hu/addressbook.ts \
../../../i18n/ja/addressbook.ts \
../../../i18n/ko/addressbook.ts \
../../../i18n/no/addressbook.ts \
../../../i18n/pl/addressbook.ts \
../../../i18n/pt/addressbook.ts \
../../../i18n/pt_BR/addressbook.ts \
../../../i18n/sl/addressbook.ts \
../../../i18n/zh_CN/addressbook.ts \
../../../i18n/it/addressbook.ts \
../../../i18n/zh_TW/addressbook.ts
include ( $(OPIEDIR)/include.pro )
diff --git a/core/pim/addressbook/configdlg.cpp b/core/pim/addressbook/configdlg.cpp
index 629feef..981f5e0 100644
--- a/core/pim/addressbook/configdlg.cpp
+++ b/core/pim/addressbook/configdlg.cpp
@@ -1,154 +1,154 @@
#include "configdlg.h"
-#include "ocontactfields.h"
#include <qcheckbox.h>
#include <qradiobutton.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <qiconset.h>
#include <qpe/resource.h>
#include <opie/ocontact.h>
+#include "opie/ocontactfields.h"
ConfigDlg::ConfigDlg( QWidget *parent, const char *name):
ConfigDlg_Base(parent, name, true )
{
contFields = OContactFields::trfields();
// We add all Fields into the Listbox
for (uint i=0; i < contFields.count(); i++) {
allFieldListBox->insertItem( contFields[i] );
}
// Reset Widget Flags: This was not changeable by designer :(
setWFlags ( WStyle_ContextHelp );
// Set Pics to Buttons and Tabs
m_upButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/up" ) ) );
m_downButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/down" ) ) );
m_addButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/add" ) ) );
m_removeButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/sub" ) ) );
// Get the translation maps between Field ID and translated strings
m_mapStrToID = OContactFields::trFieldsToId();
m_mapIDToStr = OContactFields::idToTrFields();
connect ( m_addButton, SIGNAL( clicked() ), this, SLOT( slotItemAdd() ) );
connect ( m_removeButton, SIGNAL( clicked() ), this, SLOT( slotItemRemove() ) );
connect ( m_upButton, SIGNAL( clicked() ), this, SLOT( slotItemUp() ) );
connect ( m_downButton, SIGNAL( clicked() ), this, SLOT( slotItemDown() ) );
}
void ConfigDlg::slotItemUp()
{
qWarning( "void ConfigDlg::slotItemUp()" );
int i = fieldListBox->currentItem();
if ( i > 0 ) {
QString item = fieldListBox->currentText();
fieldListBox->removeItem( i );
fieldListBox->insertItem( item, i-1 );
fieldListBox->setCurrentItem( i-1 );
}
}
void ConfigDlg::slotItemDown()
{
qWarning( "void ConfigDlg::slotItemDown()" );
int i = fieldListBox->currentItem();
if ( i < (int)fieldListBox->count() - 1 ) {
QString item = fieldListBox->currentText();
fieldListBox->removeItem( i );
fieldListBox->insertItem( item, i+1 );
fieldListBox->setCurrentItem( i+1 );
}
}
void ConfigDlg::slotItemAdd()
{
qWarning( "void ConfigDlg::slotItemAdd()" );
int i = allFieldListBox->currentItem();
if ( i > 0 ) {
QString item = allFieldListBox->currentText();
qWarning("ADding %s", item.latin1());
fieldListBox->insertItem( item );
}
}
void ConfigDlg::slotItemRemove()
{
qWarning( "void ConfigDlg::slotItemRemove()" );
int i = fieldListBox->currentItem();
if ( i > 0 ) {
fieldListBox->removeItem( i );
}
}
void ConfigDlg::setConfig( const AbConfig& cnf )
{
m_config = cnf;
m_useRegExp->setChecked( m_config.useRegExp() );
m_useWildCard->setChecked( m_config.useWildCards() );
m_useQtMail->setChecked( m_config.useQtMail() );
m_useOpieMail->setChecked( m_config.useOpieMail() );
m_useCaseSensitive->setChecked( m_config.beCaseSensitive() );
switch( m_config.fontSize() ){
case 0:
m_smallFont->setChecked( true );
m_normalFont->setChecked( false );
m_largeFont->setChecked( false );
break;
case 1:
m_smallFont->setChecked( false );
m_normalFont->setChecked( true );
m_largeFont->setChecked( false );
break;
case 2:
m_smallFont->setChecked( false );
m_normalFont->setChecked( false );
m_largeFont->setChecked( true );
break;
}
for( uint i = 0; i < m_config.orderList().count(); i++ ) {
fieldListBox -> insertItem ( m_mapIDToStr[ m_config.orderList()[i] ] );
}
m_fixedBars->setChecked( m_config.fixedBars() );
m_moveBars->setChecked( !m_config.fixedBars() );
}
AbConfig ConfigDlg::getConfig()
{
m_config.setUseRegExp( m_useRegExp->isOn() );
m_config.setUseWildCards( m_useWildCard->isOn() );
m_config.setUseQtMail( m_useQtMail->isOn() );
m_config.setUseOpieMail( m_useOpieMail->isOn() );
m_config.setBeCaseSensitive( m_useCaseSensitive->isChecked() );
if ( m_smallFont->isChecked() )
m_config.setFontSize( 0 );
if ( m_normalFont->isChecked() )
m_config.setFontSize( 1 );
if ( m_largeFont->isChecked() )
m_config.setFontSize( 2 );
QValueList<int> orderlist;
for( int i = 0; i < (int)fieldListBox->count(); i++ ) {
orderlist.append( m_mapStrToID[ fieldListBox->text(i) ] );
}
m_config.setOrderList( orderlist );
m_config.setFixedBars( m_fixedBars->isChecked() );
return m_config;
}
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
index 9d1a1c7..8fbd065 100644
--- a/core/pim/addressbook/contacteditor.cpp
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -1,536 +1,535 @@
/*
* Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org>
* Copyright (C) 2002 by Stefan Eilers (eilers.stefan@epost.de)
*
* This file is an add-on for the OPIE 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 pacakaging
* 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.
*
*
* This is a rewrite of the abeditor.h file, modified to provide a more
* intuitive interface to TrollTech's original Address Book editor. This
* is made to operate exactly in interface with the exception of name.
*
*/
#include "contacteditor.h"
#include "addresspicker.h"
-#include "ocontactfields.h"
#include <qpe/categoryselect.h>
#include <qpe/qpeapplication.h>
#include <qpe/qpedialog.h>
#include <qpe/timeconversion.h>
#include <opie/ocontact.h>
#include <qpe/resource.h>
#include <qcombobox.h>
#include <qlabel.h>
#include <qtabwidget.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qmultilineedit.h>
#include <qscrollview.h>
#include <qtoolbutton.h>
#include <qpushbutton.h>
#include <qmainwindow.h>
#include <qvaluelist.h>
#include <qpopupmenu.h>
#include <qlistbox.h>
#include <qhbox.h>
#include <qaction.h>
#include <qiconset.h>
#include <qmessagebox.h>
#include <qwhatsthis.h>
#include <assert.h>
static inline bool containsAlphaNum( const QString &str );
static inline bool constainsWhiteSpace( const QString &str );
// helper functions, convert our comma delimited list to proper
// file format...
void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
QString &strAll );
// helper convert from file format to comma delimited...
void parseEmailTo( const QString &strDefaultEmail,
const QString &strOtherEmail, QString &strBack );
ContactEditor::ContactEditor( const OContact &entry,
QWidget *parent,
const char *name,
WFlags )
: QDialog( parent, name, TRUE, WStyle_ContextHelp ),
defaultEmailChooserPosition( -1 ),
m_personalView ( false ),
cmbDefaultEmail( 0 ),
initializing ( false )
{
initializing = true;
init();
setEntry( entry );
// cmbDefaultEmail = 0;
// defaultEmailChooserPosition = -1;
initializing = false;
}
ContactEditor::~ContactEditor() {
}
void ContactEditor::init() {
qWarning("init() START");
uint i = 0;
QStringList trlChooserNames;
for (i = 0; i <= 6; i++) {
slHomeAddress.append( "" );
slBusinessAddress.append( "" );
}
trlChooserNames = OContactFields::trphonefields( false );
slChooserNames = OContactFields::untrphonefields( false );
slDynamicEntries = OContactFields::untrdetailsfields( false );
trlDynamicEntries = OContactFields::trdetailsfields( false );
// Ok, we have to remove elements from the list of dynamic entries
// which are now stored in special (not dynamic) widgets..
// Otherwise we will get problems with field assignments! (se)
slDynamicEntries.remove("Anniversary");
slDynamicEntries.remove("Birthday");
slDynamicEntries.remove("Gender");
// The same with translated fields.. But I will
// use the translation map to avoid mismatches..
QMap<int, QString> translMap = OContactFields::idToTrFields();
trlDynamicEntries.remove( translMap[Qtopia::Anniversary] );
trlDynamicEntries.remove( translMap[Qtopia::Birthday] );
trlDynamicEntries.remove( translMap[Qtopia::Gender] );
// Last Check to be sure..
assert( slDynamicEntries.count() == trlDynamicEntries.count() );
assert( slChooserNames.count() == trlChooserNames.count() );
for (i = 0; i < slChooserNames.count(); i++)
slChooserValues.append("");
QVBoxLayout *vb = new QVBoxLayout( this );
tabMain = new QTabWidget( this );
vb->addWidget( tabMain );
QWidget *tabViewport = new QWidget ( tabMain );
vb = new QVBoxLayout( tabViewport );
svGeneral = new QScrollView( tabViewport );
vb->addWidget( svGeneral, 0, 0 );
svGeneral->setResizePolicy( QScrollView::AutoOneFit );
// svGeneral->setHScrollBarMode( QScrollView::AlwaysOff );
// svGeneral->setVScrollBarMode( QScrollView::AlwaysOff );
svGeneral->setFrameStyle( QFrame::NoFrame );
QWidget *container = new QWidget( svGeneral->viewport() );
svGeneral->addChild( container );
QGridLayout *gl = new QGridLayout( container, 1, 1, 2, 4 );
gl->setResizeMode( QLayout::FreeResize );
btnFullName = new QPushButton( tr( "Full Name..." ), container );
QWhatsThis::add( btnFullName, tr( "Press to enter last- middle and firstname" ) );
gl->addWidget( btnFullName, 0, 0 );
txtFullName = new QLineEdit( container );
QWhatsThis::add( txtFullName, tr( "Enter fullname directly ! If you have a lastname with multiple words ( for instance \"de la Guerra\"), please write <lastname>,<firstnames> like this: \"de la Guerra, Carlos Pedro\"" ) );
gl->addWidget( txtFullName, 0, 1 );
QLabel *l = new QLabel( tr( "Job Title" ), container );
QWhatsThis::add( l, tr( "The jobtitle.." ) );
gl->addWidget( l, 1, 0 );
txtJobTitle = new QLineEdit( container );
QWhatsThis::add( txtJobTitle, tr( "The jobtitle.." ) );
gl->addWidget( txtJobTitle, 1, 1 );
l = new QLabel( tr("Suffix"), container );
QWhatsThis::add( l, tr( "Something like \"jr.\".." ) );
gl->addWidget( l, 2, 0 );
txtSuffix = new QLineEdit( container );
QWhatsThis::add( txtSuffix, tr( "Something like \"jr.\".." ) );
gl->addWidget( txtSuffix, 2, 1 );
l = new QLabel( tr( "Organization" ), container );
QWhatsThis::add( l, tr( "The working place of the contact" ) );
gl->addWidget( l, 3, 0 );
txtOrganization = new QLineEdit( container );
QWhatsThis::add( txtOrganization, tr( "The working place of the contact" ) );
gl->addWidget( txtOrganization, 3, 1 );
// Chooser 1
cmbChooserField1 = new QComboBox( FALSE, container );
QWhatsThis::add( cmbChooserField1, tr( "Press to select attribute to change" ) );
cmbChooserField1->setMaximumWidth( 90 );
gl->addWidget( cmbChooserField1, 4, 0 );
// Textfield for chooser 1.
// Now use Widgetstack to contain the textfield and the default-email combo !
m_widgetStack1 = new QWidgetStack( container );
txtChooserField1 = new QLineEdit( m_widgetStack1 );
m_widgetStack1 -> addWidget( txtChooserField1, TextField );
gl->addWidget( m_widgetStack1, 4, 1 );
m_widgetStack1 -> raiseWidget( TextField );
// Chooser 2
cmbChooserField2 = new QComboBox( FALSE, container );
QWhatsThis::add( cmbChooserField2, tr( "Press to select attribute to change" ) );
cmbChooserField2->setMaximumWidth( 90 );
gl->addWidget( cmbChooserField2, 5, 0 );
// Textfield for chooser 2
// Now use WidgetStack to contain the textfield and the default-email combo!
m_widgetStack2 = new QWidgetStack( container );
txtChooserField2 = new QLineEdit( m_widgetStack2 );
m_widgetStack2 -> addWidget( txtChooserField2, TextField );
gl->addWidget( m_widgetStack2, 5, 1 );
m_widgetStack2 -> raiseWidget( TextField );
// Chooser 3
cmbChooserField3 = new QComboBox( FALSE, container );
QWhatsThis::add( cmbChooserField3, tr( "Press to select attribute to change" ) );
cmbChooserField3->setMaximumWidth( 90 );
gl->addWidget( cmbChooserField3, 6, 0 );
// Textfield for chooser 2
// Now use WidgetStack to contain the textfield and the default-email combo!
m_widgetStack3 = new QWidgetStack( container );
txtChooserField3 = new QLineEdit( m_widgetStack3 );
m_widgetStack3 -> addWidget( txtChooserField3, TextField );
gl->addWidget( m_widgetStack3, 6, 1 );
m_widgetStack3 -> raiseWidget( TextField );
l = new QLabel( tr( "File As" ), container );
QWhatsThis::add( l, tr( "Press to select how to store the name (and howto show it in the listview)" ) );
gl->addWidget( l, 7, 0 );
cmbFileAs = new QComboBox( TRUE, container );
gl->addWidget( cmbFileAs, 7, 1 );
labCat = new QLabel( tr( "Category" ), container );
gl->addWidget( labCat, 8, 0 );
cmbCat = new CategorySelect( container );
gl->addWidget( cmbCat, 8, 1 );
labCat->show();
cmbCat->show();
btnNote = new QPushButton( tr( "Notes..." ), container );
gl->addWidget( btnNote, 9, 1 );
tabMain->insertTab( tabViewport, tr( "General" ) );
tabViewport = new QWidget ( tabMain );
vb = new QVBoxLayout( tabViewport );
svAddress = new QScrollView( tabViewport );
vb->addWidget( svAddress, 0, 0 );
svAddress->setResizePolicy( QScrollView::AutoOneFit );
svAddress->setFrameStyle( QFrame::NoFrame );
container = new QWidget( svAddress->viewport() );
svAddress->addChild( container );
gl = new QGridLayout( container, 8, 3, 2, 4 ); // row 7 QSpacerItem
cmbAddress = new QComboBox( FALSE, container );
cmbAddress->insertItem( tr( "Business" ) );
cmbAddress->insertItem( tr( "Home" ) );
gl->addMultiCellWidget( cmbAddress, 0, 0, 0, 1 );
l = new QLabel( tr( "Address" ), container );
gl->addWidget( l, 1, 0 );
txtAddress = new QLineEdit( container );
gl->addMultiCellWidget( txtAddress, 1, 1, 1, 2 );
l = new QLabel( tr( "City" ), container );
gl->addWidget( l, 2, 0 );
txtCity = new QLineEdit( container );
gl->addMultiCellWidget( txtCity, 2, 2, 1, 2 );
l = new QLabel( tr( "State" ), container );
gl->addWidget( l, 3, 0 );
txtState = new QLineEdit( container );
gl->addMultiCellWidget( txtState, 3, 3, 1, 2 );
l = new QLabel( tr( "Zip Code" ), container );
gl->addWidget( l, 4, 0 );
txtZip = new QLineEdit( container );
gl->addMultiCellWidget( txtZip, 4, 4, 1, 2 );
l = new QLabel( tr( "Country" ), container );
gl->addWidget( l, 5, 0 );
cmbCountry = new QComboBox( TRUE, container );
cmbCountry->insertItem( tr( "" ) );
cmbCountry->insertItem( tr ( "United States" ) );
cmbCountry->insertItem( tr ( "United Kingdom" ) );
cmbCountry->insertItem( tr ( "Afghanistan" ) );
cmbCountry->insertItem( tr ( "Albania" ) );
cmbCountry->insertItem( tr ( "Algeria" ) );
cmbCountry->insertItem( tr ( "American Samoa" ) );
cmbCountry->insertItem( tr ( "Andorra" ) );
cmbCountry->insertItem( tr ( "Angola" ) );
cmbCountry->insertItem( tr ( "Anguilla" ) );
cmbCountry->insertItem( tr ( "Antarctica" ) );
cmbCountry->insertItem( tr ( "Argentina" ) );
cmbCountry->insertItem( tr ( "Armenia" ) );
cmbCountry->insertItem( tr ( "Aruba" ) );
cmbCountry->insertItem( tr ( "Australia" ) );
cmbCountry->insertItem( tr ( "Austria" ) );
cmbCountry->insertItem( tr ( "Azerbaijan" ) );
cmbCountry->insertItem( tr ( "Bahamas" ) );
cmbCountry->insertItem( tr ( "Bahrain" ) );
cmbCountry->insertItem( tr ( "Bangladesh" ) );
cmbCountry->insertItem( tr ( "Barbados" ) );
cmbCountry->insertItem( tr ( "Belarus" ) );
cmbCountry->insertItem( tr ( "Belgium" ) );
cmbCountry->insertItem( tr ( "Belize" ) );
cmbCountry->insertItem( tr ( "Benin" ) );
cmbCountry->insertItem( tr ( "Bermuda" ) );
cmbCountry->insertItem( tr ( "Bhutan" ) );
cmbCountry->insertItem( tr ( "Bolivia" ) );
cmbCountry->insertItem( tr ( "Botswana" ) );
cmbCountry->insertItem( tr ( "Bouvet Island" ) );
cmbCountry->insertItem( tr ( "Brazil" ) );
cmbCountry->insertItem( tr ( "Brunei Darussalam" ) );
cmbCountry->insertItem( tr ( "Bulgaria" ) );
cmbCountry->insertItem( tr ( "Burkina Faso" ) );
cmbCountry->insertItem( tr ( "Burundi" ) );
cmbCountry->insertItem( tr ( "Cambodia" ) );
cmbCountry->insertItem( tr ( "Cameroon" ) );
cmbCountry->insertItem( tr ( "Canada" ) );
cmbCountry->insertItem( tr ( "Cape Verde" ) );
cmbCountry->insertItem( tr ( "Cayman Islands" ) );
cmbCountry->insertItem( tr ( "Chad" ) );
cmbCountry->insertItem( tr ( "Chile" ) );
cmbCountry->insertItem( tr ( "China" ) );
cmbCountry->insertItem( tr ( "Christmas Island" ) );
cmbCountry->insertItem( tr ( "Colombia" ) );
cmbCountry->insertItem( tr ( "Comoros" ) );
cmbCountry->insertItem( tr ( "Congo" ) );
cmbCountry->insertItem( tr ( "Cook Island" ) );
cmbCountry->insertItem( tr ( "Costa Rica" ) );
cmbCountry->insertItem( tr ( "Cote d'Ivoire" ) );
cmbCountry->insertItem( tr ( "Croatia" ) );
cmbCountry->insertItem( tr ( "Cuba" ) );
cmbCountry->insertItem( tr ( "Cyprus" ) );
cmbCountry->insertItem( tr ( "Czech Republic" ) );
cmbCountry->insertItem( tr ( "Denmark" ) );
cmbCountry->insertItem( tr ( "Djibouti" ) );
cmbCountry->insertItem( tr ( "Dominica" ) );
cmbCountry->insertItem( tr ( "Dominican Republic" ) );
cmbCountry->insertItem( tr ( "East Timor" ) );
cmbCountry->insertItem( tr ( "Ecuador" ) );
cmbCountry->insertItem( tr ( "Egypt" ) );
cmbCountry->insertItem( tr ( "El Salvador" ) );
cmbCountry->insertItem( tr ( "Equatorial Guinea" ) );
cmbCountry->insertItem( tr ( "Eritrea" ) );
cmbCountry->insertItem( tr ( "Estonia" ) );
cmbCountry->insertItem( tr ( "Ethiopia" ) );
cmbCountry->insertItem( tr ( "Falkland Islands" ) );
cmbCountry->insertItem( tr ( "Faroe Islands" ) );
cmbCountry->insertItem( tr ( "Fiji" ) );
cmbCountry->insertItem( tr ( "Finland" ) );
cmbCountry->insertItem( tr ( "France" ) );
cmbCountry->insertItem( tr ( "French Guiana" ) );
cmbCountry->insertItem( tr ( "French Polynesia" ) );
cmbCountry->insertItem( tr ( "Gabon" ) );
cmbCountry->insertItem( tr ( "Gambia" ) );
cmbCountry->insertItem( tr ( "Georgia" ) );
cmbCountry->insertItem( tr ( "Germany" ) );
cmbCountry->insertItem( tr ( "Ghana" ) );
cmbCountry->insertItem( tr ( "Gibraltar" ) );
cmbCountry->insertItem( tr ( "Greece" ) );
cmbCountry->insertItem( tr ( "Greenland" ) );
cmbCountry->insertItem( tr ( "Grenada" ) );
cmbCountry->insertItem( tr ( "Guadeloupe" ) );
cmbCountry->insertItem( tr ( "Guam" ) );
cmbCountry->insertItem( tr ( "Guatemala" ) );
cmbCountry->insertItem( tr ( "Guinea" ) );
cmbCountry->insertItem( tr ( "Guinea-Bissau" ) );
cmbCountry->insertItem( tr ( "Guyana" ) );
cmbCountry->insertItem( tr ( "Haiti" ) );
cmbCountry->insertItem( tr ( "Holy See" ) );
cmbCountry->insertItem( tr ( "Honduras" ) );
cmbCountry->insertItem( tr ( "Hong Kong" ) );
cmbCountry->insertItem( tr ( "Hungary" ) );
cmbCountry->insertItem( tr ( "Iceland" ) );
cmbCountry->insertItem( tr ( "India" ) );
cmbCountry->insertItem( tr ( "Indonesia" ) );
cmbCountry->insertItem( tr ( "Ireland" ) );
cmbCountry->insertItem( tr ( "Israel" ) );
cmbCountry->insertItem( tr ( "Italy" ) );
cmbCountry->insertItem( tr ( "Jamaica" ) );
cmbCountry->insertItem( tr ( "Japan" ) );
cmbCountry->insertItem( tr ( "Jordan" ) );
cmbCountry->insertItem( tr ( "Kazakhstan" ) );
cmbCountry->insertItem( tr ( "Kenya" ) );
cmbCountry->insertItem( tr ( "Kiribati" ) );
cmbCountry->insertItem( tr ( "Korea" ) );
cmbCountry->insertItem( tr ( "Kuwait" ) );
cmbCountry->insertItem( tr ( "Kyrgyzstan" ) );
cmbCountry->insertItem( tr ( "Laos" ) );
cmbCountry->insertItem( tr ( "Latvia" ) );
cmbCountry->insertItem( tr ( "Lebanon" ) );
cmbCountry->insertItem( tr ( "Lesotho" ) );
cmbCountry->insertItem( tr ( "Liberia" ) );
cmbCountry->insertItem( tr ( "Liechtenstein" ) );
cmbCountry->insertItem( tr ( "Lithuania" ) );
cmbCountry->insertItem( tr ( "Luxembourg" ) );
cmbCountry->insertItem( tr ( "Macau" ) );
cmbCountry->insertItem( tr ( "Macedonia" ) );
cmbCountry->insertItem( tr ( "Madagascar" ) );
cmbCountry->insertItem( tr ( "Malawi" ) );
cmbCountry->insertItem( tr ( "Malaysia" ) );
cmbCountry->insertItem( tr ( "Maldives" ) );
cmbCountry->insertItem( tr ( "Mali" ) );
cmbCountry->insertItem( tr ( "Malta" ) );
cmbCountry->insertItem( tr ( "Martinique" ) );
cmbCountry->insertItem( tr ( "Mauritania" ) );
cmbCountry->insertItem( tr ( "Mauritius" ) );
cmbCountry->insertItem( tr ( "Mayotte" ) );
cmbCountry->insertItem( tr ( "Mexico" ) );
cmbCountry->insertItem( tr ( "Micronesia" ) );
cmbCountry->insertItem( tr ( "Moldova" ) );
cmbCountry->insertItem( tr ( "Monaco" ) );
cmbCountry->insertItem( tr ( "Mongolia" ) );
cmbCountry->insertItem( tr ( "Montserrat" ) );
cmbCountry->insertItem( tr ( "Morocco" ) );
cmbCountry->insertItem( tr ( "Mozambique" ) );
cmbCountry->insertItem( tr ( "Myanmar" ) );
cmbCountry->insertItem( tr ( "Namibia" ) );
cmbCountry->insertItem( tr ( "Nauru" ) );
cmbCountry->insertItem( tr ( "Nepal" ) );
cmbCountry->insertItem( tr ( "Netherlands" ) );
cmbCountry->insertItem( tr ( "New Caledonia" ) );
cmbCountry->insertItem( tr ( "New Zealand" ) );
cmbCountry->insertItem( tr ( "Nicaragua" ) );
cmbCountry->insertItem( tr ( "Niger" ) );
cmbCountry->insertItem( tr ( "Nigeria" ) );
cmbCountry->insertItem( tr ( "Niue" ) );
cmbCountry->insertItem( tr ( "Norway" ) );
cmbCountry->insertItem( tr ( "Oman" ) );
cmbCountry->insertItem( tr ( "Pakistan" ) );
cmbCountry->insertItem( tr ( "Palau" ) );
cmbCountry->insertItem( tr ( "Palestinian Sovereign Areas" ) );
cmbCountry->insertItem( tr ( "Panama" ) );
cmbCountry->insertItem( tr ( "Papua New Guinea" ) );
cmbCountry->insertItem( tr ( "Paraguay" ) );
cmbCountry->insertItem( tr ( "Peru" ) );
cmbCountry->insertItem( tr ( "Philippines" ) );
cmbCountry->insertItem( tr ( "Pitcairn Islands" ) );
cmbCountry->insertItem( tr ( "Poland" ) );
cmbCountry->insertItem( tr ( "Portugal" ) );
cmbCountry->insertItem( tr ( "Puerto Rico" ) );
cmbCountry->insertItem( tr ( "Qatar" ) );
cmbCountry->insertItem( tr ( "Reunion" ) );
cmbCountry->insertItem( tr ( "Romania" ) );
cmbCountry->insertItem( tr ( "Russia" ) );
cmbCountry->insertItem( tr ( "Rwanda" ) );
cmbCountry->insertItem( tr ( "Saint Lucia" ) );
cmbCountry->insertItem( tr ( "Samoa" ) );
cmbCountry->insertItem( tr ( "San Marino" ) );
cmbCountry->insertItem( tr ( "Saudi Arabia" ) );
cmbCountry->insertItem( tr ( "Senegal" ) );
cmbCountry->insertItem( tr ( "Seychelles" ) );
cmbCountry->insertItem( tr ( "Sierra Leone" ) );
cmbCountry->insertItem( tr ( "Singapore" ) );
cmbCountry->insertItem( tr ( "Slovakia" ) );
cmbCountry->insertItem( tr ( "Slovenia" ) );
cmbCountry->insertItem( tr ( "Solomon Islands" ) );
cmbCountry->insertItem( tr ( "Somalia" ) );
cmbCountry->insertItem( tr ( "South Africa" ) );
cmbCountry->insertItem( tr ( "Spain" ) );
cmbCountry->insertItem( tr ( "Sri Lanka" ) );
cmbCountry->insertItem( tr ( "St. Helena" ) );
cmbCountry->insertItem( tr ( "Sudan" ) );
cmbCountry->insertItem( tr ( "Suriname" ) );
cmbCountry->insertItem( tr ( "Swaziland" ) );
cmbCountry->insertItem( tr ( "Sweden" ) );
cmbCountry->insertItem( tr ( "Switzerland" ) );
cmbCountry->insertItem( tr ( "Taiwan" ) );
cmbCountry->insertItem( tr ( "Tajikistan" ) );
cmbCountry->insertItem( tr ( "Tanzania" ) );
cmbCountry->insertItem( tr ( "Thailand" ) );
cmbCountry->insertItem( tr ( "Togo" ) );
cmbCountry->insertItem( tr ( "Tokelau" ) );
cmbCountry->insertItem( tr ( "Tonga" ) );
cmbCountry->insertItem( tr ( "Tunisia" ) );
cmbCountry->insertItem( tr ( "Turkey" ) );
cmbCountry->insertItem( tr ( "Turkmenistan" ) );
cmbCountry->insertItem( tr ( "Tuvalu" ) );
cmbCountry->insertItem( tr ( "Uganda" ) );
cmbCountry->insertItem( tr ( "Ukraine" ) );
cmbCountry->insertItem( tr ( "Uruguay" ) );
cmbCountry->insertItem( tr ( "Uzbekistan" ) );
cmbCountry->insertItem( tr ( "Vanuatu" ) );
cmbCountry->insertItem( tr ( "Venezuela" ) );
cmbCountry->insertItem( tr ( "Vietnam" ) );
cmbCountry->insertItem( tr ( "Virgin Islands" ) );
cmbCountry->insertItem( tr ( "Western Sahara" ) );
cmbCountry->insertItem( tr ( "Yemen" ) );
cmbCountry->insertItem( tr ( "Yugoslavia" ) );
cmbCountry->insertItem( tr ( "Zambia" ) );
cmbCountry->insertItem( tr ( "Zimbabwe" ) );
if (cmbCountry->listBox()!=0)
cmbCountry->listBox()->sort();
cmbCountry->setMaximumWidth( 135 );
gl->addMultiCellWidget( cmbCountry, 5, 5, 1, 2 );
// Chooser 4
cmbChooserField4 = new QComboBox( FALSE, container );
cmbChooserField4->setMaximumWidth( 90 );
gl->addWidget( cmbChooserField4, 6, 0 );
// Textfield for chooser 2
// Now use WidgetStack to contain the textfield and the default-email combo!
m_widgetStack4 = new QWidgetStack( container );
txtChooserField4 = new QLineEdit( m_widgetStack4 );
m_widgetStack4 -> addWidget( txtChooserField4, TextField );
gl->addMultiCellWidget( m_widgetStack4, 6, 6, 1, 2 );
m_widgetStack4 -> raiseWidget( TextField );
QSpacerItem *space = new QSpacerItem(1,1,
QSizePolicy::Maximum,
QSizePolicy::MinimumExpanding );
gl->addItem( space, 7, 0 );
tabMain->insertTab( tabViewport, tr( "Address" ) );
tabViewport = new QWidget ( tabMain );
vb = new QVBoxLayout( tabViewport );
svDetails = new QScrollView( tabViewport );
vb->addWidget( svDetails, 0, 0 );
svDetails->setResizePolicy( QScrollView::AutoOneFit );
svDetails->setFrameStyle( QFrame::NoFrame );
container = new QWidget( svDetails->viewport() );
svDetails->addChild( container );
gl = new QGridLayout( container, 1, 2, 2, 4 );
int counter = 0;
// Birthday
QHBox* hBox = new QHBox( container );
l = new QLabel( tr("Birthday"), container );
gl->addWidget( l, counter, 0 );
QPopupMenu* m1 = new QPopupMenu( container );
diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h
index e7432ee..72d14a9 100644
--- a/core/pim/addressbook/contacteditor.h
+++ b/core/pim/addressbook/contacteditor.h
@@ -1,192 +1,191 @@
/*
* Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org>
*
* This file is an add-on for the OPIE 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 pacakaging
* 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.
*
*
* This is a rewrite of the abeditor.h file, modified to provide a more
* intuitive interface to TrollTech's original Address Book editor. This
* is made to operate exactly in interface with the exception of name.
*
*/
#ifndef CONTACTEDITOR_H
#define CONTACTEDITOR_H
#include <opie/ocontact.h>
+#include <opie/ocontactfields.h>
#include <qpe/datebookmonth.h>
#include <qdialog.h>
#include <qlist.h>
#include <qmap.h>
#include <qstringlist.h>
#include <qwidgetstack.h>
-#include "ocontactfields.h"
-
const int NAME_LF = 0;
const int NAME_LFM = 1;
const int NAME_FL = 2;
const int NAME_FML = 3;
const int NAME_F = 4;
const int NAME_M = 5;
const int NAME_L = 6;
const int NAME_S = 7;
class QScrollView;
class QTabWidget;
class QMultiLineEdit;
class QLineEdit;
class QComboBox;
class QPushButton;
class CategorySelect;
class QLabel;
class ContactEditor : public QDialog {
Q_OBJECT
public:
ContactEditor( const OContact &entry,
QWidget *parent = 0,
const char *name = 0,
WFlags fl = 0 );
~ContactEditor();
void setNameFocus();
void setPersonalView( bool personal = true );
OContact entry() const { return ent; }
public slots:
void slotNote();
void slotName();
void setEntry(const OContact &entry);
protected slots:
void accept();
private:
void init();
void saveEntry();
bool isEmpty();
void cleanupFields();
void updateDatePicker();
QString parseName( QString fullName, int type );
void chooserError( int index );
private slots:
void slotChooser1Change( const QString &textChanged );
void slotChooser2Change( const QString &textChanged );
void slotChooser3Change( const QString &textChanged );
void slotChooser4Change( const QString &textChanged );
void slotCmbChooser1Change( int index );
void slotCmbChooser2Change( int index );
void slotCmbChooser3Change( int index );
void slotCmbChooser4Change( int index );
void slotAddressTypeChange( int index );
void slotAddressChange( const QString &textChanged );
void slotAddress2Change( const QString &textChanged );
void slotPOBoxChange( const QString &textChanged );
void slotCityChange( const QString &textChanged );
void slotStateChange( const QString &textChanged );
void slotZipChange( const QString &textChanged );
void slotCountryChange( const QString &textChanged );
void slotFullNameChange( const QString &textChanged );
void slotSuffixChange( const QString &textChanged );
void slotOrganizationChange( const QString &textChanged );
void slotAnniversaryDateChanged( int year, int month, int day);
void slotBirthdayDateChanged( int year, int month, int day);
void slotRemoveBirthday();
void slotRemoveAnniversary();
void defaultEmailChanged(int);
private:
enum StackWidgets { TextField = 1, Combo };
int defaultEmailChooserPosition;
void populateDefaultEmailCmb();
void chooserChange( const QString&, int , QLineEdit*, int );
bool cmbChooserChange( int , QWidgetStack*, int );
OContactFields contactfields;
OContact ent;
QDialog *dlgNote;
QDialog *dlgName;
QList<QLineEdit> listValue;
QList<QLabel> listName;
QStringList slDynamicEntries;
QStringList trlDynamicEntries;
bool m_personalView;
QStringList slHomeAddress;
QStringList slBusinessAddress;
QStringList slChooserNames;
QStringList slChooserValues;
QStringList emails;
QString defaultEmail;
QMultiLineEdit *txtNote;
QLabel *lblNote;
//QLineEdit *txtTitle;
QLineEdit *txtFirstName;
QLineEdit *txtMiddleName;
QLineEdit *txtLastName;
QLineEdit *txtSuffix;
QTabWidget *tabMain;
QScrollView *svGeneral;
QPushButton *btnFullName;
QPushButton *btnNote;
QLineEdit *txtFullName;
QLineEdit *txtJobTitle;
QLineEdit *txtOrganization;
QLineEdit *txtChooserField1;
QLineEdit *txtChooserField2;
QLineEdit *txtChooserField3;
QLineEdit *txtChooserField4;
QWidgetStack* m_widgetStack1;
QWidgetStack* m_widgetStack2;
QWidgetStack* m_widgetStack3;
QWidgetStack* m_widgetStack4;
QComboBox *cmbChooserField1;
QComboBox *cmbChooserField2;
QComboBox *cmbChooserField3;
QComboBox *cmbChooserField4;
QComboBox *cmbDefaultEmail;
QComboBox *cmbFileAs;
CategorySelect *cmbCat;
QLabel *labCat;
QScrollView *svAddress;
QLineEdit *txtAddress;
//QLineEdit *txtAddress2;
//QLineEdit *txtPOBox;
QLineEdit *txtCity;
QLineEdit *txtState;
QLineEdit *txtZip;
QComboBox *cmbAddress;
QComboBox *cmbCountry;
QScrollView *svDetails;
QComboBox *cmbGender;
DateBookMonth* birthdayPicker;
QToolButton* birthdayButton;
DateBookMonth* anniversaryPicker;
QToolButton* anniversaryButton;
bool initializing;
};
#endif