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;
+}