251 lines
7.7 KiB
C++
251 lines
7.7 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
#include "aboutwindow.h"
|
|
#include "programinfo.h"
|
|
|
|
#include "kernelinformation.h"
|
|
|
|
#include <QStandardItemModel>
|
|
#include <qdesktopservices.h>
|
|
|
|
#include "kernelinformationdialog.h"
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
this->setWindowTitle(this->windowTitle() + " " + ProgramInfo::version());
|
|
kernelInformation = new KernelInformation();
|
|
RefreshKernelList();
|
|
}
|
|
|
|
void MainWindow::RefreshKernelList()
|
|
{
|
|
ui->m_nowKernel->setText(tr("Kernel: ") + kernelInformation->localKernelName() + " " + tr("Arch: ") + kernelInformation->arch());
|
|
connect(kernelInformation, &KernelInformation::loadFinished, this, [this](){
|
|
RefreshKernelListView(kernelInformation, ui->m_showLocalArchOnly->isChecked());
|
|
});
|
|
kernelInformation->LoadInfo();
|
|
}
|
|
|
|
void MainWindow::RefreshKernelListView(KernelInformation *info, bool showLocalArchOnly)
|
|
{
|
|
// 更新列表
|
|
int count = info->get_count();
|
|
QStandardItemModel *model = new QStandardItemModel();
|
|
model->setHorizontalHeaderLabels(QStringList() << tr("ID") << tr("Kernel Name") << tr("Author") << tr("Arch") << tr("Version") << tr("Installed") << tr("Description"));
|
|
const QString arch = info->arch();
|
|
int line = 0;
|
|
kernelNumber = 0;
|
|
for(int i = 0; i < count; i++) {
|
|
// 显示所有架构
|
|
QString kernelArch = "";
|
|
bool isLocalArch = false;
|
|
|
|
for(QString i: info->get_arch(i)) {
|
|
if(i == arch) {
|
|
isLocalArch = true;
|
|
}
|
|
if(i == "all") {
|
|
isLocalArch = true;
|
|
}
|
|
kernelArch += i + " ";
|
|
}
|
|
if(showLocalArchOnly && !isLocalArch) {
|
|
continue;
|
|
}
|
|
model->setItem(line, 0, new QStandardItem(QString::number(i)));
|
|
model->setItem(line, 1, new QStandardItem(info->get_name(i)));
|
|
model->setItem(line, 2, new QStandardItem(info->get_author(i)));
|
|
model->setItem(line, 3, new QStandardItem(kernelArch));
|
|
model->setItem(line, 4, new QStandardItem(info->get_ver(i)));
|
|
bool installed = info->get_installedAlready(i);
|
|
model->setItem(line, 5, new QStandardItem((QStringList() << "" << "Y").at(installed)));
|
|
if (installed) {
|
|
kernelNumber++;
|
|
}
|
|
model->setItem(line, 6, new QStandardItem(info->get_des(i)));
|
|
line++;
|
|
}
|
|
ui->m_kernelShow->setModel(model);
|
|
ui->m_kernelShow->resizeColumnsToContents();
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_refreshButton_clicked()
|
|
{
|
|
RefreshKernelList();
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_installButton_clicked()
|
|
{
|
|
QModelIndex list = ui->m_kernelShow->selectionModel()->currentIndex();
|
|
int row = list.row();
|
|
if(row < 0) {
|
|
// 未选中任何内容
|
|
QMessageBox::critical(this, tr("Error"), tr("Nothing to choose"));
|
|
return;
|
|
}
|
|
// 获取 ID
|
|
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
|
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
|
// 获取选中行
|
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Install, kernelInformation->get_pkgName(id));
|
|
connect(installer, &KernelInstaller::InstallFinished, this, [this](){
|
|
// 刷新列表
|
|
this->RefreshKernelListView(this->kernelInformation, ui->m_showLocalArchOnly->isChecked());
|
|
});
|
|
installer->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionExit_triggered()
|
|
{
|
|
this->close();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionAbout_triggered()
|
|
{
|
|
AboutWindow *aboutWindow = new AboutWindow();
|
|
aboutWindow->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionGitee_triggered()
|
|
{
|
|
QDesktopServices::openUrl(QUrl("https://gitee.com/GXDE-OS/gxde-kernel-manager"));
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionGithub_triggered()
|
|
{
|
|
QDesktopServices::openUrl(QUrl("https://github.com/GXDE-OS/gxde-kernel-manager"));
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::on_actionSourceforge_triggered()
|
|
{
|
|
QDesktopServices::openUrl(QUrl("https://sourceforge.net/projects/gxde-kernel-manager/"));
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_removeButton_clicked()
|
|
{
|
|
QModelIndex list = ui->m_kernelShow->selectionModel()->currentIndex();
|
|
int row = list.row();
|
|
if(row < 0) {
|
|
// 未选中任何内容
|
|
QMessageBox::critical(this, tr("Error"), tr("Nothing to choose"));
|
|
return;
|
|
}
|
|
// 获取 ID
|
|
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
|
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
|
if(kernelNumber <= 1) {
|
|
QMessageBox msgBox;
|
|
msgBox.setIcon(QMessageBox::Warning);
|
|
msgBox.setWindowTitle(tr("Warning"));
|
|
msgBox.setInformativeText(tr("Are you sure you want to remove all installed kernel versions? Please note that this may render your system unstable or unbootable."));
|
|
msgBox.addButton(tr("Confirm"), QMessageBox::AcceptRole);
|
|
msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole);
|
|
if(msgBox.exec() == QMessageBox::RejectRole) {
|
|
return;
|
|
}
|
|
}
|
|
// 获取选中行
|
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Remove, kernelInformation->get_pkgName(id));
|
|
installer->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_showLocalArchOnly_stateChanged(int arg1)
|
|
{
|
|
RefreshKernelListView(this->kernelInformation, ui->m_showLocalArchOnly->isChecked());
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_reconfigureButton_clicked()
|
|
{
|
|
QModelIndex list = ui->m_kernelShow->selectionModel()->currentIndex();
|
|
int row = list.row();
|
|
if(row < 0) {
|
|
// 未选中任何内容
|
|
QMessageBox::critical(this, tr("Error"), tr("Nothing to choose"));
|
|
return;
|
|
}
|
|
// 获取 ID
|
|
QModelIndex index = ui->m_kernelShow->model()->index(row, 0);
|
|
int id = ui->m_kernelShow->model()->data(index).toUInt();
|
|
// 获取选中行
|
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Reconfigure, kernelInformation->get_pkgName(id));
|
|
installer->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionUpdate_apt_cache_triggered()
|
|
{
|
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Update, QStringList());
|
|
connect(installer, &KernelInstaller::InstallFinished, this, [this, installer](){
|
|
RefreshKernelList();
|
|
});
|
|
installer->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionAbout_QT_triggered()
|
|
{
|
|
QMessageBox::aboutQt(this);
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionUpgrade_triggered()
|
|
{
|
|
KernelInstaller *installer = new KernelInstaller(KernelInstaller::Option::Upgrade, QStringList());
|
|
installer->show();
|
|
}
|
|
|
|
|
|
void MainWindow::on_actionDonate_triggered()
|
|
{
|
|
QDesktopServices::openUrl(QUrl("https://gitee.com/GXDE-OS#%E8%AF%B7%E4%BD%9C%E8%80%85%E5%96%9D%E6%9D%AF%E8%8C%B6"));
|
|
}
|
|
|
|
|
|
void MainWindow::on_m_kernelShow_doubleClicked(const QModelIndex &index)
|
|
{
|
|
// 显示具体信息
|
|
QModelIndex list = index;
|
|
int row = list.row();
|
|
if(row < 0) {
|
|
// 未选中任何内容
|
|
QMessageBox::critical(this, tr("Error"), tr("Nothing to choose"));
|
|
return;
|
|
}
|
|
// 获取 ID
|
|
QModelIndex chooseIndex = ui->m_kernelShow->model()->index(row, 0);
|
|
int id = ui->m_kernelShow->model()->data(chooseIndex).toUInt();
|
|
// 获取选中行
|
|
KernelInformationDialog *dialog = new KernelInformationDialog(kernelInformation->get_kernelData(id));
|
|
connect(dialog, &KernelInformationDialog::InstallFinished, this, [this](){
|
|
// 刷新列表
|
|
this->RefreshKernelListView(this->kernelInformation, ui->m_showLocalArchOnly->isChecked());
|
|
});
|
|
connect(dialog, &KernelInformationDialog::RemoveFinished, this, [this](){
|
|
// 刷新列表
|
|
this->RefreshKernelListView(this->kernelInformation, ui->m_showLocalArchOnly->isChecked());
|
|
});
|
|
dialog->show();
|
|
|
|
}
|
|
|
|
|