1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

UI - Added --disable-forced-shutdown which does just that

UI - Don't kill new instances of Artemis launched within 8 seconds after shutdown
UI - Updated About tab
This commit is contained in:
Robert 2021-05-19 17:31:36 +02:00
parent a6602626a3
commit 87dce788d7
12 changed files with 586 additions and 187 deletions

View File

@ -67,9 +67,12 @@ namespace Artemis.Core.Services
foreach (ProfileModule profileModule in profileModules)
{
// Avoid race condition, make the check here
if (profileModule.ActiveProfile != null)
if (profileModule.ActiveProfile == null)
continue;
profileModule.ActiveProfile.PopulateLeds(_rgbService.EnabledDevices);
if (profileModule.ActiveProfile.IsFreshImport)
{
profileModule.ActiveProfile.PopulateLeds(_rgbService.EnabledDevices);
_logger.Debug("Profile is a fresh import, adapting to surface - {profile}", profileModule.ActiveProfile);
AdaptProfile(profileModule.ActiveProfile);
}

View File

@ -50,7 +50,6 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="WriteableBitmapEx" Version="1.6.7" />
</ItemGroup>
<ItemGroup>
<Compile Remove="obj\x64\Debug\ColorPicker.g.cs" />

View File

@ -113,12 +113,6 @@
"resolved": "0.4.0",
"contentHash": "2Tzz6qoQNciyO4uT6wxByMiyvbve+u4eFIiDewDUbeHuxr/rKuba3/EhhXDsEH9WoKzYlpzqxDfQGPE/bIe5Rw=="
},
"WriteableBitmapEx": {
"type": "Direct",
"requested": "[1.6.7, )",
"resolved": "1.6.7",
"contentHash": "GoPhIdYzG/DWJq/MADb8gFzRN5PsxM+1DSJFS8Jzupg4DXqFSnlejYEjJw4ffPEUyELL07O4XIGUZydE4jQK0Q=="
},
"Castle.Core": {
"type": "Transitive",
"resolved": "4.2.0",

View File

@ -119,14 +119,17 @@ namespace Artemis.UI
private void UtilitiesOnShutdownRequested(object sender, EventArgs e)
{
// Use PowerShell to kill the process after 8 sec just in case
ProcessStartInfo info = new()
if (!StartupArguments.Contains("--disable-forced-shutdown"))
{
Arguments = "-Command \"& {Start-Sleep -s 8; (Get-Process 'Artemis.UI').kill()}",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
FileName = "PowerShell.exe"
};
Process.Start(info);
ProcessStartInfo info = new()
{
Arguments = "-Command \"& {Start-Sleep -s 8; (Get-Process -Id " + Process.GetCurrentProcess().Id + ").kill()}",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
FileName = "PowerShell.exe"
};
Process.Start(info);
}
Execute.OnUIThread(() => Application.Current.Shutdown());
}

View File

@ -2,7 +2,7 @@
"profiles": {
"Artemis.UI": {
"commandName": "Project",
"commandLineArgs": "--force-elevation --pcmr"
"commandLineArgs": "--force-elevation --disable-forced-shutdown --pcmr"
}
}
}

View File

