feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
1.83 KiB
NewLife.Studio
using Avalonia.Controls;
using NewLife.Studio.App.Controls;
using NewLife.Studio.App.Services;
using NewLife.Studio.Core;
using NewLife.Studio.Store;
using NewLife.Studio.Data;

namespace NewLife.Studio.App.Views;

public partial class MainWindow : Window
{
    private readonly ModuleLoader _moduleLoader;
    private readonly IStoreService _storeService;
    private readonly IDataProvider _dataProvider;

    public MainWindow() : this(new ModuleLoader(), null!, null!) { }

    public MainWindow(ModuleLoader moduleLoader, IStoreService storeService, IDataProvider dataProvider)
    {
        InitializeComponent();
        _moduleLoader = moduleLoader;
        _storeService = storeService;
        _dataProvider = dataProvider;

        _moduleLoader.ModuleActivated += OnModuleActivated;
        NavBarControl.ModuleSelected += OnNavBarModuleSelected;

        AIPanelControl.Initialize(_storeService, _dataProvider);
    }

    public async Task InitializeAsync()
    {
        _moduleLoader.ScanModules();
        NavBarControl.SetModules(_moduleLoader.Modules, null);
        StatusBarControl.SetModule("准备就绪");

        await _moduleLoader.ActivateDefaultAsync();

        if (_moduleLoader.ActiveModule != null)
        {
            NavBarControl.SetModules(_moduleLoader.Modules, _moduleLoader.ActiveModule);
            ModuleHostControl.SetContent(_moduleLoader.ActiveModule.Module.GetView());
        }
    }

    private void OnModuleActivated(object? sender, ModuleInfo moduleInfo)
    {
        NavBarControl.SetModules(_moduleLoader.Modules, moduleInfo);
        ModuleHostControl.SetContent(moduleInfo.Module.GetView());
        StatusBarControl.SetModule(moduleInfo.DisplayName);
    }

    private async void OnNavBarModuleSelected(object? sender, ModuleInfo moduleInfo)
    {
        await _moduleLoader.ActivateModuleAsync(moduleInfo);
    }
}