diff --git a/NEWS.md b/NEWS.md
index 2a0fcc56..07332313 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -5,6 +5,8 @@ Red Panda C++ Version 2.18
- enhancement: Slightly speed up code parsing.
- enhancement: Sort header completion infos by suffix-trimmed filename.
- fix: Code completion info for stl::map/std::unordered_map is not correct.
+ - enhancement: Warn user and stop compile if project has missing files.
+ - enhancement: Warn user when exit and save settings failed.
Red Panda C++ Version 2.17
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index a9db4cd3..0d985370 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -1923,6 +1923,27 @@ bool MainWindow::compile(bool rebuild, CppCompileType compileType)
mCompilerManager->stopPausing();
CompileTarget target =getCompileTarget();
if (target == CompileTarget::Project && compileType == CppCompileType::Normal) {
+ QStringList missedUnits;
+ foreach(const PProjectUnit &unit, mProject->unitList()) {
+ if (!fileExists(unit->fileName())) {
+ missedUnits.append(
+ extractRelativePath(
+ mProject->directory(),
+ unit->fileName()));
+ }
+ }
+ if (!missedUnits.empty()) {
+ ui->actionProject->setChecked(true);
+ showHideInfosTab(ui->tabProject,true);
+ ui->tabExplorer->setCurrentWidget(ui->tabProject);
+ QString s=missedUnits.join("
");
+ QMessageBox::critical(this,
+ tr("Missing Project Files"),
+ tr("The following files is missing, can't build the project:")
+ +"
"
+ +s);
+ return false;
+ }
if (mProject->modified()) {
mProject->saveAll();
}
@@ -1985,10 +2006,9 @@ bool MainWindow::compile(bool rebuild, CppCompileType compileType)
mCompilerManager->compile(editor->filename(),editor->fileEncoding(),rebuild,compileType);
updateCompileActions();
updateAppTitle();
- return true;
}
}
- return false;
+ return true;
}
void MainWindow::runExecutable(
@@ -5366,9 +5386,16 @@ void MainWindow::closeEvent(QCloseEvent *event) {
settings.setShrinkMessagesTabs(ui->tabMessages->isShrinked());
settings.save();
+ if (pSettings->sync()!=QSettings::NoError) {
+ QMessageBox::warning(nullptr,
+ tr("Save Error"),
+ tr("Save settings failed!"));
+ }
+
//save current folder ( for files view )
pSettings->environment().setDefaultOpenFolder(QDir::currentPath());
pSettings->environment().save();
+
try {
mBookmarkModel->saveBookmarks(includeTrailingPathDelimiter(pSettings->dirs().config())
+DEV_BOOKMARK_FILE);
diff --git a/RedPandaIDE/project.cpp b/RedPandaIDE/project.cpp
index 41cdce6d..b710d036 100644
--- a/RedPandaIDE/project.cpp
+++ b/RedPandaIDE/project.cpp
@@ -228,7 +228,7 @@ void Project::open()
// QMessageBox::Ok);
// newUnit->setModified(true);
// } else {
- newUnit->setFileMissing(!QFileInfo(newUnit->fileName()).exists());
+// newUnit->setFileMissing(!QFileInfo(newUnit->fileName()).exists());
newUnit->setFolder(fromByteArray(ini.GetValue(groupName,"Folder","")));
newUnit->setCompile(ini.GetBoolValue(groupName,"Compile", true));
newUnit->setCompileCpp(
@@ -2347,7 +2347,7 @@ ProjectUnit::ProjectUnit(Project* parent)
{
mNode = nullptr;
mParent = parent;
- mFileMissing = false;
+// mFileMissing = false;
mPriority=0;
mNew = true;
mEncoding=ENCODING_PROJECT;
@@ -2490,15 +2490,15 @@ void ProjectUnit::setNode(const PProjectModelNode &newNode)
mNode = newNode;
}
-bool ProjectUnit::FileMissing() const
-{
- return mFileMissing;
-}
+//bool ProjectUnit::FileMissing() const
+//{
+// return mFileMissing;
+//}
-void ProjectUnit::setFileMissing(bool newDontSave)
-{
- mFileMissing = newDontSave;
-}
+//void ProjectUnit::setFileMissing(bool newDontSave)
+//{
+// mFileMissing = newDontSave;
+//}
ProjectModel::ProjectModel(Project *project, QObject *parent):
QAbstractItemModel(parent),
diff --git a/RedPandaIDE/project.h b/RedPandaIDE/project.h
index a6c67141..770493bb 100644
--- a/RedPandaIDE/project.h
+++ b/RedPandaIDE/project.h
@@ -99,8 +99,8 @@ public:
PProjectModelNode &node();
void setNode(const PProjectModelNode &newNode);
- bool FileMissing() const;
- void setFileMissing(bool newDontSave);
+// bool FileMissing() const;
+// void setFileMissing(bool newDontSave);
void setNew(bool newNew);
@@ -121,7 +121,7 @@ private:
QByteArray mEncoding;
QByteArray mRealEncoding;
PProjectModelNode mNode;
- bool mFileMissing;
+// bool mFileMissing;
};
using PProjectUnit = std::shared_ptr;
diff --git a/RedPandaIDE/settings.cpp b/RedPandaIDE/settings.cpp
index 06b28d75..e99c0238 100644
--- a/RedPandaIDE/settings.cpp
+++ b/RedPandaIDE/settings.cpp
@@ -56,7 +56,7 @@ Settings::Settings(const QString &filename):
Settings::~Settings()
{
- mEditor.save();
+ //mEditor.save();
}
void Settings::beginGroup(const QString &group)
@@ -116,6 +116,12 @@ void Settings::load()
mLanguages.load();
}
+QSettings::Status Settings::sync()
+{
+ mSettings.sync();
+ return mSettings.status();
+}
+
Settings::Dirs &Settings::dirs()
{
return mDirs;
diff --git a/RedPandaIDE/settings.h b/RedPandaIDE/settings.h
index 9256a913..1305a79d 100644
--- a/RedPandaIDE/settings.h
+++ b/RedPandaIDE/settings.h
@@ -1538,6 +1538,7 @@ public:
QVariant value(const QString& group, const QString &key, const QVariant& defaultValue);
QVariant value(const QString &key, const QVariant& defaultValue);
void load();
+ QSettings::Status sync();
Dirs& dirs();
Editor& editor();
diff --git a/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts b/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts
index 81639e22..6f233c3e 100644
--- a/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts
+++ b/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts
@@ -5127,6 +5127,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
MemoryModel
diff --git a/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts b/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts
index 6d001e75..21a66f74 100644
--- a/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts
@@ -662,30 +662,30 @@ p, li { white-space: pre-wrap; }
CompilerManager
+
+
+
+
+
+
+
+ 无编译器设置
+
-
- 无编译器设置
-
-
-
-
-
-
-
没有配置编译器设置。
-
-
-
-
-
+
+
+
+
+
无法启动调试器
@@ -702,12 +702,12 @@ p, li { white-space: pre-wrap; }
程序中的文字内容可能无法被正确处理和显示。
-
+
找不到Console Pauser程序
-
+
找不到Console Pauser程序"%1"!
@@ -4255,11 +4255,11 @@ Are you really want to continue?
-
-
-
-
-
+
+
+
+
+
编译器
@@ -4543,9 +4543,9 @@ Are you really want to continue?
-
-
-
+
+
+
复制
@@ -4556,7 +4556,7 @@ Are you really want to continue?
-
+
粘贴
@@ -4567,8 +4567,8 @@ Are you really want to continue?
-
-
+
+
选择全部
@@ -4691,38 +4691,38 @@ Are you really want to continue?
-
-
+
+
新建试题集
-
+
添加试题
-
+
删除试题
-
-
+
+
保存试题集
-
-
+
+
载入试题集
@@ -4770,7 +4770,7 @@ Are you really want to continue?
-
+
Remove Problem Set
删除试题集
@@ -4778,21 +4778,21 @@ Are you really want to continue?
-
+
打开答案源代码文件
-
+
Run Current Case
运行所有案例
-
+
测试案例验证选项
@@ -4852,15 +4852,15 @@ Are you really want to continue?
-
-
+
+
导入FPS试题集
-
-
+
+
导出FPS试题集
@@ -5107,7 +5107,7 @@ Are you really want to continue?
-
+
删除所有断点
@@ -5367,7 +5367,7 @@ Are you really want to continue?
保存为模板...
-
+
新建文件
@@ -5408,7 +5408,7 @@ Are you really want to continue?
-
+
重命名符号
@@ -5429,13 +5429,13 @@ Are you really want to continue?
-
+
导出为RTF
-
+
导出为HTML
@@ -5704,7 +5704,7 @@ Are you really want to continue?
运行参数...
-
+
文件编码
@@ -5780,7 +5780,7 @@ Are you really want to continue?
确认
-
+
源文件尚未编译。
@@ -5797,44 +5797,44 @@ Are you really want to continue?
重新编译?
-
-
-
-
+
+
+
+
错误的编译器设置
-
-
-
-
+
+
+
+
编译器被设置为不生成可执行文件。
-
-
+
+
我们需要可执行文件来运行试题案例。
-
+
无编译器设置
-
+
没有配置编译器设置。
-
+
无法启动调试器
-
+
启用调试参数
@@ -5851,33 +5851,33 @@ Are you really want to continue?
项目尚未构建。是否构建?
-
+
宿主程序不存在
-
+
动态链接库(DLL)需要一个宿主程序来运行。
-
+
但它不存在。
-
+
宿主程序不存在
-
+
宿主程序'%1'不存在。
-
-
+
+
请在调试前改正设置。
@@ -5886,8 +5886,8 @@ Are you really want to continue?
重新编译?
-
-
+
+
保存上次打开信息失败
@@ -5896,60 +5896,60 @@ Are you really want to continue?
无法删除旧上次打开信息文件'%1'
-
+
无法保存上次打开信息文件'%1'
-
-
+
+
载入上次打开信息失败
-
-
+
+
无法载入上次打开信息文件'%1'
-
+
打开源代码文件
-
-
+
+
批量设置案例
-
+
显示详细调试器日志
-
+
全部复制
-
+
跳转到行
-
+
行
-
+
模板已存在
-
+
模板%1已存在。是否覆盖?
@@ -5957,9 +5957,9 @@ Are you really want to continue?
-
-
-
+
+
+
清除
@@ -5975,7 +5975,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -6004,56 +6004,56 @@ Are you really want to continue?
项目已经被修改过,是否需要重新构建?
-
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
-
+
+
+
书签描述
-
-
-
+
+
+
描述:
@@ -6062,65 +6062,65 @@ Are you really want to continue?
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
-
+
+
新文件夹
-
+
文件夹:
-
+
重命名
@@ -6133,17 +6133,17 @@ Are you really want to continue?
要现在去修改设置吗?
-
+
修改试题集名称
-
+
无法写入配置文件'%1'。
-
+
修改试题名称
@@ -6153,212 +6153,227 @@ Are you really want to continue?
行: %1 列: %2 总行数: %3
-
+
改正编译器设置
-
-
+
+
您使用的Debug编译器配置集中存在错误的“编译/链接”选项设置:
-
-
+
+
- 应勾选"生成调试信息(-g3)"选项
-
+
- 应取消"剥除附加信息(-s)"选项
-
-
+
+
是否现在去改正?
-
-
+
+
+ 项目文件缺失
+
+
+
+
+ 下列项目文件缺失,无法构建项目:
+
+
+
+
无法调试
-
-
+
+
您的编译器配置集中的“剥除附加信息(-s)”选项被勾选了。
-
-
+
+
请取消该设置,重新编译然后重新启动调试。
-
+
跳转到试题网址
-
+
添加试题案例
-
+
运行当前案例
-
+
删除文件夹
-
+
切换为普通视图
-
+
切换为自定义视图
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
+
仅当前文件
-
+
整个项目
-
-
+
+
新建文件夹
-
+
重命名
-
-
-
-
+
+
+
+
删除
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
转换为%1编码
-
+
换行符
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
-
+
变量断点被触发
-
+
"%1"的值发生了变化:
-
+
新值: %1
-
+
+
+ 保存设置失败
+
+
+
被监控的变量
-
+
当下面的变量被修改时暂停执行(该变量必须可以从当前程序处访问):
@@ -6367,17 +6382,17 @@ Are you really want to continue?
中止
-
+
FPS试题集文件(*.fps;*.xml)
-
+
FPS试题集文件(*.fps)
-
+
导出时出错
@@ -6387,7 +6402,7 @@ Are you really want to continue?
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
新建文件夹%1
@@ -6400,12 +6415,12 @@ Are you really want to continue?
无标题%1
-
+
你真的要删除%1吗?
-
+
你真的要删除%1个文件吗?
@@ -6418,7 +6433,7 @@ Are you really want to continue?
变量"%1"有改动:
-
+
旧值: %1
@@ -6427,62 +6442,63 @@ Are you really want to continue?
新值: %1
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
-
-
+
+
+
新建项目文件?
-
-
-
+
+
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
-
+
+
你真的想要那么做吗?
@@ -6491,12 +6507,12 @@ Are you really want to continue?
批量设置案例
-
+
选择输入数据文件
-
+
输入数据文件 (*.in)
@@ -6505,78 +6521,78 @@ Are you really want to continue?
无标题%1
-
+
修改监视表达式
-
+
监视表达式
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
文件夹%1不是空的。
-
+
你真的要删除它吗?
-
+
改变工作文件夹
-
+
File '%1' is not in the current working folder
文件'%1'不在当前工作文件夹中。
-
+
是否将工作文件夹改设为'%1'?
@@ -6585,28 +6601,28 @@ Are you really want to continue?
正在删除试题...
-
+
无法提交
-
+
Git需要用信息进行提交。
-
+
选择输入数据文件
-
-
+
+
所有文件 (*.*)
-
+
Choose Expected Input Data File
选择期望输出文件
@@ -6618,59 +6634,59 @@ Are you really want to continue?
-
+
选择工作文件夹
-
-
+
+
头文件已存在
-
-
+
+
头文件"%1"已存在!
-
+
源文件已存在!
-
+
源文件"%1"已存在!
-
+
无法提交!
-
+
下列文件处于冲突状态,请解决后重新添加和提交:
-
+
提交信息
-
+
提交信息:
-
+
提交失败
-
+
提交信息不能为空!
@@ -6679,22 +6695,22 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
@@ -6703,27 +6719,27 @@ Are you really want to continue?
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
@@ -6740,27 +6756,27 @@ Are you really want to continue?
请在工具栏中选择Debug编译器配置集,或者在“编译器配置集”设置的“编译/链接选项”页中<b>启用</b>“生成调试信息(-g3)”、<b>禁用</b>“剥除附件信息(-3)”。
-
+
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
本操作会删除此试题的所有案例。
-
+
调试失败
-
+
可执行文件中没有符号表信息,无法调试。
-
+
请在选项对话框的编译器配置集页中取消“剥除附加信息(-s)”选项,重新编译后再调试。
@@ -6781,88 +6797,88 @@ Are you really want to continue?
您也可以删除所有断点,打开“CPU信息窗口”,然后调试汇编代码。
-
+
未能生成可执行文件。
-
+
请查看“工具输出”面板中的详细信息。
-
+
小熊猫C++项目文件(*.dev)
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
-
-
+
+
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
-
+
+
试题集文件 (*.pbs)
-
-
+
+
载入失败
-
-
+
+
试题案例%1
@@ -6874,13 +6890,13 @@ Are you really want to continue?
-
-
-
-
-
-
-
+
+
+
+
+
+
+
错误
@@ -6901,14 +6917,14 @@ Are you really want to continue?
清除历史
-
-
+
+
编译生成的可执行文件中没有符号表,无法被调试。
-
-
+
+
版本控制
@@ -6917,80 +6933,80 @@ Are you really want to continue?
请在工具栏中选用Debug编译器配置集,或者在选项对话框的编辑器配置集页中勾选“生成调试信息(-g3)"选项。
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
-
+
+
编译失败
-
+
运行失败
-
-
-
-
+
+
+
+
确认转换
-
-
-
-
+
+
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -7280,32 +7296,32 @@ Are you really want to continue?
案例运行超时
-
+
运行时间超限!
-
+
运行内存超限!
-
+
无法启动程序运行进程'%1'。
-
+
waitFor()函数等待超时。
-
+
在向程序运行进程写入内容时出错。
-
+
在从程序运行进程读取内容时出错。
@@ -8322,7 +8338,7 @@ Are you really want to continue?
QApplication
-
+
错误
@@ -8331,13 +8347,13 @@ Are you really want to continue?
QObject
-
+
保存
-
+
将修改保存到"%1"?
@@ -8409,7 +8425,7 @@ Are you really want to continue?
无法写入配置文件夹"%1"
-
+
无法载入自动链接设置
@@ -8515,7 +8531,7 @@ Are you really want to continue?
生成调试信息(-g3)
-
+
您同意小熊猫C++在PATH路径中寻找gcc编译器吗?
@@ -8628,7 +8644,7 @@ Are you really want to continue?
只生成汇编代码(-S)
-
+
确认
@@ -8649,13 +8665,13 @@ Are you really want to continue?
如果仍然保留这些设置,可能会导致编译错误。<br /><br />请选择“是”,除非您清楚的知道选择“否”的后果,
-
+
未配置编译器设置。
-
+
您需要小熊猫C++在下列位置搜索编译器吗:<br />%1<br />%2
@@ -9013,12 +9029,12 @@ Are you really want to continue?
无标题
-
+
构造函数
-
+
析构函数
@@ -10062,18 +10078,18 @@ Are you really want to continue?
性能
-
-
-
+
+
+
编译器配置集
-
-
-
+
+
+
@@ -10085,7 +10101,7 @@ Are you really want to continue?
自动链接
-
+
@@ -10161,15 +10177,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
@@ -10361,47 +10377,47 @@ Are you really want to continue?
StdinCompiler
-
+
正在检查语法...
-
+
正在编译...
-
+
- 文件名: %1
-
+
- 编译器配置: %1
-
+
找不到适合文件%1的编译器
-
+
编译器程序'%1'不存在!
-
+
正在处理%1源程序文件:
-
+
%1编译器: %2
-
+
命令: %1 %2
diff --git a/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts b/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts
index 24892467..b0d508e8 100644
--- a/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts
+++ b/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts
@@ -4880,6 +4880,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
MemoryModel