94 lines
3.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|