blob: 9909b34fcd06bc75a5515682c6a7acb1ab4fced2 [file] [log] [blame]
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->contact_list->setAttribute(Qt::WA_MacShowFocusRect, false);
// Setup hidden stuff.
ui->answer_bar->hide();
ui->hangup_button->hide();
//setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint);
//setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint);
mainAccount_ = AccountModel::currentAccount();
callModel_ = CallModel::instance();
HistoryModel::instance()->addBackend(new LegacyHistoryBackend(this),
LoadOptions::FORCE_ENABLED);
ContactModel::instance()->addBackend(TransitionalContactBackend::instance(),
LoadOptions::FORCE_ENABLED);
Contact* test = new Contact();
test->setNickName("George");
test->setFirstName("George-Amand");
test->setFamilyName("Tremblay");
//test->setPhoneNumbers(PhoneNumber());
ContactModel::instance()->addContact(test);
connectSlots();
ui->contact_list->setModel(ContactModel::instance());
//ui->contact_list->setModel(CallModel::instance());
//ui->contact_list->setModel(HistoryModel::instance());
//ui->contact_list->setModel(ContactModel::instance());
}
MainWindow::~MainWindow()
{
if (mainCall_ != nullptr) {
mainCall_->performAction(Call::Action::REFUSE);
delete mainCall_;
}
if (mainAccount_) {
delete mainAccount_;
}
if (callModel_) {
//delete callModel_;
}
delete ui;
}
//// PROTECTED ////
void MainWindow::mousePressEvent(QMouseEvent *e)
{
clickPos_ = e->pos();
}
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
qDebug() << clickPos_;
move(e->globalPos() - clickPos_);
}
//// PRIVATE ////
void MainWindow::connectSlots()
{
QObject::connect(callModel_, SIGNAL(callStateChanged(Call*, Call::State)),
this, SLOT(state_changed(Call*, Call::State)));
QObject::connect(callModel_, SIGNAL(incomingCall(Call*)),
this, SLOT(incoming_call(Call*)));
connect(&pollTimer_, SIGNAL(timeout()), this, SLOT(pollEvents()));
pollTimer_.start(1000);
}
void MainWindow::showAnswerBar()
{
// Make sure everything is ok:
ui->answer_button->show();
ui->decline_button->show();
ui->hangup_button->hide();
// Animatate bar
ui->answer_bar->resize(ui->content_area->width(), 80);
ui->answer_bar->move(0, ui->content_area->height() + ui->answer_bar->height());
QPoint goingTo(0, ui->content_area->height() - ui->answer_bar->height());
ui->answer_bar->show();
QPropertyAnimation* myAnim = new QPropertyAnimation(ui->answer_bar,
"pos",
ui->content_area);
myAnim->setDuration(500);
myAnim->setStartValue(ui->answer_bar->pos());
myAnim->setEasingCurve(QEasingCurve::OutQuart);
myAnim->setEndValue(goingTo);
myAnim->start(QPropertyAnimation::DeleteWhenStopped);
}
void MainWindow::hideAnswerBar()
{
// Move down
QPoint goingTo(0, ui->content_area->height() + ui->answer_bar->height());
QPropertyAnimation* myAnim = new QPropertyAnimation(ui->answer_bar,
"pos",
ui->content_area);
myAnim->setDuration(500);
myAnim->setStartValue(ui->answer_bar->pos());
myAnim->setEasingCurve(QEasingCurve::InQuart);
myAnim->setEndValue(goingTo);
myAnim->start(QPropertyAnimation::DeleteWhenStopped);
}
void MainWindow::transformAnswerBar()
{
QSize answerSize = ui->answer_button->size();
QPoint answerPos = ui->answer_button->pos();
QSize declineSize = ui->decline_button->size();
QPoint declinePos = ui->decline_button->pos();
QPropertyAnimation* answAnim = new QPropertyAnimation(ui->answer_button,
"pos",
ui->answer_bar);
answAnim->setDuration(200);
answAnim->setStartValue(answerPos);
answAnim->setEasingCurve(QEasingCurve::InCubic);
answAnim->setEndValue(QPoint(ui->answer_bar->width() + ui->answer_button->width(),
ui->answer_button->pos().y()));
QObject::connect(answAnim, &QPropertyAnimation::finished, [=]() {
ui->answer_button->hide();
ui->answer_button->resize(answerSize);
});
// Move decline button to center
QPoint center(ui->answer_bar->width() / 2 - ui->hangup_button->width() / 2,
ui->answer_button->pos().y());
QPropertyAnimation* declAnim = new QPropertyAnimation(ui->decline_button,
"pos",
ui->answer_bar);
declAnim->setDuration(200);
declAnim->setStartValue(ui->decline_button->pos());
declAnim->setEasingCurve(QEasingCurve::InOutCubic);
declAnim->setEndValue(center);
QObject::connect(declAnim, &QPropertyAnimation::finished, [=]() {
ui->decline_button->hide();
ui->hangup_button->show();
ui->decline_button->resize(declineSize);
ui->decline_button->move(declinePos);
});
answAnim->start(QPropertyAnimation::DeleteWhenStopped);
declAnim->start(QPropertyAnimation::DeleteWhenStopped);
}
//// SLOTS ////
void MainWindow::state_changed(Call *call, Call::State previousState)
{
qDebug() << "on state changed! " << previousState << endl;
}
void MainWindow::incoming_call(Call *call)
{
showAnswerBar();
mainCall_ = call;
}
void MainWindow::on_call_button_clicked()
{
mainCall_ = CallModel::instance()->dialingCall();
mainCall_->setDialNumber(ui->search_bar->text());
mainCall_->performAction(Call::Action::ACCEPT);
}
void MainWindow::on_hangup_button_clicked()
{
if (mainCall_)
mainCall_->performAction(Call::Action::REFUSE);
hideAnswerBar();
}
void MainWindow::on_answer_button_clicked()
{
if (mainCall_) {
mainCall_->performAction(Call::Action::ACCEPT);
}
transformAnswerBar();
}
void MainWindow::pollEvents()
{
qDebug() << "Poll Events?";
AccountModel::currentAccount()->poll_events();
}
void MainWindow::on_decline_button_clicked()
{
if (mainCall_) {
mainCall_->performAction((Call::Action::REFUSE));
}
hideAnswerBar();
}