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 @@
+
+
+
+
\ 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)