diff options
Diffstat (limited to 'kabc')
-rw-r--r-- | kabc/Makefile.am | 5 | ||||
-rw-r--r-- | kabc/README | 1 | ||||
-rw-r--r-- | kabc/frontend/Makefile.am | 10 | ||||
-rw-r--r-- | kabc/frontend/main.cpp | 20 | ||||
-rw-r--r-- | kabc/frontend/mainWindow.ui | 1409 | ||||
-rw-r--r-- | kabc/frontend/mainWindow.ui.h | 658 | ||||
-rw-r--r-- | kabc/kabc2mutt/Makefile.am | 13 | ||||
-rw-r--r-- | kabc/kabc2mutt/README | 19 | ||||
-rw-r--r-- | kabc/kabc2mutt/kabc2mutt.cpp | 160 | ||||
-rw-r--r-- | kabc/kabc2mutt/kabc2mutt.h | 56 | ||||
-rw-r--r-- | kabc/kabc2mutt/main.cpp | 80 | ||||
-rw-r--r-- | kabc/kabcdistlistupdater/Makefile.am | 12 | ||||
-rw-r--r-- | kabc/kabcdistlistupdater/kabcdistlistupdater.cpp | 95 | ||||
-rw-r--r-- | kabc/kabcdistlistupdater/kabcdistlistupdater.desktop | 21 |
14 files changed, 2559 insertions, 0 deletions
diff --git a/kabc/Makefile.am b/kabc/Makefile.am new file mode 100644 index 000000000..252d071ae --- /dev/null +++ b/kabc/Makefile.am @@ -0,0 +1,5 @@ +if compile_newdistrlists +KABCDISTLISTUPDATER=kabcdistlistupdater +endif + +SUBDIRS = kabc2mutt $(KABCDISTLISTUPDATER) diff --git a/kabc/README b/kabc/README new file mode 100644 index 000000000..96fcd6fe5 --- /dev/null +++ b/kabc/README @@ -0,0 +1 @@ +This directory contains test code for kabc. diff --git a/kabc/frontend/Makefile.am b/kabc/frontend/Makefile.am new file mode 100644 index 000000000..c7a413fcc --- /dev/null +++ b/kabc/frontend/Makefile.am @@ -0,0 +1,10 @@ +INCLUDES = -I$(includedir)/kabc $(all_includes) + +METASOURCES = AUTO + +bin_PROGRAMS = kabcfrontend + +kabcfrontend_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kabcfrontend_LDADD = -lkabc $(LIB_KDECORE) +kabcfrontend_SOURCES = main.cpp mainWindow.ui + diff --git a/kabc/frontend/main.cpp b/kabc/frontend/main.cpp new file mode 100644 index 000000000..797c9198a --- /dev/null +++ b/kabc/frontend/main.cpp @@ -0,0 +1,20 @@ +#include <kaboutdata.h> +#include <kapplication.h> +#include <kdebug.h> +#include <klocale.h> +#include <kcmdlineargs.h> + +#include "mainWindow.h" + +int main( int argc, char ** argv ) +{ + KAboutData aboutData("testkabc",I18N_NOOP("TestKabc"),"0.1"); + KCmdLineArgs::init(argc,argv,&aboutData); + + KApplication app; + + MainWindow *w = new MainWindow; + w->show(); + app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); + return app.exec(); +} diff --git a/kabc/frontend/mainWindow.ui b/kabc/frontend/mainWindow.ui new file mode 100644 index 000000000..be9996c55 --- /dev/null +++ b/kabc/frontend/mainWindow.ui @@ -0,0 +1,1409 @@ +<!DOCTYPE UI><UI version="3.1" stdsetdef="1"> +<class>MainWindow</class> +<widget class="QMainWindow"> + <property name="name"> + <cstring>MainWindow</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>570</width> + <height>534</height> + </rect> + </property> + <property name="caption"> + <string>KABC Frontend</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QListView" row="0" column="0"> + <column> + <property name="text"> + <string>Name</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>UID</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>mAddresseeList</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>Sunken</enum> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + <widget class="QTabWidget" row="0" column="1"> + <property name="name"> + <cstring>TabWidget2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>2</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="tabPosition"> + <enum>Top</enum> + </property> + <property name="tabShape"> + <enum>Rounded</enum> + </property> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>&General</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLineEdit" row="0" column="1"> + <property name="name"> + <cstring>mNameEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel1</cstring> + </property> + <property name="text"> + <string>Name:</string> + </property> + </widget> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>TextLabel1_2</cstring> + </property> + <property name="text"> + <string>URL:</string> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>mUrlEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="5" column="1"> + <property name="name"> + <cstring>mAdditionalNameEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="7" column="1"> + <property name="name"> + <cstring>mSuffixEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="4" column="1"> + <property name="name"> + <cstring>mGivenNameEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="3" column="1"> + <property name="name"> + <cstring>mPrefixEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="6" column="1"> + <property name="name"> + <cstring>mFamilyNameEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="2" column="1"> + <property name="name"> + <cstring>mFormattedNameEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="8" column="1"> + <property name="name"> + <cstring>mNickNameEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="8" column="0"> + <property name="name"> + <cstring>TextLabel7</cstring> + </property> + <property name="text"> + <string>Nickname:</string> + </property> + </widget> + <widget class="QLabel" row="7" column="0"> + <property name="name"> + <cstring>TextLabel5</cstring> + </property> + <property name="text"> + <string>Honorific suffixes:</string> + </property> + </widget> + <widget class="QLabel" row="6" column="0"> + <property name="name"> + <cstring>TextLabel3_2</cstring> + </property> + <property name="text"> + <string>Family name:</string> + </property> + </widget> + <widget class="QLabel" row="5" column="0"> + <property name="name"> + <cstring>TextLabel4</cstring> + </property> + <property name="text"> + <string>Additional names:</string> + </property> + </widget> + <widget class="QLabel" row="4" column="0"> + <property name="name"> + <cstring>TextLabel6</cstring> + </property> + <property name="text"> + <string>Given name:</string> + </property> + </widget> + <widget class="QLabel" row="3" column="0"> + <property name="name"> + <cstring>TextLabel1_3</cstring> + </property> + <property name="text"> + <string>Honorific prefixes:</string> + </property> + </widget> + <widget class="QLabel" row="2" column="0"> + <property name="name"> + <cstring>TextLabel8</cstring> + </property> + <property name="text"> + <string>Formatted name:</string> + </property> + </widget> + <widget class="QLabel" row="9" column="0"> + <property name="name"> + <cstring>TextLabel15</cstring> + </property> + <property name="text"> + <string>Sort string:</string> + </property> + </widget> + <widget class="QLineEdit" row="9" column="1"> + <property name="name"> + <cstring>mSortStringEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="11" column="0"> + <property name="name"> + <cstring>TextLabel11</cstring> + </property> + <property name="text"> + <string>Role:</string> + </property> + </widget> + <widget class="QLabel" row="12" column="0"> + <property name="name"> + <cstring>TextLabel12</cstring> + </property> + <property name="text"> + <string>Organization:</string> + </property> + </widget> + <widget class="QLabel" row="10" column="0"> + <property name="name"> + <cstring>TextLabel10</cstring> + </property> + <property name="text"> + <string>Title:</string> + </property> + </widget> + <widget class="QLineEdit" row="10" column="1"> + <property name="name"> + <cstring>mTitleEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="11" column="1"> + <property name="name"> + <cstring>mRoleEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="12" column="1"> + <property name="name"> + <cstring>mOrganizationEdit</cstring> + </property> + </widget> + <spacer row="13" column="1"> + <property name="name"> + <cstring>Spacer1</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>Phone && &Mail</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QGroupBox" row="1" column="0"> + <property name="name"> + <cstring>GroupBox1</cstring> + </property> + <property name="title"> + <string>&Phone</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel2_3</cstring> + </property> + <property name="text"> + <string>Id:</string> + </property> + </widget> + <widget class="QComboBox" row="0" column="1" rowspan="1" colspan="2"> + <property name="name"> + <cstring>mPhoneIdCombo</cstring> + </property> + </widget> + <widget class="QPushButton" row="0" column="3"> + <property name="name"> + <cstring>PushButton3</cstring> + </property> + <property name="text"> + <string>Remove</string> + </property> + </widget> + <widget class="QPushButton" row="0" column="4"> + <property name="name"> + <cstring>PushButton4</cstring> + </property> + <property name="text"> + <string>New</string> + </property> + </widget> + <widget class="QLineEdit" row="1" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mPhoneNumberEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="1" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel1_5</cstring> + </property> + <property name="text"> + <string>Number:</string> + </property> + </widget> + <widget class="QButtonGroup" row="2" column="0" rowspan="1" colspan="5"> + <property name="name"> + <cstring>ButtonGroup2</cstring> + </property> + <property name="title"> + <string>Type</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QCheckBox" row="2" column="0"> + <property name="name"> + <cstring>mPhoneWorkCheck</cstring> + </property> + <property name="text"> + <string>Work</string> + </property> + </widget> + <widget class="QCheckBox" row="3" column="0"> + <property name="name"> + <cstring>mPhonePrefCheck</cstring> + </property> + <property name="text"> + <string>Pref</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="0"> + <property name="name"> + <cstring>mPhoneHomeCheck</cstring> + </property> + <property name="text"> + <string>Home</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="1"> + <property name="name"> + <cstring>mPhoneCellCheck</cstring> + </property> + <property name="text"> + <string>Cell</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="0"> + <property name="name"> + <cstring>mPhoneFaxCheck</cstring> + </property> + <property name="text"> + <string>Fax</string> + </property> + </widget> + <widget class="QCheckBox" row="3" column="1" rowspan="1" colspan="2"> + <property name="name"> + <cstring>mPhoneBbsCheck</cstring> + </property> + <property name="text"> + <string>BBS</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="1"> + <property name="name"> + <cstring>mPhoneCarCheck</cstring> + </property> + <property name="text"> + <string>Car</string> + </property> + </widget> + <widget class="QCheckBox" row="2" column="1"> + <property name="name"> + <cstring>mPhoneVideoCheck</cstring> + </property> + <property name="text"> + <string>Video</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="2"> + <property name="name"> + <cstring>mPhoneIsdnCheck</cstring> + </property> + <property name="text"> + <string>ISDN</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="3"> + <property name="name"> + <cstring>mPhoneVoiceCheck</cstring> + </property> + <property name="text"> + <string>Voice</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="2"> + <property name="name"> + <cstring>mPhonePcsCheck</cstring> + </property> + <property name="text"> + <string>PCS</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="3"> + <property name="name"> + <cstring>mPhoneModemCheck</cstring> + </property> + <property name="text"> + <string>Modem</string> + </property> + </widget> + <widget class="QCheckBox" row="2" column="2"> + <property name="name"> + <cstring>mPhonePagerCheck</cstring> + </property> + <property name="text"> + <string>Pager</string> + </property> + </widget> + <widget class="QCheckBox" row="2" column="3"> + <property name="name"> + <cstring>mPhoneMsgCheck</cstring> + </property> + <property name="text"> + <string>Msg</string> + </property> + </widget> + </grid> + </widget> + </grid> + </widget> + <widget class="QGroupBox" row="0" column="0"> + <property name="name"> + <cstring>GroupBox2</cstring> + </property> + <property name="title"> + <string>Ema&il</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QPushButton" row="0" column="1"> + <property name="name"> + <cstring>PushButton7</cstring> + </property> + <property name="text"> + <string>&New</string> + </property> + </widget> + <widget class="QPushButton" row="1" column="1"> + <property name="name"> + <cstring>PushButton5</cstring> + </property> + <property name="text"> + <string>&Edit</string> + </property> + </widget> + <widget class="QPushButton" row="2" column="1"> + <property name="name"> + <cstring>PushButton6</cstring> + </property> + <property name="text"> + <string>&Remove</string> + </property> + </widget> + <spacer row="3" column="1"> + <property name="name"> + <cstring>Spacer2</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QListView" row="0" column="0" rowspan="4" colspan="1"> + <column> + <property name="text"> + <string>Address</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>mEmailListView</cstring> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + </grid> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>A&ddress</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel16</cstring> + </property> + <property name="text"> + <string>Id:</string> + </property> + </widget> + <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel1_4</cstring> + </property> + <property name="text"> + <string>Post office box:</string> + </property> + </widget> + <widget class="QLabel" row="3" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel2_2</cstring> + </property> + <property name="text"> + <string>Extended:</string> + </property> + </widget> + <widget class="QLabel" row="4" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel3_3</cstring> + </property> + <property name="text"> + <string>Street:</string> + </property> + </widget> + <widget class="QLabel" row="5" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel4_2</cstring> + </property> + <property name="text"> + <string>Locality:</string> + </property> + </widget> + <widget class="QLineEdit" row="2" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressPostOfficeBoxEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="3" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressExtendedEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="4" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressStreetEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="5" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressLocalityEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="6" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressRegionEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="6" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel5_2</cstring> + </property> + <property name="text"> + <string>Region:</string> + </property> + </widget> + <widget class="QLabel" row="8" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel7_2</cstring> + </property> + <property name="text"> + <string>Country:</string> + </property> + </widget> + <widget class="QLabel" row="7" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel6_2</cstring> + </property> + <property name="text"> + <string>Postal code:</string> + </property> + </widget> + <widget class="QTextEdit" row="10" column="0" rowspan="1" colspan="5"> + <property name="name"> + <cstring>mAddressLabelEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="9" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TextLabel13</cstring> + </property> + <property name="text"> + <string>Label:</string> + </property> + </widget> + <widget class="QLineEdit" row="7" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressPostalCodeEdit</cstring> + </property> + </widget> + <widget class="QLineEdit" row="8" column="2" rowspan="1" colspan="3"> + <property name="name"> + <cstring>mAddressCountryEdit</cstring> + </property> + </widget> + <widget class="QButtonGroup" row="1" column="0" rowspan="1" colspan="5"> + <property name="name"> + <cstring>ButtonGroup1</cstring> + </property> + <property name="title"> + <string>Type</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QCheckBox" row="0" column="3"> + <property name="name"> + <cstring>mAddressDomCheck</cstring> + </property> + <property name="text"> + <string>Dom</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="3"> + <property name="name"> + <cstring>mAddressIntlCheck</cstring> + </property> + <property name="text"> + <string>Intl</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="2"> + <property name="name"> + <cstring>mAddressParcelCheck</cstring> + </property> + <property name="text"> + <string>Parcel</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="2"> + <property name="name"> + <cstring>mAddressPostalCheck</cstring> + </property> + <property name="text"> + <string>Postal</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="1"> + <property name="name"> + <cstring>mAddressHomeCheck</cstring> + </property> + <property name="text"> + <string>Home</string> + </property> + </widget> + <widget class="QCheckBox" row="0" column="0"> + <property name="name"> + <cstring>mAddressPrefCheck</cstring> + </property> + <property name="text"> + <string>Pref</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="1"> + <property name="name"> + <cstring>mAddressWorkCheck</cstring> + </property> + <property name="text"> + <string>Work</string> + </property> + </widget> + </grid> + </widget> + <widget class="QPushButton" row="0" column="4"> + <property name="name"> + <cstring>PushButton1</cstring> + </property> + <property name="text"> + <string>&New</string> + </property> + </widget> + <widget class="QPushButton" row="0" column="3"> + <property name="name"> + <cstring>PushButton2</cstring> + </property> + <property name="text"> + <string>&Remove</string> + </property> + </widget> + <widget class="QComboBox" row="0" column="1" rowspan="1" colspan="2"> + <property name="name"> + <cstring>mAddressIdCombo</cstring> + </property> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>&Special</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QTextEdit" row="2" column="0"> + <property name="name"> + <cstring>mNoteEdit</cstring> + </property> + </widget> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>TextLabel14</cstring> + </property> + <property name="text"> + <string>Note:</string> + </property> + </widget> + <widget class="QGroupBox" row="0" column="0"> + <property name="name"> + <cstring>GroupBox2_2</cstring> + </property> + <property name="title"> + <string>Categories</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QListView" row="0" column="0" rowspan="4" colspan="1"> + <column> + <property name="text"> + <string>Name</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>mCategoryListView</cstring> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + <spacer row="3" column="1"> + <property name="name"> + <cstring>Spacer2_2</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QPushButton" row="2" column="1"> + <property name="name"> + <cstring>PushButton6_2</cstring> + </property> + <property name="text"> + <string>&Remove</string> + </property> + </widget> + <widget class="QPushButton" row="1" column="1"> + <property name="name"> + <cstring>PushButton5_2</cstring> + </property> + <property name="text"> + <string>&Edit</string> + </property> + </widget> + <widget class="QPushButton" row="0" column="1"> + <property name="name"> + <cstring>PushButton7_2</cstring> + </property> + <property name="text"> + <string>&New</string> + </property> + </widget> + </grid> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>&Custom</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QGroupBox" row="0" column="0"> + <property name="name"> + <cstring>GroupBox2_2_2</cstring> + </property> + <property name="title"> + <string>Custom Entries</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QListView" row="0" column="0" rowspan="4" colspan="1"> + <column> + <property name="text"> + <string>App</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Name</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>mCustomListView</cstring> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + <widget class="QPushButton" row="0" column="1"> + <property name="name"> + <cstring>PushButton7_2_2</cstring> + </property> + <property name="text"> + <string>&New</string> + </property> + </widget> + <widget class="QPushButton" row="1" column="1"> + <property name="name"> + <cstring>PushButton5_2_2</cstring> + </property> + <property name="text"> + <string>&Edit</string> + </property> + </widget> + <widget class="QPushButton" row="2" column="1"> + <property name="name"> + <cstring>PushButton6_2_2</cstring> + </property> + <property name="text"> + <string>&Remove</string> + </property> + </widget> + <spacer row="3" column="1"> + <property name="name"> + <cstring>Spacer2_2_2</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </grid> + </widget> + </grid> + </widget> + </widget> + </grid> +</widget> +<menubar> + <property name="name"> + <cstring>menubar</cstring> + </property> + <item text="&File" name="PopupMenu"> + <action name="open"/> + <action name="open_std"/> + <action name="save"/> + <separator/> + <action name="dump"/> + </item> + <item text="&Addressee" name="PopupMenu_2"> + <action name="addressee_new"/> + <action name="addressee_remove"/> + </item> +</menubar> +<toolbars> + <toolbar dock="2"> + <property name="name"> + <cstring>Toolbar_3</cstring> + </property> + <property name="label"> + <string>Toolbar_3</string> + </property> + <action name="open"/> + <action name="save"/> + </toolbar> +</toolbars> +<actions> + <action> + <property name="name"> + <cstring>open</cstring> + </property> + <property name="iconSet"> + <iconset>image0</iconset> + </property> + <property name="text"> + <string>Action</string> + </property> + <property name="menuText"> + <string>&Open</string> + </property> + <property name="statusTip"> + <string>Open Address Book</string> + </property> + </action> + <action> + <property name="name"> + <cstring>save</cstring> + </property> + <property name="iconSet"> + <iconset>image1</iconset> + </property> + <property name="text"> + <string>Action</string> + </property> + <property name="menuText"> + <string>&Save</string> + </property> + <property name="statusTip"> + <string>Save Address Book</string> + </property> + </action> + <action> + <property name="name"> + <cstring>addressee_new</cstring> + </property> + <property name="text"> + <string>Action</string> + </property> + <property name="menuText"> + <string>&New</string> + </property> + <property name="statusTip"> + <string>New Addressee</string> + </property> + </action> + <action> + <property name="name"> + <cstring>addressee_remove</cstring> + </property> + <property name="text"> + <string>Action</string> + </property> + <property name="menuText"> + <string>&Remove</string> + </property> + <property name="statusTip"> + <string>Remove Addressee</string> + </property> + </action> + <action> + <property name="name"> + <cstring>dump</cstring> + </property> + <property name="text"> + <string>Dump</string> + </property> + <property name="menuText"> + <string>&Dump</string> + </property> + <property name="toolTip"> + <string>Dump Addressbook</string> + </property> + </action> + <action> + <property name="name"> + <cstring>open_std</cstring> + </property> + <property name="text"> + <string>Open Standard Addressbook</string> + </property> + <property name="menuText"> + <string>Open Standard &Addressbook</string> + </property> + </action> +</actions> +<images> + <image name="image0"> + <data format="XPM.GZ" length="706">789cad92cf0ac2300cc6ef7d8ab0dc866c6eb231101f41f12888873673e8610a3a0f22bebbfdb3d6ced583e09742f3f54792429bc6b0592f214ed9b5e3dd91800efc02717d6bdbfb76b778b028cf41ae12b268c2a2040856e7d35ee528739c6a294bca56b32a33b656960a2aa950962bdb48192aac6d1add36a87f1094d2fb2731a7a856b81b7e23e8886dee0143900b2ed0c9bb1b0aeec580f880ff548343bd6b10c9534f42c0cd19013b670cfa9a003024047a1200b6463d898b5a87fe4e4928a2e79cbd00444d9e3f</data> + </image> + <image name="image1"> + <data format="XPM.GZ" length="706">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022330543251d2e253d856405bffcbc54105b19c856360003103711c4b530b63084709340dc64d364a36453103705ca35837093c1dc9424b31430570f2b00cb2863015099c444e5242400e49026930c1446372d3919a607c8275206610fed641291fd9f8822830688925146350e9b0c6e17d0500614dd7aa830052c93a2870d2ad55a7301002caeaa93</data> + </image> +</images> +<connections> + <connection> + <sender>mAddresseeList</sender> + <signal>selectionChanged(QListViewItem*)</signal> + <receiver>MainWindow</receiver> + <slot>updateAddressee(QListViewItem*)</slot> + </connection> + <connection> + <sender>save</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>fileSave()</slot> + </connection> + <connection> + <sender>open</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>fileOpen()</slot> + </connection> + <connection> + <sender>addressee_remove</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>removeEntry()</slot> + </connection> + <connection> + <sender>addressee_new</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>newEntry()</slot> + </connection> + <connection> + <sender>PushButton1</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>newAddress()</slot> + </connection> + <connection> + <sender>PushButton2</sender> + <signal>pressed()</signal> + <receiver>MainWindow</receiver> + <slot>removeAddress()</slot> + </connection> + <connection> + <sender>mAddressIdCombo</sender> + <signal>activated(int)</signal> + <receiver>MainWindow</receiver> + <slot>updateAddress(int)</slot> + </connection> + <connection> + <sender>dump</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>dumpAddressBook()</slot> + </connection> + <connection> + <sender>PushButton3</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>removePhoneNumber()</slot> + </connection> + <connection> + <sender>PushButton4</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>newPhoneNumber()</slot> + </connection> + <connection> + <sender>PushButton5</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>editEmail()</slot> + </connection> + <connection> + <sender>PushButton7</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>newEmail()</slot> + </connection> + <connection> + <sender>PushButton6</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>removeEmail()</slot> + </connection> + <connection> + <sender>mPhoneIdCombo</sender> + <signal>activated(int)</signal> + <receiver>MainWindow</receiver> + <slot>updatePhone(int)</slot> + </connection> + <connection> + <sender>PushButton7_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>newCategory()</slot> + </connection> + <connection> + <sender>PushButton5_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>editCategory()</slot> + </connection> + <connection> + <sender>PushButton6_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>removeCategory()</slot> + </connection> + <connection> + <sender>PushButton7_2_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>newCustom()</slot> + </connection> + <connection> + <sender>PushButton5_2_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>editCustom()</slot> + </connection> + <connection> + <sender>PushButton6_2_2</sender> + <signal>clicked()</signal> + <receiver>MainWindow</receiver> + <slot>removeCustom()</slot> + </connection> + <connection> + <sender>open_std</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>fileOpenStd()</slot> + </connection> +</connections> +<tabstops> + <tabstop>mAddresseeList</tabstop> + <tabstop>TabWidget2</tabstop> + <tabstop>mNameEdit</tabstop> + <tabstop>mUrlEdit</tabstop> + <tabstop>mFormattedNameEdit</tabstop> + <tabstop>mPrefixEdit</tabstop> + <tabstop>mGivenNameEdit</tabstop> + <tabstop>mAdditionalNameEdit</tabstop> + <tabstop>mFamilyNameEdit</tabstop> + <tabstop>mSuffixEdit</tabstop> + <tabstop>mNickNameEdit</tabstop> + <tabstop>mSortStringEdit</tabstop> + <tabstop>mTitleEdit</tabstop> + <tabstop>mRoleEdit</tabstop> + <tabstop>mOrganizationEdit</tabstop> + <tabstop>mEmailListView</tabstop> + <tabstop>PushButton7</tabstop> + <tabstop>PushButton5</tabstop> + <tabstop>PushButton6</tabstop> + <tabstop>mPhoneIdCombo</tabstop> + <tabstop>PushButton3</tabstop> + <tabstop>PushButton4</tabstop> + <tabstop>mPhoneNumberEdit</tabstop> + <tabstop>mPhoneFaxCheck</tabstop> + <tabstop>mPhoneCarCheck</tabstop> + <tabstop>mPhoneIsdnCheck</tabstop> + <tabstop>mPhoneVoiceCheck</tabstop> + <tabstop>mPhoneHomeCheck</tabstop> + <tabstop>mPhoneCellCheck</tabstop> + <tabstop>mPhonePcsCheck</tabstop> + <tabstop>mPhoneModemCheck</tabstop> + <tabstop>mPhoneWorkCheck</tabstop> + <tabstop>mPhoneVideoCheck</tabstop> + <tabstop>mPhonePagerCheck</tabstop> + <tabstop>mPhoneMsgCheck</tabstop> + <tabstop>mPhonePrefCheck</tabstop> + <tabstop>mPhoneBbsCheck</tabstop> + <tabstop>mAddressIdCombo</tabstop> + <tabstop>PushButton2</tabstop> + <tabstop>PushButton1</tabstop> + <tabstop>mAddressPrefCheck</tabstop> + <tabstop>mAddressHomeCheck</tabstop> + <tabstop>mAddressParcelCheck</tabstop> + <tabstop>mAddressDomCheck</tabstop> + <tabstop>mAddressWorkCheck</tabstop> + <tabstop>mAddressPostalCheck</tabstop> + <tabstop>mAddressIntlCheck</tabstop> + <tabstop>mAddressPostOfficeBoxEdit</tabstop> + <tabstop>mAddressExtendedEdit</tabstop> + <tabstop>mAddressStreetEdit</tabstop> + <tabstop>mAddressLocalityEdit</tabstop> + <tabstop>mAddressRegionEdit</tabstop> + <tabstop>mAddressPostalCodeEdit</tabstop> + <tabstop>mAddressCountryEdit</tabstop> + <tabstop>mAddressLabelEdit</tabstop> + <tabstop>mCategoryListView</tabstop> + <tabstop>PushButton7_2</tabstop> + <tabstop>PushButton5_2</tabstop> + <tabstop>PushButton6_2</tabstop> + <tabstop>mNoteEdit</tabstop> + <tabstop>mCustomListView</tabstop> + <tabstop>PushButton7_2_2</tabstop> + <tabstop>PushButton5_2_2</tabstop> + <tabstop>PushButton6_2_2</tabstop> +</tabstops> +<includes> + <include location="global" impldecl="in declaration">resourcefile.h</include> + <include location="global" impldecl="in declaration">addressbook.h</include> + <include location="local" impldecl="in implementation">mainWindow.ui.h</include> +</includes> +<forwards> + <forward>class AddresseeItem</forward> +</forwards> +<variables> + <variable>KABC::ResourceFile *mResourceFile</variable> + <variable>AddresseeItem *mCurrentItem</variable> + <variable>KABC::AddressBook *mAddressBook</variable> + <variable>QString mCurrentAddress</variable> + <variable>QString mCurrentPhone</variable> +</variables> +<slots> + <slot>init()</slot> + <slot>destroy()</slot> + <slot>fileSave()</slot> + <slot>fileOpen()</slot> + <slot>loadAddressBook( const QString & fileName )</slot> + <slot>updateAddressee( QListViewItem * item )</slot> + <slot>readAddressee( const KABC::Addressee & a )</slot> + <slot returnType="KABC::Addressee">writeAddressee( const KABC::Addressee & addressee )</slot> + <slot>newEntry()</slot> + <slot>removeEntry()</slot> + <slot>updateAddress( int id )</slot> + <slot returnType="KABC::Address">writeAddress( const KABC::Address & address )</slot> + <slot>writeAddress( const QString & id )</slot> + <slot>readAddress( const KABC::Address & a )</slot> + <slot>readAddress( const QString & id )</slot> + <slot>updatePhone( int id )</slot> + <slot returnType="KABC::PhoneNumber">writePhone( const KABC::PhoneNumber & phoneNumber )</slot> + <slot>writePhone( const QString & id )</slot> + <slot>readPhone( const KABC::PhoneNumber & p )</slot> + <slot>readPhone( const QString & id )</slot> + <slot>newAddress()</slot> + <slot>removeAddress()</slot> + <slot>dumpAddressBook()</slot> + <slot>newEmail()</slot> + <slot>editEmail()</slot> + <slot>removeEmail()</slot> + <slot>newPhoneNumber()</slot> + <slot>removePhoneNumber()</slot> + <slot>newCategory()</slot> + <slot>editCategory()</slot> + <slot>removeCategory()</slot> + <slot>editCustom()</slot> + <slot>newCustom()</slot> + <slot>removeCustom()</slot> + <slot>addressBookChanged()</slot> + <slot>addressBookLocked()</slot> + <slot>addressBookUnlocked()</slot> + <slot>fileOpenStd()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/kabc/frontend/mainWindow.ui.h b/kabc/frontend/mainWindow.ui.h new file mode 100644 index 000000000..e6a024743 --- /dev/null +++ b/kabc/frontend/mainWindow.ui.h @@ -0,0 +1,658 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ + +#include <qfiledialog.h> +#include <kinputdialog.h> +#include <qmessagebox.h> + +#include <klocale.h> +#include <kdebug.h> + +#include <kabc/stdaddressbook.h> + +using namespace KABC; + +class AddresseeItem : public QListViewItem +{ + public: + AddresseeItem( QListView *parent, const Addressee &a ) : + QListViewItem( parent, a.realName(), a.uid() ), mAddressee( a ) {} + + void setAddressee( const Addressee &a ) { mAddressee = a; } + Addressee &addressee() { return mAddressee; } + + private: + Addressee mAddressee; +}; + +void MainWindow::init() +{ + mAddressBook = KABC::StdAddressBook::self( true ); + + mCurrentItem = 0; + + mEmailListView->header()->hide(); + mCategoryListView->header()->hide(); + + connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), + SLOT( addressBookChanged() ) ); + connect( mAddressBook, SIGNAL( addressBookLocked( AddressBook * ) ), + SLOT( addressBookLocked() ) ); + connect( mAddressBook, SIGNAL( addressBookUnlocked( AddressBook * ) ), + SLOT( addressBookUnlocked() ) ); +} + +void MainWindow::destroy() +{ + delete mAddressBook; +} + +void MainWindow::fileSave() +{ + updateAddressee( mAddresseeList->selectedItem() ); + + StdAddressBook::save(); +} + +void MainWindow::fileOpen() +{ + QString fileName = QFileDialog::getOpenFileName(); + + loadAddressBook( fileName ); +} + +void MainWindow::loadAddressBook( const QString &fileName ) +{ + kdDebug() << "loadAddressBook(): '" << fileName << "'" << endl; + + mAddresseeList->clear(); + mCurrentItem = 0; + mCurrentAddress = QString::null; + readAddressee( Addressee() ); + + KABC::AddressBook::Iterator it; + for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { + new AddresseeItem( mAddresseeList, (*it) ); + } +} + +void MainWindow::updateAddressee( QListViewItem *item ) +{ + AddresseeItem *addresseeItem = dynamic_cast<AddresseeItem *>( item ); + if ( !addresseeItem ) return; + + if (mCurrentItem ) { + writeAddress( mCurrentAddress ); + writePhone( mCurrentPhone ); + Addressee a = writeAddressee( mCurrentItem->addressee() ); + mCurrentItem->setAddressee( a ); + mAddressBook->insertAddressee( a ); + } + mCurrentItem = addresseeItem; + + readAddressee( addresseeItem->addressee() ); + updateAddress( mAddressIdCombo->currentItem() ); + updatePhone( mPhoneIdCombo->currentItem() ); +} + + +void MainWindow::readAddressee( const KABC::Addressee &a ) +{ + kdDebug() << "MainWindow::readAddressee(): " << a.name() << endl; + + mNameEdit->setText( a.name() ); + mUrlEdit->setText( a.url().url() ); + mAdditionalNameEdit->setText( a.additionalName() ); + mSuffixEdit->setText( a.suffix() ); + mGivenNameEdit->setText( a.givenName() ); + mPrefixEdit->setText( a.prefix() ); + mFamilyNameEdit->setText( a.familyName() ); + mFormattedNameEdit->setText( a.formattedName() ); + mNickNameEdit->setText( a.nickName() ); + mSortStringEdit->setText( a.sortString() ); + mTitleEdit->setText( a.title() ); + mRoleEdit->setText( a.role() ); + mOrganizationEdit->setText( a.organization() ); + mNoteEdit->setText( a.note() ); +// mLabelEdit->setText( a.label() ); + + mEmailListView->clear(); + QStringList emails = a.emails(); + QStringList::ConstIterator it3; + for( it3 = emails.begin(); it3 != emails.end(); ++it3 ) { + new QListViewItem( mEmailListView, *it3 ); + } + + mCategoryListView->clear(); + QStringList categories = a.categories(); + QStringList::ConstIterator it4; + for( it4 = categories.begin(); it4 != categories.end(); ++it4 ) { + new QListViewItem( mCategoryListView, *it4 ); + } + + mCustomListView->clear(); + QStringList customs = a.customs(); + QStringList::ConstIterator it5; + for( it5 = customs.begin(); it5 != customs.end(); ++it5 ) { + int posDash = (*it5).find( "-" ); + int posColon = (*it5).find( ":" ); + + QString app = (*it5).left( posDash ); + QString cname = (*it5).mid( posDash + 1, posColon - posDash - 1 ); + QString value = (*it5).mid( posColon + 1 ); + + new QListViewItem( mCustomListView, app, cname, value ); + } + + Address::List addresses = a.addresses(); + mAddressIdCombo->clear(); + Address::List::ConstIterator it; + for( it = addresses.begin(); it != addresses.end(); ++it ) { + mAddressIdCombo->insertItem( (*it).id() ); + } + if ( mAddressIdCombo->count() > 0 ) mCurrentAddress = mAddressIdCombo->currentText(); + else mCurrentAddress = QString::null; + readAddress( mCurrentAddress ); + + mPhoneIdCombo->clear(); + PhoneNumber::List pl = a.phoneNumbers(); + PhoneNumber::List::ConstIterator it2; + for( it2 = pl.begin(); it2 != pl.end(); ++it2) { + mPhoneIdCombo->insertItem( (*it2).id() ); + } + if ( mPhoneIdCombo->count() > 0 ) mCurrentPhone = mPhoneIdCombo->currentText(); + readPhone( mCurrentPhone ); +} + +KABC::Addressee MainWindow::writeAddressee( const KABC::Addressee &addressee ) +{ + Addressee a( addressee ); + a.setName( mNameEdit->text() ); + if ( !mUrlEdit->text().isEmpty() ) { + a.setUrl( KURL( mUrlEdit->text() ) ); + } + + a.setAdditionalName( mAdditionalNameEdit->text() ); + a.setSuffix( mSuffixEdit->text() ); + a.setGivenName( mGivenNameEdit->text() ); + a.setPrefix( mPrefixEdit->text() ); + a.setFamilyName( mFamilyNameEdit->text() ); + a.setFormattedName( mFormattedNameEdit->text() ); + a.setNickName( mNickNameEdit->text() ); + a.setSortString( mSortStringEdit->text() ); + a.setTitle( mTitleEdit->text() ); + a.setRole( mRoleEdit->text() ); + a.setOrganization( mOrganizationEdit->text() ); + a.setNote( mNoteEdit->text() ); +// a.setLabel( mLabelEdit->text() ); + + kdDebug() << "MainWindow::writeAddressee()" << endl; + a.dump(); + + return a; +} + +void MainWindow::newEntry() +{ + bool ok = false; + QString name = KInputDialog::getText( i18n("New Address Book Entry"), + i18n("Please enter name:"), + QString::null, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + Addressee a; + a.setName( name ); + mAddressBook->insertAddressee( a ); + + new AddresseeItem( mAddresseeList, a ); +} + +void MainWindow::removeEntry() +{ + AddresseeItem *item = dynamic_cast<AddresseeItem *>(mAddresseeList->selectedItem()); + if ( item ) { + mAddressBook->removeAddressee( item->addressee() ); + delete item; + mCurrentItem = 0; + } +} + + +void MainWindow::updateAddress( int id ) +{ + if( !mCurrentItem ) return; + + writeAddress( mCurrentAddress ); + if ( mAddressIdCombo->count() > 0 ) { + mCurrentAddress = mAddressIdCombo->text( id ); + } else { + mCurrentAddress = QString::null; + } + readAddress( mCurrentAddress ); +} + +KABC::Address MainWindow::writeAddress( const KABC::Address &address ) +{ + Address a( address ); + + a.setPostOfficeBox( mAddressPostOfficeBoxEdit->text() ); + a.setExtended( mAddressExtendedEdit->text() ); + a.setStreet( mAddressStreetEdit->text() ); + a.setLocality( mAddressLocalityEdit->text() ); + a.setRegion( mAddressRegionEdit->text() ); + a.setLabel( mAddressLabelEdit->text() ); + a.setPostalCode( mAddressPostalCodeEdit->text() ); + a.setCountry( mAddressCountryEdit->text() ); + + int type = 0; + if ( mAddressDomCheck->isChecked() ) type |= Address::Dom; + if ( mAddressIntlCheck->isChecked() ) type |= Address::Intl; + if ( mAddressParcelCheck->isChecked() ) type |= Address::Parcel; + if ( mAddressPostalCheck->isChecked() ) type |= Address::Postal; + if ( mAddressHomeCheck->isChecked() ) type |= Address::Home; + if ( mAddressPrefCheck->isChecked() ) type |= Address::Pref; + if ( mAddressWorkCheck->isChecked() ) type |= Address::Work; + a.setType( type ); + + return a; +} + +void MainWindow::writeAddress( const QString &id ) +{ + if ( !mCurrentItem ) return; + + if ( id.isEmpty() ) return; + + Address address; + address.setId( id ); + address = writeAddress( address ); + + mCurrentItem->addressee().insertAddress( address ); +} + +void MainWindow::readAddress( const KABC::Address &a ) +{ + mAddressPostOfficeBoxEdit->setText( a.postOfficeBox() ); + mAddressExtendedEdit->setText( a.extended() ); + mAddressStreetEdit->setText( a.street() ); + mAddressLocalityEdit->setText( a.locality() ); + mAddressRegionEdit->setText( a.region() ); + mAddressLabelEdit->setText( a.label() ); + mAddressPostalCodeEdit->setText( a.postalCode() ); + mAddressCountryEdit->setText( a.country() ); + + int type = a.type(); + if ( type & Address::Dom ) mAddressDomCheck->setChecked( true ); + else mAddressDomCheck->setChecked( false ); + if ( type & Address::Intl ) mAddressIntlCheck->setChecked( true ); + else mAddressIntlCheck->setChecked( false ); + if ( type & Address::Parcel ) mAddressParcelCheck->setChecked( true ); + else mAddressParcelCheck->setChecked( false ); + if ( type & Address::Postal ) mAddressPostalCheck->setChecked( true ); + else mAddressPostalCheck->setChecked( false ); + if ( type & Address::Home ) mAddressHomeCheck->setChecked( true ); + else mAddressHomeCheck->setChecked( false ); + if ( type & Address::Pref ) mAddressPrefCheck->setChecked( true ); + else mAddressPrefCheck->setChecked( false ); + if ( type & Address::Work ) mAddressWorkCheck->setChecked( true ); + else mAddressWorkCheck->setChecked( false ); +} + +void MainWindow::readAddress( const QString &id ) +{ + if ( !mCurrentItem || id.isEmpty() ) { + readAddress( Address() ); + return; + } + + Address address = mCurrentItem->addressee().findAddress( id ); + readAddress( address ); +} + +void MainWindow::updatePhone( int id ) +{ + if( !mCurrentItem ) return; + + writePhone( mCurrentPhone ); + if ( mPhoneIdCombo->count() > 0 ) { + mCurrentPhone = mPhoneIdCombo->text( id ); + } else { + mCurrentPhone = QString::null; + } + readPhone( mCurrentPhone ); +} + +KABC::PhoneNumber MainWindow::writePhone( const KABC::PhoneNumber &phoneNumber ) +{ + PhoneNumber p( phoneNumber ); + + p.setNumber( mPhoneNumberEdit->text() ); + + int type = 0; + if ( mPhoneMsgCheck->isChecked() ) type |= PhoneNumber::Msg; + if ( mPhoneVoiceCheck->isChecked() ) type |= PhoneNumber::Voice; + if ( mPhoneFaxCheck->isChecked() ) type |= PhoneNumber::Fax; + if ( mPhoneCellCheck->isChecked() ) type |= PhoneNumber::Cell; + if ( mPhoneHomeCheck->isChecked() ) type |= PhoneNumber::Home; + if ( mPhonePrefCheck->isChecked() ) type |= PhoneNumber::Pref; + if ( mPhoneWorkCheck->isChecked() ) type |= PhoneNumber::Work; + if ( mPhoneVideoCheck->isChecked() ) type |= PhoneNumber::Video; + if ( mPhoneBbsCheck->isChecked() ) type |= PhoneNumber::Bbs; + if ( mPhoneModemCheck->isChecked() ) type |= PhoneNumber::Modem; + if ( mPhoneCarCheck->isChecked() ) type |= PhoneNumber::Car; + if ( mPhoneIsdnCheck->isChecked() ) type |= PhoneNumber::Isdn; + if ( mPhonePcsCheck->isChecked() ) type |= PhoneNumber::Pcs; + if ( mPhonePagerCheck->isChecked() ) type |= PhoneNumber::Pager; + p.setType( type ); + + return p; +} + +void MainWindow::writePhone( const QString &id ) +{ + if ( !mCurrentItem ) return; + + if ( id.isEmpty() ) return; + + PhoneNumber p; + p.setId( id ); + p = writePhone( p ); + + mCurrentItem->addressee().insertPhoneNumber( p ); +} + +void MainWindow::readPhone( const KABC::PhoneNumber &p ) +{ + mPhoneNumberEdit->setText( p.number() ); + + int type = p.type(); + if ( type & PhoneNumber::Msg ) mPhoneMsgCheck->setChecked( true ); + else mPhoneMsgCheck->setChecked( false ); + if ( type & PhoneNumber::Voice ) mPhoneVoiceCheck->setChecked( true ); + else mPhoneVoiceCheck->setChecked( false ); + if ( type & PhoneNumber::Fax ) mPhoneFaxCheck->setChecked( true ); + else mPhoneFaxCheck->setChecked( false ); + if ( type & PhoneNumber::Cell ) mPhoneCellCheck->setChecked( true ); + else mPhoneCellCheck->setChecked( false ); + if ( type & PhoneNumber::Home ) mPhoneHomeCheck->setChecked( true ); + else mPhoneHomeCheck->setChecked( false ); + if ( type & PhoneNumber::Pref ) mPhonePrefCheck->setChecked( true ); + else mPhonePrefCheck->setChecked( false ); + if ( type & PhoneNumber::Work ) mPhoneWorkCheck->setChecked( true ); + else mPhoneWorkCheck->setChecked( false ); + if ( type & PhoneNumber::Video ) mPhoneVideoCheck->setChecked( true ); + else mPhoneVideoCheck->setChecked( false ); + if ( type & PhoneNumber::Bbs ) mPhoneBbsCheck->setChecked( true ); + else mPhoneBbsCheck->setChecked( false ); + if ( type & PhoneNumber::Modem ) mPhoneModemCheck->setChecked( true ); + else mPhoneModemCheck->setChecked( false ); + if ( type & PhoneNumber::Car ) mPhoneCarCheck->setChecked( true ); + else mPhoneCarCheck->setChecked( false ); + if ( type & PhoneNumber::Isdn ) mPhoneIsdnCheck->setChecked( true ); + else mPhoneIsdnCheck->setChecked( false ); + if ( type & PhoneNumber::Pcs ) mPhonePcsCheck->setChecked( true ); + else mPhonePcsCheck->setChecked( false ); + if ( type & PhoneNumber::Pager ) mPhonePagerCheck->setChecked( true ); + else mPhonePagerCheck->setChecked( false ); +} + +void MainWindow::readPhone( const QString &id ) +{ + if ( !mCurrentItem || id.isEmpty() ) { + readPhone( PhoneNumber() ); + return; + } + + PhoneNumber p = mCurrentItem->addressee().findPhoneNumber( id ); + readPhone( p ); +} + + +void MainWindow::newAddress() +{ + if( !mCurrentItem ) return; + + Address address; + mCurrentItem->addressee().insertAddress( address ); + + mAddressIdCombo->insertItem( address.id() ); +} + +void MainWindow::removeAddress() +{ + if ( !mCurrentItem ) return; + + QString id = mAddressIdCombo->currentText(); + if ( id.isEmpty() ) return; + + Address address; + address.setId( id ); + mCurrentItem->addressee().removeAddress( address ); + + readAddressee( mCurrentItem->addressee() ); +} + + +void MainWindow::dumpAddressBook() +{ + mAddressBook->dump(); +} + + +void MainWindow::newEmail() +{ + if ( !mCurrentItem ) return; + + bool ok = false; + QString name = KInputDialog::getText( i18n("New Email Address"), + i18n("Please enter email address:"), + QString::null, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + new QListViewItem( mEmailListView, name ); + mCurrentItem->addressee().insertEmail( name ); +} + +void MainWindow::editEmail() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mEmailListView->selectedItem(); + if( !item ) return; + + QString oldName = item->text( 0 ); + + bool ok = false; + QString name = KInputDialog::getText( i18n("Edit Email Address"), + i18n("Please enter new email address:"), + oldName, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + item->setText( 0, name ); + mCurrentItem->addressee().removeEmail( oldName ); + mCurrentItem->addressee().insertEmail( name ); +} + +void MainWindow::removeEmail() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mEmailListView->selectedItem(); + if( !item ) return; + + mCurrentItem->addressee().removeEmail( item->text( 0 ) ); + delete item; +} + +void MainWindow::newPhoneNumber() +{ + if ( !mCurrentItem ) return; + + PhoneNumber p; + mCurrentItem->addressee().insertPhoneNumber( p ); + + mPhoneIdCombo->insertItem( p.id() ); +} + +void MainWindow::removePhoneNumber() +{ + if ( !mCurrentItem ) return; + + QString id = mPhoneIdCombo->currentText(); + if ( id.isEmpty() ) return; + + PhoneNumber p; + p.setId( id ); + mCurrentItem->addressee().removePhoneNumber( p ); + + readAddressee( mCurrentItem->addressee() ); +} + + +void MainWindow::newCategory() +{ + if ( !mCurrentItem ) return; + + bool ok = false; + QString name = KInputDialog::getText( i18n("New Category"), + i18n("Please enter category name:"), + QString::null, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + new QListViewItem( mCategoryListView, name ); + mCurrentItem->addressee().insertCategory( name ); +} + +void MainWindow::editCategory() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mCategoryListView->selectedItem(); + if( !item ) return; + + QString oldName = item->text( 0 ); + + bool ok = false; + QString name = KInputDialog::getText( i18n("Edit Category"), + i18n("Please enter new category name:"), + oldName, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + item->setText( 0, name ); + mCurrentItem->addressee().removeCategory( oldName ); + mCurrentItem->addressee().insertCategory( name ); +} + +void MainWindow::removeCategory() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mCategoryListView->selectedItem(); + if( !item ) return; + + mCurrentItem->addressee().removeCategory( item->text( 0 ) ); + delete item; +} + + +void MainWindow::editCustom() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mCustomListView->selectedItem(); + if( !item ) return; + + QString oldName = item->text( 0 ) + "-" + item->text( 1 ) + ":" + + item->text( 2 ); + + bool ok = false; + QString name = KInputDialog::getText( i18n("New Custom Entry"), + i18n("Please enter custom entry.\n" + "Format: APP-NAME:VALUE"), + oldName, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + int posDash = name.find( "-" ); + int posColon = name.find( ":" ); + + QString app = name.left( posDash ); + QString cname = name.mid( posDash + 1, posColon - posDash - 1 ); + QString value = name.mid( posColon + 1 ); + + item->setText( 0, app ); + item->setText( 1, cname ); + item->setText( 2, value ); + + mCurrentItem->addressee().removeCustom( app, cname ); + mCurrentItem->addressee().insertCustom( app, cname, value ); +} + +void MainWindow::newCustom() +{ + if ( !mCurrentItem ) return; + + bool ok = false; + QString name = KInputDialog::getText( i18n("New Custom Entry"), + i18n("Please enter custom entry.\n" + "Format: APP-NAME:VALUE"), + QString::null, &ok, + this ); + if ( !ok || name.isEmpty() ) return; + + int posDash = name.find( "-" ); + int posColon = name.find( ":" ); + + QString app = name.left( posDash ); + QString cname = name.mid( posDash + 1, posColon - posDash - 1 ); + QString value = name.mid( posColon + 1 ); + + new QListViewItem( mCustomListView, app, cname, value ); + + mCurrentItem->addressee().insertCustom( app, cname, value ); +} + +void MainWindow::removeCustom() +{ + if ( !mCurrentItem ) return; + + QListViewItem *item = mCustomListView->selectedItem(); + if( !item ) return; + + mCurrentItem->addressee().removeCustom( item->text( 0 ), item->text( 1 ) ); + delete item; +} + +void MainWindow::addressBookChanged() +{ + QMessageBox::warning( this, i18n("Address Book Changed"), + i18n("The address book has changed on disk."), + i18n("Reload") ); + loadAddressBook( "dummy" ); +} + +void MainWindow::addressBookLocked() +{ + kdDebug() << "AddressBook locked()" << endl; +} + +void MainWindow::addressBookUnlocked() +{ + kdDebug() << "AddressBook unlocked()" << endl; +} + + +void MainWindow::fileOpenStd() +{ + loadAddressBook( StdAddressBook::fileName() ); +} diff --git a/kabc/kabc2mutt/Makefile.am b/kabc/kabc2mutt/Makefile.am new file mode 100644 index 000000000..f8a201cfd --- /dev/null +++ b/kabc/kabc2mutt/Makefile.am @@ -0,0 +1,13 @@ +INCLUDES = -I$(includedir)/kabc $(all_includes) + +METASOURCES = AUTO + +bin_PROGRAMS = kabc2mutt + +kabc2mutt_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kabc2mutt_LDADD = -lkabc $(LIB_KDECORE) +kabc2mutt_SOURCES = kabc2mutt.cpp main.cpp + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kabc2mutt.pot + diff --git a/kabc/kabc2mutt/README b/kabc/kabc2mutt/README new file mode 100644 index 000000000..5d82fdfec --- /dev/null +++ b/kabc/kabc2mutt/README @@ -0,0 +1,19 @@ +KAbc2Mutt +----------- + +kabc2mutt is a small programm to make the email addresses, stored in +kaddressbook, available in mutt. +You only have to add the following line to your .muttrc + + source "kabc2mutt |" + +You can also configure mutt to query kabc2mutt when typing a substring +of an email address (see the docu for query_command). +To do this, add the following line to your .muttrc + + set query_command = "kabc2mutt --query '%s' --format query" + +Have fun with it + +Ciao, +Tobias diff --git a/kabc/kabc2mutt/kabc2mutt.cpp b/kabc/kabc2mutt/kabc2mutt.cpp new file mode 100644 index 000000000..84f4626bb --- /dev/null +++ b/kabc/kabc2mutt/kabc2mutt.cpp @@ -0,0 +1,160 @@ +/* + KAbc2Mutt + + Copyright (c) 2003 - 2004 Tobias Koenig <tokoe@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <kabc/distributionlist.h> +#include <kapplication.h> +#include <klocale.h> + +#include <qregexp.h> + +#include <iostream> + +#include "kabc2mutt.h" + +static std::ostream & operator<< ( std::ostream &os, const QString &s ); + +KABC2Mutt::KABC2Mutt( QObject *parent, const char *name ) + : QObject( parent, name ), mFormat( Aliases ), + mIgnoreCase( false ), mAllAddresses( false ), + mAlternateKeyFormat( false ), + mAddressBook( 0 ) +{ +} + +void KABC2Mutt::run() +{ + mAddressBook = KABC::StdAddressBook::self( true ); + KABC::StdAddressBook::setAutomaticSave( false ); + + connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), + this, SLOT( loadingFinished() ) ); +} + +void KABC2Mutt::loadingFinished() +{ + // print addressees + KABC::AddressBook::ConstIterator iaddr; + for ( iaddr = mAddressBook->begin(); iaddr != mAddressBook->end(); ++iaddr ) { + const QString name = (*iaddr).givenName() + ' ' + (*iaddr).familyName(); + if ( !mQuery.isEmpty() ) { + bool match = (name.find(mQuery, 0, mIgnoreCase) > -1) || + ((*iaddr).preferredEmail().find( mQuery, 0, mIgnoreCase ) > -1 ); + if ( !match ) + continue; + } + + const QStringList &allAddresses = (*iaddr).emails(); + QStringList::const_iterator from, to; + bool multiple = false; + + if ( mAllAddresses ) { + // use all entries + multiple = allAddresses.size() > 1; + from = allAddresses.begin(); + to = allAddresses.end(); + } else { + // use only the first entry, the one returned by preferredEmail() + from = to = allAddresses.begin(); // start with empty list + if ( to != allAddresses.end() ) + ++to; + } + + size_t index = 0; + if ( mFormat == Aliases ) { + static const QChar space = QChar( ' ' ); + static const QChar underscore = QChar( '_' ); + + QString key; + if ( !mAlternateKeyFormat ) + key = (*iaddr).givenName().left( 3 ) + (*iaddr).familyName().left( 3 ); + else + if ( !(*iaddr).familyName().isEmpty() ) + key = (*iaddr).givenName().left( 1 ).lower() + + (*iaddr).familyName().lower().replace( space, underscore ); + else + key = (*iaddr).givenName().lower().replace( space, underscore ); + + while ( from != to ) { + std::cout << "alias " << key; + if ( index ) + std::cout << index; + std::cout << '\t' << name << " <" << (*from) << '>' << std::endl; + ++index; + ++from; + } + + if ( !(*iaddr).nickName().isEmpty() ) { + std::cout << "alias " + << (*iaddr).nickName().lower().replace( space, underscore ) + << '\t' << name << " <" + << (*iaddr).preferredEmail() << '>' << std::endl; + } + } else { + while ( from != to ) { + std::cout << (*from) << '\t' << name; + if ( multiple ) { + if ( index ) + std::cout << "\t#" << index; + else + std::cout << '\t' << i18n( "preferred" ); + ++index; + } + std::cout << std::endl; + ++from; + } + } + } + + // print all distribution lists + KABC::DistributionListManager manager( mAddressBook ); + manager.load(); + + QStringList dists = manager.listNames(); + for ( QStringList::Iterator iaddr = dists.begin(); iaddr != dists.end(); ++iaddr ) { + KABC::DistributionList *list = manager.list( *iaddr ); + if ( list ) { + if ( !mQuery.isEmpty() ) { + bool match = ((*iaddr).find(mQuery) > -1); + if ( !match ) + continue; + } + + QStringList emails = list->emails(); + if ( emails.isEmpty() ) + continue; + + if ( mFormat == Aliases ) { + std::cout << "alias " << (*iaddr).replace( QRegExp( " " ), "_" ) + << '\t' << emails.join( "," ) << std::endl; + } else { + std::cout << emails.join( "," ) << '\t' << (*iaddr) << '\t' << std::endl; + } + } + } + + kapp->quit(); +} + +static std::ostream & operator<< ( std::ostream &os, const QString &s ) +{ + os << s.local8Bit().data(); + return os; +} + +#include "kabc2mutt.moc" diff --git a/kabc/kabc2mutt/kabc2mutt.h b/kabc/kabc2mutt/kabc2mutt.h new file mode 100644 index 000000000..65f4d06f4 --- /dev/null +++ b/kabc/kabc2mutt/kabc2mutt.h @@ -0,0 +1,56 @@ +/* + KAbc2Mutt + + Copyright (c) 2003 - 2004 Tobias Koenig <tokoe@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef KABC2MUTT_H +#define KABC2MUTT_H + +#include <kabc/stdaddressbook.h> + +class KABC2Mutt : public QObject +{ + Q_OBJECT + + public: + + enum Format { Aliases, Query }; + + KABC2Mutt( QObject *parent, const char *name = 0 ); + + void setQuery( const QString &query ) { mQuery = query; } + void setFormat( Format format ) { mFormat = format; } + void setIgnoreCase( bool ignoreCase ) { mIgnoreCase = ignoreCase; } + void setAllAddresses( bool allAddresses ) { mAllAddresses = allAddresses; } + void setAlternateKeyFormat( bool alternateKeyFormat ) { mAlternateKeyFormat = alternateKeyFormat; } + + void run(); + + private slots: + void loadingFinished(); + + private: + QString mQuery; + Format mFormat; + bool mIgnoreCase; + bool mAllAddresses; + bool mAlternateKeyFormat; + + KABC::AddressBook *mAddressBook; +}; + +#endif diff --git a/kabc/kabc2mutt/main.cpp b/kabc/kabc2mutt/main.cpp new file mode 100644 index 000000000..8da8f5491 --- /dev/null +++ b/kabc/kabc2mutt/main.cpp @@ -0,0 +1,80 @@ +/* + KAbc2Mutt + + Copyright (c) 2003 - 2004 Tobias Koenig <tokoe@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <klocale.h> + +#include <iostream> + +#include "kabc2mutt.h" + +static const char version[] = "0.2"; +static const char appName[] = "kabc2mutt"; +static const char programName[] = I18N_NOOP( "kabc2mutt" ); +static const char description[] = I18N_NOOP( "kabc - mutt converter" ); + +static KCmdLineOptions k2moptions[] = +{ + { "query <substring>", I18N_NOOP( "Only show contacts where name or address matches <substring>" ), 0 }, + { "format <format>", I18N_NOOP( "Default format is 'alias'. 'query' returns email<tab>name<tab>, as needed by mutt's query_command" ), "alias" }, + { "alternate-key-format", I18N_NOOP( "Default key format is 'JohDoe', this option turns it into 'jdoe'" ), 0 }, + { "ignore-case", I18N_NOOP( "Make queries case insensitive" ), 0 }, + { "all-addresses", I18N_NOOP( "Return all mail addresses, not just the preferred one" ), 0}, + KCmdLineLastOption +}; + + +int main( int argc, char **argv ) +{ + KApplication::disableAutoDcopRegistration(); + KCmdLineArgs::init( argc, argv, appName, programName, description, version ); + KCmdLineArgs::addCmdLineOptions( k2moptions ); + + KApplication app( false, false ); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + KABC2Mutt *object = new KABC2Mutt( 0 ); + + // Handle --format option + object->setFormat( (args->getOption("format") == "query") ? KABC2Mutt::Query : KABC2Mutt::Aliases ); + + // Handle --alternate-key-format option + object->setAlternateKeyFormat( args->isSet( "alternate-key-format" ) ); + + // Handle --all-addresses option + object->setAllAddresses( args->isSet( "all-addresses" ) ); + + // Handle --query option + const QString subString = QString::fromLocal8Bit( args->getOption( "query" ) ); + if ( !subString.isEmpty() ) { + // Mutt wants a first line with some status message on it + // See http://mutt.org/doc/manual/manual-4.html#ss4.5 + std::cout << i18n( "Searching KDE addressbook" ).latin1() << std::endl; + } + object->setQuery( subString ); + + // Handle --ignore-case option + object->setIgnoreCase( !args->isSet( "ignore-case" ) ); + + object->run(); + + return app.exec(); +} diff --git a/kabc/kabcdistlistupdater/Makefile.am b/kabc/kabcdistlistupdater/Makefile.am new file mode 100644 index 000000000..6de9a5c01 --- /dev/null +++ b/kabc/kabcdistlistupdater/Makefile.am @@ -0,0 +1,12 @@ +INCLUDES = -I$(includedir)/kabc -I$(top_srcdir) $(all_includes) + +METASOURCES = AUTO + +bin_PROGRAMS = kabcdistlistupdater + +kabcdistlistupdater_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kabcdistlistupdater_LDADD = $(LIB_KABC) $(top_builddir)/libkdepim/libkdepim.la +kabcdistlistupdater_SOURCES = kabcdistlistupdater.cpp + +autostart_DATA = kabcdistlistupdater.desktop +autostartdir = $(datadir)/autostart diff --git a/kabc/kabcdistlistupdater/kabcdistlistupdater.cpp b/kabc/kabcdistlistupdater/kabcdistlistupdater.cpp new file mode 100644 index 000000000..012ce4d15 --- /dev/null +++ b/kabc/kabcdistlistupdater/kabcdistlistupdater.cpp @@ -0,0 +1,95 @@ +/* + This file is part of libkabc. + Copyright (c) 2008 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <kaboutdata.h> +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <ksimpleconfig.h> +#include <kdebug.h> +#include <kglobal.h> +#include <klocale.h> +#include <kstandarddirs.h> + +#include <kabc/stdaddressbook.h> +#include <libkdepim/distributionlist.h> + +static const KCmdLineOptions options[] = +{ + { "disable-autostart", "Disable automatic startup on login", 0 }, + KCmdLineLastOption +}; + +void convertDistributionLists() +{ + KSimpleConfig cfg( locateLocal( "data", "kabc/distlists" ) ); + const QMap<QString, QString> entryMap = cfg.entryMap( "DistributionLists" ); + + if ( entryMap.isEmpty() ) // nothing to convert + return; + + QMapConstIterator<QString, QString> it; + for ( it = entryMap.begin(); it != entryMap.end(); ++it ) { + const QString listName = it.key(); + const QStringList entries = QStringList::split( ',', it.data(), true ); + + KPIM::DistributionList distList; + distList.setUid( KApplication::randomString( 10 ) ); + distList.setName( listName ); + + if ( entries.count() > 1 ) { + for ( uint i = 0; i < entries.count(); i += 2 ) { + const QString uid = entries[ i ]; + const QString preferredEMail = entries[ i + 1 ]; + + distList.insertEntry( uid, preferredEMail ); + } + } + + KABC::StdAddressBook::self()->insertAddressee( distList ); + } + + KABC::StdAddressBook::self()->save(); +} + +int main( int argc, char **argv ) +{ + KApplication::disableAutoDcopRegistration(); + + KAboutData aboutData( "kabcdistlistupdater", "Converter tool for distribution lists", "0.1" ); + aboutData.addAuthor( "Tobias Koenig", 0, "tokoe@kde.org" ); + + KCmdLineArgs::init( argc, argv, &aboutData ); + KCmdLineArgs::addCmdLineOptions( options ); + + KApplication app( false, false ); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if ( args->isSet( "disable-autostart" ) ) { + kdDebug() << "Disable autostart." << endl; + + KConfig *config = app.config(); + config->setGroup( "Startup" ); + config->writeEntry( "EnableAutostart", false ); + } + + convertDistributionLists(); +} + diff --git a/kabc/kabcdistlistupdater/kabcdistlistupdater.desktop b/kabc/kabcdistlistupdater/kabcdistlistupdater.desktop new file mode 100644 index 000000000..3bea0152a --- /dev/null +++ b/kabc/kabcdistlistupdater/kabcdistlistupdater.desktop @@ -0,0 +1,21 @@ +# KDE Config File +[Desktop Entry] +Name=kabcdistlistupdater +Name[nl]=kabcdistlijstbijwerker +Exec=kabcdistlistupdater --disable-autostart +Icon=misc +Type=Application +Comment=Tool to update the old distribution lists to the new ones. +Comment[ca]=Eina per actualitzar les llistes de distribució antigues a les noves. +Comment[es]=Herramienta para actualizar las antiguas listas de distribución al nuevo formato. +Comment[et]=Tööriist vanade postiloendite uuendamiseks uue vormi kohaselt. +Comment[nds]=Warktüüch, dat ole Verdeellisten to niege opfrischt +Comment[nl]=Hulpmiddel om de oude distributielijsten bij te werken tot de nieuwe. +Comment[sk]=Nástroj na aktualizáciu starých ditribučných zoznamov na nové. +Comment[sr]=Алат за ажурирање старих дистрибуционих листи новима. +Comment[sr@Latn]=Алат за ажурирање старих дистрибуционих листи новима. +Comment[sv]=Verktyg för att uppdatera gamla distributionslistor till nya. +Terminal=false +NoDisplay=true +X-KDE-autostart-condition=kabcdistlistupdaterrc:Startup:EnableAutostart:true +OnlyShowIn=KDE; |