@ -4,44 +4,41 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Margin="16" Width="500">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Grid.Row="0">
Export current profile
</TextBlock>
<Grid Margin="16" Width="500">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Grid.Row="0">
Export current profile
</TextBlock>
<TextBlock Grid.Row="1"
Margin="0 10"
TextWrapping="Wrap"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{DynamicResource MaterialDesignBodyLight}">
Please note that exporting profiles like this is placeholder functionality. The idea is that this will eventually happen via the workshop.
</TextBlock>
<TextBlock Grid.Row="1"
Margin="0 10"
TextWrapping="Wrap"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{DynamicResource MaterialDesignBodyLight}">
It looks like you have not set up any profile adaption hints. This means Artemis can't do much to make your profile look good on a different surface other than try finding the same LEDs as you have.
<LineBreak/><LineBreak/>
To configure adaption hints, right-click on a layer and choose <materialDesign:PackIcon Kind="AutoFix" /> <Run FontWeight="Bold">View Adaption Hints</Run>.
<LineBreak/><LineBreak/>
To learn more about profile adaption, check out
<Hyperlink Style="{StaticResource ArtemisHyperlink}" RequestNavigate="{s:Action OpenHyperlink}" NavigateUri="https://wiki.artemis-rgb.com/guides/user/profiles/layers/adaption-hints">
this wiki article
</Hyperlink>.
</TextBlock>
<TextBlock Grid.Row="2"
Margin="0 10"
TextWrapping="Wrap"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{DynamicResource MaterialDesignBodyLight}">
The workshop will include tools to make profiles convert easily and look good on different layouts.
That means right now when someone imports this export unless they have the exact same setup as
you, they'll have to select LEDs for each layer in the profile.
</TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="3">
<Button Style="{StaticResource MaterialDesignFlatButton}" IsCancel="True" Margin="0 8 8 0" Command="{s:Action Cancel}">
CANCEL
</Button>
<Button Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 0 0" Command="{s:Action Accept}">
I UNDERSTAND, EXPORT
</Button>
</StackPanel>
</Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2">
<Button Style="{StaticResource MaterialDesignFlatButton}" IsCancel="True" Margin="0 8 8 0" Command="{s:Action Cancel}">
CANCEL
</Button>
<Button Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 0 0" Command="{s:Action Accept}">
EXPORT ANYWAY
</Button>
</StackPanel>
</Grid>
</UserControl>

View File

