- tweak: Dependency injection think

This commit is contained in:
2024-12-21 13:11:30 +03:00
parent 9a1bd44a6e
commit 42fde38db6
27 changed files with 541 additions and 242 deletions

View File

@@ -1,19 +1,36 @@
<UserControl xmlns="https://github.com/avaloniaui"
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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.Controls.PlayerContainerControl">
<Border Margin="5,4,5,0"
CornerRadius="0,10,0,10" BorderThickness="0,1,1,0" VerticalAlignment="Center">
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.Controls.PlayerContainerControl"
xmlns="https://github.com/avaloniaui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border
BorderThickness="0,0,1,0"
CornerRadius="0,10,0,10"
Margin="5,4,5,0"
VerticalAlignment="Center">
<Panel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Margin="0,0,2,0">Name:</TextBlock>
<TextBlock>Ni Higgers</TextBlock>
<StackPanel Margin="10,5,5,5" Orientation="Horizontal">
<Label Margin="0,0,2,0">Name:</Label>
<Label>Ni Higgers</Label>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Padding="5" CornerRadius="0,0,0,10">Select</Button>
<Button Padding="5" BorderThickness="2,0,0,0" CornerRadius="0,10,0,0">Delete</Button>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<Button CornerRadius="0,0,0,10" Padding="5">
<Label>
Select
</Label>
</Button>
<Button
BorderThickness="2,0,0,0"
CornerRadius="0,10,0,0"
Padding="5">
<Label>
Delete
</Label>
</Button>
</StackPanel>
</Panel>
</Border>

View File

@@ -1,36 +1,57 @@
<UserControl xmlns="https://github.com/avaloniaui"
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:asyncImageLoader="clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.Controls.ServerContainerControl">
<Grid ColumnDefinitions="*,70" RowDefinitions="*,*" Margin="0,5,0,5">
<Border Grid.Row="0" Grid.Column="0" BorderThickness="2,0,0,0"
Padding="10">
<TextBlock>Server name</TextBlock>
<UserControl
d:DesignHeight="100"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.Controls.ServerContainerControl"
xmlns="https://github.com/avaloniaui"
xmlns:asyncImageLoader="clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid
ColumnDefinitions="*,70"
Margin="0,5,0,5"
RowDefinitions="40,*">
<Border
BorderThickness="2,0,0,0"
Grid.Column="0"
Grid.Row="0"
Padding="10">
<Label>Server name</Label>
</Border>
<Border Grid.Row="0" Grid.Column="1"
BorderThickness="2,0,0,0"
CornerRadius="0"
Padding="5">
<TextBlock HorizontalAlignment="Center">15/15</TextBlock>
<Border
BorderThickness="2,0,0,0"
CornerRadius="0"
Grid.Column="1"
Grid.Row="0"
Padding="5">
<Label HorizontalAlignment="Center" VerticalAlignment="Center">15/15</Label>
</Border>
<Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" BorderThickness="2,0,0,0"
Height="50"
CornerRadius="0,0,10,10">
<Border
BorderThickness="2,0,0,0"
CornerRadius="0,0,10,10"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="1"
MinHeight="50">
<Border.Background>
<ImageBrush Stretch="UniformToFill"
asyncImageLoader:ImageBrushLoader.Source="https://t4.ftcdn.net/jpg/00/81/55/69/360_F_81556974_8sF8cKszJaRfBGd5sDt1RXE2QbzDtQqs.jpg">
</ImageBrush>
<ImageBrush Stretch="UniformToFill" asyncImageLoader:ImageBrushLoader.Source="https://t4.ftcdn.net/jpg/00/81/55/69/360_F_81556974_8sF8cKszJaRfBGd5sDt1RXE2QbzDtQqs.jpg" />
</Border.Background>
</Border>
<Panel Grid.Row="1" Grid.Column="1">
<Button VerticalAlignment="Stretch" CornerRadius="0 0 10 0" BorderThickness="0,0,0,0">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5">Play</TextBlock>
</Button>
<Panel Grid.Column="1" Grid.Row="1">
<Border Classes="ButtonBack" CornerRadius="0,0,10,0">
<Button
CornerRadius="0,0,10,0"
HorizontalAlignment="Stretch"
Padding="0"
VerticalAlignment="Stretch">
<Label HorizontalAlignment="Center" VerticalAlignment="Center">
Play
</Label>
</Button>
</Border>
</Panel>
</Grid>
</UserControl>

View File

