From 739f382f46f4ee30fdb5747321e6b090f2d7792e Mon Sep 17 00:00:00 2001 From: Roy Qu Date: Fri, 11 Aug 2023 13:49:09 +0800 Subject: [PATCH] - change: Remove option "clear all symbols when current editor is hidden". - fix: When opening multiple files, only the active file should be parsed. --- NEWS.md | 2 + RedPandaIDE/editor.cpp | 29 +++++++---- RedPandaIDE/mainwindow.cpp | 45 ++++++++++++++-- RedPandaIDE/mainwindow.h | 4 ++ RedPandaIDE/parser/cppparser.cpp | 1 + RedPandaIDE/settings.cpp | 52 +++++++++---------- RedPandaIDE/settings.h | 6 +-- .../editorcodecompletionwidget.cpp | 5 +- .../environmentperformancewidget.cpp | 5 +- 9 files changed, 101 insertions(+), 48 deletions(-) diff --git a/NEWS.md b/NEWS.md index aeee3e6f..32d3668b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -22,6 +22,8 @@ Red Panda C++ Version 2.24 - fix: Wrong code suggestion while inputing numbers in assembly files. - fix: Defines in all files are wrongly cleared when reparsing. - change: New file created by file template is set as unmodified by default. + - change: Remove option "clear all symbols when current editor is hidden". + - fix: When opening multiple files, only the active file should be parsed. Red Panda C++ Version 2.23 diff --git a/RedPandaIDE/editor.cpp b/RedPandaIDE/editor.cpp index 4bf058e8..4da3faec 100644 --- a/RedPandaIDE/editor.cpp +++ b/RedPandaIDE/editor.cpp @@ -217,9 +217,12 @@ Editor::Editor(QWidget *parent, const QString& filename, this, &Editor::onScrollBarValueChanged); mInited=true; - reparse(false); - checkSyntaxInBack(); - reparseTodo(); +// if (!pMainWindow->openingFiles() +// && !pMainWindow->openingProject()) { +// reparse(false); +// checkSyntaxInBack(); +// reparseTodo(); +// } } Editor::~Editor() { @@ -1386,7 +1389,8 @@ void Editor::showEvent(QShowEvent */*event*/) &CppParser::onEndParsing, this, &Editor::onEndParsing); - reparse(false); + if (!pMainWindow->openingFiles() && !pMainWindow->openingProject()) + reparse(false); } if (mParentPageControl) { pMainWindow->debugger()->setIsForProject(inProject()); @@ -1395,7 +1399,9 @@ void Editor::showEvent(QShowEvent */*event*/) } if (!pMainWindow->isClosingAll() - && !pMainWindow->isQuitting()) { + && !pMainWindow->isQuitting() + && !pMainWindow->openingFiles() + && !pMainWindow->openingProject()) { if (!inProject() || !pMainWindow->closingProject()) { checkSyntaxInBack(); reparseTodo(); @@ -1418,12 +1424,13 @@ void Editor::showEvent(QShowEvent */*event*/) void Editor::hideEvent(QHideEvent */*event*/) { - if (pSettings->codeCompletion().clearWhenEditorHidden() - && !inProject() && mParser - && !pMainWindow->isMinimized()) { - //recreate a parser, to totally clean memories the parser uses; - resetCppParser(mParser); - } +// if (pSettings->codeCompletion().clearWhenEditorHidden() +// && !inProject() && mParser +// && !pMainWindow->isMinimized()) { +// //recreate a parser, to totally clean memories the parser uses; +// if (!pMainWindow->openingFiles() && !pMainWindow->openingProject()) +// resetCppParser(mParser); +// } if (mParser) { disconnect(mParser.get(), &CppParser::onEndParsing, diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp index 0ead2bec..3182e402 100644 --- a/RedPandaIDE/mainwindow.cpp +++ b/RedPandaIDE/mainwindow.cpp @@ -117,6 +117,8 @@ MainWindow::MainWindow(QWidget *parent) mSearchInFilesDialog{nullptr}, mSearchDialog{nullptr}, mQuitting{false}, + mOpeningFiles{false}, + mOpeningProject{false}, mClosingProject{false}, mCheckSyntaxInBack{false}, mShouldRemoveAllSettings{false}, @@ -445,8 +447,8 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->EditorTabsRight, &EditorsTabWidget::middleButtonClicked, this, &MainWindow::on_EditorTabsRight_tabCloseRequested); - //git menu #ifdef ENABLE_VCS + //git menu connect(ui->menuGit, &QMenu::aboutToShow, this, &MainWindow::updateVCSActions); #endif @@ -1442,6 +1444,10 @@ void MainWindow::setProjectCurrentFile(const QString &filename) void MainWindow::openFiles(const QStringList &files) { + mOpeningFiles=true; + auto action=finally([this]{ + mOpeningFiles=false; + }); mEditorList->beginUpdate(); mOpenningFiles = true; auto end = finally([this] { @@ -1464,8 +1470,12 @@ void MainWindow::openFiles(const QStringList &files) } mEditorList->endUpdate(); Editor* e=mEditorList->getEditor(); - if (e) + if (e) { + e->reparse(false); + e->checkSyntaxInBack(); + e->reparseTodo(); e->activate(); + } } Editor* MainWindow::openFile(QString filename, bool activate, QTabWidget* page) @@ -1523,6 +1533,10 @@ Editor* MainWindow::openFile(QString filename, bool activate, QTabWidget* page) void MainWindow::openProject(QString filename, bool openFiles) { + mOpeningProject=true; + auto action=finally([this]{ + mOpeningProject=false; + }); if (!fileExists(filename)) { return; } @@ -3189,6 +3203,10 @@ bool MainWindow::saveLastOpens() void MainWindow::loadLastOpens() { + mOpeningFiles=true; + auto action=finally([this]{ + mOpeningFiles=false; + }); QString filename = includeTrailingPathDelimiter(pSettings->dirs().config()) + DEV_LASTOPENS_FILE; if (!fileExists(filename)) return; @@ -3275,8 +3293,15 @@ void MainWindow::loadLastOpens() updateEditorActions(); //updateForEncodingInfo(); } - if (focusedEditor) + if (!focusedEditor) { + focusedEditor = mEditorList->getEditor(); + } + if (focusedEditor) { + focusedEditor->reparse(false); + focusedEditor->checkSyntaxInBack(); + focusedEditor->reparseTodo(); focusedEditor->activate(); + } } void MainWindow::updateTools() @@ -7548,7 +7573,8 @@ void MainWindow::reparseNonProjectEditors() for (int i=0;ipageCount();i++) { Editor* e=(*mEditorList)[i]; if (!e->inProject()) { - if (!pSettings->codeCompletion().clearWhenEditorHidden() || e->isVisible()) { +// if (!pSettings->codeCompletion().clearWhenEditorHidden() || e->isVisible()) { + if (e->isVisible()) { e->reparse(true); e->checkSyntaxInBack(); } @@ -7959,6 +7985,7 @@ void MainWindow::on_actionRename_Symbol_triggered() refactor.renameSymbol(editor,oldCaretXY,newWord); editor->reparse(true); editor->checkSyntaxInBack(); + editor->reparseTodo(); } @@ -10014,3 +10041,13 @@ void MainWindow::on_actionTurtle_Graphics_Manual_triggered() QDesktopServices::openUrl(QUrl("https://zhuanlan.zhihu.com/p/538666844")); } +bool MainWindow::openingProject() const +{ + return mOpeningProject; +} + +bool MainWindow::openingFiles() const +{ + return mOpeningFiles; +} + diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h index 8cd509ea..ea7c34ee 100644 --- a/RedPandaIDE/mainwindow.h +++ b/RedPandaIDE/mainwindow.h @@ -872,6 +872,8 @@ private: SearchInFileDialog *mSearchInFilesDialog; SearchDialog *mSearchDialog; bool mQuitting; + bool mOpeningFiles; + bool mOpeningProject; bool mClosingProject; QElapsedTimer mParserTimer; QFileSystemWatcher mFileSystemWatcher; @@ -1028,6 +1030,8 @@ public: bool isQuitting() const; const std::shared_ptr &visitHistoryManager() const; bool closingProject() const; + bool openingFiles() const; + bool openingProject() const; }; extern MainWindow* pMainWindow; diff --git a/RedPandaIDE/parser/cppparser.cpp b/RedPandaIDE/parser/cppparser.cpp index 843d6a8e..33adb253 100644 --- a/RedPandaIDE/parser/cppparser.cpp +++ b/RedPandaIDE/parser/cppparser.cpp @@ -6526,6 +6526,7 @@ void parseFile(PCppParser parser, const QString& fileName, bool inProject, bool return; if (!parser->enabled()) return; +// qDebug()<<"parsing "<connect(thread, diff --git a/RedPandaIDE/settings.cpp b/RedPandaIDE/settings.cpp index 557d06b4..51766c78 100644 --- a/RedPandaIDE/settings.cpp +++ b/RedPandaIDE/settings.cpp @@ -4166,32 +4166,32 @@ void Settings::CodeCompletion::setShowCodeIns(bool newShowCodeIns) mShowCodeIns = newShowCodeIns; } -bool Settings::CodeCompletion::clearWhenEditorHidden() -{ - if (!mShareParser) { -#ifdef Q_OS_WIN - MEMORYSTATUSEX statex; - statex.dwLength = sizeof (statex); - GlobalMemoryStatusEx (&statex); +//bool Settings::CodeCompletion::clearWhenEditorHidden() +//{ +// if (!mShareParser) { +//#ifdef Q_OS_WIN +// MEMORYSTATUSEX statex; +// statex.dwLength = sizeof (statex); +// GlobalMemoryStatusEx (&statex); - if (statex.ullAvailPhys < (long long int)2*1024*1024*1024) { - return true; - } -#elif defined(Q_OS_LINUX) - struct sysinfo si; - sysinfo(&si); - if (si.freeram < (long long int)2*1024*1024*1024) { - return true; - } -#endif - } - return mClearWhenEditorHidden; -} +// if (statex.ullAvailPhys < (long long int)2*1024*1024*1024) { +// return true; +// } +//#elif defined(Q_OS_LINUX) +// struct sysinfo si; +// sysinfo(&si); +// if (si.freeram < (long long int)2*1024*1024*1024) { +// return true; +// } +//#endif +// } +// return mClearWhenEditorHidden; +//} -void Settings::CodeCompletion::setClearWhenEditorHidden(bool newClearWhenEditorHidden) -{ - mClearWhenEditorHidden = newClearWhenEditorHidden; -} +//void Settings::CodeCompletion::setClearWhenEditorHidden(bool newClearWhenEditorHidden) +//{ +// mClearWhenEditorHidden = newClearWhenEditorHidden; +//} int Settings::CodeCompletion::minCharRequired() const { @@ -4357,7 +4357,7 @@ void Settings::CodeCompletion::doSave() saveValue("ignore_case",mIgnoreCase); saveValue("append_func",mAppendFunc); saveValue("show_code_ins",mShowCodeIns); - saveValue("clear_when_editor_hidden",mClearWhenEditorHidden); + //saveValue("clear_when_editor_hidden",mClearWhenEditorHidden); saveValue("min_char_required",mMinCharRequired); saveValue("hide_symbols_start_with_two_underline", mHideSymbolsStartsWithTwoUnderLine); saveValue("hide_symbols_start_with_underline", mHideSymbolsStartsWithUnderLine); @@ -4412,7 +4412,7 @@ void Settings::CodeCompletion::doLoad() // shouldShare = false; // } //#endif - mClearWhenEditorHidden = boolValue("clear_when_editor_hidden",doClear); + //mClearWhenEditorHidden = boolValue("clear_when_editor_hidden",doClear); mShareParser = boolValue("share_parser",shouldShare); } diff --git a/RedPandaIDE/settings.h b/RedPandaIDE/settings.h index bd0e9937..c31b0617 100644 --- a/RedPandaIDE/settings.h +++ b/RedPandaIDE/settings.h @@ -653,8 +653,8 @@ public: bool showCodeIns() const; void setShowCodeIns(bool newShowCodeIns); - bool clearWhenEditorHidden(); - void setClearWhenEditorHidden(bool newClearWhenEditorHidden); + //bool clearWhenEditorHidden(); + //void setClearWhenEditorHidden(bool newClearWhenEditorHidden); int minCharRequired() const; void setMinCharRequired(int newMinCharRequired); @@ -684,7 +684,7 @@ public: int mMinCharRequired; bool mHideSymbolsStartsWithTwoUnderLine; bool mHideSymbolsStartsWithUnderLine; - bool mClearWhenEditorHidden; + //bool mClearWhenEditorHidden; bool mShareParser; // _Base interface diff --git a/RedPandaIDE/settingsdialog/editorcodecompletionwidget.cpp b/RedPandaIDE/settingsdialog/editorcodecompletionwidget.cpp index 5d770003..a8eeb6b9 100644 --- a/RedPandaIDE/settingsdialog/editorcodecompletionwidget.cpp +++ b/RedPandaIDE/settingsdialog/editorcodecompletionwidget.cpp @@ -26,6 +26,7 @@ EditorCodeCompletionWidget::EditorCodeCompletionWidget(const QString& name, cons ui(new Ui::EditorCodeCompletionWidget) { ui->setupUi(this); + ui->chkClearWhenEditorHidden->setVisible(false); } EditorCodeCompletionWidget::~EditorCodeCompletionWidget() @@ -50,7 +51,7 @@ void EditorCodeCompletionWidget::doLoad() ui->chkIgnoreCases->setChecked(pSettings->codeCompletion().ignoreCase()); ui->chkAppendFunc->setChecked(pSettings->codeCompletion().appendFunc()); ui->chkShowCodeIns->setChecked(pSettings->codeCompletion().showCodeIns()); - ui->chkClearWhenEditorHidden->setChecked(pSettings->codeCompletion().clearWhenEditorHidden()); +// ui->chkClearWhenEditorHidden->setChecked(pSettings->codeCompletion().clearWhenEditorHidden()); ui->chkHideSymbolsStartWithTwoUnderline->setChecked(pSettings->codeCompletion().hideSymbolsStartsWithTwoUnderLine()); ui->chkHideSymbolsStartWithUnderline->setChecked(pSettings->codeCompletion().hideSymbolsStartsWithUnderLine()); @@ -78,7 +79,7 @@ void EditorCodeCompletionWidget::doSave() pSettings->codeCompletion().setShowCodeIns(ui->chkShowCodeIns->isChecked()); pSettings->codeCompletion().setMinCharRequired(ui->spinMinCharRequired->value()); - pSettings->codeCompletion().setClearWhenEditorHidden(ui->chkClearWhenEditorHidden->isChecked()); + //pSettings->codeCompletion().setClearWhenEditorHidden(ui->chkClearWhenEditorHidden->isChecked()); pSettings->codeCompletion().setHideSymbolsStartsWithTwoUnderLine(ui->chkHideSymbolsStartWithTwoUnderline->isChecked()); pSettings->codeCompletion().setHideSymbolsStartsWithUnderLine(ui->chkHideSymbolsStartWithUnderline->isChecked()); diff --git a/RedPandaIDE/settingsdialog/environmentperformancewidget.cpp b/RedPandaIDE/settingsdialog/environmentperformancewidget.cpp index 576ed84c..93f705ef 100644 --- a/RedPandaIDE/settingsdialog/environmentperformancewidget.cpp +++ b/RedPandaIDE/settingsdialog/environmentperformancewidget.cpp @@ -23,6 +23,7 @@ EnvironmentPerformanceWidget::EnvironmentPerformanceWidget(const QString& name, ui(new Ui::EnvironmentPerformanceWidget) { ui->setupUi(this); + ui->chkClearWhenEditorHidden->setVisible(false); } EnvironmentPerformanceWidget::~EnvironmentPerformanceWidget() @@ -32,7 +33,7 @@ EnvironmentPerformanceWidget::~EnvironmentPerformanceWidget() void EnvironmentPerformanceWidget::doLoad() { - ui->chkClearWhenEditorHidden->setChecked(pSettings->codeCompletion().clearWhenEditorHidden()); +// ui->chkClearWhenEditorHidden->setChecked(pSettings->codeCompletion().clearWhenEditorHidden()); //#ifdef Q_OS_WIN // MEMORYSTATUSEX statex; @@ -58,7 +59,7 @@ void EnvironmentPerformanceWidget::doLoad() void EnvironmentPerformanceWidget::doSave() { - pSettings->codeCompletion().setClearWhenEditorHidden(ui->chkClearWhenEditorHidden->isChecked()); + //pSettings->codeCompletion().setClearWhenEditorHidden(ui->chkClearWhenEditorHidden->isChecked()); pSettings->codeCompletion().setShareParser(ui->chkEditorsShareParser->isChecked()); pSettings->codeCompletion().save();