From a1af487449a721aad21831e5eb352d9e565d903b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Mon, 15 Nov 2021 21:09:20 -0600 Subject: [PATCH] Add SelectBrowserWindow Binding --- .../UserSettings/CustomBrowserViewModel.cs | 30 ++++++++++ .../UserSettings/Settings.cs | 19 +++++++ Flow.Launcher/SelectBrowserWindow.xaml | 4 +- Flow.Launcher/SelectBrowserWindow.xaml.cs | 56 +++++++++++++++++-- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 5 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs new file mode 100644 index 000000000..45cd50385 --- /dev/null +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -0,0 +1,30 @@ +using Flow.Launcher.Plugin; + +namespace Flow.Launcher.Infrastructure.UserSettings +{ + public class CustomBrowserViewModel : BaseModel + { + public string Name { get; set; } + public string Path { get; set; } + public string PrivateArg { get; set; } + public bool EnablePrivate { get; set; } + public bool Editable { get; set; } = true; + + public CustomBrowserViewModel Copy() + { + return new CustomBrowserViewModel + { + Name = Name, + Path = Path, + PrivateArg = PrivateArg, + EnablePrivate = EnablePrivate, + Editable = Editable + }; + } + + } + +} + + + diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 34e86a3ed..65c99d00b 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -82,6 +82,25 @@ namespace Flow.Launcher.Infrastructure.UserSettings } }; + public int CustomBrowserIndex { get; set; } = 0; + + + public CustomBrowserViewModel CustomBrowser + { + get => CustomBrowserList[CustomBrowserIndex]; + set => CustomBrowserList[CustomBrowserIndex] = value; + } + + public List CustomBrowserList { get; set; } = new() + { + new() + { + Name = "Default", + Path = "", + Editable = false + } + }; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index 9a435c996..ad471e436 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -58,8 +58,8 @@ Margin="14,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" - ItemsSource="{Binding CustomExplorers}" - SelectedIndex="{Binding SelectedCustomExplorerIndex}"> + ItemsSource="{Binding CustomBrowsers}" + SelectedIndex="{Binding SelectedCustomBrowserIndex}"> diff --git a/Flow.Launcher/SelectBrowserWindow.xaml.cs b/Flow.Launcher/SelectBrowserWindow.xaml.cs index 1f79b463b..c397d81da 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml.cs +++ b/Flow.Launcher/SelectBrowserWindow.xaml.cs @@ -1,5 +1,9 @@ -using System; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.ViewModel; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -17,29 +21,71 @@ namespace Flow.Launcher /// /// SelectBrowserWindow.xaml에 대한 상호 작용 논리 /// - public partial class SelectBrowserWindow : Window + public partial class SelectBrowserWindow : Window, INotifyPropertyChanged { - public SelectBrowserWindow() + private int selectedCustomExplorerIndex; + + public event PropertyChangedEventHandler PropertyChanged; + + public Settings Settings { get; } + + public int SelectedCustomBrowserIndex { + get => selectedCustomExplorerIndex; set + { + selectedCustomExplorerIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + } + } + public ObservableCollection CustomBrowsers { get; set; } + + public CustomBrowserViewModel CustomExplorer => CustomBrowsers[SelectedCustomBrowserIndex]; + public SelectBrowserWindow(Settings settings) + { + Settings = settings; + CustomBrowsers = new ObservableCollection(Settings.CustomBrowserList.Select(x => x.Copy())); + SelectedCustomBrowserIndex = Settings.CustomExplorerIndex; InitializeComponent(); } private void btnCancel_Click(object sender, RoutedEventArgs e) { + Close(); } private void btnDone_Click(object sender, RoutedEventArgs e) { + Settings.CustomBrowserList = CustomBrowsers.ToList(); + Settings.CustomBrowserIndex = SelectedCustomBrowserIndex; + Close(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { + CustomBrowsers.Add(new() + { + Name = "New Profile" + }); + SelectedCustomBrowserIndex = CustomBrowsers.Count - 1; } private void btnDelete_Click(object sender, RoutedEventArgs e) { + CustomBrowsers.RemoveAt(SelectedCustomBrowserIndex--); + } + + private void btnBrowseFile_Click(object sender, RoutedEventArgs e) + { + Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); + Nullable result = dlg.ShowDialog(); + + if (result == true) + { + TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); + path.Text = dlg.FileName; + path.Focus(); + ((Button)sender).Focus(); + } } } - - } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index fbee81c3f..583f03650 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -123,7 +123,7 @@ namespace Flow.Launcher private void OnSelectDefaultBrowserClick(object sender, RoutedEventArgs e) { - SelectBrowserWindow test = new SelectBrowserWindow(); + SelectBrowserWindow test = new SelectBrowserWindow(settings); test.ShowDialog(); }