@@ -0,0 +1,70 @@
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.MainView"
x:DataType="viewModels:MainViewModel"
xmlns="https://github.com/avaloniaui"
xmlns:converters="clr-namespace:Nebula.Launcher.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="clr-namespace:Nebula.Launcher.Models"
xmlns:viewModels="clr-namespace:Nebula.Launcher.ViewModels"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid
ColumnDefinitions="*"
Margin="0"
RowDefinitions="*,40">
<SplitView
CompactPaneLength="65"
DisplayMode="CompactInline"
IsPaneOpen="{Binding IsPaneOpen}"
PaneBackground="#00000000">
<SplitView.Pane>
<Border
BorderThickness="0,0,2,0"
CornerRadius="0,8,8,0"
Grid.Column="0"
Grid.Row="0"
Margin="0,0,5,0"
Padding="0">
<ListBox
ItemsSource="{Binding Items}"
Margin="2,0,-100,0"
Padding="0"
SelectedItem="{Binding SelectedListItem}">
<ListBox.Styles>
<Style Selector="ListBoxItem">
<Setter Property="Padding" Value="12 8" />
</Style>
</ListBox.Styles>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type models:ListItemTemplate}">
<StackPanel Orientation="Horizontal" Spacing="17">
<PathIcon Data="{Binding IconKey, Converter={x:Static converters:TypeConverters.IconConverter}}" Width="14" />
<TextBlock Text="{Binding Label}">
<TextBlock.IsVisible />
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Border>
</SplitView.Pane>
</SplitView>
<Border
BorderThickness="0,2,0,0"
CornerRadius="0,0,0,0"
Grid.Row="1"
Margin="0,0,0,0"
Padding="5">
<Panel>
<Label HorizontalAlignment="Left" VerticalAlignment="Center">cinka.ru</Label>
<Label HorizontalAlignment="Right" VerticalAlignment="Center">v0.01</Label>
</Panel>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,25 @@
using System;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Nebula.Launcher.ViewModels;
namespace Nebula.Launcher.Views;
public partial class MainView : UserControl
{
// This constructor is used when the view is created by the XAML Previewer
public MainView()
{
InitializeComponent();
}
// This constructor is used when the view is created via dependency injection
public MainView(MainViewModel viewModel)
: this()
{
DataContext = viewModel;
}
}

View File

@@ -1,54 +1,15 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Nebula.Launcher.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:tabs="clr-namespace:Nebula.Launcher.Views.Tabs"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.MainWindow"
x:DataType="vm:TestViewModel"
MinHeight="400"
MinWidth="600"
Height="400"
Width="800"
Icon="/Assets/avalonia-logo.ico"
Title="Nebula.Launcher">
<Grid ColumnDefinitions="60,*" RowDefinitions="*,40" Margin="0">
<Border Grid.Row="0" Grid.Column="0"
BorderThickness="0,0,2,0"
CornerRadius="0,8,8,0"
Padding="0" Margin="0,0,5,0">
<StackPanel>
<Button Classes="ViewSelectButton">
<Image Source="../Assets/account.png"/>
</Button>
<Button Classes="ViewSelectButton">
<Image Source="../Assets/list.png"/>
</Button>
<Button Classes="ViewSelectButton" Padding="15">
<Image Source="../Assets/settings.png"/>
</Button>
</StackPanel>
</Border>
<ScrollViewer Grid.Column="1" Grid.Row="0"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Disabled"
Padding="5">
<tabs:AccountInfoTab/>
</ScrollViewer>
<Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
BorderThickness="0,2,0,0"
CornerRadius="0,0,0,0"
Padding="5"
Margin="0,0,0,0">
<Panel>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center">cinka.ru</TextBlock>
<TextBlock HorizontalAlignment="Right" VerticalAlignment="Center">v0.01</TextBlock>
</Panel>
</Border>
</Grid>
</Window>
<Window
Height="400"
Icon="/Assets/avalonia-logo.ico"
MinHeight="400"
MinWidth="600"
Title="Nebula.Launcher"
Width="800"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.MainWindow"
xmlns="https://github.com/avaloniaui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" />

View File

@@ -4,8 +4,16 @@ namespace Nebula.Launcher.Views;
public partial class MainWindow : Window
{
// This constructor is used when the view is created by the XAML Previewer
public MainWindow()
{
InitializeComponent();
}
// This constructor is used when the view is created via dependency injection
public MainWindow(MainView mainView)
: this()
{
Content = mainView;
}
}

View File

@@ -0,0 +1,59 @@
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.Pages.AccountInfoPage"
xmlns="https://github.com/avaloniaui"
xmlns:controls="clr-namespace:Nebula.Launcher.Views.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid ColumnDefinitions="*,1.5*" RowDefinitions="*">
<StackPanel Grid.Column="0" Grid.Row="0">
<Border
CornerRadius="10"
Margin="5"
Padding="15">
<StackPanel HorizontalAlignment="Center">
<Image
Height="100"
Margin="0,0,0,20"
Source="/Assets/account.png" />
<Grid ColumnDefinitions="120, 100" RowDefinitions="Auto, Auto, Auto">
<Label Grid.Column="0" Grid.Row="0">Login:</Label>
<TextBox Grid.Column="1" Grid.Row="0" />
<Label Grid.Column="0" Grid.Row="1">Password:</Label>
<TextBox
Grid.Column="1"
Grid.Row="1"
PasswordChar="#"
Text="Sas" />
<Label Grid.Column="0" Grid.Row="2">Auth server:</Label>
<TextBox Grid.Column="1" Grid.Row="2" />
</Grid>
<StackPanel
HorizontalAlignment="Center"
Margin="5"
Orientation="Horizontal">
<Button>Save profile</Button>
</StackPanel>
</StackPanel>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Grid.Row="0">
<Border
CornerRadius="10,10,0,0"
Margin="5,5,5,0"
Padding="5">
<Label HorizontalAlignment="Center">Profiles:</Label>
</Border>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<StackPanel>
<controls:PlayerContainerControl />
<controls:PlayerContainerControl />
</StackPanel>
</ScrollViewer>
</StackPanel>
</Grid>
</UserControl>

