/*
(c) Copyright 2012 - 2018 Anton Sviridenko
https://picapica.im
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 .
*/
#include "mainwindow.h"
#include "globals.h"
#include "skynet.h"
#include "picaactioncenter.h"
#include "accounts.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVBoxLayout *layout;
layout = new QVBoxLayout;
contact_list = new ContactListWidget;
status = new QComboBox;
notifications = new QListWidget();
bt_showhide_notifications = new QPushButton();
hide_notifications();
status->setMinimumHeight(36);
notifications->setMinimumHeight(48);
layout->addWidget(contact_list, 8);
layout->addWidget(bt_showhide_notifications, 0, Qt::AlignRight);
layout->addWidget(notifications, 1, Qt::AlignBottom);
layout->addWidget(status, 0, Qt::AlignBottom);
centralWidget()->setLayout(layout);
setWindowIcon(picapica_ico_sit);
createMenus();
//for (int i=0;i<255;i++)
// contact_list->addItem(QString("test %1").arg(i));
status->addItem(picapica_ico_fly, QString(tr("Connected")));
status->addItem(picapica_ico_sit, QString(tr("Disconnected")));
connect(skynet, SIGNAL(BecameSelfAware()), this, SLOT(set_online()));
connect(skynet, SIGNAL(LostSelfAwareness()), this, SLOT(set_offline()));
connect(status, SIGNAL(currentIndexChanged(int)), this, SLOT(status_changed(int)));
connect(bt_showhide_notifications, SIGNAL(clicked()), this, SLOT(showhide_click()));
connect(skynet, SIGNAL(ContactsUpdated()), contact_list, SLOT(Reload()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::set_offline()
{
SetStatus(false);
}
void MainWindow::set_online()
{
SetStatus(true);
}
void MainWindow::status_changed(int index)
{
if (status_change_disable_flag)
return;
if (index == 0 && !skynet->isSelfAware())
{
Accounts::AccountRecord curr_acc = skynet->CurrentAccount();
skynet->Join(curr_acc);
}
if (1 == index && skynet->isSelfAware())
skynet->Exit();
}
void MainWindow::SetStatus(bool connected)
{
status_change_disable_flag = true;
if (connected)
{
status->setCurrentIndex(0);
setWindowTitle(tr("Pica Pica Messenger - ") +
Accounts::GetCurrentAccount().id.toBase64().left(8) + "...");
}
else
{
status->setCurrentIndex(1);
setWindowTitle(tr("Pica Pica Messenger - Disconnected"));
}
status_change_disable_flag = false;
}
void MainWindow::createMenus()
{
contactsMenu = menuBar()->addMenu(tr("&Contacts"));
contactsMenu->addAction(contact_list->addcontactAct);
contactsMenu->addAction(contact_list->showblacklistAct);
contactsMenu->addSeparator();
contactsMenu->addAction(action_center->ExitAct());
accountMenu = menuBar()->addMenu(tr("&Account"));
accountMenu->addAction(action_center->ShowMyIDAct());
nodesMenu = menuBar()->addMenu(tr("&Nodes"));
nodesMenu->addAction(action_center->NodesAct());
settingsMenu = menuBar()->addMenu(tr("&Settings"));
settingsMenu->addAction(action_center->SettingsAct());
helpMenu = menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(action_center->AboutAct());
}
void MainWindow::show_notifications()
{
notifications->show();
bt_showhide_notifications->setText(tr("Hide Notifications"));
status_notifications_hidden = false;
}
void MainWindow::hide_notifications()
{
notifications->hide();
bt_showhide_notifications->setText(tr("Show Notifications"));
status_notifications_hidden = true;
}
void MainWindow::showhide_click()
{
if (status_notifications_hidden)
show_notifications();
else
hide_notifications();
}
void MainWindow::AddNotification(QString &text, bool is_critical)
{
notifications->addItem(text);
notifications->item(notifications->count() - 1) ->setForeground(QBrush(QColor(230, 10, 10, 196)));
if (is_critical)
show_notifications();
}