Фаза 1: мастер первого запуска — SettingsStore, GitManager (auto-init+коммиты), SyncManager (проверка соединений+ErrorCatalog), WelcomeWizard/ProviderSetupGuide; тесты smoke/git/vault (12/12)

This commit is contained in:
Flora (opencode)
2026-08-17 00:43:33 +03:00
parent 980fbcedcb
commit ed633ae036
18 changed files with 1412 additions and 29 deletions
+63 -6
View File
@@ -3,7 +3,7 @@ import QtQuick.Controls
import QtQuick.Layouts
// Главное окно: меню вверху, три панели (дерево / редактор / правая).
// Фаза 0: каркас. Содержимое панелей наполняется в следующих фазах.
// Фазы 0-1: каркас + мастер первого запуска. Контент панелей — в следующих фазах.
ApplicationWindow {
id: window
width: 1280
@@ -12,10 +12,27 @@ ApplicationWindow {
title: "Flora"
color: "white"
// Мастер первого запуска: показываем, если ещё нет ни одного хранилища.
WelcomeWizard {
id: welcomeWizard
firstRun: vaultManager.vaults.length === 0
onFinished: vaultSwitcher.close()
}
Component.onCompleted: {
if (vaultManager.vaults.length === 0)
welcomeWizard.open()
}
function openWizard() {
welcomeWizard.firstRun = false
welcomeWizard.open()
}
menuBar: MenuBar {
Menu {
title: qsTr("&Файл")
Action { text: qsTr("Открыть хранилище…"); onTriggered: vaultSwitcher.open() }
Action { text: qsTr("Добавить хранилище…"); onTriggered: window.openWizard() }
Menu {
title: qsTr("Экспорт")
Action { text: qsTr("В HTML…"); enabled: false }
@@ -60,20 +77,60 @@ ApplicationWindow {
}
}
// Переключатель хранилищ (кнопка внизу слева, в FileTreePanel)
Popup {
id: vaultSwitcher
x: 12
y: window.height - height - 12
width: 280
width: 320
modal: false
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
ColumnLayout {
width: parent.width
Label { text: qsTr("Хранилища (Фаза 2)") }
Button { text: qsTr("Это окно: %1").arg(vaultManager.currentVault) }
spacing: 6
Label {
text: qsTr("Хранилища")
font.bold: true
}
ListView {
id: vaultList
Layout.preferredHeight: Math.min(200, contentHeight)
Layout.fillWidth: true
model: vaultManager.vaults
clip: true
delegate: ItemDelegate {
width: ListView.view.width
text: modelData
highlighted: modelData === vaultManager.currentVault
onClicked: {
if (modelData !== vaultManager.currentVault) {
vaultManager.selectVault(modelData)
}
}
}
}
Label {
visible: vaultList.count === 0
text: qsTr("Хранилищ пока нет")
color: "#888"
}
Label {
text: qsTr("Текущее: %1").arg(vaultManager.currentVault.length > 0
? vaultManager.currentVault : "—")
color: "#666"
elide: Text.ElideMiddle
Layout.fillWidth: true
}
Button {
Layout.fillWidth: true
text: qsTr("Добавить новое хранилище…")
onClicked: { vaultSwitcher.close(); vaultManager.setCurrentVault("/") }
onClicked: { vaultSwitcher.close(); window.openWizard() }
}
}
}