summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO35
-rw-r--r--core/pim/addressbook/ablabel.cpp7
-rw-r--r--core/pim/addressbook/abview.cpp55
-rw-r--r--core/pim/addressbook/abview.h2
-rw-r--r--core/pim/addressbook/addressbook.cpp2
-rw-r--r--core/pim/addressbook/configdlg_base.ui10
-rw-r--r--core/pim/addressbook/ocontactfields.cpp4
7 files changed, 68 insertions, 47 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index 1cbee26..93ece13 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -2,85 +2,83 @@ Stuff todo until OPIE 1.0 :
===========================
Feature requests:
-----------------
- Dial by mobile phone by tapping the number..
(Maybe using gsmtool. And we may
add a library class for this)
- dial with dtmfdial incase it's installed and there's no mobile
- 3rd column for 2. Contact
- Implementing additional Views (Phonebook, ...)
- Birthday & Anniversary Reminder
- Plugin for Today for Birthdays and Anniversaries
Known Bugs:
-----------
- OK-Key does not switch from Detailview (ablable) to Listview
-- After finising search and after Edit: Clear Picker
-- After Edit: Table position back to edited entry.
-- Combo in Contacteditor: Field "Default-Email" is not correctly implemented and
- should be removed by a picker/combo.
- Name order selected in "contacteditor" not used in list view.
+
- Language not English (tested with german opie-translation):
1. Configure nicht übersetzt (alles leer).
2. Contacteditor nur teilweise übersetzt.
- 3. Kategorie-Picker geht nicht (nur bei Openzaurus).
+ 3. Kategorie-Picker geht nicht.
Bugs but not in addressbook:
-----------------------------
- VCARD: Import of Anniversary does not work correctly (currently disabled)
- VCARD: If umlaut (äöüß) in address, the parser gets confused..
-- Exporting and reimporting of Jobtitle fails.
+
+- Exporting and reimporting of Jobtitle fails (Could not reproduce this ! (se))
Urgent:
--------
-- Contact-Editor is temporarely reanabled. Wait for replacement.
+- Implement Button Pics
+- Fix start of opie-mail
+
+ContactEditor:
+- Contact-Editor is temporarely reenabled. Wait for replacement.
- Redesign of Contacteditor
- Store last settings of combo-boxes
- Category is on the wrong position after changing to personal and back to normal
( Temporarily workaround: Category is never deactivated.. :S )
-- Optimize Table Update...
-- Change MyDialog to Config
-- Implement Button Pics
-- Fix start of opie-mail
+- Personal and Business Web-page is not editable
Important:
----------
+- Implement a picker/combo for the default email.
- After search (Started with Return): KeyFocus should be on Tabelle
-- Searchwidget closed: Selected user is jumping
-- Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist)
- zu lange..
-
-- Store position and state of toolbar
- IRDA Receive: Contact is added, but start of editor with new entry expected..
- "What's this" should be added (Deleyed after Feature Freeze)
Less important:
---------------
- Reload if contacts were changed externally
- Overview window cleanup needed..
- The picker (alphabetical sort widget) should be
placed verticaly or horizontally (configurable)
- Find a smart solution for activating/deactivating the "send email" event
Should be Fixed (not absolute sure, need further validation):
-------------------------------------------------------------
+- Searchwidget closed: Selected user is jumping
+- Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist)
+ zu lange..
Fixed:
-------
- Syncing: abtable not reloaded after sync.
- Find widget should be replaced by something like
qpdf has.
- Adding a configuration dialog
- Picker: Activated letter schould be more visible
- Advanced handling of cursor keys (search..)
- Mail-Icon is missing
- Use opie-mail insted of qt-mail if possible.
- Font menu is invisible using german translation
- Personal contact editor: Disable categories
- "Nonenglish" translation bug has to be fixed.
- contacteditor: Birthday, annyversary, ... : Use Dateselector
@@ -91,16 +89,21 @@ Fixed:
different views (as started by darwin zins)..
- Use advanced database functions in abtable to decrease
memory footprint and to make everything more easy !
(abtable should store Iterator for selected Category)
- Abtable: Configure Contact column (internally already available,
need configuration)
- Select of primary contact (see #274 on mantis)
- Category-select does not work completely: "Unfiled" is always in listview ..
- Return from Contacteditor: Category resettet to all
- Personal Details not working
- If category changed, the letterpicker should be resetted
- There should be some icons for List and Cardview
- If in Cardview and a category change removes all entries:
There are already entries in Cardview after up/down
- Personal Details: Anniversary zeigt Fantasie-Werte
- Unfiled shown just in Category "All" and "Unfiled".
+- After finising search and after Edit: Clear Picker
+- After Edit: Table position back to edited entry.
+- Optimize Table Update...
+- Change MyDialog to Config
+- Store position and state of toolbar
diff --git a/core/pim/addressbook/ablabel.cpp b/core/pim/addressbook/ablabel.cpp
index 5b40dc1..937aaae 100644
--- a/core/pim/addressbook/ablabel.cpp
+++ b/core/pim/addressbook/ablabel.cpp
@@ -38,33 +38,38 @@ AbLabel::~AbLabel()
void AbLabel::setContacts( const OContactAccess::List& viewList )
{
m_viewList = viewList;
if (m_viewList.count() != 0){
m_empty = false;
m_itCurContact = m_viewList.begin();
sync();
}else{
// m_itCurContact.clear();
m_empty = true;
setText( "" );
}
}
int AbLabel::currentEntry_UID()
{
- return ( (*m_itCurContact).uid() );
+ OContact contact = *m_itCurContact;
+
+ if ( contact.isEmpty() )
+ return 0;
+ else
+ return ( contact.uid() );
}
OContact AbLabel::currentEntry()
{
return ( *m_itCurContact );
}
bool AbLabel::selectContact( int UID )
{
for ( m_itCurContact = m_viewList.begin(); m_itCurContact != m_viewList.end(); ++m_itCurContact){
if ( (*m_itCurContact).uid() == UID )
break;
}
sync();
diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp
index 0f4bd5f..7226e82 100644
--- a/core/pim/addressbook/abview.cpp
+++ b/core/pim/addressbook/abview.cpp
@@ -111,64 +111,70 @@ 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:
- return ( m_abTable -> currentEntry() );
+ currentContact = m_abTable -> currentEntry();
break;
case CardView:
- return ( m_ablabel -> currentEntry() );
+ currentContact = m_ablabel -> currentEntry();
break;
}
- return OContact();
+ 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 )
m_list = m_contactdb->allRecords();
- else
+ else{
m_list = m_contactdb->sorted( true, 0, 0, 0 );
-
- clearForCategory();
+ clearForCategory();
+ }
qWarning ("Number of contacts: %d", m_list.count());
- updateView();
+ updateView( true );
}
void AbView::reload()
{
qWarning( "void AbView::reload()" );
m_contactdb->reload();
load();
}
void AbView::clear()
{
// :SX
}
@@ -211,33 +217,33 @@ void AbView::setShowToView( Views view )
}
void AbView::setShowByLetter( char c )
{
qWarning("void AbView::setShowByLetter( %c )", c );
OContact query;
if ( c == 0 ){
load();
return;
}else{
query.setLastName( QString("%1*").arg(c) );
m_list = m_contactdb->queryByExample( query, OContactAccess::WildCards );
clearForCategory();
m_curr_Contact = 0;
}
- updateView();
+ updateView( true );
}
void AbView::setListOrder( const QValueList<int>& ordered )
{
m_orderedFields = ordered;
updateView();
}
QString AbView::showCategory() const
{
return mCat.label( "Contacts", m_curr_category );
}
void AbView::showPersonal( bool personal )
{
@@ -312,33 +318,33 @@ void AbView::slotDoFind( const QString &str, bool caseSensitive, bool 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..
clearForCategory();
// Now show all found entries
- updateView();
+ 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");
@@ -394,57 +400,60 @@ bool AbView::contactCompare( const OContact &cnt, int 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()
+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 ( 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;
+ 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
- updateListinViews();
+ if ( newdata )
+ updateListinViews();
- // Inform the world that the view is changed
+ // 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 );
diff --git a/core/pim/addressbook/abview.h b/core/pim/addressbook/abview.h
index 2c10cfa..8570fe7 100644
--- a/core/pim/addressbook/abview.h
+++ b/core/pim/addressbook/abview.h
@@ -45,33 +45,33 @@ public:
QString showCategory() const;
QStringList categories();
signals:
void signalNotFound();
void signalClearLetterPicker();
void signalViewSwitched ( int );
public slots:
void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
bool backwards, QString category = QString::null );
void slotSwitch();
private:
void updateListinViews();
- void updateView();
+ void updateView( bool newdata = false );
void clearForCategory();
bool contactCompare( const OContact &cnt, int category );
void parseName( const QString& name, QString *first, QString *middle,
QString * last );
Categories mCat;
bool m_inSearch;
bool m_inPersonal;
int m_curr_category;
Views m_curr_View;
Views m_prev_View;
int m_curr_Contact;
OContactAccess* m_contactdb;
OContactAccess* m_storedDB;
OContactAccess::List m_list;
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 5d588da..055124c 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -640,33 +640,33 @@ void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
}
}
#endif
}
void AddressbookWindow::editEntry( EntryMode entryMode )
{
OContact entry;
if ( !abEditor ) {
abEditor = new ContactEditor( entry, this, "editor" );
}
if ( entryMode == EditEntry )
abEditor->setEntry( m_abView -> currentEntry() );
else if ( entryMode == NewEntry )
abEditor->setEntry( entry );
- // other things may chane the caption.
+ // other things may change 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 ) {
OContact insertEntry = abEditor->entry();
insertEntry.assignUid();
m_abView -> addEntry( insertEntry );
} else {
OContact replEntry = abEditor->entry();
diff --git a/core/pim/addressbook/configdlg_base.ui b/core/pim/addressbook/configdlg_base.ui
index 408bfa6..8ae2578 100644
--- a/core/pim/addressbook/configdlg_base.ui
+++ b/core/pim/addressbook/configdlg_base.ui
@@ -1,42 +1,46 @@
<!DOCTYPE UI><UI>
<class>ConfigDlg_Base</class>
<author>Stefan Eilers</author>
<widget>
<class>QDialog</class>
<property stdset="1">
<name>name</name>
<cstring>Configuration</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>276</width>
+ <width>282</width>
<height>327</height>
</rect>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
+ <name>caption</name>
+ <string>Configuration</string>
+ </property>
+ <property stdset="1">
<name>sizeGripEnabled</name>
<bool>true</bool>
</property>
<property>
<name>layoutMargin</name>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>1</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
<widget>
@@ -340,37 +344,37 @@ is provided free !</string>
</spacer>
</vbox>
</widget>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>tab</cstring>
</property>
<attribute>
<name>title</name>
<string>Order</string>
</attribute>
<vbox>
<property stdset="1">
<name>margin</name>
- <number>-1</number>
+ <number>2</number>
</property>
<property stdset="1">
<name>spacing</name>
- <number>-1</number>
+ <number>2</number>
</property>
<widget>
<class>QGroupBox</class>
<property stdset="1">
<name>name</name>
<cstring>GroupBox9</cstring>
</property>
<property stdset="1">
<name>title</name>
<string>Select Contact Order:</string>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>11</number>
</property>
diff --git a/core/pim/addressbook/ocontactfields.cpp b/core/pim/addressbook/ocontactfields.cpp
index 7823a9c..df57efa 100644
--- a/core/pim/addressbook/ocontactfields.cpp
+++ b/core/pim/addressbook/ocontactfields.cpp
@@ -29,33 +29,33 @@ QStringList OContactFields::untrdetailsfields( bool sorted )
if (sorted) list.sort();
return list;
}
/*!
\internal
Returns a translated list of phone field names for a contact.
*/
QStringList OContactFields::trphonefields( bool sorted )
{
QStringList list;
list.append( QObject::tr( "Business Phone" ) );
list.append( QObject::tr( "Business Fax" ) );
list.append( QObject::tr( "Business Mobile" ) );
- list.append( QObject::tr( "Default Email" ) );
+ // list.append( QObject::tr( "Default Email" ) );
list.append( QObject::tr( "Emails" ) );
list.append( QObject::tr( "Home Phone" ) );
list.append( QObject::tr( "Home Fax" ) );
list.append( QObject::tr( "Home Mobile" ) );
if (sorted) list.sort();
return list;
}
/*!
\internal
Returns a translated list of details field names for a contact.
*/
@@ -125,33 +125,33 @@ QStringList OContactFields::trfields( bool sorted )
return list;
}
/*!
\internal
Returns a list of phone field names for a contact.
*/
QStringList OContactFields::untrphonefields( bool sorted )
{
QStringList list;
list.append( "Business Phone" );
list.append( "Business Fax" );
list.append( "Business Mobile" );
- list.append( "Default Email" );
+ // list.append( "Default Email" );
list.append( "Emails" );
list.append( "Home Phone" );
list.append( "Home Fax" );
list.append( "Home Mobile" );
if (sorted) list.sort();
return list;
}
/*!
\internal
Returns an untranslated list of field names for a contact.
*/
QStringList OContactFields::untrfields( bool sorted )