From cd1e20c2d7f76f03d4cc0624ee00bcc2d85fb11c Mon Sep 17 00:00:00 2001 From: Roy Qu Date: Tue, 23 Nov 2021 10:32:33 +0800 Subject: [PATCH] - 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 --- NEWS.md | 3 ++ RedPandaIDE/compiler/compilermanager.cpp | 2 +- RedPandaIDE/compiler/projectcompiler.cpp | 9 ++-- RedPandaIDE/editor.cpp | 4 ++ RedPandaIDE/mainwindow.cpp | 54 ++++++++++++++++-------- RedPandaIDE/mainwindow.ui | 9 ++++ 6 files changed, 58 insertions(+), 23 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6bbcf14e..f78aa83d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,9 @@ 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 Version 0.9.2 For Dev-C++ 7 Beta - fix: gutter of the disassembly code control in the cpu info dialog is grayed diff --git a/RedPandaIDE/compiler/compilermanager.cpp b/RedPandaIDE/compiler/compilermanager.cpp index 9caf66f2..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); 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 94d48b1a..5755af9e 100644 --- a/RedPandaIDE/editor.cpp +++ b/RedPandaIDE/editor.cpp @@ -3568,6 +3568,8 @@ void Editor::reformat() pSettings->dirs().app(), args, content); + int oldTopLine = topLine(); + BufferCoord mOldCaret = caretXY(); selectAll(); SynEditorOptions oldOptions = getOptions(); @@ -3575,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/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp index 87fb4e50..dd964017 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("Compile 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()) { diff --git a/RedPandaIDE/mainwindow.ui b/RedPandaIDE/mainwindow.ui index 47e7a255..7bac4e6a 100644 --- a/RedPandaIDE/mainwindow.ui +++ b/RedPandaIDE/mainwindow.ui @@ -2613,16 +2613,25 @@ Delete Line + + Ctrl+D + Duplicate Line + + Ctrl+E + Delete Word + + Ctrl+Shift+D +