feat: dedicated ignore dialog

This commit is contained in:
aclist 2026-08-12 05:03:36 +09:00
parent 9d8d37e110
commit 2413dd1f14
2 changed files with 21 additions and 11 deletions

View File

@ -1,5 +1,6 @@
import textwrap import textwrap
import sys import sys
from typing import TYPE_CHECKING
from typing import Self from typing import Self
from dzgui.util.strings import dialog_error, dialog_header from dzgui.util.strings import dialog_error, dialog_header
@ -9,14 +10,17 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402 from gi.repository import Gtk # noqa E402
if TYPE_CHECKING:
from gi.repository import Gdk
class EarlyAlertDialog(Gtk.MessageDialog):
def __init__(self, string: str) -> None: class AbortDialog(Gtk.MessageDialog):
def __init__(self, string: str, buttons: Gtk.ButtonsType) -> None:
super().__init__( super().__init__(
title=dialog_header, title=dialog_header,
text=dialog_error, text=dialog_error,
transient_for=None, transient_for=None,
buttons=Gtk.ButtonsType.OK, buttons=buttons,
) )
msg = textwrap.fill(string, 50) msg = textwrap.fill(string, 50)
@ -24,7 +28,8 @@ class EarlyAlertDialog(Gtk.MessageDialog):
aa = self.get_action_area() aa = self.get_action_area()
aa.set_margin_bottom(20) aa.set_margin_bottom(20)
# self.action_area.set_margin_bottom(20) aa.set_layout(Gtk.ButtonBoxStyle.CENTER)
self.outer = self.get_content_area() self.outer = self.get_content_area()
self.outer.set_margin_start(30) self.outer.set_margin_start(30)
self.outer.set_margin_end(30) self.outer.set_margin_end(30)
@ -32,26 +37,30 @@ class EarlyAlertDialog(Gtk.MessageDialog):
self.set_default_size(250, 100) self.set_default_size(250, 100)
abort = self.get_widget_for_response(Gtk.ResponseType.OK) abort = self.get_widget_for_response(Gtk.ResponseType.OK)
ignore = self.get_widget_for_response(Gtk.ResponseType.CANCEL)
if abort is not None and hasattr(abort, "set_label"): if abort is not None and hasattr(abort, "set_label"):
abort.set_label("Exit") abort.set_label("Exit")
if ignore is not None and hasattr(ignore, "set_label"):
ignore.set_label("Ignore")
self.connect("response", self._on_response) self.connect("response", self._on_response)
self.run() self.run()
self.destroy() self.destroy()
def _on_response(self, dialog: Self, response: Gtk.ResponseType) -> None: def _on_response(self, dialog: Self, response: Gtk.ResponseType) -> None:
match response: match response:
case Gtk.ResponseType.OK: case Gtk.ResponseType.OK | Gtk.ResponseType.DELETE_EVENT:
sys.exit(1) sys.exit(1)
case Gtk.ResponseType.CANCEL: case Gtk.ResponseType.CANCEL:
print("response was cancel")
return return
class EarlyAlertDialog(AbortDialog):
def __init__(self, string: str, buttons: Gtk.ButtonsType) -> None:
super().__init__(string=string, buttons=Gtk.ButtonsType.OK)
class EarlyIgnoreDialog(EarlyAlertDialog): class EarlyIgnoreDialog(AbortDialog):
def __init__(self, string: str) -> None: def __init__(self, string: str) -> None:
super().__init__(string=string) super().__init__(string=string, buttons=Gtk.ButtonsType.OK_CANCEL)
# TODO: reverse order
self.add_button("Ignore", Gtk.ResponseType.CANCEL)
# TODO: if exit, sys.exit(1), else pass

View File

@ -161,6 +161,7 @@ class QuitDialog(GenericDialog):
self.add_button(strings.exit_app, Gtk.ResponseType.OK) self.add_button(strings.exit_app, Gtk.ResponseType.OK)
self.connect("response", self._on_response) self.connect("response", self._on_response)
# TODO: superfluous with the above
self.connect("delete-event", self._on_response) self.connect("delete-event", self._on_response)
def _on_response(self, dialog: Self, response: Gtk.ResponseType) -> None: def _on_response(self, dialog: Self, response: Gtk.ResponseType) -> None: