Basic vCards are now displayed. Still needs more fields to be implemented

along with many other things like buttons to save...

svn path=/trunk/kdenetwork/kmail/; revision=52928
wilder-work
George Staikos 26 years ago
parent 4b47428a9f
commit c72dfd521f
  1. 4
      Makefile.am
  2. 194
      kmdisplayvcard.cpp
  3. 14
      kmdisplayvcard.h
  4. 98
      vcard.cpp
  5. 83
      vcard.h

@ -41,8 +41,8 @@ METASOURCES = kmmainwin.moc kmfolderdia.moc kmfolder.moc \
kmnewiostatus.moc kmnewiostatuswdg.moc \
charsetsDlg.moc kmtopwidget.moc \
kmbroadcaststatus.moc kmacctexppop.moc configuredialog.moc \
colorlistbox.moc kmkernel.moc accountdialog.moc \
addtoaddressbook.moc kmdisplayvcard.moc
colorlistbox.moc kmkernel.moc accountdialog.moc \
addtoaddressbook.moc kmdisplayvcard.moc
include_HEADERS = kmailIface.h

@ -1,11 +1,11 @@
#include "kmdisplayvcard.h"
#include "kmdisplayvcard.moc"
#include <qframe.h>
#include <qlabel.h>
#include <qlayout.h>
#include <klocale.h>
KMDisplayVCard::KMDisplayVCard(VCard *vc) {
KMDisplayVCard::KMDisplayVCard(VCard *vc, QWidget *parent, const char *name) : KTabCtl(parent, name) {
_vc = vc;
BuildInterface();
}
@ -31,7 +31,7 @@ void KMDisplayVCard::BuildInterface() {
QWidget *KMDisplayVCard::getFirstTab() {
QFrame *page = new QFrame(this);
QGridLayout *grid = new QGridLayout(page, 5, 2);
QGridLayout *grid = new QGridLayout(page, 7, 2);
QLabel *name;
QLabel *value;
QString tmpstr;
@ -39,29 +39,42 @@ QValueList<QString> values;
//
// Display the Name: field
values = _vc->getValues(QString("n"));
if (values.count() > 0) {
tmpstr = _vc->getValue(VCARD_FN);
if (tmpstr.length() == 0) {
values = _vc->getValues(VCARD_N);
tmpstr = "";
for (unsigned int i = 1; i < values.count(); i++) {
tmpstr += values[i];
if (values.count() >= 4) {
tmpstr += values[3];
tmpstr += " ";
}
if (values.count() >= 2) {
tmpstr += values[1];
tmpstr += " ";
}
if (values.count() >= 3) {
tmpstr += values[2];
tmpstr += " ";
}
tmpstr += values[0];
name = new QLabel(i18n("Name:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 0, 0);
grid->addWidget(value, 0, 1);
} else {
tmpstr = _vc->getValue(QString("fn"));
name = new QLabel(i18n("Name:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 0, 0);
grid->addWidget(value, 0, 1);
if (values.count() >= 5) {
tmpstr += " ";
tmpstr += values[4];
}
}
QString nn = _vc->getValue(VCARD_NICKNAME);
if (nn != "") {
tmpstr += " (";
tmpstr += nn;
tmpstr += ")";
}
name = new QLabel(i18n("Name:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 0, 0);
grid->addWidget(value, 0, 1);
//
// Display the Organization: field
tmpstr = _vc->getValue(QString("org"));
tmpstr = _vc->getValue(VCARD_ORG);
name = new QLabel(i18n("Organization:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 1, 0);
@ -69,7 +82,7 @@ QValueList<QString> values;
//
// Display the Title: field
tmpstr = _vc->getValue(QString("title"));
tmpstr = _vc->getValue(VCARD_TITLE);
name = new QLabel(i18n("Title:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 2, 0);
@ -77,7 +90,7 @@ QValueList<QString> values;
//
// Display the E-Mail: field
tmpstr = _vc->getValue(QString("email"), QString("internet"));
tmpstr = _vc->getValue(VCARD_EMAIL, VCARD_EMAIL_INTERNET);
name = new QLabel(i18n("E-Mail:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 3, 0);
@ -85,16 +98,34 @@ QValueList<QString> values;
//
// Display the URL: field
tmpstr = _vc->getValue(QString("url"));
tmpstr = _vc->getValue(VCARD_URL);
name = new QLabel(i18n("URL:"), page);
value = new QLabel(tmpstr, page);
grid->addWidget(name, 4, 0);
grid->addWidget(value, 4, 1);
//
// Display the Birthday: field
tmpstr = _vc->getValue(VCARD_BDAY);
name = new QLabel(i18n("Birthday:"), page);
// FIXME: this needs to be formatted
value = new QLabel(tmpstr, page);
grid->addWidget(name, 5, 0);
grid->addWidget(value, 5, 1);
return page;
}
#define DO_PHONENUMBER(X,Y) thisnum = _vc->getValue(VCARD_TEL, X); \
if (thisnum.length() > 0) { \
name = new QLabel(i18n(Y), page); \
grid->addWidget(name, row, 0); \
value = new QLabel(thisnum, page); \
grid->addWidget(value, row++, 1); \
}
QWidget *KMDisplayVCard::getSecondTab() {
QFrame *page = new QFrame(this);
QGridLayout *grid = new QGridLayout(page, 5, 2);
@ -103,9 +134,104 @@ QLabel *value;
QString tmpstr;
QValueList<QString> values;
//
// Add the Address[es]
name = new QLabel(i18n("Address:"), page);
grid->addWidget(name, 0, 0);
mAddrList = new QListBox(page);
mAddrList->setSelectionMode(QListBox::Single);
grid->addWidget(mAddrList, 0, 1);
QFrame *addrPage = new QFrame(page);
QGridLayout *addrGrid = new QGridLayout(addrPage, 5, 4);
name = new QLabel(i18n("PO BOX:"), addrPage);
addrGrid->addWidget(name, 0, 0);
mAddr_PO = new QLabel("", addrPage);
addrGrid->addMultiCellWidget(mAddr_PO, 0, 0, 1, 3);
name = new QLabel(i18n("Address 1:"), addrPage);
addrGrid->addWidget(name, 1, 0);
mAddr_addr1 = new QLabel("", addrPage);
addrGrid->addMultiCellWidget(mAddr_addr1, 1, 1, 1, 3);
name = new QLabel(i18n("Address 2:"), addrPage);
addrGrid->addWidget(name, 2, 0);
mAddr_addr2 = new QLabel("", addrPage);
addrGrid->addMultiCellWidget(mAddr_addr2, 2, 2, 1, 3);
name = new QLabel(i18n("City:"), addrPage);
addrGrid->addWidget(name, 3, 0);
mAddr_city = new QLabel("", addrPage);
addrGrid->addWidget(mAddr_city, 3, 1);
name = new QLabel(i18n("Province:"), addrPage);
addrGrid->addWidget(name, 3, 2);
mAddr_prov = new QLabel("", addrPage);
addrGrid->addWidget(mAddr_prov, 3, 3);
name = new QLabel(i18n("Country:"), addrPage);
addrGrid->addWidget(name, 4, 0);
mAddr_country = new QLabel("", addrPage);
addrGrid->addWidget(mAddr_country, 4, 1);
name = new QLabel(i18n("Postal Code:"), addrPage);
addrGrid->addWidget(name, 4, 2);
mAddr_postal = new QLabel("", addrPage);
addrGrid->addWidget(mAddr_postal, 4, 3);
// set the types that are available
if (!_vc->getValues(VCARD_ADR).isEmpty()) {
mAddrList->insertItem(i18n("Default"));
mAddresses.append(_vc->getValues(VCARD_ADR));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_DOM).isEmpty()) {
mAddrList->insertItem(i18n("Domestic"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_DOM));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_INTL).isEmpty()) {
mAddrList->insertItem(i18n("International"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_INTL));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_POSTAL).isEmpty()) {
mAddrList->insertItem(i18n("Postal"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_POSTAL));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_HOME).isEmpty()) {
mAddrList->insertItem(i18n("Home"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_HOME));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_WORK).isEmpty()) {
mAddrList->insertItem(i18n("Work"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_WORK));
}
if (!_vc->getValues(VCARD_ADR, VCARD_ADR_PREF).isEmpty()) {
mAddrList->insertItem(i18n("Preferred"));
mAddresses.append(_vc->getValues(VCARD_ADR, VCARD_ADR_PREF));
}
mAddrList->setSelected(0,true);
mAddrList->setMinimumSize(mAddrList->minimumSizeHint());
connect(mAddrList, SIGNAL(selectionChanged()), SLOT(slotChangeAddress()));
slotChangeAddress(); // set the first one
grid->addWidget(addrPage, 1, 1);
name = new QLabel(i18n("Phone Numbers"), page);
grid->addWidget(name, 2, 0);
// try to add each type of phone number if we have them
QString thisnum;
int row = 3;
DO_PHONENUMBER(VCARD_TEL_HOME, "Home");
DO_PHONENUMBER(VCARD_TEL_WORK, "Work");
DO_PHONENUMBER(VCARD_TEL_PREF, "Preferred");
DO_PHONENUMBER(VCARD_TEL_VOICE, "Voice");
DO_PHONENUMBER(VCARD_TEL_FAX, "Fax");
DO_PHONENUMBER(VCARD_TEL_MSG, "Message");
DO_PHONENUMBER(VCARD_TEL_CELL, "Cellular");
DO_PHONENUMBER(VCARD_TEL_PAGER, "Pager");
DO_PHONENUMBER(VCARD_TEL_BBS, "BBS");
DO_PHONENUMBER(VCARD_TEL_MODEM, "Modem");
DO_PHONENUMBER(VCARD_TEL_CAR, "Car");
DO_PHONENUMBER(VCARD_TEL_ISDN, "ISDN");
DO_PHONENUMBER(VCARD_TEL_VIDEO, "Video");
DO_PHONENUMBER(VCARD_TEL_PCS, "PCS");
return page;
}
#undef DO_PHONENUMBER
QWidget *KMDisplayVCard::getThirdTab() {
QFrame *page = new QFrame(this);
@ -119,4 +245,30 @@ return page;
}
void KMDisplayVCard::slotChangeAddress() {
int c = mAddrList->currentItem();
if (mAddresses.count() > c) {
mAddr_PO->setText(mAddresses[c][0]);
mAddr_PO->resize(mAddr_PO->sizeHint());
mAddr_addr1->setText(mAddresses[c][2]);
mAddr_addr1->resize(mAddr_addr1->sizeHint());
mAddr_addr2->setText(mAddresses[c][1]);
mAddr_addr2->resize(mAddr_addr2->sizeHint());
mAddr_city->setText(mAddresses[c][3]);
mAddr_city->resize(mAddr_city->sizeHint());
mAddr_prov->setText(mAddresses[c][4]);
mAddr_prov->resize(mAddr_prov->sizeHint());
mAddr_country->setText(mAddresses[c][6]);
mAddr_country->resize(mAddr_country->sizeHint());
mAddr_postal->setText(mAddresses[c][5]);
mAddr_postal->resize(mAddr_postal->sizeHint());
}
}

@ -5,24 +5,36 @@
#include <kdialog.h>
#include <ktabctl.h>
#include <qwidget.h>
#include <qlistbox.h>
#include <qlabel.h>
#include "vcard.h"
class KMDisplayVCard : public KTabCtl {
Q_OBJECT
public:
KMDisplayVCard(VCard *vc);
KMDisplayVCard(VCard *vc, QWidget *parent = 0, const char *name = 0);
virtual ~KMDisplayVCard();
void setVCard(VCard *vc);
public slots:
void slotChangeAddress();
private:
VCard *_vc;
QListBox *mAddrList;
QLabel *mAddr_PO, *mAddr_addr1, *mAddr_addr2, *mAddr_city, *mAddr_prov,
*mAddr_country, *mAddr_postal;
QValueList< QValueList<QString> > mAddresses;
void BuildInterface();
QWidget *getFirstTab();
QWidget *getSecondTab();
QWidget *getThirdTab();
};

@ -17,88 +17,7 @@
//
// FIXME: do proper CRLF/CR handling
// required
#define VCARD_BEGIN "begin:vcard"
#define VCARD_END "end:vcard"
#define VCARD_BEGIN_N "begin"
#define VCARD_END_N "end"
#define VCARD_VERSION "version"
// one of the following two??
#define VCARD_FN "fn"
#define VCARD_N "n"
// optional
#define VCARD_NAME "name"
#define VCARD_NICKNAME "nickname"
#define VCARD_PHOTO "photo"
#define VCARD_BDAY "bday"
#define VCARD_ADR "adr"
// types
#define VCARD_ADR_DOM "dom"
#define VCARD_ADR_INTL "intl"
#define VCARD_ADR_POSTAL "postal"
#define VCARD_ADR_HOME "home"
#define VCARD_ADR_WORK "work"
#define VCARD_ADR_PREF "pref"
// values
#define VCARD_ADR_POBOX "PO Box"
#define VCARD_ADR_EXTADR "Extended Address"
#define VCARD_ADR_STREET "Street"
#define VCARD_ADR_LOCALITY "Locality"
#define VCARD_ADR_REGION "Region"
#define VCARD_ADR_POSTCODE "Postal Code"
#define VCARD_ADR_COUNTRY "Country Name"
#define VCARD_LABEL "label"
#define VCARD_PROFILE "profile"
#define VCARD_SOURCE "source"
#define VCARD_TEL "tel"
// types
#define VCARD_TEL_HOME "home"
#define VCARD_TEL_WORK "work"
#define VCARD_TEL_PREF "pref"
#define VCARD_TEL_VOICE "voice"
#define VCARD_TEL_FAX "fax"
#define VCARD_TEL_MSG "msg"
#define VCARD_TEL_CELL "cell"
#define VCARD_TEL_PAGER "pager"
#define VCARD_TEL_BBS "bbs"
#define VCARD_TEL_MODEM "modem"
#define VCARD_TEL_CAR "car"
#define VCARD_TEL_ISDN "isdn"
#define VCARD_TEL_VIDEO "video"
#define VCARD_TEL_PCS "pcs"
#define VCARD_EMAIL "email"
// types
#define VCARD_EMAIL_INTERNET "internet"
#define VCARD_EMAIL_X400 "x400"
#define VCARD_TZ "tz"
#define VCARD_GEO "geo"
#define VCARD_MAILER "mailer"
#define VCARD_TITLE "title"
#define VCARD_ROLE "role"
#define VCARD_LOGO "logo"
#define VCARD_AGENT "agent"
#define VCARD_ORG "org"
#define VCARD_CATEGORIES "categories"
#define VCARD_NOTE "note"
#define VCARD_PRODID "prodid"
#define VCARD_REV "rev"
#define VCARD_SOUND "sound"
#define VCARD_UID "uid"
#define VCARD_URL "url"
#define VCARD_CLASS "class"
#define VCARD_CLASS_PUBLIC "public"
#define VCARD_CLASS_PRIVATE "private"
#define VCARD_CLASS_CONFIDENTIAL "confidential"
#define VCARD_KEY "key"
// types
#define VCARD_KEY_X509 "x509"
#define VCARD_KEY_PGP "pgp"
#define VCARD_QUOTED_PRINTABLE "quoted-printable"
/* X-xxxxx also usable */
// FIXME: handle TYPE=x,y,z qualifiers
/*
@ -117,9 +36,8 @@ value :=
// This code is screaming "come do me in PERL!"
// This STRIPS OUT EMPTY TOKENS
//static QValueList<QString> tokenizeBy(const QString& str, char tok) {
static QValueList<QString> tokenizeBy(const QString& str, const QRegExp& tok) {
static QValueList<QString> tokenizeBy(const QString& str, const QRegExp& tok, bool keepEmpties = false) {
QValueList<QString> tokens;
unsigned int head, tail;
const char *chstr = str.ascii();
@ -140,7 +58,7 @@ unsigned int length = str.length();
if (tail > length) // last token - none at end
tail = length;
if (tail-head > 0) { // it has to be at least 1 long!
if (tail-head > 0 || keepEmpties) { // it has to be at least 1 long!
thisline = &(chstr[head]);
thisline.truncate(tail-head);
tokens.append(thisline);
@ -299,7 +217,7 @@ QValueList<QString> lines;
// split into tokens by ;
// add to parameters vector
//_vcl.parameters = tokenizeBy(linetokens[1], ';');
_vcl.parameters = tokenizeBy(linetokens[1], QRegExp(";"));
_vcl.parameters = tokenizeBy(linetokens[1], QRegExp(";"), true);
if (qp) {
for (QValueListIterator<QString> z = _vcl.parameters.begin();
z != _vcl.parameters.end();
@ -476,7 +394,7 @@ return failed;
QValueList<QString> VCard::getValues(const QString& name, const QString& qualifier) {
QString failedstr = "";
//QString failedstr = "";
QValueList<QString> failed;
for (QValueListIterator<VCardLine> i = _vcdata->begin();
i != _vcdata->end();
@ -485,13 +403,13 @@ QValueList<QString> failed;
return (*i).parameters;
}
}
failed.append(failedstr);
//failed.append(failedstr);
return failed;
}
QValueList<QString> VCard::getValues(const QString& name) {
QString failedstr = "";
//QString failedstr = "";
QValueList<QString> failed;
for (QValueListIterator<VCardLine> i = _vcdata->begin();
i != _vcdata->end();
@ -500,7 +418,7 @@ QValueList<QString> failed;
return (*i).parameters;
}
}
failed.append(failedstr);
//failed.append(failedstr);
return failed;
}

@ -14,6 +14,89 @@
// Requires QT 2.1+
//
// required
#define VCARD_BEGIN "begin:vcard"
#define VCARD_END "end:vcard"
#define VCARD_BEGIN_N "begin"
#define VCARD_END_N "end"
#define VCARD_VERSION "version"
// one of the following two??
#define VCARD_FN "fn"
#define VCARD_N "n"
// optional
#define VCARD_NAME "name"
#define VCARD_NICKNAME "nickname"
#define VCARD_PHOTO "photo"
#define VCARD_BDAY "bday"
#define VCARD_ADR "adr"
// types
#define VCARD_ADR_DOM "dom"
#define VCARD_ADR_INTL "intl"
#define VCARD_ADR_POSTAL "postal"
#define VCARD_ADR_HOME "home"
#define VCARD_ADR_WORK "work"
#define VCARD_ADR_PREF "pref"
// values
#define VCARD_ADR_POBOX "PO Box"
#define VCARD_ADR_EXTADR "Extended Address"
#define VCARD_ADR_STREET "Street"
#define VCARD_ADR_LOCALITY "Locality"
#define VCARD_ADR_REGION "Region"
#define VCARD_ADR_POSTCODE "Postal Code"
#define VCARD_ADR_COUNTRY "Country Name"
#define VCARD_LABEL "label"
#define VCARD_PROFILE "profile"
#define VCARD_SOURCE "source"
#define VCARD_TEL "tel"
// types
#define VCARD_TEL_HOME "home"
#define VCARD_TEL_WORK "work"
#define VCARD_TEL_PREF "pref"
#define VCARD_TEL_VOICE "voice"
#define VCARD_TEL_FAX "fax"
#define VCARD_TEL_MSG "msg"
#define VCARD_TEL_CELL "cell"
#define VCARD_TEL_PAGER "pager"
#define VCARD_TEL_BBS "bbs"
#define VCARD_TEL_MODEM "modem"
#define VCARD_TEL_CAR "car"
#define VCARD_TEL_ISDN "isdn"
#define VCARD_TEL_VIDEO "video"
#define VCARD_TEL_PCS "pcs"
#define VCARD_EMAIL "email"
// types
#define VCARD_EMAIL_INTERNET "internet"
#define VCARD_EMAIL_X400 "x400"
#define VCARD_TZ "tz"
#define VCARD_GEO "geo"
#define VCARD_MAILER "mailer"
#define VCARD_TITLE "title"
#define VCARD_ROLE "role"
#define VCARD_LOGO "logo"
#define VCARD_AGENT "agent"
#define VCARD_ORG "org"
#define VCARD_CATEGORIES "categories"
#define VCARD_NOTE "note"
#define VCARD_PRODID "prodid"
#define VCARD_REV "rev"
#define VCARD_SOUND "sound"
#define VCARD_UID "uid"
#define VCARD_URL "url"
#define VCARD_CLASS "class"
#define VCARD_CLASS_PUBLIC "public"
#define VCARD_CLASS_PRIVATE "private"
#define VCARD_CLASS_CONFIDENTIAL "confidential"
#define VCARD_KEY "key"
// types
#define VCARD_KEY_X509 "x509"
#define VCARD_KEY_PGP "pgp"
#define VCARD_QUOTED_PRINTABLE "quoted-printable"
/* X-xxxxx also usable */
#include <qstring.h>
#include <qvaluelist.h>

Loading…
Cancel
Save