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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0)
{
- QCueGrid cueGrid = cueToGrid(aCue);
+ QCueGrid cueGrid = new QCueGrid(aCue);
cueGridDict.Add(aCue.uid, cueGrid);
@@ -141,25 +142,6 @@ namespace qController
}
- QCueGrid cueToGrid(QCue cue)
- {
- QCueGrid cueGrid = new QCueGrid(cue);
-
- if (cue.cues.Count > 0)
- {
- foreach (var aCue in cue.cues)
- {
- cueGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
- var aCueGrid = cueToGrid(aCue);
- cueGridDict.Add(aCue.uid, aCueGrid);
- aCueGrid.Margin = new Thickness(0, 0, 0, 0);
- cueGrid.Children.Add(aCueGrid, 0, aCue.sortIndex + 1);
- Grid.SetColumnSpan(aCueGrid,cueGrid.ColumnDefinitions.Count);
- }
- }
- return cueGrid;
- }
-
void Back()
{
diff --git a/qController.Standard/qController.csproj b/qController.Standard/qController.csproj
index be4efcb..1966fab 100644
--- a/qController.Standard/qController.csproj
+++ b/qController.Standard/qController.csproj
@@ -57,14 +57,15 @@
-
+
-
+
-
+
-
+
+