From 54965a961f17cc0b873dfde3a15d89f2423ed70a Mon Sep 17 00:00:00 2001 From: jwetzell Date: Fri, 12 Apr 2019 11:02:11 -0500 Subject: [PATCH] Begin UI Redesign, switch to icon font --- Droid/Assets/qfont.ttf | Bin 0 -> 6536 bytes Droid/qController.Droid.csproj | 3 + .../hamburger.imageset/Contents.json | 95 ++++++++++++++++++ .../hamburger.imageset/hamburger@2x-1.png | Bin 0 -> 1268 bytes .../hamburger.imageset/hamburger@2x.png | Bin 0 -> 1268 bytes iOS/Info.plist | 6 +- iOS/Resources/qfont.ttf | Bin 0 -> 6536 bytes iOS/qController.iOS.csproj | 7 ++ qController.Standard/.DS_Store | Bin 8196 -> 10244 bytes qController.Standard/App.xaml | 6 +- qController.Standard/App.xaml.cs | 26 ++++- .../Classes/Cell/QCueListView.cs | 50 +++++++++ .../Classes/Cell/QInstanceCell.cs | 41 ++++++-- .../Classes/Cell/QSelectedCueCell.cs | 4 +- .../Classes/Cell/QSelectedCueOptionsCell.cs | 6 +- .../Classes/Communication/QController.cs | 1 + .../Pages/ControlPage.xaml.cs | 14 ++- qController.Standard/Pages/HomePage.xaml | 5 + qController.Standard/Pages/HomePage.xaml.cs | 15 +++ qController.Standard/Pages/MasterPageItem.cs | 12 +++ qController.Standard/Pages/MenuPage.xaml | 5 + qController.Standard/Pages/MenuPage.xaml.cs | 80 +++++++++++++++ qController.Standard/Pages/RootPage.xaml | 4 + qController.Standard/Pages/RootPage.xaml.cs | 52 ++++++++++ .../Pages/RootPageDetail.xaml | 6 ++ .../Pages/RootPageDetail.xaml.cs | 20 ++++ .../Pages/RootPageMaster.xaml | 32 ++++++ .../Pages/RootPageMaster.xaml.cs | 56 +++++++++++ .../Pages/RootPageMenuItem.cs | 20 ++++ ...ntrollerPage.xaml => qConnectionPage.xaml} | 7 +- ...erPage.xaml.cs => qConnectionPage.xaml.cs} | 48 +++++---- qController.Standard/qController.csproj | 10 ++ 32 files changed, 591 insertions(+), 40 deletions(-) create mode 100755 Droid/Assets/qfont.ttf create mode 100644 iOS/Assets.xcassets/hamburger.imageset/Contents.json create mode 100644 iOS/Assets.xcassets/hamburger.imageset/hamburger@2x-1.png create mode 100644 iOS/Assets.xcassets/hamburger.imageset/hamburger@2x.png create mode 100755 iOS/Resources/qfont.ttf create mode 100644 qController.Standard/Classes/Cell/QCueListView.cs create mode 100644 qController.Standard/Pages/HomePage.xaml create mode 100644 qController.Standard/Pages/HomePage.xaml.cs create mode 100644 qController.Standard/Pages/MasterPageItem.cs create mode 100644 qController.Standard/Pages/MenuPage.xaml create mode 100644 qController.Standard/Pages/MenuPage.xaml.cs create mode 100644 qController.Standard/Pages/RootPage.xaml create mode 100644 qController.Standard/Pages/RootPage.xaml.cs create mode 100644 qController.Standard/Pages/RootPageDetail.xaml create mode 100644 qController.Standard/Pages/RootPageDetail.xaml.cs create mode 100644 qController.Standard/Pages/RootPageMaster.xaml create mode 100644 qController.Standard/Pages/RootPageMaster.xaml.cs create mode 100644 qController.Standard/Pages/RootPageMenuItem.cs rename qController.Standard/Pages/{qControllerPage.xaml => qConnectionPage.xaml} (68%) rename qController.Standard/Pages/{qControllerPage.xaml.cs => qConnectionPage.xaml.cs} (77%) diff --git a/Droid/Assets/qfont.ttf b/Droid/Assets/qfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..3e00f096d14c71df506933c88654fad7bd4e23e0 GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/Droid/qController.Droid.csproj b/Droid/qController.Droid.csproj index 7245597..a352c81 100644 --- a/Droid/qController.Droid.csproj +++ b/Droid/qController.Droid.csproj @@ -198,6 +198,9 @@ qController + + + diff --git a/iOS/Assets.xcassets/hamburger.imageset/Contents.json b/iOS/Assets.xcassets/hamburger.imageset/Contents.json new file mode 100644 index 0000000..e16200a --- /dev/null +++ b/iOS/Assets.xcassets/hamburger.imageset/Contents.json @@ -0,0 +1,95 @@ +{ + "images": [ + { + "idiom": "universal" + }, + { + "filename": "hamburger@2x-1.png", + "scale": "1x", + "idiom": "universal" + }, + { + "filename": "hamburger@2x.png", + "scale": "2x", + "idiom": "universal" + }, + { + "scale": "3x", + "idiom": "universal" + }, + { + "idiom": "iphone" + }, + { + "scale": "1x", + "idiom": "iphone" + }, + { + "scale": "2x", + "idiom": "iphone" + }, + { + "subtype": "retina4", + "scale": "2x", + "idiom": "iphone" + }, + { + "scale": "3x", + "idiom": "iphone" + }, + { + "idiom": "ipad" + }, + { + "scale": "1x", + "idiom": "ipad" + }, + { + "scale": "2x", + "idiom": "ipad" + }, + { + "idiom": "watch" + }, + { + "scale": "2x", + "idiom": "watch" + }, + { + "screenWidth": "{130,145}", + "scale": "2x", + "idiom": "watch" + }, + { + "screenWidth": "{146,165}", + "scale": "2x", + "idiom": "watch" + }, + { + "idiom": "mac" + }, + { + "scale": "1x", + "idiom": "mac" + }, + { + "scale": "2x", + "idiom": "mac" + }, + { + "idiom": "car" + }, + { + "scale": "2x", + "idiom": "car" + }, + { + "scale": "3x", + "idiom": "car" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/iOS/Assets.xcassets/hamburger.imageset/hamburger@2x-1.png b/iOS/Assets.xcassets/hamburger.imageset/hamburger@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..452885bd0703282eb41bd61fd5156fcd2f414578 GIT binary patch literal 1268 zcmZ`(J#5oJ6n0UI+El5kPE|q37{pR)$4=8WmSd8}w5cE^v_VQ>pssyso!UNQUleyi z&<=)5b)pE&J}?`@Z|$d-rp@v^XD+ zjm0R6iZ2wDCEOmx-?9F~_;BU1Lj|ZGW)uX7Px8&=&KR$E> zV@?|73aS*(iyE|8Rfns9^(_aZDN6E1+_eBwY2Pw!PxLcPfDmz?m^p?HAZR1QREi}! z4_!c~*hx0Q$T6CxC0DPBOUhh}jz<}09U({LxMs7-Hj^xL*El|%PIC!?6NCwjnD91j zr1}%KcOsl*Zyp7Bnrk@7fHqC$RaapHWf+DC?LT3h$f&iIY_F9TPLLxWj%O2GHyZGb z18Br^AWhfyvvL})8RVpE958_eY~*1c-&GFRcAxlPkiP1KVnGqZ+$0jYxCA_CHb@CB z*#?pYDM+Z(+^$H-%0tU>f#+eGoN7^`woZJdEhDF=T7;;vlW@T`aHcAWOXgensI3!U z?IsX4MhK+zV#)A#z8M&i0UI*EB`LU-9wH9!IjC=pX9I*_ThWs-@gOvDi( z>YC^^R_j1Rk=4R$7VQ05b&ZRdC9W%4!aG4MLfxosDk=i9kl<4ypAZw%G%t|OBwn=+ zOe6y0$-6*B&@Dq~%0U(u8PZ7>zack@Xptq3oTJFO3J+~y#iv$|VdmZqAjhh2Ue@uY zP+L%P~Z literal 0 HcmV?d00001 diff --git a/iOS/Assets.xcassets/hamburger.imageset/hamburger@2x.png b/iOS/Assets.xcassets/hamburger.imageset/hamburger@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..452885bd0703282eb41bd61fd5156fcd2f414578 GIT binary patch literal 1268 zcmZ`(J#5oJ6n0UI+El5kPE|q37{pR)$4=8WmSd8}w5cE^v_VQ>pssyso!UNQUleyi z&<=)5b)pE&J}?`@Z|$d-rp@v^XD+ zjm0R6iZ2wDCEOmx-?9F~_;BU1Lj|ZGW)uX7Px8&=&KR$E> zV@?|73aS*(iyE|8Rfns9^(_aZDN6E1+_eBwY2Pw!PxLcPfDmz?m^p?HAZR1QREi}! z4_!c~*hx0Q$T6CxC0DPBOUhh}jz<}09U({LxMs7-Hj^xL*El|%PIC!?6NCwjnD91j zr1}%KcOsl*Zyp7Bnrk@7fHqC$RaapHWf+DC?LT3h$f&iIY_F9TPLLxWj%O2GHyZGb z18Br^AWhfyvvL})8RVpE958_eY~*1c-&GFRcAxlPkiP1KVnGqZ+$0jYxCA_CHb@CB z*#?pYDM+Z(+^$H-%0tU>f#+eGoN7^`woZJdEhDF=T7;;vlW@T`aHcAWOXgensI3!U z?IsX4MhK+zV#)A#z8M&i0UI*EB`LU-9wH9!IjC=pX9I*_ThWs-@gOvDi( z>YC^^R_j1Rk=4R$7VQ05b&ZRdC9W%4!aG4MLfxosDk=i9kl<4ypAZw%G%t|OBwn=+ zOe6y0$-6*B&@Dq~%0U(u8PZ7>zack@Xptq3oTJFO3J+~y#iv$|VdmZqAjhh2Ue@uY zP+L%P~Z literal 0 HcmV?d00001 diff --git a/iOS/Info.plist b/iOS/Info.plist index 8a16236..53b5aae 100644 --- a/iOS/Info.plist +++ b/iOS/Info.plist @@ -36,10 +36,14 @@ XSAppIconAssets Assets.xcassets/AppIcon.appiconset CFBundleShortVersionString - 2.0.2 + 2.0.3 CFBundleVersion 1.0 ITSAppUsesNonExemptEncryption + UIAppFonts + + qfont.ttf + diff --git a/iOS/Resources/qfont.ttf b/iOS/Resources/qfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..3e00f096d14c71df506933c88654fad7bd4e23e0 GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/iOS/qController.iOS.csproj b/iOS/qController.iOS.csproj index 6ea7d34..ff35873 100644 --- a/iOS/qController.iOS.csproj +++ b/iOS/qController.iOS.csproj @@ -166,6 +166,9 @@ + + + @@ -174,6 +177,7 @@ + @@ -193,6 +197,9 @@ qController + + + diff --git a/qController.Standard/.DS_Store b/qController.Standard/.DS_Store index 64bb560b3e574157c2e243485e2fa17b9a5969c5..ff126f00f78e86620d44fb207382884f7c82781e 100644 GIT binary patch delta 392 zcmZp1XbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~50$jG-bU^hP_-(((vOmSw0B!*0e zJkOl`7NScv>!2m>0E|BTnyjJ7{BQ1Tv0rNKi5u9Q@ delta 117 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8E20o2aMA$gweCH~&OEw#kA5DU)Xl@Nd2$ z@R4=$AMv=2WhRV*%s{0;Ai)hJTtT`v7Jg@*%&!v2!3Z&nVRAgr)XjmS6^sx)hKvBI CwHlQG diff --git a/qController.Standard/App.xaml b/qController.Standard/App.xaml index 3602c5b..b1b4df3 100644 --- a/qController.Standard/App.xaml +++ b/qController.Standard/App.xaml @@ -1,6 +1,10 @@ - + + + + + diff --git a/qController.Standard/App.xaml.cs b/qController.Standard/App.xaml.cs index 1f17213..d7dbaa7 100644 --- a/qController.Standard/App.xaml.cs +++ b/qController.Standard/App.xaml.cs @@ -5,12 +5,34 @@ namespace qController public partial class App : Application { public static INavigation iNav; + public static NavigationPage NavigationPage { get; private set; } + public static RootPage rootPage; + + public static bool MenuIsPresented + { + get + { + return rootPage.IsPresented; + } + set + { + rootPage.IsPresented = value; + } + } + public App() { InitializeComponent(); - MainPage = new NavigationPage(new qControllerPage()); - iNav = MainPage.Navigation; + /*MainPage = new NavigationPage(new QConnectionPage()); + iNav = MainPage.Navigation;*/ + var menuPage = new MenuPage(); + rootPage = new RootPage(); + NavigationPage = new NavigationPage(new QConnectionPage()); + rootPage.Master = menuPage; + rootPage.Detail = NavigationPage; + MainPage = rootPage; + rootPage.Init(); } protected override void OnStart() diff --git a/qController.Standard/Classes/Cell/QCueListView.cs b/qController.Standard/Classes/Cell/QCueListView.cs new file mode 100644 index 0000000..239efd2 --- /dev/null +++ b/qController.Standard/Classes/Cell/QCueListView.cs @@ -0,0 +1,50 @@ +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 cueLists = new List(); + 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(); + } + } +} \ No newline at end of file diff --git a/qController.Standard/Classes/Cell/QInstanceCell.cs b/qController.Standard/Classes/Cell/QInstanceCell.cs index 4b5c553..28e6214 100644 --- a/qController.Standard/Classes/Cell/QInstanceCell.cs +++ b/qController.Standard/Classes/Cell/QInstanceCell.cs @@ -14,16 +14,20 @@ namespace qController Image connectButton = new Image(); Image deleteButton = new Image(); + Label connectLabel = new Label(); + Label deleteLabel = new Label(); + var connectTapGesture = new TapGestureRecognizer(); var deleteTapGesture = new TapGestureRecognizer(); connectTapGesture.Tapped += Connect; connectButton.GestureRecognizers.Add(connectTapGesture); - + connectLabel.GestureRecognizers.Add(connectTapGesture); deleteTapGesture.Tapped += Delete; deleteButton.GestureRecognizers.Add(deleteTapGesture); + deleteLabel.GestureRecognizers.Add(deleteTapGesture); InitItems(); @@ -50,10 +54,10 @@ namespace qController mainG.Children.Add(nameLabel, 1, 0); mainG.Children.Add(addressLabel,1,1); - mainG.Children.Add(connectButton,2,0); - Grid.SetRowSpan(connectButton,2); - mainG.Children.Add(deleteButton, 0, 0); - Grid.SetRowSpan(deleteButton,2); + mainG.Children.Add(connectLabel,2,0); + Grid.SetRowSpan(connectLabel,2); + mainG.Children.Add(deleteLabel, 0, 0); + Grid.SetRowSpan(deleteLabel,2); Frame f = new Frame { @@ -87,7 +91,32 @@ namespace qController addressLabel.HorizontalTextAlignment = TextAlignment.Center; addressLabel.VerticalTextAlignment = TextAlignment.Start; + connectLabel.HorizontalOptions = LayoutOptions.CenterAndExpand; + connectLabel.VerticalOptions = LayoutOptions.CenterAndExpand; + connectLabel.Text = "\uF1EB"; + connectLabel.FontSize = 40; + connectLabel.TextColor = Color.LimeGreen; + deleteLabel.HorizontalOptions = LayoutOptions.CenterAndExpand; + deleteLabel.VerticalOptions = LayoutOptions.CenterAndExpand; + deleteLabel.Text = "\uE802"; + deleteLabel.FontSize = 40; + deleteLabel.TextColor = Color.Red; + + string qfont = ""; + + switch (Device.RuntimePlatform) + { + case Device.iOS: + qfont = "qfont"; + break; + case Device.Android: + qfont = "qfont.ttf#qfont"; + break; + + } + connectLabel.FontFamily = qfont; + deleteLabel.FontFamily = qfont; } @@ -101,7 +130,7 @@ namespace qController void Connect(object sender, EventArgs e) { - App.iNav.PushModalAsync(new NavigationPage(new ControlPage(nameLabel.Text,addressLabel.Text))); + App.NavigationPage.Navigation.PushModalAsync(new NavigationPage(new ControlPage(nameLabel.Text,addressLabel.Text))); Console.WriteLine("Connect To " + nameLabel.Text + " Pressed"); diff --git a/qController.Standard/Classes/Cell/QSelectedCueCell.cs b/qController.Standard/Classes/Cell/QSelectedCueCell.cs index 9a4ce61..093ab27 100644 --- a/qController.Standard/Classes/Cell/QSelectedCueCell.cs +++ b/qController.Standard/Classes/Cell/QSelectedCueCell.cs @@ -20,8 +20,8 @@ namespace qController Padding = new Thickness(0), RowDefinitions = { - new RowDefinition{Height = GridLength.Auto}, - new RowDefinition{Height = GridLength.Auto} + new RowDefinition{Height = GridLength.Star}, + new RowDefinition{Height = GridLength.Star} }, ColumnDefinitions = { diff --git a/qController.Standard/Classes/Cell/QSelectedCueOptionsCell.cs b/qController.Standard/Classes/Cell/QSelectedCueOptionsCell.cs index 6b1a67d..0dd2093 100644 --- a/qController.Standard/Classes/Cell/QSelectedCueOptionsCell.cs +++ b/qController.Standard/Classes/Cell/QSelectedCueOptionsCell.cs @@ -40,9 +40,9 @@ namespace qController { Padding = new Thickness(0), RowDefinitions = { - new RowDefinition{Height = GridLength.Auto}, - new RowDefinition{Height = GridLength.Auto}, - new RowDefinition{Height = GridLength.Auto} + new RowDefinition{Height = GridLength.Star}, + new RowDefinition{Height = GridLength.Star}, + new RowDefinition{Height = GridLength.Star} }, ColumnDefinitions = { new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)}, diff --git a/qController.Standard/Classes/Communication/QController.cs b/qController.Standard/Classes/Communication/QController.cs index b0de85e..0370943 100644 --- a/qController.Standard/Classes/Communication/QController.cs +++ b/qController.Standard/Classes/Communication/QController.cs @@ -25,6 +25,7 @@ namespace qController qClient.qParser.PlaybackPositionUpdated += this.OnPlaybackPositionUpdated; qClient.qParser.CueInfoUpdated += this.OnCueUpdateReceived; qClient.sendArgsUDP("/updates", 1); + qClient.sendArgsUDP("/updates", 1); qClient.sendAndReceiveString("/cueLists"); } diff --git a/qController.Standard/Pages/ControlPage.xaml.cs b/qController.Standard/Pages/ControlPage.xaml.cs index 6f19182..44e1b12 100644 --- a/qController.Standard/Pages/ControlPage.xaml.cs +++ b/qController.Standard/Pages/ControlPage.xaml.cs @@ -11,7 +11,9 @@ namespace qController Label instanceName = new Label(); QSelectedCueCell qCell; QSelectedCueOptionsCell qSelectedCueOptions; + QCueListView qCueListView; Grid mainG; + ListView listView; public ControlPage(string name, string address) { InitializeComponent(); @@ -44,8 +46,8 @@ namespace qController switch (Device.RuntimePlatform) { case Device.iOS: - backButton.Margin = new Thickness(20, 45, 20, 10); - instanceName.Margin = new Thickness(20, 45, 20, 10); + backButton.Margin = new Thickness(20, 35, 20, 10); + instanceName.Margin = new Thickness(20, 35, 20, 10); break; } @@ -119,6 +121,10 @@ namespace qController sLayout.Children.Add(mainG); + qCueListView = new QCueListView(); + + //sLayout.Children.Add(qCueListView); + } void sendOSC(object sender, EventArgs e) @@ -128,7 +134,7 @@ namespace qController void Back(object sender, EventArgs e) { - App.iNav.PopModalAsync(); + App.NavigationPage.Navigation.PopModalAsync(); } public void SelectedCueUpdated(object sender, CueEventArgs e){ @@ -153,7 +159,7 @@ namespace qController { Device.BeginInvokeOnMainThread(() => { - // + qCueListView.UpdateWithWorkspace(e.UpdatedWorkspace); }); qController.qWorkspace = e.UpdatedWorkspace; Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id); diff --git a/qController.Standard/Pages/HomePage.xaml b/qController.Standard/Pages/HomePage.xaml new file mode 100644 index 0000000..61c14a2 --- /dev/null +++ b/qController.Standard/Pages/HomePage.xaml @@ -0,0 +1,5 @@ + + + + + diff --git a/qController.Standard/Pages/HomePage.xaml.cs b/qController.Standard/Pages/HomePage.xaml.cs new file mode 100644 index 0000000..39c8f5a --- /dev/null +++ b/qController.Standard/Pages/HomePage.xaml.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +using Xamarin.Forms; + +namespace qController +{ + public partial class HomePage : ContentPage + { + public HomePage() + { + InitializeComponent(); + } + } +} diff --git a/qController.Standard/Pages/MasterPageItem.cs b/qController.Standard/Pages/MasterPageItem.cs new file mode 100644 index 0000000..5a0e07e --- /dev/null +++ b/qController.Standard/Pages/MasterPageItem.cs @@ -0,0 +1,12 @@ +using System; + +namespace qController +{ + public class MasterPageItem + { + public string Title { get; set; } + public string Icon { get; set; } + public string Command { get; set; } + } +} + diff --git a/qController.Standard/Pages/MenuPage.xaml b/qController.Standard/Pages/MenuPage.xaml new file mode 100644 index 0000000..a7aa814 --- /dev/null +++ b/qController.Standard/Pages/MenuPage.xaml @@ -0,0 +1,5 @@ + + + + + diff --git a/qController.Standard/Pages/MenuPage.xaml.cs b/qController.Standard/Pages/MenuPage.xaml.cs new file mode 100644 index 0000000..6d53b04 --- /dev/null +++ b/qController.Standard/Pages/MenuPage.xaml.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; + +using Xamarin.Forms; + +namespace qController +{ + public partial class MenuPage : ContentPage + { + public ListView ListView { get { return listView; } } + ListView listView; + + public MenuPage() + { + Title = "Menu"; + InitializeComponent(); + var items = new List(); + items.Add(new MasterPageItem + { + Title = "Scan Network", + Icon = "\uE800", + Command = "scan" + }); + items.Add(new MasterPageItem + { + Title = "Add Manually", + Icon = "\uE801", + Command = "add" + }); + /*items.Add(new MasterPageItem + { + Title = "Open Link", + Icon = "\uF0C9", + Command = "open_link" + });*/ + listView = new ListView + { + ItemsSource = items, + ItemTemplate = new DataTemplate(() => + { + var grid = new Grid { Padding = new Thickness(5, 10) }; + grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30) }); + 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(); + + icon.FontFamily = qfont as string; + icon.SetBinding(Label.TextProperty, "Icon"); + icon.HorizontalTextAlignment = TextAlignment.Center; + icon.VerticalTextAlignment = TextAlignment.Center; + icon.FontSize = 20; + var label = new Label { VerticalOptions = LayoutOptions.FillAndExpand }; + label.SetBinding(Label.TextProperty, "Title"); + + grid.Children.Add(icon); + grid.Children.Add(label, 1, 0); + return new ViewCell { View = grid }; + }), + SeparatorVisibility = SeparatorVisibility.None + }; + Content = new StackLayout + { + Children = { listView } + }; + + } + } +} diff --git a/qController.Standard/Pages/RootPage.xaml b/qController.Standard/Pages/RootPage.xaml new file mode 100644 index 0000000..d75321b --- /dev/null +++ b/qController.Standard/Pages/RootPage.xaml @@ -0,0 +1,4 @@ + + + + diff --git a/qController.Standard/Pages/RootPage.xaml.cs b/qController.Standard/Pages/RootPage.xaml.cs new file mode 100644 index 0000000..c2124cd --- /dev/null +++ b/qController.Standard/Pages/RootPage.xaml.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xamarin.Forms; +using Xamarin.Forms.Xaml; + +namespace qController +{ + public class MenuEventArgs : EventArgs + { + public string Command + { + get; + set; + } + } + + public partial class RootPage : MasterDetailPage + { + MenuPage MenuPage; + public delegate void MenuItemSelectedHandler(object source, MenuEventArgs args); + public event MenuItemSelectedHandler MenuItemSelected; + + public RootPage() + { + InitializeComponent(); + + } + + public void Init() + { + MenuPage = (MenuPage)Master; + + MenuPage.ListView.ItemSelected += OnItemSelected; + } + + void OnItemSelected(object sender, SelectedItemChangedEventArgs e) + { + var item = e.SelectedItem as MasterPageItem; + if (item != null) + { + MenuPage.ListView.SelectedItem = null; + IsPresented = false; + if (MenuItemSelected != null) + MenuItemSelected(this, new MenuEventArgs { Command = item.Command }); + } + } + } +} diff --git a/qController.Standard/Pages/RootPageDetail.xaml b/qController.Standard/Pages/RootPageDetail.xaml new file mode 100644 index 0000000..787eb70 --- /dev/null +++ b/qController.Standard/Pages/RootPageDetail.xaml @@ -0,0 +1,6 @@ + + + + + diff --git a/qController.Standard/Pages/RootPageDetail.xaml.cs b/qController.Standard/Pages/RootPageDetail.xaml.cs new file mode 100644 index 0000000..141c122 --- /dev/null +++ b/qController.Standard/Pages/RootPageDetail.xaml.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xamarin.Forms; +using Xamarin.Forms.Xaml; + +namespace qController.Pages +{ + [XamlCompilation(XamlCompilationOptions.Compile)] + public partial class RootPageDetail : ContentPage + { + public RootPageDetail() + { + InitializeComponent(); + } + } +} diff --git a/qController.Standard/Pages/RootPageMaster.xaml b/qController.Standard/Pages/RootPageMaster.xaml new file mode 100644 index 0000000..d52a380 --- /dev/null +++ b/qController.Standard/Pages/RootPageMaster.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qController.Standard/Pages/RootPageMaster.xaml.cs b/qController.Standard/Pages/RootPageMaster.xaml.cs new file mode 100644 index 0000000..e378e9a --- /dev/null +++ b/qController.Standard/Pages/RootPageMaster.xaml.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +using Xamarin.Forms; +using Xamarin.Forms.Xaml; + +namespace qController.Pages +{ + [XamlCompilation(XamlCompilationOptions.Compile)] + public partial class RootPageMaster : ContentPage + { + public ListView ListView; + + public RootPageMaster() + { + InitializeComponent(); + + BindingContext = new RootPageMasterViewModel(); + ListView = MenuItemsListView; + } + + class RootPageMasterViewModel : INotifyPropertyChanged + { + public ObservableCollection MenuItems { get; set; } + + public RootPageMasterViewModel() + { + MenuItems = new ObservableCollection(new[] + { + new RootPageMenuItem { Id = 0, Title = "Page 1" }, + new RootPageMenuItem { Id = 1, Title = "Page 2" }, + new RootPageMenuItem { Id = 2, Title = "Page 3" }, + new RootPageMenuItem { Id = 3, Title = "Page 4" }, + new RootPageMenuItem { Id = 4, Title = "Page 5" }, + }); + } + + #region INotifyPropertyChanged Implementation + public event PropertyChangedEventHandler PropertyChanged; + void OnPropertyChanged([CallerMemberName] string propertyName = "") + { + if (PropertyChanged == null) + return; + + PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + #endregion + } + } +} diff --git a/qController.Standard/Pages/RootPageMenuItem.cs b/qController.Standard/Pages/RootPageMenuItem.cs new file mode 100644 index 0000000..469ae3f --- /dev/null +++ b/qController.Standard/Pages/RootPageMenuItem.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace qController.Pages +{ + public class RootPageMenuItem + { + public RootPageMenuItem() + { + TargetType = typeof(RootPageDetail); + } + public int Id { get; set; } + public string Title { get; set; } + + public Type TargetType { get; set; } + } +} diff --git a/qController.Standard/Pages/qControllerPage.xaml b/qController.Standard/Pages/qConnectionPage.xaml similarity index 68% rename from qController.Standard/Pages/qControllerPage.xaml rename to qController.Standard/Pages/qConnectionPage.xaml index f33e219..cc93395 100644 --- a/qController.Standard/Pages/qControllerPage.xaml +++ b/qController.Standard/Pages/qConnectionPage.xaml @@ -1,6 +1,6 @@ - + @@ -10,10 +10,11 @@ - - + + \ No newline at end of file diff --git a/qController.Standard/Pages/qControllerPage.xaml.cs b/qController.Standard/Pages/qConnectionPage.xaml.cs similarity index 77% rename from qController.Standard/Pages/qControllerPage.xaml.cs rename to qController.Standard/Pages/qConnectionPage.xaml.cs index 2093aef..55133ce 100644 --- a/qController.Standard/Pages/qControllerPage.xaml.cs +++ b/qController.Standard/Pages/qConnectionPage.xaml.cs @@ -9,13 +9,29 @@ using System.Collections.Generic; namespace qController { - public partial class qControllerPage : ContentPage + public partial class QConnectionPage : ContentPage { - public qControllerPage() + public QConnectionPage() { InitializeComponent(); InitGUI(); + App.rootPage.MenuItemSelected += OnMenuItemSelected; + } + private void OnMenuItemSelected(object source, MenuEventArgs args) + { + Console.WriteLine("Menu Item Selected: " + args.Command); + if(args.Command == "scan") + { + Scan(); + } + else if(args.Command == "add") + { + AddWorkspace(); + }else if(args.Command == "open_link") + { + Device.OpenUri(new Uri("http://www.example.com")); + } } private void InitGUI() @@ -38,31 +54,23 @@ namespace qController switch (Device.RuntimePlatform) { case Device.iOS: - scanButton.Margin = new Thickness(20, 45, 20, 10); - addButton.Margin = new Thickness(20, 45, 20, 10); + menuButton.Margin = new Thickness(20, 35, 20, 10); break; } - addButton.Source = ImageSource.FromFile("add"); - scanButton.Source = ImageSource.FromFile("scan"); + menuButton.Text = "\uF0C9"; lstView.BackgroundColor = Color.FromHex("4A4A4A"); BackgroundColor = Color.FromHex("4A4A4A"); var scanButtonGesture = new TapGestureRecognizer(); - scanButtonGesture.Tapped += Scan; - scanButton.GestureRecognizers.Add(scanButtonGesture); + scanButtonGesture.Tapped += showMenu; + menuButton.GestureRecognizers.Add(scanButtonGesture); - - - var addButtonGesture = new TapGestureRecognizer(); - - addButtonGesture.Tapped += AddWorkspace; - addButton.GestureRecognizers.Add(addButtonGesture); } - void AddWorkspace(object sender, EventArgs e){ + void AddWorkspace(){ UserDialogs.Instance.Prompt(new PromptConfig { @@ -97,12 +105,11 @@ namespace qController } - async void Scan(object sender, EventArgs e){ + async void Scan(){ bool workspacesFound = false; showToast("Scanning for Workspaces..."); - - Console.WriteLine("Begin Scanning"); + IReadOnlyList results = await ZeroconfResolver.ResolveAsync("_qlab._udp.local.",TimeSpan.FromSeconds(3)); if(results != null){ foreach (var result in results) @@ -123,6 +130,11 @@ namespace qController } } + void showMenu(object sender, EventArgs e) + { + App.MenuIsPresented = true; + } + void showToast(string message) { var toastConfig = new ToastConfig(message); diff --git a/qController.Standard/qController.csproj b/qController.Standard/qController.csproj index facc7d0..a347457 100644 --- a/qController.Standard/qController.csproj +++ b/qController.Standard/qController.csproj @@ -38,6 +38,11 @@ + + + + + @@ -85,4 +90,9 @@ + + + + +