From 4fe1766ccd347ad78d44760039472b41d9f7ae23 Mon Sep 17 00:00:00 2001 From: "royqh1979@gmail.com" Date: Sun, 3 Oct 2021 23:12:20 +0800 Subject: [PATCH] - add: about dialog --- NEWS.md | 1 + RedPandaIDE/RedPandaIDE.pro | 3 + RedPandaIDE/RedPandaIDE_zh_CN.qm | Bin 83447 -> 86710 bytes RedPandaIDE/RedPandaIDE_zh_CN.ts | 581 ++++++++++++++++------------ RedPandaIDE/mainwindow.cpp | 8 + RedPandaIDE/mainwindow.h | 2 + RedPandaIDE/mainwindow.ui | 27 +- RedPandaIDE/widgets/aboutdialog.cpp | 19 + RedPandaIDE/widgets/aboutdialog.h | 22 ++ RedPandaIDE/widgets/aboutdialog.ui | 77 ++++ 10 files changed, 476 insertions(+), 264 deletions(-) create mode 100644 RedPandaIDE/widgets/aboutdialog.cpp create mode 100644 RedPandaIDE/widgets/aboutdialog.h create mode 100644 RedPandaIDE/widgets/aboutdialog.ui diff --git a/NEWS.md b/NEWS.md index cdd9a8ae..5f40256c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,6 +5,7 @@ Version 0.6.0 - fix: errors in code snippet processing - change: auto open a new editor at start - enhancement: todo view + - add: about dialog Version 0.5.0 - enhancement: support C++ using type alias; diff --git a/RedPandaIDE/RedPandaIDE.pro b/RedPandaIDE/RedPandaIDE.pro index 75769746..731d2ef5 100644 --- a/RedPandaIDE/RedPandaIDE.pro +++ b/RedPandaIDE/RedPandaIDE.pro @@ -61,6 +61,7 @@ SOURCES += \ settingsdialog/projectversioninfowidget.cpp \ symbolusagemanager.cpp \ todoparser.cpp \ + widgets/aboutdialog.cpp \ widgets/classbrowser.cpp \ widgets/codecompletionlistview.cpp \ widgets/codecompletionpopup.cpp \ @@ -163,6 +164,7 @@ HEADERS += \ settingsdialog/projectversioninfowidget.h \ symbolusagemanager.h \ todoparser.h \ + widgets/aboutdialog.h \ widgets/classbrowser.h \ widgets/codecompletionlistview.h \ widgets/codecompletionpopup.h \ @@ -236,6 +238,7 @@ FORMS += \ settingsdialog/projectoutputwidget.ui \ settingsdialog/projectprecompilewidget.ui \ settingsdialog/projectversioninfowidget.ui \ + widgets/aboutdialog.ui \ widgets/cpudialog.ui \ mainwindow.ui \ settingsdialog/compilersetdirectorieswidget.ui \ diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm index d7b4c7e78b02b4ca38c82b92350eefa44b098e71..c7a9354608d891018c86c5efa63f03bc2c1248a7 100644 GIT binary patch delta 11152 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 delta 8271 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 WdzibdW4q|wtA~GD=6 + + AboutDialog + + + About + 关于 + + + + <h1>Red-Panda Dev-Cpp 7</h1> + <h1>小熊猫Dev-Cpp 7</h1> + + + + <html><head/><body><p>Based on Qt %1 (%2)</p><p>Build time: %3 %4</p><p>Copyright 2020-2021 royqh1979@gmail.com</p><p>Homepage: <a href="https://sourceforge.net/projects/dev-cpp-2020/"><span style=" text-decoration: underline; color:#007af4;">https://sourceforge.net/projects/dev-cpp-2020/</span></a></p></body></html> + <html><head/><body><p>基于 Qt %1 (%2)</p><p>构建时间: %3 %4</p><p>Copyright 2020-2021 royqh1979@gmail.com</p><p>主页: <a href="https://royqh.net/devcpp/"><span style=" text-decoration: underline; color:#007af4;">https://royqh.net/devcpp/</span></a></p></body></html> + + + + GNU General Public License + GNU通用公共许可 + + + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + + + Version: + 版本: + + AutolinkModel @@ -2407,7 +2462,7 @@ Are you really want to continue? - + Issues 编译器 @@ -2427,8 +2482,8 @@ Are you really want to continue? 工具 - - + + Run 运行 @@ -2464,9 +2519,9 @@ Are you really want to continue? - - - + + + Debug 调试 @@ -2522,7 +2577,7 @@ Are you really want to continue? 替换 - + Close 关闭 @@ -2533,7 +2588,7 @@ Are you really want to continue? - + Code 代码 @@ -2551,249 +2606,249 @@ Are you really want to continue? 工具栏2 - + New 新建 - + Ctrl+N Ctrl+N - + Open... 打开... - + Ctrl+O Ctrl+O - + Save 保存 - + Ctrl+S Ctrl+S - + Save As... 另存为... - + Save As 另存为 - + Save All 全部保存 - + Ctrl+Shift+S Ctrl+Shift+S - + Options 选项 - - - - - - - + + + + + + + Compile 编译 - + F9 F9 - + F10 F10 - + Undo 恢复 - + Ctrl+Z Ctrl+Z - + Redo 重做 - + Ctrl+Y Ctrl+Y - + Cut 剪切 - + Ctrl+X Ctrl+X - - - + + + Copy 复制 - + Ctrl+C Ctrl+C - - + + Paste 粘贴 - + Ctrl+V Ctrl+V - - + + Select All 选择全部 - + Ctrl+A Ctrl+A - + Indent 缩进 - + UnIndent 取消缩进 - + Toggle Comment 切换注释 - + Ctrl+/ Ctrl+/ - + Collapse All 全部收起 - + Uncollapse All 全部展开 - + Encode in ANSI 使用ANSI编码 - + Encode in UTF-8 使用UTF-8编码 - + Auto Detect 自动检测 - + Convert to ANSI 转换为ANSI编码 - + Convert to UTF-8 转换为UTF-8编码 - - + + Compile & Run 编译运行 - + F11 F11 - - + + Rebuild All 全部重编译 - + F12 F12 - + Stop Execution 停止执行 - + F6 F6 - + F5 F5 - + Step Over 单步跳过 - + F7 F7 - + Step Into 单步进入 @@ -2814,354 +2869,364 @@ Are you really want to continue? TODO - + + Help + 帮助 + + + Main 主工具栏 - + Compiler Set 编译器配置集 - - + + New Source File 新建源代码文件 - + F8 F8 - + Step Out 单步跳出 - + Ctrl+F8 Ctrl+F8 - + Run To Cursor 执行到光标处 - + Ctrl+F5 Ctrl+F5 - + Continue 继续执行 - + F4 F4 - + Add Watch... 添加监视 - + View CPU Window... 打开CPU信息窗口... - + Exit 退出 - + Find... 查找... - + Ctrl+F Ctrl+F - + Find in Files... 在文件中查找... - + Ctrl+Shift+F Ctrl+Shift+F - + Replace... 替换 - + Ctrl+R Ctrl+R - + Find Next 查找下一个 - + F3 F3 - + Find Previous 查找前一个 - + Shift+F3 Shift+F3 - + Remove Watch 删除监视 - + Remove All 清除全部监视 - + Modify Watch... 修改监视值 - + Reformat Code 对代码重新排版 - + Ctrl+Shift+A Ctrl+Shift+A - + Go back 前一次编辑位置 - + Ctrl+Alt+Left Ctrl+Alt+Left - + Forward 后一次编辑位置 - + Ctrl+Alt+Right Ctrl+Alt+Right - + Ctrl+W Ctrl+W - + Close All 全部关闭 - + Ctrl+Shift+W Ctrl+Shift+W - + Maximize Editor 最大化编辑器 - + Ctrl+F11 Ctrl+F11 - + Next 下一窗口 - + Ctrl+Tab Ctrl+Tab - + Previous 前一窗口 - + Ctrl+Shift+Tab Ctrl+Shift+Tab - + Toggle breakpoint 切换断点 - + Ctrl+F4 Ctrl+F4 - - + + Clear all breakpoints 删除所有断点 - + Breakpoint property... 设置断点条件... - + Goto Declaration 跳转到声明处 - + Goto Definition 跳转到定义处 - + Find references 查找符号的引用 - + Open containing folder 打开所在的文件夹 - + Ctrl+B Ctrl+B - + Open a terminal here 打开命令行窗口 - + File Properties... 文件属性... - + Close Project 关闭项目 - + Project options 项目属性 - + New Project... 新建项目... - + New File 新建项目文件 - + Add to project... 添加到项目... - + Remove from project 从项目删除 - + View Makefile 查看Makefile - + Clean 清理构建文件 - + Open Folder in Explorer 在浏览器中打开 - + Open In Terminal 在终端中打开 - + + About + 关于 + + + File Encoding 文件编码 - + Recent Files 文件历史 - - - - - - + + + + + + Debugging 正在调试 - - - - - - + + + + + + Running 正在运行 - - - - - - + + + + + + Compiling 正在编译 @@ -3170,433 +3235,433 @@ Are you really want to continue? 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Line:%1 Col:%2 Selected:%3 Lines:%4 Length:%5 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Read Only 只读 - + Insert 插入 - + Overwrite 覆写 - + Close project 关闭项目 - + Are you sure you want to close %1? 你确定要关闭'%1'吗? - - + + Confirm 确认 - - - + + + Source file is not compiled. 源文件尚未编译。 - - + + Compile now? 现在编译? - - + + Source file is more recent than executable. 源文件比可执行程序新。 - + Recompile now? 重新编译? - + No compiler set 无编译器设置 - + No compiler set is configured. 没有配置编译器设置。 - + Can't start debugging. 无法启动调试器 - - + + Enable debugging 启用调试参数 - - + + You have not enabled debugging info (-g3) and/or stripped it from the executable (-s) in Compiler Options.<BR /><BR />Do you want to correct this now? 当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题? - + Project not built 项目尚未构建 - + Project hasn't been built. Build it now? 项目尚未构建。是否构建? - + Host applcation missing 宿主程序不存在 - + DLL project needs a host application to run. 动态链接库(DLL)需要一个宿主程序来运行。 - + But it's missing. 但它不存在。 - + Host application not exists 宿主程序不存在 - + Host application file '%1' doesn't exist. 宿主程序'%1'不存在。 - + Recompile? 重新编译? - - + + Save last open info error 保存上次打开信息失败 - + Can't remove old last open information file '%1' 无法删除旧上次打开信息文件'%1' - + Can't save last open info file '%1' 无法保存上次打开信息文件'%1' - + Load last open info error 载入上次打开信息失败 - + Can't load last open info file '%1' 无法载入上次打开信息文件'%1' - + Copy all 全部复制 - - + + Clear 清除 - + Show debug logs in the debug console 在调试主控台中显示调试器输出 - + Remove this search 清除这次搜索 - + Clear all searches 删除所有搜索 - + Breakpoint condition... 断点条件... - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Remove all breakpoints 清除所有断点 - + Rename File 重命名文件 - - + + Add Folder 添加文件夹 - + New folder 新文件夹 - + Folder name: 文件夹: - + Rename Folder 重命名 - + Remove Folder 删除文件夹 - + Sort By Type 按类型排序 - + Sort alphabetically 按名称排序 - + Show inherited members 显示继承的成员 - + Goto declaration 跳转到声明处 - + Goto definition 跳转到定义处 - + Character sets 字符集 - + %1 files autosaved 已自动保存%1个文件 - + Save project 保存项目 - + The project '%1' has modifications. 项目'%1'有改动。 - + Do you want to save it? 需要保存吗? - + Do you really want to clear all breakpoints in this file? 您真的要清除该文件的所有断点吗? - + New project 新建项目 - + Close %1 and start new project? 关闭'%1'以打开新项目? - + Folder not exist 文件夹不存在 - + Folder '%1' doesn't exist. Create it now? 文件夹'%1'不存在。是否创建? - + Can't create folder 无法创建文件夹 - + Failed to create folder '%1'. 创建文件夹'%1'失败。 - + Save new project as - + Red panda Dev-C++ project file (*.dev) 小熊猫Dev-C++项目文件 (*.dev) - + New project fail 新建项目失败 - + Can't assign project template 无法使用模板创建项目 - + Add to project 添加到项目 - - - - - - - - - + + + + + + + + + Error 错误 - + Recent Projects 项目历史 - + File '%1' was changed. 磁盘文件'%1'已被修改。 - + Reload its content from disk? 是否重新读取它的内容? - + File '%1' was removed. 磁盘文件'%1'已被删除。 - + Keep it open? 是否保持它在小熊猫C++中打开的编辑窗口? - + Open 打开 - + Compile Failed 编译失败 - + Run Failed 运行失败 - - + + Confirm Convertion 确认转换 - - + + The editing file will be saved using %1 encoding. <br />This operation can't be reverted. <br />Are you sure to continue? 当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗? - + New Watch Expression 新监视表达式 - + Enter Watch Expression (it is recommended to use 'this->' for class members): 输入监视表达式 - + Parsing file %1 of %2: "%3" (%1/%2)正在解析文件"%3" - - + + Done parsing %1 files in %2 seconds 完成%1个文件的解析,用时%2秒 - + (%1 files per second) (每秒%1个文件) @@ -5618,22 +5683,22 @@ Are you really want to continue? TodoModel - + Filename 文件名 - + Line - + Column - + Content 内容 diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp index 4d2ba673..1980c053 100644 --- a/RedPandaIDE/mainwindow.cpp +++ b/RedPandaIDE/mainwindow.cpp @@ -13,6 +13,7 @@ #include "projecttemplate.h" #include "widgets/newprojectdialog.h" #include "platform.h" +#include "widgets/aboutdialog.h" #include #include @@ -3937,3 +3938,10 @@ void MainWindow::on_tableTODO_doubleClicked(const QModelIndex &index) } + +void MainWindow::on_actionAbout_triggered() +{ + AboutDialog dialog; + dialog.exec(); +} + diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h index 87974eb1..f2b8c1d2 100644 --- a/RedPandaIDE/mainwindow.h +++ b/RedPandaIDE/mainwindow.h @@ -369,6 +369,8 @@ private slots: void on_tableTODO_doubleClicked(const QModelIndex &index); + void on_actionAbout_triggered(); + private: Ui::MainWindow *ui; EditorList *mEditorList; diff --git a/RedPandaIDE/mainwindow.ui b/RedPandaIDE/mainwindow.ui index 2bfdea1f..e862755d 100644 --- a/RedPandaIDE/mainwindow.ui +++ b/RedPandaIDE/mainwindow.ui @@ -85,7 +85,7 @@ QTabWidget::West - 2 + 0 true @@ -192,11 +192,6 @@ - - - Files - - @@ -807,6 +802,10 @@ + + + :/icons/images/newlook24/039-gobook.png:/icons/images/newlook24/039-gobook.png + TODO @@ -944,6 +943,12 @@ + + + Help + + + @@ -952,6 +957,7 @@ + @@ -1765,6 +1771,15 @@ Open In Terminal + + + + :/icons/images/newlook24/001-about.png:/icons/images/newlook24/001-about.png + + + About + + diff --git a/RedPandaIDE/widgets/aboutdialog.cpp b/RedPandaIDE/widgets/aboutdialog.cpp new file mode 100644 index 00000000..2f11ac5f --- /dev/null +++ b/RedPandaIDE/widgets/aboutdialog.cpp @@ -0,0 +1,19 @@ +#include "aboutdialog.h" +#include "ui_aboutdialog.h" +#include "../systemconsts.h" + +AboutDialog::AboutDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AboutDialog) +{ + ui->setupUi(this); + ui->lblTitle->setText(ui->lblTitle->text() + tr("Version: ") + DEVCPP_VERSION); + ui->lblContent->setText(ui->lblContent->text() + .arg(qVersion()) + .arg("GCC 10.3.0",__DATE__, __TIME__)); +} + +AboutDialog::~AboutDialog() +{ + delete ui; +} diff --git a/RedPandaIDE/widgets/aboutdialog.h b/RedPandaIDE/widgets/aboutdialog.h new file mode 100644 index 00000000..4474ece8 --- /dev/null +++ b/RedPandaIDE/widgets/aboutdialog.h @@ -0,0 +1,22 @@ +#ifndef ABOUTDIALOG_H +#define ABOUTDIALOG_H + +#include + +namespace Ui { +class AboutDialog; +} + +class AboutDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutDialog(QWidget *parent = nullptr); + ~AboutDialog(); + +private: + Ui::AboutDialog *ui; +}; + +#endif // ABOUTDIALOG_H diff --git a/RedPandaIDE/widgets/aboutdialog.ui b/RedPandaIDE/widgets/aboutdialog.ui new file mode 100644 index 00000000..6f097bd5 --- /dev/null +++ b/RedPandaIDE/widgets/aboutdialog.ui @@ -0,0 +1,77 @@ + + + AboutDialog + + + + 0 + 0 + 656 + 537 + + + + About + + + + + + <h1>Red-Panda Dev-Cpp 7</h1> + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Based on Qt %1 (%2)</p><p>Build time: %3 %4</p><p>Copyright 2020-2021 royqh1979@gmail.com</p><p>Homepage: <a href="https://sourceforge.net/projects/dev-cpp-2020/"><span style=" text-decoration: underline; color:#007af4;">https://sourceforge.net/projects/dev-cpp-2020/</span></a></p></body></html> + + + + + + + + 0 + 0 + + + + GNU General Public License + + + + + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + + + + + + + + + +