diff --git a/NEWS.md b/NEWS.md
index 53727ccb..0a9732f6 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,8 +1,20 @@
+Version 0.9.3 For Dev-C++ 7 Beta
+ - fix: the count in the title of issues view isn't correct
+ - fix: columns calculation not correct when paint lines containing chinese characters
+ - fix: restore caret position after reformat code
+ - enhancement: ask user to rebuild project, when run/debug the project and it has been modified
+ - fix: correct set the enabled state of "delete line"/"insert line"/"delete word"/"delete to BOL"/"delete to EOL" menu items
+ - fix: undo "delete word"/"delete to BOL"/"delete to EOL" correct reset caret position
+
Version 0.9.2 For Dev-C++ 7 Beta
- fix: gutter of the disassembly code control in the cpu info dialog is grayed
- fix: problem set & problem views not correctly hidden when disabled in the executor / problem set options
- fix: executor / problem set options not correctly saved
- fix: option "Move caret to the first non-space char in the current line when press HOME key" dosen't work fine.
+ - fix: ctrl+left can't correctly move to the beginning of the last word
+ - enhancement: add "delete line"/"duplicate line"/"delete word"/"delete to EOL"/"delete to BOL" in the edit menu
+ - fix: crash when run "Project" / "Clean Make files"
+ - fix: when make project and del non-existing files, shouldn't show error messages
Version 0.9.1 For Dev-C++ 7 Beta
- enhancement: code completion suggestion for "__func__" variable
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm
index 743bdf76..398781d0 100644
Binary files a/RedPandaIDE/RedPandaIDE_zh_CN.qm and b/RedPandaIDE/RedPandaIDE_zh_CN.qm differ
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index 4088ca1d..c125c874 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -1031,10 +1031,10 @@ Are you really want to continue?
-
-
-
-
+
+
+
+
错误
@@ -1048,55 +1048,55 @@ Are you really want to continue?
另存为
-
+
要复制的内容超过了行数限制!
-
+
要复制的内容超过了字符数限制!
-
+
要剪切的内容超过了行数限制!
-
+
要剪切的内容超过了字符数限制!
-
+
打印文档
-
-
-
+
+
+
Ctrl+单击以获取更多信息
-
-
+
+
未找到符号'%1'!
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
只读
@@ -2856,18 +2856,18 @@ Are you really want to continue?
-
-
-
-
-
-
+
+
+
+
+
+
编译器
-
+
编译日志
@@ -2882,8 +2882,8 @@ Are you really want to continue?
工具
-
-
+
+
运行
@@ -2894,26 +2894,26 @@ Are you really want to continue?
-
-
+
+
项目
-
+
监视
-
+
结构
-
+
文件
@@ -2923,10 +2923,10 @@ Are you really want to continue?
-
-
-
-
+
+
+
+
调试
@@ -2957,8 +2957,8 @@ Are you really want to continue?
-
-
+
+
查找
@@ -2983,7 +2983,7 @@ Are you really want to continue?
替换
-
+
关闭
@@ -2993,13 +2993,13 @@ Are you really want to continue?
运行
-
-
+
+
代码
-
+
窗口
@@ -3017,257 +3017,257 @@ Are you really want to continue?
新建
-
+
Ctrl+N
-
+
打开...
-
+
Ctrl+O
-
+
保存
-
+
Ctrl+S
-
+
另存为...
-
+
另存为
-
+
全部保存
-
+
Ctrl+Shift+S
-
+
选项
-
-
-
-
-
+
+
+
+
+
编译
-
+
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
-
+
单步进入
-
-
+
+
试题集
-
+
新建试题集
@@ -3286,14 +3286,14 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
@@ -3315,21 +3315,21 @@ Are you really want to continue?
-
+
TODO
-
+
书签
-
-
+
+
试题
@@ -3380,459 +3380,513 @@ 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+B
-
+
打开命令行窗口
-
+
文件属性...
-
+
关闭项目
-
+
项目属性
-
+
新建项目...
-
+
新建项目文件
-
+
添加到项目...
-
+
从项目删除
-
+
查看Makefile
-
+
清理构建文件
-
+
在浏览器中打开
-
+
在终端中打开
-
+
关于
-
-
+
+
重命名符号
-
+
Shift+F6
-
+
打印...
-
+
Ctrl+P
-
-
+
+
导出为RTF
-
-
+
+
导出为HTML
-
+
移动到其他视图
-
+
Ctrl+M
-
-
+
+
C++参考手册
-
+
C参考手册
-
+
工具窗口栏
-
+
状态栏
+
+
+
+ Ctrl+Backspace
+
+
+
+ 插入行
+
+
+
+
+ 删除当前行
+
+
+
+
+ Ctrl+D
+
+
+
+
+ 复制当前行
+
+
+
+
+ Ctrl+E
+
+
+
+
+ 删除当前单词
+
+
+
+
+ Ctrl+Shift+D
+
+
+
+
+ 删除到行尾
+
+
+
+
+ Ctrl+Del
+
+
+
+
+ 删除到行首
+
C/C++参考
-
+
EGE图形库手册
-
+
添加书签
-
+
删除书签
-
+
修改书签说明
-
+
在文件视图中定位
-
-
+
+
打开文件夹
-
+
运行参数...
-
+
文件编码
@@ -3842,32 +3896,32 @@ Are you really want to continue?
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
正在编译
@@ -3876,168 +3930,168 @@ 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'
-
+
全部复制
-
-
+
+
清除
@@ -4053,7 +4107,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -4074,427 +4128,443 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
+
小熊猫Dev-C++
-
+
+
+ 重新构建项目
+
+
+
+
+
+ 项目已经被修改过,是否需要重新构建?
+
+
+
+
+ 编译项目
+
+
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
-
+
+
+
书签描述
-
-
-
+
+
+
描述:
-
+
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
+
新文件夹
-
+
文件夹:
-
+
重命名
-
+
删除文件夹
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
-
+
C/C++Source Files (*.c *.cpp *.cc *.cxx
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
+
你真的想要做那些吗?
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
@@ -4505,15 +4575,15 @@ Are you really want to continue?
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
错误
@@ -4523,75 +4593,75 @@ Are you really want to continue?
项目历史
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
+
+
确认转换
-
-
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -4839,52 +4909,52 @@ Are you really want to continue?
ProjectCompiler
-
+
正在构建makefile...
-
+
- 文件名: %1
-
+
无法写入文件'%1'!
-
+
- 资源文件: %1
-
+
正在编译项目修改...
-
+
- 项目文件名: %1
-
+
- 编译器配置: %1
-
+
正在处理makefile...
-
+
- makefile处理器: %1
-
+
- 命令: %1 %2
@@ -6516,7 +6586,7 @@ Are you really want to continue?
自动链接
-
+
@@ -6592,7 +6662,7 @@ Are you really want to continue?
杂项
-
+
diff --git a/RedPandaIDE/compiler/compilermanager.cpp b/RedPandaIDE/compiler/compilermanager.cpp
index 9c680f9e..c9ddc372 100644
--- a/RedPandaIDE/compiler/compilermanager.cpp
+++ b/RedPandaIDE/compiler/compilermanager.cpp
@@ -133,8 +133,8 @@ void CompilerManager::cleanProject(std::shared_ptr project)
mCompileIssueCount = 0;
ProjectCompiler* compiler = new ProjectCompiler(project,false,false);
compiler->setOnlyClean(true);
- mCompiler->setRebuild(false);
mCompiler = compiler;
+ mCompiler->setRebuild(false);
connect(mCompiler, &Compiler::finished, mCompiler, &QObject::deleteLater);
connect(mCompiler, &Compiler::compileFinished, this, &CompilerManager::onCompileFinished);
@@ -330,8 +330,9 @@ void CompilerManager::onSyntaxCheckIssue(PCompileIssue issue)
{
if (issue->type == CompileIssueType::Error)
mSyntaxCheckErrorCount++;
- mSyntaxCheckIssueCount++;
-
+ if (issue->type == CompileIssueType::Error ||
+ issue->type == CompileIssueType::Warning)
+ mSyntaxCheckIssueCount++;
}
int CompilerManager::syntaxCheckIssueCount() const
diff --git a/RedPandaIDE/compiler/projectcompiler.cpp b/RedPandaIDE/compiler/projectcompiler.cpp
index d6b65313..379053f7 100644
--- a/RedPandaIDE/compiler/projectcompiler.cpp
+++ b/RedPandaIDE/compiler/projectcompiler.cpp
@@ -9,7 +9,8 @@
#include
ProjectCompiler::ProjectCompiler(std::shared_ptr project, bool silent, bool onlyCheckSyntax):
- Compiler("",silent,onlyCheckSyntax)
+ Compiler("",silent,onlyCheckSyntax),
+ mOnlyClean(false)
{
setProject(project);
}
@@ -264,9 +265,9 @@ void ProjectCompiler::writeMakeClean(QFile &file)
{
writeln(file, "clean: clean-custom");
if (mProject->options().type == ProjectType::DynamicLib)
- writeln(file, "\t${RM} $(CLEANOBJ) $(BIN) $(DEF) $(STATIC)");
+ writeln(file, "\t${RM} $(CLEANOBJ) $(BIN) $(DEF) $(STATIC) > NUL 2>&1");
else
- writeln(file, "\t${RM} $(CLEANOBJ) $(BIN)");
+ writeln(file, "\t${RM} $(CLEANOBJ) $(BIN) > NUL 2>&1");
writeln(file);
}
@@ -465,7 +466,7 @@ bool ProjectCompiler::prepareForCompile()
mArguments = QString("-f \"%1\" clean").arg(extractRelativePath(
mProject->directory(),
mProject->makeFileName()));
- } if (mRebuild) {
+ } else if (mRebuild) {
mArguments = QString("-f \"%1\" clean all").arg(extractRelativePath(
mProject->directory(),
mProject->makeFileName()));
diff --git a/RedPandaIDE/editor.cpp b/RedPandaIDE/editor.cpp
index e837b76f..08cb8d76 100644
--- a/RedPandaIDE/editor.cpp
+++ b/RedPandaIDE/editor.cpp
@@ -876,7 +876,6 @@ void Editor::onPreparePaintHighlightToken(int line, int aChar, const QString &to
if (token.isEmpty())
return;
-// qDebug()<name()<<" - "<identifierAttribute())) {
BufferCoord p{aChar,line};
BufferCoord pBeginPos,pEndPos;
@@ -1593,6 +1592,36 @@ bool Editor::notParsed()
return mParser->findFileIncludes(mFilename)==nullptr;
}
+void Editor::insertLine()
+{
+ ExecuteCommand(SynEditorCommand::ecInsertLine,QChar(),nullptr);
+}
+
+void Editor::deleteWord()
+{
+ ExecuteCommand(SynEditorCommand::ecDeleteWord,QChar(),nullptr);
+}
+
+void Editor::deleteLine()
+{
+ ExecuteCommand(SynEditorCommand::ecDeleteLine,QChar(),nullptr);
+}
+
+void Editor::duplicateLine()
+{
+ ExecuteCommand(SynEditorCommand::ecDuplicateLine,QChar(),nullptr);
+}
+
+void Editor::deleteToEOL()
+{
+ ExecuteCommand(SynEditorCommand::ecDeleteEOL,QChar(),nullptr);
+}
+
+void Editor::deleteToBOL()
+{
+ ExecuteCommand(SynEditorCommand::ecDeleteBOL,QChar(),nullptr);
+}
+
QChar Editor::getCurrentChar()
{
if (lineText().length()dirs().app(),
args,
content);
+ int oldTopLine = topLine();
+ BufferCoord mOldCaret = caretXY();
selectAll();
SynEditorOptions oldOptions = getOptions();
@@ -3546,6 +3577,8 @@ void Editor::reformat()
newOptions.setFlag(SynEditorOption::eoAutoIndent,false);
setOptions(newOptions);
setSelText(QString::fromUtf8(newContent));
+ setCaretXY(mOldCaret);
+ setTopLine(oldTopLine);
setOptions(oldOptions);
reparse();
checkSyntaxInBack();
diff --git a/RedPandaIDE/editor.h b/RedPandaIDE/editor.h
index 05c11159..fa3ecaf3 100644
--- a/RedPandaIDE/editor.h
+++ b/RedPandaIDE/editor.h
@@ -168,6 +168,12 @@ public:
void exportAsHTML(const QString& htmlFilename);
void resetBreakpoints();
bool notParsed();
+ void insertLine();
+ void deleteWord();
+ void deleteLine();
+ void duplicateLine();
+ void deleteToEOL();
+ void deleteToBOL();
const PCppParser &parser();
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index 35dec8aa..43933950 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -339,6 +339,12 @@ void MainWindow::updateEditorActions()
ui->actionUnIndent->setEnabled(false);
ui->actionUndo->setEnabled(false);
ui->actionUnfoldAll->setEnabled(false);
+ ui->actionDelete_Line->setEnabled(false);
+ ui->actionDelete_Word->setEnabled(false);
+ ui->actionDuplicate_Line->setEnabled(false);
+ ui->actionDelete_to_BOL->setEnabled(false);
+ ui->actionDelete_to_EOL->setEnabled(false);
+
ui->actionFind->setEnabled(false);
ui->actionReplace->setEnabled(false);
ui->actionFind_Next->setEnabled(false);
@@ -379,6 +385,11 @@ void MainWindow::updateEditorActions()
ui->actionToggleComment->setEnabled(!e->readOnly() && e->lines()->count()>0);
ui->actionUnIndent->setEnabled(!e->readOnly() && e->lines()->count()>0);
ui->actionUnfoldAll->setEnabled(e->lines()->count()>0);
+ ui->actionDelete_Line->setEnabled(!e->readOnly() && e->lines()->count()>0);
+ ui->actionDelete_Word->setEnabled(!e->readOnly() && e->lines()->count()>0);
+ ui->actionDuplicate_Line->setEnabled(!e->readOnly() && e->lines()->count()>0);
+ ui->actionDelete_to_BOL->setEnabled(!e->readOnly() && e->lines()->count()>0);
+ ui->actionDelete_to_EOL->setEnabled(!e->readOnly() && e->lines()->count()>0);
ui->actionFind->setEnabled(true);
ui->actionReplace->setEnabled(true);
@@ -1079,30 +1090,14 @@ void MainWindow::checkSyntaxInBack(Editor *e)
mCompilerManager->checkSyntax(e->filename(),e->text(),
e->fileEncoding() == ENCODING_ASCII, nullptr);
}
-// if not PrepareForCompile(cttStdin,True) then begin
-// fCheckSyntaxInBack:=False;
-// Exit;
-// end;
-// if e.InProject then begin
-// if not assigned(MainForm.fProject) then
-// Exit;
-// fSyntaxChecker.Project := MainForm.fProject;
-// end;
- // fSyntaxChecker.CheckSyntax(True);
}
bool MainWindow::compile(bool rebuild)
{
CompileTarget target =getCompileTarget();
if (target == CompileTarget::Project) {
- if (!mProject->saveUnits())
- return false;
- // Check if saves have been succesful
- for (int i=0; ipageCount();i++) {
- Editor * e= (*(mEditorList))[i];
- if (e->inProject() && e->modified())
- return false;
- }
+ if (mProject->modified())
+ mProject->saveAll();
clearIssues();
// Increment build number automagically
@@ -1209,6 +1204,18 @@ void MainWindow::runExecutable(RunType runType)
{
CompileTarget target =getCompileTarget();
if (target == CompileTarget::Project) {
+ if (mProject->modified() &&
+ QMessageBox::question(
+ this,
+ tr("Rebuild Project"),
+ tr("Project has been modified, do you want to rebuild it?")
+ ) == QMessageBox::Yes) {
+ mProject->saveAll();
+ mCompileSuccessionTask=std::make_shared();
+ mCompileSuccessionTask->type = CompileSuccessionTaskType::RunNormal;
+ compile();
+ return;
+ }
runExecutable(mProject->executable(),mProject->filename(),runType);
} else {
Editor * editor = mEditorList->getEditor();
@@ -1277,6 +1284,17 @@ void MainWindow::debug()
}
return;
}
+ if (mProject->modified() &&
+ QMessageBox::question(
+ this,
+ tr("Rebuild Project"),
+ tr("Project has been modified, do you want to rebuild it?")
+ ) == QMessageBox::Yes) {
+ mCompileSuccessionTask=std::make_shared();
+ mCompileSuccessionTask->type = CompileSuccessionTaskType::Debug;
+ compile();
+ return;
+ }
// Did we choose a host application for our DLL?
if (mProject->options().type == ProjectType::DynamicLib) {
if (mProject->options().hostApplication.isEmpty()) {
@@ -5692,3 +5710,46 @@ void MainWindow::on_actionProblem_triggered()
showHideMessagesTab(ui->tabProblem,state);
}
+void MainWindow::on_actionDelete_Line_triggered()
+{
+ Editor *e=mEditorList->getEditor();
+ if (e) {
+ e->deleteLine();
+ }
+}
+
+void MainWindow::on_actionDuplicate_Line_triggered()
+{
+ Editor *e=mEditorList->getEditor();
+ if (e) {
+ e->duplicateLine();
+ }
+}
+
+
+void MainWindow::on_actionDelete_Word_triggered()
+{
+ Editor *e=mEditorList->getEditor();
+ if (e) {
+ e->deleteWord();
+ }
+}
+
+
+void MainWindow::on_actionDelete_to_EOL_triggered()
+{
+ Editor *e=mEditorList->getEditor();
+ if (e) {
+ e->deleteToEOL();
+ }
+}
+
+
+void MainWindow::on_actionDelete_to_BOL_triggered()
+{
+ Editor *e=mEditorList->getEditor();
+ if (e) {
+ e->deleteToBOL();
+ }
+}
+
diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h
index c11f45b7..4e0383b4 100644
--- a/RedPandaIDE/mainwindow.h
+++ b/RedPandaIDE/mainwindow.h
@@ -518,6 +518,16 @@ private slots:
void on_actionProblem_triggered();
+ void on_actionDelete_Line_triggered();
+
+ void on_actionDuplicate_Line_triggered();
+
+ void on_actionDelete_Word_triggered();
+
+ void on_actionDelete_to_EOL_triggered();
+
+ void on_actionDelete_to_BOL_triggered();
+
private:
Ui::MainWindow *ui;
EditorList *mEditorList;
diff --git a/RedPandaIDE/mainwindow.ui b/RedPandaIDE/mainwindow.ui
index 70747547..d45c3e17 100644
--- a/RedPandaIDE/mainwindow.ui
+++ b/RedPandaIDE/mainwindow.ui
@@ -506,7 +506,7 @@
QTabWidget::South
- 6
+ 0
@@ -702,7 +702,7 @@
QTabWidget::North
- 2
+ 0
@@ -1381,7 +1381,7 @@
0
0
1114
- 25
+ 30
diff --git a/RedPandaIDE/qsynedit/KeyStrokes.cpp b/RedPandaIDE/qsynedit/KeyStrokes.cpp
index e0c991e2..4aba2d29 100644
--- a/RedPandaIDE/qsynedit/KeyStrokes.cpp
+++ b/RedPandaIDE/qsynedit/KeyStrokes.cpp
@@ -219,11 +219,13 @@ void SynEditKeyStrokes::resetDefaults()
add(SynEditorCommand::ecCut, Qt::Key_X, Qt::ControlModifier);
add(SynEditorCommand::ecBlockIndent, Qt::Key_I, Qt::ControlModifier|Qt::ShiftModifier);
add(SynEditorCommand::ecBlockUnindent, Qt::Key_U, Qt::ControlModifier|Qt::ShiftModifier);
- add(SynEditorCommand::ecLineBreak, Qt::Key_M, Qt::ControlModifier);
- add(SynEditorCommand::ecInsertLine, Qt::Key_N, Qt::ControlModifier);
- add(SynEditorCommand::ecDeleteWord, Qt::Key_T, Qt::ControlModifier);
- add(SynEditorCommand::ecDeleteLine, Qt::Key_Y, Qt::ControlModifier);
- add(SynEditorCommand::ecDeleteEOL, Qt::Key_Y, Qt::ControlModifier|Qt::ShiftModifier);
+// add(SynEditorCommand::ecLineBreak, Qt::Key_M, Qt::ControlModifier);
+// add(SynEditorCommand::ecInsertLine, Qt::Key_N, Qt::ControlModifier);
+// add(SynEditorCommand::ecDeleteWord, Qt::Key_T, Qt::ControlModifier);
+// add(SynEditorCommand::ecDeleteLine, Qt::Key_Y, Qt::ControlModifier);
+// add(SynEditorCommand::ecDeleteEOL, Qt::Key_Y, Qt::ControlModifier|Qt::ShiftModifier);
+// add(SynEditorCommand::ecDuplicateLine, Qt::Key_D, Qt::ControlModifier);
+
add(SynEditorCommand::ecUndo, Qt::Key_Z, Qt::ControlModifier);
add(SynEditorCommand::ecRedo, Qt::Key_Z, Qt::ControlModifier|Qt::ShiftModifier);
add(SynEditorCommand::ecGotoMarker0, Qt::Key_0, Qt::ControlModifier);
diff --git a/RedPandaIDE/qsynedit/SynEdit.cpp b/RedPandaIDE/qsynedit/SynEdit.cpp
index a5d404ea..29f3c88d 100644
--- a/RedPandaIDE/qsynedit/SynEdit.cpp
+++ b/RedPandaIDE/qsynedit/SynEdit.cpp
@@ -250,6 +250,10 @@ void SynEdit::setCaretXYEx(bool CallEnsureCursorPos, BufferCoord value)
invalidateLine(mCaretY);
invalidateLine(oldCaretY);
}
+ if (mGutter.activeLineTextColor().isValid()) {
+ invalidateGutterLine(mCaretY);
+ invalidateGutterLine(oldCaretY);
+ }
mStatusChanges.setFlag(SynStatusChange::scCaretY);
}
// Call UpdateLastCaretX before DecPaintLock because the event handler it
@@ -829,7 +833,7 @@ int SynEdit::columnToChar(int aLine, int aColumn) const
int SynEdit::stringColumns(const QString &line, int colsBefore) const
{
- int columns = colsBefore;
+ int columns = std::max(0,colsBefore);
int charCols;
for (int i=0;i 0) // search for the first IdentChar of this "word"
CX = StrRScanForNonWordChar(Line, CX - 1)+1;
@@ -5242,13 +5246,18 @@ void SynEdit::deleteFromTo(const BufferCoord &start, const BufferCoord &end)
return;
doOnPaintTransient(SynTransientType::ttBefore);
if ((start.Char != end.Char) || (start.Line != end.Line)) {
+ BufferCoord oldCaret = caretXY();
setBlockBegin(start);
setBlockEnd(end);
setActiveSelectionMode(SynSelectionMode::smNormal);
QString helper = selText();
setSelTextPrimitive("");
+ mUndoList->BeginBlock();
+ mUndoList->AddChange(SynChangeReason::crCaret, oldCaret, start,
+ "", SynSelectionMode::smNormal);
mUndoList->AddChange(SynChangeReason::crSilentDeleteAfterCursor, start, end,
helper, SynSelectionMode::smNormal);
+ mUndoList->EndBlock();
internalSetCaretXY(start);
}
doOnPaintTransient(SynTransientType::ttAfter);
@@ -5436,6 +5445,8 @@ void SynEdit::ExecuteCommand(SynEditorCommand Command, QChar AChar, void *pData)
clearAll();
break;
case SynEditorCommand::ecInsertLine:
+ insertLine(Command == SynEditorCommand::ecInsertLine);
+ break;
case SynEditorCommand::ecLineBreak:
insertLine(Command == SynEditorCommand::ecLineBreak);
break;
diff --git a/RedPandaIDE/qsynedit/TextPainter.cpp b/RedPandaIDE/qsynedit/TextPainter.cpp
index a524d119..435d2a0b 100644
--- a/RedPandaIDE/qsynedit/TextPainter.cpp
+++ b/RedPandaIDE/qsynedit/TextPainter.cpp
@@ -995,7 +995,7 @@ void SynEditTextPainter::PaintLines()
edit->mHighlighter->next();
}
// Don't assume HL.GetTokenPos is valid after HL.GetEOL == True.
- nTokenColumnsBefore += edit->stringColumns(sToken,nTokenColumnsBefore-1);
+ nTokenColumnsBefore += edit->stringColumns(sToken,nTokenColumnsBefore);
if (edit->mHighlighter->eol() && (nTokenColumnsBefore < vLastChar)) {
int lineColumns = edit->mLines->lineColumns(vLine-1);
// Draw text that couldn't be parsed by the highlighter, if any.
diff --git a/RedPandaIDE/version.h b/RedPandaIDE/version.h
index 30938498..e80b2153 100644
--- a/RedPandaIDE/version.h
+++ b/RedPandaIDE/version.h
@@ -2,6 +2,6 @@
#define VERSION_H
#include
-#define DEVCPP_VERSION "beta.0.9.2"
+#define DEVCPP_VERSION "beta.0.9.3"
#endif // VERSION_H