mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
Factor out progress dialog handling into its own reusable object class
This commit is contained in:
parent
1c9935eea3
commit
7b405fdd55
2 changed files with 48 additions and 23 deletions
|
@ -1340,6 +1340,44 @@ class LineView (object):
|
|||
|
||||
self.clear ()
|
||||
|
||||
class ProgressDialog (object):
|
||||
|
||||
def __init__ (self, window, title = ""):
|
||||
|
||||
widgets = window.widget_factory.make ("progress_dialog")
|
||||
dialog = widgets.progress_dialog
|
||||
dialog.connect ("response", self.__handle_dialog_response)
|
||||
|
||||
self.__dialog = dialog
|
||||
self.__progress_bar = widgets.progress_bar
|
||||
self.__progress_bar.props.text = title
|
||||
|
||||
dialog.set_transient_for (window.gtk_window)
|
||||
dialog.show ()
|
||||
|
||||
def __handle_dialog_response (self, dialog, resp):
|
||||
|
||||
self.handle_cancel ()
|
||||
|
||||
def handle_cancel (self):
|
||||
|
||||
pass
|
||||
|
||||
def update (self, progress):
|
||||
|
||||
if self.__progress_bar is None:
|
||||
return
|
||||
|
||||
self.__progress_bar.props.fraction = progress
|
||||
|
||||
def destroy (self):
|
||||
|
||||
if self.__dialog is None:
|
||||
return
|
||||
self.__dialog.destroy ()
|
||||
self.__dialog = None
|
||||
self.__progress_bar = None
|
||||
|
||||
class Window (object):
|
||||
|
||||
def __init__ (self, app):
|
||||
|
@ -1348,7 +1386,7 @@ class Window (object):
|
|||
self.app = app
|
||||
|
||||
self.dispatcher = None
|
||||
self.progress_bar = None
|
||||
self.progress_dialog = None
|
||||
self.update_progress_id = None
|
||||
|
||||
self.window_state = Common.GUI.WindowState ()
|
||||
|
@ -1579,10 +1617,10 @@ class Window (object):
|
|||
self.logger.debug ("cancelling data load")
|
||||
|
||||
self.set_log_file (None)
|
||||
|
||||
if self.progress_dialog:
|
||||
self.progress_dialog.destroy ()
|
||||
self.progress_dialog = None
|
||||
self.progress_bar = None
|
||||
if self.update_progress_id is not None:
|
||||
gobject.source_remove (self.update_progress_id)
|
||||
self.update_progress_id = None
|
||||
|
@ -1769,30 +1807,23 @@ class Window (object):
|
|||
|
||||
self.logger.debug ("load has started")
|
||||
|
||||
widgets = self.widget_factory.make ("progress_dialog")
|
||||
dialog = widgets.progress_dialog
|
||||
dialog.connect ("response", self.handle_progress_dialog_response)
|
||||
self.progress_dialog = dialog
|
||||
self.progress_bar = widgets.progress_bar
|
||||
dialog.set_transient_for (self.gtk_window)
|
||||
dialog.show ()
|
||||
|
||||
self.progress_dialog = ProgressDialog (self, _("Loading log file"))
|
||||
self.progress_dialog.handle_cancel = self.handle_load_progress_dialog_cancel
|
||||
self.update_progress_id = gobject.timeout_add (250, self.update_load_progress)
|
||||
|
||||
def handle_progress_dialog_response (self, dialog, response):
|
||||
def handle_load_progress_dialog_cancel (self):
|
||||
|
||||
self.actions.cancel_load.activate ()
|
||||
|
||||
def update_load_progress (self):
|
||||
|
||||
if not self.progress_bar:
|
||||
self.logger.debug ("progress window is gone, removing progress update timeout")
|
||||
if self.progress_dialog is None:
|
||||
self.logger.debug ("progress dialog is gone, removing progress update timeout")
|
||||
self.update_progress_id = None
|
||||
return False
|
||||
|
||||
progress = self.log_file.get_load_progress ()
|
||||
self.logger.debug ("update progress to %i%%", progress * 100)
|
||||
self.progress_bar.props.fraction = progress
|
||||
self.progress_dialog.update (progress)
|
||||
|
||||
return True
|
||||
|
||||
|
@ -1800,14 +1831,8 @@ class Window (object):
|
|||
|
||||
self.logger.debug ("load has finshed")
|
||||
|
||||
if self.update_progress_id is not None:
|
||||
gobject.source_remove (self.update_progress_id)
|
||||
self.update_progress_id = None
|
||||
|
||||
self.progress_dialog.hide ()
|
||||
self.progress_dialog.destroy ()
|
||||
self.progress_dialog = None
|
||||
self.progress_bar = None
|
||||
|
||||
self.log_model.set_log (self.log_file)
|
||||
self.log_filter = FilteredLogModelIdentity (self.log_model)
|
||||
|
|
|
@ -484,7 +484,7 @@ Public License instead of this License.
|
|||
|
||||
<widget class="GtkDialog" id="progress_dialog">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes">Loading log...</property>
|
||||
<property name="title" translatable="yes"></property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
|
||||
<property name="modal">True</property>
|
||||
|
@ -545,7 +545,7 @@ Public License instead of this License.
|
|||
<property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
|
||||
<property name="fraction">0</property>
|
||||
<property name="pulse_step">0.10000000149</property>
|
||||
<property name="text" translatable="yes">Loading file</property>
|
||||
<property name="text" translatable="yes"></property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
</widget>
|
||||
<packing>
|
||||
|
|
Loading…
Reference in a new issue