mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-20 14:39:12 +00:00
Start work on Group Cue children loading
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="17" android:versionName="1.0.1" package="com.jwetzell.qlabcontroller">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="20" android:versionName="1.0.3" package="com.jwetzell.qlabcontroller">
|
||||||
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
|
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<application android:label="qController" android:icon="@drawable/icon"></application>
|
<application android:label="qController" android:icon="@drawable/icon"></application>
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
<!-- Application resource dictionary -->
|
<!-- Application resource dictionary -->
|
||||||
<OnPlatform x:Key="qfont" x:TypeArguments="x:String">
|
<OnPlatform x:Key="qfont" x:TypeArguments="x:String">
|
||||||
<On Platform="Android" Value="qfont.otf#qfont" />
|
<On Platform="Android" Value="qfont.ttf#qfont" />
|
||||||
<On Platform="iOS" Value="qfont" />
|
<On Platform="iOS" Value="qfont" />
|
||||||
</OnPlatform>
|
</OnPlatform>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ namespace qController
|
|||||||
|
|
||||||
public void UpdateSelectedCue(QCue cue)
|
public void UpdateSelectedCue(QCue cue)
|
||||||
{
|
{
|
||||||
name.Text = cue.name;
|
name.Text = cue.listName;
|
||||||
number.Text = cue.number;
|
number.Text = cue.number;
|
||||||
type.Text = cue.getIconString();
|
type.Text = cue.getIconString();
|
||||||
notes.Text = cue.notes;
|
notes.Text = cue.notes;
|
||||||
|
|||||||
@@ -93,8 +93,6 @@ namespace qController
|
|||||||
{
|
{
|
||||||
UpdateWorkspace("not yet implemented");
|
UpdateWorkspace("not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateSpecificCue(string cue_id)
|
public void UpdateSpecificCue(string cue_id)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace qController
|
namespace qController
|
||||||
@@ -13,6 +14,7 @@ namespace qController
|
|||||||
public QClient qClient;
|
public QClient qClient;
|
||||||
public QWorkSpace qWorkspace;
|
public QWorkSpace qWorkspace;
|
||||||
public string playbackPosition;
|
public string playbackPosition;
|
||||||
|
public Stopwatch sw;
|
||||||
public QController(string address, int port)
|
public QController(string address, int port)
|
||||||
{
|
{
|
||||||
qClient = new QClient(address, port);
|
qClient = new QClient(address, port);
|
||||||
@@ -23,18 +25,40 @@ namespace qController
|
|||||||
qClient.qParser.PlaybackPositionUpdated += this.OnPlaybackPositionUpdated;
|
qClient.qParser.PlaybackPositionUpdated += this.OnPlaybackPositionUpdated;
|
||||||
qClient.qParser.CueInfoUpdated += this.OnCueUpdateReceived;
|
qClient.qParser.CueInfoUpdated += this.OnCueUpdateReceived;
|
||||||
qClient.qParser.AudioLevelsUpdated += this.OnAudioLevelsUpdated;
|
qClient.qParser.AudioLevelsUpdated += this.OnAudioLevelsUpdated;
|
||||||
|
qClient.qParser.ChildrenUpdated += this.OnChildrenUpdated;
|
||||||
qClient.sendArgsUDP("/updates", 1);
|
qClient.sendArgsUDP("/updates", 1);
|
||||||
qClient.sendArgsUDP("/updates", 1);
|
qClient.sendArgsUDP("/updates", 1);
|
||||||
qClient.sendAndReceiveString("/cueLists");
|
qClient.sendAndReceiveString("/cueLists");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnChildrenUpdated(object source, ChildrenEventArgs args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Children Updated in QController: " + args.cue_id);
|
||||||
|
qWorkspace.UpdateChildren(args.cue_id, args.children);
|
||||||
|
|
||||||
|
foreach (var cueList in qWorkspace.data)
|
||||||
|
{
|
||||||
|
foreach (var cue in cueList.cues)
|
||||||
|
{
|
||||||
|
if (cue.type == "Group")
|
||||||
|
{
|
||||||
|
if (cue.cues == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Next Group Cue Found");
|
||||||
|
qClient.sendStringUDP("/cue_id/" + cue.uniqueID + "/children");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnAudioLevelsUpdated(object source, AudioLevelArgs args)
|
private void OnAudioLevelsUpdated(object source, AudioLevelArgs args)
|
||||||
{
|
{
|
||||||
if(qWorkspace != null)
|
if(qWorkspace != null)
|
||||||
qWorkspace.UpdateLevels(args.cue_id, args.levels);
|
qWorkspace.UpdateLevels(args.cue_id, args.levels);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Connect()
|
public void Connect()
|
||||||
{
|
{
|
||||||
qClient.sendStringUDP("/connect");
|
qClient.sendStringUDP("/connect");
|
||||||
@@ -50,14 +74,28 @@ namespace qController
|
|||||||
qClient.sendArgsUDP("/connect", pass);
|
qClient.sendArgsUDP("/connect", pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendCommand(string cmd){
|
|
||||||
qClient.sendString(cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateCueValue(QCue cue, string property, object newValue){
|
public void updateCueValue(QCue cue, string property, object newValue){
|
||||||
//qClient.sendArgs("/cue_id/"+cue.uniqueID+"/"+property, newValue);
|
//qClient.sendArgs("/cue_id/"+cue.uniqueID+"/"+property, newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RefreshGroupCues()
|
||||||
|
{
|
||||||
|
if (qWorkspace.ChildrenPopulated())
|
||||||
|
return;
|
||||||
|
foreach (var cueList in qWorkspace.data)
|
||||||
|
{
|
||||||
|
foreach (var cue in cueList.cues)
|
||||||
|
{
|
||||||
|
if (cue.type == "Group")
|
||||||
|
{
|
||||||
|
Console.WriteLine("First Group Cue Found");
|
||||||
|
qClient.sendStringUDP("/cue_id/" + cue.uniqueID + "/children");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void OnSelectedCueUpdated(object source, CueEventArgs args)
|
public void OnSelectedCueUpdated(object source, CueEventArgs args)
|
||||||
{
|
{
|
||||||
selectedCue = args.Cue;
|
selectedCue = args.Cue;
|
||||||
|
|||||||
@@ -52,6 +52,19 @@ namespace qController
|
|||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public class ChildrenEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public string cue_id
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
public List<QCue> children
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
}
|
||||||
public class QParser
|
public class QParser
|
||||||
{
|
{
|
||||||
public QParser()
|
public QParser()
|
||||||
@@ -65,6 +78,8 @@ namespace qController
|
|||||||
public delegate void CueInfoUpdatedHandler(object source, CueEventArgs args);
|
public delegate void CueInfoUpdatedHandler(object source, CueEventArgs args);
|
||||||
public delegate void PlaybackPositionUpdatedHandler(object source, PlaybackPositionArgs args);
|
public delegate void PlaybackPositionUpdatedHandler(object source, PlaybackPositionArgs args);
|
||||||
public delegate void ConnectionStatusHandler(object source, ConnectEventArgs args);
|
public delegate void ConnectionStatusHandler(object source, ConnectEventArgs args);
|
||||||
|
public delegate void ChildrenUpdateHandler(object source, ChildrenEventArgs args);
|
||||||
|
public event ChildrenUpdateHandler ChildrenUpdated;
|
||||||
public event ConnectionStatusHandler ConnectionStatusChanged;
|
public event ConnectionStatusHandler ConnectionStatusChanged;
|
||||||
public event SelectedCueUpdatedHandler SelectedCueUpdated;
|
public event SelectedCueUpdatedHandler SelectedCueUpdated;
|
||||||
public event AudioLevelsUpdatedHandler AudioLevelsUpdated;
|
public event AudioLevelsUpdatedHandler AudioLevelsUpdated;
|
||||||
@@ -94,6 +109,8 @@ namespace qController
|
|||||||
Console.WriteLine("Heartbeat Received");
|
Console.WriteLine("Heartbeat Received");
|
||||||
else if (msg.Address.Contains("connect"))
|
else if (msg.Address.Contains("connect"))
|
||||||
ParseConnectInfo(msg);
|
ParseConnectInfo(msg);
|
||||||
|
else if (msg.Address.Contains("children"))
|
||||||
|
ParseChildrenInfo(msg);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Unknown message type");
|
Console.WriteLine("Unknown message type");
|
||||||
@@ -103,10 +120,9 @@ namespace qController
|
|||||||
Console.WriteLine(item);
|
Console.WriteLine(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ParseConnectInfo(OscMessage msg)
|
public void ParseConnectInfo(OscMessage msg)
|
||||||
{
|
{
|
||||||
JToken connectStatus = OSC2JSON(msg);
|
JToken connectStatus = OSC2JSON(msg);
|
||||||
@@ -130,7 +146,6 @@ namespace qController
|
|||||||
|
|
||||||
public void ParseSelectedCueInfo(OscMessage msg){
|
public void ParseSelectedCueInfo(OscMessage msg){
|
||||||
JToken selectedCue = OSC2JSON(msg);
|
JToken selectedCue = OSC2JSON(msg);
|
||||||
Console.WriteLine("Selected Cue Updated");
|
|
||||||
QCue cue = JsonConvert.DeserializeObject<QCue>(selectedCue.ToString());
|
QCue cue = JsonConvert.DeserializeObject<QCue>(selectedCue.ToString());
|
||||||
OnSelectedCueUpdated(cue);
|
OnSelectedCueUpdated(cue);
|
||||||
}
|
}
|
||||||
@@ -154,6 +169,17 @@ namespace qController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ParseChildrenInfo(OscMessage msg)
|
||||||
|
{
|
||||||
|
if (msg.Arguments.Count > 0)
|
||||||
|
{
|
||||||
|
string cue_id = msg.Address.Split('/')[3];
|
||||||
|
JToken children_obj = OSC2JSON(msg);
|
||||||
|
List<QCue> children = JsonConvert.DeserializeObject<List<QCue>>(children_obj.ToString());
|
||||||
|
OnChildrenUpdated(cue_id, children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public JToken OSC2JSON(OscMessage Msg){
|
public JToken OSC2JSON(OscMessage Msg){
|
||||||
JObject json = JObject.Parse(Msg.Arguments.ToArray()[0].ToString());
|
JObject json = JObject.Parse(Msg.Arguments.ToArray()[0].ToString());
|
||||||
return json.GetValue("data");
|
return json.GetValue("data");
|
||||||
@@ -191,5 +217,11 @@ namespace qController
|
|||||||
if (ConnectionStatusChanged != null)
|
if (ConnectionStatusChanged != null)
|
||||||
ConnectionStatusChanged(this, new ConnectEventArgs() { Status = status });
|
ConnectionStatusChanged(this, new ConnectEventArgs() { Status = status });
|
||||||
}
|
}
|
||||||
|
protected virtual void OnChildrenUpdated(string id, List<QCue> cues)
|
||||||
|
{
|
||||||
|
if (ChildrenUpdated != null)
|
||||||
|
ChildrenUpdated(this, new ChildrenEventArgs() { cue_id = id, children = cues });
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,21 +13,22 @@ namespace qController
|
|||||||
public string colorName { get; set; }
|
public string colorName { get; set; }
|
||||||
public string name { get; set; }
|
public string name { get; set; }
|
||||||
public bool armed { get; set; }
|
public bool armed { get; set; }
|
||||||
public int translationX { get; set; }
|
public decimal translationX { get; set; }
|
||||||
public bool isRunning { get; set; }
|
public bool isRunning { get; set; }
|
||||||
public int scaleX { get; set; }
|
public decimal scaleX { get; set; }
|
||||||
public bool isPaused { get; set; }
|
public bool isPaused { get; set; }
|
||||||
public int translationY { get; set; }
|
public decimal translationY { get; set; }
|
||||||
public int preWait { get; set; }
|
public decimal preWait { get; set; }
|
||||||
public int opacity { get; set; }
|
public decimal opacity { get; set; }
|
||||||
public int scaleY { get; set; }
|
public decimal scaleY { get; set; }
|
||||||
public int duration { get; set; }
|
public decimal duration { get; set; }
|
||||||
public int postWait { get; set; }
|
public decimal postWait { get; set; }
|
||||||
public bool isBroken { get; set; }
|
public bool isBroken { get; set; }
|
||||||
public string displayName { get; set; }
|
public string displayName { get; set; }
|
||||||
public bool isLoaded { get; set; }
|
public bool isLoaded { get; set; }
|
||||||
public string notes { get; set; }
|
public string notes { get; set; }
|
||||||
public List<double> levels { get; set; }
|
public List<double> levels { get; set; }
|
||||||
|
public List<QCue> cues { get; set; }
|
||||||
public string getIconString()
|
public string getIconString()
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ namespace qController
|
|||||||
public List<QCueList> data { get; set; }
|
public List<QCueList> data { get; set; }
|
||||||
public string workspace_id { get; set; }
|
public string workspace_id { get; set; }
|
||||||
public string address { get; set; }
|
public string address { get; set; }
|
||||||
|
|
||||||
public QCue GetCue(string cue_id)
|
public QCue GetCue(string cue_id)
|
||||||
{
|
{
|
||||||
QCue returnCue = null;
|
QCue returnCue = null;
|
||||||
@@ -40,6 +39,23 @@ namespace qController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateChildren(string cue_id, List<QCue> children)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < data.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < data[i].cues.Count; j++)
|
||||||
|
{
|
||||||
|
if (data[i].cues[j].uniqueID == cue_id)
|
||||||
|
{
|
||||||
|
if(data[i].cues[j].type == "Group")
|
||||||
|
{
|
||||||
|
data[i].cues[j].cues = children;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateLevels(string cue_id, List<double> levels)
|
public void UpdateLevels(string cue_id, List<double> levels)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < data.Count; i++)
|
for (int i = 0; i < data.Count; i++)
|
||||||
@@ -55,6 +71,21 @@ namespace qController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool ChildrenPopulated()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < data.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < data[i].cues.Count; j++)
|
||||||
|
{
|
||||||
|
if (data[i].cues[j].type == "Group" && data[i].cues[j].cues == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void PrintStats()
|
public void PrintStats()
|
||||||
{
|
{
|
||||||
foreach (var cueList in data)
|
foreach (var cueList in data)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace qController
|
|||||||
qController.qClient.qParser.PlaybackPositionUpdated += PlaybackPositionUpdated;
|
qController.qClient.qParser.PlaybackPositionUpdated += PlaybackPositionUpdated;
|
||||||
qController.qClient.qParser.CueInfoUpdated += OnCueUpdateReceived;
|
qController.qClient.qParser.CueInfoUpdated += OnCueUpdateReceived;
|
||||||
qController.qClient.qParser.ConnectionStatusChanged += OnConnectionStatusChanged;
|
qController.qClient.qParser.ConnectionStatusChanged += OnConnectionStatusChanged;
|
||||||
|
qController.qClient.qParser.ChildrenUpdated += OnChildrenUpdated;
|
||||||
instanceName.Text = name;
|
instanceName.Text = name;
|
||||||
App.rootPage.MenuItemSelected += OnMenuItemSelected;
|
App.rootPage.MenuItemSelected += OnMenuItemSelected;
|
||||||
qController.Connect();
|
qController.Connect();
|
||||||
@@ -30,6 +31,30 @@ namespace qController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnChildrenUpdated(object source, ChildrenEventArgs args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Children Updated in ControlPage: " + args.cue_id);
|
||||||
|
qController.qWorkspace.UpdateChildren(args.cue_id, args.children);
|
||||||
|
if (qController.qWorkspace.ChildrenPopulated())
|
||||||
|
{
|
||||||
|
Device.BeginInvokeOnMainThread(() =>
|
||||||
|
{
|
||||||
|
if (App.MenuIsPresented)
|
||||||
|
{
|
||||||
|
//App.MenuIsPresented = false;
|
||||||
|
App.rootPage.MenuPage.ChangeToWorkspace(qController.qWorkspace);
|
||||||
|
//App.MenuIsPresented = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App.rootPage.MenuPage.ChangeToWorkspace(qController.qWorkspace);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
qController.qClient.UpdateSelectedCue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnConnectionStatusChanged(object source, ConnectEventArgs args)
|
private void OnConnectionStatusChanged(object source, ConnectEventArgs args)
|
||||||
{
|
{
|
||||||
if (args.Status == "ok")
|
if (args.Status == "ok")
|
||||||
@@ -149,7 +174,6 @@ namespace qController
|
|||||||
|
|
||||||
sLayout.Children.Add(mainG);
|
sLayout.Children.Add(mainG);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendOSC(object sender, EventArgs e)
|
void sendOSC(object sender, EventArgs e)
|
||||||
@@ -193,6 +217,7 @@ namespace qController
|
|||||||
|
|
||||||
App.rootPage.MenuPage.ChangeToWorkspace(e.UpdatedWorkspace);
|
App.rootPage.MenuPage.ChangeToWorkspace(e.UpdatedWorkspace);
|
||||||
qController.qWorkspace = e.UpdatedWorkspace;
|
qController.qWorkspace = e.UpdatedWorkspace;
|
||||||
|
//qController.RefreshGroupCues();
|
||||||
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
|
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -206,15 +231,9 @@ namespace qController
|
|||||||
{
|
{
|
||||||
Device.BeginInvokeOnMainThread(() => {
|
Device.BeginInvokeOnMainThread(() => {
|
||||||
if (cue.type.Equals("Audio"))
|
if (cue.type.Equals("Audio"))
|
||||||
{
|
|
||||||
//Console.WriteLine("CUE IS AN AUDIO CUE");
|
|
||||||
sLayout.Children.Add(qSelectedCueOptions);
|
sLayout.Children.Add(qSelectedCueOptions);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
//Console.WriteLine("CUE IS NOT AN AUDIO CUE");
|
|
||||||
sLayout.Children.Remove(qSelectedCueOptions);
|
sLayout.Children.Remove(qSelectedCueOptions);
|
||||||
}
|
|
||||||
qCell.UpdateSelectedCue(cue);
|
qCell.UpdateSelectedCue(cue);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -230,15 +249,9 @@ namespace qController
|
|||||||
Device.BeginInvokeOnMainThread(() =>
|
Device.BeginInvokeOnMainThread(() =>
|
||||||
{
|
{
|
||||||
if (args.Cue.type.Equals("Audio"))
|
if (args.Cue.type.Equals("Audio"))
|
||||||
{
|
|
||||||
//Console.WriteLine("CUE IS AN AUDIO CUE");
|
|
||||||
sLayout.Children.Add(qSelectedCueOptions);
|
sLayout.Children.Add(qSelectedCueOptions);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
//Console.WriteLine("CUE IS NOT AN AUDIO CUE");
|
|
||||||
sLayout.Children.Remove(qSelectedCueOptions);
|
sLayout.Children.Remove(qSelectedCueOptions);
|
||||||
}
|
|
||||||
qCell.UpdateSelectedCue(args.Cue);
|
qCell.UpdateSelectedCue(args.Cue);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace qController
|
|||||||
|
|
||||||
public ListView listView;
|
public ListView listView;
|
||||||
public ObservableCollection<MenuPageItem> items;
|
public ObservableCollection<MenuPageItem> items;
|
||||||
|
int subLevel = 0;
|
||||||
public MenuPage()
|
public MenuPage()
|
||||||
{
|
{
|
||||||
Title = "Menu";
|
Title = "Menu";
|
||||||
@@ -88,29 +89,55 @@ namespace qController
|
|||||||
});
|
});
|
||||||
foreach (var cue in cueList.cues)
|
foreach (var cue in cueList.cues)
|
||||||
{
|
{
|
||||||
var cueIcon = cue.getIconString();
|
AddSubCues(cue, 0);
|
||||||
var cueTitle = "";
|
|
||||||
|
|
||||||
if(cue.number != "")
|
|
||||||
{
|
|
||||||
cueTitle = "\t" + cue.number + " - " + cue.listName;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cueTitle = "\t" + cue.listName;
|
|
||||||
}
|
|
||||||
|
|
||||||
items.Add(new MenuPageItem
|
|
||||||
{
|
|
||||||
Title = cueTitle,
|
|
||||||
Icon = cueIcon,
|
|
||||||
Command = "/select_id/" + cue.uniqueID
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddSubCues(QCue cue, int level)
|
||||||
|
{
|
||||||
|
var cueIcon = cue.getIconString();
|
||||||
|
var cueTitle = "";
|
||||||
|
for (int i = 0; i < level; i++)
|
||||||
|
{
|
||||||
|
cueTitle += " ";
|
||||||
|
}
|
||||||
|
if (cue.number != "")
|
||||||
|
{
|
||||||
|
cueTitle += cue.number + " - " + cue.listName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cueTitle += cue.listName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cue.cues != null )
|
||||||
|
{
|
||||||
|
items.Add(new MenuPageItem
|
||||||
|
{
|
||||||
|
Title = cueTitle,
|
||||||
|
Icon = cueIcon,
|
||||||
|
Command = "/select_id/" + cue.uniqueID
|
||||||
|
});
|
||||||
|
|
||||||
|
//uncomment to load nested group cues
|
||||||
|
/*foreach (var sub_cue in cue.cues)
|
||||||
|
{
|
||||||
|
AddSubCues(sub_cue,level + 1);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
items.Add(new MenuPageItem
|
||||||
|
{
|
||||||
|
Title = cueTitle,
|
||||||
|
Icon = cueIcon,
|
||||||
|
Command = "/select_id/" + cue.uniqueID
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void ChangeToHome()
|
public void ChangeToHome()
|
||||||
{
|
{
|
||||||
items.Clear();
|
items.Clear();
|
||||||
|
|||||||
@@ -55,7 +55,10 @@ namespace qController
|
|||||||
case Device.iOS:
|
case Device.iOS:
|
||||||
menuButton.Margin = new Thickness(20, 35, 20, 10);
|
menuButton.Margin = new Thickness(20, 35, 20, 10);
|
||||||
break;
|
break;
|
||||||
|
case Device.Android:
|
||||||
|
topBar.HeightRequest = 50;
|
||||||
|
menuButton.Margin = new Thickness(20, 10, 20, 10);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
menuButton.Text = "\uF0C9";
|
menuButton.Text = "\uF0C9";
|
||||||
|
|||||||
Reference in New Issue
Block a user