Files
Keys/App/UI/AddShortcutWindow/AddShortcutWindow.cs

94 lines
3.0 KiB
C#

using Adw;
namespace Keychain.UI;
public class AddShortcutWindow
{
public Dialog Dialog { get; }
private Gtk.Button? closeButton;
private Gtk.Button? iconPickerButton;
private Gtk.Button? browseButton;
private Gtk.Button? clearSelectedFolderButton;
private Gtk.Button? saveButton;
public AddShortcutWindow()
{
var builder = new Gtk.Builder("Keychain.UI.AddShortcutWindow.AddShortcutWindow.xml");
Dialog = builder.GetObject("add_shortcut_dialog") as Dialog;
if (Dialog == null)
{
throw new Exception("Failed to load embedded resource AddShortcutWindow.xml");
}
closeButton = builder.GetObject("close_button") as Gtk.Button;
if (closeButton == null)
{
throw new Exception("Failed to load UI element with ID: close_button");
}
closeButton.OnClicked += Close;
iconPickerButton = builder.GetObject("icon_picker_button") as Gtk.Button;
if (iconPickerButton == null)
{
throw new Exception("Failed to load UI element with ID: icon_picker_button");
}
iconPickerButton.OnClicked += OpenIconPicker;
clearSelectedFolderButton = builder.GetObject("clear_selected_folder_button") as Gtk.Button;
if (clearSelectedFolderButton == null)
{
throw new Exception("Failed to load UI element with ID: icon_picker_button");
}
clearSelectedFolderButton.OnClicked += ClearSelectedFolder;
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;
saveButton = builder.GetObject("save_button") as Gtk.Button;
if (saveButton == null)
{
throw new Exception("Failed to load UI element with ID: save_button");
}
}
private void OpenIconPicker(object sender, EventArgs e)
{
var chooser = new Gtk.EmojiChooser();
chooser.SetParent(iconPickerButton);
chooser.OnEmojiPicked += (s, e) =>
{
iconPickerButton.Label = e.Text;
};
chooser.Show();
}
private void Close(object sender, EventArgs e)
{
Dialog.Close();
}
private void ClearSelectedFolder(object sender, EventArgs e)
{
var buttonContent = (ButtonContent)browseButton.Child;
buttonContent.Label = "Browse";
clearSelectedFolderButton.Sensitive = false;
}
private async void BrowseFolder(object sender, EventArgs e)
{
var fileDialog = new Gtk.FileDialog();
var selectedFolder = await fileDialog.SelectFolderAsync((Window)Dialog.Parent.Parent);
if (selectedFolder != null)
{
var buttonContent = (ButtonContent)browseButton.Child;
buttonContent.Label = selectedFolder.GetPath();
clearSelectedFolderButton.Sensitive = true;
}
}
}