@ -1,8 +1,8 @@
using System.Windows;
using System.Windows.Navigation;
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Shared.Services;
using MaterialDesignThemes.Wpf;
namespace Artemis.UI.Screens.ProfileEditor.Dialogs
{
@ -21,6 +21,22 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
public ProfileDescriptor ProfileDescriptor { get; }
#region Overrides of Screen
/// <inheritdoc />
protected override void OnActivate()
{
// TODO: If the profile has hints on all layers, call Accept
base.OnActivate();
}
#endregion
public void OpenHyperlink(object sender, RequestNavigateEventArgs e)
{
Core.Utilities.OpenUrl(e.Uri.AbsoluteUri);
}
public void Accept()
{
string encoded = _profileService.ExportProfile(ProfileDescriptor);

View File

@ -22,91 +22,104 @@
d:DesignHeight="800" d:DesignWidth="800"
d:DataContext="{d:DesignInstance dialogs:LayerHintsDialogViewModel}"
Icon="/Resources/Images/Logo/bow.ico">
<mde:MaterialWindow.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" />
</ResourceDictionary.MergedDictionaries>
<mde:MaterialWindow.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</mde:MaterialWindow.Resources>
</ResourceDictionary>
</mde:MaterialWindow.Resources>
<materialDesign:DialogHost IsTabStop="False"
Focusable="False"
Identifier="DeviceDialog"
DialogTheme="Inherit"
SnackbarMessageQueue="{Binding LayerHintsMessageQueue}">
<DockPanel>
<mde:AppBar Type="Dense"
Title="{Binding Layer.Name}"
ShowShadow="True"
DockPanel.Dock="Top"
Margin="-18 0 0 0">
<mde:AppBar.AppIcon>
<materialDesign:PackIcon Kind="AutoFix" Width="20" Height="28" />
</mde:AppBar.AppIcon>
</mde:AppBar>
<materialDesign:DialogHost IsTabStop="False"
Focusable="False"
Identifier="DeviceDialog"
DialogTheme="Inherit"
SnackbarMessageQueue="{Binding LayerHintsMessageQueue}">
<DockPanel>
<mde:AppBar Type="Dense"
Title="{Binding Layer.Name}"
ShowShadow="True"
DockPanel.Dock="Top"
Margin="-18 0 0 0">
<mde:AppBar.AppIcon>
<materialDesign:PackIcon Kind="AutoFix" Width="20" Height="28" />
</mde:AppBar.AppIcon>
</mde:AppBar>
<Grid Margin="15">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Style="{StaticResource MaterialDesignHeadline6TextBlock}">
Introduction
</TextBlock>
<TextBlock Grid.Row="1" Style="{StaticResource MaterialDesignTextBlock}" TextWrapping="Wrap">
In this window you can tell Artemis how this layer should be adapted when the profile is applied to a different set of devices by providing so-called adaption hints.
<LineBreak />
When sharing your profile with other people good hints help them import your profile without the need for manual adjustments.
</TextBlock>
<Grid Margin="15">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Style="{StaticResource MaterialDesignHeadline6TextBlock}">
Introduction
</TextBlock>
<TextBlock Grid.Row="1" Style="{StaticResource MaterialDesignTextBlock}" TextWrapping="Wrap">
In this window you can tell Artemis how this layer should be adapted when the profile is applied to a different set of devices by providing so-called adaption hints.
This is useful when sharing your profile with others, avoiding the need for manual adjustments.
<LineBreak />
To learn more about profile adaption, check out
<Hyperlink Style="{StaticResource ArtemisHyperlink}" RequestNavigate="{s:Action OpenHyperlink}" NavigateUri="https://wiki.artemis-rgb.com/guides/user/profiles/layers/adaption-hints">
this wiki article
</Hyperlink>
.
</TextBlock>
<TextBlock Grid.Row="2" Style="{StaticResource MaterialDesignHeadline6TextBlock}" Margin="0 25 0 0">
Adaption hints
</TextBlock>
<ScrollViewer Grid.Row="3">
<ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<materialDesign:TransitioningContent OpeningEffect="{materialDesign:TransitionEffect SlideInFromLeft}"
OpeningEffectsOffset="{materialDesign:IndexedItemOffsetMultiplier 0:0:0.05}">
<ContentControl s:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" IsTabStop="False" />
</materialDesign:TransitioningContent>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<TextBlock Grid.Row="2" Style="{StaticResource MaterialDesignHeadline6TextBlock}" Margin="0 25 0 0">
Adaption hints
</TextBlock>
<StackPanel Grid.Row="3"
Margin="0 50 0 0"
Visibility="{Binding HasAdaptionHints, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}, Mode=OneWay}">
<materialDesign:PackIcon Kind="AlertCircleOutline" HorizontalAlignment="Center" Width="100" Height="100" />
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}" HorizontalAlignment="Center">You haven't set up any adaption hints</TextBlock>
<TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" HorizontalAlignment="Center">Artemis will attempt to directly map the LEDs of this layer to different surfaces but results may vary.</TextBlock>
</StackPanel>
<ScrollViewer Grid.Row="3"
Visibility="{Binding HasAdaptionHints, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Mode=OneWay}">
<ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<materialDesign:TransitioningContent OpeningEffect="{materialDesign:TransitionEffect SlideInFromLeft}"
OpeningEffectsOffset="{materialDesign:IndexedItemOffsetMultiplier 0:0:0.05}">
<ContentControl s:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" IsTabStop="False" />
</materialDesign:TransitioningContent>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<!-- Buttons -->
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Style="{StaticResource MaterialDesignOutlinedButton}"
Margin="0 8 8 0"
Command="{s:Action AutoDetermineHints}"
ToolTip="Attempt to automatically determine relevant hint(s) for this layer">
AUTO-DETERMINE HINTS
</Button>
<!-- Buttons -->
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Style="{StaticResource MaterialDesignOutlinedButton}"
Margin="0 8 8 0"
Command="{s:Action AutoDetermineHints}"
ToolTip="Attempt to automatically determine relevant hint(s) for this layer">
AUTO-DETERMINE HINTS
</Button>
<materialDesign:PopupBox Grid.Column="1"
Style="{StaticResource MaterialDesignMultiFloatingActionAccentPopupBox}"
ToolTip="Add a new hint"
HorizontalAlignment="Right"
Margin="0 5 0 0">
<StackPanel>
<Button ToolTip="Add a category hint" Content="{materialDesign:PackIcon Kind=Desk, Size=20}" Command="{s:Action AddCategoryHint}" />
<Button ToolTip="Add a device type hint" Content="{materialDesign:PackIcon Kind=Devices, Size=20}" Command="{s:Action AddDeviceHint}" />
<Button ToolTip="Add a keyboard-section hint" Content="{materialDesign:PackIcon Kind=Keyboard, Size=20}" Command="{s:Action AddKeyboardSectionHint}" />
</StackPanel>
</materialDesign:PopupBox>
</Grid>
</Grid>
</DockPanel>
</materialDesign:DialogHost>
<materialDesign:PopupBox Grid.Column="1"
Style="{StaticResource MaterialDesignMultiFloatingActionAccentPopupBox}"
ToolTip="Add a new hint"
HorizontalAlignment="Right"
Margin="0 5 0 0">
<StackPanel>
<Button ToolTip="Add a category hint" Content="{materialDesign:PackIcon Kind=Desk, Size=20}" Command="{s:Action AddCategoryHint}" />
<Button ToolTip="Add a device type hint" Content="{materialDesign:PackIcon Kind=Devices, Size=20}" Command="{s:Action AddDeviceHint}" />
<Button ToolTip="Add a keyboard-section hint" Content="{materialDesign:PackIcon Kind=Keyboard, Size=20}" Command="{s:Action AddKeyboardSectionHint}" />
</StackPanel>
</materialDesign:PopupBox>
</Grid>
</Grid>
</DockPanel>
</materialDesign:DialogHost>
</mde:MaterialWindow>

View File

@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Navigation;
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Ninject.Factories;
@ -28,6 +30,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs
}
public Layer Layer { get; }
public bool HasAdaptionHints => Items.Any();
public SnackbarMessageQueue LayerHintsMessageQueue
{
@ -46,6 +49,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs
CategoryAdaptionHint hint = new();
Layer.Adapter.AdaptionHints.Add(hint);
Items.Add(_vmFactory.CategoryAdaptionHintViewModel(hint));
NotifyOfPropertyChange(nameof(HasAdaptionHints));
}
public void AddDeviceHint()
@ -53,6 +57,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs
DeviceAdaptionHint hint = new();
Layer.Adapter.AdaptionHints.Add(hint);
Items.Add(_vmFactory.DeviceAdaptionHintViewModel(hint));
NotifyOfPropertyChange(nameof(HasAdaptionHints));
}
public void AddKeyboardSectionHint()
@ -60,12 +65,19 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs
KeyboardSectionAdaptionHint hint = new();
Layer.Adapter.AdaptionHints.Add(hint);
Items.Add(_vmFactory.KeyboardSectionAdaptionHintViewModel(hint));
NotifyOfPropertyChange(nameof(HasAdaptionHints));
}
public void RemoveAdaptionHint(AdaptionHintViewModel adaptionHintViewModel)
{
Layer.Adapter.AdaptionHints.Remove(adaptionHintViewModel.AdaptionHint);
Items.Remove(adaptionHintViewModel);
NotifyOfPropertyChange(nameof(HasAdaptionHints));
}
public void OpenHyperlink(object sender, RequestNavigateEventArgs e)
{
Core.Utilities.OpenUrl(e.Uri.AbsoluteUri);
}
#region Overrides of Screen
@ -109,6 +121,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs
break;
}
}
NotifyOfPropertyChange(nameof(HasAdaptionHints));
}
}
}

