Фазы 2-3: мульти-окна (WindowController, per-window FileStore), файловое дерево (FileStore+FileTreePanel, иконки/раскрытие/ПКМ/+drag&drop/подтверждения), NameDialog/ConfirmDialog; тест filestore (13/13)
This commit is contained in:
+50
-16
@@ -3,7 +3,7 @@ import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
// Главное окно: меню вверху, три панели (дерево / редактор / правая).
|
||||
// Фазы 0-1: каркас + мастер первого запуска. Контент панелей — в следующих фазах.
|
||||
// Мульти-хранилища: каждое окно привязано к своему хранилищу (windowVault).
|
||||
ApplicationWindow {
|
||||
id: window
|
||||
width: 1280
|
||||
@@ -12,16 +12,29 @@ ApplicationWindow {
|
||||
title: "Flora"
|
||||
color: "white"
|
||||
|
||||
// Мастер первого запуска: показываем, если ещё нет ни одного хранилища.
|
||||
// Хранилище этого окна (задаётся WindowController); у основного окна
|
||||
// может быть пустым — тогда берём основное хранилище из настроек.
|
||||
property string windowVault: ""
|
||||
|
||||
readonly property string activeVault: {
|
||||
if (fileStore.ready) return fileStore.vault
|
||||
if (windowVault.length > 0) return windowVault
|
||||
return vaultManager.currentVault
|
||||
}
|
||||
|
||||
WelcomeWizard {
|
||||
id: welcomeWizard
|
||||
firstRun: vaultManager.vaults.length === 0
|
||||
onFinished: vaultSwitcher.close()
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (vaultManager.vaults.length === 0)
|
||||
welcomeWizard.open()
|
||||
onFinished: {
|
||||
if (fileStore.ready) {
|
||||
// Добавлено новое хранилище при уже открытом — новое окно.
|
||||
windowController.openWindow(welcomeWizard.vaultPath)
|
||||
} else {
|
||||
// Первый запуск: применяем хранилище к этому окну.
|
||||
fileStore.openVault(welcomeWizard.vaultPath)
|
||||
root_status("Хранилище открыто")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function openWizard() {
|
||||
@@ -29,6 +42,21 @@ ApplicationWindow {
|
||||
welcomeWizard.open()
|
||||
}
|
||||
|
||||
function root_status(msg, ok) {
|
||||
console.log(msg)
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (windowVault.length > 0) {
|
||||
fileStore.openVault(windowVault)
|
||||
} else if (vaultManager.currentVault.length > 0) {
|
||||
fileStore.openVault(vaultManager.currentVault)
|
||||
}
|
||||
// Если хранилищ нет — мастер откроется автоматически.
|
||||
if (vaultManager.vaults.length === 0)
|
||||
welcomeWizard.open()
|
||||
}
|
||||
|
||||
menuBar: MenuBar {
|
||||
Menu {
|
||||
title: qsTr("&Файл")
|
||||
@@ -77,7 +105,7 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
// Переключатель хранилищ (кнопка внизу слева, в FileTreePanel)
|
||||
// Переключатель хранилищ (кнопка внизу слева)
|
||||
Popup {
|
||||
id: vaultSwitcher
|
||||
x: 12
|
||||
@@ -104,10 +132,13 @@ ApplicationWindow {
|
||||
delegate: ItemDelegate {
|
||||
width: ListView.view.width
|
||||
text: modelData
|
||||
highlighted: modelData === vaultManager.currentVault
|
||||
highlighted: modelData === window.activeVault
|
||||
onClicked: {
|
||||
if (modelData !== vaultManager.currentVault) {
|
||||
vaultManager.selectVault(modelData)
|
||||
if (modelData === window.activeVault) {
|
||||
vaultSwitcher.close()
|
||||
} else {
|
||||
windowController.openWindow(modelData)
|
||||
vaultSwitcher.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -120,8 +151,8 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Текущее: %1").arg(vaultManager.currentVault.length > 0
|
||||
? vaultManager.currentVault : "—")
|
||||
text: qsTr("Текущее: %1").arg(window.activeVault.length > 0
|
||||
? window.activeVault : "—")
|
||||
color: "#666"
|
||||
elide: Text.ElideMiddle
|
||||
Layout.fillWidth: true
|
||||
@@ -144,9 +175,12 @@ ApplicationWindow {
|
||||
SplitView.preferredWidth: window.width * 0.15
|
||||
SplitView.minimumWidth: 120
|
||||
SplitView.maximumWidth: 500
|
||||
|
||||
onOpenVaultRequested: vaultSwitcher.open()
|
||||
onNewFileRequested: console.log("Новый файл (Фаза 3)")
|
||||
onNewFolderRequested: console.log("Новая папка (Фаза 3)")
|
||||
onOpenFileRequested: (path) => {
|
||||
// Фаза 4: открытие вкладки в редакторе. Пока — лог.
|
||||
console.log("Открыть файл: " + path)
|
||||
}
|
||||
}
|
||||
|
||||
EditorPanel {
|
||||
|
||||
Reference in New Issue
Block a user