From 9cf241f9c8296dfd7a6c81541ae9329229fa1e92 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 8 Jan 2021 23:31:55 -0600 Subject: [PATCH] * AppDelegate.cs: * packages.config: * packages.config: * qController.iOS.csproj: * qController.Droid.csproj: * qController.csproj: Update Packages * App.xaml: Add some static styles * App.xaml.cs: Trying out Sharpnado Stuff * QCueGrid.cs: Move QCueGrid Recursive stuff inside class * QBrowserViewModel.cs: Hook into new ServerFound/Lost Methods * QCueViewModel.cs: Start work on cue children updating * QServerViewModel.cs: Hook into WorkspaceAdded/Removed methods * MenuPage.xaml.cs: Remove Add from side menu * QBrowserPage.xaml: Further work on front page design * QBrowserPage.xaml.cs: Add Manually add button to main page * QWorkspacePage.xaml.cs: Move recursive stuff out of Page code behind --- Droid/packages.config | 11 +- Droid/qController.Droid.csproj | 30 +-- iOS/AppDelegate.cs | 4 +- iOS/packages.config | 9 +- iOS/qController.iOS.csproj | 26 ++- qController.Standard/App.xaml | 36 ++++ qController.Standard/App.xaml.cs | 1 + qController.Standard/Classes/UI/QCueGrid.cs | 29 ++- .../ViewModels/QBrowserViewModel.cs | 38 ++++ .../ViewModels/QCueViewModel.cs | 17 +- .../ViewModels/QServerViewModel.cs | 47 +++-- qController.Standard/Views/MenuPage.xaml.cs | 6 - qController.Standard/Views/QBrowserPage.xaml | 178 ++++++++++-------- .../Views/QBrowserPage.xaml.cs | 11 +- .../Views/QWorkspacePage.xaml.cs | 22 +-- qController.Standard/qController.csproj | 9 +- 16 files changed, 309 insertions(+), 165 deletions(-) diff --git a/Droid/packages.config b/Droid/packages.config index b86c52c..7258d02 100644 --- a/Droid/packages.config +++ b/Droid/packages.config @@ -2,17 +2,18 @@ - + - + - + + @@ -119,7 +120,7 @@ - - + + \ No newline at end of file diff --git a/Droid/qController.Droid.csproj b/Droid/qController.Droid.csproj index a721b10..26b740d 100644 --- a/Droid/qController.Droid.csproj +++ b/Droid/qController.Droid.csproj @@ -1,6 +1,6 @@  - + Debug AnyCPU @@ -83,7 +83,7 @@ False - ..\packages\Acr.UserDialogs.7.1.0.468\lib\monoandroid90\Acr.UserDialogs.dll + ..\packages\Acr.UserDialogs.7.1.0.470\lib\monoandroid90\Acr.UserDialogs.dll ..\packages\AndHUD.1.4.2\lib\MonoAndroid81\AndHUD.dll @@ -98,7 +98,7 @@ ..\packages\Serilog.Sinks.Xamarin.0.2.0.64\lib\MonoAndroid403\Serilog.Sinks.Xamarin.dll - ..\packages\Splat.9.7.1\lib\netstandard2.0\Splat.dll + ..\packages\Splat.9.8.1\lib\netstandard2.0\Splat.dll ..\packages\System.Reactive.5.0.0\lib\netstandard2.0\System.Reactive.dll @@ -233,28 +233,28 @@ ..\packages\Xamarin.Android.Support.ViewPager.28.0.0.3\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - ..\packages\Xamarin.Essentials.1.6.0-pre4\lib\monoandroid90\Xamarin.Essentials.dll - - - ..\packages\Xamarin.Forms.4.8.0.1687\lib\MonoAndroid90\FormsViewGroup.dll + ..\packages\Xamarin.Essentials.1.6.1-preview1\lib\monoandroid90\Xamarin.Essentials.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\packages\Xamarin.Forms.4.8.0.1687\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\netstandard2.0\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\MonoAndroid90\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\netstandard2.0\Xamarin.Forms.Platform.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\netstandard2.0\Xamarin.Forms.Xaml.dll ..\packages\Zeroconf.3.4.2\lib\netstandard2.0\Zeroconf.dll - ..\packages\QControlKit.0.0.10\lib\netstandard2.0\QControlKit.dll + ..\packages\QControlKit.0.0.11\lib\netstandard2.0\QControlKit.dll + + + ..\packages\Sharpnado.MaterialFrame.1.1.3\lib\MonoAndroid10\Sharpnado.MaterialFrame.Android.dll + + + ..\packages\Sharpnado.MaterialFrame.1.1.3\lib\MonoAndroid10\Sharpnado.MaterialFrame.dll @@ -329,5 +329,5 @@ - + \ No newline at end of file diff --git a/iOS/AppDelegate.cs b/iOS/AppDelegate.cs index 22e39ca..0d51f53 100644 --- a/iOS/AppDelegate.cs +++ b/iOS/AppDelegate.cs @@ -1,6 +1,8 @@ using Foundation; using UIKit; using Serilog; +using Sharpnado.MaterialFrame.iOS; + namespace qController.iOS { [Register("AppDelegate")] @@ -10,7 +12,7 @@ namespace qController.iOS { global::Xamarin.Forms.Forms.Init(); Log.Logger = new LoggerConfiguration().WriteTo.NSLog().MinimumLevel.Debug().CreateLogger(); - + iOSMaterialFrameRenderer.Init(); LoadApplication(new App()); return base.FinishedLaunching(app, options); diff --git a/iOS/packages.config b/iOS/packages.config index 3df3f11..8853dd0 100644 --- a/iOS/packages.config +++ b/iOS/packages.config @@ -1,16 +1,17 @@  - + - + + @@ -76,8 +77,8 @@ - - + + \ No newline at end of file diff --git a/iOS/qController.iOS.csproj b/iOS/qController.iOS.csproj index ccf07e0..59e1fa3 100644 --- a/iOS/qController.iOS.csproj +++ b/iOS/qController.iOS.csproj @@ -1,6 +1,6 @@  - + Debug iPhoneSimulator @@ -92,7 +92,7 @@ ..\packages\BTProgressHUD.1.3.2\lib\xamarinios10\BTProgressHUD.dll - ..\packages\Acr.UserDialogs.7.1.0.468\lib\xamarinios10\Acr.UserDialogs.dll + ..\packages\Acr.UserDialogs.7.1.0.470\lib\xamarinios10\Acr.UserDialogs.dll @@ -124,16 +124,16 @@ ..\packages\System.Reactive.PlatformServices.5.0.0\lib\netstandard2.0\System.Reactive.PlatformServices.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - ..\packages\Xamarin.Forms.4.8.0.1687\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + ..\packages\Xamarin.Forms.5.0.0.1874\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - ..\packages\Xamarin.Essentials.1.6.0-pre4\lib\xamarinios10\Xamarin.Essentials.dll + ..\packages\Xamarin.Essentials.1.6.1-preview1\lib\xamarinios10\Xamarin.Essentials.dll ..\packages\Serilog.2.10.0\lib\netstandard2.1\Serilog.dll @@ -146,7 +146,17 @@ ..\packages\Xamarin.iOS.MaterialComponents.92.0.0\lib\Xamarin.iOS\MaterialComponents.dll - ..\packages\QControlKit.0.0.10\lib\netstandard2.0\QControlKit.dll + ..\packages\QControlKit.0.0.11\lib\netstandard2.0\QControlKit.dll + + + + ..\packages\Xamarin.Forms.5.0.0.1874\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\packages\Sharpnado.MaterialFrame.1.1.3\lib\Xamarin.iOS10\Sharpnado.MaterialFrame.dll + + + ..\packages\Sharpnado.MaterialFrame.1.1.3\lib\Xamarin.iOS10\Sharpnado.MaterialFrame.iOS.dll @@ -230,5 +240,5 @@ - + \ No newline at end of file diff --git a/qController.Standard/App.xaml b/qController.Standard/App.xaml index f40917b..e465072 100644 --- a/qController.Standard/App.xaml +++ b/qController.Standard/App.xaml @@ -28,5 +28,41 @@ Value="{DynamicResource PrimaryTextColor}" /> + + + 4 + 8 + 16 + + + + + + + + + + + + + + diff --git a/qController.Standard/App.xaml.cs b/qController.Standard/App.xaml.cs index c78107b..870b6d4 100644 --- a/qController.Standard/App.xaml.cs +++ b/qController.Standard/App.xaml.cs @@ -36,6 +36,7 @@ namespace qController public App() { InitializeComponent(); + Sharpnado.MaterialFrame.Initializer.Initialize(loggerEnable: false, debugLogEnable: false); AppActions.OnAppAction += AppActions_OnAppAction; /*MainPage = new NavigationPage(new QConnectionPage()); diff --git a/qController.Standard/Classes/UI/QCueGrid.cs b/qController.Standard/Classes/UI/QCueGrid.cs index 5e5cbe4..453e5f2 100644 --- a/qController.Standard/Classes/UI/QCueGrid.cs +++ b/qController.Standard/Classes/UI/QCueGrid.cs @@ -1,17 +1,24 @@ using Xamarin.Forms; using qController.ViewModels; using QControlKit; +using Serilog; namespace qController.UI { public class QCueGrid : Grid { + private QCueViewModel qCueViewModel; public QCueGrid(QCue cue) { - QCueViewModel qCueViewModel = new QCueViewModel(cue, true); + qCueViewModel = new QCueViewModel(cue, true); RowSpacing = 0; - RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) }); + RowDefinitions.Add( + new RowDefinition { + Height = new GridLength(40), + BindingContext = qCueViewModel + } + ); ColumnDefinitions = new ColumnDefinitionCollection { new ColumnDefinition{Width = GridLength.Star}, @@ -141,6 +148,24 @@ namespace qController.UI Children.Add(cueTypeLabel, 0, 0); Children.Add(cueLabel, 1, 0); + + if (cue.cues.Count > 0) + { + foreach (var aCue in cue.cues) + { + this.RowDefinitions.Add( + new RowDefinition { + Height = GridLength.Auto, + BindingContext = new QCueViewModel(aCue, false) + } + ); + var aCueGrid = new QCueGrid(aCue); + //cueGridDict.Add(aCue.uid, aCueGrid); + aCueGrid.Margin = new Thickness(0, 0, 0, 0); + Children.Add(aCueGrid, 0, aCue.sortIndex + 1); + Grid.SetColumnSpan(aCueGrid, this.ColumnDefinitions.Count); + } + } } } } diff --git a/qController.Standard/ViewModels/QBrowserViewModel.cs b/qController.Standard/ViewModels/QBrowserViewModel.cs index 83de634..64e832c 100644 --- a/qController.Standard/ViewModels/QBrowserViewModel.cs +++ b/qController.Standard/ViewModels/QBrowserViewModel.cs @@ -5,6 +5,8 @@ using Xamarin.Forms; using QControlKit; using QControlKit.Events; +using System; +using System.Threading.Tasks; namespace qController.ViewModels { @@ -21,6 +23,18 @@ namespace qController.ViewModels ServersGrouped = new ObservableCollection(); this.browser.ServerFound += OnServerFound; + this.browser.ServerLost += OnServerLost; + + Device.StartTimer(TimeSpan.FromSeconds(4), () => + { + Task.Run(async () => + { + this.browser.ProbeForQLabInstances(); + // do something with time... + }); + return true; + }); + } private void OnServerFound(object source, QServerFoundArgs args) @@ -32,6 +46,30 @@ namespace qController.ViewModels }); } + + private void OnServerLost(object source, QServerLostArgs args) + { + QServerViewModel serverToRemove = null; + + foreach(var serverGroup in ServersGrouped) + { + if (serverGroup.host.Equals(args.server.host)) + { + serverToRemove = serverGroup; + break; + } + } + + if(serverToRemove != null) + { + Device.BeginInvokeOnMainThread(() => + { + System.Console.WriteLine($"[QBrowserViewModel] removing server: {args.server.description}"); + ServersGrouped.Remove(serverToRemove); + }); + } + } + void OnPropertyChanged([CallerMemberName] string name = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); diff --git a/qController.Standard/ViewModels/QCueViewModel.cs b/qController.Standard/ViewModels/QCueViewModel.cs index 4199054..0a56d51 100644 --- a/qController.Standard/ViewModels/QCueViewModel.cs +++ b/qController.Standard/ViewModels/QCueViewModel.cs @@ -6,12 +6,13 @@ using Xamarin.Forms; using QControlKit; using QControlKit.Constants; using QControlKit.Events; +using System.Collections.Generic; namespace qController.ViewModels { public class QCueViewModel : INotifyPropertyChanged { - QCue cue; + public QCue cue; bool isSelected = false; bool isCollapsed = false; public event PropertyChangedEventHandler PropertyChanged; @@ -46,7 +47,11 @@ namespace qController.ViewModels } else if (property.Equals(QOSCKey.Children)) { - Log.Debug("children property updated"); + //Log.Debug("children property updated"); + if (cue.IsGroup) + { + OnPropertyChanged("cues"); + } } } } @@ -136,6 +141,14 @@ namespace qController.ViewModels } } + public List cues + { + get + { + return cue.cues; + } + } + public bool IsSelected { get diff --git a/qController.Standard/ViewModels/QServerViewModel.cs b/qController.Standard/ViewModels/QServerViewModel.cs index b002666..4189841 100644 --- a/qController.Standard/ViewModels/QServerViewModel.cs +++ b/qController.Standard/ViewModels/QServerViewModel.cs @@ -67,25 +67,48 @@ namespace qController.ViewModels this.Add(new QWorkspaceViewModel(workspace)); }); } + this.server.WorkspaceAdded += Server_WorkspaceAdded; + this.server.WorkspaceRemoved += Server_WorkspaceRemoved; this.server.ServerUpdated += OnServerUpdated; } + private void Server_WorkspaceRemoved(object source, QServerWorkspaceChangedArgs args) + { + QWorkspaceViewModel workspaceToRemove = null; + + foreach(var workspaceViewModel in this) + { + if(workspaceViewModel.workspace.uniqueID == args.workspace.uniqueID) + { + workspaceToRemove = workspaceViewModel; + break; + } + } + if(workspaceToRemove != null) + { + Device.BeginInvokeOnMainThread(() => + { + Remove(workspaceToRemove); + }); + } + + } + + private void Server_WorkspaceAdded(object source, QServerWorkspaceChangedArgs args) + { + QWorkspaceViewModel workspaceViewModel = new QWorkspaceViewModel(args.workspace); + Device.BeginInvokeOnMainThread(() => + { + Add(workspaceViewModel); + }); + } + + + private void OnServerUpdated(object source, QServerUpdatedArgs args) { OnPropertyChanged("GroupName"); OnPropertyChanged("version"); - - foreach (var workspace in this.server.workspaces) - { - QWorkspaceViewModel workspaceViewModel = new QWorkspaceViewModel(workspace); - if (!Contains(workspaceViewModel)) - { - Device.BeginInvokeOnMainThread(() => - { - Add(workspaceViewModel); - }); - } - } } void OnPropertyChanged([CallerMemberName] string name = "") diff --git a/qController.Standard/Views/MenuPage.xaml.cs b/qController.Standard/Views/MenuPage.xaml.cs index 19635a6..c22f331 100644 --- a/qController.Standard/Views/MenuPage.xaml.cs +++ b/qController.Standard/Views/MenuPage.xaml.cs @@ -110,12 +110,6 @@ namespace qController Command = "scan" }); items.Add(new MenuPageItem - { - Title = "Add Manually", - Icon = "\uE801", - Command = "add" - }); - items.Add(new MenuPageItem { Title = "Send Feedback", Icon = QIcon.MAIL, diff --git a/qController.Standard/Views/QBrowserPage.xaml b/qController.Standard/Views/QBrowserPage.xaml index 334cf91..c9d6f39 100644 --- a/qController.Standard/Views/QBrowserPage.xaml +++ b/qController.Standard/Views/QBrowserPage.xaml @@ -4,6 +4,7 @@ xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core" + xmlns:materialFrame="clr-namespace:Sharpnado.MaterialFrame;assembly=Sharpnado.MaterialFrame" xmlns:qui="clr-namespace:qController.UI" mc:Ignorable="d" x:Class="qController.Pages.QBrowserPage" @@ -37,101 +38,116 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +