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) foreach (ProfileModule profileModule in profileModules)
{ {
// Avoid race condition, make the check here // 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); _logger.Debug("Profile is a fresh import, adapting to surface - {profile}", profileModule.ActiveProfile);
AdaptProfile(profileModule.ActiveProfile); AdaptProfile(profileModule.ActiveProfile);
} }

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@
"profiles": { "profiles": {
"Artemis.UI": { "Artemis.UI": {
"commandName": "Project", "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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:s="https://github.com/canton7/Stylet" xmlns:s="https://github.com/canton7/Stylet"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"> d:DesignHeight="450" d:DesignWidth="800">
<Grid Margin="16" Width="500"> <Grid Margin="16" Width="500">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition /> <RowDefinition Height="Auto" />
<RowDefinition /> <RowDefinition Height="Auto" />
<RowDefinition /> <RowDefinition Height="*" />
<RowDefinition /> </Grid.RowDefinitions>
</Grid.RowDefinitions> <TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Grid.Row="0">
<TextBlock Style="{StaticResource MaterialDesignHeadline6TextBlock}" Grid.Row="0"> Export current profile
Export current profile </TextBlock>
</TextBlock>
<TextBlock Grid.Row="1" <TextBlock Grid.Row="1"
Margin="0 10" Margin="0 10"
TextWrapping="Wrap" TextWrapping="Wrap"
Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
Foreground="{DynamicResource MaterialDesignBodyLight}"> Foreground="{DynamicResource MaterialDesignBodyLight}">
Please note that exporting profiles like this is placeholder functionality. The idea is that this will eventually happen via the workshop. 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.
</TextBlock> <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" <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2">
Margin="0 10" <Button Style="{StaticResource MaterialDesignFlatButton}" IsCancel="True" Margin="0 8 8 0" Command="{s:Action Cancel}">
TextWrapping="Wrap" CANCEL
Style="{StaticResource MaterialDesignSubtitle1TextBlock}" </Button>
Foreground="{DynamicResource MaterialDesignBodyLight}"> <Button Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 0 0" Command="{s:Action Accept}">
The workshop will include tools to make profiles convert easily and look good on different layouts. EXPORT ANYWAY
That means right now when someone imports this export unless they have the exact same setup as </Button>
you, they'll have to select LEDs for each layer in the profile. </StackPanel>
</TextBlock> </Grid>
<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>
</UserControl> </UserControl>

View File

@ -1,8 +1,8 @@
using System.Windows; using System.Windows;
using System.Windows.Navigation;
using Artemis.Core; using Artemis.Core;
using Artemis.Core.Services; using Artemis.Core.Services;
using Artemis.UI.Shared.Services; using Artemis.UI.Shared.Services;
using MaterialDesignThemes.Wpf;
namespace Artemis.UI.Screens.ProfileEditor.Dialogs namespace Artemis.UI.Screens.ProfileEditor.Dialogs
{ {
@ -21,6 +21,22 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
public ProfileDescriptor ProfileDescriptor { get; } 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() public void Accept()
{ {
string encoded = _profileService.ExportProfile(ProfileDescriptor); string encoded = _profileService.ExportProfile(ProfileDescriptor);

View File

@ -22,91 +22,104 @@
d:DesignHeight="800" d:DesignWidth="800" d:DesignHeight="800" d:DesignWidth="800"
d:DataContext="{d:DesignInstance dialogs:LayerHintsDialogViewModel}" d:DataContext="{d:DesignInstance dialogs:LayerHintsDialogViewModel}"
Icon="/Resources/Images/Logo/bow.ico"> Icon="/Resources/Images/Logo/bow.ico">
<mde:MaterialWindow.Resources> <mde:MaterialWindow.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</mde:MaterialWindow.Resources> </mde:MaterialWindow.Resources>
<materialDesign:DialogHost IsTabStop="False" <materialDesign:DialogHost IsTabStop="False"
Focusable="False" Focusable="False"
Identifier="DeviceDialog" Identifier="DeviceDialog"
DialogTheme="Inherit" DialogTheme="Inherit"
SnackbarMessageQueue="{Binding LayerHintsMessageQueue}"> SnackbarMessageQueue="{Binding LayerHintsMessageQueue}">
<DockPanel> <DockPanel>
<mde:AppBar Type="Dense" <mde:AppBar Type="Dense"
Title="{Binding Layer.Name}" Title="{Binding Layer.Name}"
ShowShadow="True" ShowShadow="True"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Margin="-18 0 0 0"> Margin="-18 0 0 0">
<mde:AppBar.AppIcon> <mde:AppBar.AppIcon>
<materialDesign:PackIcon Kind="AutoFix" Width="20" Height="28" /> <materialDesign:PackIcon Kind="AutoFix" Width="20" Height="28" />
</mde:AppBar.AppIcon> </mde:AppBar.AppIcon>
</mde:AppBar> </mde:AppBar>
<Grid Margin="15"> <Grid Margin="15">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Grid.Row="0" Style="{StaticResource MaterialDesignHeadline6TextBlock}"> <TextBlock Grid.Row="0" Style="{StaticResource MaterialDesignHeadline6TextBlock}">
Introduction Introduction
</TextBlock> </TextBlock>
<TextBlock Grid.Row="1" Style="{StaticResource MaterialDesignTextBlock}" TextWrapping="Wrap"> <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. 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 /> This is useful when sharing your profile with others, avoiding the need for manual adjustments.
When sharing your profile with other people good hints help them import your profile without the need for manual adjustments. <LineBreak />
</TextBlock> 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"> <TextBlock Grid.Row="2" Style="{StaticResource MaterialDesignHeadline6TextBlock}" Margin="0 25 0 0">
Adaption hints Adaption hints
</TextBlock> </TextBlock>
<ScrollViewer Grid.Row="3"> <StackPanel Grid.Row="3"
<ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0"> Margin="0 50 0 0"
<ItemsControl.ItemTemplate> Visibility="{Binding HasAdaptionHints, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}, Mode=OneWay}">
<DataTemplate> <materialDesign:PackIcon Kind="AlertCircleOutline" HorizontalAlignment="Center" Width="100" Height="100" />
<materialDesign:TransitioningContent OpeningEffect="{materialDesign:TransitionEffect SlideInFromLeft}" <TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}" HorizontalAlignment="Center">You haven't set up any adaption hints</TextBlock>
OpeningEffectsOffset="{materialDesign:IndexedItemOffsetMultiplier 0:0:0.05}"> <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>
<ContentControl s:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" IsTabStop="False" /> </StackPanel>
</materialDesign:TransitioningContent> <ScrollViewer Grid.Row="3"
</DataTemplate> Visibility="{Binding HasAdaptionHints, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Mode=OneWay}">
</ItemsControl.ItemTemplate> <ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0">
</ItemsControl> <ItemsControl.ItemTemplate>
</ScrollViewer> <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 --> <!-- Buttons -->
<Grid Grid.Row="4"> <Grid Grid.Row="4">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition /> <ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button Grid.Column="0" <Button Grid.Column="0"
Style="{StaticResource MaterialDesignOutlinedButton}" Style="{StaticResource MaterialDesignOutlinedButton}"
Margin="0 8 8 0" Margin="0 8 8 0"
Command="{s:Action AutoDetermineHints}" Command="{s:Action AutoDetermineHints}"
ToolTip="Attempt to automatically determine relevant hint(s) for this layer"> ToolTip="Attempt to automatically determine relevant hint(s) for this layer">
AUTO-DETERMINE HINTS AUTO-DETERMINE HINTS
</Button> </Button>
<materialDesign:PopupBox Grid.Column="1" <materialDesign:PopupBox Grid.Column="1"
Style="{StaticResource MaterialDesignMultiFloatingActionAccentPopupBox}" Style="{StaticResource MaterialDesignMultiFloatingActionAccentPopupBox}"
ToolTip="Add a new hint" ToolTip="Add a new hint"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="0 5 0 0"> Margin="0 5 0 0">
<StackPanel> <StackPanel>
<Button ToolTip="Add a category hint" Content="{materialDesign:PackIcon Kind=Desk, Size=20}" Command="{s:Action AddCategoryHint}" /> <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 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}" /> <Button ToolTip="Add a keyboard-section hint" Content="{materialDesign:PackIcon Kind=Keyboard, Size=20}" Command="{s:Action AddKeyboardSectionHint}" />
</StackPanel> </StackPanel>
</materialDesign:PopupBox> </materialDesign:PopupBox>
</Grid> </Grid>
</Grid> </Grid>
</DockPanel> </DockPanel>
</materialDesign:DialogHost> </materialDesign:DialogHost>
</mde:MaterialWindow> </mde:MaterialWindow>

View File

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

View File

@ -7,54 +7,410 @@
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared" xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
xmlns:svgc="http://sharpvectors.codeplex.com/svgc/" xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
xmlns:s="https://github.com/canton7/Stylet"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance local:AboutTabViewModel}"> d:DataContext="{d:DesignInstance local:AboutTabViewModel}">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel Margin="15" MaxWidth="800"> <StackPanel Margin="15" MaxWidth="800">
<StackPanel Orientation="Horizontal"> <Grid>
<Image Source="{svgc:SvgImage Source=/Resources/Images/Logo/bow.svg}" Width="60" Height="80" Margin="0 0 20 0" /> <Grid.RowDefinitions>
<TextBlock Style="{StaticResource MaterialDesignHeadline2TextBlock}"> <RowDefinition />
Artemis 2 <RowDefinition />
</TextBlock> </Grid.RowDefinitions>
</StackPanel> <Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Foreground="{DynamicResource MaterialDesignBodyLight}" Text="{Binding Version}" /> <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 Grid.Row="0" Grid.Column="2" HorizontalAlignment="Right" Orientation="Horizontal">
<StackPanel Margin="15"> <Button
<StackPanel Orientation="Horizontal"> Style="{StaticResource MaterialDesignIconForegroundButton}"
<materialDesign:PackIcon Kind="Account" Width="60" Height="40" /> ToolTip="View website"
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}"> Command="{s:Action OpenUrl}"
Lead developer CommandParameter="https://artemis-rgb.com">
</TextBlock> <materialDesign:PackIcon Kind="Web" />
</StackPanel> </Button>
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" Margin="10 0 0 0"> <Button
- Spoinky (Robert Beekman) Style="{StaticResource MaterialDesignIconForegroundButton}"
</TextBlock> ToolTip="View GitHub repository"
Command="{s:Action OpenUrl}"
<StackPanel Orientation="Horizontal" Margin="0 25 0 0"> CommandParameter="https://github.com/Artemis-RGB/Artemis">
<materialDesign:PackIcon Kind="AccountGroup" Width="60" Height="40" /> <materialDesign:PackIcon Kind="Github" />
<TextBlock Style="{StaticResource MaterialDesignHeadline4TextBlock}"> </Button>
Main contributors <Button
</TextBlock> Style="{StaticResource MaterialDesignIconForegroundButton}"
</StackPanel> ToolTip="View Wiki"
<TextBlock Style="{StaticResource MaterialDesignBody1TextBlock}" LineHeight="25" Margin="10 0 0 0"> Command="{s:Action OpenUrl}"
- DarthAffe <LineBreak /> CommandParameter="https://wiki.artemis-rgb.com"
- DrMeteor (Diogo Trindade) Margin="0 0 -10 0">
</TextBlock> <materialDesign:PackIcon Kind="BookOpenOutline" />
<StackPanel Orientation="Horizontal" Margin="0 25 0 0"> </Button>
<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> </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> </UserControl>

View File

@ -1,4 +1,5 @@
using System.Reflection; using System.Reflection;
using System.Windows.Navigation;
using Artemis.Core; using Artemis.Core;
using Stylet; using Stylet;
@ -19,6 +20,16 @@ namespace Artemis.UI.Screens.Settings.Tabs.About
set => SetAndNotify(ref _version, value); 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 #region Overrides of Screen
/// <inheritdoc /> /// <inheritdoc />

View File

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