diff --git a/CMakeLists.txt b/CMakeLists.txt index 48020da..d073fb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,9 @@ set(PROJECT_SOURCES MainWidget.cpp MainWidget.h MainWidget.ui + adddesktop.ui + adddesktop.h + adddesktop.cpp packqt.qrc ) diff --git a/MainWidget.cpp b/MainWidget.cpp index 64e546c..347e2cc 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -21,6 +21,7 @@ void MainWidget::connect_operator() connect(ui->btnAddEnv, &QPushButton::clicked, this, [=]() { add_env_btn(); }); connect(ui->btnDelEnv, &QPushButton::clicked, this, [=]() { del_env_btn(); }); connect(ui->btnGenerate, &QPushButton::clicked, this, [=]() { generate(); }); + connect(ui->btnInstall, &QPushButton::clicked, this, [=]() { install_bin2menu(); }); } void MainWidget::control_init() @@ -53,6 +54,17 @@ void MainWidget::simple_log(const QString& info, bool enter) } } +// 将二进制文件安装到菜单栏 +void MainWidget::install_bin2menu() +{ + // QString bin = SelectFile(this, ui->edBinary, "请选择二进制可执行文件", "所有文件 (*)"); + // if (bin.isEmpty()) { + // return; + // } + AddDesktop add(this); + add.exec(); +} + // 将某个文件夹拷贝到制定目录下 bool MainWidget::copy_dir(const std::string& source_dir, const std::string& des_dir) { diff --git a/MainWidget.h b/MainWidget.h index 9936f26..839f6c6 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -10,6 +10,7 @@ #include #include #include +#include "adddesktop.h" namespace fs = boost::filesystem; @@ -36,12 +37,14 @@ private: void simple_log(const QString& info, bool enter = true); // 将某个文件夹拷贝到制定目录下 bool copy_dir(const std::string& source_dir, const std::string& des_dir); + // 将二进制文件安装到菜单栏 + void install_bin2menu(); private: std::vector get_depend_on(const std::string& name, const std::vector& env); std::list handle_result(const std::vector& vec); -private: +public: static QString SelectDirectory(QWidget* parent, QLineEdit* pEdit, const QString& pre_path = ""); static QString SelectFile(QWidget* parent, QLineEdit* pEdit, const QString& info, const QString& filter); static bool isOk(QWidget* parent, const QString& title, const QString& content); diff --git a/MainWidget.ui b/MainWidget.ui index eb48255..afae135 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -184,6 +184,13 @@ + + + + 给可执行文件添加到菜单 + + + diff --git a/adddesktop.cpp b/adddesktop.cpp new file mode 100644 index 0000000..9dd97a2 --- /dev/null +++ b/adddesktop.cpp @@ -0,0 +1,94 @@ +#include "adddesktop.h" +#include +#include "ui_adddesktop.h" +#include + +AddDesktop::AddDesktop(QWidget *parent) : + QDialog(parent), + ui(new Ui::AddDesktop) +{ + ui->setupUi(this); + + // Audio:音频应用程序,如播放器、编辑器等。 + // Video:视频应用程序,如播放器、编辑器等。 + // Development:开发工具,如IDE、编辑器等。 + // Education:教育类应用程序,如学习工具、教育游戏等。 + // Game:游戏应用程序。 + // Graphics:图形设计和编辑工具。 + // Office:办公软件,如文档编辑器、电子表格、演示文稿等。 + // Science:科学工具和应用程序,如数学、物理学、化学工具等。 + // Settings:系统设置工具。 + // System:系统工具,如文件管理器、终端模拟器等。 + // Utility:实用工具,如压缩软件、文本编辑器等。 + + ui->cbCategories->addItem("Audio"); + ui->cbCategories->addItem("Video"); + ui->cbCategories->addItem("Development"); + ui->cbCategories->addItem("Education"); + ui->cbCategories->addItem("Game"); + ui->cbCategories->addItem("Graphics"); + ui->cbCategories->addItem("Office"); + ui->cbCategories->addItem("Science"); + ui->cbCategories->addItem("Settings"); + ui->cbCategories->addItem("Utility"); + ui->cbCategories->setCurrentIndex(ui->cbCategories->count() - 1); + + connect(ui->cbIsCustomIco, &QCheckBox::toggled, this, &AddDesktop::checkchange); + connect(ui->btnSelectBinary, &QPushButton::clicked, this, [=](){ + MainWidget::SelectFile(this, ui->edBinary, "请选择Qt二进制文件", "所有文件 (*)"); + }); + connect(ui->btnSelectIco, &QPushButton::clicked, this, [=](){ + MainWidget::SelectFile(this, ui->edIco, "请选择ico图标文件", "图标文件(*.ico);;所有文件 (*)"); + }); + connect(ui->btnInstall, &QPushButton::clicked, this, &AddDesktop::install_to_desktop); +} + +void AddDesktop::checkchange() +{ + if (ui->cbIsCustomIco->isChecked()) { + ui->edIco->setEnabled(false); + ui->btnSelectIco->setEnabled(false); + } + else { + ui->edIco->setEnabled(true); + ui->btnSelectIco->setEnabled(true); + } +} + +void AddDesktop::install_to_desktop() +{ + QFile file("://resource/desktop.txt"); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return; + } + QTextStream stream(&file); + QString content = stream.readAll(); + file.close(); + std::string ct = content.toStdString(); + std::string tool_name = fs::path(ui->edBinary->text().trimmed().toStdString()).filename().string(); + boost::replace_all(ct, "re_name", tool_name); + boost::replace_all(ct, "re_describe", tool_name); + boost::replace_all(ct, "re_path", ui->edBinary->text().trimmed().toStdString()); + boost::replace_all(ct, "re_icon", ui->edIco->text().trimmed().toStdString()); + boost::replace_all(ct, "re_category", ui->cbCategories->currentText().toStdString()); + + fs::path tmp = fs::path(QDir::homePath().toStdString()).append(".config"); + if (!fs::exists(tmp)) { + fs::create_directories(tmp); + } + tmp.append(tool_name + ".desktop");; + std::ofstream out(tmp.string(), std::ios::out); + if (!out.is_open()) { + return; + } + out << ct; + out.close(); + MainWidget::message(this, "完成"); + std::string cp_cmd("pkexec cp " + tmp.string() + " /usr/share/applications"); + system(cp_cmd.c_str()); +} + +AddDesktop::~AddDesktop() +{ + delete ui; +} diff --git a/adddesktop.h b/adddesktop.h new file mode 100644 index 0000000..79ff7e7 --- /dev/null +++ b/adddesktop.h @@ -0,0 +1,26 @@ +#ifndef ADDDESKTOP_H +#define ADDDESKTOP_H + +#include +#include "MainWidget.h" + +namespace Ui { +class AddDesktop; +} + +class AddDesktop : public QDialog +{ + Q_OBJECT + +public: + explicit AddDesktop(QWidget *parent = nullptr); + ~AddDesktop(); + +private: + void checkchange(); + void install_to_desktop(); +private: + Ui::AddDesktop *ui; +}; + +#endif // ADDDESKTOP_H diff --git a/adddesktop.ui b/adddesktop.ui new file mode 100644 index 0000000..0fe606f --- /dev/null +++ b/adddesktop.ui @@ -0,0 +1,155 @@ + + + AddDesktop + + + + 0 + 0 + 429 + 259 + + + + Dialog + + + + + + + + 二进制文件: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + 选择 + + + + + + + + + 使用默认图标 + + + + + + + + + 图标文件 (ICO): + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + 选择 + + + + + + + + + + + 程序类别: + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 安装到菜单 + + + + + + + + + + diff --git a/packqt.qrc b/packqt.qrc index 628c697..25a4ac2 100644 --- a/packqt.qrc +++ b/packqt.qrc @@ -1,5 +1,6 @@ resource/run.sh + resource/desktop.txt diff --git a/resource/desktop.txt b/resource/desktop.txt new file mode 100644 index 0000000..990eb76 --- /dev/null +++ b/resource/desktop.txt @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=re_name +Comment=re_describe +Exec=re_path +Icon=re_icon +Terminal=false +Type=Application +Categories=re_category;