diff --git a/.idea/.idea.PSCHelpdesk/.idea/.name b/.idea/.idea.PSCHelpdesk/.idea/.name new file mode 100644 index 0000000..6f7d947 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/.name @@ -0,0 +1 @@ +PSCHelpdesk \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml index 3e1f92f..9ebf1d8 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml @@ -16,7 +16,7 @@ - + diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml index d8fbe9c..56624eb 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -11,21 +11,17 @@ - + - - - + - + + + - - - - + + + - - - - + + - - - - + + + @@ -60,6 +56,7 @@ + @@ -178,7 +175,19 @@ + + + + @@ -187,13 +196,13 @@ file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs - 37 + 39 - - - - file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs - 75 - - - - - - - - - file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs - 85 - - - - - - - - - file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs - 87 - - - - - - - - - file://$PROJECT_DIR$/Vendor/Prise/Infrastructure/JsonSerializerResultConverter.cs - 21 - - - - - - - - - file://$PROJECT_DIR$/Vendor/Prise/Infrastructure/JsonSerializerResultConverter.cs - 20 - - - - - - - - - file://$PROJECT_DIR$/Vendor/Prise/Infrastructure/JsonSerializerResultConverter.cs - 19 - - - - - - - - - file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs - 53 - - - - - - - diff --git a/HetznerServer/HetznerServer.cs b/HetznerServer/HetznerServer.cs index a12287f..ec1f061 100644 --- a/HetznerServer/HetznerServer.cs +++ b/HetznerServer/HetznerServer.cs @@ -24,8 +24,7 @@ public class HetznerServer : Contract var serverTab = new Item() { Header = "Server", - CommandParameter = new ServerViewModel(), - GetView = new ServerView() + ViewModel = typeof(ServerViewModel) }; menuService.AddMenuItem(serverTab); //return serverTab; diff --git a/PSCHelpdesk.sln.DotSettings.user b/PSCHelpdesk.sln.DotSettings.user index 4fa9333..cb9f1ee 100644 --- a/PSCHelpdesk.sln.DotSettings.user +++ b/PSCHelpdesk.sln.DotSettings.user @@ -1,4 +1,5 @@  + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -33,6 +34,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/PSCHelpdesk/PSCHelpdesk/Services/MenuService.cs b/PSCHelpdesk/PSCHelpdesk/Services/MenuService.cs index 0e3a0dc..42ea187 100644 --- a/PSCHelpdesk/PSCHelpdesk/Services/MenuService.cs +++ b/PSCHelpdesk/PSCHelpdesk/Services/MenuService.cs @@ -44,6 +44,11 @@ public class MenuService: ReactiveObject, IMenuService Header = "Plugins B", CommandParameter = Ioc.Default.GetService(), }; + var testTab = new Item() + { + Header = "Plugins T", + ViewModel = typeof(TestViewModel), + }; /*var settingsTab = new MenuItem() { Name = "Settings", @@ -51,6 +56,7 @@ public class MenuService: ReactiveObject, IMenuService };*/ this.MenuItems.Add(pluginTab); + this.MenuItems.Add(testTab); //this.MenuOptionItems.Add(settingsTab); OnMenuChanged(EventArgs.Empty); } diff --git a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs index 16240af..68fe5d7 100644 --- a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs +++ b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs @@ -84,7 +84,6 @@ public class PluginService { loadedPlugins.Add(plugin.GetName(), plugin); plugin.addMenu(); - var t = plugin.load(); appService.AppIsStarted(); } } diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs index e0acb61..0bddcfc 100644 --- a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs @@ -2,8 +2,11 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reactive; +using System.Windows.Input; using Avalonia.Controls; using CommunityToolkit.Mvvm.DependencyInjection; +using CommunityToolkit.Mvvm.Input; +using Nucs.JsonSettings; using PSCHelpdesk.Services; using PSCHelpdesk.Shared.Menu; using PSCHelpdesk.Shared.Service; @@ -15,13 +18,14 @@ namespace PSCHelpdesk.ViewModels; public class MainWindowViewModel : ViewModelBase { private MenuService _menuService; - public ReactiveCommand ClickMenu { get; } + public ReactiveCommand ClickMenu { get; } public MenuService MenuService { get => this._menuService; private set => SetAndRaisePropertyChanged(ref this._menuService, value); } - + + private object _contentDisplay; private Item _selectedItem; public Item SelectedItem @@ -29,8 +33,16 @@ public class MainWindowViewModel : ViewModelBase get => _selectedItem; set => SetAndRaisePropertyChanged(ref _selectedItem, value); } + + public object ContentDisplay + { + get => _contentDisplay; + set => SetAndRaisePropertyChanged(ref _contentDisplay, value); + } + public MainWindowViewModel() { + ClickMenu = ReactiveCommand.Create(SelectMenu); this.MenuItems = new List(); Startup.RegisterServices(); this.MenuService = (MenuService)Ioc.Default.GetService(typeof(IMenuService)); @@ -51,9 +63,7 @@ public class MainWindowViewModel : ViewModelBase this.InitializeClient(); - this.SelectedItem = MenuService.MenuItems.First(); - - ClickMenu = ReactiveCommand.Create(SelectMenu); + this.SelectedItem = MenuService.MenuItems.Last(); } @@ -70,13 +80,34 @@ public class MainWindowViewModel : ViewModelBase this.MenuService.CreateMenu(); } - public void SelectMenu(MenuItem parameter) + public object SelectedContent + { + get + { + if (SelectedItem.ViewModel != null) + { + var vm = SelectedItem.ViewModel.CreateInstance(); + return vm; + } + return this.SelectedItem?.CommandParameter; + } + } + + public void SelectMenu(string parameter) { //this.SelectedItem = parameter; - var obj = this.MenuService.MenuItems.FirstOrDefault(menuItem => menuItem.Header == parameter.Header.ToString(), null); + var obj = this.MenuService.MenuItems.FirstOrDefault(menuItem => menuItem.Header == parameter.ToString(), null); if (obj != null) { this.SelectedItem = obj; + if (obj.ViewModel != null) + { + this.ContentDisplay = obj.ViewModel.CreateInstance(); + } + else + { + this.ContentDisplay = obj.CommandParameter; + } } } } \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/TestViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/TestViewModel.cs new file mode 100644 index 0000000..c2d07fe --- /dev/null +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/TestViewModel.cs @@ -0,0 +1,11 @@ +using PSCHelpdesk.Shared.ViewModels; + +namespace PSCHelpdesk.ViewModels; + +public partial class TestViewModel: ViewModelBase +{ + public TestViewModel() + { + + } +} \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs index 8a5203c..e1d3465 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs +++ b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs @@ -1,6 +1,8 @@ using Avalonia; using Avalonia.Controls.Primitives; using Avalonia.Data; +using CommunityToolkit.Mvvm.DependencyInjection; +using Nucs.JsonSettings; using PSCHelpdesk.Shared.Menu; namespace PSCHelpdesk.Views; @@ -69,9 +71,17 @@ public class ContentDisplay : TemplatedControl public object SelectedContent { - get => this.SelectedItem?.CommandParameter ?? this.SelectedOption?.CommandParameter; + get + { + if (SelectedItem.ViewModel != null) + { + var vm = SelectedItem.ViewModel.CreateInstance(); + return vm; + } + return this.SelectedItem?.CommandParameter ?? this.SelectedOption?.CommandParameter; + } } - + public static void SelectionChanged(AvaloniaObject avaloniaObject, bool done, bool isOption) { if (avaloniaObject is ContentDisplay contentDisplay && done) diff --git a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml index 1322935..0214ec5 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml +++ b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml @@ -26,13 +26,18 @@ + - - + + diff --git a/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml b/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml new file mode 100644 index 0000000..3645667 --- /dev/null +++ b/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml @@ -0,0 +1,8 @@ + + Welcome to Avalonia! + diff --git a/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml.cs new file mode 100644 index 0000000..6bf9ed6 --- /dev/null +++ b/PSCHelpdesk/PSCHelpdesk/Views/TestView.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace PSCHelpdesk.Views; + +public partial class TestView : UserControl +{ + public TestView() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/Shared/Menu/Item.cs b/Shared/Menu/Item.cs index e672b29..0cb10e8 100644 --- a/Shared/Menu/Item.cs +++ b/Shared/Menu/Item.cs @@ -10,7 +10,10 @@ public class Item public string Header { get; set; } public ICommand Command { get; set; } + public object CommandParameter { get; set; } + + public Type ViewModel { get; set; } public UserControl GetView { get; set; } public IList Items { get; set; } diff --git a/Vendor/Prise/Infrastructure/JsonSerializerParameterConverter.cs b/Vendor/Prise/Infrastructure/JsonSerializerParameterConverter.cs index 7f42dab..7692fc7 100644 --- a/Vendor/Prise/Infrastructure/JsonSerializerParameterConverter.cs +++ b/Vendor/Prise/Infrastructure/JsonSerializerParameterConverter.cs @@ -8,6 +8,7 @@ namespace Prise.Infrastructure { public object ConvertToRemoteType(Type localType, object value) { + //return value; var json = JsonConvert.SerializeObject(value); return JsonConvert.DeserializeObject(json, localType); }