diff --git a/App/Keychain.csproj b/App/Keychain.csproj index 1f637bd..493b90e 100644 --- a/App/Keychain.csproj +++ b/App/Keychain.csproj @@ -14,6 +14,7 @@ + diff --git a/App/UI/AddShortcutWindow/AddShortcutWindow.cs b/App/UI/AddShortcutWindow/AddShortcutWindow.cs new file mode 100644 index 0000000..eef1e29 --- /dev/null +++ b/App/UI/AddShortcutWindow/AddShortcutWindow.cs @@ -0,0 +1,41 @@ +using Adw; + +namespace Keychain.UI; + +public class AddShortcutWindow +{ + public Window Window { get; } + private EntryRow? pathEntry; + private Gtk.Button? browseButton; + + public AddShortcutWindow() + { + var builder = new Gtk.Builder("Keychain.UI.AddShortcutWindow.AddShortcutWindow.xml"); + + var window = builder.GetObject("add_shortcut_window") as Window; + if (window == null) + { + throw new Exception("Failed to load embedded resource AddShortcutWindow.xml"); + } + Window = window; + + browseButton = builder.GetObject("folder_browse_button") as Gtk.Button; + if (browseButton == null) + { + throw new Exception("Failed to load UI element with ID: folder_browse_button"); + } + browseButton.OnClicked += BrowseFolder; + } + + private async void BrowseFolder(object sender, EventArgs e) + { + var fileDialog = new Gtk.FileDialog(); + var selectedFolder = await fileDialog.SelectFolderAsync(Window); + + if (selectedFolder != null) + { + var buttonContent = (ButtonContent)browseButton.Child; + buttonContent.Label = selectedFolder.GetPath(); + } + } +} diff --git a/App/UI/AddShortcutWindow/AddShortcutWindow.xml b/App/UI/AddShortcutWindow/AddShortcutWindow.xml new file mode 100644 index 0000000..a50029c --- /dev/null +++ b/App/UI/AddShortcutWindow/AddShortcutWindow.xml @@ -0,0 +1,87 @@ + + + + 350 + 300 + 500 + 600 + + + max-width: 500sp + + + + + + + + + + + + + Add New Store + + + Name + + + + + Icon + + + center + + + emoji-symbols-symbolic + + + + + + + + + Location + + + horizontal + 6 + + + center + + + document-open-symbolic + Browse + + + + + + + center + 0 + + + + user-trash-symbolic + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App/UI/MainWindow/MainWindow.cs b/App/UI/MainWindow/MainWindow.cs index 715248f..cd3b711 100644 --- a/App/UI/MainWindow/MainWindow.cs +++ b/App/UI/MainWindow/MainWindow.cs @@ -7,11 +7,11 @@ public class MainWindow { public Window Window { get; } private PreferencesGroup shortcutsGroup; - private PasswordStoreShortcutCollection shortcuts; + private PasswordStoreShortcutCollection shortcuts; - public MainWindow() - { - var builder = new Gtk.Builder("Keychain.UI.MainWindow.MainWindow.xml"); + public MainWindow() + { + var builder = new Gtk.Builder("Keychain.UI.MainWindow.MainWindow.xml"); var window = builder.GetObject("main_window") as Window; if (window == null) @@ -19,30 +19,32 @@ public class MainWindow throw new Exception("Failed to load embedded resource MainWindow.xml"); } Window = window; - + var group = builder.GetObject("shortcuts_group") as PreferencesGroup; if (group == null) { throw new Exception("Failed to load UI element with ID: shortcuts_group"); } shortcutsGroup = group; - - var addButton = builder.GetObject("add_shortcut_button") as Gtk.Button; - if (addButton == null) + + var addButton = builder.GetObject("add_shortcut_button") as Gtk.Button; + if (addButton == null) { throw new Exception("Failed to load UI element with ID: add_shortcut_button"); - } - addButton.OnClicked += OnAddShortcutClicked; + } + addButton.OnClicked += OnAddShortcutClicked; // Initialize the observable collection with property binding - shortcuts = new PasswordStoreShortcutCollection(shortcutsGroup); - - LoadDefaultShortcuts(); + shortcuts = new PasswordStoreShortcutCollection(shortcutsGroup); + + LoadDefaultShortcuts(); } private void OnAddShortcutClicked(object sender, EventArgs e) { - AddShortcut("/path/to/location"); + var window = new AddShortcutWindow().Window; + window.Application = Window.Application; + window.Show(); } public void AddShortcut(string path)