View File

@ -7,54 +7,410 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
xmlns:s="https://github.com/canton7/Stylet"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance local:AboutTabViewModel}">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel Margin="15" MaxWidth="800">
<StackPanel Orientation="Horizontal">
<Image Source="{svgc:SvgImage Source=/Resources/Images/Logo/bow.svg}" Width="60" Height="80" Margin="0 0 20 0" />
<TextBlock Style="{StaticResource MaterialDesignHeadline2TextBlock}">
Artemis 2
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Foreground="{DynamicResource MaterialDesignBodyLight}" Text="{Binding Version}" />
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel Margin="15" MaxWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{svgc:SvgImage Source=/Resources/Images/Logo/bow.svg}" Width="60" Height="80" Margin="0 0 20 0" />
<TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource MaterialDesignHeadline2TextBlock}">
Artemis 2
</TextBlock>
<materialDesign:Card Margin="0 25 0 0">
<StackPanel Margin="15">
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="Account" Width="60" Height="40" />
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}">
Lead developer
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" Margin="10 0 0 0">
- Spoinky (Robert Beekman)
</TextBlock>
<StackPanel Orientation="Horizontal" Margin="0 25 0 0">
<materialDesign:PackIcon Kind="AccountGroup" Width="60" Height="40" />
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}">
Main contributors
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" LineHeight="25" Margin="10 0 0 0">
- DarthAffe <LineBreak />
- DrMeteor (Diogo Trindade)
</TextBlock>
<StackPanel Orientation="Horizontal" Margin="0 25 0 0">
<materialDesign:PackIcon Kind="AccountHeart" Width="60" Height="40" />
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}">
Special thanks
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" LineHeight="25" Margin="10 0 0 0">
- All the people on Discord providing feedback and testing<LineBreak />
- Aureshion - Default device images<LineBreak />
- kaisax - Logo design
</TextBlock>
</StackPanel>
</materialDesign:Card>
<StackPanel Grid.Row="0" Grid.Column="2" HorizontalAlignment="Right" Orientation="Horizontal">
<Button
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View website"
Command="{s:Action OpenUrl}"
CommandParameter="https://artemis-rgb.com">
<materialDesign:PackIcon Kind="Web" />
</Button>
<Button
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View GitHub repository"
Command="{s:Action OpenUrl}"
CommandParameter="https://github.com/Artemis-RGB/Artemis">
<materialDesign:PackIcon Kind="Github" />
</Button>
<Button
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View Wiki"
Command="{s:Action OpenUrl}"
CommandParameter="https://wiki.artemis-rgb.com"
Margin="0 0 -10 0">
<materialDesign:PackIcon Kind="BookOpenOutline" />
</Button>
</StackPanel>
</ScrollViewer>
<TextBlock Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{DynamicResource MaterialDesignBodyLight}"
Text="{Binding Version}" />
<TextBlock Grid.Row="1"
Grid.Column="2"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}">
<Hyperlink Style="{StaticResource ArtemisHyperlink}" RequestNavigate="{s:Action OpenHyperlink}" NavigateUri="https://github.com/Artemis-RGB/Artemis/blob/master/LICENSE">
PolyForm Noncommercial License 1.0.0
</Hyperlink>
</TextBlock>
</Grid>
<materialDesign:Card Margin="0 25 0 0">
<StackPanel Margin="15">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Ellipse Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="3"
VerticalAlignment="Top"
Height="75"
Width="75"
Margin="0 0 15 0"
RenderOptions.BitmapScalingMode="HighQuality">
<Ellipse.Fill>
<ImageBrush ImageSource="https://avatars.githubusercontent.com/u/8858506" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Grid.Row="0"
Grid.Column="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Padding="0">
Robert 'Spoinky' Beekman
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Foreground="{DynamicResource MaterialDesignNavigationItemSubheader}"
Padding="0">
Project owner, main contributor
</TextBlock>
<StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal" Margin="-10">
<Button Height="40"
Width="40"
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View GitHub profile"
Command="{s:Action OpenUrl}"
CommandParameter="https://github.com/SpoinkyNL/">
<materialDesign:PackIcon Kind="Github" Width="20" Height="20" />
</Button>
</StackPanel>
</Grid>
<Separator Style="{StaticResource MaterialDesignSeparator}" Margin="-15 5" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Ellipse Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="3"
VerticalAlignment="Top"
Height="75"
Width="75"
Margin="0 0 15 0"
RenderOptions.BitmapScalingMode="HighQuality">
<Ellipse.Fill>
<ImageBrush ImageSource="https://avatars.githubusercontent.com/u/1094841" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Grid.Row="0"
Grid.Column="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Padding="0">
Darth Affe
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Foreground="{DynamicResource MaterialDesignNavigationItemSubheader}"
Padding="0">
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/DarthAffe/RGB.NET">
RGB.NET
</Hyperlink> developer, main contributor
</TextBlock>
<StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal" Margin="-10">
<Button Height="40"
Width="40"
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View GitHub profile"
Command="{s:Action OpenUrl}"
CommandParameter="https://github.com/DarthAffe/">
<materialDesign:PackIcon Kind="Github" Width="20" Height="20" />
</Button>
</StackPanel>
</Grid>
<Separator Style="{StaticResource MaterialDesignSeparator}" Margin="-15 5" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Ellipse Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="3"
VerticalAlignment="Top"
Height="75"
Width="75"
Margin="0 0 15 0"
RenderOptions.BitmapScalingMode="HighQuality">
<Ellipse.Fill>
<ImageBrush ImageSource="https://avatars.githubusercontent.com/u/29486064" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Grid.Row="0"
Grid.Column="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Padding="0">
Diogo 'DrMeteor' Trindade
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Foreground="{DynamicResource MaterialDesignNavigationItemSubheader}"
Padding="0">
Main contributor
</TextBlock>
<StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal" Margin="-10">
<Button Height="40"
Width="40"
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View GitHub profile"
Command="{s:Action OpenUrl}"
CommandParameter="https://github.com/diogotr7/">
<materialDesign:PackIcon Kind="Github" Width="20" Height="20" />
</Button>
</StackPanel>
</Grid>
<Separator Style="{StaticResource MaterialDesignSeparator}" Margin="-15 5" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Ellipse Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="3"
VerticalAlignment="Top"
Height="75"
Width="75"
Margin="0 0 15 0"
RenderOptions.BitmapScalingMode="HighQuality">
<Ellipse.Fill>
<ImageBrush ImageSource="https://i.imgur.com/8mPWY1j.png" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Grid.Row="0"
Grid.Column="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Padding="0">
Kai Werling
</TextBlock>
<TextBlock Grid.Column="1"
Grid.Row="1"
Style="{StaticResource MaterialDesignBody1TextBlock}"
Foreground="{DynamicResource MaterialDesignNavigationItemSubheader}"
Padding="0">
Graphics design
</TextBlock>
<StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal" Margin="-10">
<Button Height="40"
Width="40"
Style="{StaticResource MaterialDesignIconForegroundButton}"
ToolTip="View website"
Command="{s:Action OpenUrl}"
CommandParameter="https://kwer.online/">
<materialDesign:PackIcon Kind="Web" Width="20" Height="20" />
</Button>
</StackPanel>
</Grid>
<Separator Style="{StaticResource MaterialDesignSeparator}" Margin="-15 5" />
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="AccountHeart" Width="30" Height="30" />
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Margin="5 3 0 0">
Special thanks
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" LineHeight="25" Margin="10 0 0 0">
- The various people creating PRs to Artemis.Plugins and the main repository<LineBreak />
- All the people on Discord providing feedback and testing
</TextBlock>
<StackPanel Orientation="Horizontal" Margin="0 20 0 0">
<materialDesign:PackIcon Kind="LibraryShelves" Width="30" Height="30" />
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Margin="5 3 0 0">
External libraries
</TextBlock>
</StackPanel>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" LineHeight="25" Margin="10 0 0 0">
- Ben.Demystifier
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/benaadams/Ben.Demystifier">
https://github.com/benaadams/Ben.Demystifier
</Hyperlink><LineBreak />
- EmbedIO
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://unosquare.github.io/embedio/">
https://unosquare.github.io/embedio/
</Hyperlink><LineBreak />
- FluentValidation
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://fluentvalidation.net/">
https://fluentvalidation.net/
</Hyperlink><LineBreak />
- Furl.Http
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://flurl.dev//">
https://flurl.dev/
</Hyperlink><LineBreak />
- gong-wpf-dragdrop
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/punker76/gong-wpf-dragdrop">
https://github.com/punker76/gong-wpf-dragdrop
</Hyperlink><LineBreak />
- Hardcodet.NotifyIcon.Wpf.NetCore
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/HavenDV/H.NotifyIcon.WPF">
https://github.com/HavenDV/H.NotifyIcon.WPF
</Hyperlink><LineBreak />
- Humanizer
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/Humanizr/Humanizer">
https://github.com/Humanizr/Humanizer
</Hyperlink><LineBreak />
- LiteDB
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://www.litedb.org/">
https://www.litedb.org/
</Hyperlink><LineBreak />
- MaterialDesignThemes
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit">
https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit
</Hyperlink><LineBreak />
- MaterialDesignExtensions
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://spiegelp.github.io/MaterialDesignExtensions/">
https://spiegelp.github.io/MaterialDesignExtensions/
</Hyperlink><LineBreak />
- McMaster.NETCore.Plugins
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/natemcmaster/DotNetCorePlugins">
https://github.com/natemcmaster/DotNetCorePlugins
</Hyperlink><LineBreak />
- Newtonsoft.Json
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://www.newtonsoft.com/json">
https://www.newtonsoft.com/json
</Hyperlink><LineBreak />
- Ninject
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="http://www.ninject.org/">
http://www.ninject.org/
</Hyperlink><LineBreak />
- Ookii.Dialogs.Wpf
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/ookii-dialogs/ookii-dialogs-wpf">
https://github.com/ookii-dialogs/ookii-dialogs-wpf
</Hyperlink><LineBreak />
- RawInput.Sharp
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/mfakane/rawinput-sharp">
https://github.com/mfakane/rawinput-sharp
</Hyperlink><LineBreak />
- RGB.NET
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/DarthAffe/RGB.NET">
https://github.com/DarthAffe/RGB.NET
</Hyperlink><LineBreak />
- Serilog
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://serilog.net/">
https://serilog.net/
</Hyperlink><LineBreak />
- SkiaSharp
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/mono/SkiaSharp/">
https://github.com/mono/SkiaSharp
</Hyperlink><LineBreak />
- Stylet
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://github.com/canton7/Stylet">
https://github.com/canton7/Stylet
</Hyperlink><LineBreak />
- Unclassified.NetRevisionTask
<Hyperlink Style="{StaticResource ArtemisHyperlink}"
RequestNavigate="{s:Action OpenHyperlink}"
NavigateUri="https://unclassified.software/en/apps/netrevisiontask">
https://unclassified.software/en/apps/netrevisiontask
</Hyperlink>
</TextBlock>
</StackPanel>
</materialDesign:Card>
</StackPanel>
</ScrollViewer>
</UserControl>

