diff --git a/qml/MainWindow.qml b/qml/MainWindow.qml index d342f6c..6ff7dd5 100644 --- a/qml/MainWindow.qml +++ b/qml/MainWindow.qml @@ -199,6 +199,7 @@ ApplicationWindow { if (modelData === window.activeVault) { vaultSwitcher.close() } else { + vaultManager.selectVault(modelData) windowController.openWindow(modelData) vaultSwitcher.close() } diff --git a/qml/panels/CodeBlock.qml b/qml/panels/CodeBlock.qml index 4a0d985..0cc08b0 100644 --- a/qml/panels/CodeBlock.qml +++ b/qml/panels/CodeBlock.qml @@ -106,7 +106,14 @@ Rectangle { id: codeText anchors.fill: parent anchors.margins: 10 - text: root.highlightedText.length > 0 ? root.highlightedText : root.code + // Сохраняем форматирование как ввёл пользователь: оборачиваем в
 с pre-wrap
+                text: {
+                    let src = root.highlightedText
+                    if (!src || src.length === 0) {
+                        src = root.code.replace(/&/g, "&").replace(//g, ">").replace(/\"/g, """)
+                    }
+                    return "
" + src + "
" + } textFormat: TextEdit.RichText wrapMode: TextEdit.Wrap readOnly: true diff --git a/src/main.cpp b/src/main.cpp index 38a248c..fbf25bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -70,8 +70,14 @@ int main(int argc, char *argv[]) &engine, QStringLiteral("qrc:/qt/qml/Flora/qml/MainWindow.qml")); engine.rootContext()->setContextProperty("windowController", &windowController); - // Основное окно = последнее (основное) хранилище. Если хранилищ нет — - // откроется мастер первого запуска. + // При открытии любого окна — запоминаем его как последнее выбранное (для следующего запуска) + QObject::connect(&windowController, &WindowController::windowOpened, + &settingsStore, [&](const QString &vault){ + if (!vault.isEmpty()) settingsStore.setCurrentVault(vault); + }); + + // Основное окно = последнее выбранное хранилище (а не последнее добавленное). + // currentVault теперь обновляется при каждом выборе в переключателе. windowController.openWindow(settingsStore.currentVault()); // Окна создаются через QQmlComponent (WindowController), поэтому проверяем diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3338f80..e1f1aa4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -160,4 +160,14 @@ add_executable(flora_git_history_test git_history_test.cpp ) target_include_directories(flora_git_history_test PRIVATE ../src) target_link_libraries(flora_git_history_test PRIVATE Qt6::Core Flora_libgit2_static) -add_test(NAME flora_git_history_test COMMAND flora_git_history_test) \ No newline at end of file +add_test(NAME flora_git_history_test COMMAND flora_git_history_test) + +# Тест выбора хранилища (последнее выбранное, а не добавленное) +add_executable(flora_vault_select_test vault_select_test.cpp + ../src/app/VaultManager.cpp + ../src/core/SettingsStore.cpp + ../src/git/GitManager.cpp +) +target_include_directories(flora_vault_select_test PRIVATE ../src) +target_link_libraries(flora_vault_select_test PRIVATE Qt6::Core Flora_libgit2_static) +add_test(NAME flora_vault_select_test COMMAND flora_vault_select_test) \ No newline at end of file diff --git a/tests/vault_select_test.cpp b/tests/vault_select_test.cpp new file mode 100644 index 0000000..f25104e --- /dev/null +++ b/tests/vault_select_test.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include +#include "core/SettingsStore.h" +#include "app/VaultManager.h" +#include "git/GitManager.h" +int main(int argc, char *argv[]){ + QCoreApplication app(argc, argv); + app.setOrganizationName("TestVault"); + app.setApplicationName("test"); + QTemporaryDir dir; + if(!dir.isValid()) return 1; + QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, dir.path()); + QSettings::setDefaultFormat(QSettings::IniFormat); + SettingsStore s; + GitManager g; + VaultManager vm(&s, &g); + QString v1 = dir.path() + "/vault1"; + QString v2 = dir.path() + "/vault2"; + if(!vm.createVault(v1).isEmpty()) return 1; + if(s.currentVault() != QDir::cleanPath(v1)) { std::fprintf(stderr,"FAIL v1 current %s\n", qPrintable(s.currentVault())); return 1; } + if(!vm.createVault(v2).isEmpty()) return 1; + if(s.currentVault() != QDir::cleanPath(v2)) return 1; + s.setCurrentVault(v1); + if(s.currentVault() != QDir::cleanPath(v1)) return 1; + { + SettingsStore s2; + if(s2.currentVault() != QDir::cleanPath(v1)) { std::fprintf(stderr,"FAIL restart current %s\n", qPrintable(s2.currentVault())); return 1; } + if(s2.vaults().size()!=2) return 1; + if(s2.vaults()[0] != QDir::cleanPath(v2)) return 1; + } + std::printf("VAULT SELECT TEST OK\n"); + return 0; +}