OfficeAssistant_Win10/OfficeAssistant_msvc/applicationmanagerpage.cpp

221 lines
7.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "applicationmanagerpage.h"
#include <QSvgRenderer>
#include <QPainter>
#include <ctime>
#include "applicationmanager.h"
#include "config.h"
#include "mainscreen.h"
#include "mainwindowlayout.h"
ApplicationManagerPage::ApplicationManagerPage(int category, ApplicationManager *application_manager,QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
this->category = category;
this->parent = parent;
this->application_manager = application_manager;
sqlite_helper.get_buttons(button_structs);
layout = new QVBoxLayout;
sqlite_helper.get_all_software(softwares, category);
table = new QTableWidget(this);
table->setColumnCount(9);
QStringList titles;
titles<< QString::fromLocal8Bit("图标") << QString::fromLocal8Bit("名称") << QString::fromLocal8Bit("全名") << QString::fromLocal8Bit("开发者") << QString::fromLocal8Bit("最后使用日期")<<QString::fromLocal8Bit("排序") << QString::fromLocal8Bit("添加到导航条") <<QString::fromLocal8Bit("设置") << QString::fromLocal8Bit("打开");
table->setHorizontalHeaderLabels(titles);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
table->setStyleSheet("QTableWidget{border:1px;outline:1px;align: center;} QQTableWidget::widget QTableWidget::item {text-align: center;}");
table->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
int i = 0;
for (i = 0; i < 9; i++)
{
table->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);
}
i = 0;
QTableWidgetItem* item = new QTableWidgetItem;
item->setTextAlignment(Qt::AlignCenter);
table->setItemPrototype(item);
layout->addWidget(table);
setLayout(layout);
}
ApplicationManagerPage::~ApplicationManagerPage()
{
for (auto button : buttons)
{
delete button;
}
delete table;
delete layout;
}
void ApplicationManagerPage::onclicked(int state)
{
for(int i=0;i<table->rowCount();i++)
{
if(((QCheckBox *)table->cellWidget(i,6))->checkState()==Qt::Checked)
{
if(!checked[table->item(i,2)->text()])
{
QString orig_name = table->item(i, 2)->text();
bool ok=sqlite_helper.edit_software(table->item(i, 1)->text(), orig_name, rows[orig_name].exe_file, QString::number(rows[orig_name].sort), rows[orig_name].categories,"navbar");
if(!ok)
{
QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("更新部分或全部失败"));
break;
}
checked[table->item(i, 2)->text()] = true;
}
}else
{
if (checked[table->item(i, 2)->text()])
{
QString orig_name = table->item(i, 2)->text();
bool ok = sqlite_helper.edit_software(table->item(i, 1)->text(), orig_name, rows[orig_name].exe_file, QString::number(rows[orig_name].sort), rows[orig_name].categories, "app");
if (!ok)
{
QMessageBox::critical(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("更新部分或全部失败"));
break;
}
checked[table->item(i, 2)->text()] = false;
}
}
}
//在后面refresh避免因为refresh导致信号和槽断开
}
//刷新页面
void ApplicationManagerPage::refresh()
{
for(auto button:application_manager->buttons)
{
button->update();
}
int rowcount = table->rowCount();
for(auto i : connections)
{
disconnect(i);
}
for(int i=0;i<rowcount;i++)
{
table->removeRow(0);
}
softwares.clear();
sqlite_helper.get_all_software(softwares, category);
int i = 0;
for (auto software : softwares)
{
table->insertRow(i);
table->setItem(i, 1, new QTableWidgetItem(software.name));
table->setItem(i, 2, new QTableWidgetItem(software.orig_name));
table->setItem(i, 3, new QTableWidgetItem(software.dev));
QString date;
std::tm* time;
if(software.use_time!=0)
{
time = std::localtime(&software.use_time);
date = QString::number(1900 + time->tm_year, 10);
date += "/";
date += QString::number(1 + time->tm_mon, 10);
date += "/";
date += QString::number(time->tm_mday, 10);
table->setItem(i, 4, new QTableWidgetItem(date));
}
else
{
table->setItem(i, 4, new QTableWidgetItem(QString::fromLocal8Bit("从未使用")));
}
Record2 record2;
record2.name = software.name;
record2.icon = new QLabel;
QFile file(software.img);
record2.icon->setMaximumSize(50, 50);
record2.icon->setScaledContents(true);
if (file.exists())
{
QPixmap pixmap(software.img);
//pixmap.scaled(40, 40);
record2.icon->setPixmap(pixmap);
}
else {
QPixmap pixmap(QApplication::applicationDirPath() + DEFAULT_PNG);
//pixmap.scaled(40, 40);
record2.icon->setPixmap(pixmap);
}
table->setCellWidget(i, 0, record2.icon);
if(!software.locked)
{
record2.settings = new MiniButton(software.orig_name, "settings");
record2.settings->setText(QString::fromLocal8Bit("设置"));
record2.settings->setMaximumSize(60, 40);
QMetaObject::Connection connect1 = connect(record2.settings, &MiniButton::clicked, record2.settings, &MiniButton::onclick2);
connections << connect1;
QMetaObject::Connection connect2 = connect(record2.settings, &MiniButton::click2, application_manager, &ApplicationManager::onclick2);
connections << connect2;
table->setCellWidget(i, 7, record2.settings);
}
record2.open = new MiniButton(software.orig_name, "open");
record2.open->setText(QString::fromLocal8Bit("打开"));
record2.open->setMaximumSize(60, 40);
QMetaObject::Connection connect3=connect(record2.open, &MiniButton::clicked, record2.open, &MiniButton::onclick2);
connections << connect3;
QMetaObject::Connection connect4=connect(record2.open, &MiniButton::click2, application_manager, &ApplicationManager::onclick2);
connections << connect4;
record2.exe_file = software.path;
record2.orig_name = software.orig_name;
record2.url = software.url;
for (int i = 0; i < CATEGORIES_NUM; i++)
{
record2.categories[i] = false;
}
for (int i = 0; i < CATEGORIES_NUM; i++)
{
if (software.category_id.contains(QString::number(i+1)))
{
record2.categories[i] = true;
}
}
record2.op = software.op;
record2.func = software.func;
QMetaObject::Connection connect5 = connect(this, &ApplicationManagerPage::onclick3, (MainWindowLayout*)((MainScreen*)application_manager->parent)->parent, &MainWindowLayout::clickButton);
connections<<connect5;
record2.sort = software.sort;
record2.check_box = new QCheckBox;
if (software.is_navbar)
{
record2.check_box->setCheckState(Qt::Checked);
checked.insert(software.orig_name, true);
}
else
{
record2.check_box->setCheckState(Qt::Unchecked);
checked.insert(software.orig_name, false);
}
if(software.locked)
{
record2.check_box->setEnabled(false);
}
else
{
record2.check_box->setEnabled(true);
}
QMetaObject::Connection connect6 = connect(record2.check_box, &QCheckBox::stateChanged, this, &ApplicationManagerPage::onclicked);
connections << connect6;
QMetaObject::Connection connect7 = connect(record2.check_box, &QCheckBox::stateChanged, mainWindowLayout->navBar, &NavBar::refresh);
connections << connect7;
table->setItem(i, 5, new QTableWidgetItem(QString::number(software.sort)));
QTableWidgetItem* check_box_item = new QTableWidgetItem;
table->setItem(i, 6, check_box_item);
table->setCellWidget(i, 6, record2.check_box);
check_box_item->setTextAlignment(Qt::AlignCenter);
table->setCellWidget(i, 8, record2.open);
rows.insert(software.orig_name, record2);
table->resizeColumnToContents(0);
i++;
}
}