22#include "phoneeditwidget.h"
24#include "autoqpointer_p.h"
26#include <QtCore/QSignalMapper>
27#include <QtCore/QString>
28#include <QButtonGroup>
38#include <kabc/phonenumber.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);
80void 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));
95void PhoneTypeCombo::selected(
int pos)
97 if (mTypeList.at(pos) == -1) {
100 mType = KABC::PhoneNumber::Type(mTypeList.at(pos));
105void 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 mNumberEdit->setTrapReturnKey(
true);
130 QFontMetrics fm(font());
131 mNumberEdit->setMinimumWidth(fm.width(QLatin1String(
"MMMMMMMMMM")));
133 layout->addWidget(mTypeCombo);
134 layout->addWidget(mNumberEdit);
136 connect(mTypeCombo, SIGNAL(activated(
int)), SIGNAL(modified()));
137 connect(mNumberEdit, SIGNAL(textChanged(QString)), SIGNAL(modified()));
144 disconnect(mTypeCombo, SIGNAL(activated(
int)),
this, SIGNAL(modified()));
146 connect(mTypeCombo, SIGNAL(activated(
int)), SIGNAL(modified()));
148 mNumberEdit->setText(
number.number());
153 KABC::PhoneNumber
number(mNumber);
156 number.setNumber(mNumberEdit->text());
163 mTypeCombo->setEnabled(!readOnly);
164 mNumberEdit->setReadOnly(readOnly);
171 mWidgetLayout =
new QVBoxLayout(
this);
173 mMapper =
new QSignalMapper(
this);
174 connect(mMapper, SIGNAL(mapped(
int)), SLOT(changed(
int)));
185 mReadOnly = readOnly;
194 return mPhoneNumberList.count();
199 mPhoneNumberList = list;
201 KABC::PhoneNumber::TypeList types;
202 types << KABC::PhoneNumber::Home;
203 types << KABC::PhoneNumber::Work;
204 types << KABC::PhoneNumber::Cell;
207 if (mPhoneNumberList.count() < 3) {
208 for (
int i = mPhoneNumberList.count(); i < 3; ++i) {
209 mPhoneNumberList.append(KABC::PhoneNumber(QString(), types[i]));
213 recreateNumberWidgets();
218 KABC::PhoneNumber::List list;
220 KABC::PhoneNumber::List::ConstIterator it;
221 for (it = mPhoneNumberList.constBegin(); it != mPhoneNumberList.constEnd(); ++it) {
222 if (!(*it).number().isEmpty()) {
232 mPhoneNumberList.append(KABC::PhoneNumber());
234 recreateNumberWidgets();
239 mPhoneNumberList.removeLast();
241 recreateNumberWidgets();
244void PhoneNumberListWidget::recreateNumberWidgets()
246 foreach (QWidget *
const widget, mWidgets) {
247 mWidgetLayout->removeWidget(widget);
252 KABC::PhoneNumber::List::ConstIterator it;
254 for (it = mPhoneNumberList.constBegin(); it != mPhoneNumberList.constEnd(); ++it) {
258 mMapper->setMapping(wdg, counter);
259 connect(wdg, SIGNAL(modified()), mMapper, SLOT(map()));
261 mWidgetLayout->addWidget(wdg);
262 mWidgets.append(wdg);
271void PhoneNumberListWidget::changed(
int pos)
273 mPhoneNumberList[pos] = mWidgets.at(pos)->number();
280 QGridLayout *layout =
new QGridLayout(
this);
281 layout->setSpacing(KDialog::spacingHint());
283 mListScrollArea =
new QScrollArea(
this);
285 mListScrollArea->setWidget(mPhoneNumberListWidget);
286 mListScrollArea->setWidgetResizable(
true);
289 const int scrollAreaMinHeight = mPhoneNumberListWidget->sizeHint().height() +
290 mListScrollArea->horizontalScrollBar()->sizeHint().height();
291 mListScrollArea->setMinimumHeight(scrollAreaMinHeight);
292 layout->addWidget(mListScrollArea, 0, 0, 1, 2);
294 mAddButton =
new QPushButton(i18n(
"Add"),
this);
295 mAddButton->setMaximumSize(mAddButton->sizeHint());
296 layout->addWidget(mAddButton, 1, 0, Qt::AlignRight);
298 mRemoveButton =
new QPushButton(i18n(
"Remove"),
this);
299 mRemoveButton->setMaximumSize(mRemoveButton->sizeHint());
300 layout->addWidget(mRemoveButton, 1, 1);
302 connect(mAddButton, SIGNAL(clicked()), mPhoneNumberListWidget, SLOT(add()));
303 connect(mRemoveButton, SIGNAL(clicked()), mPhoneNumberListWidget, SLOT(remove()));
304 connect(mAddButton, SIGNAL(clicked()), SLOT(changed()));
305 connect(mRemoveButton, SIGNAL(clicked()), SLOT(changed()));
314 mReadOnly = readOnly;
315 mAddButton->setEnabled(!readOnly);
316 mRemoveButton->setEnabled(!readOnly && mPhoneNumberListWidget->
phoneNumberCount() > 3);
321void PhoneEditWidget::changed()
323 mRemoveButton->setEnabled(!mReadOnly && mPhoneNumberListWidget->
phoneNumberCount() > 3);
334 const KABC::PhoneNumber::List oldNumbers = contact.phoneNumbers();
335 for (
int i = 0; i < oldNumbers.count(); ++i) {
336 contact.removePhoneNumber(oldNumbers.at(i));
339 const KABC::PhoneNumber::List newNumbers = mPhoneNumberListWidget->
phoneNumbers();
340 for (
int i = 0; i < newNumbers.count(); ++i) {
341 contact.insertPhoneNumber(newNumbers.at(i));
351 setCaption(i18n(
"Edit Phone Number"));
352 setButtons(Ok | Cancel);
353 setDefaultButton(Ok);
354 showButtonSeparator(
true);
356 QWidget *page =
new QWidget(
this);
359 QVBoxLayout *layout =
new QVBoxLayout(page);
360 layout->setSpacing(spacingHint());
361 layout->setMargin(0);
363 mPreferredBox =
new QCheckBox(i18n(
"This is the preferred phone number"), page);
364 layout->addWidget(mPreferredBox);
366 QGroupBox *box =
new QGroupBox(i18n(
"Types"), page);
367 layout->addWidget(box);
369 QGridLayout *buttonLayout =
new QGridLayout(box);
372 mTypeList = KABC::PhoneNumber::typeList();
373 mTypeList.removeAll(KABC::PhoneNumber::Pref);
375 KABC::PhoneNumber::TypeList::ConstIterator it;
376 mGroup =
new QButtonGroup(box);
377 mGroup->setExclusive(
false);
378 int row, column, counter;
379 row = column = counter = 0;
380 for (it = mTypeList.constBegin(); it != mTypeList.constEnd(); ++it, ++counter) {
381 QCheckBox *cb =
new QCheckBox(KABC::PhoneNumber::typeLabel(*it), box);
382 cb->setChecked(
type & mTypeList[counter]);
383 buttonLayout->addWidget(cb, row, column);
384 mGroup->addButton(cb);
393 mPreferredBox->setChecked(mType & KABC::PhoneNumber::Pref);
398 KABC::PhoneNumber::Type
type = 0;
400 for (
int i = 0; i < mGroup->buttons().count(); ++i) {
401 QCheckBox *box =
dynamic_cast<QCheckBox *
>(mGroup->buttons().at(i)) ;
402 if (box && box->isChecked()) {
403 type |= mTypeList[i];
407 if (mPreferredBox->isChecked()) {
408 type =
type | KABC::PhoneNumber::Pref;
410 type =
type & ~KABC::PhoneNumber::Pref;
A QPointer which when destructed, deletes the object it points to.
A combobox to select a phone number 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.
~PhoneTypeCombo()
Destroys the phone type combo.
A dialog for editing phone number types.
KABC::PhoneNumber::Type type() const
Returns the selected type.
PhoneTypeDialog(KABC::PhoneNumber::Type type, QWidget *parent=0)
Creates a new phone type dialog.