From 517d5f8902fc53239f753f6ee74d873a3934c538 Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Fri, 27 Sep 2019 17:22:46 -0500 Subject: [PATCH] wip: binding for model generation --- SharpFM.App/LayoutClipPicker.xaml | 2 +- SharpFM.App/MainPage.xaml | 49 +++++++++++++++++++++---- SharpFM.App/MainPage.xaml.cs | 36 +++++++++++++----- SharpFM.Core/FileMakerClip.cs | 2 - SharpFM.Core/FileMakerClipExtensions.cs | 2 + 5 files changed, 70 insertions(+), 21 deletions(-) diff --git a/SharpFM.App/LayoutClipPicker.xaml b/SharpFM.App/LayoutClipPicker.xaml index 91efa4a..87f8e5f 100644 --- a/SharpFM.App/LayoutClipPicker.xaml +++ b/SharpFM.App/LayoutClipPicker.xaml @@ -13,6 +13,6 @@ SecondaryButtonClick="ContentDialog_SecondaryButtonClick"> - + diff --git a/SharpFM.App/MainPage.xaml b/SharpFM.App/MainPage.xaml index 9af5254..c3fe2f3 100644 --- a/SharpFM.App/MainPage.xaml +++ b/SharpFM.App/MainPage.xaml @@ -12,12 +12,22 @@ DataContext="{Binding RelativeSource={RelativeSource Self}}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> - + + + + + - + @@ -37,9 +47,12 @@ - + + + + @@ -88,5 +101,25 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SharpFM.App/MainPage.xaml.cs b/SharpFM.App/MainPage.xaml.cs index fb278b8..f408554 100644 --- a/SharpFM.App/MainPage.xaml.cs +++ b/SharpFM.App/MainPage.xaml.cs @@ -11,6 +11,8 @@ using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 @@ -22,19 +24,29 @@ namespace SharpFM.App public sealed partial class MainPage : Page { public ObservableCollection Keys { get; } - public ObservableCollection Layouts - { - get - { - return new ObservableCollection(Keys.Where(k => FileMakerClip.ClipTypes[k.ClipboardFormat] == "Layout")); - } - } + + public ObservableCollection Layouts { get; } + + public FileMakerClip SelectedLayout { get; set; } + public FileMakerClip SelectedClip { get; set; } + + public string SelectedClipAsCsharp { get; set; } public MainPage() { InitializeComponent(); Keys = new ObservableCollection(); + Layouts = new ObservableCollection(); + + Keys.CollectionChanged += (sender, e) => + { + Layouts.Clear(); + foreach (var layout in Keys.Where(k => FileMakerClip.ClipTypes[k.ClipboardFormat] == "Layout")) + { + Layouts.Add(layout); + } + }; Clipboard.ContentChanged += Clipboard_ContentChanged; } @@ -120,12 +132,11 @@ private void masterNewScript_Click(object sender, RoutedEventArgs e) private async void asModelAppBarButton_Click(object sender, RoutedEventArgs e) { // TODO: improve the UX of this whole thing. This works as a hack for proving the concept, but it could be so much better. - var data = mdv.SelectedItem as FileMakerClip; var md = new MessageDialog("Do you want to use a layout to limit the number of fields in the generated model?", "Use Layout Projection?"); // setup the command that will show the Layout picker and generate content that way - md.Commands.Add(new UICommand("Pick a Layout", new UICommandInvokedHandler(async uic => + md.Commands.Add(new UICommand("Use Layout", new UICommandInvokedHandler(async uic => { var picker = new LayoutClipPicker { @@ -135,7 +146,7 @@ private async void asModelAppBarButton_Click(object sender, RoutedEventArgs e) if (pickerResult == ContentDialogResult.Primary) { // regenerate using the layout picker - var classString = data.CreateClass(picker.DialogResult); + var classString = data.CreateClass(SelectedLayout); var dp = new DataPackage(); dp.SetText(classString); Clipboard.SetContent(dp); @@ -155,5 +166,10 @@ private async void asModelAppBarButton_Click(object sender, RoutedEventArgs e) var result = await md.ShowAsync(); } + + //private void LayoutPickerComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + //{ + // SelectedLayout = ((ComboBox)sender).SelectedItem as FileMakerClip; + //} } } \ No newline at end of file diff --git a/SharpFM.Core/FileMakerClip.cs b/SharpFM.Core/FileMakerClip.cs index ff98f21..b74d46c 100644 --- a/SharpFM.Core/FileMakerClip.cs +++ b/SharpFM.Core/FileMakerClip.cs @@ -77,8 +77,6 @@ public byte[] RawData /// public string XmlData { get; set; } - - /// /// The fields exposed through this FileMaker Clip (if its a table or a layout). /// diff --git a/SharpFM.Core/FileMakerClipExtensions.cs b/SharpFM.Core/FileMakerClipExtensions.cs index a517c64..4cd15a9 100644 --- a/SharpFM.Core/FileMakerClipExtensions.cs +++ b/SharpFM.Core/FileMakerClipExtensions.cs @@ -14,6 +14,8 @@ public static class FileMakerClipExtensions /// public static string CreateClass(this FileMakerClip _clip, FileMakerClip fieldProjectionLayout = null) { + if(_clip == null) { return string.Empty; } + var fieldProjectionList = new List(); if (fieldProjectionLayout != null && FileMakerClip.ClipTypes[fieldProjectionLayout.ClipboardFormat] == "Layout") {