You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
12 KiB
392 lines
12 KiB
/** |
|
* kmdisplayvcard.cpp |
|
* |
|
* Copyright (c) 2000 George Staikos <staikos@kde.org> |
|
* |
|
* This program is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation; either version 2 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
*/ |
|
|
|
#include "kmdisplayvcard.moc" |
|
|
|
#include <qlayout.h> |
|
#include <qmultilineedit.h> |
|
|
|
#include <klocale.h> |
|
#include <kurllabel.h> |
|
#include <kapplication.h> |
|
|
|
KMDisplayVCard::KMDisplayVCard(VCard *vc, QWidget *parent, const char *name) : QTabDialog(parent, name) { |
|
_vc = vc; |
|
BuildInterface(); |
|
} |
|
|
|
|
|
KMDisplayVCard::~KMDisplayVCard() { |
|
delete _vc; |
|
} |
|
|
|
|
|
void KMDisplayVCard::setVCard(VCard *vc) { |
|
delete _vc; |
|
_vc = vc; |
|
} |
|
|
|
|
|
void KMDisplayVCard::BuildInterface() { |
|
|
|
setOkButton(i18n("&Close")); |
|
setCaption(i18n("vCard Viewer")); |
|
|
|
addTab(getFirstTab(), i18n("&Name")); |
|
addTab(getSecondTab(), i18n("&Address")); |
|
addTab(getThirdTab(), i18n("&Misc")); |
|
// now add a button bar for the following: |
|
// [Save to Disk] [Import to Address Book] [Close] |
|
// QButton *save = new QButton(mainWidget, i18n("&Save")); |
|
// QButton *import = new QButton(mainWidget, i18n("&Import")); |
|
// QButton *close = new QButton(mainWidget, i18n("&Close")); |
|
} |
|
|
|
|
|
QWidget *KMDisplayVCard::getFirstTab() { |
|
QFrame *page = new QFrame(this); |
|
QGridLayout *grid = new QGridLayout(page, 7, 2, KDialog::marginHint(), KDialog::spacingHint()); |
|
QLabel *name; |
|
QLabel *value; |
|
KURLLabel *urlvalue; |
|
QString tmpstr; |
|
QValueList<QString> values; |
|
|
|
// |
|
// Display the Name: field |
|
tmpstr = _vc->getValue(VCARD_FN); |
|
if (tmpstr.length() == 0) { |
|
values = _vc->getValues(VCARD_N); |
|
tmpstr = ""; |
|
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]; |
|
if (values.count() >= 5) { |
|
tmpstr += " "; |
|
tmpstr += values[4]; |
|
} |
|
} |
|
QString nn = _vc->getValue(VCARD_NICKNAME); |
|
if (!nn.isEmpty()) |
|
tmpstr += " (" + nn + ")"; |
|
|
|
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(VCARD_ORG); |
|
name = new QLabel(i18n("Organization:"), page); |
|
value = new QLabel(tmpstr, page); |
|
grid->addWidget(name, 1, 0); |
|
grid->addWidget(value, 1, 1); |
|
|
|
// |
|
// Display the Title: field |
|
tmpstr = _vc->getValue(VCARD_TITLE); |
|
name = new QLabel(i18n("Title:"), page); |
|
value = new QLabel(tmpstr, page); |
|
grid->addWidget(name, 2, 0); |
|
grid->addWidget(value, 2, 1); |
|
|
|
// |
|
// Display the Email: field |
|
tmpstr = _vc->getValue(VCARD_EMAIL, VCARD_EMAIL_INTERNET); |
|
if( tmpstr.isEmpty() ) |
|
tmpstr = _vc->getValue(VCARD_EMAIL); |
|
name = new QLabel(i18n("Email:"), page); |
|
urlvalue = new KURLLabel(tmpstr, tmpstr, page); |
|
grid->addWidget(name, 3, 0); |
|
grid->addWidget(urlvalue, 3, 1); |
|
connect(urlvalue, SIGNAL(leftClickedURL(const QString &)), SLOT(mailUrlClicked(const QString &))); |
|
|
|
// |
|
// Display the URL: field |
|
tmpstr = _vc->getValue(VCARD_URL); |
|
name = new QLabel(i18n("URL:"), page); |
|
urlvalue = new KURLLabel(tmpstr, tmpstr, page); |
|
grid->addWidget(name, 4, 0); |
|
grid->addWidget(urlvalue, 4, 1); |
|
connect(urlvalue, SIGNAL(leftClickedURL(const QString &)), SLOT(urlClicked(const QString &))); |
|
|
|
// |
|
// 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); |
|
|
|
QSpacerItem *spacer = new QSpacerItem(1,1,QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); |
|
grid->addItem(spacer, 6, 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, KDialog::marginHint(), KDialog::spacingHint()); |
|
QLabel *name; |
|
QLabel *value; |
|
QString tmpstr; |
|
QValueList<QString> values; |
|
|
|
// |
|
// Add the Address[es] |
|
name = new QLabel(i18n("A&ddress:"), page); |
|
grid->addWidget(name, 0, 0); |
|
mAddrList = new QListBox(page); |
|
name->setBuddy(mAddrList); |
|
mAddrList->setSelectionMode(QListBox::Single); |
|
grid->addWidget(mAddrList, 0, 1); |
|
QFrame *addrPage = new QFrame(page); |
|
QGridLayout *addrGrid = new QGridLayout(addrPage, 5, 4,KDialog::marginHint(), KDialog::spacingHint()); |
|
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; |
|
// note: don't use i18n with this macro - it does it for you |
|
DO_PHONENUMBER(VCARD_TEL_HOME, I18N_NOOP("Home")); |
|
DO_PHONENUMBER(VCARD_TEL_WORK, I18N_NOOP("Work")); |
|
DO_PHONENUMBER(VCARD_TEL_PREF, I18N_NOOP("Preferred")); |
|
DO_PHONENUMBER(VCARD_TEL_VOICE, I18N_NOOP("Voice")); |
|
DO_PHONENUMBER(VCARD_TEL_FAX, I18N_NOOP("Fax")); |
|
DO_PHONENUMBER(VCARD_TEL_MSG, I18N_NOOP("Message")); |
|
DO_PHONENUMBER(VCARD_TEL_CELL, I18N_NOOP("Cellular")); |
|
DO_PHONENUMBER(VCARD_TEL_PAGER, I18N_NOOP("Pager")); |
|
DO_PHONENUMBER(VCARD_TEL_BBS, I18N_NOOP("BBS")); |
|
DO_PHONENUMBER(VCARD_TEL_MODEM, I18N_NOOP("Modem")); |
|
DO_PHONENUMBER(VCARD_TEL_CAR, I18N_NOOP("Car")); |
|
DO_PHONENUMBER(VCARD_TEL_ISDN, I18N_NOOP("ISDN")); |
|
DO_PHONENUMBER(VCARD_TEL_VIDEO, I18N_NOOP("Video")); |
|
DO_PHONENUMBER(VCARD_TEL_PCS, I18N_NOOP("PCS")); |
|
// unqualified phone number |
|
thisnum = _vc->getValue(VCARD_TEL, ""); |
|
if (!thisnum.isEmpty()) { |
|
// ### FIXME-KDE-3.2: Add i18n("Unknown") |
|
name = new QLabel("", page); |
|
grid->addWidget(name, row, 0); |
|
value = new QLabel(thisnum, page); |
|
grid->addWidget(value, row++, 1); |
|
} |
|
|
|
return page; |
|
} |
|
|
|
#undef DO_PHONENUMBER |
|
|
|
#define ADDENTRY(X,Y) tmpstr = _vc->getValue(X); \ |
|
if (tmpstr.length() > 0) { \ |
|
name = new QLabel(i18n(Y), page); \ |
|
value = new QLabel(tmpstr, page); \ |
|
grid->addWidget(name, row, 0); \ |
|
grid->addWidget(value, row++, 1); \ |
|
} |
|
|
|
QWidget *KMDisplayVCard::getThirdTab() { |
|
QFrame *page = new QFrame(this); |
|
QGridLayout *grid = new QGridLayout(page, 9, 2, KDialog::marginHint(), KDialog::spacingHint()); |
|
QLabel *name; |
|
QLabel *value; |
|
QString tmpstr; |
|
QValueList<QString> values; |
|
int row = 0; |
|
|
|
// So far we provide: |
|
// mailer |
|
// version |
|
// rev |
|
// class |
|
// role |
|
// uid |
|
// geo |
|
// timezone |
|
// note |
|
ADDENTRY(VCARD_MAILER, I18N_NOOP("Mailer:")); |
|
ADDENTRY(VCARD_PRODID, I18N_NOOP("vCard made by:")); |
|
ADDENTRY(VCARD_VERSION, I18N_NOOP("vCard version:")); |
|
ADDENTRY(VCARD_REV, I18N_NOOP("Last revised:")); |
|
ADDENTRY(VCARD_CLASS, I18N_NOOP("Class:")); |
|
ADDENTRY(VCARD_ROLE, I18N_NOOP("Role:")); |
|
ADDENTRY(VCARD_UID, I18N_NOOP("UID:")); |
|
values = _vc->getValues(VCARD_GEO); |
|
if (!values.isEmpty()) { |
|
tmpstr.sprintf("(%s, %s)", values[0].ascii(), values[1].ascii()); |
|
name = new QLabel(i18n("geographical latitude and longitude", "Location:"), page); |
|
value = new QLabel(tmpstr, page); |
|
grid->addWidget(name, row, 0); |
|
grid->addWidget(value, row++, 1); |
|
} |
|
|
|
values = _vc->getValues(VCARD_TZ); |
|
if (!values.isEmpty()) { |
|
tmpstr = ""; |
|
for (unsigned int i = 0; i < values.count(); i++) { |
|
tmpstr += values[i]; |
|
if (i != values.count()-1) tmpstr += ", "; |
|
} |
|
name = new QLabel(i18n("Timezone:"), page); |
|
value = new QLabel(tmpstr, page); |
|
grid->addWidget(name, row, 0); |
|
grid->addWidget(value, row++, 1); |
|
} |
|
|
|
name = new QLabel(i18n("&Notes:"), page); |
|
QMultiLineEdit *qtb = new QMultiLineEdit(page); |
|
name->setBuddy(qtb); |
|
qtb->setReadOnly(true); |
|
qtb->setText(_vc->getValue(VCARD_NOTE)); |
|
qtb->resize(qtb->minimumSizeHint()); |
|
grid->addWidget(name, row, 0); |
|
grid->addWidget(qtb, row++, 1); |
|
|
|
return page; |
|
} |
|
|
|
|
|
#undef ADDENTRY |
|
|
|
|
|
void KMDisplayVCard::slotChangeAddress() { |
|
unsigned 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()); |
|
} |
|
} |
|
|
|
|
|
void KMDisplayVCard::urlClicked(const QString &url) { |
|
kapp->invokeBrowser(url); |
|
} |
|
|
|
void KMDisplayVCard::mailUrlClicked(const QString &url) { |
|
// FIXME: this is silly. We should just start up a composer! |
|
// Anyways it's a dirty hack for now. |
|
kapp->invokeMailer(url, QString::null); |
|
}
|
|
|