Фаза 1: мастер первого запуска — SettingsStore, GitManager (auto-init+коммиты), SyncManager (проверка соединений+ErrorCatalog), WelcomeWizard/ProviderSetupGuide; тесты smoke/git/vault (12/12)
This commit is contained in:
+63
-6
@@ -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() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user