View File

@@ -0,0 +1,19 @@
using Avalonia.Controls;
using Nebula.Launcher.ViewModels;
namespace Nebula.Launcher.Views.Pages;
public interface ITab;
public partial class AccountInfoPage : UserControl
{
public AccountInfoPage()
{
InitializeComponent();
}
public AccountInfoPage(AccountInfoViewModel viewModel)
: this()
{
DataContext = viewModel;
}
}

View File

@@ -0,0 +1,41 @@
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Nebula.Launcher.Views.Pages.ServerListPage"
xmlns="https://github.com/avaloniaui"
xmlns:controls="clr-namespace:Nebula.Launcher.Views.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid ColumnDefinitions="*" RowDefinitions="*,40">
<ScrollViewer Margin="0,0,0,10" Padding="0,0,8,0">
<StackPanel>
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
<controls:ServerContainerControl />
</StackPanel>
</ScrollViewer>
<Border
BorderThickness="2,0,0,0"
CornerRadius="10"
Grid.Row="1">
<Grid ColumnDefinitions="*,40" RowDefinitions="*">
<TextBox
Margin="0"
VerticalAlignment="Center"
Watermark="Server name..." />
<Button Grid.Column="1" Padding="10">
<Image Source="/Assets/filter.png" />
</Button>
</Grid>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,11 @@
using Avalonia.Controls;
namespace Nebula.Launcher.Views.Pages;
public partial class ServerListPage : UserControl
{
public ServerListPage()
{
InitializeComponent();
}
}

View File

@@ -1,43 +0,0 @@
<UserControl xmlns="https://github.com/avaloniaui"
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:controls="clr-namespace:Nebula.Launcher.Views.Controls"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.Tabs.AccountInfoTab">
<Grid ColumnDefinitions="*,1.5*" RowDefinitions="*">
<StackPanel Grid.Column="0" Grid.Row="0">
<Border
Padding="15" Margin="5"
CornerRadius="10">
<StackPanel HorizontalAlignment="Center">
<Image Source="/Assets/account.png" Height="100" Margin="0,0,0,20"/>
<Grid ColumnDefinitions="120, 100" RowDefinitions="Auto, Auto, Auto">
<TextBlock Grid.Row="0" Grid.Column="0">Login:</TextBlock>
<TextBox Grid.Row="0" Grid.Column="1"></TextBox>
<TextBlock Grid.Row="1" Grid.Column="0">Password:</TextBlock>
<TextBox Grid.Row="1" Grid.Column="1" PasswordChar="#" Text="Sas"></TextBox>
<TextBlock Grid.Row="2" Grid.Column="0">Auth server:</TextBlock>
<TextBox Grid.Row="2" Grid.Column="1"></TextBox>
</Grid>
<StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Center">
<Button>Save profile</Button>
</StackPanel>
</StackPanel>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Grid.Row="0">
<Border Padding="5" Margin="5,5,5,0"
CornerRadius="10,10,0,0">
<TextBlock HorizontalAlignment="Center">Profiles:</TextBlock>
</Border>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<controls:PlayerContainerControl/>
<controls:PlayerContainerControl/>
</StackPanel>
</ScrollViewer>
</StackPanel>
</Grid>
</UserControl>

View File

@@ -1,13 +0,0 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Nebula.Launcher.Views.Tabs;
public partial class AccountInfoTab : UserControl
{
public AccountInfoTab()
{
InitializeComponent();
}
}

View File

@@ -1,22 +0,0 @@
<UserControl xmlns="https://github.com/avaloniaui"
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:controls="clr-namespace:Nebula.Launcher.Views.Controls"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Nebula.Launcher.Views.Tabs.ServerListTab">
<Grid ColumnDefinitions="*" RowDefinitions="*,40">
<ScrollViewer>
<StackPanel>
<controls:ServerContainerControl/>
<controls:ServerContainerControl/>
</StackPanel>
</ScrollViewer>
<Border Grid.Row="1" CornerRadius="10" BorderThickness="2,0,0,0">
<Grid ColumnDefinitions="*,40" RowDefinitions="*">
<TextBlock VerticalAlignment="Center" Margin="10">Search...</TextBlock>
<Button Grid.Column="1" Padding="10"><Image Source="/Assets/filter.png"/></Button>
</Grid>
</Border>
</Grid>
</UserControl>

View File

@@ -1,11 +0,0 @@
using Avalonia.Controls;
namespace Nebula.Launcher.Views.Tabs;
public partial class ServerListTab : UserControl
{
public ServerListTab()
{
InitializeComponent();
}
}