From b8c9fe2832fdf76573311f6fede1a5536a718d64 Mon Sep 17 00:00:00 2001 From: MinyazevR Date: Wed, 8 Jan 2025 03:56:20 +0300 Subject: [PATCH 1/4] Create a list of recent files --- qrgui/mainWindow/mainWindow.cpp | 25 +++++++++++++++ qrgui/mainWindow/mainWindow.h | 3 ++ .../systemFacade/components/nullTextManager.h | 1 + qrgui/textEditor/textManager.cpp | 32 +++++++++++++++++-- qrgui/textEditor/textManager.h | 6 ++-- qrkernel/settingsDefaultValues | 1 + qrtranslations/fr/qrgui_mainWindow_fr.ts | 11 +++++-- qrtranslations/fr/qrgui_textEditor_fr.ts | 4 +-- qrtranslations/ru/qrgui_mainWindow_ru.ts | 11 +++++-- qrtranslations/ru/qrgui_textEditor_ru.ts | 4 +-- 10 files changed, 84 insertions(+), 14 deletions(-) diff --git a/qrgui/mainWindow/mainWindow.cpp b/qrgui/mainWindow/mainWindow.cpp index ccaf483f8a..2cde88fd34 100644 --- a/qrgui/mainWindow/mainWindow.cpp +++ b/qrgui/mainWindow/mainWindow.cpp @@ -112,6 +112,7 @@ MainWindow::MainWindow(const QString &fileToOpen) , mRootIndex(QModelIndex()) , mPreferencesDialog(new gui::PreferencesDialog(this)) , mRecentProjectsLimit(SettingsManager::value("recentProjectsLimit").toInt()) + , mRecentFilesLimit(SettingsManager::value("recentFilesLimit").toInt()) , mSceneCustomizer(new SceneCustomizer()) , mInitialFileToOpen(fileToOpen) { @@ -616,6 +617,26 @@ void MainWindow::openRecentProjectsMenu() } } +void MainWindow::openRecentFilesMenu() +{ + mRecentFilesMenu->clear(); + const QString stringList = SettingsManager::value("recentFiles").toString(); + QStringList recentFiles = stringList.split(";", QString::SkipEmptyParts); + mRecentFilesLimit = SettingsManager::value("recentFilesLimit", mRecentFilesLimit).toInt(); + while (recentFiles.size() > mRecentFilesLimit) { + recentFiles.pop_front(); + } + + for (const QString &filePath : recentFiles) { + const QFileInfo fileInfo(filePath); + if (fileInfo.exists() && fileInfo.isFile()) { + mRecentFilesMenu->addAction(filePath); + QObject::connect(mRecentFilesMenu->actions().last(), &QAction::triggered + , &*mProjectManager, [this, filePath](){ mProjectManager->openExisting(filePath);}); + } + } +} + void MainWindow::tryToSave() { if(!mProjectManager->saveText() && !mProjectManager->saveOrSuggestToSaveAs()) { @@ -2149,6 +2170,10 @@ void MainWindow::initRecentProjectsMenu() mRecentProjectsMenu = new QMenu(tr("Recent projects"), mUi->menu_File); mUi->menu_File->insertMenu(mUi->menu_File->actions().at(1), mRecentProjectsMenu); connect(mRecentProjectsMenu, &QMenu::aboutToShow, this, &MainWindow::openRecentProjectsMenu); + + mRecentFilesMenu = new QMenu(tr("Recent files"), mUi->menu_File); + mUi->menu_File->insertMenu(mUi->menu_File->actions().at(2), mRecentFilesMenu); + connect(mRecentFilesMenu, &QMenu::aboutToShow, this, &MainWindow::openRecentFilesMenu); } void MainWindow::saveDiagramAsAPictureToFile(const QString &fileName) diff --git a/qrgui/mainWindow/mainWindow.h b/qrgui/mainWindow/mainWindow.h index bc5bbe5b68..a19461fcce 100644 --- a/qrgui/mainWindow/mainWindow.h +++ b/qrgui/mainWindow/mainWindow.h @@ -230,6 +230,7 @@ private slots: void hideBottomDocks(); void openRecentProjectsMenu(); + void openRecentFilesMenu(); void tryToSave(); void saveDiagramAsAPicture(); @@ -399,7 +400,9 @@ private slots: qReal::gui::PreferencesDialog *mPreferencesDialog; //Has ownership int mRecentProjectsLimit {}; + int mRecentFilesLimit {}; QMenu *mRecentProjectsMenu {}; // Has ownership + QMenu *mRecentFilesMenu {}; // Has ownership QScopedPointer mFindHelper; StartWidget *mStartWidget {}; // Has ownership diff --git a/qrgui/systemFacade/components/nullTextManager.h b/qrgui/systemFacade/components/nullTextManager.h index 31533b8675..f15af3a249 100644 --- a/qrgui/systemFacade/components/nullTextManager.h +++ b/qrgui/systemFacade/components/nullTextManager.h @@ -46,6 +46,7 @@ class QRGUI_SYSTEM_FACADE_EXPORT NullTextManager : public TextManagerInterface void showInTextEditor(const QFileInfo &fileInfo, const QString &genName , const text::LanguageInfo &language) override; + void showInTextEditor(const QFileInfo &fileInfo, const text::LanguageInfo &language) override; bool saveText(bool saveAs) override; diff --git a/qrgui/textEditor/textManager.cpp b/qrgui/textEditor/textManager.cpp index 59a5040126..aa3c79265e 100644 --- a/qrgui/textEditor/textManager.cpp +++ b/qrgui/textEditor/textManager.cpp @@ -30,7 +30,8 @@ using namespace qReal; using namespace text; TextManager::TextManager(SystemEvents &systemEvents, gui::MainWindowInterpretersInterface &mainWindow) - : mMainWindow(mainWindow) + : mRecentFilesLimit(SettingsManager::value("recentFilesLimit").toInt()) + , mMainWindow(mainWindow) , mSystemEvents(systemEvents) { connect(&mSystemEvents, &SystemEvents::codeTabClosed, this, &TextManager::onTabClosed); @@ -238,6 +239,31 @@ void TextManager::showInTextEditor(const QFileInfo &fileInfo } } +void TextManager::refreshRecentFilesList(const QString &fileName) { + QString previousString = SettingsManager::value("recentFiles").toString(); + QStringList previousList = previousString.split(";", QString::SkipEmptyParts); + previousList.removeOne(fileName); + + if (!previousList.isEmpty() && (previousList.size() == mRecentFilesLimit)) { + previousList.removeLast(); + } + + previousString.clear(); + if (mRecentFilesLimit > 0) { + previousList.push_front(fileName); + QStringListIterator iterator(previousList); + while (iterator.hasNext()) { + const auto recentFileName = iterator.next(); + const QFileInfo fileInfo(recentFileName); + if (fileInfo.exists() && fileInfo.isFile()) { + previousString = previousString + recentFileName + ";"; + } + } + } + + SettingsManager::setValue("recentFiles", previousString); +} + void TextManager::showInTextEditor(const QFileInfo &fileInfo, const text::LanguageInfo &language) { Q_ASSERT(!fileInfo.completeBaseName().isEmpty()); @@ -254,6 +280,7 @@ void TextManager::showInTextEditor(const QFileInfo &fileInfo, const text::Langua return; } + refreshRecentFilesList(filePath); area->show(); // Need to bind diagram and code file only if code is just generated @@ -289,7 +316,6 @@ bool TextManager::saveText(bool saveAs) if (!fileInfo.fileName().isEmpty()) { mMainWindow.setTabText(area, fileInfo.fileName()); - utils::OutFile out(fileInfo.absoluteFilePath()); out() << area->text(); @@ -304,6 +330,8 @@ bool TextManager::saveText(bool saveAs) if (saveAs && !diagram.isNull()) { emit mSystemEvents.codePathChanged(diagram, path(area), fileInfo); } + + refreshRecentFilesList(fileInfo.absoluteFilePath()); } return true; diff --git a/qrgui/textEditor/textManager.h b/qrgui/textEditor/textManager.h index 6a2a3f7195..c2ceb8cbe8 100644 --- a/qrgui/textEditor/textManager.h +++ b/qrgui/textEditor/textManager.h @@ -17,7 +17,7 @@ #include #include #include - +#include #include "qrgui/textEditor/textEditorDeclSpec.h" #include "qrgui/textEditor/textManagerInterface.h" #include "qrgui/textEditor/codeBlockManager.h" @@ -82,12 +82,14 @@ private slots: void onTabClosed(const QFileInfo &file); private: + + void refreshRecentFilesList(const QString &fileName); QMap mText; // No ownership QMap mPath; // No ownership /// If default path - true. QMap mPathType; - + int mRecentFilesLimit {}; /// Contains names of generator, which generate each file QMap mGeneratorName; diff --git a/qrkernel/settingsDefaultValues b/qrkernel/settingsDefaultValues index 0abbb18cbe..0b69b62c81 100644 --- a/qrkernel/settingsDefaultValues +++ b/qrkernel/settingsDefaultValues @@ -67,6 +67,7 @@ pythonPath=python generationTimeout=100 nodesStateButtonExpands=true recentProjectsLimit=5 +recentFilesLimit=7 dragArea = 12 touchMode=false scriptInterpretation=false diff --git a/qrtranslations/fr/qrgui_mainWindow_fr.ts b/qrtranslations/fr/qrgui_mainWindow_fr.ts index d9098476d6..0ed49562f3 100644 --- a/qrtranslations/fr/qrgui_mainWindow_fr.ts +++ b/qrtranslations/fr/qrgui_mainWindow_fr.ts @@ -708,7 +708,7 @@ qReal::MainWindow - + Could not save file, try to save it to another place @@ -717,7 +717,7 @@ À propo de QReal - + Restore default settings @@ -729,7 +729,7 @@ WARNING: The settings will be restored after application restart - + Error Erreur @@ -861,6 +861,11 @@ WARNING: The settings will be restored after application restart Recent projects Projets récents + + + Recent files + + Save File diff --git a/qrtranslations/fr/qrgui_textEditor_fr.ts b/qrtranslations/fr/qrgui_textEditor_fr.ts index 9ba4933b69..3e057fd7d7 100644 --- a/qrtranslations/fr/qrgui_textEditor_fr.ts +++ b/qrtranslations/fr/qrgui_textEditor_fr.ts @@ -4,7 +4,7 @@ qReal::text::TextManager - + Confirmation @@ -14,7 +14,7 @@ - + All files (*) Tous les fichiers (*) diff --git a/qrtranslations/ru/qrgui_mainWindow_ru.ts b/qrtranslations/ru/qrgui_mainWindow_ru.ts index 398cfd69fe..384826a55d 100644 --- a/qrtranslations/ru/qrgui_mainWindow_ru.ts +++ b/qrtranslations/ru/qrgui_mainWindow_ru.ts @@ -735,7 +735,7 @@ О QReal - + Error Ошибка @@ -788,7 +788,7 @@ Создать диаграмму - + Restore default settings Восстановить настройки по-умолчанию @@ -802,7 +802,7 @@ WARNING: The settings will be restored after application restart ВНИМАНИЕ: Настройки будут сброшены после перезапуска приложения - + Could not save file, try to save it to another place Не удалось сохранить файл, попробуйте сохранить его в другое место @@ -886,6 +886,11 @@ WARNING: The settings will be restored after application restart Recent projects Недавние проекты + + + Recent files + Недавние файлы + Save File diff --git a/qrtranslations/ru/qrgui_textEditor_ru.ts b/qrtranslations/ru/qrgui_textEditor_ru.ts index 51ba34b7e7..1d5d7b5415 100644 --- a/qrtranslations/ru/qrgui_textEditor_ru.ts +++ b/qrtranslations/ru/qrgui_textEditor_ru.ts @@ -42,7 +42,7 @@ qReal::text::TextManager - + Confirmation Подтвердите @@ -56,7 +56,7 @@ Сохранить перед закрытием? - + All files (*) Все файлы (*) From b4f82944679d2ca9f3230c83cc10fc823daabf0d Mon Sep 17 00:00:00 2001 From: MinyazevR Date: Fri, 10 Jan 2025 20:11:17 +0300 Subject: [PATCH 2/4] Improve and format code --- qrgui/mainWindow/mainWindow.cpp | 6 +++--- qrgui/textEditor/textManager.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/qrgui/mainWindow/mainWindow.cpp b/qrgui/mainWindow/mainWindow.cpp index 2cde88fd34..10fcc365dd 100644 --- a/qrgui/mainWindow/mainWindow.cpp +++ b/qrgui/mainWindow/mainWindow.cpp @@ -620,14 +620,14 @@ void MainWindow::openRecentProjectsMenu() void MainWindow::openRecentFilesMenu() { mRecentFilesMenu->clear(); - const QString stringList = SettingsManager::value("recentFiles").toString(); - QStringList recentFiles = stringList.split(";", QString::SkipEmptyParts); + const auto stringList = SettingsManager::value("recentFiles").toString(); + auto recentFiles = stringList.split(";", QString::SkipEmptyParts); mRecentFilesLimit = SettingsManager::value("recentFilesLimit", mRecentFilesLimit).toInt(); while (recentFiles.size() > mRecentFilesLimit) { recentFiles.pop_front(); } - for (const QString &filePath : recentFiles) { + for (auto &&filePath : recentFiles) { const QFileInfo fileInfo(filePath); if (fileInfo.exists() && fileInfo.isFile()) { mRecentFilesMenu->addAction(filePath); diff --git a/qrgui/textEditor/textManager.cpp b/qrgui/textEditor/textManager.cpp index aa3c79265e..240633e9a7 100644 --- a/qrgui/textEditor/textManager.cpp +++ b/qrgui/textEditor/textManager.cpp @@ -240,8 +240,8 @@ void TextManager::showInTextEditor(const QFileInfo &fileInfo } void TextManager::refreshRecentFilesList(const QString &fileName) { - QString previousString = SettingsManager::value("recentFiles").toString(); - QStringList previousList = previousString.split(";", QString::SkipEmptyParts); + auto previousString = SettingsManager::value("recentFiles").toString(); + auto previousList = previousString.split(";", QString::SkipEmptyParts); previousList.removeOne(fileName); if (!previousList.isEmpty() && (previousList.size() == mRecentFilesLimit)) { From 1a5decd4fe6ba4fa3b44e1c49c0f8b289e55b46f Mon Sep 17 00:00:00 2001 From: MinyazevR Date: Fri, 10 Jan 2025 20:52:55 +0300 Subject: [PATCH 3/4] TextManager should not know anything about the SettingsManager --- qrgui/mainWindow/mainWindow.cpp | 26 +++++++++++++++++++ qrgui/mainWindow/mainWindow.h | 1 + qrgui/textEditor/textManager.cpp | 32 +++--------------------- qrgui/textEditor/textManager.h | 5 +--- qrgui/textEditor/textManagerInterface.h | 1 + qrtranslations/fr/qrgui_mainWindow_fr.ts | 6 ++--- qrtranslations/fr/qrgui_textEditor_fr.ts | 4 +-- qrtranslations/ru/qrgui_mainWindow_ru.ts | 6 ++--- qrtranslations/ru/qrgui_textEditor_ru.ts | 4 +-- 9 files changed, 42 insertions(+), 43 deletions(-) diff --git a/qrgui/mainWindow/mainWindow.cpp b/qrgui/mainWindow/mainWindow.cpp index 10fcc365dd..2bd09dfb9b 100644 --- a/qrgui/mainWindow/mainWindow.cpp +++ b/qrgui/mainWindow/mainWindow.cpp @@ -344,6 +344,7 @@ void MainWindow::connectActions() connect(mUi->tabs, &QTabWidget::currentChanged, this, &MainWindow::sceneSelectionChanged); connect(&*mTextManager, &text::TextManager::textChanged, this, &MainWindow::setTextChanged); connect(&*mTextManager, &text::TextManager::textChanged, mUi->actionUndo, &QAction::setEnabled); + connect(&*mTextManager, &text::TextManager::needRefreshRecentFileList, this, &MainWindow::refreshRecentFilesList); connect(&*mProjectManager, &ProjectManager::afterOpen, mUi->paletteTree, &PaletteTree::refreshUserPalettes); connect(&*mProjectManager, &ProjectManager::closed, mUi->paletteTree, &PaletteTree::refreshUserPalettes); @@ -599,6 +600,31 @@ void MainWindow::refreshRecentProjectsList(const QString &fileName) SettingsManager::setValue("recentProjects", previousString); } +void MainWindow::refreshRecentFilesList(const QString &fileName) { + auto previousString = SettingsManager::value("recentFiles").toString(); + auto previousList = previousString.split(";", QString::SkipEmptyParts); + previousList.removeOne(fileName); + + if (!previousList.isEmpty() && (previousList.size() == mRecentFilesLimit)) { + previousList.removeLast(); + } + + previousString.clear(); + if (mRecentFilesLimit > 0) { + previousList.push_front(fileName); + QStringListIterator iterator(previousList); + while (iterator.hasNext()) { + const auto recentFileName = iterator.next(); + const QFileInfo fileInfo(recentFileName); + if (fileInfo.exists() && fileInfo.isFile()) { + previousString = previousString + recentFileName + ";"; + } + } + } + + SettingsManager::setValue("recentFiles", previousString); +} + void MainWindow::openRecentProjectsMenu() { mRecentProjectsMenu->clear(); diff --git a/qrgui/mainWindow/mainWindow.h b/qrgui/mainWindow/mainWindow.h index a19461fcce..e7bd0bdbbb 100644 --- a/qrgui/mainWindow/mainWindow.h +++ b/qrgui/mainWindow/mainWindow.h @@ -195,6 +195,7 @@ public slots: void closeStartTab(); void closeAllTabs(); void refreshRecentProjectsList(const QString &fileName); + void refreshRecentFilesList(const QString &fileName); void createDiagram(const QString &idString); /// Creates project with specified root diagram bool createProject(const QString &diagramIdString); diff --git a/qrgui/textEditor/textManager.cpp b/qrgui/textEditor/textManager.cpp index 240633e9a7..9b6bba126f 100644 --- a/qrgui/textEditor/textManager.cpp +++ b/qrgui/textEditor/textManager.cpp @@ -30,8 +30,7 @@ using namespace qReal; using namespace text; TextManager::TextManager(SystemEvents &systemEvents, gui::MainWindowInterpretersInterface &mainWindow) - : mRecentFilesLimit(SettingsManager::value("recentFilesLimit").toInt()) - , mMainWindow(mainWindow) + : mMainWindow(mainWindow) , mSystemEvents(systemEvents) { connect(&mSystemEvents, &SystemEvents::codeTabClosed, this, &TextManager::onTabClosed); @@ -239,31 +238,6 @@ void TextManager::showInTextEditor(const QFileInfo &fileInfo } } -void TextManager::refreshRecentFilesList(const QString &fileName) { - auto previousString = SettingsManager::value("recentFiles").toString(); - auto previousList = previousString.split(";", QString::SkipEmptyParts); - previousList.removeOne(fileName); - - if (!previousList.isEmpty() && (previousList.size() == mRecentFilesLimit)) { - previousList.removeLast(); - } - - previousString.clear(); - if (mRecentFilesLimit > 0) { - previousList.push_front(fileName); - QStringListIterator iterator(previousList); - while (iterator.hasNext()) { - const auto recentFileName = iterator.next(); - const QFileInfo fileInfo(recentFileName); - if (fileInfo.exists() && fileInfo.isFile()) { - previousString = previousString + recentFileName + ";"; - } - } - } - - SettingsManager::setValue("recentFiles", previousString); -} - void TextManager::showInTextEditor(const QFileInfo &fileInfo, const text::LanguageInfo &language) { Q_ASSERT(!fileInfo.completeBaseName().isEmpty()); @@ -280,7 +254,7 @@ void TextManager::showInTextEditor(const QFileInfo &fileInfo, const text::Langua return; } - refreshRecentFilesList(filePath); + emit needRefreshRecentFileList(filePath); area->show(); // Need to bind diagram and code file only if code is just generated @@ -331,7 +305,7 @@ bool TextManager::saveText(bool saveAs) emit mSystemEvents.codePathChanged(diagram, path(area), fileInfo); } - refreshRecentFilesList(fileInfo.absoluteFilePath()); + emit needRefreshRecentFileList(fileInfo.absoluteFilePath()); } return true; diff --git a/qrgui/textEditor/textManager.h b/qrgui/textEditor/textManager.h index c2ceb8cbe8..2946cdadb5 100644 --- a/qrgui/textEditor/textManager.h +++ b/qrgui/textEditor/textManager.h @@ -17,7 +17,6 @@ #include #include #include -#include #include "qrgui/textEditor/textEditorDeclSpec.h" #include "qrgui/textEditor/textManagerInterface.h" #include "qrgui/textEditor/codeBlockManager.h" @@ -82,14 +81,12 @@ private slots: void onTabClosed(const QFileInfo &file); private: - - void refreshRecentFilesList(const QString &fileName); QMap mText; // No ownership QMap mPath; // No ownership /// If default path - true. QMap mPathType; - int mRecentFilesLimit {}; + /// Contains names of generator, which generate each file QMap mGeneratorName; diff --git a/qrgui/textEditor/textManagerInterface.h b/qrgui/textEditor/textManagerInterface.h index d43123d550..12ef3480b2 100644 --- a/qrgui/textEditor/textManagerInterface.h +++ b/qrgui/textEditor/textManagerInterface.h @@ -56,6 +56,7 @@ class QRGUI_TEXT_EDITOR_EXPORT TextManagerInterface : public QObject signals: void textChanged(text::QScintillaTextEdit *editor, bool changed); + void needRefreshRecentFileList(const QString &fileName); }; } diff --git a/qrtranslations/fr/qrgui_mainWindow_fr.ts b/qrtranslations/fr/qrgui_mainWindow_fr.ts index 0ed49562f3..d025578835 100644 --- a/qrtranslations/fr/qrgui_mainWindow_fr.ts +++ b/qrtranslations/fr/qrgui_mainWindow_fr.ts @@ -708,7 +708,7 @@ qReal::MainWindow - + Could not save file, try to save it to another place @@ -717,7 +717,7 @@ À propo de QReal - + Restore default settings @@ -729,7 +729,7 @@ WARNING: The settings will be restored after application restart - + Error Erreur diff --git a/qrtranslations/fr/qrgui_textEditor_fr.ts b/qrtranslations/fr/qrgui_textEditor_fr.ts index 3e057fd7d7..cc9b44c798 100644 --- a/qrtranslations/fr/qrgui_textEditor_fr.ts +++ b/qrtranslations/fr/qrgui_textEditor_fr.ts @@ -4,7 +4,7 @@ qReal::text::TextManager - + Confirmation @@ -14,7 +14,7 @@ - + All files (*) Tous les fichiers (*) diff --git a/qrtranslations/ru/qrgui_mainWindow_ru.ts b/qrtranslations/ru/qrgui_mainWindow_ru.ts index 384826a55d..d35d2719f3 100644 --- a/qrtranslations/ru/qrgui_mainWindow_ru.ts +++ b/qrtranslations/ru/qrgui_mainWindow_ru.ts @@ -735,7 +735,7 @@ О QReal - + Error Ошибка @@ -788,7 +788,7 @@ Создать диаграмму - + Restore default settings Восстановить настройки по-умолчанию @@ -802,7 +802,7 @@ WARNING: The settings will be restored after application restart ВНИМАНИЕ: Настройки будут сброшены после перезапуска приложения - + Could not save file, try to save it to another place Не удалось сохранить файл, попробуйте сохранить его в другое место diff --git a/qrtranslations/ru/qrgui_textEditor_ru.ts b/qrtranslations/ru/qrgui_textEditor_ru.ts index 1d5d7b5415..11a17841ce 100644 --- a/qrtranslations/ru/qrgui_textEditor_ru.ts +++ b/qrtranslations/ru/qrgui_textEditor_ru.ts @@ -42,7 +42,7 @@ qReal::text::TextManager - + Confirmation Подтвердите @@ -56,7 +56,7 @@ Сохранить перед закрытием? - + All files (*) Все файлы (*) From 1ade4270961a443772c7de58f95599d6ee6eac0a Mon Sep 17 00:00:00 2001 From: MinyazevR Date: Thu, 27 Feb 2025 16:18:16 +0300 Subject: [PATCH 4/4] Lupdate --- qrtranslations/fr/qrgui_mainWindow_fr.ts | 4 ++-- qrtranslations/ru/qrgui_mainWindow_ru.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/qrtranslations/fr/qrgui_mainWindow_fr.ts b/qrtranslations/fr/qrgui_mainWindow_fr.ts index d025578835..1e2f6f275b 100644 --- a/qrtranslations/fr/qrgui_mainWindow_fr.ts +++ b/qrtranslations/fr/qrgui_mainWindow_fr.ts @@ -708,7 +708,7 @@ qReal::MainWindow - + Could not save file, try to save it to another place @@ -729,7 +729,7 @@ WARNING: The settings will be restored after application restart - + Error Erreur diff --git a/qrtranslations/ru/qrgui_mainWindow_ru.ts b/qrtranslations/ru/qrgui_mainWindow_ru.ts index d35d2719f3..b0d21b637d 100644 --- a/qrtranslations/ru/qrgui_mainWindow_ru.ts +++ b/qrtranslations/ru/qrgui_mainWindow_ru.ts @@ -735,7 +735,7 @@ О QReal - + Error Ошибка @@ -788,7 +788,7 @@ Создать диаграмму - + Restore default settings Восстановить настройки по-умолчанию