diff --git a/debug-viewer/GstDebugViewer/Common/GUI.py b/debug-viewer/GstDebugViewer/Common/GUI.py index c9e60085ea..925f9d130f 100644 --- a/debug-viewer/GstDebugViewer/Common/GUI.py +++ b/debug-viewer/GstDebugViewer/Common/GUI.py @@ -19,6 +19,8 @@ """GStreamer Development Utilities Common GUI module.""" +import os + import logging import pygtk @@ -28,6 +30,7 @@ del pygtk import gobject import gtk +import GstDebugViewer from GstDebugViewer.Common import utils def widget_add_popup_menu (widget, menu, button = 3): @@ -72,9 +75,10 @@ class Actions (dict): class Widgets (dict): - def __init__ (self, glade_tree): + def __init__ (self, builder): - widgets = glade_tree.get_widget_prefix ("") + widgets = (obj for obj in builder.get_objects () + if hasattr (obj, "name")) dict.__init__ (self, ((w.name, w,) for w in widgets)) def __getattr__ (self, name): @@ -92,24 +96,34 @@ class Widgets (dict): class WidgetFactory (object): - def __init__ (self, glade_filename): + def __init__ (self, directory): - self.filename = glade_filename + self.directory = directory - def make (self, widget_name, autoconnect = None): + def get_builder (self, filename): - glade_tree = gtk.glade.XML (self.filename, widget_name) + builder_filename = os.path.join (self.directory, filename) + + builder = gtk.Builder () + builder.set_translation_domain (GstDebugViewer.GETTEXT_DOMAIN) + builder.add_from_file (builder_filename) + + return builder + + def make (self, filename, widget_name, autoconnect = None): + + builder = self.get_builder (filename) if autoconnect is not None: - glade_tree.signal_autoconnect (autoconnect) + builder.connect_signals (autoconnect) - return Widgets (glade_tree) + return Widgets (builder) - def make_one (self, widget_name): + def make_one (self, filename, widget_name): - glade_tree = gtk.glade.XML (self.filename, widget_name) + builder = self.get_builder (filename) - return glade_tree.get_widget (widget_name) + return builder.get_object (widget_name) class UIFactory (object): diff --git a/debug-viewer/GstDebugViewer/GUI.py b/debug-viewer/GstDebugViewer/GUI.py index b907f49d21..c066478e90 100644 --- a/debug-viewer/GstDebugViewer/GUI.py +++ b/debug-viewer/GstDebugViewer/GUI.py @@ -38,7 +38,6 @@ pygtk.require ("2.0") import gobject import gtk -import gtk.glade from GstDebugViewer import Common, Data, Main @@ -1550,7 +1549,7 @@ class ProgressDialog (object): def __init__ (self, window, title = ""): - widgets = window.widget_factory.make ("progress_dialog") + widgets = window.widget_factory.make ("progress-dialog.ui", "progress_dialog") dialog = widgets.progress_dialog dialog.connect ("response", self.__handle_dialog_response) @@ -1637,9 +1636,8 @@ class Window (object): self.log_file = None self.setup_model (LazyLogModel ()) - glade_filename = os.path.join (Main.Paths.data_dir, "gst-debug-viewer.glade") - self.widget_factory = Common.GUI.WidgetFactory (glade_filename) - self.widgets = self.widget_factory.make ("main_window") + self.widget_factory = Common.GUI.WidgetFactory (Main.Paths.data_dir) + self.widgets = self.widget_factory.make ("main-window.ui", "main_window") ui_filename = os.path.join (Main.Paths.data_dir, "gst-debug-viewer.ui") @@ -2057,7 +2055,7 @@ class Window (object): from GstDebugViewer import version - dialog = self.widget_factory.make_one ("about_dialog") + dialog = self.widget_factory.make_one ("about-dialog.ui", "about_dialog") dialog.props.version = version dialog.run () dialog.destroy () diff --git a/debug-viewer/GstDebugViewer/__init__.py b/debug-viewer/GstDebugViewer/__init__.py index 2bf8812737..b10cc0ecdd 100644 --- a/debug-viewer/GstDebugViewer/__init__.py +++ b/debug-viewer/GstDebugViewer/__init__.py @@ -23,4 +23,4 @@ version = "0.1" __version__ = version -from GstDebugViewer.Main import Paths, main as run +from GstDebugViewer.Main import Paths, GETTEXT_DOMAIN, main as run diff --git a/debug-viewer/data/gst-debug-viewer.glade b/debug-viewer/data/about-dialog.ui similarity index 72% rename from debug-viewer/data/gst-debug-viewer.glade rename to debug-viewer/data/about-dialog.ui index bcdf29ed89..9d3fe0723c 100644 --- a/debug-viewer/data/gst-debug-viewer.glade +++ b/debug-viewer/data/about-dialog.ui @@ -1,142 +1,14 @@ - - - - - - - - GStreamer Debug Viewer - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - 640 - 480 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - False - - - - - True - False - 0 - - - - True - False - 0 - - - - True - True - - - - True - False - 0 - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - False - True - False - False - - - - - 0 - True - True - GTK_PACK_END - - - - - True - True - - - - - - True - True - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - True - False - - - - - 0 - True - True - - - - - 0 - True - True - GTK_PACK_END - - - - - - - - 5 - True - False - GStreamer Debug Viewer - Copyright © 2007 René Stadler - View and analyze GStreamer debug files - GNU GENERAL PUBLIC LICENSE + + + + + 5 + True + False + GStreamer Debug Viewer + Copyright © 2007 René Stadler + View and analyze GStreamer debug files + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> @@ -210,35 +82,35 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU General Public License. - "Copyright" also means copyright-like laws that apply to other kinds of + "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. - To "modify" a work means to copy from or adapt all or part of the work + To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. - A "covered work" means either the unmodified Program or a work based + A "covered work" means either the unmodified Program or a work based on the Program. - To "propagate" a work means to do anything with it that, without + To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - To "convey" a work means any kind of propagation that enables other + To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. - An interactive user interface displays "Appropriate Legal Notices" + An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the @@ -249,27 +121,27 @@ menu, a prominent item in the list meets this criterion. 1. Source Code. - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source form of a work. - A "Standard Interface" means an interface that either is an official + A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - The "System Libraries" of an executable work include anything, other + The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component +"Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - The "Corresponding Source" for a work in object code form means all + The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's @@ -355,7 +227,7 @@ terms of section 4, provided that you also meet all of these conditions: b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". + "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This @@ -374,7 +246,7 @@ terms of section 4, provided that you also meet all of these conditions: works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not +"aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other @@ -432,12 +304,12 @@ in one of these ways: from the Corresponding Source as a System Library, need not be included in conveying the object code work. - A "User Product" is either (1) a "consumer product", which means any + A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a +product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product @@ -445,7 +317,7 @@ is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - "Installation Information" for a User Product means any methods, + "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must @@ -480,7 +352,7 @@ unpacking, reading or copying. 7. Additional Terms. - "Additional permissions" are terms that supplement the terms of this + "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent @@ -523,8 +395,8 @@ that material) supplement the terms of this License with terms: any liability that these contractual assumptions directly impose on those licensors and authors. - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains @@ -588,7 +460,7 @@ receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - An "entity transaction" is a transaction transferring control of an + An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that @@ -608,17 +480,17 @@ sale, or importing the Program or any portion of it. 11. Patents. - A "contributor" is a copyright holder who authorizes use under this + A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". +work thus licensed is called the contributor's "contributor version". - A contributor's "essential patent claims" are all patent claims + A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant +purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. @@ -627,10 +499,10 @@ patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - In the following three paragraphs, a "patent license" is any express + In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a +sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. @@ -642,7 +514,7 @@ then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have +license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that @@ -656,7 +528,7 @@ or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - A patent license is "discriminatory" if it does not include within + A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered @@ -707,7 +579,7 @@ address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the +Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the @@ -728,7 +600,7 @@ later version. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM @@ -767,7 +639,7 @@ free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. +the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> @@ -797,10 +669,10 @@ notice like this when it starts in an interactive mode: The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". +might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. +if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. @@ -810,93 +682,9 @@ may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. - False - René Stadler <mail@renestadler.de> - translator-credits - gst-debug-viewer.png - - - - True - - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - False - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - 0 - False - True - GTK_PACK_END - - - - - - 6 - True - False - 0 - - - - 250 - True - GTK_PROGRESS_LEFT_TO_RIGHT - 0 - 0.10000000149 - - PANGO_ELLIPSIZE_NONE - - - 12 - False - False - - - - - 0 - True - False - - - - - - - + False + René Stadler <mail@renestadler.de> + translator-credits + gst-debug-viewer.png + + diff --git a/debug-viewer/data/main-window.ui b/debug-viewer/data/main-window.ui new file mode 100644 index 0000000000..ab22805249 --- /dev/null +++ b/debug-viewer/data/main-window.ui @@ -0,0 +1,120 @@ + + + + + GStreamer Debug Viewer + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + 640 + 480 + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + False + + + + True + False + 0 + + + True + False + 0 + + + True + True + + + True + False + 0 + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + True + True + True + True + True + False + True + False + False + + + + + 0 + True + True + GTK_PACK_END + + + + + True + True + + + + + True + True + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + True + True + False + True + False + True + False + False + False + + + + + True + False + + + + + 0 + True + True + + + + + 0 + True + True + GTK_PACK_END + + + + + + diff --git a/debug-viewer/data/progress-dialog.ui b/debug-viewer/data/progress-dialog.ui new file mode 100644 index 0000000000..2328563eb2 --- /dev/null +++ b/debug-viewer/data/progress-dialog.ui @@ -0,0 +1,83 @@ + + + + + True + + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + False + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + False + + + True + False + 0 + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + + + + + 0 + False + True + GTK_PACK_END + + + + + 6 + True + False + 0 + + + 250 + True + GTK_PROGRESS_LEFT_TO_RIGHT + 0 + 0.10000000149 + + PANGO_ELLIPSIZE_NONE + + + 12 + False + False + + + + + 0 + True + False + + + + + + cancel_button + + + diff --git a/debug-viewer/setup.py b/debug-viewer/setup.py index 869cb81fdd..21a1a8e861 100755 --- a/debug-viewer/setup.py +++ b/debug-viewer/setup.py @@ -328,8 +328,10 @@ setup (cmdclass = cmdclass, "GstDebugViewer.Common", "GstDebugViewer.Plugins"], scripts = ["gst-debug-viewer"], - data_files = [("share/gst-debug-viewer", ["data/gst-debug-viewer.glade", - "data/gst-debug-viewer.ui"],), + data_files = [("share/gst-debug-viewer", ["data/about-dialog.ui", + "data/main-window.ui", + "data/gst-debug-viewer.ui", + "data/progress-dialog.ui"],), ("share/icons/hicolor/48x48/apps", ["data/gst-debug-viewer.png"],), ("share/icons/hicolor/scalable/apps", ["data/gst-debug-viewer.svg"],)],