mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-26 09:29:17 +00:00
* qfont.ttf:
* qfont.ttf: Icons * App.xaml.cs: Set Font String System Wide * RootPage.xaml.cs: * QGrid.cs: * QCueListView.cs: * qConnectionPage.xaml.cs: * IPHelper.cs: * QInstanceCell.cs: Switch to using Icon Font * QSelectedCueCell.cs: Switch to Type Icon instead of just name * QClient.cs: Create and dispose of sender for every sent message * QCue.cs: Add Icon Code method * ControlPage.xaml: Add hamburger menu * ControlPage.xaml.cs: Menu for Workspace listing/ cue selection * MenuPage.xaml.cs: Function to change menu items back for home page
This commit is contained in:
Executable → Regular
BIN
Binary file not shown.
Executable → Regular
BIN
Binary file not shown.
@@ -7,6 +7,7 @@ namespace qController
|
|||||||
public static INavigation iNav;
|
public static INavigation iNav;
|
||||||
public static NavigationPage NavigationPage { get; private set; }
|
public static NavigationPage NavigationPage { get; private set; }
|
||||||
public static RootPage rootPage;
|
public static RootPage rootPage;
|
||||||
|
public static string QFont;
|
||||||
|
|
||||||
public static bool MenuIsPresented
|
public static bool MenuIsPresented
|
||||||
{
|
{
|
||||||
@@ -26,6 +27,18 @@ namespace qController
|
|||||||
|
|
||||||
/*MainPage = new NavigationPage(new QConnectionPage());
|
/*MainPage = new NavigationPage(new QConnectionPage());
|
||||||
iNav = MainPage.Navigation;*/
|
iNav = MainPage.Navigation;*/
|
||||||
|
|
||||||
|
switch (Device.RuntimePlatform)
|
||||||
|
{
|
||||||
|
case Device.iOS:
|
||||||
|
QFont = "qfont";
|
||||||
|
break;
|
||||||
|
case Device.Android:
|
||||||
|
QFont = "qfont.ttf#qfont";
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
var menuPage = new MenuPage();
|
var menuPage = new MenuPage();
|
||||||
rootPage = new RootPage();
|
rootPage = new RootPage();
|
||||||
NavigationPage = new NavigationPage(new QConnectionPage());
|
NavigationPage = new NavigationPage(new QConnectionPage());
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace qController
|
|
||||||
{
|
|
||||||
public class QCueListView : Frame
|
|
||||||
{
|
|
||||||
ListView listView;
|
|
||||||
public QCueListView()
|
|
||||||
{
|
|
||||||
Padding = new Thickness(5);
|
|
||||||
CornerRadius = 20;
|
|
||||||
BackgroundColor = Color.FromHex("D8D8D8");
|
|
||||||
Grid mainG = new Grid
|
|
||||||
{
|
|
||||||
Padding = new Thickness(0),
|
|
||||||
RowDefinitions =
|
|
||||||
{
|
|
||||||
new RowDefinition{Height = GridLength.Star}
|
|
||||||
},
|
|
||||||
ColumnDefinitions =
|
|
||||||
{
|
|
||||||
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
listView = new ListView();
|
|
||||||
mainG.Children.Add(listView, 0, 0);
|
|
||||||
Margin = new Thickness(10);
|
|
||||||
Content = mainG;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateWithWorkspace(QWorkSpace qWorkspace)
|
|
||||||
{
|
|
||||||
List<string> cueLists = new List<string>();
|
|
||||||
foreach( var cueList in qWorkspace.data )
|
|
||||||
{
|
|
||||||
cueLists.Add(cueList.listName);
|
|
||||||
foreach(var cue in cueList.cues)
|
|
||||||
{
|
|
||||||
if(cue.number == "")
|
|
||||||
cueLists.Add("\t" + cue.listName);
|
|
||||||
else
|
|
||||||
cueLists.Add("\t" + cue.number + " - " + cue.listName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
listView.ItemsSource = cueLists.ToArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,8 +11,6 @@ namespace qController
|
|||||||
|
|
||||||
Label nameLabel = new Label();
|
Label nameLabel = new Label();
|
||||||
Label addressLabel = new Label();
|
Label addressLabel = new Label();
|
||||||
Image connectButton = new Image();
|
|
||||||
Image deleteButton = new Image();
|
|
||||||
|
|
||||||
Label connectLabel = new Label();
|
Label connectLabel = new Label();
|
||||||
Label deleteLabel = new Label();
|
Label deleteLabel = new Label();
|
||||||
@@ -21,12 +19,10 @@ namespace qController
|
|||||||
var deleteTapGesture = new TapGestureRecognizer();
|
var deleteTapGesture = new TapGestureRecognizer();
|
||||||
|
|
||||||
connectTapGesture.Tapped += Connect;
|
connectTapGesture.Tapped += Connect;
|
||||||
connectButton.GestureRecognizers.Add(connectTapGesture);
|
|
||||||
connectLabel.GestureRecognizers.Add(connectTapGesture);
|
connectLabel.GestureRecognizers.Add(connectTapGesture);
|
||||||
|
|
||||||
|
|
||||||
deleteTapGesture.Tapped += Delete;
|
deleteTapGesture.Tapped += Delete;
|
||||||
deleteButton.GestureRecognizers.Add(deleteTapGesture);
|
|
||||||
deleteLabel.GestureRecognizers.Add(deleteTapGesture);
|
deleteLabel.GestureRecognizers.Add(deleteTapGesture);
|
||||||
|
|
||||||
InitItems();
|
InitItems();
|
||||||
@@ -79,15 +75,6 @@ namespace qController
|
|||||||
nameLabel.FontAttributes = FontAttributes.Bold;
|
nameLabel.FontAttributes = FontAttributes.Bold;
|
||||||
nameLabel.FontSize = 20;
|
nameLabel.FontSize = 20;
|
||||||
|
|
||||||
connectButton.HorizontalOptions = LayoutOptions.CenterAndExpand;
|
|
||||||
connectButton.VerticalOptions = LayoutOptions.CenterAndExpand;
|
|
||||||
connectButton.Source = "connect.png";
|
|
||||||
|
|
||||||
|
|
||||||
deleteButton.HorizontalOptions = LayoutOptions.CenterAndExpand;
|
|
||||||
deleteButton.VerticalOptions = LayoutOptions.CenterAndExpand;
|
|
||||||
deleteButton.Source = "delete.png";
|
|
||||||
|
|
||||||
addressLabel.HorizontalTextAlignment = TextAlignment.Center;
|
addressLabel.HorizontalTextAlignment = TextAlignment.Center;
|
||||||
addressLabel.VerticalTextAlignment = TextAlignment.Start;
|
addressLabel.VerticalTextAlignment = TextAlignment.Start;
|
||||||
|
|
||||||
@@ -103,20 +90,8 @@ namespace qController
|
|||||||
deleteLabel.FontSize = 40;
|
deleteLabel.FontSize = 40;
|
||||||
deleteLabel.TextColor = Color.Red;
|
deleteLabel.TextColor = Color.Red;
|
||||||
|
|
||||||
string qfont = "";
|
connectLabel.FontFamily = App.QFont;
|
||||||
|
deleteLabel.FontFamily = App.QFont;
|
||||||
switch (Device.RuntimePlatform)
|
|
||||||
{
|
|
||||||
case Device.iOS:
|
|
||||||
qfont = "qfont";
|
|
||||||
break;
|
|
||||||
case Device.Android:
|
|
||||||
qfont = "qfont.ttf#qfont";
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
connectLabel.FontFamily = qfont;
|
|
||||||
deleteLabel.FontFamily = qfont;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -130,7 +105,7 @@ namespace qController
|
|||||||
|
|
||||||
void Connect(object sender, EventArgs e)
|
void Connect(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
App.NavigationPage.Navigation.PushModalAsync(new NavigationPage(new ControlPage(nameLabel.Text,addressLabel.Text)));
|
App.NavigationPage.Navigation.PushAsync(new ControlPage(nameLabel.Text,addressLabel.Text));
|
||||||
|
|
||||||
Console.WriteLine("Connect To " + nameLabel.Text + " Pressed");
|
Console.WriteLine("Connect To " + nameLabel.Text + " Pressed");
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ namespace qController
|
|||||||
Label number;
|
Label number;
|
||||||
Label type;
|
Label type;
|
||||||
Label notes;
|
Label notes;
|
||||||
|
|
||||||
public QSelectedCueCell()
|
public QSelectedCueCell()
|
||||||
{
|
{
|
||||||
Padding = new Thickness(5);
|
Padding = new Thickness(5);
|
||||||
@@ -66,23 +65,29 @@ namespace qController
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
number = new Label { Text = "N/A"};
|
number = new Label {
|
||||||
number.FontAttributes = FontAttributes.Bold;
|
Text = "N/A",
|
||||||
number.FontSize = 30;
|
FontAttributes = FontAttributes.Bold,
|
||||||
number.Margin = new Thickness(5);
|
FontSize = 30,
|
||||||
|
Margin = new Thickness(5)
|
||||||
|
};
|
||||||
|
|
||||||
|
name = new Label {
|
||||||
|
Text = "N/A",
|
||||||
|
FontAttributes = FontAttributes.Bold,
|
||||||
|
HorizontalTextAlignment = TextAlignment.Center,
|
||||||
|
FontSize = 20,
|
||||||
|
Margin = new Thickness(0)
|
||||||
|
};
|
||||||
|
|
||||||
name = new Label { Text = "N/A" };
|
type = new Label {
|
||||||
name.FontAttributes = FontAttributes.Bold;
|
Text = "",
|
||||||
name.HorizontalTextAlignment = TextAlignment.Center;
|
FontFamily = App.QFont,
|
||||||
name.FontSize = 20;
|
VerticalTextAlignment = TextAlignment.Center,
|
||||||
name.Margin = new Thickness(0);
|
HorizontalTextAlignment = TextAlignment.End,
|
||||||
|
Margin = new Thickness(5),
|
||||||
type = new Label { Text = "N/A" };
|
FontSize = 27
|
||||||
type.FontAttributes = FontAttributes.Bold;
|
};
|
||||||
type.VerticalTextAlignment = TextAlignment.Center;
|
|
||||||
type.HorizontalTextAlignment = TextAlignment.End;
|
|
||||||
type.Margin = new Thickness(5);
|
|
||||||
|
|
||||||
notes = new Label { Text = "Viewing Notes Currently Unavailable" };
|
notes = new Label { Text = "Viewing Notes Currently Unavailable" };
|
||||||
notes.HorizontalTextAlignment = TextAlignment.Center;
|
notes.HorizontalTextAlignment = TextAlignment.Center;
|
||||||
@@ -112,7 +117,7 @@ namespace qController
|
|||||||
{
|
{
|
||||||
name.Text = cue.name;
|
name.Text = cue.name;
|
||||||
number.Text = cue.number;
|
number.Text = cue.number;
|
||||||
type.Text = cue.type;
|
type.Text = cue.getIconString();
|
||||||
notes.Text = cue.notes;
|
notes.Text = cue.notes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
|
|
||||||
namespace qController
|
|
||||||
{
|
|
||||||
public class IPHelper
|
|
||||||
{
|
|
||||||
public IPHelper()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsValidAddress(string ipString){
|
|
||||||
if ((ipString.Split('.').Length - 1) != 3) return false;
|
|
||||||
IPAddress address;
|
|
||||||
return IPAddress.TryParse(ipString, out address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,12 +12,16 @@ namespace qController
|
|||||||
public QParser qParser;
|
public QParser qParser;
|
||||||
public QReceiver qReceiver;
|
public QReceiver qReceiver;
|
||||||
|
|
||||||
|
string Address;
|
||||||
|
int Port;
|
||||||
public QClient(string address, int port)
|
public QClient(string address, int port)
|
||||||
{
|
{
|
||||||
|
Address = address;
|
||||||
|
Port = port;
|
||||||
qParser = new QParser();
|
qParser = new QParser();
|
||||||
qReceiver = new QReceiver(port + 1);
|
qReceiver = new QReceiver(Port + 1);
|
||||||
tcpSender = new TCPSender(address, port);
|
tcpSender = new TCPSender(Address, Port);
|
||||||
udpSender = new UDPSender(address, port);
|
udpSender = new UDPSender(Address, Port);
|
||||||
|
|
||||||
tcpSender.MessageReceived += OnMessageReceived;
|
tcpSender.MessageReceived += OnMessageReceived;
|
||||||
qReceiver.UpdateMessageReceived += OnMessageReceived;
|
qReceiver.UpdateMessageReceived += OnMessageReceived;
|
||||||
@@ -44,11 +48,15 @@ namespace qController
|
|||||||
}
|
}
|
||||||
public void sendStringUDP(string address)
|
public void sendStringUDP(string address)
|
||||||
{
|
{
|
||||||
|
udpSender = new UDPSender(Address,Port);
|
||||||
udpSender.Send(new OscMessage(address));
|
udpSender.Send(new OscMessage(address));
|
||||||
|
udpSender.Close();
|
||||||
}
|
}
|
||||||
public void sendArgsUDP(string address, params object[] args)
|
public void sendArgsUDP(string address, params object[] args)
|
||||||
{
|
{
|
||||||
|
udpSender = new UDPSender(Address, Port);
|
||||||
udpSender.Send(new OscMessage(address, args));
|
udpSender.Send(new OscMessage(address, args));
|
||||||
|
udpSender.Close();
|
||||||
}
|
}
|
||||||
public void sendAndReceiveString(string address)
|
public void sendAndReceiveString(string address)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,5 +26,64 @@ namespace qController
|
|||||||
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 string getIconString()
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case "Group":
|
||||||
|
return "\uF248";
|
||||||
|
case "Audio":
|
||||||
|
return "\uE807";
|
||||||
|
case "Mic":
|
||||||
|
return "\uF130";
|
||||||
|
case "Video":
|
||||||
|
return "\uE805";
|
||||||
|
case "Camera":
|
||||||
|
return "\uE806";
|
||||||
|
case "Text":
|
||||||
|
return "T";
|
||||||
|
case "Light":
|
||||||
|
return "\uF0EB";
|
||||||
|
case "Fade":
|
||||||
|
return "\uF1DE";
|
||||||
|
case "Network":
|
||||||
|
return "\uF192";
|
||||||
|
case "MIDI":
|
||||||
|
return "";
|
||||||
|
case "MIDI File":
|
||||||
|
return "\uE804";
|
||||||
|
case "Timecode":
|
||||||
|
return "\uE808";
|
||||||
|
case "Start":
|
||||||
|
return "\uE809";
|
||||||
|
case "Stop":
|
||||||
|
return "\uE80A";
|
||||||
|
case "Pause":
|
||||||
|
return "\uE80B";
|
||||||
|
case "Load":
|
||||||
|
return "\uE80E";
|
||||||
|
case "Reset":
|
||||||
|
return "\uE80F";
|
||||||
|
case "Devamp":
|
||||||
|
return "\uE80C";
|
||||||
|
case "GoTo":
|
||||||
|
return "\uF178";
|
||||||
|
case "Target":
|
||||||
|
return "\uE80D";
|
||||||
|
case "Arm":
|
||||||
|
return "\uE810";
|
||||||
|
case "Disarm":
|
||||||
|
return "";
|
||||||
|
case "Wait":
|
||||||
|
return "\uF250";
|
||||||
|
case "Memo":
|
||||||
|
return "\uF27B";
|
||||||
|
case "Script":
|
||||||
|
return "\uE811";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
using System;
|
|
||||||
namespace qController
|
|
||||||
{
|
|
||||||
public class QGrid
|
|
||||||
{
|
|
||||||
|
|
||||||
public QGrid()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Image x:Name = "backButton" HorizontalOptions = "Start" Margin="20,10,20,10" Grid.Row="0" Grid.Column="0" />
|
<Label x:Name = "menuButton" FontFamily = "{StaticResource qfont}" HorizontalOptions = "Start" Margin="20,10,20,10" Grid.Row="0" Grid.Column="0" FontSize="25"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ContentPage.Content>
|
</ContentPage.Content>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ namespace qController
|
|||||||
Label instanceName = new Label();
|
Label instanceName = new Label();
|
||||||
QSelectedCueCell qCell;
|
QSelectedCueCell qCell;
|
||||||
QSelectedCueOptionsCell qSelectedCueOptions;
|
QSelectedCueOptionsCell qSelectedCueOptions;
|
||||||
QCueListView qCueListView;
|
|
||||||
Grid mainG;
|
Grid mainG;
|
||||||
ListView listView;
|
ListView listView;
|
||||||
public ControlPage(string name, string address)
|
public ControlPage(string name, string address)
|
||||||
@@ -23,18 +22,30 @@ namespace qController
|
|||||||
qController.qClient.qParser.WorkspaceUpdated += WorkspaceUpdated;
|
qController.qClient.qParser.WorkspaceUpdated += WorkspaceUpdated;
|
||||||
qController.qClient.qParser.PlaybackPositionUpdated += PlaybackPositionUpdated;
|
qController.qClient.qParser.PlaybackPositionUpdated += PlaybackPositionUpdated;
|
||||||
qController.qClient.qParser.CueInfoUpdated += OnCueUpdateReceived;
|
qController.qClient.qParser.CueInfoUpdated += OnCueUpdateReceived;
|
||||||
NavigationPage.SetHasNavigationBar(this, false);
|
|
||||||
instanceName.Text = name;
|
|
||||||
|
|
||||||
|
instanceName.Text = name;
|
||||||
|
App.rootPage.MenuItemSelected += OnMenuItemSelected;
|
||||||
|
|
||||||
InitGUI();
|
InitGUI();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnMenuItemSelected(object source, MenuEventArgs args)
|
||||||
|
{
|
||||||
|
if (args.Command.Contains("/"))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Cue selected: " + args.Command);
|
||||||
|
qController.qClient.sendStringUDP(args.Command);
|
||||||
|
}else if (args.Command == "disconnect")
|
||||||
|
{
|
||||||
|
Back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void InitGUI()
|
private void InitGUI()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NavigationPage.SetHasNavigationBar(this, false);
|
||||||
instanceName.HorizontalTextAlignment = TextAlignment.Center;
|
instanceName.HorizontalTextAlignment = TextAlignment.Center;
|
||||||
instanceName.HorizontalOptions = LayoutOptions.CenterAndExpand;
|
instanceName.HorizontalOptions = LayoutOptions.CenterAndExpand;
|
||||||
instanceName.VerticalOptions = LayoutOptions.CenterAndExpand;
|
instanceName.VerticalOptions = LayoutOptions.CenterAndExpand;
|
||||||
@@ -42,11 +53,11 @@ namespace qController
|
|||||||
topBar.BackgroundColor = Color.FromHex("71AEFF");
|
topBar.BackgroundColor = Color.FromHex("71AEFF");
|
||||||
|
|
||||||
BackgroundColor = Color.FromHex("4A4A4A");
|
BackgroundColor = Color.FromHex("4A4A4A");
|
||||||
backButton.Source = ImageSource.FromFile("back");
|
menuButton.Text = "\uF0C9";
|
||||||
switch (Device.RuntimePlatform)
|
switch (Device.RuntimePlatform)
|
||||||
{
|
{
|
||||||
case Device.iOS:
|
case Device.iOS:
|
||||||
backButton.Margin = new Thickness(20, 35, 20, 10);
|
menuButton.Margin = new Thickness(20, 35, 20, 10);
|
||||||
instanceName.Margin = new Thickness(20, 35, 20, 10);
|
instanceName.Margin = new Thickness(20, 35, 20, 10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -61,10 +72,10 @@ namespace qController
|
|||||||
buttons.Add(new QButton("Pause", "/pause"));
|
buttons.Add(new QButton("Pause", "/pause"));
|
||||||
buttons.Add(new QButton("Resume", "/resume"));
|
buttons.Add(new QButton("Resume", "/resume"));
|
||||||
|
|
||||||
var backButtonGesture = new TapGestureRecognizer();
|
var menuButtonGesture = new TapGestureRecognizer();
|
||||||
|
|
||||||
backButtonGesture.Tapped += Back;
|
menuButtonGesture.Tapped += ShowMenu;
|
||||||
backButton.GestureRecognizers.Add(backButtonGesture);
|
menuButton.GestureRecognizers.Add(menuButtonGesture);
|
||||||
|
|
||||||
|
|
||||||
qCell = new QSelectedCueCell();
|
qCell = new QSelectedCueCell();
|
||||||
@@ -85,7 +96,8 @@ namespace qController
|
|||||||
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)},
|
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)},
|
||||||
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)},
|
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)},
|
||||||
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)}
|
new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)}
|
||||||
}
|
},
|
||||||
|
Margin = new Thickness(10)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -121,9 +133,6 @@ namespace qController
|
|||||||
|
|
||||||
sLayout.Children.Add(mainG);
|
sLayout.Children.Add(mainG);
|
||||||
|
|
||||||
qCueListView = new QCueListView();
|
|
||||||
|
|
||||||
//sLayout.Children.Add(qCueListView);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,11 +141,17 @@ namespace qController
|
|||||||
qController.qClient.sendStringUDP(((QButton)sender).OSCCommand);
|
qController.qClient.sendStringUDP(((QButton)sender).OSCCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Back(object sender, EventArgs e)
|
void ShowMenu(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
App.NavigationPage.Navigation.PopModalAsync();
|
//App.NavigationPage.Navigation.PopAsync();
|
||||||
|
App.MenuIsPresented = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Back()
|
||||||
|
{
|
||||||
|
App.rootPage.MenuPage.ChangeToHome();
|
||||||
|
App.NavigationPage.Navigation.PopAsync();
|
||||||
|
}
|
||||||
public void SelectedCueUpdated(object sender, CueEventArgs e){
|
public void SelectedCueUpdated(object sender, CueEventArgs e){
|
||||||
Device.BeginInvokeOnMainThread(()=>{
|
Device.BeginInvokeOnMainThread(()=>{
|
||||||
if (e.Cue.type.Equals("Audio"))
|
if (e.Cue.type.Equals("Audio"))
|
||||||
@@ -157,10 +172,8 @@ namespace qController
|
|||||||
{
|
{
|
||||||
if(e.UpdatedWorkspace.data.Count > 0)
|
if(e.UpdatedWorkspace.data.Count > 0)
|
||||||
{
|
{
|
||||||
Device.BeginInvokeOnMainThread(() =>
|
|
||||||
{
|
App.rootPage.MenuPage.ChangeToWorkspace(e.UpdatedWorkspace);
|
||||||
qCueListView.UpdateWithWorkspace(e.UpdatedWorkspace);
|
|
||||||
});
|
|
||||||
qController.qWorkspace = e.UpdatedWorkspace;
|
qController.qWorkspace = e.UpdatedWorkspace;
|
||||||
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
|
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace qController
|
namespace qController
|
||||||
{
|
{
|
||||||
public partial class MenuPage : ContentPage
|
public partial class MenuPage : ContentPage
|
||||||
{
|
{
|
||||||
public ListView ListView { get { return listView; } }
|
|
||||||
ListView listView;
|
|
||||||
|
|
||||||
|
public ListView listView;
|
||||||
|
public ObservableCollection<MasterPageItem> items;
|
||||||
public MenuPage()
|
public MenuPage()
|
||||||
{
|
{
|
||||||
Title = "Menu";
|
Title = "Menu";
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
var items = new List<MasterPageItem>();
|
items = new ObservableCollection<MasterPageItem>();
|
||||||
|
|
||||||
items.Add(new MasterPageItem
|
items.Add(new MasterPageItem
|
||||||
{
|
{
|
||||||
Title = "Scan Network",
|
Title = "Scan Network",
|
||||||
@@ -42,33 +43,25 @@ namespace qController
|
|||||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30) });
|
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30) });
|
||||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Star });
|
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Star });
|
||||||
|
|
||||||
string qfont = "";
|
|
||||||
|
|
||||||
switch (Device.RuntimePlatform)
|
|
||||||
{
|
|
||||||
case Device.iOS:
|
|
||||||
qfont = "qfont";
|
|
||||||
break;
|
|
||||||
case Device.Android:
|
|
||||||
qfont = "qfont.ttf#qfont";
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
var icon = new Label();
|
var icon = new Label();
|
||||||
|
|
||||||
icon.FontFamily = qfont as string;
|
icon.FontFamily = App.QFont;
|
||||||
icon.SetBinding(Label.TextProperty, "Icon");
|
icon.SetBinding(Label.TextProperty, "Icon");
|
||||||
icon.HorizontalTextAlignment = TextAlignment.Center;
|
icon.HorizontalTextAlignment = TextAlignment.Center;
|
||||||
icon.VerticalTextAlignment = TextAlignment.Center;
|
icon.VerticalTextAlignment = TextAlignment.Center;
|
||||||
icon.FontSize = 20;
|
icon.FontSize = 20;
|
||||||
var label = new Label { VerticalOptions = LayoutOptions.FillAndExpand };
|
var label = new Label { VerticalOptions = LayoutOptions.FillAndExpand };
|
||||||
label.SetBinding(Label.TextProperty, "Title");
|
label.SetBinding(Label.TextProperty, "Title");
|
||||||
|
Console.WriteLine(label.Text);
|
||||||
|
if (label.Text == "Disconnect")
|
||||||
|
{
|
||||||
|
label.TextColor = Color.DarkRed;
|
||||||
|
}
|
||||||
grid.Children.Add(icon);
|
grid.Children.Add(icon);
|
||||||
grid.Children.Add(label, 1, 0);
|
grid.Children.Add(label, 1, 0);
|
||||||
return new ViewCell { View = grid };
|
return new ViewCell { View = grid };
|
||||||
}),
|
})
|
||||||
SeparatorVisibility = SeparatorVisibility.None
|
|
||||||
};
|
};
|
||||||
Content = new StackLayout
|
Content = new StackLayout
|
||||||
{
|
{
|
||||||
@@ -76,5 +69,64 @@ namespace qController
|
|||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ChangeToWorkspace(QWorkSpace workspace)
|
||||||
|
{
|
||||||
|
items.Clear();
|
||||||
|
items.Add(new MasterPageItem
|
||||||
|
{
|
||||||
|
Title = "Disconnect",
|
||||||
|
Icon = "\uE803",
|
||||||
|
Command = "disconnect"
|
||||||
|
});
|
||||||
|
foreach (var cueList in workspace.data)
|
||||||
|
{
|
||||||
|
items.Add(new MasterPageItem
|
||||||
|
{
|
||||||
|
Title = cueList.listName,
|
||||||
|
Icon = "",
|
||||||
|
Command = ""
|
||||||
|
});
|
||||||
|
foreach (var cue in cueList.cues)
|
||||||
|
{
|
||||||
|
var cueIcon = cue.getIconString();
|
||||||
|
var cueTitle = "";
|
||||||
|
|
||||||
|
if(cue.number != "")
|
||||||
|
{
|
||||||
|
cueTitle = "\t" + cue.number + " - " + cue.listName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cueTitle = "\t" + cue.listName;
|
||||||
|
}
|
||||||
|
|
||||||
|
items.Add(new MasterPageItem
|
||||||
|
{
|
||||||
|
Title = cueTitle,
|
||||||
|
Icon = cueIcon,
|
||||||
|
Command = "/select_id/" + cue.uniqueID
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ChangeToHome()
|
||||||
|
{
|
||||||
|
items.Clear();
|
||||||
|
items.Add(new MasterPageItem
|
||||||
|
{
|
||||||
|
Title = "Scan Network",
|
||||||
|
Icon = "\uE800",
|
||||||
|
Command = "scan"
|
||||||
|
});
|
||||||
|
items.Add(new MasterPageItem
|
||||||
|
{
|
||||||
|
Title = "Add Manually",
|
||||||
|
Icon = "\uE801",
|
||||||
|
Command = "add"
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace qController
|
|||||||
|
|
||||||
public partial class RootPage : MasterDetailPage
|
public partial class RootPage : MasterDetailPage
|
||||||
{
|
{
|
||||||
MenuPage MenuPage;
|
public MenuPage MenuPage;
|
||||||
public delegate void MenuItemSelectedHandler(object source, MenuEventArgs args);
|
public delegate void MenuItemSelectedHandler(object source, MenuEventArgs args);
|
||||||
public event MenuItemSelectedHandler MenuItemSelected;
|
public event MenuItemSelectedHandler MenuItemSelected;
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ namespace qController
|
|||||||
{
|
{
|
||||||
MenuPage = (MenuPage)Master;
|
MenuPage = (MenuPage)Master;
|
||||||
|
|
||||||
MenuPage.ListView.ItemSelected += OnItemSelected;
|
MenuPage.listView.ItemSelected += OnItemSelected;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
|
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
|
||||||
@@ -42,7 +42,7 @@ namespace qController
|
|||||||
var item = e.SelectedItem as MasterPageItem;
|
var item = e.SelectedItem as MasterPageItem;
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
MenuPage.ListView.SelectedItem = null;
|
MenuPage.listView.SelectedItem = null;
|
||||||
IsPresented = false;
|
IsPresented = false;
|
||||||
if (MenuItemSelected != null)
|
if (MenuItemSelected != null)
|
||||||
MenuItemSelected(this, new MenuEventArgs { Command = item.Command });
|
MenuItemSelected(this, new MenuEventArgs { Command = item.Command });
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ namespace qController
|
|||||||
|
|
||||||
private void OnMenuItemSelected(object source, MenuEventArgs args)
|
private void OnMenuItemSelected(object source, MenuEventArgs args)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Menu Item Selected: " + args.Command);
|
|
||||||
if(args.Command == "scan")
|
if(args.Command == "scan")
|
||||||
{
|
{
|
||||||
Scan();
|
Scan();
|
||||||
@@ -63,10 +62,10 @@ namespace qController
|
|||||||
|
|
||||||
lstView.BackgroundColor = Color.FromHex("4A4A4A");
|
lstView.BackgroundColor = Color.FromHex("4A4A4A");
|
||||||
BackgroundColor = Color.FromHex("4A4A4A");
|
BackgroundColor = Color.FromHex("4A4A4A");
|
||||||
var scanButtonGesture = new TapGestureRecognizer();
|
var menuButtonGesture = new TapGestureRecognizer();
|
||||||
|
|
||||||
scanButtonGesture.Tapped += showMenu;
|
menuButtonGesture.Tapped += showMenu;
|
||||||
menuButton.GestureRecognizers.Add(scanButtonGesture);
|
menuButton.GestureRecognizers.Add(menuButtonGesture);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user