mirror of
https://github.com/GradienceTeam/Gradience.git
synced 2024-09-27 14:07:54 +00:00
frontend/main: extract show_unsaved_dialog
function into two smaller
* show 'preset unsaved' dialog when selecting a preset from quick switcher menu * make `on_save_preset_entry_change` function global * change `save_preset` function name to `on_save_dialog_response`
This commit is contained in:
parent
df162a8848
commit
def149a76f
2 changed files with 66 additions and 62 deletions
|
@ -21,6 +21,8 @@ from gi.repository import Gtk, Adw
|
|||
from gradience.backend.constants import rootdir
|
||||
|
||||
|
||||
# TODO: Make this dialog async when Libadwaita 1.3 becomes available \
|
||||
# https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/method.MessageDialog.choose.html
|
||||
@Gtk.Template(resource_path=f"{rootdir}/ui/save_dialog.ui")
|
||||
class GradienceSaveDialog(Adw.MessageDialog):
|
||||
__gtype_name__ = "GradienceSaveDialog"
|
||||
|
|
|
@ -449,11 +449,12 @@ class GradienceApplication(Adw.Application):
|
|||
self.is_ready = True
|
||||
|
||||
def load_preset_action(self, _unused, *args):
|
||||
def load_quick_preset():
|
||||
if args[0].get_string().startswith("custom-"):
|
||||
self.load_preset_from_file(
|
||||
os.path.join(
|
||||
presets_dir,
|
||||
args[0].get_string().replace("custom-", "", 1),
|
||||
args[0].get_string().replace("custom-", "", 1)
|
||||
)
|
||||
)
|
||||
else:
|
||||
|
@ -461,6 +462,24 @@ class GradienceApplication(Adw.Application):
|
|||
f"{rootdir}/presets/" + args[0].get_string() + ".json"
|
||||
)
|
||||
|
||||
if self.is_dirty:
|
||||
dialog, preset_entry = self.construct_unsaved_dialog()
|
||||
|
||||
def on_unsaved_dialog_response(_widget, response, preset_entry):
|
||||
if response == "save":
|
||||
self.preset.save_to_file(preset_entry.get_text(), self.plugins_list)
|
||||
self.clear_dirty()
|
||||
load_quick_preset()
|
||||
elif response == "discard":
|
||||
self.clear_dirty()
|
||||
load_quick_preset()
|
||||
|
||||
dialog.connect("response", on_unsaved_dialog_response, preset_entry)
|
||||
|
||||
dialog.present()
|
||||
else:
|
||||
load_quick_preset()
|
||||
|
||||
Gio.SimpleAction.set_state(self.lookup_action("load_preset"), args[0])
|
||||
|
||||
def show_apply_color_scheme_dialog(self, *_args):
|
||||
|
@ -517,35 +536,12 @@ class GradienceApplication(Adw.Application):
|
|||
preset_entry = dialog.preset_entry
|
||||
preset_entry.set_text(self.preset_name)
|
||||
|
||||
def on_preset_entry_change(*_args):
|
||||
if len(preset_entry.get_text()) == 0:
|
||||
dialog.set_body(
|
||||
dialog.body.format(
|
||||
os.path.join(
|
||||
presets_dir,
|
||||
"user"
|
||||
)
|
||||
)
|
||||
)
|
||||
dialog.set_response_enabled("save", False)
|
||||
else:
|
||||
dialog.set_body(
|
||||
dialog.body.format(
|
||||
os.path.join(
|
||||
presets_dir,
|
||||
"user",
|
||||
to_slug_case(preset_entry.get_text()) + ".json"
|
||||
)
|
||||
)
|
||||
)
|
||||
dialog.set_response_enabled("save", True)
|
||||
|
||||
preset_entry.connect("changed", on_preset_entry_change)
|
||||
dialog.connect("response", self.save_preset, preset_entry)
|
||||
preset_entry.connect("changed", self.on_save_preset_entry_change, dialog, preset_entry)
|
||||
dialog.connect("response", self.on_save_dialog_response, preset_entry)
|
||||
|
||||
dialog.present()
|
||||
|
||||
def show_unsaved_dialog(self, *_args):
|
||||
def construct_unsaved_dialog(self, *_args):
|
||||
dialog = GradienceSaveDialog(
|
||||
self.win,
|
||||
heading=_("You have unsaved changes!"),
|
||||
|
@ -560,7 +556,18 @@ class GradienceApplication(Adw.Application):
|
|||
preset_entry = dialog.preset_entry
|
||||
preset_entry.set_text(self.preset_name)
|
||||
|
||||
def on_preset_entry_change(*_args):
|
||||
preset_entry.connect("changed", self.on_save_preset_entry_change, dialog, preset_entry)
|
||||
|
||||
return dialog, preset_entry
|
||||
|
||||
def show_unsaved_dialog(self, *_args):
|
||||
dialog, preset_entry = self.construct_unsaved_dialog()
|
||||
|
||||
dialog.connect("response", self.on_save_dialog_response, preset_entry)
|
||||
|
||||
dialog.present()
|
||||
|
||||
def on_save_preset_entry_change(self, _widget, dialog, preset_entry):
|
||||
if len(preset_entry.get_text()) == 0:
|
||||
dialog.set_body(
|
||||
dialog.body.format(
|
||||
|
@ -583,12 +590,7 @@ class GradienceApplication(Adw.Application):
|
|||
)
|
||||
dialog.set_response_enabled("save", True)
|
||||
|
||||
preset_entry.connect("changed", on_preset_entry_change)
|
||||
dialog.connect("response", self.save_preset, preset_entry)
|
||||
|
||||
dialog.present()
|
||||
|
||||
def save_preset(self, _unused, response, preset_entry):
|
||||
def on_save_dialog_response(self, _widget, response, preset_entry):
|
||||
if response == "save":
|
||||
self.preset.save_to_file(preset_entry.get_text(), self.plugins_list)
|
||||
self.clear_dirty()
|
||||
|
|
Loading…
Reference in a new issue