View File

@ -1,4 +1,5 @@
using System.Reflection;
using System.Windows.Navigation;
using Artemis.Core;
using Stylet;
@ -19,6 +20,16 @@ namespace Artemis.UI.Screens.Settings.Tabs.About
set => SetAndNotify(ref _version, value);
}
public void OpenHyperlink(object sender, RequestNavigateEventArgs e)
{
Core.Utilities.OpenUrl(e.Uri.AbsoluteUri);
}
public void OpenUrl(string url)
{
Core.Utilities.OpenUrl(url);
}
#region Overrides of Screen
/// <inheritdoc />

View File

@ -1448,11 +1448,6 @@
"resolved": "3.0.0",
"contentHash": "noPwJJl1Q9uparXy1ogtkmyAPGNfSGb0BLT1292nFH1jdMKje6o2kvvrQUvF9Xklj+IoiAI0UzF6Aqxlvo10lw=="
},
"WriteableBitmapEx": {
"type": "Transitive",
"resolved": "1.6.7",
"contentHash": "GoPhIdYzG/DWJq/MADb8gFzRN5PsxM+1DSJFS8Jzupg4DXqFSnlejYEjJw4ffPEUyELL07O4XIGUZydE4jQK0Q=="
},
"artemis.core": {
"type": "Project",
"dependencies": {
@ -1503,8 +1498,7 @@
"SkiaSharp.Views.WPF": "2.80.2",
"Stylet": "1.3.6",
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.5.0",
"WriteableBitmapEx": "1.6.7"
"System.Numerics.Vectors": "4.5.0"
}
}
}