source: SMSSender/src/ui/VCEditContact/vceditcontact.cpp @ 56:e63ceb8090cd

3.0
Last change on this file since 56:e63ceb8090cd was 56:e63ceb8090cd, checked in by Sämy Zehnder <saemy.zehnder@…>, 12 years ago
  • Renamed accountmodel to accounttreemodel
  • Implemented creation of new contact if number is unknown in vcmain
  • Areacode is now in its own field in vceditcontact
  • Accountlist in vcmain is now controlled by a model (Needs filtering of only active ones)
  • Settingspath is dynamic and user-based now
File size: 9.0 KB
Line 
1#include "vceditcontact.h"
2
3#include <QImageReader>
4#include <QtGui/QMenu>
5#include <QtGui/QInputDialog>
6#include <QtGui/QFileDialog>
7#include <QtGui/QMessageBox>
8#include <QDebug>
9#include <QStringList>
10#include <QSortFilterProxyModel>
11
12#include "../UIHelper.h"
13
14#include <snumber.h>
15#include "../../business/BusinessFactory.h"
16
17#include <typeconvert.h>
18#include <strutils.h>
19
20VCEditContact::VCEditContact(IContact* contact, QWidget *parent) : QDialog(parent){
21    contact_ = contact;
22
23        ui.setupUi(this);
24
25        defaultIcon_ = ui.btnIcon->icon();
26
27        ui.edtName->setText(contact->name());
28        if (!contact->number().isValid()) {
29            ui.edtCountryCode->setText("+41");
30            ui.edtNumber->setText("");
31        } else {
32        ui.edtCountryCode->setText(contact->number().toString("'+'CC"));
33        ui.edtNumber->setText(contact->number().toString("AAA' 'u"));
34        }
35
36        // Load aliases
37        foreach (QString alias, contact->aliases()) {
38            addAliasItem(alias);
39        }
40        QSortFilterProxyModel* model = new QSortFilterProxyModel(this);
41        model->setSourceModel(ui.lstAliases->model());
42        model->setDynamicSortFilter(true);
43        model->setSortCaseSensitivity(Qt::CaseInsensitive);
44        model->sort(0, Qt::AscendingOrder);
45//    ui.lstAliases->sortItems();
46
47    setIcon(contact->image());
48
49
50    // First "signal" to initialize some slots
51    on_lstAliases_itemSelectionChanged();
52}
53VCEditContact::~VCEditContact() {
54
55}
56
57
58// Icon
59
60void VCEditContact::addBtnIconMenu(){
61    QMenu* menu = new QMenu(ui.btnIcon);
62
63    QAction* action;
64    QIcon icon;
65
66    icon = QIcon();
67    icon.addPixmap(QPixmap(QString::fromUtf8(":/ico/replace.png")), QIcon::Normal, QIcon::Off);
68    action = new QAction(icon, tr("Change icon"), this);
69    menu->addAction(action);
70    connect(action, SIGNAL(activated()), this, SLOT(on_actionChangeIcon_activated()));
71
72    icon = QIcon();
73    icon.addPixmap(QPixmap(QString::fromUtf8(":/ico/remove.png")), QIcon::Normal, QIcon::Off);
74    action = new QAction(icon, tr("Remove icon"), this);
75    menu->addAction(action);
76    connect(action, SIGNAL(activated()), this, SLOT(on_actionRemoveIcon_activated()));
77
78    ui.btnIcon->setMenu(menu);
79}
80
81void VCEditContact::setIconFromFilename(const QString& filename){
82    if ((filename != "") && (QFileInfo(filename).exists())){
83        QImage img = QImage(filename);
84        setIcon(img);
85    }else{
86        setIcon(QImage());
87    }
88}
89void VCEditContact::setIcon(const QImage& image){
90    if (!image.isNull()){
91        ui.btnIcon->setIcon(QPixmap::fromImage(image));
92
93        contactImage_ = image;
94        addBtnIconMenu();
95    } else {
96        ui.btnIcon->setIcon(defaultIcon_);
97
98        contactImage_ = QImage();
99        removeBtnIconMenu();
100    }
101}
102
103void VCEditContact::removeBtnIconMenu(){
104    ui.btnIcon->setMenu(NULL);
105}
106
107void VCEditContact::on_btnIcon_clicked(){
108    on_actionChangeIcon_activated();
109}
110
111void VCEditContact::on_actionChangeIcon_activated(){
112    QList<QByteArray> formatList = QImageReader::supportedImageFormats();
113    QString formats = tr("Images") + " (";
114    for (QList<QByteArray>::iterator it = formatList.begin(); it != formatList.end(); ++it){
115        formats += "*." + *it + " ";
116    }
117    formats.chop(1);
118    formats += ")";
119
120    QString filename = QFileDialog::getOpenFileName(this, tr("Open File"), "", formats);
121    if ((filename != "") && (QFileInfo(filename).exists())){
122        setIconFromFilename(filename);
123    }
124}
125
126void VCEditContact::on_actionRemoveIcon_activated(){
127    setIcon(QImage());
128}
129
130
131// Aliases
132
133QListWidgetItem* VCEditContact::addAliasItem(const QString& alias) {
134    QListWidgetItem* item = new QListWidgetItem(alias);
135    item->setFlags(item->flags() | Qt::ItemIsEditable);
136    ui.lstAliases->addItem(item);
137}
138/*
139void VCEditContact::editAlias(const QString& alias){
140    bool ok;
141    QString newAlias = QInputDialog::getText(this, tr("SMSSender"),
142                                         tr("Enter an alias for that contact:"),
143                                         QLineEdit::Normal,
144                                         alias, &ok);
145    if (ok){
146        if ((alias != "") && (newAlias.trimmed() == "")){
147            if (QMessageBox::Yes ==  QMessageBox::information(this, tr("SMSSender"),
148                                                              tr("You entered a empty value. Do you want to delete this alias?"),
149                                                              QMessageBox::Yes,
150                                                              QMessageBox::No | QMessageBox::Default | QMessageBox::Escape)) {
151                foreach (QListWidgetItem* item, ui.lstAliases->findItems(alias, Qt::MatchFixedString)) {
152                    ui.lstAliases->takeItem(ui.lstAliases->indexFromItem(item)->row());
153                }
154            }
155        }
156
157        if (ui.lstAliases->findItems(alias, Qt::MatchFixedString).count() > 0){ // Is it already in the list?
158            QMessageBox::information(this, tr("SMSSender"),
159                                     tr("This contact is already known under this alias."),
160                                     QMessageBox::Ok | QMessageBox::Default | QMessageBox::Escape);
161        }
162
163        newAliases = newAlias.split(",");
164        foreach (QString newAlias, newAliases) {
165            newAlias = newAlias.trimmed();
166
167            if (ui.lstAliases->findItems(alias, Qt::MatchFixedString).count() == 0){ // Is it already in the list?
168                ui.lstAliases->insertItem(ui.lstAliases->count(), alias);
169            }
170        }
171
172
173
174        return text;
175    }else{
176        return alias;
177    }
178}*/
179
180void VCEditContact::on_lstAliases_itemSelectionChanged(){
181    ui.btnRemoveAlias->setEnabled(ui.lstAliases->selectedItems().count() > 0);
182    ui.btnEditAlias->setEnabled(ui.lstAliases->selectedItems().count() > 0);
183}
184
185void VCEditContact::on_btnAddAlias_clicked(){
186    QList<QListWidgetItem*> emptyItems = ui.lstAliases->findItems("", Qt::MatchFixedString);
187    if (emptyItems.isEmpty()) {
188        emptyItems.append(addAliasItem(""));
189    }
190    ui.lstAliases->setFocus();
191    emptyItems.first()->setSelected(true);
192    on_btnEditAlias_clicked();
193}
194void VCEditContact::on_btnEditAlias_clicked() {
195    QList<QListWidgetItem*> selectedItems = ui.lstAliases->selectedItems();
196    if (!selectedItems.isEmpty()) {
197        ui.lstAliases->setFocus();
198        ui.lstAliases->editItem(selectedItems.first());
199    }
200}
201
202
203void VCEditContact::on_lstAliases_itemChanged(QListWidgetItem* item) {
204    QString alias = item->text().trimmed();
205
206    QList<QListWidgetItem*> items = ui.lstAliases->findItems(alias, Qt::MatchFixedString);
207    items.removeAll(item);
208    if (items.count() > 0){ // Is it already in the list?
209        QMessageBox::information(this, tr("SMSSender"),
210                                 tr("This contact is already known under this alias."),
211                                 QMessageBox::Ok | QMessageBox::Default | QMessageBox::Escape);
212        ui.lstAliases->editItem(item);
213        return;
214    }
215
216    ui.lstAliases->takeItem(ui.lstAliases->row(item));
217    foreach (QString newAlias, alias.split(",", QString::SkipEmptyParts)) {
218        newAlias = newAlias.trimmed();
219
220        if (ui.lstAliases->findItems(newAlias, Qt::MatchFixedString).count() == 0){ // Is it already in the list?
221            addAliasItem(newAlias);
222        }
223    }
224//    ui.lstAliases->sortItems();
225}
226
227/*void VCEditContact::on_lstAliases_itemDoubleClicked(QListWidgetItem* item){
228    QString alias = editAlias(item->text());
229
230}*/
231
232void VCEditContact::on_btnRemoveAlias_clicked(){
233    if (ui.lstAliases->selectedItems().count() == 0){
234        return;
235    }
236
237    if ((ui.lstAliases->selectedItems().first()->text().trimmed() == "") ||
238        (QMessageBox::Yes == QMessageBox::warning(this, tr("SMSSender"),
239                                                  tr("Do you really want to remove this alias?"),
240                                                  QMessageBox::Yes,
241                                                  QMessageBox::No | QMessageBox::Default | QMessageBox::Escape))){
242        // Remove it from the list
243        ui.lstAliases->takeItem(ui.lstAliases->row(ui.lstAliases->selectedItems().first()));
244    }
245}
246
247
248bool VCEditContact::validate(){
249    ui.edtName->setText(ui.edtName->text().trimmed());
250    ui.edtNumber->setText(ui.edtNumber->text().trimmed());
251
252    QString errorMessages = "";
253
254    // TODO: finish this...
255    return true;
256}
257
258void VCEditContact::on_btnsNavigation_clicked(QAbstractButton* button){
259    if (button == ui.btnsNavigation->button(QDialogButtonBox::Ok)){
260        // TODO: validate (is this name / number already there?)
261        // TODO: implement exception handling...
262        if (!validate()){
263            return;
264        }
265
266        contact_->setName(ui.edtName->text());
267        contact_->setNumber(SNumber(ui.edtCountryCode->text() + " " + ui.edtNumber->text(), SNumber::GuessFormat));
268        QStringList aliases;
269        for (int x = 0; x < ui.lstAliases->count(); x++){
270            QString alias = ui.lstAliases->item(x)->text().trimmed();
271            if (alias != "") {
272                aliases.append(alias);
273            }
274        }
275        contact_->setAliases(aliases);
276
277        contact_->setImage(contactImage_);
278
279        done(QDialog::Accepted);
280    }else{
281        done(QDialog::Rejected);
282    }
283}
Note: See TracBrowser for help on using the repository browser.