Files
Stacer/stacer/app.cpp
2018-03-09 23:05:52 +03:00

219 lines
5.2 KiB
C++

#include "app.h"
#include "ui_app.h"
#include "utilities.h"
App::~App()
{
delete ui;
}
App::App(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::App),
mSlidingStacked(new SlidingStackedWidget(this)),
mTrayIcon(AppManager::ins()->getTrayIcon()),
mTrayMenu(new QMenu(this))
{
ui->setupUi(this);
init();
}
void App::init()
{
setGeometry(
QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter,
size(), qApp->desktop()->availableGeometry())
);
// form settings
ui->horizontalLayout->setContentsMargins(0,0,0,0);
ui->horizontalLayout->setSpacing(0);
dashboardPage = new DashboardPage(mSlidingStacked);
startupAppsPage = new StartupAppsPage(mSlidingStacked);
systemCleanerPage = new SystemCleanerPage(mSlidingStacked);
servicesPage = new ServicesPage(mSlidingStacked);
processPage = new ProcessesPage(mSlidingStacked);
uninstallerPage = new UninstallerPage(mSlidingStacked);
resourcesPage = new ResourcesPage(mSlidingStacked);
settingsPage = new SettingsPage(mSlidingStacked);
ui->pageContentLayout->addWidget(mSlidingStacked);
mListPages = {
dashboardPage, startupAppsPage, systemCleanerPage, servicesPage,
processPage, uninstallerPage, resourcesPage, settingsPage
};
mListSidebarButtons = {
ui->btnDash, ui->btnStartupApps, ui->btnSystemCleaner, ui->btnServices,
ui->btnProcesses, ui->btnUninstaller, ui->btnResources, ui->btnSettings
};
// APT SOURCE MANAGER
if (ToolManager::ins()->checkSourceRepository()) {
aptSourceManagerPage = new APTSourceManagerPage(mSlidingStacked);
mListPages.insert(7, aptSourceManagerPage);
mListSidebarButtons.insert(7, ui->btnAptSourceManager);
} else {
ui->btnAptSourceManager->hide();
}
// GNOME SETTINGS
bool checkDesktopSession = QString(qgetenv("DESKTOP_SESSION")).contains(QRegExp("ubuntu", Qt::CaseInsensitive));
bool checkDistribution = SystemInfo().getDistribution().contains(QRegExp("ubuntu", Qt::CaseInsensitive));;
if (checkDesktopSession || checkDistribution) {
gnomeSettingsPage = new GnomeSettingsPage(mSlidingStacked);
mListPages.insert(8, gnomeSettingsPage);
mListSidebarButtons.insert(8, ui->btnGnomeSettings);
} else {
ui->btnGnomeSettings->hide();
}
// add pages
for (QWidget *page: mListPages) {
mSlidingStacked->addWidget(page);
}
AppManager::ins()->updateStylesheet();
Utilities::addDropShadow(ui->sidebar, 60);
// set start page
clickSidebarButton(SettingManager::ins()->getStartPage());
createTrayActions();
mTrayIcon->show();
}
void App::closeEvent(QCloseEvent *event)
{
event->ignore();
hide();
}
void App::createTrayActions()
{
for (QPushButton *button: mListSidebarButtons) {
QString toolTip = button->toolTip();
QAction *action = new QAction(toolTip, this);
connect(action, &QAction::triggered, [=] {
clickSidebarButton(toolTip, true);
});
mTrayMenu->addAction(action);
}
mTrayMenu->addSeparator();
QAction *quitAction = new QAction(tr("Quit"), this);
connect(quitAction, &QAction::triggered, [=] {qApp->quit();});
mTrayMenu->addAction(quitAction);
mTrayIcon->setContextMenu(mTrayMenu);
}
void App::clickSidebarButton(QString pageTitle, bool isShow)
{
QWidget *selectedWidget = getPageByTitle(pageTitle);
if (selectedWidget) {
pageClick(selectedWidget, !isShow);
checkSidebarButtonByTooltip(pageTitle);
} else {
pageClick(mListPages.first());
}
setVisible(isShow);
if (isShow) activateWindow();
}
void App::checkSidebarButtonByTooltip(const QString &text)
{
for (QPushButton *button: mListSidebarButtons) {
if (button->toolTip() == text) {
button->setChecked(true);
}
}
}
QWidget* App::getPageByTitle(const QString &title)
{
for (QWidget *page: mListPages) {
if (page->windowTitle() == title) {
return page;
}
}
return nullptr;
}
void App::pageClick(QWidget *widget, bool slide)
{
if (widget) {
ui->pageTitle->setText(widget->windowTitle());
if (slide) {
mSlidingStacked->slideInIdx(mSlidingStacked->indexOf(widget));
} else {
mSlidingStacked->setCurrentWidget(widget);
}
}
}
void App::on_btnDash_clicked()
{
pageClick(dashboardPage);
}
void App::on_btnStartupApps_clicked()
{
pageClick(startupAppsPage);
}
void App::on_btnSystemCleaner_clicked()
{
pageClick(systemCleanerPage);
}
void App::on_btnServices_clicked()
{
pageClick(servicesPage);
}
void App::on_btnUninstaller_clicked()
{
pageClick(uninstallerPage);
}
void App::on_btnProcesses_clicked()
{
pageClick(processPage);
}
void App::on_btnResources_clicked()
{
pageClick(resourcesPage);
}
void App::on_btnAptSourceManager_clicked()
{
pageClick(aptSourceManagerPage);
}
void App::on_btnGnomeSettings_clicked()
{
pageClick(gnomeSettingsPage);
}
void App::on_btnSettings_clicked()
{
pageClick(settingsPage);
}
void App::on_btnFeedback_clicked()
{
if (feedback.isNull()) {
feedback = QSharedPointer<Feedback>(new Feedback(this));
}
feedback->show();
}