Plugins - Added descriptions

Settings - Plugin settings tab
UI - Catch exceptions during exception dialog display
Plugins - Implemented enable/disable of plugins (WIP)
Novation - Added Launchpad Mini layout and image
This commit is contained in:
Robert committed 2020-03-03 23:18:00 +01:00
1 parent 57d82fafa8
commit c62997ca41
44 files changed
+810 -199

No files matched your search

@@ -0,0 +1,70 @@
<UserControl x:Class="Artemis.UI.Screens.Settings.Tabs.Plugins.PluginSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:devices="clr-namespace:Artemis.UI.Screens.Settings.Tabs.Plugins"
d:DataContext="{d:DesignInstance devices:PluginSettingsViewModel}"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml" />
<ResourceDictionary
Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml" />
<ResourceDictionary
Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBlock.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<materialDesign:Card Width="400">
<Grid Margin="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.ColumnSpan="2" Margin="0 10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<materialDesign:PackIcon Kind="{Binding Icon}" Width="48" Height="48" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Center" />
<TextBlock Style="{StaticResource MaterialDesignTextBlock}" Text="{Binding PluginInfo.Name}" Grid.Column="1" Grid.Row="0" />
<TextBlock Grid.Column="1"
Grid.Row="1"
TextWrapping="Wrap"
Text="{Binding PluginInfo.Description}"
Style="{StaticResource MaterialDesignTextBlock}"
Foreground="{DynamicResource MaterialDesignNavigationItemSubheader}" />
</Grid>
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal">
<Button Style="{StaticResource MaterialDesignOutlinedButton}" ToolTip="MaterialDesignOutlinedButton" Margin="4" s:View.ActionTarget="{Binding}" Command="{s:Action OpenSettings}">
Settings
</Button>
<!-- <Button Style="{StaticResource MaterialDesignOutlinedButton}" ToolTip="MaterialDesignOutlinedButton" Margin="4"> -->
<!-- Details -->
<!-- </Button> -->
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="8">
<CheckBox Style="{StaticResource MaterialDesignCheckBox}" IsChecked="{Binding IsEnabled}">
Plugin enabled
</CheckBox>
</StackPanel>
</Grid>
</materialDesign:Card>
</UserControl>
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Artemis.UI.Screens.Settings.Tabs.Plugins
{
/// <summary>
/// Interaction logic for PluginSettingsView.xaml
/// </summary>
public partial class PluginSettingsView : UserControl
{
public PluginSettingsView()
{
InitializeComponent();
}
}
}
@@ -1,8 +1,11 @@
using System;
using System.Threading.Tasks;
using Artemis.Core.Plugins.Abstract;
using Artemis.Core.Plugins.LayerBrush;
using Artemis.Core.Plugins.Models;
using Artemis.Core.Services.Interfaces;
using Artemis.UI.Shared.Services.Interfaces;
using MaterialDesignThemes.Wpf;
using Stylet;
namespace Artemis.UI.Screens.Settings.Tabs.Plugins
@@ -10,36 +13,65 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
public class PluginSettingsViewModel : PropertyChangedBase
{
private readonly IDialogService _dialogService;
private readonly Plugin _plugin;
private readonly IPluginService _pluginService;
private readonly IWindowManager _windowManager;
public PluginSettingsViewModel(Plugin plugin, IWindowManager windowManager, IDialogService dialogService, IPluginService pluginService)
{
_plugin = plugin;
Plugin = plugin;
PluginInfo = plugin.PluginInfo;
_windowManager = windowManager;
_dialogService = dialogService;
_pluginService = pluginService;
}
public string Type => _plugin.GetType().BaseType?.Name ?? _plugin.GetType().Name;
public string Name => _plugin.PluginInfo.Name;
public string Description => _plugin.PluginInfo.Description;
public Version Version => _plugin.PluginInfo.Version;
public Plugin Plugin { get; set; }
public PluginInfo PluginInfo { get; set; }
public string Type => Plugin.GetType().BaseType?.Name ?? Plugin.GetType().Name;
public PackIconKind Icon => GetIconKind();
private PackIconKind GetIconKind()
{
if (PluginInfo.Icon != null)
{
var parsedIcon = Enum.TryParse<PackIconKind>(PluginInfo.Icon, true, out var iconEnum);
if (parsedIcon == false)
return PackIconKind.QuestionMarkCircle;
}
switch (Plugin)
{
case DataModelExpansion _:
return PackIconKind.TableAdd;
case DeviceProvider _:
return PackIconKind.Devices;
case ProfileModule _:
return PackIconKind.VectorRectangle;
case Core.Plugins.Abstract.Module _:
return PackIconKind.GearBox;
case LayerBrushProvider _:
return PackIconKind.Brush;
}
return PackIconKind.Plugin;
}
public bool IsEnabled
{
get => _plugin.PluginInfo.Enabled;
get => PluginInfo.Enabled;
set => Task.Run(() => UpdateEnabled(value));
}
public bool CanOpenSettings => IsEnabled && _plugin.HasConfigurationViewModel;
public bool CanOpenSettings => IsEnabled && Plugin.HasConfigurationViewModel;
public async Task OpenSettings()
{
try
{
var configurationViewModel = _plugin.GetConfigurationViewModel();
var configurationViewModel = Plugin.GetConfigurationViewModel();
if (configurationViewModel != null)
_windowManager.ShowDialog(new PluginSettingsWindowViewModel(configurationViewModel));
}
@@ -50,15 +82,33 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
}
}
private void UpdateEnabled(in bool enable)
private async Task UpdateEnabled(bool enable)
{
if (_plugin.PluginInfo.Enabled == enable)
if (PluginInfo.Enabled == enable)
{
NotifyOfPropertyChange(() => IsEnabled);
return;
}
if (!enable && Plugin is DeviceProvider)
{
var confirm = await _dialogService.ShowConfirmDialog(
"Disable device provider",
"You are disabling a device provider, this requires that Artemis restarts, please confirm."
);
if (!confirm)
{
NotifyOfPropertyChange(() => IsEnabled);
return;
}
}
if (enable)
_pluginService.EnablePlugin(_plugin);
_pluginService.EnablePlugin(Plugin);
else
_pluginService.DisablePlugin(_plugin);
_pluginService.DisablePlugin(Plugin);
NotifyOfPropertyChange(() => IsEnabled);
}
}
}