- add: Autoscroller think
This commit is contained in:
@@ -6,18 +6,21 @@
|
||||
x:DataType="viewModels:ServerEntryModelView"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:asyncImageLoader="clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia"
|
||||
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:system="clr-namespace:System;assembly=System.Runtime"
|
||||
xmlns:viewModels="clr-namespace:Nebula.Launcher.ViewModels"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:converters="clr-namespace:Nebula.Launcher.Converters">
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Design.DataContext>
|
||||
<viewModels:ServerEntryModelView />
|
||||
</Design.DataContext>
|
||||
|
||||
<Border CornerRadius="10" Margin="0,5,0,5">
|
||||
<Grid ColumnDefinitions="30,*,80,90" RowDefinitions="35,*,*">
|
||||
<Border
|
||||
BorderThickness="0,0,0,0"
|
||||
CornerRadius="10"
|
||||
Margin="0,5,0,5">
|
||||
<Grid ColumnDefinitions="30,*,80,50" RowDefinitions="35,*,*">
|
||||
<Border
|
||||
BorderThickness="0,0,0,2"
|
||||
CornerRadius="10"
|
||||
@@ -25,6 +28,7 @@
|
||||
Grid.ColumnSpan="2"
|
||||
Grid.Row="0"
|
||||
IsVisible="{Binding ExpandInfo}" />
|
||||
|
||||
<Button
|
||||
Command="{Binding ExpandInfoRequired}"
|
||||
CornerRadius="10,0,0,10"
|
||||
@@ -32,12 +36,15 @@
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="3"
|
||||
VerticalAlignment="Stretch">
|
||||
<Label VerticalAlignment="Bottom" Margin="5,0,5,2">i</Label>
|
||||
<Label Margin="5,0,5,0" VerticalAlignment="Bottom">i</Label>
|
||||
</Button>
|
||||
<ScrollViewer
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Margin="5">
|
||||
HorizontalScrollBarVisibility="Hidden"
|
||||
Margin="10,0,0,0"
|
||||
VerticalScrollBarVisibility="Disabled"
|
||||
x:Name="AutoScrollViewer">
|
||||
<Label VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding ServerHubInfo.StatusData.Name}" />
|
||||
</Label>
|
||||
@@ -57,6 +64,7 @@
|
||||
</Label>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
<Panel
|
||||
Grid.Column="3"
|
||||
Grid.Row="0"
|
||||
@@ -67,26 +75,15 @@
|
||||
HorizontalAlignment="Stretch"
|
||||
IsVisible="{Binding RunVisible}"
|
||||
VerticalAlignment="Stretch">
|
||||
<Svg Path="/Assets/svg/play.svg"/>
|
||||
<Svg Margin="4" Path="/Assets/svg/play.svg" />
|
||||
</Button>
|
||||
<Grid ColumnDefinitions="*,*"
|
||||
IsVisible="{Binding !RunVisible}">
|
||||
<Grid ColumnDefinitions="*" IsVisible="{Binding !RunVisible}">
|
||||
<Button
|
||||
Command="{Binding ReadLog}"
|
||||
CornerRadius="10,0,0,10"
|
||||
CornerRadius="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Margin="0,0,2,0"
|
||||
VerticalAlignment="Stretch">
|
||||
<Svg Path="/Assets/svg/newspaper.svg"/>
|
||||
</Button>
|
||||
<Button
|
||||
Command="{Binding StopInstance}"
|
||||
CornerRadius="0,10,10,0"
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Stretch"
|
||||
Margin="2,0,0,0"
|
||||
VerticalAlignment="Stretch">
|
||||
<Svg Path="/Assets/svg/stop.svg"/>
|
||||
<Svg Margin="4" Path="/Assets/svg/newspaper.svg" />
|
||||
</Button>
|
||||
</Grid>
|
||||
</Panel>
|
||||
@@ -99,7 +96,7 @@
|
||||
IsVisible="{Binding ExpandInfo}"
|
||||
Margin="5">
|
||||
<Label FontSize="12">
|
||||
<TextBlock Text="{Binding Description}" />
|
||||
<TextBlock Text="{Binding Description}" TextWrapping="Wrap" />
|
||||
</Label>
|
||||
</Border>
|
||||
<Border
|
||||
@@ -168,6 +165,22 @@
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<StackPanel
|
||||
Grid.Column="3"
|
||||
Grid.Row="1"
|
||||
IsVisible="{Binding ExpandInfo}"
|
||||
Margin="5,5,0,0"
|
||||
Spacing="5">
|
||||
<Button
|
||||
Command="{Binding StopInstance}"
|
||||
CornerRadius="10"
|
||||
Height="35"
|
||||
HorizontalAlignment="Stretch"
|
||||
IsVisible="{Binding !RunVisible}"
|
||||
VerticalAlignment="Stretch">
|
||||
<Svg Margin="4" Path="/Assets/svg/stop.svg" />
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</UserControl>
|
||||
|
||||
@@ -1,19 +1,69 @@
|
||||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Threading;
|
||||
using Nebula.Launcher.ViewModels;
|
||||
|
||||
namespace Nebula.Launcher.Views;
|
||||
|
||||
public partial class ServerEntryView : UserControl
|
||||
{
|
||||
private DispatcherTimer _scrollTimer;
|
||||
private bool _scrollingDown = true;
|
||||
|
||||
public ServerEntryView()
|
||||
{
|
||||
InitializeComponent();
|
||||
StartAutoScrolling();
|
||||
}
|
||||
|
||||
public ServerEntryView(ServerEntryModelView modelView) : this()
|
||||
{
|
||||
DataContext = modelView;
|
||||
}
|
||||
|
||||
private void StartAutoScrolling()
|
||||
{
|
||||
_scrollTimer = new DispatcherTimer
|
||||
{
|
||||
Interval = TimeSpan.FromMilliseconds(50) // Adjust the interval for scroll speed
|
||||
};
|
||||
_scrollTimer.Tick += AutoScroll;
|
||||
_scrollTimer.Start();
|
||||
}
|
||||
|
||||
private void AutoScroll(object? sender, EventArgs e)
|
||||
{
|
||||
// Get the current offset and extent
|
||||
var currentOffset = AutoScrollViewer.Offset.X;
|
||||
var maxOffset = AutoScrollViewer.Extent.Width - AutoScrollViewer.Viewport.Width;
|
||||
|
||||
if (_scrollingDown)
|
||||
{
|
||||
// Scroll down
|
||||
if (currentOffset < maxOffset)
|
||||
{
|
||||
AutoScrollViewer.Offset = new Avalonia.Vector(currentOffset + 2, AutoScrollViewer.Offset.Y); // Adjust speed
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reverse direction when reaching the bottom
|
||||
_scrollingDown = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Scroll up
|
||||
if (currentOffset > 0)
|
||||
{
|
||||
AutoScrollViewer.Offset = new Avalonia.Vector(currentOffset - 2, AutoScrollViewer.Offset.Y); // Adjust speed
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reverse direction when reaching the top
|
||||
_scrollingDown = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user