chore: subclass ExceptionDialog from TextBufferDialog

This commit is contained in:
aclist committed 2026-08-19 16:00:53 +09:00
1 parent 48b0660ebd
commit a2938c17f5
1 file changed
+16 -36
+16 -36
View File
@@ -1,6 +1,7 @@
from typing import Literal, Self, TYPE_CHECKING from typing import Literal, Self, TYPE_CHECKING
from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING, EXPAND, FILL from dzgui.const.constants import NO_EXPAND, NO_FILL, NO_PADDING, EXPAND, FILL
from dzgui.strings import dialogs
from dzgui.util import strings from dzgui.util import strings
from dzgui.views.components.buttons import ClipboardButton from dzgui.views.components.buttons import ClipboardButton
@@ -171,12 +172,17 @@ class QuitDialog(GenericDialog):
class TextBufferDialog(GenericDialog): class TextBufferDialog(GenericDialog):
def __init__( def __init__(
self, controller: "Controller", heading: str, secondary: str, text: str self,
controller: "Controller",
mtype: Gtk.MessageType,
heading: str,
secondary: str,
text: str,
): ):
super().__init__( super().__init__(
controller=controller, controller=controller,
text=heading, text=heading,
mtype=Gtk.MessageType.INFO, mtype=mtype,
buttons=Gtk.ButtonsType.NONE, buttons=Gtk.ButtonsType.NONE,
secondary=secondary, secondary=secondary,
) )
@@ -209,8 +215,9 @@ class DebugDialog(TextBufferDialog):
def __init__(self, controller: "Controller", debug: str): def __init__(self, controller: "Controller", debug: str):
super().__init__( super().__init__(
controller=controller, controller=controller,
heading="Debug", mtype=Gtk.MessageType.INFO,
secondary="Debug args", heading=dialogs.debug_heading,
secondary=dialogs.debug_secondary,
text=debug, text=debug,
) )
scrollable = Gtk.ScrolledWindow( scrollable = Gtk.ScrolledWindow(
@@ -229,7 +236,7 @@ class DebugDialog(TextBufferDialog):
self.show_all() self.show_all()
class ExceptionDialog(GenericDialog): class ExceptionDialog(TextBufferDialog):
""" """
Error dialog with rich traceback. Error dialog with rich traceback.
Usage: Usage:
@@ -244,13 +251,12 @@ class ExceptionDialog(GenericDialog):
def __init__(self, controller: "Controller", trace: str): def __init__(self, controller: "Controller", trace: str):
super().__init__( super().__init__(
controller=controller, controller=controller,
text=strings.error_heading, heading=strings.error_heading,
mtype=Gtk.MessageType.ERROR,
buttons=Gtk.ButtonsType.NONE,
secondary=strings.something_wrong, secondary=strings.something_wrong,
text=trace,
mtype=Gtk.MessageType.ERROR,
) )
self.trace = trace
# NOTE: box expands to end of content area # NOTE: box expands to end of content area
scrollable = Gtk.ScrolledWindow( scrollable = Gtk.ScrolledWindow(
propagate_natural_height=True, max_content_height=500 propagate_natural_height=True, max_content_height=500
@@ -264,7 +270,7 @@ class ExceptionDialog(GenericDialog):
top_margin=15, top_margin=15,
bottom_margin=10, bottom_margin=10,
) )
textview.set_buffer(Gtk.TextBuffer(text=self.trace)) textview.set_buffer(Gtk.TextBuffer(text=trace))
box.pack_start(textview, EXPAND, FILL, 0) box.pack_start(textview, EXPAND, FILL, 0)
self.error_details = Gtk.ScrolledWindow( self.error_details = Gtk.ScrolledWindow(
@@ -302,15 +308,7 @@ class ExceptionDialog(GenericDialog):
content.set_spacing(0) content.set_spacing(0)
content.add(scrollable) content.add(scrollable)
copy_button = ClipboardButton(controller, self.get_trace)
self.add_action_widget(copy_button, Gtk.ResponseType.NONE)
self.add_button("OK", Gtk.ResponseType.OK)
self.show_all() self.show_all()
self.ok = self.get_widget_for_response(Gtk.ResponseType.OK)
if self.ok is not None:
self.ok.grab_focus()
self.connect("response", self._on_response)
def _on_page_changed( def _on_page_changed(
self, notebook: Gtk.Notebook, child: Gtk.Box | Gtk.ScrolledWindow, index: int self, notebook: Gtk.Notebook, child: Gtk.Box | Gtk.ScrolledWindow, index: int
@@ -323,21 +321,3 @@ class ExceptionDialog(GenericDialog):
def set_secondary_text(self, text: str) -> None: def set_secondary_text(self, text: str) -> None:
self.details_buffer.set_text(text) self.details_buffer.set_text(text)
self.error_notebook.set_show_tabs(True) self.error_notebook.set_show_tabs(True)
def get_trace(self) -> str:
return self.trace
def _on_response(
self, dialog: Self, response: Gtk.ResponseType
) -> None | Literal[True]:
match response:
case Gtk.ResponseType.OK:
self.destroy()
return None
case Gtk.ResponseType.NONE:
return True
case Gtk.ResponseType.DELETE_EVENT:
self.destroy()
return None
case _:
return None