diff --git a/gxde-kernel-manager.pro b/gxde-kernel-manager.pro index abe91aa..9c3c3ed 100644 --- a/gxde-kernel-manager.pro +++ b/gxde-kernel-manager.pro @@ -10,17 +10,21 @@ CONFIG += c++17 SOURCES += \ kernelinformation.cpp \ + kernelinstaller.cpp \ main.cpp \ mainwindow.cpp HEADERS += \ kernelinformation.h \ + kernelinstaller.h \ mainwindow.h FORMS += \ + kernelinstaller.ui \ mainwindow.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target +unix:!macx: LIBS += -lqtermwidget5 diff --git a/kernelinstaller.cpp b/kernelinstaller.cpp new file mode 100644 index 0000000..3f309f8 --- /dev/null +++ b/kernelinstaller.cpp @@ -0,0 +1,38 @@ +#include "kernelinstaller.h" +#include "ui_kernelinstaller.h" + +#include <ctime> +#include <cstdlib> +#include <QFile> + +#define MAX_TMP_NUM 1024 +#define MIN_TMP_NUM 1024 + +KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) : + QMainWindow(parent), + ui(new Ui::KernelInstaller) +{ + ui->setupUi(this); + this->kernelList = kernelList; + terminal = new QTermWidget(0); + terminal->setColorScheme("DarkPastels"); + ui->verticalLayout->addWidget(terminal); + StartInstaller(); +} + +void KernelInstaller::StartInstaller() +{ + // 随机生成目录 + srand(time(0)); + int randomNumber = (rand() % (MAX_TMP_NUM - MIN_TMP_NUM)) + 1; // 左闭右闭 + QString tempPath = tempDir + "/gxde-kernel-manager-installer-" + QString::number(randomNumber) + ".sh"; + QFile file(tempPath); + file.open(QFile::WriteOnly); + //file.write("#/bin/bash") + file.close(); +} + +KernelInstaller::~KernelInstaller() +{ + delete ui; +} diff --git a/kernelinstaller.h b/kernelinstaller.h new file mode 100644 index 0000000..2b00cae --- /dev/null +++ b/kernelinstaller.h @@ -0,0 +1,30 @@ +#ifndef KERNELINSTALLER_H +#define KERNELINSTALLER_H + +#include <QMainWindow> + +#include <qtermwidget5/qtermwidget.h> + +namespace Ui { +class KernelInstaller; +} + +class KernelInstaller : public QMainWindow +{ + Q_OBJECT + +public: + explicit KernelInstaller(QStringList kernelList, QWidget *parent = nullptr); + ~KernelInstaller(); + +private: + Ui::KernelInstaller *ui; + QTermWidget *terminal; + QStringList kernelList; + + QString tempDir = "/tmp"; + + void StartInstaller(); +}; + +#endif // KERNELINSTALLER_H diff --git a/kernelinstaller.ui b/kernelinstaller.ui new file mode 100644 index 0000000..023fae9 --- /dev/null +++ b/kernelinstaller.ui @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>KernelInstaller</class> + <widget class="QMainWindow" name="KernelInstaller"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="m_statue"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QProgressBar" name="m_installProcess"> + <property name="value"> + <number>0</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="textDirection"> + <enum>QProgressBar::TopToBottom</enum> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/mainwindow.cpp b/mainwindow.cpp index f4bda58..54545d0 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -10,19 +10,18 @@ MainWindow::MainWindow(QWidget *parent) , ui(new Ui::MainWindow) { ui->setupUi(this); + kernelInformation = new KernelInformation(); RefreshKernelList(); } void MainWindow::RefreshKernelList() { - KernelInformation *information = new KernelInformation(); - ui->m_nowKernel->setText(tr("Kernel: ") + information->localKernelName()); - connect(information, &KernelInformation::loadFinished, this, [this, information](){ - qDebug() << information->get_listData(); - RefreshKernelListView(information); - delete information; + ui->m_nowKernel->setText(tr("Kernel: ") + kernelInformation->localKernelName()); + connect(kernelInformation, &KernelInformation::loadFinished, this, [this](){ + qDebug() << this->kernelInformation->get_listData(); + RefreshKernelListView(kernelInformation); }); - information->LoadInfo(); + kernelInformation->LoadInfo(); } void MainWindow::RefreshKernelListView(KernelInformation *info) @@ -30,10 +29,11 @@ void MainWindow::RefreshKernelListView(KernelInformation *info) // 更新列表 int count = info->get_count(); QStandardItemModel *model = new QStandardItemModel(); - model->setHorizontalHeaderLabels(QStringList() << tr("Kernel Name") << tr("Author")); + model->setHorizontalHeaderLabels(QStringList() << tr("ID") << tr("Kernel Name") << tr("Author")); for(int i = 0; i < count; i++) { - model->setItem(i, 0, new QStandardItem(info->get_name(i))); - model->setItem(i, 1, new QStandardItem(info->get_author(i))); + model->setItem(i, 0, new QStandardItem(QString::number(i))); + model->setItem(i, 1, new QStandardItem(info->get_name(i))); + model->setItem(i, 2, new QStandardItem(info->get_author(i))); } ui->m_kernelShow->setModel(model); } @@ -43,3 +43,16 @@ MainWindow::~MainWindow() delete ui; } + +void MainWindow::on_m_refreshButton_clicked() +{ + RefreshKernelList(); +} + + +void MainWindow::on_m_installButton_clicked() +{ + KernelInstaller *installer = new KernelInstaller(kernelInformation->get_pkgName(0)); + installer->show(); +} + diff --git a/mainwindow.h b/mainwindow.h index ff651d4..251faaf 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,6 +3,7 @@ #include <QMainWindow> #include "kernelinformation.h" +#include "kernelinstaller.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -16,8 +17,14 @@ public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); +private slots: + void on_m_refreshButton_clicked(); + + void on_m_installButton_clicked(); + private: Ui::MainWindow *ui; + KernelInformation *kernelInformation; void RefreshKernelList(); void RefreshKernelListView(KernelInformation *info); }; diff --git a/mainwindow.ui b/mainwindow.ui index 5931443..3f8c32c 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -16,7 +16,20 @@ <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QTableView" name="m_kernelShow"/> + <widget class="QTableView" name="m_kernelShow"> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + </widget> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout"> @@ -41,9 +54,16 @@ </spacer> </item> <item> - <widget class="QPushButton" name="pushButton"> + <widget class="QPushButton" name="m_refreshButton"> <property name="text"> - <string>PushButton</string> + <string>Refresh</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="m_installButton"> + <property name="text"> + <string>Install</string> </property> </widget> </item>