blob: eda0f3fea26f04d6e5403e6d1b8c664592b0b54e [file] [log] [blame]
/***************************************************************************
* Copyright (C) 2015-2016 by Savoir-faire Linux *
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
* *
* 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 3 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, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#include "contactpicker.h"
#include "ui_contactpicker.h"
#include "categorizedcontactmodel.h"
#include "personmodel.h"
#include "utils.h"
ContactPicker::ContactPicker(ContactMethod *number, QWidget *parent) :
QDialog(parent),
ui(new Ui::ContactPicker),
personSelected_(nullptr),
number_(number)
{
ui->setupUi(this);
this->setWindowFlags(Qt::CustomizeWindowHint);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
contactProxyModel_ = new OnlyPersonProxyModel(&PersonModel::instance());
contactProxyModel_->setSortRole(static_cast<int>(Qt::DisplayRole));
contactProxyModel_->sort(0,Qt::AscendingOrder);
contactProxyModel_->setFilterRole(Qt::DisplayRole);
ui->contactView->setModel(contactProxyModel_);
ui->numberLineEdit->setText(number->uri());
}
ContactPicker::~ContactPicker()
{
delete ui;
}
void
ContactPicker::on_contactView_doubleClicked(const QModelIndex &index)
{
Q_UNUSED(index)
this->accept();
}
void
ContactPicker::accept()
{
/* Force LRC to update contact model as adding a number
to a contact without one didn't render him reachable */
CategorizedContactModel::instance().setUnreachableHidden(false);
auto idx = ui->contactView->currentIndex();
//There is only one collection on Windows
auto personCollection = PersonModel::instance().collections().at(0);
if (not ui->nameLineEdit->text().isEmpty()) {
auto *newPerson = new Person();
newPerson->setFormattedName(ui->nameLineEdit->text());
Person::ContactMethods cM;
cM.append(number_);
newPerson->setContactMethods(cM);
newPerson->setUid(Utils::GenGUID().toLocal8Bit());
PersonModel::instance().addNewPerson(newPerson, personCollection);
} else if (idx.isValid()) {
auto p = idx.data(static_cast<int>(Person::Role::Object)).value<Person*>();
Person::ContactMethods cM (p->phoneNumbers());
cM.append(number_);
p->setContactMethods(cM);
p->save();
}
CategorizedContactModel::instance().setUnreachableHidden(true);
QDialog::accept();
}
void
ContactPicker::on_okButton_clicked()
{
this->accept();
}
void
ContactPicker::on_createNewButton_clicked()
{
ui->stackedWidget->setCurrentIndex(1);
}
void
ContactPicker::on_searchBar_textChanged(const QString &arg1)
{
contactProxyModel_->setFilterRegExp(QRegExp(arg1, Qt::CaseInsensitive, QRegExp::FixedString));
}