7305: Inconvenient size of error dialog

This commit is contained in:
Paul Franklin 2017-02-21 20:29:05 -08:00
parent 8196b65aab
commit 0f906b363b
2 changed files with 55 additions and 26 deletions

View File

@ -56,19 +56,28 @@ from gramps.gen.const import ICON, SPLASH, URL_BUGTRACKER
from gramps.gen.constfunc import get_env_var from gramps.gen.constfunc import get_env_var
from gramps.version import VERSION from gramps.version import VERSION
from ..display import display_help, display_url from ..display import display_help, display_url
from ..managedwindow import ManagedWindow
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# ErrorReportAssistant # ErrorReportAssistant
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ErrorReportAssistant(Gtk.Assistant): class ErrorReportAssistant(ManagedWindow, Gtk.Assistant):
""" """
Give the user an opportunity to report an error on the Gramps bug Give the user an opportunity to report an error on the Gramps bug
reporting system. reporting system.
""" """
def __init__(self, error_detail, rotate_handler, ownthread=False): def __init__(self, error_detail, rotate_handler,
ownthread=False, parent=None):
Gtk.Assistant.__init__(self) Gtk.Assistant.__init__(self)
ManagedWindow.__init__(self, None, [], self.__class__, modal=True)
if parent is not None: # the next two will not be set in ManagedWindow
self.parent_window = parent
self.other_modal_window = parent
self.set_window(self, None, None, isWindow=True)
if self.parent_window is not None:
self.setup_configs('interface.errorreportassistant', 780, 520)
try: try:
# did we get a handler wrapping the error detail? # did we get a handler wrapping the error detail?
@ -84,8 +93,8 @@ class ErrorReportAssistant(Gtk.Assistant):
self._final_report_text_buffer = None self._final_report_text_buffer = None
self.set_title(_("Error Report Assistant")) self.set_title(_("Error Report Assistant"))
self.connect('close', self.close) self.connect('close', self.do_close)
self.connect('cancel', self.close) self.connect('cancel', self.do_close)
self.connect('prepare', self.prepare) self.connect('prepare', self.prepare)
#create the assistant pages #create the assistant pages
@ -97,23 +106,19 @@ class ErrorReportAssistant(Gtk.Assistant):
self.build_page5() self.build_page5()
self.create_page_summary() self.create_page_summary()
try: self.show() # ManagedWindow
self.set_transient_for(self.list_toplevels()[-2])
except IndexError:
self.set_position(Gtk.WindowPosition.CENTER)
self.set_urgency_hint(True)
self.set_keep_above(True)
self.set_default_size(800,-1)
self.show_all()
self.ownthread = ownthread self.ownthread = ownthread
if self.ownthread: if self.ownthread:
Gtk.main() Gtk.main()
def close(self, *obj): def do_close(self, *obj):
""" """
Close the assistant. Close the assistant.
""" """
if self.parent_window is not None:
self._save_position(save_config=False) # the next line saves it
self._save_size()
self.hide() self.hide()
if self.ownthread: if self.ownthread:
Gtk.main_quit() Gtk.main_quit()

View File

