and even more work

This commit is contained in:
2025-11-16 09:48:03 +01:00
parent f6b39cb678
commit 0b50f1ade2
13 changed files with 299 additions and 76 deletions

View File

@@ -9,6 +9,7 @@
<!-- <FluentTheme DensityStyle="Compact" /> -->
<!-- <SimpleTheme /> -->
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
<!-- <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Simple.xaml"/> -->
<StyleInclude Source="avares://MinecraftModpackUpdateManager/Assets/Styles/StylesEnhancedDefaults.axaml"/>
</Application.Styles>
</Application>

View File

@@ -3,6 +3,7 @@ using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using ModpackUpdater.Apps.Manager.Ui;
using Pilz.Features;
using Pilz.UI.Symbols;
namespace ModpackUpdater.Apps.Manager;
@@ -10,6 +11,7 @@ public partial class App : Application
{
public override void Initialize()
{
SymbolGlobals.DefaultImageSmallSize = 17;
AvaloniaXamlLoader.Load(this);
AppGlobals.Initialize();
PluginFeatureController.Instance.RegisterAllOwn();

View File

@@ -26,8 +26,8 @@
<PackageReference Include="Pilz.Configuration" Version="3.2.7" />
<PackageReference Include="Pilz.Cryptography" Version="2.1.2" />
<PackageReference Include="Pilz.Features" Version="2.12.0" />
<PackageReference Include="Pilz.UI" Version="3.1.1" />
<PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.8" />
<PackageReference Include="Pilz.UI" Version="3.1.4" />
<PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.13" />
<PackageReference Include="Pilz.UI.AvaloniaUI.Features" Version="1.0.0" />
<PackageReference Include="Avalonia" Version="11.3.8" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.8" />

View File

@@ -3,44 +3,32 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:modpackUpdater="clr-namespace:ModpackUpdater;assembly=ModpackUpdater"
xmlns:local="clr-namespace:ModpackUpdater.Apps.Manager.Ui"
xmlns:manager="clr-namespace:ModpackUpdater.Apps.Manager"
xmlns:vm="clr-namespace:ModpackUpdater.Apps.Manager.Ui.Models"
xmlns:controls="https://git.pilzinsel64.de/pilz-framework/pilz"
xmlns:pilz="https://git.pilzinsel64.de/pilz-framework/pilz"
xmlns:symbols="clr-namespace:Pilz.UI.Symbols;assembly=Pilz.UI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="ModpackUpdater.Apps.Manager.Ui.MainWindow"
x:DataType="vm:MainWindowViewModel"
Title="Minecraft Modpack Manager"
Padding="3"
WindowState="Maximized"
Loaded="Window_OnLoaded">
<Window.Styles>
<Style Selector="DropDownButton /template/ Path#PART_DropDownGlyph">
<Setter Property="IsVisible" Value="False"/>
</Style>
</Window.Styles>
<Grid
RowDefinitions="Auto,*">
<Menu>
<Menu.Items>
<MenuItem x:Name="MenuItemWorkspace" Header="Workspace">
<MenuItem.Items>
<MenuItem x:Name="MenuItemWorkspacePreferences" Header="Workspace preferences"/>
<MenuItem x:Name="MenuItemSaveWorkspace" Header="Save workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemNewWorkspace" Header="New workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemRecentWorkspaces" Header="Recent workspaces"/>
</MenuItem.Items>
</MenuItem>
<MenuItem x:Name="MenuItemTools" Header="Tools"/>
</Menu.Items>
</Menu>
<!-- Tree view -->
<Grid
x:Name="GridMain"
Grid.Row="1"
ColumnDefinitions="300,*,300"
ColumnDefinitions="Auto,*,300"
Margin="3">
<StackPanel
@@ -48,14 +36,54 @@
Margin="3"
Spacing="6">
<Menu>
<Menu.Items>
<MenuItem x:Name="MenuItemCreateUpdate" Header="Create" Click="MenuItemCreateUpdate_OnClick"/>
<MenuItem x:Name="MenuItemEditUpdate" Header="Edit" Click="MenuItemEditUpdate_OnClick"/>
<MenuItem x:Name="MenuItemRemoveUpdate" Header="Remove" Click="MenuItemRemoveUpdate_OnClick"/>
</Menu.Items>
</Menu>
<!-- StackPanel: Menu for updates -->
<StackPanel
Orientation="Horizontal">
<!-- Button: Workspace -->
<pilz:ImageButton
x:Name="ButtonWorkspace"
Text="Workspace"
Background="Transparent">
<pilz:ImageButton.Flyout>
<MenuFlyout>
<MenuFlyout.Items>
<MenuItem x:Name="MenuItemWorkspacePreferences" Header="Workspace _preferences"/>
<MenuItem x:Name="MenuItemSaveWorkspace" Header="_Save workspace" HotKey="Ctrl+S"/>
<Separator/>
<MenuItem x:Name="MenuItemNewWorkspace" Header="_New workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemRecentWorkspaces" Header="_Recent workspaces"/>
</MenuFlyout.Items>
</MenuFlyout>
</pilz:ImageButton.Flyout>
</pilz:ImageButton>
<!-- Button: Update -->
<pilz:ImageButton
x:Name="ButtonUpdate"
Text="Update"
Background="Transparent">
<pilz:ImageButton.Flyout>
<MenuFlyout>
<MenuFlyout.Items>
<MenuItem x:Name="MenuItemCreateUpdate" Header="_Create update" Click="MenuItemCreateUpdate_OnClick"/>
<MenuItem x:Name="MenuItemRemoveUpdate" Header="_Remove update" Click="MenuItemRemoveUpdate_OnClick"/>
</MenuFlyout.Items>
</MenuFlyout>
</pilz:ImageButton.Flyout>
</pilz:ImageButton>
<!-- Button: Tools -->
<pilz:ImageButton
x:Name="ButtonTools"
Text="Tools"
Background="Transparent"/>
</StackPanel>
<!-- TreeView: Updates -->
<ScrollViewer
VerticalScrollBarVisibility="Auto">
@@ -69,7 +97,9 @@
ItemsSource="{Binding Nodes}">
<StackPanel Orientation="Horizontal" Spacing="6">
<Image Source="{Binding Image}" Width="16"/>
<Image
Source="{Binding Image}"
Width="{x:Static symbols:SymbolGlobals.DefaultImageSmallSize}"/>
<TextBlock Text="{Binding DisplayText}"/>
</StackPanel>
</TreeDataTemplate>
@@ -94,28 +124,33 @@
DataType="vm:ActionSetTreeNode">
<StackPanel
Orientation="Horizontal"
Spacing="6">
Orientation="Horizontal">
<controls:ImageButton
<!-- Button: Add action -->
<pilz:ImageButton
x:Name="ButtonAddAction"
Text="Add"
ImageSource="{x:Static local:MainWindow.ButtonImageAddAction}"
Background="Transparent"
Click="ButtonAddAction_OnClick"/>
<controls:ImageButton
<!-- Button: Remove action -->
<pilz:ImageButton
x:Name="ButtonRemoveAction"
Text="Remove"
ImageSource="{x:Static local:MainWindow.ButtonImageRemoveAction}"
Background="Transparent"
Click="ButtonRemoveAction_OnClick"/>
<!-- TextBox: Version -->
<TextBox
Margin="3, 0, 3, 0"
Width="100"
Text="{Binding Version}"/>
<!-- CheckBox: Is public -->
<CheckBox
Margin="3, 0, 3, 0"
Content="Public"
IsChecked="{Binding IsPublic}"/>
</StackPanel>
@@ -176,8 +211,10 @@
<!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageUpdate"/>
<TextBlock Text="Update" FontSize="20"/>
<Image
x:Name="ImageUpdate"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Update" FontSize="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
</StackPanel>
<!-- Inherit from -->
@@ -208,7 +245,9 @@
<!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageGeneral"/>
<Image
x:Name="ImageGeneral"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="General" FontSize="20"/>
</StackPanel>
@@ -246,11 +285,14 @@
<!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageDestination"/>
<Image
x:Name="ImageDestination"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Destination" FontSize="20"/>
</StackPanel>
<!-- Destination path -->
<Label Content="Destination path" Target="TextBoxInstallDestPath"/>
<TextBox
x:Name="TextBoxInstallDestPath"
Text="{Binding DestPath}"/>
@@ -262,7 +304,9 @@
<!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageSource"/>
<Image
x:Name="ImageSource"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Source" FontSize="20"/>
</StackPanel>
@@ -323,7 +367,9 @@
<!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageMetadata"/>
<Image
x:Name="ImageMetadata"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Metadata" FontSize="20"/>
</StackPanel>

View File

@@ -30,20 +30,28 @@ public partial class MainWindow : Window, IMainApi
InitializeComponent();
MenuItemWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.workspace, SymbolSize.Small);
ButtonWorkspace.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.workspace);
MenuItemWorkspacePreferences.Icon = AppGlobals.Symbols.GetImage(AppSymbols.settings, SymbolSize.Small);
MenuItemSaveWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.save, SymbolSize.Small);
MenuItemNewWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.new_window, SymbolSize.Small);
MenuItemRecentWorkspaces.Icon = AppGlobals.Symbols.GetImage(AppSymbols.time_machine, SymbolSize.Small);
// MenuItemUpdates.Icon = AppGlobals.Symbols.GetImage(AppSymbols.update_done, SymbolSize.Small);
ButtonUpdate.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done);
ButtonTools.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.tools);
MenuItemCreateUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.add, SymbolSize.Small);
MenuItemRemoveUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.remove, SymbolSize.Small);
MenuItemTools.Icon = AppGlobals.Symbols.GetImage(AppSymbols.tools, SymbolSize.Small);
ImageUpdate.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done);
ImageMetadata.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.show_property);
ImageGeneral.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.normal_screen);
ImageSource.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.input);
ImageDestination.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.output);
PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).InsertItemsTo(MenuItemNewWorkspace.Items,
customClickHandler: MenuItemNewWorkspaceItem_Click,
insertPrioSplitters: true);
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Tools).InsertItemsTo(MenuItemTools.Items,
var menuFlyoutTools = new MenuFlyout();
ButtonTools.Flyout = menuFlyoutTools;
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Tools).InsertItemsTo(menuFlyoutTools.Items,
customClickHandler: MenuItemToolsItem_Click,
insertPrioSplitters: true);
}
@@ -129,31 +137,6 @@ public partial class MainWindow : Window, IMainApi
func.Execute(new MainApiParameters(this));
}
private void MenuItemCreateUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemRemoveUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemEditUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemAddAction_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemRemoveAction_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void ButtonAddAction_OnClick(object? sender, RoutedEventArgs e)
{
throw new NotImplementedException();
@@ -163,4 +146,14 @@ public partial class MainWindow : Window, IMainApi
{
throw new NotImplementedException();
}
private void MenuItemCreateUpdate_OnClick(object? sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
private void MenuItemRemoveUpdate_OnClick(object? sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
}