diff --git a/NEWS.md b/NEWS.md index 38e1f8fa..6bf15963 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,9 @@ Red Panda C++ Version 0.14.4 - fix: error in templates - enhancement: git - reset - fix: header completion error when header name contains '+' + - enhancement: clear history in file -> recent menu + - enhancement: close project in project view's context menu + - enhancement: auto find compiler sets when run for the first time Red Panda C++ Version 0.14.3 - fix: wrong code completion font size, when screen dpi changed diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts index c8968fc8..d3cb8435 100644 --- a/RedPandaIDE/RedPandaIDE_zh_CN.ts +++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts @@ -1157,12 +1157,12 @@ Are you really want to continue? Debugger path error - 调试路径错误 + 调试路径器错误 Debugger's path "%1" contains non-ascii characters. - 调试路径"%1"中包含非ASCII字符(如,中文字符) + 调试器路径"%1"中包含非ASCII字符(如,中文字符) @@ -3236,22 +3236,22 @@ Are you really want to continue? 标签(Tag) - + Reset "%1" to this... 将"%1"回滚(Reset)到这里... - + Revert "%1" to this... 将"%1"撤销(Revert)到这里... - + Create Branch at this version... 在此版本创建分支(Branch)... - + Create Tag at this version... 在此版本创建标签(Tag)... @@ -3259,17 +3259,17 @@ Are you really want to continue? GitLogModel - + Date 日期 - + Author 作者 - + Title title 标题 @@ -3341,6 +3341,80 @@ Are you really want to continue? 取消 + + GitResetDialog + + + Reset + 回滚(Reset) + + + + + Reset current branch "%1" to + 将当前分支"%1"回滚到 + + + + Branch + 分支(Branch) + + + + Tag + 标签(Tag) + + + + Commit + 提交(Commit) + + + + Reset Type + 回滚操作类型 + + + + <html><head/><body><p>Leave working tree and index untouched</p></body></html> + <html><head/><body><p>保持当前工作区内容和索引不变</p></body></html> + + + + <html><head/><body><p>Reset working tree and index (discarding local changes)</p></body></html> + <html><head/><body><p>回滚工作区内容和索引(丢弃所有本地修改)</p></body></html> + + + + Soft + Soft + + + + Hard + Hard + + + + Leave working tree untouched, reset index + 保持工作区内容不变,回滚索引 + + + + Mixed + Mixed + + + + Ok + 确定 + + + + Cancel + 取消 + + InfoMessageBox @@ -3530,11 +3604,11 @@ Are you really want to continue? - - - - + + + + Issues 编译器 @@ -3608,7 +3682,7 @@ Are you really want to continue? - + Debug Console 调试主控台 @@ -3742,8 +3816,8 @@ Are you really want to continue? - - + + Compile 编译 @@ -3805,9 +3879,9 @@ Are you really want to continue? - - - + + + Copy 复制 @@ -3818,7 +3892,7 @@ Are you really want to continue? - + Paste 粘贴 @@ -3829,8 +3903,8 @@ Are you really want to continue? - - + + Select All 选择全部 @@ -3957,7 +4031,7 @@ Are you really want to continue? - + New Problem Set 新建试题集 @@ -3976,14 +4050,14 @@ Are you really want to continue? - + Save Problem Set 保存试题集 - + Load Problem Set 载入试题集 @@ -4322,7 +4396,7 @@ Are you really want to continue? - + Clear all breakpoints 删除所有断点 @@ -4423,7 +4497,7 @@ Are you really want to continue? - + Rename Symbol 重命名符号 @@ -4444,13 +4518,13 @@ Are you really want to continue? - + Export As RTF 导出为RTF - + Export As HTML 导出为HTML @@ -4666,7 +4740,7 @@ Are you really want to continue? - + Open Folder 打开文件夹 @@ -4676,7 +4750,7 @@ Are you really want to continue? 运行参数... - + File Encoding 文件编码 @@ -4720,178 +4794,178 @@ Are you really want to continue? 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Line:%1 Col:%2 Selected:%3 Lines:%4 Length:%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' - + Open Source File 打开源代码文件 - + Show detail debug logs 显示详细调试器日志 - + Copy all 全部复制 - - - + + + Clear 清除 @@ -4907,7 +4981,7 @@ Are you really want to continue? - + Problem Set %1 试题集%1 @@ -4928,68 +5002,68 @@ Are you really want to continue? 或者选择使用其他的网络端口。 - - + + Rebuild Project 重新构建项目 - - + + Project has been modified, do you want to rebuild it? 项目已经被修改过,是否需要重新构建? - + Auto Save Error 自动保存出错 - + Auto save "%1" to "%2" failed:%3 自动保存"%1"到"%2"失败:%3 - + Properties... 试题属性... - + Set Problem Set Name 设置试题集名称 - + Problem Set Name: 试题集名称: - + Remove 删除 - + Remove All Bookmarks 删除全部书签 - + Modify Description 修改描述 - - - + + + Bookmark Description 书签描述 - - - + + + Description: 描述: @@ -4998,337 +5072,337 @@ Are you really want to continue? 在调试主控台中显示调试器输出 - + Remove this search 清除这次搜索 - + Clear all searches 删除所有搜索 - + Breakpoint condition... 断点条件... - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Remove All Breakpoints Remove all breakpoints 删除所有断点 - + Remove Breakpoint 删除当前断点 - + Rename File 重命名文件 - - + + Add Folder 添加文件夹 - + New folder 新文件夹 - + Folder name: 文件夹: - + Rename Folder 重命名 - + Remove Folder 删除文件夹 - + Switch to normal view 切换为普通视图 - + Switch to custom view 切换为自定义视图 - + Sort By Type 按类型排序 - + Sort alphabetically 按名称排序 - + Show inherited members 显示继承的成员 - + Goto declaration 跳转到声明处 - + Goto definition 跳转到定义处 - - - + + + New Folder 新建文件夹 - - - - + + + + Delete 删除 - + Open in Editor 在编辑器中打开 - + Open in External Program 使用外部程序打开 - + Open in Terminal 在终端中打开 - + Open in Windows Explorer 在Windows浏览器中打开 - + Character sets 字符集 - + %1 files autosaved 已自动保存%1个文件 - + Set answer to... 设置答案源代码... - + select other file... 选择其他文件... - + Select Answer Source File 选择答案源代码文件 - + C/C++Source Files (*.c *.cpp *.cc *.cxx) C/C++Source Files (*.c *.cpp *.cc *.cxx C/C++源代码文件 (*.c *.cpp *.cc *.cxx) - + Do you really want to delete %1? 你真的要删除%1吗? - + Do you really want to delete %1 files? 你真的要删除%1个文件吗? - + Save project 保存项目 - + The project '%1' has modifications. 项目'%1'有改动。 - - + + Do you want to save it? 需要保存吗? - - + + File Changed 文件已发生变化 - + New Project File? 新建项目文件? - + Do you want to add the new file to the project? 您是否要将新建的文件加入项目? - - - + + + Save Error 保存失败 - + Change Project Compiler Set 改变项目编译器配置集 - + Change the project's compiler set will lose all custom compiler set options. 改变项目的编译器配置集会导致所有的自定义编译器选项被重置。 - + Do you really want to do that? 你真的想要做那些吗? - + 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 - + Folder %1 is not empty. 文件夹%1不是空的。 - + Do you really want to delete it? 你真的要删除它吗? - - + + Header Exists 头文件已存在 - - + + Header file "%1" already exists! 头文件"%1"已存在! - + Source Exists 源文件已存在! - + Source file "%1" already exists! 源文件"%1"已存在! - + Can't commit! 无法提交! - + The following files are in conflicting: 下列文件处于冲突状态,请解决后重新添加和提交: - + Commit Message 提交信息 - + Commit Message: 提交信息: - + Commit Failed 提交失败 - + Commit message shouldn't be empty! 提交信息不能为空! @@ -5337,125 +5411,125 @@ Are you really want to continue? 小熊猫Dev-C++项目文件 (*.dev) - + New project fail 新建项目失败 - + Can't assign project template 无法使用模板创建项目 - + Remove file 删除文件 - + Remove the file from disk? 同时从硬盘上删除文件? - + untitled 无标题 - + New Project File Name 新的项目文件名 - + File Name: 文件名: - + File Already Exists! 文件已存在! - + File '%1' already exists! 文件'%1'已经存在! - + Add to project 添加到项目 - + Red Panda C++ project file (*.dev) 小熊猫C++项目文件(*.dev) - + Rename Error 重命名出错 - + Symbol '%1' is defined in system header. 符号'%1'在系统头文件中定义,无法修改。 - + New Name 新名称 - + Replace Error 替换出错 - + Can't open file '%1' for replace! 无法打开文件'%1'进行替换! - + Contents has changed since last search! 内容和上次查找时不一致。 - + Rich Text Format Files (*.rtf) RTF格式文件 (*.rtf) - + HTML Files (*.html) HTML文件 (*.html) - + The current problem set is not empty. 当前的试题集不是空的。 - + Problem %1 试题%1 - - + + Problem Set Files (*.pbs) 试题集文件 (*.pbs) - + Load Error 载入失败 - - + + Problem Case %1 试题案例%1 @@ -5466,15 +5540,15 @@ Are you really want to continue? - - - - - - - - - + + + + + + + + + Error 错误 @@ -5489,81 +5563,87 @@ Are you really want to continue? 载入主题失败 - - + + + Clear History + 清除历史 + + + + Version Control 版本控制 - + 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个文件) @@ -7698,7 +7778,7 @@ Are you really want to continue? 自动链接 - + @@ -7774,15 +7854,15 @@ Are you really want to continue? 杂项 - - + + Program Runner 程序运行 - + Problem Set 试题集 diff --git a/RedPandaIDE/main.cpp b/RedPandaIDE/main.cpp index c2b84d3d..ed90e17c 100644 --- a/RedPandaIDE/main.cpp +++ b/RedPandaIDE/main.cpp @@ -75,7 +75,7 @@ bool WindowLogoutEventFilter::nativeEventFilter(const QByteArray & /*eventType*/ } #endif -QString getSettingFilename(const QString& filepath = QString()) { +QString getSettingFilename(const QString& filepath, bool& firstRun) { QString filename; if (filepath.isEmpty()) { if (isGreenEdition()) { @@ -90,6 +90,7 @@ QString getSettingFilename(const QString& filepath = QString()) { } QFileInfo fileInfo(filename); + firstRun = !fileInfo.exists(); QDir dir(fileInfo.absoluteDir()); if (!dir.exists()) { if (!dir.mkpath(dir.absolutePath())) { @@ -115,12 +116,14 @@ int main(int argc, char *argv[]) //Translation must be loaded first QTranslator trans,transQt; - QString settingFilename = getSettingFilename(); + bool firstRun; + QString settingFilename = getSettingFilename(QString(), firstRun); if (!isGreenEdition()) { QDir::setCurrent(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation)[0]); } if (settingFilename.isEmpty()) return -1; + { QSettings languageSetting(settingFilename,QSettings::IniFormat); languageSetting.beginGroup(SETTING_ENVIRONMENT); @@ -149,6 +152,11 @@ int main(int argc, char *argv[]) auto charsetInfoManager = std::unique_ptr(pCharsetInfoManager); //load settings pSettings = new Settings(settingFilename); + if (firstRun) { + pSettings->compilerSets().findSets(); + pSettings->compilerSets().saveSets(); + } + pSettings->load(); auto settings = std::unique_ptr(pSettings); //Color scheme settings must be loaded after translation diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp index 499c01e4..2ed26857 100644 --- a/RedPandaIDE/mainwindow.cpp +++ b/RedPandaIDE/mainwindow.cpp @@ -905,30 +905,42 @@ void MainWindow::rebuildOpenedFileHisotryMenu() { mMenuRecentFiles->clear(); mMenuRecentProjects->clear(); - if (pSettings->history().openedFiles().size()==0) { + if (pSettings->history().opennedFiles().size()==0) { mMenuRecentFiles->setEnabled(false); } else { mMenuRecentFiles->setEnabled(true); - for (const QString& filename: pSettings->history().openedFiles()) { + for (const QString& filename: pSettings->history().opennedFiles()) { QAction* action = new QAction(filename,mMenuRecentFiles); connect(action, &QAction::triggered, [&filename,this](bool){ openFile(filename); }); mMenuRecentFiles->addAction(action); } + mMenuRecentFiles->addSeparator(); + QAction *action = new QAction(tr("Clear History"),mMenuRecentFiles); + connect(action, &QAction::triggered, [](bool){ + pSettings->history().clearOpennedFiles(); + }); + mMenuRecentFiles->addAction(action); } - if (pSettings->history().openedProjects().size()==0) { + if (pSettings->history().opennedProjects().size()==0) { mMenuRecentProjects->setEnabled(false); } else { mMenuRecentProjects->setEnabled(true); - for (const QString& filename: pSettings->history().openedProjects()) { + for (const QString& filename: pSettings->history().opennedProjects()) { QAction* action = new QAction(filename,mMenuRecentProjects); connect(action, &QAction::triggered, [&filename,this](bool){ this->openProject(filename); }); mMenuRecentProjects->addAction(action); } + mMenuRecentProjects->addSeparator(); + QAction *action = new QAction(tr("Clear History"),mMenuRecentProjects); + connect(action, &QAction::triggered, [](bool){ + pSettings->history().clearOpennedProjects(); + }); + mMenuRecentProjects->addAction(action); } } @@ -3061,6 +3073,8 @@ void MainWindow::onProjectViewContextMenu(const QPoint &pos) menu.addAction(mProject_SwitchCustomViewMode); } menu.addAction(ui->actionProject_options); + menu.addSeparator(); + menu.addAction(ui->actionClose_Project); if (pSettings->vcs().gitOk() && hasRepository) { mProject->model()->iconProvider()->update(); diff --git a/RedPandaIDE/settings.cpp b/RedPandaIDE/settings.cpp index fc85ea6a..78c593a2 100644 --- a/RedPandaIDE/settings.cpp +++ b/RedPandaIDE/settings.cpp @@ -49,7 +49,7 @@ Settings::Settings(const QString &filename): mUI(this), mVCS(this) { - load(); + //load(); } Settings::~Settings() @@ -3451,16 +3451,26 @@ Settings::History::History(Settings *settings):_Base(settings, SETTING_HISTORY) } -const QStringList &Settings::History::openedFiles() const +const QStringList &Settings::History::opennedFiles() const { return mOpenedFiles; } -const QStringList &Settings::History::openedProjects() const +const QStringList &Settings::History::opennedProjects() const { return mOpenedProjects; } +void Settings::History::clearOpennedFiles() +{ + mOpenedFiles.clear(); +} + +void Settings::History::clearOpennedProjects() +{ + mOpenedProjects.clear(); +} + bool Settings::History::addToOpenedFiles(const QString &filename) { if (!QFile(filename).exists()) diff --git a/RedPandaIDE/settings.h b/RedPandaIDE/settings.h index 1b198018..5ad71a1a 100644 --- a/RedPandaIDE/settings.h +++ b/RedPandaIDE/settings.h @@ -803,8 +803,10 @@ public: public: explicit History(Settings *settings); - const QStringList& openedFiles() const; - const QStringList& openedProjects() const; + const QStringList& opennedFiles() const; + const QStringList& opennedProjects() const; + void clearOpennedFiles(); + void clearOpennedProjects(); bool addToOpenedFiles(const QString& filename); void removeFile(const QString& filename); bool addToOpenedProjects(const QString& filename);