@ -35,6 +35,7 @@ from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext _ = glocale.translation.sgettext
from ._errorreportassistant import ErrorReportAssistant from ._errorreportassistant import ErrorReportAssistant
from ..display import display_help from ..display import display_help
from ..managedwindow import ManagedWindow
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -44,7 +45,7 @@ from ..display import display_help
WIKI_HELP_PAGE = '%s_-_Error_and_Warning_Reference' % URL_MANUAL_PAGE WIKI_HELP_PAGE = '%s_-_Error_and_Warning_Reference' % URL_MANUAL_PAGE
WIKI_HELP_SEC = _('manual|Error_Report') WIKI_HELP_SEC = _('manual|Error_Report')
class ErrorView: class ErrorView(ManagedWindow):
""" """
A Dialog for displaying errors. A Dialog for displaying errors.
""" """
@ -53,26 +54,49 @@ class ErrorView:
""" """
Initialize the handler with the buffer size. Initialize the handler with the buffer size.
""" """
ManagedWindow.__init__(self, None, [], self.__class__, modal=True)
# the self.top.run() below makes Gtk make it modal, so any change to
# the previous line's "modal" would require that line to be changed
self._error_detail = error_detail self._error_detail = error_detail
self._rotate_handler = rotate_handler self._rotate_handler = rotate_handler
self.p_width = None # may or may not be changed in draw_window
self.p_height = None
self.draw_window() self.draw_window()
self.set_window(self.top, None, None)
if self.parent_window is not None:
self.setup_configs('interface.errorview', 600, 250,
# these two may be None or may be real
p_width=self.p_width, p_height=self.p_height)
if self.p_width is None and self.p_height is None:
self.show() # ManagedWindow
else:
self.top.show_all()
self.run() self.run()
def run(self): def run(self):
response = Gtk.ResponseType.HELP response = Gtk.ResponseType.HELP
while response == Gtk.ResponseType.HELP: while response == Gtk.ResponseType.HELP:
# the self.top.run() makes Gtk make it modal, so any change to that
# line would require the ManagedWindow.__init__ to be changed also
response = self.top.run() response = self.top.run()
if self.parent_window is not None:
self._save_position(save_config=False) # the next line saves it
self._save_size()
if response == Gtk.ResponseType.HELP: if response == Gtk.ResponseType.HELP:
self.help_clicked() self.help_clicked()
elif response == Gtk.ResponseType.YES: elif response == Gtk.ResponseType.YES:
self.top.destroy()
ErrorReportAssistant(error_detail = self._error_detail, ErrorReportAssistant(error_detail = self._error_detail,
rotate_handler = self._rotate_handler, rotate_handler = self._rotate_handler,
ownthread=True) ownthread=True, parent=self.top)
elif response == Gtk.ResponseType.CANCEL:
self.top.destroy() self.top.destroy()
elif response in (Gtk.ResponseType.CANCEL,
Gtk.ResponseType.DELETE_EVENT):
self.top.destroy()
def close(self, *obj):
pass # let "run" handle it (not ManagedWindow)
def help_clicked(self): def help_clicked(self):
"""Display the relevant portion of Gramps manual""" """Display the relevant portion of Gramps manual"""
@ -82,15 +106,18 @@ class ErrorView:
def draw_window(self): def draw_window(self):
title = "%s - Gramps" % _("Error Report") title = "%s - Gramps" % _("Error Report")
self.top = Gtk.Dialog(title) self.top = Gtk.Dialog(title)
try: for win in self.top.list_toplevels():
self.top.set_transient_for(self.top.list_toplevels()[-2]) if win.is_active():
self.top.set_position(Gtk.WindowPosition.CENTER) self.parent_window = win # for ManagedWindow
self.top.set_keep_above(True) if self.parent_window is None: # but it is on some screen
except IndexError: self.parent_window = self.top.get_screen()
self.p_width = self.top.get_screen().get_width()
self.p_height = self.top.get_screen().get_height()
self.top.set_position(Gtk.WindowPosition.CENTER) self.top.set_position(Gtk.WindowPosition.CENTER)
self.top.set_urgency_hint(True) self.top.set_urgency_hint(True)
self.top.set_keep_above(True) self.top.set_keep_above(True)
self.top.set_default_size(600,-1) self.top.set_default_size(600, -1)
vbox = self.top.get_content_area() vbox = self.top.get_content_area()
vbox.set_spacing(5) vbox.set_spacing(5)
self.top.set_border_width(12) self.top.set_border_width(12)
@ -141,6 +168,3 @@ class ErrorView:
self.top.add_button(_('_Cancel'), Gtk.ResponseType.CANCEL) self.top.add_button(_('_Cancel'), Gtk.ResponseType.CANCEL)
self.top.add_button(_("Report"), Gtk.ResponseType.YES) self.top.add_button(_("Report"), Gtk.ResponseType.YES)
self.top.add_button(_('_Help'), Gtk.ResponseType.HELP) self.top.add_button(_('_Help'), Gtk.ResponseType.HELP)
self.top.show_all()