diff --git a/NEWS.md b/NEWS.md
index c04e7713..3ebda05e 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,6 +1,8 @@
Red Panda C++ Version 1.1.2
- enhancement: use different color to differenciate folder and headers in completion popup window
- enhancement: auto add "/" to folder when completing #include headers
+ - enhancement: add the option "Set Encoding for the Executable" to project's compiler options
+ - fix: can't correctly compile when link params are seperated by line breaks
Red Panda C++ Version 1.1.1
- enhancement: adjust the appearance of problem case's input/output/expected control
diff --git a/RedPandaIDE/RedPandaIDE_pt.ts b/RedPandaIDE/RedPandaIDE_pt.ts
index ce8cdec0..4b86a0b3 100644
--- a/RedPandaIDE/RedPandaIDE_pt.ts
+++ b/RedPandaIDE/RedPandaIDE_pt.ts
@@ -4882,7 +4882,15 @@
-
+
+
+
+
+
+
+
+
+
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index c864bf19..904ea77b 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -183,17 +183,17 @@ p, li { white-space: pre-wrap; }
BacktraceModel
-
+
函数
-
+
文件名
-
+
行
@@ -239,37 +239,37 @@ p, li { white-space: pre-wrap; }
BreakpointModel
-
+
文件名
-
+
行
-
+
条件
-
+
保存文件'%1'失败。
-
+
无法写入文件'%1'.
-
+
JSON文件'%1':%2中存在错误:%3
-
+
无法读取文件'%1'.
@@ -614,7 +614,7 @@ p, li { white-space: pre-wrap; }
[说明]
-
+
无法启动编译器进程'%1'。
@@ -623,27 +623,27 @@ p, li { white-space: pre-wrap; }
无法启动编译进程。
-
+
编译进程启动后崩溃。
-
+
waitFor()函数等待超时。
-
+
在向编译进程输入内容时出错。
-
+
在从编译进程读取内容时出错。
-
+
发生了未知错误。
@@ -1219,7 +1219,7 @@ Are you really want to continue?
无法在"%1"找到gdb server
-
+
执行以求值
@@ -1228,22 +1228,22 @@ Are you really want to continue?
不在当前语境中
-
+
编译
-
+
源文件比程序文件新。
-
+
重新编译?
-
+
收到信号"%1":
@@ -1314,9 +1314,9 @@ Are you really want to continue?
打印文档
-
-
-
+
+
+
Ctrl+单击以获取更多信息
@@ -1325,27 +1325,27 @@ Are you really want to continue?
未找到符号'%1'!
-
+
找不到astyle程序
-
+
找不到astyle程序"%1".
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
只读
@@ -3830,18 +3830,18 @@ Are you really want to continue?
MainWindow
-
+
小熊猫C++
-
-
-
-
-
-
+
+
+
+
+
+
编译器
@@ -3860,8 +3860,8 @@ Are you really want to continue?
工具
-
-
+
+
运行
@@ -3873,25 +3873,25 @@ Are you really want to continue?
-
+
项目
-
+
监视
-
+
结构
-
+
文件
@@ -3902,9 +3902,9 @@ Are you really want to continue?
-
-
-
+
+
+
调试
@@ -3915,7 +3915,7 @@ Are you really want to continue?
-
+
调试主控台
@@ -3937,7 +3937,7 @@ Are you really want to continue?
-
+
查找
@@ -3962,7 +3962,7 @@ Are you really want to continue?
替换
-
+
关闭
@@ -3996,78 +3996,78 @@ Are you really want to continue?
新建
-
+
Ctrl+N
-
+
打开...
-
+
Ctrl+O
-
+
保存
-
+
Ctrl+S
-
+
另存为...
-
+
另存为
-
+
全部保存
-
+
Ctrl+Shift+S
-
+
选项
-
-
-
-
+
+
+
+
编译
-
+
工具输出
-
-
+
+
选择输入文件
-
+
...
@@ -4082,199 +4082,199 @@ Are you really want to continue?
Git
-
+
F9
-
+
F10
-
+
恢复
-
+
Ctrl+Z
-
+
重做
-
+
Ctrl+Y
-
+
剪切
-
+
Ctrl+X
-
-
-
-
+
+
+
+
复制
-
+
Ctrl+C
-
-
+
+
粘贴
-
+
Ctrl+V
-
-
-
+
+
+
选择全部
-
+
Ctrl+A
-
+
缩进
-
+
取消缩进
-
+
切换注释
-
+
Ctrl+/
-
+
全部收起
-
+
全部展开
-
+
使用ANSI编码
-
+
使用UTF-8编码
-
+
自动检测
-
+
转换为ANSI编码
-
+
转换为UTF-8编码
-
-
+
+
编译运行
-
+
F11
-
-
+
+
全部重编译
-
+
F12
-
+
停止执行
-
+
F6
-
+
F5
-
+
单步跳过
-
+
F7
-
+
单步进入
-
+
试题集
-
+
新建试题集
@@ -4293,14 +4293,14 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
@@ -4322,20 +4322,20 @@ Are you really want to continue?
-
+
TODO
-
+
书签
-
+
试题
@@ -4361,7 +4361,7 @@ Are you really want to continue?
-
+
Run Current Case
运行所有案例
@@ -4377,17 +4377,17 @@ Are you really want to continue?
%v/%m
-
+
输出
-
+
输入
-
+
期望输出
@@ -4431,558 +4431,558 @@ Are you really want to continue?
消息
-
+
忽略空格
-
-
+
+
新建源代码文件
-
+
Tab
-
+
Shift+Tab
-
+
F8
-
+
单步跳出
-
+
Ctrl+F8
-
+
执行到光标处
-
+
Ctrl+F5
-
+
继续执行
-
+
F4
-
+
添加监视
-
+
打开CPU信息窗口...
-
+
退出
-
+
查找...
-
+
Ctrl+F
-
+
在文件中查找...
-
+
Ctrl+Shift+F
-
+
替换
-
+
Ctrl+R
-
+
查找下一个
-
+
F3
-
+
查找前一个
-
+
Shift+F3
-
+
删除监视值
-
+
Remove All
删除全部监视值
-
+
修改监视值
-
+
对代码重新排版
-
+
Ctrl+Shift+A
-
+
前一次编辑位置
-
+
Ctrl+Alt+Left
-
+
后一次编辑位置
-
+
Ctrl+Alt+Right
-
+
Ctrl+W
-
+
全部关闭
-
+
Ctrl+Shift+W
-
+
最大化编辑器
-
+
Ctrl+F11
-
+
下一窗口
-
+
Ctrl+Tab
-
+
前一窗口
-
+
Ctrl+Shift+Tab
-
+
切换断点
-
+
Ctrl+F4
-
-
+
+
删除所有断点
-
+
设置断点条件...
-
+
跳转到声明处
-
+
Ctrl+Shift+G
-
+
跳转到定义处
-
+
Ctrl+G
-
+
查找符号的引用
-
+
打开所在的文件夹
-
+
Ctrl+B
-
+
打开命令行窗口
-
+
文件属性...
-
+
关闭项目
-
+
项目属性
-
+
新建项目...
-
-
+
+
新建项目文件
-
+
F1
-
+
向上移动选中的行
-
+
Ctrl+Shift+Up
-
+
向下移动选中的行
-
+
Ctrl+Shift+Down
-
+
转换为UTF-8 BOM编码
-
+
使用UTF-8 BOM编码
-
+
编译器选项...
-
+
切换管理器面板
-
+
Ctrl+F9
-
+
切换消息面板
-
+
Ctrl+F10
-
+
新建文件
-
+
添加到项目...
-
+
从项目删除
-
+
查看Makefile
-
+
清理构建文件
-
+
在浏览器中打开
-
+
在终端中打开
-
+
关于
-
-
+
+
重命名符号
-
+
Shift+F6
-
+
打印...
-
+
Ctrl+P
-
-
+
+
导出为RTF
-
-
+
+
导出为HTML
-
+
移动到其他视图
-
+
Ctrl+M
-
-
+
+
C++参考手册
-
+
C参考手册
-
+
显示全部工具面板
-
+
Create Repository
创建Git仓库
-
+
提交(Commit)
-
+
撤销(Revert)
-
+
回滚(Reset)
-
+
添加文件
-
+
还原(Restore)
-
+
官方网站
-
+
分支切换(Switch)
-
+
合并(Merge)
-
-
+
+
Log
显示日志(Log)
-
+
远程仓库...
-
+
取回(Fetch)
-
+
拉取(Pull)
-
+
推送(Push)
-
+
隐藏不支持的文件
-
+
切换块注释
-
+
Alt+Shift+A
-
+
匹配当前括号
-
+
Ctrl+]
@@ -4991,50 +4991,50 @@ Are you really want to continue?
工具窗口栏
-
+
状态栏
-
+
Ctrl+Backspace
-
+
中断
-
-
+
+
删除到单词开头
-
+
Ctrl+Shift+B
-
+
删除到单词结尾
-
+
Ctrl+Shift+E
-
+
Add Class...
新建类...
-
-
+
+
New Header
新建头文件...
@@ -5044,47 +5044,47 @@ Are you really want to continue?
插入行
-
+
删除当前行
-
+
Ctrl+D
-
+
复制当前行
-
+
Ctrl+E
-
+
删除当前单词
-
+
Ctrl+Shift+D
-
+
删除到行尾
-
+
Ctrl+Del
-
+
删除到行首
@@ -5093,27 +5093,27 @@ Are you really want to continue?
C/C++参考
-
+
EGE图形库手册
-
+
添加书签
-
+
删除书签
-
+
修改书签说明
-
+
在文件视图中定位
@@ -5122,12 +5122,12 @@ Are you really want to continue?
打开文件夹
-
+
运行参数...
-
+
文件编码
@@ -5137,32 +5137,32 @@ Are you really want to continue?
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
正在编译
@@ -5171,187 +5171,187 @@ 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
-
+
只读
-
+
插入
-
+
覆写
-
+
关闭项目
-
+
你确定要关闭'%1'吗?
-
-
+
+
确认
-
-
-
+
+
+
源文件尚未编译。
-
-
+
+
现在编译?
-
-
+
+
源文件比可执行程序新。
-
+
重新编译?
-
+
无编译器设置
-
+
没有配置编译器设置。
-
+
无法启动调试器
-
-
+
+
启用调试参数
-
-
+
+
当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题?
-
+
项目尚未构建
-
+
项目尚未构建。是否构建?
-
+
宿主程序不存在
-
+
动态链接库(DLL)需要一个宿主程序来运行。
-
+
但它不存在。
-
+
宿主程序不存在
-
+
宿主程序'%1'不存在。
-
+
重新编译?
-
-
+
+
保存上次打开信息失败
-
+
无法删除旧上次打开信息文件'%1'
-
+
无法保存上次打开信息文件'%1'
-
+
载入上次打开信息失败
-
+
无法载入上次打开信息文件'%1'
-
+
打开源代码文件
-
-
+
+
批量设置案例
-
+
显示详细调试器日志
-
+
全部复制
-
-
-
-
-
-
+
+
+
+
+
+
清除
@@ -5367,7 +5367,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -5388,68 +5388,68 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
-
+
+
重新构建项目
-
-
+
+
项目已经被修改过,是否需要重新构建?
-
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
-
+
+
+
书签描述
-
-
-
+
+
+
描述:
@@ -5458,178 +5458,178 @@ Are you really want to continue?
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
+
新文件夹
-
+
文件夹:
-
+
重命名
-
+
运行当前案例
-
+
删除文件夹
-
+
切换为普通视图
-
+
切换为自定义视图
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
-
+
+
新建文件夹
-
+
重命名
-
-
-
-
+
+
+
+
删除
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
转换为%1编码
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
@@ -5639,83 +5639,83 @@ Are you really want to continue?
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
新建文件夹%1
-
+
无标题
-
+
无标题%1
-
+
你真的要删除%1吗?
-
+
你真的要删除%1个文件吗?
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
-
+
+
你真的想要那么做吗?
@@ -5724,114 +5724,114 @@ Are you really want to continue?
批量设置案例
-
+
选择输入数据文件
-
+
输入数据文件 (*.in)
-
+
修改监视表达式
-
+
监视表达式
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
文件夹%1不是空的。
-
+
你真的要删除它吗?
-
+
改变工作文件夹
-
+
File '%1' is not in the current working folder
文件'%1'不在当前工作文件夹中。
-
+
是否将工作文件夹改设为'%1'?
-
+
无法提交
-
+
Git需要用信息进行提交。
-
+
选择输入数据文件
-
-
+
+
所有文件 (*.*)
-
+
Choose Expected Input Data File
选择期望输出文件
@@ -5841,61 +5841,61 @@ Are you really want to continue?
第%1行
-
-
-
+
+
+
选择工作文件夹
-
-
+
+
头文件已存在
-
-
+
+
头文件"%1"已存在!
-
+
源文件已存在!
-
+
源文件"%1"已存在!
-
+
无法提交!
-
+
下列文件处于冲突状态,请解决后重新添加和提交:
-
+
提交信息
-
+
提交信息:
-
+
提交失败
-
+
提交信息不能为空!
@@ -5904,135 +5904,135 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
本操作会删除此试题的所有案例。
-
+
小熊猫C++项目文件(*.dev)
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
@@ -6043,16 +6043,16 @@ Are you really want to continue?
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
错误
@@ -6062,96 +6062,96 @@ Are you really want to continue?
项目历史
-
+
载入主题失败
-
-
+
+
清除历史
-
-
+
+
版本控制
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
-
-
+
+
+
+
确认转换
-
-
-
-
+
+
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -6473,78 +6473,78 @@ Are you really want to continue?
载入文件错误
-
+
文件已存在
-
+
文件'%1'已在项目中
-
+
项目已升级
-
+
已成功将项目升级到新的格式
-
+
旧项目文件备份在'%1'。
-
+
头文件
-
+
源文件
-
+
其他文件
-
+
设置需要更新
-
+
The compiler settings format of Dev-C++ has changed.
小熊猫C++的编译器设置格式已发生改变。
-
+
请在项目 >> 项目属性 >> 编译器设置中修改您的设置并保存您的项目
-
+
未找到编译器
-
+
您为该项目设置的编译器不存在。
-
+
它将会被全局编译器设置代替。
-
+
Developed using the Red Panda Dev-C++ IDE
使用小熊猫C++编辑器开发
@@ -6618,32 +6618,32 @@ Are you really want to continue?
- 资源文件: %1
-
+
正在编译项目修改...
-
+
- 项目文件名: %1
-
+
- 编译器配置: %1
-
+
正在处理makefile...
-
+
- makefile处理器: %1
-
+
- 命令: %1 %2
@@ -6660,6 +6660,12 @@ Are you really want to continue?
基础编译器设置:
+
+
+
+ Add encoding options to compiler:
+ 设定可执行文件的字符集为:
+
标签1
@@ -6669,19 +6675,28 @@ Are you really want to continue?
标签2
-
+
自定义设置(仅对本项目生效)
-
+
静态链接所有库
-
- 在编译时加入字符集选项
+ 在编译时加入字符集选项
+
+
+
+
+ ANSI
+
+
+
+
+ UTF-8
@@ -6966,32 +6981,32 @@ Are you really want to continue?
ProjectModel
-
+
文件已存在
-
+
文件'%1'已存在。是否删除?
-
+
删除失败
-
+
无法删除文件'%1'
-
+
改名失败
-
+
无法将文件'%1'改名为'%2'
@@ -7943,12 +7958,12 @@ Are you really want to continue?
RegisterModel
-
+
寄存器
-
+
值
@@ -8376,14 +8391,14 @@ Are you really want to continue?
性能
-
+
编译器配置集
-
+
@@ -8395,7 +8410,7 @@ Are you really want to continue?
自动链接
-
+
@@ -8471,15 +8486,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
@@ -8961,49 +8976,49 @@ Are you really want to continue?
WatchModel
-
+
保存文件'%1'失败。
-
+
无法写入文件'%1'.
-
+
JSON文件'%1':%2中存在错误:%3
-
-
+
+
执行以求值
-
-
+
+
在当前作用域中无效
-
+
无法读取文件'%1'.
-
+
表达式
-
+
类型
-
+
值
diff --git a/RedPandaIDE/RedPandaIDE_zh_TW.ts b/RedPandaIDE/RedPandaIDE_zh_TW.ts
index d2414a67..4b7f5302 100644
--- a/RedPandaIDE/RedPandaIDE_zh_TW.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_TW.ts
@@ -4882,7 +4882,15 @@
-
+
+
+
+
+
+
+
+
+
diff --git a/RedPandaIDE/compiler/compiler.cpp b/RedPandaIDE/compiler/compiler.cpp
index 89a9b901..1c10133e 100644
--- a/RedPandaIDE/compiler/compiler.cpp
+++ b/RedPandaIDE/compiler/compiler.cpp
@@ -359,14 +359,18 @@ QString Compiler::getCCompileArguments(bool checkSyntax)
}
if (compilerSet()->useCustomCompileParams() && !compilerSet()->customCompileParams().isEmpty()) {
- result += " "+ parseMacros(compilerSet()->customCompileParams());
+ QStringList params = textToLines(compilerSet()->customCompileParams());
+ foreach(const QString& param, params)
+ result += " "+ parseMacros(param);
}
if (mProject) {
QString s = mProject->options().compilerCmd;
if (!s.isEmpty()) {
s.replace("_@@_", " ");
- result += " "+parseMacros(s);
+ QStringList params = textToLines(s);
+ foreach(const QString& param, params)
+ result += " "+ parseMacros(param);
}
}
return result;
@@ -396,13 +400,17 @@ QString Compiler::getCppCompileArguments(bool checkSyntax)
}
}
if (compilerSet()->useCustomCompileParams() && !compilerSet()->customCompileParams().isEmpty()) {
- result += " "+ parseMacros(compilerSet()->customCompileParams());
+ QStringList params = textToLines(compilerSet()->customCompileParams());
+ foreach(const QString& param, params)
+ result += " "+ parseMacros(param);
}
if (mProject) {
QString s = mProject->options().cppCompilerCmd;
if (!s.isEmpty()) {
s.replace("_@@_", " ");
- result += " "+parseMacros(s);
+ QStringList params = textToLines(s);
+ foreach(const QString& param, params)
+ result += " "+ parseMacros(param);
}
}
return result;
@@ -507,7 +515,11 @@ QString Compiler::getLibraryArguments(FileType fileType)
// Add global compiler linker extras
if (compilerSet()->useCustomLinkParams() && !compilerSet()->customLinkParams().isEmpty()) {
- result += " "+compilerSet()->customLinkParams();
+ QStringList params = textToLines(compilerSet()->customLinkParams());
+ if (!params.isEmpty()) {
+ foreach(const QString& param, params)
+ result += " " + param;
+ }
}
if (mProject) {
@@ -519,7 +531,11 @@ QString Compiler::getLibraryArguments(FileType fileType)
QString s = mProject->options().linkerCmd;
if (!s.isEmpty()) {
s.replace("_@@_", " ");
- result += " "+s;
+ QStringList params = textToLines(s);
+ if (!params.isEmpty()) {
+ foreach(const QString& param, params)
+ result += " " + param;
+ }
}
}
if (mProject->options().staticLink)
diff --git a/RedPandaIDE/compiler/projectcompiler.cpp b/RedPandaIDE/compiler/projectcompiler.cpp
index 6936d924..a7c7445d 100644
--- a/RedPandaIDE/compiler/projectcompiler.cpp
+++ b/RedPandaIDE/compiler/projectcompiler.cpp
@@ -200,7 +200,7 @@ void ProjectCompiler::writeMakeDefines(QFile &file)
log("");
// Get list of applicable flags
- QString cCompileArguments = getCCompileArguments(mOnlyCheckSyntax);
+ QString cCompileArguments = getCCompileArguments(mOnlyCheckSyntax);
QString cppCompileArguments = getCppCompileArguments(mOnlyCheckSyntax);
QString libraryArguments = getLibraryArguments(FileType::Project);
QString cIncludeArguments = getCIncludeArguments() + " " + getProjectIncludeArguments();
@@ -387,23 +387,37 @@ void ProjectCompiler::writeMakeObjFilesRules(QFile &file)
} else {
QString encodingStr;
if (compilerSet()->compilerType() != COMPILER_CLANG && mProject->options().addCharset) {
- QByteArray defaultSystemEncoding = pCharsetInfoManager->getDefaultSystemEncoding();
+ QByteArray defaultSystemEncoding=pCharsetInfoManager->getDefaultSystemEncoding();
+ QByteArray encoding = mProject->options().execEncoding;
+ QByteArray targetEncoding;
+ QByteArray sourceEncoding;
+ if ( encoding == ENCODING_SYSTEM_DEFAULT || encoding.isEmpty()) {
+ targetEncoding = defaultSystemEncoding;
+ } else if (encoding == ENCODING_UTF8_BOM) {
+ targetEncoding = "UTF-8";
+ } else {
+ targetEncoding = encoding;
+ }
+
if (unit->encoding() == ENCODING_AUTO_DETECT) {
Editor* editor = mProject->unitEditor(unit);
if (editor && editor->fileEncoding()!=ENCODING_ASCII
- && editor->fileEncoding()!=defaultSystemEncoding)
- encodingStr = QString(" -finput-charset=%1 -fexec-charset=%2")
- .arg(QString(editor->fileEncoding()),
- QString(defaultSystemEncoding));
+ && editor->fileEncoding()!=targetEncoding) {
+ sourceEncoding = editor->fileEncoding();
+ } else {
+ sourceEncoding = targetEncoding;
+ }
} else if (unit->encoding()==ENCODING_SYSTEM_DEFAULT) {
-// encodingStr = QString(" -finput-charset=%1 -fexec-charset=%2")
-// .arg(QString(defaultSystemEncoding),
-// QString(defaultSystemEncoding));
+ sourceEncoding = defaultSystemEncoding;
} else if (unit->encoding()!=ENCODING_ASCII && !unit->encoding().isEmpty()
- && unit->encoding()!=defaultSystemEncoding) {
+ && unit->encoding()!=targetEncoding) {
+ sourceEncoding = unit->encoding();
+ }
+
+ if (sourceEncoding!=targetEncoding) {
encodingStr = QString(" -finput-charset=%1 -fexec-charset=%2")
- .arg(QString(unit->encoding()),
- QString(defaultSystemEncoding));
+ .arg(QString(sourceEncoding),
+ QString(targetEncoding));
}
}
diff --git a/RedPandaIDE/project.cpp b/RedPandaIDE/project.cpp
index 42028165..fbe595b9 100644
--- a/RedPandaIDE/project.cpp
+++ b/RedPandaIDE/project.cpp
@@ -911,6 +911,7 @@ void Project::saveOptions()
}
ini.SetLongValue("Project","StaticLink", mOptions.staticLink);
ini.SetLongValue("Project","AddCharset", mOptions.addCharset);
+ ini.SetValue("Project","ExecEncoding", mOptions.execEncoding);
ini.SetValue("Project","Encoding",toByteArray(mOptions.encoding));
ini.SetLongValue("Project","ModelType", (int)mOptions.modelType);
//for Red Panda Dev C++ 6 compatibility
@@ -1666,6 +1667,7 @@ void Project::loadOptions(SimpleIni& ini)
}
mOptions.staticLink = ini.GetBoolValue("Project", "StaticLink", true);
+ mOptions.execEncoding = ini.GetValue("Project","ExecEncoding", ENCODING_SYSTEM_DEFAULT);
mOptions.addCharset = ini.GetBoolValue("Project", "AddCharset", true);
if (mOptions.compilerSetType<0) {
diff --git a/RedPandaIDE/projectoptions.cpp b/RedPandaIDE/projectoptions.cpp
index 0dd6a5a0..fe38aceb 100644
--- a/RedPandaIDE/projectoptions.cpp
+++ b/RedPandaIDE/projectoptions.cpp
@@ -15,6 +15,7 @@
* along with this program. If not, see .
*/
#include "projectoptions.h"
+#include "utils.h"
ProjectVersionInfo::ProjectVersionInfo()
{
@@ -53,4 +54,5 @@ ProjectOptions::ProjectOptions()
staticLink = true;
addCharset = true;
modelType = ProjectModelType::FileSystem;
+ execEncoding = ENCODING_SYSTEM_DEFAULT;
}
diff --git a/RedPandaIDE/projectoptions.h b/RedPandaIDE/projectoptions.h
index 123b6393..28848b91 100644
--- a/RedPandaIDE/projectoptions.h
+++ b/RedPandaIDE/projectoptions.h
@@ -89,6 +89,7 @@ struct ProjectOptions{
QString cmdLineArgs;
bool staticLink;
bool addCharset;
+ QByteArray execEncoding;
QString encoding;
ProjectModelType modelType;
};
diff --git a/RedPandaIDE/settingsdialog/projectcompilerwidget.cpp b/RedPandaIDE/settingsdialog/projectcompilerwidget.cpp
index 243f9597..b3738b7a 100644
--- a/RedPandaIDE/settingsdialog/projectcompilerwidget.cpp
+++ b/RedPandaIDE/settingsdialog/projectcompilerwidget.cpp
@@ -19,6 +19,7 @@
#include "../settings.h"
#include "../project.h"
#include "../mainwindow.h"
+#include "../platform.h"
ProjectCompilerWidget::ProjectCompilerWidget(const QString &name, const QString &group, QWidget *parent) :
SettingsWidget(name,group,parent),
@@ -37,8 +38,8 @@ void ProjectCompilerWidget::refreshOptions()
Settings::PCompilerSet pSet = pSettings->compilerSets().getSet(ui->cbCompilerSet->currentIndex());
if (!pSet)
return;
- ui->chkAddCharset->setVisible(pSet->compilerType()!=COMPILER_CLANG);
- ui->chkAddCharset->setEnabled(pSet->compilerType()!=COMPILER_CLANG);
+ ui->panelAddCharset->setVisible(pSet->compilerType()!=COMPILER_CLANG);
+ //ui->chkAddCharset->setEnabled(pSet->compilerType()!=COMPILER_CLANG);
mOptions = pMainWindow->project()->options().compilerOptions;
if (mOptions.isEmpty())
mOptions = pSet->compileOptions();
@@ -46,6 +47,27 @@ void ProjectCompilerWidget::refreshOptions()
ui->tabOptions->resetUI(pSet,mOptions);
ui->chkStaticLink->setChecked(pSet->staticLink());
+
+ QByteArray execEncoding = pMainWindow->project()->options().execEncoding;
+ if (execEncoding == ENCODING_AUTO_DETECT
+ || execEncoding == ENCODING_SYSTEM_DEFAULT
+ || execEncoding == ENCODING_UTF8) {
+ int index =ui->cbEncoding->findData(execEncoding);
+ ui->cbEncoding->setCurrentIndex(index);
+ ui->cbEncodingDetails->clear();
+ ui->cbEncodingDetails->setVisible(false);
+ } else {
+ QString encoding = execEncoding;
+ QString language = pCharsetInfoManager->findLanguageByCharsetName(encoding);
+ ui->cbEncoding->setCurrentText(language);
+ ui->cbEncodingDetails->setVisible(true);
+ ui->cbEncodingDetails->clear();
+ QList infos = pCharsetInfoManager->findCharsetsByLanguageName(language);
+ foreach (const PCharsetInfo& info, infos) {
+ ui->cbEncodingDetails->addItem(info->name);
+ }
+ ui->cbEncodingDetails->setCurrentText(encoding);
+ }
}
void ProjectCompilerWidget::doLoad()
@@ -68,6 +90,12 @@ void ProjectCompilerWidget::doSave()
if (pSet->compilerType()!=COMPILER_CLANG)
pMainWindow->project()->options().addCharset = ui->chkAddCharset->isChecked();
pMainWindow->project()->options().staticLink = ui->chkStaticLink->isChecked();
+
+ if (ui->cbEncodingDetails->isVisible()) {
+ pMainWindow->project()->options().execEncoding = ui->cbEncodingDetails->currentText().toLocal8Bit();
+ } else {
+ pMainWindow->project()->options().execEncoding = ui->cbEncoding->currentData().toString().toLocal8Bit();
+ }
pMainWindow->project()->saveOptions();
}
@@ -77,6 +105,13 @@ void ProjectCompilerWidget::init()
for (size_t i=0;icompilerSets().size();i++) {
ui->cbCompilerSet->addItem(pSettings->compilerSets().getSet(i)->name());
}
+ ui->cbEncodingDetails->setVisible(false);
+ ui->cbEncoding->clear();
+ ui->cbEncoding->addItem(tr("ANSI"),ENCODING_SYSTEM_DEFAULT);
+ ui->cbEncoding->addItem(tr("UTF-8"),ENCODING_UTF8);
+ foreach (const QString& langName, pCharsetInfoManager->languageNames()) {
+ ui->cbEncoding->addItem(langName,langName);
+ }
SettingsWidget::init();
}
@@ -85,3 +120,27 @@ void ProjectCompilerWidget::on_cbCompilerSet_currentIndexChanged(int)
refreshOptions();
}
+void ProjectCompilerWidget::on_cbEncoding_currentTextChanged(const QString &arg1)
+{
+ QString userData = ui->cbEncoding->currentData().toString();
+ if (userData == ENCODING_AUTO_DETECT
+ || userData == ENCODING_SYSTEM_DEFAULT
+ || userData == ENCODING_UTF8) {
+ ui->cbEncodingDetails->setVisible(false);
+ ui->cbEncodingDetails->clear();
+ } else {
+ ui->cbEncodingDetails->setVisible(true);
+ ui->cbEncodingDetails->clear();
+ QList infos = pCharsetInfoManager->findCharsetsByLanguageName(userData);
+ foreach (const PCharsetInfo& info, infos) {
+ ui->cbEncodingDetails->addItem(info->name);
+ }
+ }
+}
+
+
+void ProjectCompilerWidget::on_cbEncodingDetails_currentTextChanged(const QString &arg1)
+{
+
+}
+
diff --git a/RedPandaIDE/settingsdialog/projectcompilerwidget.h b/RedPandaIDE/settingsdialog/projectcompilerwidget.h
index 7339a0ea..eb831e19 100644
--- a/RedPandaIDE/settingsdialog/projectcompilerwidget.h
+++ b/RedPandaIDE/settingsdialog/projectcompilerwidget.h
@@ -48,6 +48,8 @@ public:
void init() override;
private slots:
void on_cbCompilerSet_currentIndexChanged(int index);
+ void on_cbEncoding_currentTextChanged(const QString &arg1);
+ void on_cbEncodingDetails_currentTextChanged(const QString &arg1);
};
#endif // PROJECTCOMPILERWIDGET_H
diff --git a/RedPandaIDE/settingsdialog/projectcompilerwidget.ui b/RedPandaIDE/settingsdialog/projectcompilerwidget.ui
index 76b14df8..6dfd059e 100644
--- a/RedPandaIDE/settingsdialog/projectcompilerwidget.ui
+++ b/RedPandaIDE/settingsdialog/projectcompilerwidget.ui
@@ -14,6 +14,16 @@
Form
+ -
+
+
+ -
+
+
+ Statically link libraries
+
+
+
-
@@ -27,19 +37,9 @@
- -
-
-
-
- -
-
-
- Statically link libraries
-
-
-
-
@@ -47,13 +47,6 @@
- -
-
-
- Add encoding options to compiler
-
-
-
-
@@ -68,6 +61,50 @@
+ -
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Set Encoding for the executable:
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+