22 #include "phoneeditwidget.h"
24 #include "autoqpointer_p.h"
26 #include <QtCore/QSignalMapper>
27 #include <QtCore/QString>
28 #include <QButtonGroup>
30 #include <QGridLayout>
32 #include <QHBoxLayout>
33 #include <QPushButton>
34 #include <QScrollArea>
36 #include <QVBoxLayout>
38 #include <kabc/phonenumber.h>
39 #include <kcombobox.h>
41 #include <klineedit.h>
42 #include <klocalizedstring.h>
46 , mType(
KABC::PhoneNumber::Home)
49 for (
int i = 0; i < KABC::PhoneNumber::typeList().count(); ++i) {
50 mTypeList.append(KABC::PhoneNumber::typeList().at(i));
57 connect(
this, SIGNAL(activated(
int)),
58 this, SLOT(selected(
int)));
67 if (!mTypeList.contains(type)) {
68 mTypeList.insert(mTypeList.at(mTypeList.count() - 1), type);
80 void PhoneTypeCombo::update()
84 for (
int i = 0; i < mTypeList.count(); ++i) {
85 if (mTypeList.at(i) == -1) {
86 addItem(i18nc(
"@item:inlistbox Category of contact info field",
"Other..."));
88 addItem(KABC::PhoneNumber::typeLabel(KABC::PhoneNumber::Type(mTypeList.at(i))));
92 setCurrentIndex(mLastSelected = mTypeList.indexOf(mType));
95 void PhoneTypeCombo::selected(
int pos)
97 if (mTypeList.at(pos) == -1) {
100 mType = KABC::PhoneNumber::Type(mTypeList.at(pos));
105 void PhoneTypeCombo::otherSelected()
110 if (!mTypeList.contains(mType)) {
111 mTypeList.insert(mTypeList.at(mTypeList.count() - 1), mType);
114 setType(KABC::PhoneNumber::Type(mTypeList.at(mLastSelected)));
123 QHBoxLayout *layout =
new QHBoxLayout(
this);
124 layout->setSpacing(11);
125 layout->setMargin(0);
128 mNumberEdit =
new KLineEdit(
this);
129 QFontMetrics fm(font());
130 mNumberEdit->setMinimumWidth(fm.width(QLatin1String(
"MMMMMMMMMM")));
132 layout->addWidget(mTypeCombo);
133 layout->addWidget(mNumberEdit);
135 connect(mTypeCombo, SIGNAL(activated(
int)), SIGNAL(modified()));
136 connect(mNumberEdit, SIGNAL(textChanged(QString)), SIGNAL(modified()));
143 disconnect(mTypeCombo, SIGNAL(activated(
int)),
this, SIGNAL(modified()));
144 mTypeCombo->
setType(number.type());
145 connect(mTypeCombo, SIGNAL(activated(
int)), SIGNAL(modified()));
147 mNumberEdit->setText(number.number());
152 KABC::PhoneNumber
number(mNumber);
154 number.setType(mTypeCombo->
type());
155 number.setNumber(mNumberEdit->text());
162 mTypeCombo->setEnabled(!readOnly);
163 mNumberEdit->setReadOnly(readOnly);
170 mWidgetLayout =
new QVBoxLayout(
this);
172 mMapper =
new QSignalMapper(
this);
173 connect(mMapper, SIGNAL(mapped(
int)), SLOT(changed(
int)));
184 mReadOnly = readOnly;
193 return mPhoneNumberList.count();
198 mPhoneNumberList = list;
200 KABC::PhoneNumber::TypeList types;
201 types << KABC::PhoneNumber::Home;
202 types << KABC::PhoneNumber::Work;
203 types << KABC::PhoneNumber::Cell;
206 if (mPhoneNumberList.count() < 3) {
207 for (
int i = mPhoneNumberList.count(); i < 3; ++i) {
208 mPhoneNumberList.append(KABC::PhoneNumber(QString(), types[i]));
212 recreateNumberWidgets();
217 KABC::PhoneNumber::List list;
219 KABC::PhoneNumber::List::ConstIterator it;
220 for (it = mPhoneNumberList.constBegin(); it != mPhoneNumberList.constEnd(); ++it) {
221 if (!(*it).number().isEmpty()) {
231 mPhoneNumberList.append(KABC::PhoneNumber());
233 recreateNumberWidgets();
238 mPhoneNumberList.removeLast();
240 recreateNumberWidgets();
243 void PhoneNumberListWidget::recreateNumberWidgets()
245 foreach (QWidget *
const widget, mWidgets) {
246 mWidgetLayout->removeWidget(widget);
251 KABC::PhoneNumber::List::ConstIterator it;
253 for (it = mPhoneNumberList.constBegin(); it != mPhoneNumberList.constEnd(); ++it) {
257 mMapper->setMapping(wdg, counter);
258 connect(wdg, SIGNAL(modified()), mMapper, SLOT(map()));
260 mWidgetLayout->addWidget(wdg);
261 mWidgets.append(wdg);
270 void PhoneNumberListWidget::changed(
int pos)
272 mPhoneNumberList[pos] = mWidgets.at(pos)->number();
279 QGridLayout *layout =
new QGridLayout(
this);
280 layout->setSpacing(KDialog::spacingHint());
282 mListScrollArea =
new QScrollArea(
this);
284 mListScrollArea->setWidget(mPhoneNumberListWidget);
285 mListScrollArea->setWidgetResizable(
true);
288 const int scrollAreaMinHeight = mPhoneNumberListWidget->sizeHint().height() +
289 mListScrollArea->horizontalScrollBar()->sizeHint().height();
290 mListScrollArea->setMinimumHeight(scrollAreaMinHeight);
291 layout->addWidget(mListScrollArea, 0, 0, 1, 2);
293 mAddButton =
new QPushButton(i18n(
"Add"),
this);
294 mAddButton->setMaximumSize(mAddButton->sizeHint());
295 layout->addWidget(mAddButton, 1, 0, Qt::AlignRight);
297 mRemoveButton =
new QPushButton(i18n(
"Remove"),
this);
298 mRemoveButton->setMaximumSize(mRemoveButton->sizeHint());
299 layout->addWidget(mRemoveButton, 1, 1);
301 connect(mAddButton, SIGNAL(clicked()), mPhoneNumberListWidget, SLOT(add()));
302 connect(mRemoveButton, SIGNAL(clicked()), mPhoneNumberListWidget, SLOT(
remove()));
303 connect(mAddButton, SIGNAL(clicked()), SLOT(changed()));
304 connect(mRemoveButton, SIGNAL(clicked()), SLOT(changed()));
313 mReadOnly = readOnly;
314 mAddButton->setEnabled(!readOnly);
315 mRemoveButton->setEnabled(!readOnly && mPhoneNumberListWidget->
phoneNumberCount() > 3);
320 void PhoneEditWidget::changed()
322 mRemoveButton->setEnabled(!mReadOnly && mPhoneNumberListWidget->
phoneNumberCount() > 3);
333 const KABC::PhoneNumber::List oldNumbers = contact.phoneNumbers();
334 for (
int i = 0; i < oldNumbers.count(); ++i) {
335 contact.removePhoneNumber(oldNumbers.at(i));
338 const KABC::PhoneNumber::List newNumbers = mPhoneNumberListWidget->
phoneNumbers();
339 for (
int i = 0; i < newNumbers.count(); ++i) {
340 contact.insertPhoneNumber(newNumbers.at(i));
350 setCaption(i18n(
"Edit Phone Number"));
351 setButtons(Ok | Cancel);
352 setDefaultButton(Ok);
353 showButtonSeparator(
true);
355 QWidget *page =
new QWidget(
this);
358 QVBoxLayout *layout =
new QVBoxLayout(page);
359 layout->setSpacing(spacingHint());
360 layout->setMargin(0);
362 mPreferredBox =
new QCheckBox(i18n(
"This is the preferred phone number"), page);
363 layout->addWidget(mPreferredBox);
365 QGroupBox *box =
new QGroupBox(i18n(
"Types"), page);
366 layout->addWidget(box);
368 QGridLayout *buttonLayout =
new QGridLayout(box);
371 mTypeList = KABC::PhoneNumber::typeList();
372 mTypeList.removeAll(KABC::PhoneNumber::Pref);
374 KABC::PhoneNumber::TypeList::ConstIterator it;
375 mGroup =
new QButtonGroup(box);
376 mGroup->setExclusive(
false);
377 int row, column, counter;
378 row = column = counter = 0;
379 for (it = mTypeList.constBegin(); it != mTypeList.constEnd(); ++it, ++counter) {
380 QCheckBox *cb =
new QCheckBox(KABC::PhoneNumber::typeLabel(*it), box);
381 cb->setChecked(type & mTypeList[counter]);
382 buttonLayout->addWidget(cb, row, column);
383 mGroup->addButton(cb);
392 mPreferredBox->setChecked(mType & KABC::PhoneNumber::Pref);
397 KABC::PhoneNumber::Type
type = 0;
399 for (
int i = 0; i < mGroup->buttons().count(); ++i) {
400 QCheckBox *box =
dynamic_cast<QCheckBox *
>(mGroup->buttons().at(i)) ;
401 if (box && box->isChecked()) {
402 type |= mTypeList[i];
406 if (mPreferredBox->isChecked()) {
407 type = type | KABC::PhoneNumber::Pref;
409 type = type & ~
KABC::PhoneNumber::Pref;
PhoneTypeDialog(KABC::PhoneNumber::Type type, QWidget *parent=0)
Creates a new phone type dialog.
A dialog for editing phone number types.
A combobox to select a phone number type.
~PhoneTypeCombo()
Destroys the phone type combo.
A QPointer which when destructed, deletes the object it points to.
KABC::PhoneNumber::Type type() const
Returns the selected type.
PhoneTypeCombo(QWidget *parent=0)
Creates a phone type combo.
void setType(KABC::PhoneNumber::Type type)
Sets the phone number type that shall be selected.
KABC::PhoneNumber::Type type() const
Returns the selected phone number type.