From 67f60aa082c71b876288c80ccb66ad78508143a8 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Sun, 1 Sep 2013 18:39:37 +0200 Subject: [PATCH 001/209] Add the Gtk.Switch class to the "Buttons" section. --- examples/switch_example.py | 33 +++++++++++++++++++++++++++++++++ images/switch_example.png | Bin 0 -> 5510 bytes 2 files changed, 33 insertions(+) create mode 100644 examples/switch_example.py create mode 100644 images/switch_example.png diff --git a/examples/switch_example.py b/examples/switch_example.py new file mode 100644 index 0000000..ceb85c3 --- /dev/null +++ b/examples/switch_example.py @@ -0,0 +1,33 @@ +from gi.repository import Gtk + +class SwitcherWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Switch Demo") + self.set_border_width(10) + + hbox = Gtk.Box(spacing=6) + self.add(hbox) + + switch = Gtk.Switch() + switch.connect("notify::active", self.on_switch_activated) + switch.set_active(False) + hbox.pack_start(switch, True, True, 0) + + switch = Gtk.Switch() + switch.connect("notify::active", self.on_switch_activated) + switch.set_active(True) + hbox.pack_start(switch, True, True, 0) + + def on_switch_activated(self, switch, gparam): + if switch.get_active(): + state = "on" + else: + state = "off" + print "Switch was turned", state + +win = SwitcherWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() + diff --git a/images/switch_example.png b/images/switch_example.png new file mode 100644 index 0000000000000000000000000000000000000000..a1033eb401c69c5bac7294e05c2d15a531f24e6b GIT binary patch literal 5510 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 literal 0 HcmV?d00001 From 7b2c37f8c1a57b5017c739751160618a7780b5c3 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Sun, 1 Sep 2013 20:16:03 +0200 Subject: [PATCH 002/209] Add the Gtk.Switch class to the "Buttons" section. --- source/button_widgets.txt | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/source/button_widgets.txt b/source/button_widgets.txt index d85113b..53db9ad 100644 --- a/source/button_widgets.txt +++ b/source/button_widgets.txt @@ -282,3 +282,37 @@ Example .. literalinclude:: ../examples/spinbutton_example.py :linenos: + +Switch +------ +A :class:`Gtk.Switch` is a widget that has two states: on or off. The user can +control which state should be active by clicking the empty area, or by dragging +the handle. + +You shouldn't use the "activate" signal on the Gtk.Switch which is an action +signal and emitting it causes the switch to animate. Applications should never +connect to this signal, but use the "notify::active" signal, see the example +here below. + +Switch Objects +^^^^^^^^^^^^^^ + +.. class:: Gtk.Switch(None) + + .. method:: get_active() + + Gets whether the Switch is in its "on" or "off" state. + + .. method:: set_active(is_active) + + Changes the state of the :class:`Gtk.Switch` to the desired one + (True or False) + +Example +^^^^^^^ + +.. image:: ../images/switch_example.png + +.. literalinclude:: ../examples/switch_example.py + :linenos: + From 9ffa79d2a220de49aebab8512208ad9bd75f4dca Mon Sep 17 00:00:00 2001 From: Kartik Singhal Date: Sun, 13 Oct 2013 22:38:33 +0530 Subject: [PATCH 003/209] Typo fix --- source/install.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/install.txt b/source/install.txt index 852ca12..7c0df8a 100644 --- a/source/install.txt +++ b/source/install.txt @@ -2,7 +2,7 @@ Installation ============ -The fist step before we start with actual coding consists of setting up +The first step before we start with actual coding consists of setting up `PyGObject`_ and its dependencies. PyGObject is a Python module that enables developers to access GObject-based libraries such as GTK+ within Python. From 184c27091b4d3a12f12462bb26c89a6ae6c9dbbc Mon Sep 17 00:00:00 2001 From: anarcat Date: Sun, 1 Dec 2013 00:27:07 -0500 Subject: [PATCH 004/209] mention the very useful disconnect_by_func() function this is essential to disconnect callbacks generated from Builder() --- source/basics.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/basics.txt b/source/basics.txt index 9d0588e..804861b 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -53,6 +53,14 @@ has been connected to. widget.disconnect(handler_id) +If you have lost the "handler_id" for some reason (for example the handlers +were installed using :func:`Gtk.Builder.connect_sinals`), you can still +disconnect a specific callback using the function :func:`disconnect_by_func`: + +.. code-block:: python + + widget.disconnect_by_func(callback) + Almost all applications will connect to the "delete-event" signal of the top-level window. It is emitted if a user requests that a toplevel window is closed. The default handler for this signal destroys the window, but does From 3d87f0eb8def4774dbcccfa96981b91486598c4c Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Tue, 3 Dec 2013 10:16:52 +0100 Subject: [PATCH 005/209] Remove class definitions and link to API reference instead (using intersphinx). Fixes sebp/PyGObject-Tutorial#33 http://lazka.github.io/pgi-docs --- get_stockitems.py | 2 +- source/builder.txt | 33 ----- source/button_widgets.txt | 162 ----------------------- source/cellrenderers.txt | 71 ---------- source/clipboard.txt | 51 -------- source/combobox.txt | 68 ---------- source/conf.py | 4 +- source/dialogs.txt | 210 ------------------------------ source/drag_and_drop.txt | 81 ------------ source/entry.txt | 68 ---------- source/iconview.txt | 249 ------------------------------------ source/label.txt | 63 --------- source/layout.txt | 174 ------------------------- source/menus.txt | 182 -------------------------- source/progressbar.txt | 45 ------- source/spinner.txt | 13 -- source/stock.txt | 209 +++++++++++++++--------------- source/textview.txt | 181 -------------------------- source/treeview.txt | 263 -------------------------------------- 19 files changed, 108 insertions(+), 2021 deletions(-) diff --git a/get_stockitems.py b/get_stockitems.py index 1d7981f..12266d5 100644 --- a/get_stockitems.py +++ b/get_stockitems.py @@ -11,7 +11,7 @@ define_p = re.compile("\\s+") def print_item(item, imgs): - print ".. attribute:: " + item + print "* :obj:`" + item + "`" print for img in imgs: if "-ltr" in img: diff --git a/source/builder.txt b/source/builder.txt index 6338c0c..f318bfd 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -115,39 +115,6 @@ In our example the last code snippet could be rewritten as: :linenos: :lines: 3-12 -Builder Objects ---------------- -.. class:: Gtk.Builder - - .. method:: add_from_file(filename) - - Loads and parses the given file and merges it with the current contents of builder. - - .. method:: add_from_string(string) - - Parses the given string and merges it with the current contents of builder.. - - .. method:: add_objects_from_file(filename, object_ids) - - Same as :meth:`Gtk.Builder.add_from_file`, but loads only the objects with the ids given in the *object_ids* list. - - .. method:: add_objects_from_string(filename, object_ids) - - Same as :meth:`Gtk.Builder.add_from_string`, but loads only the objects with the ids given in the *object_ids* list. - - .. method:: get_object(object_id) - - Retrieves the widget with the id *object_id* from the loaded objects in the builder. - - .. method:: get_objects() - - Returns all loaded objects. - - .. method:: connect_signals(handler_object) - - Connects the signals to the methods given in the *handler_object*. - The *handler_object* can be any object which contains keys or attributes that are called like the signal handler names given in the interface description, e.g. a class or a dict. - Example ------- The final code of the example diff --git a/source/button_widgets.txt b/source/button_widgets.txt index 53db9ad..8b7ef23 100644 --- a/source/button_widgets.txt +++ b/source/button_widgets.txt @@ -14,28 +14,6 @@ is the :class:`Gtk.Label`. Usually, you want to connect to the button's "clicked" signal which is emitted when the button has been pressed and released. -Button Objects -^^^^^^^^^^^^^^ -.. class:: Gtk.Button([label[, stock[, use_underline]]]) - - If label is not ``None``, creates a new :class:`Gtk.Button` with a - :class:`Gtk.Label` child containing the given text. - - If *stock* is not ``None``, creates a new button containing the image and - text from a :ref:`stock item `. - - If *use_underline* is set to ``True``, an underline in the text - indicates the next character should be used for the mnemonic accelerator key. - - .. method:: set_label(label) - - Sets the text of the label of the button to *label*. - - .. method:: set_use_underline(use_underline) - - If *True*, an underline in the text of the button label indicates the next - character should be used for the mnemonic accelerator key. - Example ^^^^^^^ @@ -57,24 +35,6 @@ is "down". You can also set the toggle button's state, with :meth:`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state actually changes, it causes the "toggled" signal to be emitted. -ToggleButton Objects -^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.ToggleButton([label[, stock[,use_underline]]]) - - The arguments are the same as for the :class:`Gtk.Button` constructor. - - .. method:: get_active() - - Returns the buttons current state. Returns ``True`` if the toggle button - is pressed in and ``False`` if it is raised. - - .. method:: set_active(is_active) - - Sets the status of the toggle button. Set to ``True`` if you want the button - to be pressed in, and ``False`` to raise it. This action causes the - "toggled" signal to be emitted. - Example ^^^^^^^ @@ -92,13 +52,6 @@ a widget, (usually a :class:`Gtk.Label`). The "toggled" signal, :meth:`Gtk.ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are inherited. -CheckButton Objects -^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CheckButton([label[, stock[, use_underline]]]) - - Arguments are the same as for :class:`Gtk.Button`. - RadioButton ----------- Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, @@ -121,31 +74,6 @@ as first argument. Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be achieved by calling :meth:`Gtk.RadioButton.join_group`. -RadioButton Objects -^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.RadioButton - - .. staticmethod:: new_from_widget(group) - - Creates a new :class:`Gtk.RadioButton`, adding it to the same group as - the *group* widget. If *group* is ``None``, a new group is created. - - .. staticmethod:: new_with_label_from_widget(group, label) - - Creates a new :class:`Gtk.RadioButton`. The text of the label widget - inside the button will be set to *label*. *group* is the same as for - :meth:`new_from_widget`. - - .. staticmethod:: new_with_mnemonic_from_widget(group, label) - - Same as :meth:`new_with_label_from_widget`, but underscores in *label* - indicate the mnemonic for the button. - - .. method:: join_group(group) - - Joins this radio button to the group of another :class:`Gtk.RadioButton` object. - Example ^^^^^^^ @@ -163,25 +91,6 @@ useful to show quick links to resources. The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton.get_uri`. - -LinkButton Objects -^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.LinkButton(uri [, label]) - - *uri* is the address of the website which should be loaded. The label is set - as the text which should be displayed. If it is set to ``None`` or omitted, - the web address will be displayed instead. - - .. method:: get_uri() - - Retrieves the URI set using :meth:`set_uri`. - - .. method:: set_uri(uri) - - Sets *uri* as the URI where this button points to. As a side-effect this - unsets the 'visited' state of the button. - Example ^^^^^^^ @@ -218,63 +127,6 @@ options here; by default the spin button updates the value even if the data entered is invalid. Alternatively, we can set the policy to only update when the value entered is valid by calling :meth:`Gtk.SpinButton.set_update_policy`. -SpinButton Objects -^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.SpinButton() - - .. method:: set_adjustment(adjustment) - - Replaces the :class:`Gtk.Adjustment` associated with this spin button. - - .. method:: set_digits(digits) - - Set the precision to be displayed by this spin button. Up to 20 digit - precision is allowed. - - .. method:: set_increments(step, page) - - Sets the step and page increments for this spin button. This affects how - quickly the value changes when the spin button's arrows are activated. - - .. method:: set_value(value) - - Sets the value of this spin button. - - .. method:: get_value() - - Get the value of this spin button represented as an float. - - .. method:: get_value_as_int() - - Get the value of this spin button represented as an integer. - - .. method:: set_numeric(numeric) - - If *numeric* is ``False``, non-numeric text can be typed into the - spin button, else only numbers can be typed. - - .. method:: set_update_policy(policy) - - Sets the update behavior of a spin button. This determines whether the - spin button is always updated or only when a valid value is set. - The *policy* argument can either be :attr:`Gtk.SpinButtonUpdatePolicy.ALWAYS` - or :attr:`Gtk.SpinButtonUpdatePolicy.IF_VALID`. - -Adjustment Objects -^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.Adjustment(value, lower, upper, step_increment, page_increment, page_size) - - The :class:`Gtk.Adjustment` object represents a value which has an associated - lower and upper bound, together with step and page increments, and a page - size. It is used within several GTK+ widgets, including :class:`Gtk.SpinButton`, - :class:`Gtk.Viewport`, and :class:`Gtk.Range`. - - *value* is the initial value, *lower* the minimum value, *upper* the maximum - value, *step_increment* the step increment, *page_increment* the page - increment, and *page_size* the page size. - Example ^^^^^^^ @@ -294,20 +146,6 @@ signal and emitting it causes the switch to animate. Applications should never connect to this signal, but use the "notify::active" signal, see the example here below. -Switch Objects -^^^^^^^^^^^^^^ - -.. class:: Gtk.Switch(None) - - .. method:: get_active() - - Gets whether the Switch is in its "on" or "off" state. - - .. method:: set_active(is_active) - - Changes the state of the :class:`Gtk.Switch` to the desired one - (True or False) - Example ^^^^^^^ diff --git a/source/cellrenderers.txt b/source/cellrenderers.txt index 0d0d827..c723789 100644 --- a/source/cellrenderers.txt +++ b/source/cellrenderers.txt @@ -35,18 +35,6 @@ can be changed by setting the value of the "editable" property to ``True``: You can then connect to the "edited" signal and update your :class:`Gtk.TreeModel` accordingly. -CellRendererText Objects -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererText() - - Creates a new :class:`Gtk.CellRendererText` instance. Adjust how text is - drawn using object properties. - Also, with :class:`Gtk.TreeViewColumn`, you can bind a property to a value - in a :class:`GtkTreeModel`. For example, you can bind the "text" property on - the cell renderer to a string value in the model, thus rendering a different - string in each row of the :class:`Gtk.TreeView`. - Example ^^^^^^^ @@ -67,31 +55,6 @@ you most likely want to bind the "active" property on the cell renderer to a boolean value in the model, thus causing the check button to reflect the state of the model. -CellRendererToggle Objects -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererToggle - - Creates a new :class:`Gtk.CellRendererToggle` instance. - - .. method:: set_active(setting) - - Activates or deactivates a cell renderer. - - .. method:: get_active() - - Returns whether the cell renderer is active. - - .. method:: set_radio(radio) - - If *radio* is ``True``, the cell renderer renders a radio toggle (i.e. a - toggle in a group of mutually-exclusive toggles). If ``False``, it renders - a check toggle (a standalone boolean option). - - .. method:: get_radio() - - Returns whether we're rendering radio toggles rather than checkboxes. - Example ^^^^^^^ @@ -107,16 +70,6 @@ A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. It allows to render either a given :class:`Gdk.Pixbuf` (set via the "pixbuf" property) or a :ref:`stock item ` (set via the "stock-id" property). -CellRendererPixbuf Objects -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererPixbuf - - Creates a new :class:`Gtk.CellRendererPixbuf`. Adjust rendering parameters - using object properties. For example, you can bind the "pixbuf" or "stock-id" - property on the cell renderer to a pixbuf value in the model, thus rendering - a different image in each row of the :class:`Gtk.TreeView`. - Example ^^^^^^^ @@ -141,16 +94,6 @@ A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used with and without an associated :class:`Gtk.Entry` widget, depending on the value of the "has-entry" property. -CellRendererCombo Objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererCombo - - Creates a new :class:`Gtk.CellRendererCombo`. Adjust how text is drawn using - object properties. For example, you can bind the "text" property on the cell - renderer to a string value in the model, thus rendering a different string - in each row of the :class:`Gtk.TreeView`. - Example ^^^^^^^ @@ -169,13 +112,6 @@ The percentage value of the progress bar can be modified by changing the "value" property. Similar to :class:`Gtk.ProgressBar`, you can enable the *activity mode* by incrementing the "pulse" property instead of the "value" property. -CellRendererProgress Objects -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererProgress - - Creates a new :class:`Gtk.CellRendererProgress`. - Example ^^^^^^^ @@ -198,13 +134,6 @@ renderer, which can be set explicitly or mapped to a column in the tree model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` also has properties for the climb rate and the number of digits to display. -CellRendererSpin Objects -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.CellRendererSpin - - Creates a new :class:`Gtk.CellRendererSpin`. - Example ^^^^^^^ diff --git a/source/clipboard.txt b/source/clipboard.txt index 90d5a1b..5f40ddb 100644 --- a/source/clipboard.txt +++ b/source/clipboard.txt @@ -13,57 +13,6 @@ In most circumstances, the selection named ``CLIPBOARD`` is used for everyday copying and pasting. ``PRIMARY`` is another common selection which stores text selected by the user with the cursor. -Clipboard Objects ------------------ -.. class:: Gtk.Clipboard - - .. method:: get(selection) - - Obtains the :class:`Gtk.Clipboard` for the given selection. - - *selection* is a :class:`Gdk.Atom` describing which clipboard to use. - Predefined values include: - - * ``Gdk.SELECTION_CLIPBOARD`` - * ``Gdk.SELECTION_PRIMARY`` - - .. method:: set_text(text, length) - - Sets the contents of the clipboard to the given text. - - *text* is the string to put in the clipboard. - - *length* is the number of characters to store. - It may be omitted to store the entire string. - - .. method:: set_image(image) - - Sets the contents of the clipboard to the given image. - - *image* must be a :class:`Gdk.Pixbuf`. - To retrieve one from a :class:`Gdk.Image`, use ``image.get_pixbuf()``. - - .. method:: wait_for_text() - - Returns the clipboard's content as a string, or returns ``None`` - if the clipboard is empty or not currently holding text. - - .. method:: wait_for_image() - - Returns the clipboard's content as a :class:`Gtk.Pixbuf`, - or returns ``None`` if the clipboard is empty or not currently holding - an image. - - .. method:: store() - - Stores the clipboard's data outside the application. - Otherwise, data copied to the clipboard may be lost when the application exits. - - .. method:: clear() - - Clears the contents of the clipboard. - Use with caution; this may clear data from another application. - Example ------- diff --git a/source/combobox.txt b/source/combobox.txt index 0fe1e97..c170e26 100644 --- a/source/combobox.txt +++ b/source/combobox.txt @@ -25,74 +25,6 @@ can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` offers a simp alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk.ComboBoxText` can contain an entry. -ComboBox objects ----------------- - -.. class:: Gtk.ComboBox - - .. staticmethod:: new_with_entry() - - Creates a new empty :class:`Gtk.ComboBox` with an entry. - - .. staticmethod:: new_with_model(model) - - Creates a new :class:`Gtk.ComboBox` with the model initialized to *model*. - - .. staticmethod:: new_with_model_and_entry(model) - - Creates a new :class:`Gtk.ComboBox` with an entry and the model - initialized to *model*. - - .. method:: get_active_iter() - - Returns a :class:`Gtk.TreeIter` pointing to the current active item. - If no active item exists, ``None`` is returned. - - .. method:: set_model(model) - - Sets the model used by this combo box to be *model*. Will unset a - previously set model (if applicable). If model is ``None``, then it will - unset the model. Note that this function does not clear the cell renderers. - - .. method:: get_model() - - Returns the :class:`Gtk.TreeModel` which is acting as data source for - this combo box. - - .. method:: set_entry_text_column(text_column) - - Sets the model column which this combo box should use to get strings from - to be *text_column*. The column *text_column* in the model of this combo - box must be of type ``str``. - - This is only relevant if this combo box has been created with the - "has-entry" property set to ``True``. - - .. method:: set_wrap_width(width) - - Sets the wrap width of this combo box to be *width*. The wrap width is - basically the preferred number of columns when you want the popup to be - layed out in a grid. - -ComboBoxText objects --------------------- - -.. class:: Gtk.ComboBoxText - - .. staticmethod:: new_with_entry() - - Creates a new empty :class:`Gtk.ComboBoxText` with an entry. - - .. method:: append_text(text) - - Appends *text* to the list of strings stored in this combo box. - - .. method:: get_active_text() - - Returns the currently active string in this combo box, or ``None`` if - none is selected. If this combo box contains an entry, this function will - return its contents (which will not necessarily be an item from the list). - Example ------- diff --git a/source/conf.py b/source/conf.py index 7e602e5..1c2fcd9 100644 --- a/source/conf.py +++ b/source/conf.py @@ -25,7 +25,9 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo'] +extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx'] + +intersphinx_mapping = {'gi': ('http://lazka.github.io/pgi-docs', None)} # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/source/dialogs.txt b/source/dialogs.txt index 0110fcb..40a4a84 100644 --- a/source/dialogs.txt +++ b/source/dialogs.txt @@ -42,73 +42,6 @@ once it is no longer needed. It should be noted that if the dialog needs to be accessed after it has been destroyed, it will need to be constructed again otherwise the dialog window will be empty. -Dialog Objects -^^^^^^^^^^^^^^ - -.. class:: Gtk.Dialog([title[, parent[, flags[, buttons]]]) - - Creates a new :class:`Gtk.Dialog` with title *title* and transient parent - *parent*. The *flags* argument can be used to make the dialog model - (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its - transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`). - - *buttons* is a tuple of buttons which can be set to provide a range - of different buttons and responses. See the :meth:`add_button` method for - details. - - All arguments are optional and can be referred to as key-word arguments as - well. - - .. method:: get_content_area() - - Return the content area of of this dialog. - - .. method:: add_button(button_text, response_id) - - Adds a button with the given text (or a stock button, if *button_text* - is a :ref:`stock item `) and sets things up so that clicking - the button will emit the "response" signal with the given *response_id*. - The button is appended to the end of the dialog's action area. - - *response_id* can be any positive integer or one of the predefined - :class:`Gtk.ResponseType` values: - - * :attr:`Gtk.ResponseType.NONE` - * :attr:`Gtk.ResponseType.REJECT` - * :attr:`Gtk.ResponseType.ACCEPT` - * :attr:`Gtk.ResponseType.DELETE_EVENT` - * :attr:`Gtk.ResponseType.OK` - * :attr:`Gtk.ResponseType.CANCEL` - * :attr:`Gtk.ResponseType.CLOSE` - * :attr:`Gtk.ResponseType.YES` - * :attr:`Gtk.ResponseType.NO` - * :attr:`Gtk.ResponseType.APPLY` - * :attr:`Gtk.ResponseType.HELP` - - The button widget is returned, but usually you don't need it. - - .. method:: add_buttons(button_text, response_id[, ...]) - - Adds several buttons to this dialog using the button data passed as - arguments to the method. This method is the same as calling - :meth:`add_button` repeatedly. The button data pairs - button text (or - :ref:`stock item `) and a response ID integer are passed - individually. For example:: - - dialog.add_buttons(Gtk.STOCK_OPEN, 42, "Close", Gtk.ResponseType.CLOSE) - - .. method:: set_modal(is_modal) - - Sets a dialog modal or non-modal. Modal dialogs prevent interaction with - other windows in the same application. - - .. method:: run() - - Blocks in a recursive main loop until the dialog either emits the - "response" signal, or is destroyed. If the dialog is destroyed during the - call to :meth:`run`, :meth:`run` returns :attr:`Gtk.ResponseType.NONE`. - Otherwise, it returns the response ID from the "response" signal emission. - Example ^^^^^^^ .. image:: ../images/dialog_example.png @@ -129,48 +62,6 @@ a secondary text can be added. In this case, the primary message entered when creating the message dialog is made bigger and set to bold text. The secondary message can be set by calling :meth:`Gtk.MessageDialog.format_secondary_text`. -MessageDialog Objects -^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.MessageDialog([parent[, flags[, message_type[, buttons, [message_format]]]]) - - Creates a new :class:`Gtk.MessageDialog` with transient parent - *parent*. The *flags* argument can be used to make the dialog model - (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its - transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`). - - *message_type* can be set to one of the following values: - - * :attr:`Gtk.MessageType.INFO`: Informational message - * :attr:`Gtk.MessageType.WARNING`: Non-fatal warning message - * :attr:`Gtk.MessageType.QUESTION`: Question requiring a choice - * :attr:`Gtk.MessageType.ERROR`: Fatal error message - * :attr:`Gtk.MessageType.OTHER`: None of the above, doesn't get an icon - - It is also possible to set a variety of buttons on the message dialog, to - retrieve different responses from the user. One of the following values can - be used: - - * :attr:`Gtk.ButtonsType.NONE`: no buttons at all - * :attr:`Gtk.ButtonsType.OK`: an OK button - * :attr:`Gtk.ButtonsType.CLOSE`: a Close button - * :attr:`Gtk.ButtonsType.CANCEL`: a Cancel button - * :attr:`Gtk.ButtonsType.YES_NO`: Yes and No buttons - * :attr:`Gtk.ButtonsType.OK_CANCEL`: OK and Cancel buttons - - Finally, *message_format* is some text that the user may want to see. - - All arguments are optional and can be referred to as key-word arguments as - well. - - .. method:: format_secondary_text(message_format) - - Sets the secondary text of the message dialog to be *message_format*. - - Note that setting a secondary text makes the primary text (*message_format* - argument of :class:`Gtk.MessageDialog` constructor) become bold, unless - you have provided explicit markup. - Example ^^^^^^^ @@ -235,107 +126,6 @@ Furthermore, you can specify which kind of files are displayed by creating The user can then select one of the added filters from a combo box at the bottom of the file chooser. -FileChooser Objects -^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.FileChooserDialog([title[, parent[, action[, buttons]]]) - - Creates a new :class:`Gtk.FileChooserDialog` with title *title and transient - parent *parent*. - - *action* can be one of the following: - - * :attr:`Gtk.FileChooserAction.OPEN`: The file chooser will only let the user - pick an existing file. - * :attr:`Gtk.FileChooserAction.SAVE`: The file chooser will let the user pick - an existing file, or type in a new filename. - * :attr:`Gtk.FileChooserAction.SELECT_FOLDER`: The file chooser will let the - user pick an existing folder. - * :attr:`Gtk.FileChooserAction.CREATE_FOLDER`: - The file chooser will let the user name an existing or new folder. - - The *buttons* argument has the same format as for the :class:`Gtk.Dialog` - constructor. - -.. class:: Gtk.FileChooser - - .. method:: set_current_name(name) - - Sets the current name in the file selector, as if entered by the user. - - .. method:: set_filename(filename) - - Sets *filename* as the current filename for the file chooser, by changing - to the file's parent folder and actually selecting the file in list; all - other files will be unselected. If the chooser is in - :attr:`Gtk.FileChooserAction.SAVE` mode, the file's base name will also - appear in the dialog's file name entry. - - Note that the file must exist, or nothing will be done except for the - directory change. - - .. method:: set_select_multiple(select_multiple) - - Sets whether multiple files can be selected. This is only relevant if - the mode is :attr:`Gtk.FileChooserAction.OPEN` or - :attr:`Gtk.FileChooserAction.SELECT_FOLDER`. - - .. method:: set_local_only(local_only) - - Sets whether only local files can be selected. - - .. method:: set_show_hidden(show_hidden) - - Sets whether to display hidden files and folders. - - .. method:: set_do_overwrite_confirmation(do_overwrite_confirmation) - - Sets whether to confirm overwriting in save mode. - - .. method:: get_filename() - - Returns the filename for the currently selected file in the file selector. - If multiple files are selected, use :meth:`get_filenames` instead. - - .. method:: get_filenames() - - Returns a list of all the selected files and subfolders in the current - folder. The returned names are full absolute paths. If files in the - current folder cannot be represented as local filenames they will be ignored. - Use :meth:`get_uris` instead. - - .. method:: get_uri() - - Returns the URI for the currently selected file in the file selector. - If multiple files are selected, use :meth:`get_uris` instead. - - .. method:: get_uris() - - Returns a list of all the selected files and subfolders in the current - folder. The returned names are full absolute URIs. - - .. method:: add_filter(filter) - - Adds the :class:`Gtk.FileFilter` instance *filter* to the list of filters - that the user can choose from. When a filter is selected, only files that - are passed by that filter are displayed. - -.. class:: Gtk.FileFilter - - .. method:: set_name(name) - - Sets the human-readable name of the filter; this is the string that will - be displayed in the file selector user interface if there is a selectable - list of filters. - - .. method:: add_mime_type(mime_type) - - Adds a rule allowing a given mime type to filter. - - .. method:: add_pattern(pattern) - - Adds a rule allowing a shell style glob to a filter. - Example ^^^^^^^ diff --git a/source/drag_and_drop.txt b/source/drag_and_drop.txt index a6a063f..9e0148b 100644 --- a/source/drag_and_drop.txt +++ b/source/drag_and_drop.txt @@ -42,87 +42,6 @@ If you require more than one type of data or wish to do more complex things with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method. -Drag and Drop Methods and Objects ---------------------------------- -.. class:: Gtk.Widget - - .. method:: drag_source_set(start_button_mask, targets, actions) - - Sets the widget to be a drag source. - - *start_button_mask* are a combination of :attr:`Gdk.ModifierType` masks which - sets which buttons must be pressed for a drag to occur. - *targets* is a list of :class:`Gtk.TargetEntry's ` which - describe the data to be passed between source and destination. - *actions* are a combination :attr:`Gdk.DragAction` masks to show possible - drag actions. - - .. method:: drag_dest_set(flags, targets, actions) - - Sets the widget to be a drag destination. - - *flags* are a combination of :attr:`Gtk.DestDefaults` masks which configures - the processes which occur on a drag site. - *targets* is a list of :class:`Gtk.TargetEntry's ` which - describe the data to be passed between source and destination. - *actions* are a combination :attr:`Gdk.DragAction` masks to show possible - drag actions. - - .. method:: drag_source_add_text_targets() - drag_dest_add_text_targets() - - Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains - a piece of text. - - .. method:: drag_source_add_image_targets() - drag_dest_add_image_targets() - - Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains - a :class:`GdkPixbuf.Pixbuf`. - - .. method:: drag_source_add_uri_targets() - drag_dest_add_uri_targets() - - Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains - a list of URIs. - -.. class:: Gtk.TargetEntry - - .. staticmethod:: new(target, flags, info) - - Creates a new target entry. - - *target* is a string describing the type of data the target entry describes. - - *flags* controls under which conditions will the data be transferred in a - drag and drop and is a combination of the :attr:`Gtk.TargetFlags` values: - - * :attr:`Gtk.TargetFlags.SAME_APP` - Only transferred in the same application - * :attr:`Gtk.TargetFlags.SAME_WIDGET` - Only transferred within the same widget - * :attr:`Gtk.TargetFlags.OTHER_APP` - Only transferred in a different application - * :attr:`Gtk.TargetFlags.OTHER_WIDGET` - Only transferred within a different widget - - *info* is an ID which the application can use to determine between different - pieces of data contained in a drag and drop operation. - -.. class:: Gtk.SelectionData - - .. method:: get_text() - - Returns the contents of the text contained in selection data - - .. method:: set_text(text) - - Sets the contents of the text contained in selection data to *text* - - .. method:: get_pixbuf() - - Returns the pixbuf contained in selection data - - .. method:: set_pixbuf(pixbuf) - - Sets the pixbuf contained in selection data to *pixbuf* - .. _drag-signals: Drag Source Signals diff --git a/source/entry.txt b/source/entry.txt index 6f6ba5e..ffb7133 100644 --- a/source/entry.txt +++ b/source/entry.txt @@ -28,74 +28,6 @@ or one of the various other functions that set an icon from an icon name, a pixb or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup. -Entry Objects -------------- - -.. class:: Gtk.Entry() - - .. method:: get_text() - - Retrieves the contents of the entry widget. - - .. method:: set_text(text) - - Sets the text in the widget to the given value, replacing the current contents. - - .. method:: set_visibility(visible) - - Sets whether the contents of the entry are visible or not. When *visible* is set - to ``False``, characters are displayed as the invisible char, and will also appear - that way when the text in the entry widget is copied elsewhere. - - .. method:: set_max_length(max) - - Sets the maximum allowed length of the contents of the widget. If the current - contents are longer than the given length, then they will be truncated to fit. - - .. method:: set_editable(is_editable) - - Determines if the user can edit the text in the editable widget or not. - If *is_editable* is ``True``, the user is allowed to edit the text in the widget. - - .. method:: set_progress_fraction(fraction) - - Causes the entry's progress indicator to "fill in" the given fraction of the bar. - The fraction should be between 0.0 and 1.0, inclusive. - - .. method:: set_progress_pulse_step(fraction) - - Sets the fraction of total entry width to move the progress bouncing block for - each call to :meth:`progress_pulse`. - - .. method:: progress_pulse() - - Indicates that some progress is made, but you don't know how much. Causes the - entry's progress indicator to enter "activity mode," where a block bounces - back and forth. Each call to :meth:`progress_pulse` causes the block to move - by a little bit (the amount of movement per pulse is determined by - :meth:`set_progress_pulse_step`). - - .. method:: set_icon_from_stock(icon_pos, stock_id) - - Sets the icon shown in the entry at the specified position from a - :ref:`stock item `. - If *stock_id* is ``None``, no icon will be shown in the specified position. - - *icon_pos* specifies the side of the entry at which an icon is placed and - can be one of - - * :attr:`Gtk.EntryIconPosition.PRIMARY`: - At the beginning of the entry (depending on the text direction). - * :attr:`Gtk.EntryIconPosition.SECONDARY`: - At the end of the entry (depending on the text direction). - - .. method:: set_icon_tooltip_text(icon_pos, tooltip) - - Sets *tooltip* as the contents of the tooltip for the icon at the - specified position. If *tooltip* is ``None``, an existing tooltip is removed. - - For allowed values for *icon_pos* see :meth:`set_icon_from_stock`. - Example ------- diff --git a/source/iconview.txt b/source/iconview.txt index 0abef77..272718c 100644 --- a/source/iconview.txt +++ b/source/iconview.txt @@ -6,255 +6,6 @@ Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk.Lis :class:`Gtk.IconView` supports numerous selection modes to allow for either selecting multiple icons at a time, restricting selections to just one item or disallowing selecting items completely. To specify a selection mode, the :meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:`Gtk.SelectionMode` selection modes. -IconView objects -________________ - -.. class:: Gtk.IconView - - .. staticmethod:: new_with_area(area) - - Creates a new :class:`Gtk.IconView` widget using the specified *area* to layout cells inside the icons. - - .. staticmethod:: new_with_model(model) - - Creates a new :class:`Gtk.IconView` widget with the model *model*. - - .. method:: set_model(model) - - Sets the model for a :class:`Gtk.IconView`. If the :class:`Gtk.IconView` already has a model set, it will remove it before setting the new model. If *model* is ``None``, then it will unset the old model. - - .. method:: get_model() - - Returns the model the :class:`Gtk.IconView` is based on. Returns ``None`` if the model is unset. - - .. method:: set_text_column(column) - - Sets the column with text to be *column*. The text column must be of type ``str``. - - .. method:: get_text_column() - - Return the column with text, or -1 if it's unset. - - .. method:: set_markup_column(column) - - Sets the column with markup information for the :class:`Gtk.IconView` to be *column*. The markup column must be of type ``str``. If the markup column is set to something, it overrides the text column set by :meth:`set_text_column`. - - .. method:: get_markup_column() - - Returns the column with markup text, or -1 if it's unset. - - .. method:: set_pixbuf_column(column) - - Sets the column with pixbufs to be *column*. The pixbuf column must be of type :class:`GdkPixbuf.Pixbuf` - - .. method:: get_pixbuf_column() - - Returns the column with pixbufs, or -1 if it's unset. - - .. method:: get_item_at_pos(x, y) - - Finds the path at the point(*x*, *y*), relative to bin_window coordinates. In contrast to :meth:`get_path_at_pos`, this method also obtains the cell at the specified position. See :meth:`convert_widget_to_bin_window_coords` for converting widget coordinates to bin_window coordinates. - - .. method:: convert_widget_to_bin_coords(x, y) - - Converts widget coordinates to coordinates for the bin_window, as expected by e.g. :meth:`get_path_at_pos` - - .. method:: set_cursor(path, cell, start_editing) - - Sets the current keyboard focus to be at *path*, and selects it. This is useful when you want to focus the user's attention on a particular item. If *cell* is not ``None``, then focus is given to the cell specified by it. Additionally, if *start_editing* is True, then editing should be started in the specified cell. - - This function is often followed by :meth:`grab_focus` in order to give keyboard focus to the widget. Please note that editing can only happen when the widget is realized. - - .. method:: get_cursor() - - Returns the current cursor path and cell. If the cursor isn't currently set, then path will be ``None``. If no cell currently has focus, then cell will be ``None``. - - .. method:: selected_foreach(func, data) - - Calls a function for each selected icon. Note that the model or selection cannot be modified from within this method. - - .. method:: set_selection_mode(mode) - - Sets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`. - - .. method:: get_selection_mode() - - Gets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`. - - .. method:: set_item_orientation(orientation) - - Sets the "item-orientation" property which determines whether the labels are drawn beside the icons instead of below. - - .. method:: get_item_orientation() - - Returns the :class:`Gtk.Orientation` of the "item-orientation" property which determines whether the labels are drawn beside the icons instead of below. - - .. method:: set_columns(columns) - - Sets the "columns" property which determines in how many columns the icons are arranged. If *columns* is -1, the number of columns will be chosen automatically to fill the available area. - - .. method:: get_columns() - - Returns the value of the "columns" property. - - .. method:: set_item_width(item_width) - - Sets the "item-width" property which specifies the width to use for each item. If it is set to -1, the icon view will automatically determine a suitable item size. - - .. method:: get_item_width() - - Returns the value of the "item-width" property. - - .. method:: set_spacing(spacing) - - Sets the "spacing" property which specifies the space which is inserted between the cells (i.e. the icon and the text) of an item. - - .. method:: set_row_spacing(row_spacing) - - Sets the "row-spacing" property which specifies the space which is inserted between the rows of the icon view. - - .. method:: get_row_spacing() - - Returns the value of the "row-spacing" property. - - .. method:: set_column_spacing(column_spacing) - - Sets the "column-spacing" property which specifies the space which is inserted between the columns of the icon view. - - .. method:: get_column_spacing() - - Returns the value of the "column-spacing" property. - - .. method:: set_margin(margin) - - Sets the "margin" property which specifies the space which is inserted at the top, bottom, left and right of the icon view. - - .. method:: get_margin() - - Returns the value of the "margin" property. - - .. method:: set_item_padding(item_padding) - - Sets the "item-padding" property which specifies the padding around each of the icon view's items. - - .. method:: get_item_padding() - - Returns the value of the "item-padding property. - - .. method:: select_path(path) - - Selects the row at *path*. - - .. method:: unselect_path(path) - - Unselects the row at *path*. - - .. method:: path_is_selected(path) - - Returns ``True`` if the icon pointed to by *path* is currently selected. If *path* does not point to a valid location, ``False`` is returned. - - .. method:: get_selected_items() - - Creates a list of paths of all selected items. Additionally, if you are planning on modifying the model after calling this function, you may want to convert the returned list into a list of :class:`Gtk.TreeRowReference `. - - .. method:: select_all() - - Selects all the icons. The :class:`Gtk.IconView` must has its selection mode set to :attr:`Gtk.SelectionMode.MULTIPLE` - - .. method:: unselect_all() - - Unselects all the icons. - - .. method:: scroll_to_path(path, use_align, row_align, col_align) - - Moves the alignments of :class:`Gtk.IconView` to the position specified by *path*. *row_align* determines where the row is placed, the *col_align* determines where *column* is placed. Both are expected to be between 0.0 and 1.0. 0.0 means left/top alignment, 1.0 means right/bottom alignment, 0.5 means center. - - If *use_align* is ``False``, the the alignment arguments are ignored, and the tree does the minimum amount of work to scroll the item onto the screen. This means that the item will be scrolled to the edge closest to its current position. If the item is currently visible on the screen, nothing is done. - - This function only works if the model is set, and *path* is a valid row on the model. If the model changes before the :class:`Gtk.IconView` is realized, the centered path will be modified to reflect this change. - - .. method:: get_visible_range() - - Returns the first and last visible :class:`Gtk.TreePath`. Note that there may be invisible paths in between. - - .. method:: set_tooltip_item(tooltip, path) - - Sets the tip area of *tooltip* to be the area covered by the item at *path*. See also :meth:`set_tooltip_column` for a simpler alternative. See also :meth:`Gtk.Tooltip.set_tip_area`. - - .. method:: set_tooltip_cell(tooltip, path, cell) - - Sets the tip area of *tooltip* to the area which *cell* occupies in the item pointed to by *path*. See also :meth:`Gtk.Tooltip.set_tip_area` - - See also :meth:`set_tooltip_column` for a simpler alternative. - - .. method:: get_tooltip_context(x, y, keyboard_tip) - - This function is supposed to be used in a "query-tooltip" signal handler for :class:`Gtk.IconView`. The *x*, *y* and *keyboard_tip* values which are received in the signal handler, should be passed to this method without modification. - - The return value indicates whether there is an icon view item at the given coordinates (``True``) or not (``False``) for mouse tooltips. For keyboard tooltips the item returned will be the cursor item. When ``True``, then all of the items which have been returned will be set to point to that row and corresponding model. *x* and *y* will always be converted to be relative to the :class:`Gtk.IconView`'s bin_window if *keyboard_tooltip* is ``False``. - - .. method:: set_tooltip_column(column) - - If you only plan to have simple (text-only) tooltips on full items, you can use this function to have :class:`Gtk.IconView` handle these automatically for you. *column* should be set to the column in the :class:`Gtk.IconView`'s model containing the tooltip texts, or -1 to disable this feature. - - When enabled, "has-tooltip" will be set to ``True`` and :class:`Gtk.IconView` will connect a "query-tooltip" signal handler. - - Note that the signal handler sets the text with :meth:`Gtk.Tooltip.set_markup`, so &, <, etc have to be escaped in the text. - - .. method:: get_tooltip_column() - - Returns the column of :class:`Gtk.IconView`'s model which is being used for displaying tooltips on :class:`Gtk.IconView`'s rows, or -1 if this is disabled. - - .. method:: get_item_row(path) - - Gets the row in which the item *path* is currently displayed. Row numbers start at 0. - - .. method:: get_item_column(path) - - Gets the column in which the item *path* is currently displayed. Column numbers start at 0. - - .. method:: enable_model_drag_source(start_button_mask, targets, n_targets, actions) - - Turns :class:`Gtk.IconView` into a drag source for automatic DND. Calling this method sets "reorderable" to ``False``. - - .. method:: enable_model_drag_dest(targets, n_targets, actions) - - Turns :class:`Gtk.IconView` into a drop destination for automatic DND. Calling this method sets "reorderable" to ``False``. - - .. method:: unset_model_drag_source() - - Undoes the effect of :meth:`enable_model_drag_source`. Calling this method sets "reorderable" to ``False``. - - .. method:: unset_model_drag_dest() - - Undoes the effect of :meth:`enable_model_drag_dest`. Calling this method sets "reorderable" to ``False``. - - .. method:: set_reorderable(reorderable) - - This method is a convenience method to allow you to reorder models that support the :class:`Gtk.TreeDragSource` and the :class:`Gtk.TreeDragDest` interfaces. Both :class:`Gtk.TreeStore` and :class:`Gtk.ListStore` support these. If *reorderable* is ``True``, then the user can reorder the model by dragging and dropping rows. The developer can listen to these changes by connecting the model's "row_inserted" and "row_deleted" signals. The reordering is implemented by setting up the icon view as drag source and destination. Therefore, drag and drop can not be used in a reorderable view for any other purpose. - - This function does not give you any degree of control over the order -- any reordering is allowed. If more control is needed, you should probably handle drag and drop manually. - - .. method:: get_reorderable() - - Retrieves whether the user can reorder the list via drag-and-drop. See :meth:`set_reorderable`. - - .. method:: set_drag_dest_item(path, pos) - - Sets the item that is highlighted for feedback. - - .. method:: get_drag_dest_item() - - Gets information about the item that is highlighted for feedback. - - .. method:: get_dest_item_at_pos(drag_x, drag_y) - - Determines the destination item for a given position. - - .. method:: create_drag_icon(path) - - Creates a :class:`Cairo.Surface` representation of the item at *path*. This image is used for a drag icon. - Example _______ diff --git a/source/label.txt b/source/label.txt index 48e0927..51ca8a3 100644 --- a/source/label.txt +++ b/source/label.txt @@ -44,69 +44,6 @@ such as a :class:`Gtk.Button`; if the label is not inside the mnemonic's target widget, you have to tell the label about the target using :meth:`Gtk.Label.set_mnemonic_widget`. -Label Objects -------------- - -.. class:: Gtk.Label([text]) - - Creates a new label with the given *text* inside it. - If *text* is omitted, an empty label is created. - - .. staticmethod:: new_with_mnemonic(text) - - Creates a new label with *text* inside it. - - If characters in *text* are preceded by an underscore, they are underlined. - If you need a literal underscore character in a label, use '__' (two - underscores). The first underlined character represents a keyboard - accelerator called a mnemonic. The mnemonic key can be used to activate - another widget, chosen automatically, or explicitly using - :meth:`Gtk.Label.set_mnemonic_widget`. - - If :meth:`Gtk.Label.set_mnemonic_widget` is not called, then the first - activatable ancestor of the :class:`Gtk.Label` will be chosen as the - mnemonic widget. For instance, if the label is inside a button or menu - item, the button or menu item will automatically become the mnemonic - widget and be activated by the mnemonic. - - .. method:: set_justify(justification) - - Sets the alignment of the lines in the text of the label relative to each other. - *justification* can be one of :attr:`Gtk.Justification.LEFT`, - :attr:`Gtk.Justification.RIGHT`, :attr:`Gtk.Justification.CENTER`, - :attr:`Gtk.Justification.FILL`. - This method has no effect on labels containing only a single line. - - .. method:: set_line_wrap(wrap) - - If *wrap* is ``True``, lines will be broken if text exceeds the widget's size. - If *wrap* is ``False``, text will be cut off by the edge of the widget if it - exceeds the widget size. - - .. method:: set_markup(markup) - - Parses *markup* which is marked up with the Pango text markup language [#pango]_, - setting the label's text accordingly. - The markup passed must be valid; for example literal <, >, & characters must - be escaped as < > and &. - - .. method:: set_mnemonic_widget(widget) - - If the label has been set so that it has an mnemonic key, the label can be - associated with a widget that is the target of the mnemonic. - - .. method:: set_selectable(selectable) - - Selectable labels allow the user to select text from the label, for copy-and-paste. - - .. method:: set_text(text) - - Sets the text within this widget. It overwrites any text that was there before. - - .. method:: set_text_with_mnemonic(text) - - See :meth:`new_with_mnemonic`. - Example ------- diff --git a/source/layout.txt b/source/layout.txt index 5d7d7c2..f0c5344 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -36,73 +36,6 @@ In a vertical box, widgets are packed from top to bottom or vice versa. You may use any combination of boxes inside or beside other boxes to create the desired effect. -Box Objects -^^^^^^^^^^^ - -.. class:: Gtk.Box([homogenous[, spacing]]) - - The rectangular area of a :class:`Gtk.Box` is organized into either a - single row or a single column of child widgets depending upon whether - the "orientation" property is set to :attr:`Gtk.Orientation.HORIZONTAL` or - :attr:`Gtk.Orientation.VERTICAL`. - - If *homogeneous* is ``True``, all widgets in the box will - be the same size, of which the size is determined by the largest - child widget. If it is omitted, *homogeneous* defaults to ``False``. - - *spacing* is the number of pixels to place by default between children. - If omitted, no spacing is used, i.e. *spacing* is set to 0. - - By default, child widgets are organized into a single row, i.e. the - "orientation" property is set to :attr:`Gtk.Orientation.HORIZONTAL`. - - :class:`Gtk.Box` uses a notion of *packing*. Packing refers to adding - widgets with reference to a particular position in a :class:`Gtk.Container`. - For a :class:`Gtk.Box`, there are two reference positions: the start - and the end of the box. - If "orientation" is :attr:`Gtk.Orientation.VERTICAL`, the start is defined - as the top of the box and the end is defined as the bottom. - If "orientation" is :attr:`Gtk.Orientation.HORIZONTAL`, the start is defined - as the left side and the end is defined as the right side. - - .. method:: pack_start(child, expand, fill, padding) - - Adds *child* to box, packed with reference to the start of box. - The *child* is packed after any other child packed with reference - to the start of box. - - *child* should be a :class:`Gtk.Widget` to be added to this box. - The *expand* argument when set to ``True`` allows the *child* widget - to take all available space it can. Alternately, if the value is set - to ``False``, the box will be shrunken to the same size as the child widget. - - If the *fill* argument is set to ``True``, the *child* widget takes all - available space and is equal to the size of the box. This only has an - effect when *expand* is set to ``True``. - A child is always allocated the full height of a horizontally oriented - and the full width of a vertically oriented box. - This option affects the other dimension. - - *padding* defines extra space in pixels to put between this child and - its neighbours, over and above the global amount specified by "spacing" - property. If *child* is a widget at one of the reference ends of box, - then padding pixels are also put between *child* and the reference edge - of this box. - - .. method:: pack_end(child, expand, fill, padding) - - Adds *child* to box, packed with reference to the end of box. - The *child* is packed after (away from end of) any other child - packed with reference to the end of box. - - Arguments are the same as for :meth:`pack_start`. - - .. method:: set_homogeneous(homogeneous) - - If *homogeneous* is ``True``, all widgets in the box will - be the same size, of which the size is determined by the largest - child widget. - Example ^^^^^^^ @@ -141,38 +74,6 @@ columns. It is also possible to add a child next to an existing child, using direction determined by the "orientation" property (defaults to :attr:`Gtk.Orientation.HORIZONTAL`). -Grid Objects -^^^^^^^^^^^^ -.. class:: Gtk.Grid - - Creates a new grid widget. - - .. method:: attach(child, left, top, width, height) - - Adds *child* to this grid. - - The position of *child* is determined by the index of the cell left to - it (*left*) and above of it (*top*). The number of 'cells' that *child* - will occupy is determined by *width* and *height*. - - .. method:: attach_next_to(child, sibling, side, width, height) - - Adds *child* to this grid, next to *sibling*. *side* is the side of - *sibling* that *child* is positioned next to. It can be one of - - * :attr:`Gtk.PositionType.LEFT` - * :attr:`Gtk.PositionType.RIGHT` - * :attr:`Gtk.PositionType.TOP` - * :attr:`Gtk.PositionType.BOTTOM` - - *width* and *height* determine the number of 'cells' that *child* will - occupy. - - .. method:: add(widget) - - Adds *widget* to this grid in the direction determined by the - "orientation" property. - Example ^^^^^^^ @@ -198,81 +99,6 @@ You can also set a consistent spacing for all rows and/or columns with :meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note that with these calls, the last row and last column do not get any spacing. -Table Objects -^^^^^^^^^^^^^ - -.. deprecated:: 3.4 - Use :class:`Gtk.Grid` instead. - -.. class:: Gtk.Table(rows, columns, homogeneous) - - The first argument is the number of rows to make in the table, while the - second, obviously, is the number of columns. If *homogeneous* is ``True``, - the table cells will all be the same size (the size of the largest widget - in the table). - - .. method:: attach(child, left_attach, right_attach, top_attach, bottom_attach, [xoptions, [yoptions, [xpadding, [ypadding]]]]) - - Adds a widget to a table. - - *child* is the widget that should be added to the table. - The number of 'cells' that a widget will occupy is specified by - *left_attach*, *right_attach*, *top_attach* and *bottom_attach*. - These each represent the leftmost, rightmost, uppermost and - lowest column and row numbers of the table. - (Columns and rows are indexed from zero). - - For example, if you want a button in the lower-right cell of a - 2 x 2 table, and want it to occupy that cell only, then the code - looks like the following. - - .. code-block:: python - - button = Gtk.Button() - table = Gtk.Table(2, 2, True) - table.attach(button, 1, 2, 1, 2) - - If, on the other hand, you wanted a widget to take up the entire - top row of our 2 x 2 table, you'd use - - .. code-block:: python - - table.attach(button, 0, 2, 0, 1) - - *xoptions* and *yoptions* are used to specify packing options and may be - bitwise ORed together to allow multiple options. These options are: - - * :attr:`Gtk.AttachOptions.EXPAND`: The widget should expand to take up - any extra space in its container that has been allocated. - * :attr:`Gtk.AttachOptions.FILL`: The widget will expand to use all the - room available. - * :attr:`Gtk.AttachOptions.SHRINK`: Reduce size allocated to the widget - to prevent it from moving off screen. - - If omitted, *xoptions* and *yoptions* defaults to - ``Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL``. - - Finally, the padding arguments work just as they do for - :meth:`Gtk.Box.pack_start`. - If omitted, *xpadding* and *ypadding* defaults to ``0``. - - .. method:: set_row_spacing(row, spacing) - - Changes the space between a given table row and the subsequent row. - - .. method:: set_col_spacing(col, spacing) - - Alters the amount of space between a given table column and the - following column. - - .. method:: set_row_spacings(spacing) - - Sets the space between every row in this table equal to *spacing*. - - .. method:: set_col_spacings(spacing) - - Sets the space between every column in this table equal to *spacing*. - Example ^^^^^^^ diff --git a/source/menus.txt b/source/menus.txt index 06d2801..8613306 100644 --- a/source/menus.txt +++ b/source/menus.txt @@ -51,148 +51,6 @@ or by calling one of the convenience functions: Note that you must specify actions for sub menus as well as menu items. -Action Objects -^^^^^^^^^^^^^^ - -.. class:: Gtk.Action(name, label, tooltip, stock_id) - - *name* must be a unique name of the action. - - If *label* is not ``None``, it is displayed in menu items and on buttons. - - If *tooltip* is not ``None``, it is used as tooltip for the action. - - If *stock_id* is not ``None``, it is used to lookup the - :ref:`stock item ` to display - in widgets representing the action. - -.. class:: Gtk.ToggleAction(name, label, tooltip, stock_id) - - The arguments are the same as for the :class:`Gtk.Action` constructor. - -.. class:: Gtk.RadioAction(name, label, tooltip, stock_id, value) - - The first four arguments are the same as for the :class:`Gtk.Action` constructor. - - *value* indicates the value which :meth:`get_current_value` should return if - this action is selected. - - .. method:: get_current_value() - - Obtains the "value" property of the currently active member of the group - to which this action belongs. - - .. method:: join_group(group_source) - - Joins this radio action object to the group of the *group_source* radio - action object. - - *group_source* must be a radio action object whose group we are joining, - or ``None`` to remove the radio action from its group. - -.. class:: Gtk.ActionGroup(name) - - Creates a new :class:`Gtk.ActionGroup` instance. The name of the action group - is used when associating keybindings with the actions. - - .. method:: add_action(action) - - Adds an :class:`Gtk.Action` object to the action group. - - Note that this method does not set up the accelerator path of the action, - use :meth:`add_action_with_accel` instead. - - .. method:: add_action_with_accel(action, accelerator) - - Adds an :class:`Gtk.Action` object to the action group and sets up the - accelerator. - - *accelerator* must be in the format understood by :func:`Gtk.accelerator_parse`, - or ``""`` for no accelerator, or ``None`` to use the stock accelerator. - - .. method:: add_actions(entries[, user_data]) - - This is a convenience function to create a number of :class:`Gtk.Action` - objects and add them to this action group. - - *entries* is a list of tuples which can vary in size from one to six - items with the following information: - - * The name of the action (mandatory) - * The :ref:`stock item ` of the action (default: ``None``) - * The label for the action (default: ``None``) - * The accelerator for the action, in the format understood by the - :func:`Gtk.accelerator_parse` function (default: ``None``) - * The tooltip of the action (default: ``None``) - * The callback function invoked when the action is activated - (default: ``None``) - - The "activate" signals of the actions are connected to the callbacks. - - If *user_data* is not ``None``, it is passed to the callback function - (if specified). - - .. method:: add_toggle_actions(entries[, user_data]) - - This is a convenience function to create a number of - :class:`Gtk.ToggleAction` objects and add them to this action group. - - *entries* is a list of tuples which can vary in size from one to seven - items with the following information: - - * The name of the action (mandatory) - * The :ref:`stock item ` of the action (default: ``None``) - * The label for the action (default: ``None``) - * The accelerator for the action, in the format understood by the - :func:`Gtk.accelerator_parse` function (default: ``None``) - * The tooltip of the action (default: ``None``) - * The callback function invoked when the action is activated - (default: ``None``) - * A Boolean indicating whether the toggle action is active - (default: ``False``) - - The "activate" signals of the actions are connected to the callbacks. - - If *user_data* is not ``None``, it is passed to the callback function - (if specified). - - .. method:: add_radio_actions(entries[, value[, on_change[, user_data]]]) - - This is a convenience routine to create a group of :class:`Gtk.RadioAction` - objects and add them to this action group. - - *entries* is a list of tuples which can vary in size from one to six - items with the following information: - - * The name of the action (mandatory) - * The :ref:`stock item ` of the action (default: ``None``) - * The label for the action (default: ``None``) - * The accelerator for the action, in the format understood by the - :func:`Gtk.accelerator_parse` function (default: ``None``) - * The tooltip of the action (default: ``None``) - * The value to set on the radio action (default: 0) - - *value* specifies the radio action that should be set active. - - The "changed" signal of the first radio action is connected to - the *on_change* callback (if specified). - - If *user_data* is not ``None``, it is passed to the callback function - (if specified). - -.. function:: Gtk.accelerator_parse(accelerator) - - Parses a string representing an accelerator. The format looks like - "a" or "F1" or "z" (the last one is for key release). - The parser is fairly liberal and allows lower or upper case, and also - abbreviations such as "" and "". - For character keys the name is not the symbol, but the lowercase name, e.g. - one would use "minus" instead of "-". - - Returns a tuple ``(accelerator_key, accelerator_mods)``, where the latter - represents the accelerator modifier mask and the first the accelerator keyval. - Both values will be set to 0 (zero) if parsing failed. - UI Manager ---------- @@ -214,46 +72,6 @@ toolbars. We provided those human-readable names when we created the actions. Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` and add the widget to a container such as :class:`Gtk.Box`. -UIManager Objects -^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.UIManager - - .. method:: insert_action_group(action_group[, pos]) - - Inserts an action group into the list of action groups associated with - this manager. Actions in earlier groups hide actions with the same name - in later groups. - - *pos* is the position at which the group will be inserted. If omitted, - it will be appended. - - .. method:: get_accel_group() - - Returns the group of global keyboard accelerators associated with this - manager. - - .. method:: get_widget(path) - - Looks up a widget by following a path. The path consists of the names - specified in the XML description of the UI. separated by '/'. Elements - which don't have a name or action attribute in the XML (e.g. ) - can be addressed by their XML element name (e.g. "popup"). The root - element ("/ui") can be omitted in the path. - - Returns the widget found by following the *path*, or ``None`` if no - widget was found. - - .. method:: add_ui_from_string(text) - - Parses *text* containing a `UI definition `_ - and merges it with the current contents of manager. An enclosing - element is added if it is missing. - - Returns the merge id for the merged UI. - - Throws an exception if an error occurred. - Example ------- diff --git a/source/progressbar.txt b/source/progressbar.txt index 9057c19..805c94a 100644 --- a/source/progressbar.txt +++ b/source/progressbar.txt @@ -28,51 +28,6 @@ progress bar grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk.ProgressBar` can also contain text which can be set by calling :meth:`Gtk.ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`. -ProgressBar Objects -------------------- - -.. class:: Gtk.ProgressBar() - - .. method:: set_fraction(fraction) - - Causes the progress bar to "fill in" the given fraction of the bar. - *fraction* should be between 0.0 and 1.0, inclusive. - - .. method:: set_pulse_step(fraction) - - Sets the fraction of total progress bar length to move the bouncing - block for each call to :meth:`pulse`. - - .. method:: pulse() - - Indicates that some progress is made, but you don't know how much. - Causes the progress bar to enter *activity mode*, where a block - bounces back and forth. Each call to :meth:`pulse` causes the block - to move by a little bit (the amount of movement per pulse is determined - by :meth:`set_pulse_step`). - - .. method:: set_orientation(orientation) - - Sets the orientation. *orientation* can be one of - - * :attr:`Gtk.Orientation.HORIZONTAL` - * :attr:`Gtk.Orientation.VERTICAL` - - .. method:: set_show_text(show_text) - - Sets whether the progressbar will show text superimposed over the bar. - The shown text is either the value of the "text" property or, if that - is ``None``, the "fraction" value, as a percentage. - - .. method:: set_text(text) - - Causes the given *text* to appear superimposed on the progress bar. - - .. method:: set_inverted(inverted) - - Progress bars normally grow from top to bottom or left to right. - Inverted progress bars grow in the opposite direction. - Example ------- diff --git a/source/spinner.txt b/source/spinner.txt index f8b3852..3dde3ec 100644 --- a/source/spinner.txt +++ b/source/spinner.txt @@ -8,19 +8,6 @@ for displaying indefinite activity, instead of actual progress. To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:`Gtk.Spinner.stop`. -Spinner Objects ----------------- - -.. class:: Gtk.Spinner() - - .. method:: start() - - Starts the animation of the spinner. - - .. method:: stop() - - Stops the animation of the spinner. - Example ------- diff --git a/source/stock.txt b/source/stock.txt index e5dcfeb..01fdaed 100644 --- a/source/stock.txt +++ b/source/stock.txt @@ -5,138 +5,138 @@ Stock Items Stock items represent commonly-used menu or toolbar items such as "Open" or "Exit". Each stock item is identified by a stock ID; stock IDs are just strings, -but constants such as :attr:`Gtk.STOCK_OPEN` are provided to avoid typing mistakes +but constants such as :obj:`Gtk.STOCK_OPEN` are provided to avoid typing mistakes in the strings. -.. attribute:: Gtk.STOCK_ABOUT +* :obj:`Gtk.STOCK_ABOUT` .. image:: ../images/stock/help-about.png -.. attribute:: Gtk.STOCK_ADD +* :obj:`Gtk.STOCK_ADD` .. image:: ../images/stock/list-add.png -.. attribute:: Gtk.STOCK_APPLY +* :obj:`Gtk.STOCK_APPLY` .. image:: ../images/stock/gtk-apply.png -.. attribute:: Gtk.STOCK_BOLD +* :obj:`Gtk.STOCK_BOLD` .. image:: ../images/stock/format-text-bold.png -.. attribute:: Gtk.STOCK_CANCEL +* :obj:`Gtk.STOCK_CANCEL` .. image:: ../images/stock/gtk-cancel.png -.. attribute:: Gtk.STOCK_CAPS_LOCK_WARNING +* :obj:`Gtk.STOCK_CAPS_LOCK_WARNING` .. image:: ../images/stock/gtk-caps-lock-warning.png -.. attribute:: Gtk.STOCK_CDROM +* :obj:`Gtk.STOCK_CDROM` .. image:: ../images/stock/media-optical.png -.. attribute:: Gtk.STOCK_CLEAR +* :obj:`Gtk.STOCK_CLEAR` .. image:: ../images/stock/edit-clear.png -.. attribute:: Gtk.STOCK_CLOSE +* :obj:`Gtk.STOCK_CLOSE` .. image:: ../images/stock/window-close.png -.. attribute:: Gtk.STOCK_COLOR_PICKER +* :obj:`Gtk.STOCK_COLOR_PICKER` .. image:: ../images/stock/gtk-color-picker.png -.. attribute:: Gtk.STOCK_CONNECT +* :obj:`Gtk.STOCK_CONNECT` .. image:: ../images/stock/gtk-connect.png -.. attribute:: Gtk.STOCK_CONVERT +* :obj:`Gtk.STOCK_CONVERT` .. image:: ../images/stock/gtk-convert.png -.. attribute:: Gtk.STOCK_COPY +* :obj:`Gtk.STOCK_COPY` .. image:: ../images/stock/edit-copy.png -.. attribute:: Gtk.STOCK_CUT +* :obj:`Gtk.STOCK_CUT` .. image:: ../images/stock/edit-cut.png -.. attribute:: Gtk.STOCK_DELETE +* :obj:`Gtk.STOCK_DELETE` .. image:: ../images/stock/edit-delete.png -.. attribute:: Gtk.STOCK_DIALOG_AUTHENTICATION +* :obj:`Gtk.STOCK_DIALOG_AUTHENTICATION` .. image:: ../images/stock/dialog-password.png -.. attribute:: Gtk.STOCK_DIALOG_INFO +* :obj:`Gtk.STOCK_DIALOG_INFO` .. image:: ../images/stock/dialog-information.png -.. attribute:: Gtk.STOCK_DIALOG_WARNING +* :obj:`Gtk.STOCK_DIALOG_WARNING` .. image:: ../images/stock/dialog-warning.png -.. attribute:: Gtk.STOCK_DIALOG_ERROR +* :obj:`Gtk.STOCK_DIALOG_ERROR` .. image:: ../images/stock/dialog-error.png -.. attribute:: Gtk.STOCK_DIALOG_QUESTION +* :obj:`Gtk.STOCK_DIALOG_QUESTION` .. image:: ../images/stock/dialog-question.png -.. attribute:: Gtk.STOCK_DISCARD +* :obj:`Gtk.STOCK_DISCARD` .. image:: ../images/stock/folder.png -.. attribute:: Gtk.STOCK_DISCONNECT +* :obj:`Gtk.STOCK_DISCONNECT` .. image:: ../images/stock/gtk-disconnect.png -.. attribute:: Gtk.STOCK_DND +* :obj:`Gtk.STOCK_DND` .. image:: ../images/stock/gtk-dnd.png -.. attribute:: Gtk.STOCK_DND_MULTIPLE +* :obj:`Gtk.STOCK_DND_MULTIPLE` .. image:: ../images/stock/gtk-dnd-multiple.png -.. attribute:: Gtk.STOCK_EDIT +* :obj:`Gtk.STOCK_EDIT` .. image:: ../images/stock/gtk-edit.png -.. attribute:: Gtk.STOCK_EXECUTE +* :obj:`Gtk.STOCK_EXECUTE` .. image:: ../images/stock/system-run.png -.. attribute:: Gtk.STOCK_FILE +* :obj:`Gtk.STOCK_FILE` .. image:: ../images/stock/text-x-generic.png -.. attribute:: Gtk.STOCK_FIND +* :obj:`Gtk.STOCK_FIND` .. image:: ../images/stock/edit-find.png -.. attribute:: Gtk.STOCK_FIND_AND_REPLACE +* :obj:`Gtk.STOCK_FIND_AND_REPLACE` .. image:: ../images/stock/edit-find-replace.png -.. attribute:: Gtk.STOCK_FLOPPY +* :obj:`Gtk.STOCK_FLOPPY` .. image:: ../images/stock/media-floppy.png -.. attribute:: Gtk.STOCK_FULLSCREEN +* :obj:`Gtk.STOCK_FULLSCREEN` .. image:: ../images/stock/view-fullscreen.png -.. attribute:: Gtk.STOCK_GOTO_BOTTOM +* :obj:`Gtk.STOCK_GOTO_BOTTOM` .. image:: ../images/stock/go-bottom.png -.. attribute:: Gtk.STOCK_GOTO_FIRST +* :obj:`Gtk.STOCK_GOTO_FIRST` LTR variant: @@ -146,7 +146,7 @@ in the strings. .. image:: ../images/stock/go-first-rtl.png -.. attribute:: Gtk.STOCK_GOTO_LAST +* :obj:`Gtk.STOCK_GOTO_LAST` LTR variant: @@ -156,11 +156,11 @@ in the strings. .. image:: ../images/stock/go-last-rtl.png -.. attribute:: Gtk.STOCK_GOTO_TOP +* :obj:`Gtk.STOCK_GOTO_TOP` .. image:: ../images/stock/go-top.png -.. attribute:: Gtk.STOCK_GO_BACK +* :obj:`Gtk.STOCK_GO_BACK` LTR variant: @@ -170,11 +170,11 @@ in the strings. .. image:: ../images/stock/go-previous-rtl.png -.. attribute:: Gtk.STOCK_GO_DOWN +* :obj:`Gtk.STOCK_GO_DOWN` .. image:: ../images/stock/go-down.png -.. attribute:: Gtk.STOCK_GO_FORWARD +* :obj:`Gtk.STOCK_GO_FORWARD` LTR variant: @@ -184,27 +184,27 @@ in the strings. .. image:: ../images/stock/go-next-rtl.png -.. attribute:: Gtk.STOCK_GO_UP +* :obj:`Gtk.STOCK_GO_UP` .. image:: ../images/stock/go-up.png -.. attribute:: Gtk.STOCK_HARDDISK +* :obj:`Gtk.STOCK_HARDDISK` .. image:: ../images/stock/drive-harddisk.png -.. attribute:: Gtk.STOCK_HELP +* :obj:`Gtk.STOCK_HELP` .. image:: ../images/stock/help-contents.png -.. attribute:: Gtk.STOCK_HOME +* :obj:`Gtk.STOCK_HOME` .. image:: ../images/stock/go-home.png -.. attribute:: Gtk.STOCK_INDEX +* :obj:`Gtk.STOCK_INDEX` .. image:: ../images/stock/gtk-index.png -.. attribute:: Gtk.STOCK_INDENT +* :obj:`Gtk.STOCK_INDENT` LTR variant: @@ -214,15 +214,15 @@ in the strings. .. image:: ../images/stock/format-indent-more-rtl.png -.. attribute:: Gtk.STOCK_INFO +* :obj:`Gtk.STOCK_INFO` .. image:: ../images/stock/dialog-information.png -.. attribute:: Gtk.STOCK_ITALIC +* :obj:`Gtk.STOCK_ITALIC` .. image:: ../images/stock/format-text-italic.png -.. attribute:: Gtk.STOCK_JUMP_TO +* :obj:`Gtk.STOCK_JUMP_TO` LTR variant: @@ -232,31 +232,31 @@ in the strings. .. image:: ../images/stock/go-jump-rtl.png -.. attribute:: Gtk.STOCK_JUSTIFY_CENTER +* :obj:`Gtk.STOCK_JUSTIFY_CENTER` .. image:: ../images/stock/format-justify-center.png -.. attribute:: Gtk.STOCK_JUSTIFY_FILL +* :obj:`Gtk.STOCK_JUSTIFY_FILL` .. image:: ../images/stock/format-justify-fill.png -.. attribute:: Gtk.STOCK_JUSTIFY_LEFT +* :obj:`Gtk.STOCK_JUSTIFY_LEFT` .. image:: ../images/stock/format-justify-left.png -.. attribute:: Gtk.STOCK_JUSTIFY_RIGHT +* :obj:`Gtk.STOCK_JUSTIFY_RIGHT` .. image:: ../images/stock/format-justify-right.png -.. attribute:: Gtk.STOCK_LEAVE_FULLSCREEN +* :obj:`Gtk.STOCK_LEAVE_FULLSCREEN` .. image:: ../images/stock/view-restore.png -.. attribute:: Gtk.STOCK_MISSING_IMAGE +* :obj:`Gtk.STOCK_MISSING_IMAGE` .. image:: ../images/stock/image-missing.png -.. attribute:: Gtk.STOCK_MEDIA_FORWARD +* :obj:`Gtk.STOCK_MEDIA_FORWARD` LTR variant: @@ -266,7 +266,7 @@ in the strings. .. image:: ../images/stock/media-seek-forward-rtl.png -.. attribute:: Gtk.STOCK_MEDIA_NEXT +* :obj:`Gtk.STOCK_MEDIA_NEXT` LTR variant: @@ -276,11 +276,11 @@ in the strings. .. image:: ../images/stock/media-skip-forward-rtl.png -.. attribute:: Gtk.STOCK_MEDIA_PAUSE +* :obj:`Gtk.STOCK_MEDIA_PAUSE` .. image:: ../images/stock/media-playback-pause.png -.. attribute:: Gtk.STOCK_MEDIA_PLAY +* :obj:`Gtk.STOCK_MEDIA_PLAY` LTR variant: @@ -290,7 +290,7 @@ in the strings. .. image:: ../images/stock/media-playback-start-rtl.png -.. attribute:: Gtk.STOCK_MEDIA_PREVIOUS +* :obj:`Gtk.STOCK_MEDIA_PREVIOUS` LTR variant: @@ -300,11 +300,11 @@ in the strings. .. image:: ../images/stock/media-skip-backward-rtl.png -.. attribute:: Gtk.STOCK_MEDIA_RECORD +* :obj:`Gtk.STOCK_MEDIA_RECORD` .. image:: ../images/stock/media-record.png -.. attribute:: Gtk.STOCK_MEDIA_REWIND +* :obj:`Gtk.STOCK_MEDIA_REWIND` LTR variant: @@ -314,91 +314,91 @@ in the strings. .. image:: ../images/stock/media-seek-backward-rtl.png -.. attribute:: Gtk.STOCK_MEDIA_STOP +* :obj:`Gtk.STOCK_MEDIA_STOP` .. image:: ../images/stock/media-playback-stop.png -.. attribute:: Gtk.STOCK_NETWORK +* :obj:`Gtk.STOCK_NETWORK` .. image:: ../images/stock/network-idle.png -.. attribute:: Gtk.STOCK_NEW +* :obj:`Gtk.STOCK_NEW` .. image:: ../images/stock/document-new.png -.. attribute:: Gtk.STOCK_NO +* :obj:`Gtk.STOCK_NO` .. image:: ../images/stock/gtk-no.png -.. attribute:: Gtk.STOCK_OK +* :obj:`Gtk.STOCK_OK` .. image:: ../images/stock/gtk-ok.png -.. attribute:: Gtk.STOCK_OPEN +* :obj:`Gtk.STOCK_OPEN` .. image:: ../images/stock/document-open.png -.. attribute:: Gtk.STOCK_ORIENTATION_PORTRAIT +* :obj:`Gtk.STOCK_ORIENTATION_PORTRAIT` .. image:: ../images/stock/gtk-orientation-portrait.png -.. attribute:: Gtk.STOCK_ORIENTATION_LANDSCAPE +* :obj:`Gtk.STOCK_ORIENTATION_LANDSCAPE` .. image:: ../images/stock/gtk-orientation-landscape.png -.. attribute:: Gtk.STOCK_ORIENTATION_REVERSE_LANDSCAPE +* :obj:`Gtk.STOCK_ORIENTATION_REVERSE_LANDSCAPE` .. image:: ../images/stock/gtk-orientation-reverse-landscape.png -.. attribute:: Gtk.STOCK_ORIENTATION_REVERSE_PORTRAIT +* :obj:`Gtk.STOCK_ORIENTATION_REVERSE_PORTRAIT` .. image:: ../images/stock/gtk-orientation-reverse-portrait.png -.. attribute:: Gtk.STOCK_PAGE_SETUP +* :obj:`Gtk.STOCK_PAGE_SETUP` .. image:: ../images/stock/gtk-page-setup.png -.. attribute:: Gtk.STOCK_PASTE +* :obj:`Gtk.STOCK_PASTE` .. image:: ../images/stock/edit-paste.png -.. attribute:: Gtk.STOCK_PREFERENCES +* :obj:`Gtk.STOCK_PREFERENCES` .. image:: ../images/stock/gtk-preferences.png -.. attribute:: Gtk.STOCK_PRINT +* :obj:`Gtk.STOCK_PRINT` .. image:: ../images/stock/document-print.png -.. attribute:: Gtk.STOCK_PRINT_ERROR +* :obj:`Gtk.STOCK_PRINT_ERROR` .. image:: ../images/stock/printer-error.png -.. attribute:: Gtk.STOCK_PRINT_PAUSED +* :obj:`Gtk.STOCK_PRINT_PAUSED` .. image:: ../images/stock/printer-paused.png -.. attribute:: Gtk.STOCK_PRINT_PREVIEW +* :obj:`Gtk.STOCK_PRINT_PREVIEW` .. image:: ../images/stock/document-print-preview.png -.. attribute:: Gtk.STOCK_PRINT_REPORT +* :obj:`Gtk.STOCK_PRINT_REPORT` .. image:: ../images/stock/printer-info.png -.. attribute:: Gtk.STOCK_PRINT_WARNING +* :obj:`Gtk.STOCK_PRINT_WARNING` .. image:: ../images/stock/printer-warning.png -.. attribute:: Gtk.STOCK_PROPERTIES +* :obj:`Gtk.STOCK_PROPERTIES` .. image:: ../images/stock/document-properties.png -.. attribute:: Gtk.STOCK_QUIT +* :obj:`Gtk.STOCK_QUIT` .. image:: ../images/stock/application-exit.png -.. attribute:: Gtk.STOCK_REDO +* :obj:`Gtk.STOCK_REDO` LTR variant: @@ -408,15 +408,15 @@ in the strings. .. image:: ../images/stock/edit-redo-rtl.png -.. attribute:: Gtk.STOCK_REFRESH +* :obj:`Gtk.STOCK_REFRESH` .. image:: ../images/stock/view-refresh.png -.. attribute:: Gtk.STOCK_REMOVE +* :obj:`Gtk.STOCK_REMOVE` .. image:: ../images/stock/list-remove.png -.. attribute:: Gtk.STOCK_REVERT_TO_SAVED +* :obj:`Gtk.STOCK_REVERT_TO_SAVED` LTR variant: @@ -426,47 +426,47 @@ in the strings. .. image:: ../images/stock/document-revert-rtl.png -.. attribute:: Gtk.STOCK_SAVE +* :obj:`Gtk.STOCK_SAVE` .. image:: ../images/stock/document-save.png -.. attribute:: Gtk.STOCK_SAVE_AS +* :obj:`Gtk.STOCK_SAVE_AS` .. image:: ../images/stock/document-save-as.png -.. attribute:: Gtk.STOCK_SELECT_ALL +* :obj:`Gtk.STOCK_SELECT_ALL` .. image:: ../images/stock/edit-select-all.png -.. attribute:: Gtk.STOCK_SELECT_COLOR +* :obj:`Gtk.STOCK_SELECT_COLOR` .. image:: ../images/stock/gtk-select-color.png -.. attribute:: Gtk.STOCK_SELECT_FONT +* :obj:`Gtk.STOCK_SELECT_FONT` .. image:: ../images/stock/gtk-font.png -.. attribute:: Gtk.STOCK_SORT_ASCENDING +* :obj:`Gtk.STOCK_SORT_ASCENDING` .. image:: ../images/stock/view-sort-ascending.png -.. attribute:: Gtk.STOCK_SORT_DESCENDING +* :obj:`Gtk.STOCK_SORT_DESCENDING` .. image:: ../images/stock/view-sort-descending.png -.. attribute:: Gtk.STOCK_SPELL_CHECK +* :obj:`Gtk.STOCK_SPELL_CHECK` .. image:: ../images/stock/tools-check-spelling.png -.. attribute:: Gtk.STOCK_STOP +* :obj:`Gtk.STOCK_STOP` .. image:: ../images/stock/process-stop.png -.. attribute:: Gtk.STOCK_STRIKETHROUGH +* :obj:`Gtk.STOCK_STRIKETHROUGH` .. image:: ../images/stock/format-text-strikethrough.png -.. attribute:: Gtk.STOCK_UNDELETE +* :obj:`Gtk.STOCK_UNDELETE` LTR variant: @@ -476,11 +476,11 @@ in the strings. .. image:: ../images/stock/gtk-undelete-rtl.png -.. attribute:: Gtk.STOCK_UNDERLINE +* :obj:`Gtk.STOCK_UNDERLINE` .. image:: ../images/stock/format-text-underline.png -.. attribute:: Gtk.STOCK_UNDO +* :obj:`Gtk.STOCK_UNDO` LTR variant: @@ -490,7 +490,7 @@ in the strings. .. image:: ../images/stock/edit-undo-rtl.png -.. attribute:: Gtk.STOCK_UNINDENT +* :obj:`Gtk.STOCK_UNINDENT` LTR variant: @@ -500,19 +500,18 @@ in the strings. .. image:: ../images/stock/format-indent-less-rtl.png -.. attribute:: Gtk.STOCK_YES +* :obj:`Gtk.STOCK_YES` .. image:: ../images/stock/gtk-yes.png -.. attribute:: Gtk.STOCK_ZOOM_100 +* :obj:`Gtk.STOCK_ZOOM_100` .. image:: ../images/stock/zoom-original.png -.. attribute:: Gtk.STOCK_ZOOM_FIT +* :obj:`Gtk.STOCK_ZOOM_FIT` .. image:: ../images/stock/zoom-fit-best.png -.. attribute:: Gtk.STOCK_ZOOM_IN +* :obj:`Gtk.STOCK_ZOOM_IN` .. image:: ../images/stock/zoom-in.png - diff --git a/source/textview.txt b/source/textview.txt index 119a564..d9bd961 100644 --- a/source/textview.txt +++ b/source/textview.txt @@ -32,54 +32,6 @@ Another default setting of the :class:`Gtk.TextView` widget is long lines of text will continue horizontally until a break is entered. To wrap the text and prevent it going off the edges of the screen call :meth:`Gtk.TextView.set_wrap_mode`. -TextView Objects -^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TextView - - Creates a new :class:`Gtk.TextView` associated with an empty default - :class:`Gtk.TextBuffer`. - - .. method:: get_buffer() - - Returns the :class:`Gtk.TextBuffer` being displayed by this text view. - - .. method:: set_editable(editable) - - Sets the default editability of this :class:`Gtk.TextView`. - - .. method:: set_cursor_visible(visible) - - Toggles whether the insertion point is displayed. A buffer with no - editable text probably shouldn't have a visible cursor, so you may want - to turn the cursor off. - - .. method:: set_justification(justification) - - Sets the default justification of text. - - *justification* can be one of the following values: - - * :attr:`Gtk.Justification.LEFT`: Text is placed at the left edge. - * :attr:`Gtk.Justification.RIGHT`: Text is placed at the right edge. - * :attr:`Gtk.Justification.CENTER`: Text is placed in the center. - * :attr:`Gtk.Justification.FILL`: Text is distributed across the - complete width. - - .. method:: set_wrap_mode(wrap_mode) - - Sets the line wrapping for the view. - - *wrap_mode* can be one of the following values: - - * :attr:`Gtk.WrapMode.NONE`: Do not wrap lines; just make the text area - wider. - * :attr:`Gtk.WrapMode.CHAR`: Wrap text, breaking lines anywhere the cursor - can appear (between characters, usually). - * :attr:`Gtk.WrapMode.WORD`: Wrap text, breaking lines in between words. - * :attr:`Gtk.WrapMode.WORD_CHAR`: Wrap text, breaking lines in between - words, or if that is not enough, also between `graphemes`_. - The Model --------- @@ -119,139 +71,6 @@ buffer using :meth:`Gtk.TextIter.forward_search` and The start and end iters are used as the starting point of the search and move forwards/backwards depending on requirements. -TextBuffer Objects -^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TextBuffer - - .. method:: set_text(text[, length]) - - Deletes current contents of this buffer, and inserts *length* characters - of *text* instead. If *length* is -1 or omitted, *text* is inserted - completely. - - .. method:: get_text(start_iter, end_iter, include_hidden_chars) - - Returns the text in the range *start_iter* (included) and *end_iter* - (excluded). Excludes undisplayed text if *include_hidden_chars* is ``False``. - - .. method:: get_insert() - - Returns the :class:`Gtk.TextMark` that represents the cursor (insertion - point). - - .. method:: get_selection_bound() - - Returns the :class:`Gtk.TextMark` that represents the selection bound. - - .. method:: create_mark(mark_name, where[, left_gravity]) - - Creates a :class:`Gtk.TextMark` at the position of the :class:`Gtk.TextIter` - *where*. If *mark_name* is ``None``, the mark is anonymous; otherwise, - the mark can be retrieved by name using :meth:`get_mark`. If a mark has - left gravity, and text is inserted at the mark's current location, - the mark will be moved to the left of the newly-inserted text. - If the mark has right gravity (*left_gravity* is ``False``), the mark will - end up on the right of newly-inserted text. The standard left-to-right - cursor is a mark with right gravity (when you type, the cursor stays on - the right side of the text you're typing). - - If *left_gravity* is omitted, it defaults to ``False``. - - .. method:: get_mark(mark_name) - - Returns the :class:`Gtk.TextMark` named name in this buffer, or ``None`` - if no such mark exists in the buffer. - - .. method:: get_start_iter() - - Returns a :class:`Gtk.TextIter` pointing to first position in this buffer. - - .. method:: get_end_iter() - - Returns a :class:`Gtk.TextIter` pointing past the last valid character - in this buffer. - - .. method:: get_selection_bounds() - - Returns a tuple of two :class:`Gtk.TextIter` objects pointing to the - first character of the selection and to the first character after the - selection, respectively. If no text is selected an empty tuple is returned. - - .. method:: insert(text_iter, text[, length]) - - Inserts *length* characters of *text* at position *text_iter*. - If *length* is -1 or omitted, *text* is inserted completely. - - .. method:: insert_at_cursor(text[, length]) - - Simply calls :meth:`insert`, using the current cursor position as the - insertion point. - - .. method:: delete(start_iter, end_iter) - - Deletes text between *start_iter* and *end_iter*. - - .. method:: create_tag(tag_name, **kwargs) - - Creates a tag and adds it to the tag table of this buffer. - - If *tag_name* is ``None``, the tag is anonymous, otherwise a tag with - the same name must not already exist in the tag table of the buffer. - - *kwargs* is an arbitrary number of key-value pairs that represent a list - properties to set on the tag, as with ``tag.set_property(prop_name, value)``. - - .. method:: apply_tag(tag, start_iter, end_iter) - - Applies *tag* to the given range. - - .. method:: remove_tag(tag, start_iter, end_iter) - - Removes all occurrences of *tag* from the given range. - - .. method:: remove_all_tags(start_iter, end_iter) - - Removes all tags in the given range. - - -.. class:: Gtk.TextIter - - .. method:: forward_search(needle, flags, limit) - - Searches forward for *needle*. The search will not continue past the - :class:`Gtk.TextIter` *limit*. - - *flags* can be set to one of the following, or any combination of it by - concatenating them with the bitwise-OR operator ``|``. - - * 0: The match must be exact. - * :attr:`Gtk.TextSearchFlags.VISIBLE_ONLY`: The match may have invisible - text interspersed in *needle*. i.e. *needle* will be a - possibly-noncontiguous subsequence of the matched range. - * :attr:`Gtk.TextSearchFlags.TEXT_ONLY`: The match may have pixbufs or - child widgets mixed inside the matched range. - * :attr:`Gtk.TextSearchFlags.CASE_INSENSITIVE`: The text will be matched - regardless of what case it is in. - - Returns a tupel containing a :class:`Gtk.TextIter` pointing to the start - and to the first character after the match. If no match was found, - ``None`` is returned. - - .. method:: backward_search(needle, flags, limit) - - Same as :meth:`forward_search`, but moves backward. - - -.. class:: Gtk.TextMark - - .. method:: set_visible(visible) - - Sets the visibility of this mark; the insertion point is normally visible, - i.e. you can see it as a vertical bar. Also, the text widget uses a - visible mark to indicate where a drop will occur when dragging-and-dropping - text. Most other marks are not visible. Marks are not visible by default. - Tags ---- diff --git a/source/treeview.txt b/source/treeview.txt index d7599bc..8c3d09c 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -137,100 +137,6 @@ Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. ``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, and ``treepath[i]`` returns the child's index on the *i*-th level. -TreeModel Objects -^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeModel() - - .. method:: get_iter(path) - - Returns a :class:`Gtk.TreeIter` instance pointing to *path*. - - *path* is expected to be a colon separated list of numbers or a tuple. For - example, the string "10:4:0" or tuple (10, 4, 0) would create a path of depth - 3 pointing to the 11th child of the root node, the 5th child of that 11th - child, and the 1st child of that 5th child. - - .. method:: iter_next(treeiter) - - Returns a :class:`Gtk.TreeIter` instance pointing the node following - *treeiter* at the current level or ``None`` if there is no next iter. - - .. method:: iter_previous(treeiter) - - Returns a :class:`Gtk.TreeIter` instance pointing the node previous to - *treeiter* at the current level or ``None`` if there is no previous iter. - - .. method:: iter_has_child(treeiter) - - Returns ``True`` if *treeiter* has children, ``False`` otherwise. - - .. method:: iter_children(treeiter) - - Returns a :class:`Gtk.TreeIter` instance pointing to the first child of - *treeiter* or ``None`` if *treeiter* has no children. - - .. method:: get_iter_first() - - Returns a :class:`Gtk.TreeIter` instance pointing to the first iterator - in the tree (the one at the path "0") or ``None`` if the tree is empty. - -ListStore Objects -^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.ListStore(data_type[, ...]) - - Creates a new :class:`Gtk.ListStore` with the specified column data types. - Each row added to the list store will have an item in each column. - - Supported data types are the standard Python ones and GTK+ types: - - * str, int, float, long, bool, object - * GObject.GObject - - .. method:: append([row]) - - Appends a new row to this list store. - - *row* is a list of values for each column, i.e. ``len(store) == len(row)``. - If *row* is omitted or ``None``, an empty row will be appended. - - Returns a :class:`Gtk.TreeIter` pointing to the appended row. - -TreeStore Objects -^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeStore(data_type[, ...]) - - Arguments are the same as for the :class:`Gtk.ListStore` constructor. - - .. method:: append(parent, [row]) - - Appends a new row to this tree store. *parent* must be a valid :class:`Gtk.TreeIter`. - If *parent* is not ``None``, then it will append the new row after the last - child of *parent*, otherwise it will append a row to the top level. - - *row* is a list of values for each column, i.e. ``len(store) == len(row)``. - If *row* is omitted or ``None``, an empty row will be appended. - - Returns a :class:`Gtk.TreeIter` pointing to the appended row. - -TreePath Objects -^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreePath(path) - - Construct a :class:`Gtk.TreePath` pointing to the node specified by *path*. - - If *path* is a string it is expected to be a colon separated list of numbers. - For example, the string "10:4:0" would create a path of depth 3 pointing to - the 11th child of the root node, the 5th child of that 11th child, and the - 1st child of that 5th child. - - If *path* is a list or a tuple it is expected to contain the indexes of the nodes. - Referring to the above mentioned example, the expression ``Gtk.TreePath("10:4:0")`` - is equivalent to ``Gtk.TreePath([10, 4, 3])``. - The View -------- While there are several different models to choose from, there is only one view @@ -283,109 +189,6 @@ to add the model columns to it. tree.append_column(column) -TreeView Objects -^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeView([treemodel]) - - Creates a new :class:`Gtk.TreeView` widget with the model initialized to - *treemodel*. *treemodel* must be a class implementing :class:`Gtk.TreeModel`, - such as :class:`Gtk.ListStore` or :class:`Gtk.TreeStore`. If *treemodel* - is omitted or ``None``, the model remains unset and you have to call - :meth:`set_model` later. - - .. method:: set_model(model) - - Sets the model for this tree view. If this tree view already has a model - set, it will remove it before setting the new model. If *model* is ``None``, - then it will unset the old model. - - .. method:: get_model() - - Returns the model this tree view is based on. Returns ``None`` if the - model is unset. - - .. method:: append_column(column) - - Appends *column* to the list of columns. - - .. method:: get_selection() - - Gets the :class:`Gtk.TreeSelection` associated with this tree view. - - .. method:: enable_model_drag_source(start_button_mask, targets, actions) - - Arguments are the same as :meth:`Gtk.Widget.drag_source_set` - - .. method:: enable_model_dest_source(targets, actions) - - Arguments are the same as :meth:`Gtk.Widget.drag_dest_set` - -TreeViewColumn Objects -^^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeViewColumn(label[, renderer[, **kwargs]]) - - Creates a new :class:`Gtk.TreeViewColumn`. - - *renderer* is expected to be a :class:`Gtk.CellRenderer` instance, and - *kwargs* key-value pairs specifying the default values of *renderer*'s - properties. This is equivalent to calling :meth:`pack_start` and - :meth:`add_attribute` for each key-value pair in *kwargs*. - - If *renderer* is omitted, you have to call :meth:`pack_start` or - :meth:`pack_end` yourself. - - .. method:: add_attribute(renderer, attribute, value) - - Adds an attribute mapping to this column. - - *attribute* is the parameter on *renderer* to be set from the value. - So for example if column 2 of the model contains strings, you could have - the "text" attribute of a :class:`Gtk.CellRendererText` get its values - from column 2. - - .. method:: pack_start(renderer, expand) - - Packs the *renderer* into the beginning of this column. If expand is - ``False``, then the *renderer* is allocated no more space than it needs. - Any unused space is divided evenly between cells for which expand is ``True``. - - .. method:: pack_end(renderer, expand) - - Adds the *renderer* to end of this column. If expand is - ``False``, then the *renderer* is allocated no more space than it needs. - Any unused space is divided evenly between cells for which expand is ``True``. - - .. method:: set_sort_column_id(sort_column_id) - - Sets the column of the model by which this column (of the view) should be - sorted. This also makes the columnd header clickable. - - .. method:: get_sort_column_id() - - Gets the column id set by :meth:`Gtk.TreeViewColumn.set_sort_column_id` - - .. method:: set_sort_indicator(setting) - - Sets whether a little arrow is displayed in the column header to in - - *setting* can either be ``True`` (indicator is shown) or ``False`` - - .. method:: get_sort_indicator() - - Gets the value set by :meth:`Gtk.TreeViewColumn.set_sort_indicator` - - .. method:: set_sort_order(order) - - Changes the order by which the column is sorted. - - *order* can either be ``Gtk.SortType.ASCENDING`` or ``Gtk.SortType.DESCENDING``. - - .. method:: get_sort_order() - - Gets the sort order set by :meth:`Gtk.TreeViewColumn.set_sort_order` - The Selection ------------- Most applications will need to not only deal with displaying data, but also @@ -412,42 +215,6 @@ You can control what selections are allowed by calling set to :attr:`Gtk.SelectionMode.MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows` instead. - -TreeSelection Objects -^^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeSelection - - .. method:: set_mode(type) - - Where type is one of - - * :attr:`Gtk.SelectionMode.NONE`: No selection is possible - * :attr:`Gtk.SelectionMode.SINGLE`: Zero or one element may be selected - * :attr:`Gtk.SelectionMode.BROWSE`: Exactly one element is selected. - In some circumstances, such as initially or during a search operation, - it's possible for no element to be selected. What is really enforced - is that the user can't deselect a currently selected element except by - selecting another element. - * :attr:`Gtk.SelectionMode.MULTIPLE`: Any number of elements may be - selected. Clicks toggle the state of an item. Any number of elements - may be selected. The Ctrl key may be used to enlarge the selection, - and Shift key to select between the focus and the child pointed to. - Some widgets may also allow Click-drag to select a range of elements. - - .. method:: get_selected() - - Returns a tuple ``(model, treeiter)``, where *model* is the current model - and *treeiter* a :class:`Gtk.TreeIter` pointing to the currently selected - row. *treeiter* is ``None`` if no rows are selected. - - This function will not work if the mode of this selection is - :attr:`Gtk.SelectionMode.MULTIPLE`. - - .. method:: get_selected_rows() - - Returns a list of :class:`Gtk.TreePath` instances of all selected rows. - Sorting ------- Sorting is an important feature for tree views and is supported by the standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), which implement the :class:`Gtk.TreeSortable` interface. @@ -529,33 +296,3 @@ Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`. .. code-block:: python model.set_sort_func(0, compare, None) - -TreeSortable objects -^^^^^^^^^^^^^^^^^^^^ - -.. class:: Gtk.TreeSortable() - - .. method:: set_sort_column_id(sort_column_id, order) - - Sets the current sort column to *sort_column_id*. - - *order* can either be ``Gtk.SortType.ASCENDING`` or ``Gtk.SortType.DESCENDING``. - - .. method:: get_sort_column_id() - - Returns a tuple consisting of the current sort column and order. - - .. method:: set_sort_func(sort_column_id, sort_func, user_data) - - Sets the comparison function used when sorting by the colum *sort_column_id*. - - *user_data* gets passed to *sort_func*. - - *sort_func* is a function with the signature ``sort_func(model, iter1, iter2, user_data)`` - and should return a negative integer if *iter1* sorts before *iter2*, - zero if they are equal and a positive integer if *iter2* sorts before *iter1*. - - .. method:: set_default_sort_func(sort_func, user_data) - - See :meth:`Gtk.TreeSortable.set_sort_func`. This sets the comparison - function that is used when sorting by the default sort column From 6fcf702358bf820c5c642c961cf6b1e253df3316 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Sun, 22 Dec 2013 11:28:17 +0100 Subject: [PATCH 006/209] Add a simple Gtk.ListBox and Gtk.ListBoxRow example --- examples/layout_listbox_example.py | 59 +++++++++++++++++++++++++++++ images/listbox_example.png | Bin 0 -> 14052 bytes source/layout.txt | 26 +++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 examples/layout_listbox_example.py create mode 100644 images/listbox_example.png diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py new file mode 100644 index 0000000..cc435b8 --- /dev/null +++ b/examples/layout_listbox_example.py @@ -0,0 +1,59 @@ +from gi.repository import Gtk + +class ListBoxWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="ListBox Demo") + self.set_border_width(10) + + hbox = Gtk.Box(spacing=6) + self.add(hbox) + + listbox = Gtk.ListBox() + listbox.set_selection_mode(Gtk.SelectionMode.NONE) + hbox.pack_start(listbox, True, True, 0) + + row = Gtk.ListBoxRow() + hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) + row.add(hbox) + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + hbox.pack_start(vbox, True, True, 0) + + label1 = Gtk.Label("Automatic Date & Time", xalign=0) + label2 = Gtk.Label("Requires internet access", xalign=0) + vbox.pack_start(label1, True, True, 0) + vbox.pack_start(label2, True, True, 0) + + switch = Gtk.Switch() + switch.props.valign = Gtk.Align.CENTER + hbox.pack_start(switch, False, True, 0) + + listbox.add(row) + + row = Gtk.ListBoxRow() + hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) + row.add(hbox) + label = Gtk.Label("Enable Automatic Update", xalign=0) + check = Gtk.CheckButton() + hbox.pack_start(label, True, True, 0) + hbox.pack_start(check, False, True, 0) + + listbox.add(row) + + row = Gtk.ListBoxRow() + hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) + row.add(hbox) + label = Gtk.Label("Date Format", xalign=0) + combo = Gtk.ComboBoxText() + combo.insert(0, "0", "24-hour") + combo.insert(1, "1", "AM/PM") + hbox.pack_start(label, True, True, 0) + hbox.pack_start(combo, False, True, 0) + + listbox.add(row) + + +win = ListBoxWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/listbox_example.png b/images/listbox_example.png new file mode 100644 index 0000000000000000000000000000000000000000..b4854b0019e58fb57f7ecb157254770c4353b46f GIT binary patch literal 14052 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

N(TBfqr?Pd3?otQnPz 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 literal 0 HcmV?d00001 diff --git a/source/layout.txt b/source/layout.txt index f0c5344..90c8ccd 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -106,3 +106,29 @@ Example .. literalinclude:: ../examples/layout_table_example.py :linenos: + +ListBox +------- + +A :class:`ListBox` is a vertical container that contains :class:`ListBoxRow` +children. These rows can by dynamically sorted and filtered, and headers can be +added dynamically depending on the row content. It also allows keyboard and +mouse navigation and selection like a typical list. + +Using :class:`ListBox` is often an alternative to :class:`TreeView`, especially +when the list contents has a more complicated layout than what is allowed by a +:class:`CellRenderer`, or when the contents is interactive (i.e. has a button +in it). + +Although a :class:`ListBox` must have only :class:`ListBoxRow` children you can +add any kind of widget to it via :meth:`Gtk.Container.add`, and a +:class:`ListBoxRow` widget will automatically be inserted between the list and +the widget. + +Example +^^^^^^^ + +.. image:: ../images/listbox_example.png + +.. literalinclude:: ../examples/listbox_example.py + :linenos: From 993316bb662aaa19a500c9fca10d4e54368b3750 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Sun, 22 Dec 2013 12:06:07 +0100 Subject: [PATCH 007/209] Correct Listbox example filename Correct a last-second mistake in the Listbox example filename, now the example shows up correctly --- source/layout.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/layout.txt b/source/layout.txt index 90c8ccd..d6d4143 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -130,5 +130,5 @@ Example .. image:: ../images/listbox_example.png -.. literalinclude:: ../examples/listbox_example.py +.. literalinclude:: ../examples/layout_listbox_example.py :linenos: From c6511802c7e806673960cfac5613ab1be100aa7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 23 Dec 2013 11:30:54 +0100 Subject: [PATCH 008/209] Add Gtk namespace in front of classes --- source/layout.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/layout.txt b/source/layout.txt index d6d4143..0e53391 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -110,19 +110,19 @@ Example ListBox ------- -A :class:`ListBox` is a vertical container that contains :class:`ListBoxRow` +A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk.ListBoxRow` children. These rows can by dynamically sorted and filtered, and headers can be added dynamically depending on the row content. It also allows keyboard and mouse navigation and selection like a typical list. -Using :class:`ListBox` is often an alternative to :class:`TreeView`, especially +Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, especially when the list contents has a more complicated layout than what is allowed by a -:class:`CellRenderer`, or when the contents is interactive (i.e. has a button +:class:`Gtk.CellRenderer`, or when the contents is interactive (i.e. has a button in it). -Although a :class:`ListBox` must have only :class:`ListBoxRow` children you can +Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` children you can add any kind of widget to it via :meth:`Gtk.Container.add`, and a -:class:`ListBoxRow` widget will automatically be inserted between the list and +:class:`Gtk.ListBoxRow` widget will automatically be inserted between the list and the widget. Example From c9f99924d08410270e4b113f131a0ae5b97c2771 Mon Sep 17 00:00:00 2001 From: sullenel Date: Sat, 28 Dec 2013 15:46:35 +0400 Subject: [PATCH 009/209] Make prints python 3 compatible --- examples/builder_example.py | 2 +- examples/button_example.py | 6 +++--- examples/checkbutton_example.py | 2 +- examples/clipboard_example.py | 4 ++-- examples/combobox_example.py | 8 ++++---- examples/dialog_example.py | 4 ++-- examples/drag_and_drop_example.py | 6 +++--- examples/filechooserdialog_example.py | 12 ++++++------ examples/layout_box_example.py | 4 ++-- examples/menu_example.py | 10 +++++----- examples/messagedialog_example.py | 12 ++++++------ examples/radiobutton_example.py | 2 +- examples/switch_example.py | 2 +- examples/togglebutton_example.py | 2 +- 14 files changed, 38 insertions(+), 38 deletions(-) diff --git a/examples/builder_example.py b/examples/builder_example.py index a21fcd7..32bd59a 100644 --- a/examples/builder_example.py +++ b/examples/builder_example.py @@ -5,7 +5,7 @@ def onDeleteWindow(self, *args): Gtk.main_quit(*args) def onButtonPressed(self, button): - print "Hello World!" + print("Hello World!") builder = Gtk.Builder() builder.add_from_file("builder_example.glade") diff --git a/examples/button_example.py b/examples/button_example.py index 473197a..abd1a98 100644 --- a/examples/button_example.py +++ b/examples/button_example.py @@ -22,13 +22,13 @@ def __init__(self): hbox.pack_start(button, True, True, 0) def on_click_me_clicked(self, button): - print "\"Click me\" button was clicked" + print("\"Click me\" button was clicked") def on_open_clicked(self, button): - print "\"Open\" button was clicked" + print("\"Open\" button was clicked") def on_close_clicked(self, button): - print "Closing application" + print("Closing application") Gtk.main_quit() win = ButtonWindow() diff --git a/examples/checkbutton_example.py b/examples/checkbutton_example.py index b79c03a..a01b864 100644 --- a/examples/checkbutton_example.py +++ b/examples/checkbutton_example.py @@ -23,7 +23,7 @@ def on_button_toggled(self, button, name): state = "on" else: state = "off" - print "Button", name, "was turned", state + print("Button", name, "was turned", state) win = CheckButtonWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index b6a5661..3921693 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -38,13 +38,13 @@ def paste_text(self, widget): if text != None: self.entry.set_text(text) else: - print "No text on the clipboard." + print("No text on the clipboard.") def copy_image(self, widget): if self.image.get_storage_type() == Gtk.ImageType.PIXBUF: self.clipboard.set_image(self.image.get_pixbuf()) else: - print "No image has been pasted yet." + print("No image has been pasted yet.") def paste_image(self, widget): image = self.clipboard.wait_for_image() diff --git a/examples/combobox_example.py b/examples/combobox_example.py index 3c6f864..427b0cc 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -53,22 +53,22 @@ def on_name_combo_changed(self, combo): if tree_iter != None: model = combo.get_model() row_id, name = model[tree_iter][:2] - print "Selected: ID=%d, name=%s" % (row_id, name) + print("Selected: ID=%d, name=%s" % (row_id, name)) else: entry = combo.get_child() - print "Entered: %s" % entry.get_text() + print("Entered: %s" % entry.get_text()) def on_country_combo_changed(self, combo): tree_iter = combo.get_active_iter() if tree_iter != None: model = combo.get_model() country = model[tree_iter][0] - print "Selected: country=%s" % country + print("Selected: country=%s" % country) def on_currency_combo_changed(self, combo): text = combo.get_active_text() if text != None: - print "Selected: currency=%s" % text + print("Selected: currency=%s" % text) win = ComboBoxWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/dialog_example.py b/examples/dialog_example.py index 00826b0..34b9234 100644 --- a/examples/dialog_example.py +++ b/examples/dialog_example.py @@ -32,9 +32,9 @@ def on_button_clicked(self, widget): response = dialog.run() if response == Gtk.ResponseType.OK: - print "The OK button was clicked" + print("The OK button was clicked") elif response == Gtk.ResponseType.CANCEL: - print "The Cancel button was clicked" + print("The Cancel button was clicked") dialog.destroy() diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index 982897c..70c992c 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -95,15 +95,15 @@ def __init__(self): def on_drag_data_received(self, widget, drag_context, x,y, data,info, time): if info == TARGET_ENTRY_TEXT: text = data.get_text() - print "Received text: %s" % text + print("Received text: %s" % text) elif info == TARGET_ENTRY_PIXBUF: pixbuf = data.get_pixbuf() width = pixbuf.get_width() height = pixbuf.get_height() - print "Received pixbuf with width %spx and height %spx" % (width, - height) + print("Received pixbuf with width %spx and height %spx" % (width, + height)) win = DragDropWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/filechooserdialog_example.py b/examples/filechooserdialog_example.py index 4b2301c..4f12197 100644 --- a/examples/filechooserdialog_example.py +++ b/examples/filechooserdialog_example.py @@ -26,10 +26,10 @@ def on_file_clicked(self, widget): response = dialog.run() if response == Gtk.ResponseType.OK: - print "Open clicked" - print "File selected: " + dialog.get_filename() + print("Open clicked") + print("File selected: " + dialog.get_filename()) elif response == Gtk.ResponseType.CANCEL: - print "Cancel clicked" + print("Cancel clicked") dialog.destroy() @@ -58,10 +58,10 @@ def on_folder_clicked(self, widget): response = dialog.run() if response == Gtk.ResponseType.OK: - print "Select clicked" - print "Folder selected: " + dialog.get_filename() + print("Select clicked") + print("Folder selected: " + dialog.get_filename()) elif response == Gtk.ResponseType.CANCEL: - print "Cancel clicked" + print("Cancel clicked") dialog.destroy() diff --git a/examples/layout_box_example.py b/examples/layout_box_example.py index 4dc56f5..037653a 100644 --- a/examples/layout_box_example.py +++ b/examples/layout_box_example.py @@ -17,10 +17,10 @@ def __init__(self): self.box.pack_start(self.button2, True, True, 0) def on_button1_clicked(self, widget): - print "Hello" + print("Hello") def on_button2_clicked(self, widget): - print "Goodbye" + print("Goodbye") win = MyWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/menu_example.py b/examples/menu_example.py index 72ae550..aa36f5e 100644 --- a/examples/menu_example.py +++ b/examples/menu_example.py @@ -130,22 +130,22 @@ def create_ui_manager(self): return uimanager def on_menu_file_new_generic(self, widget): - print "A File|New menu item was selected." + print("A File|New menu item was selected.") def on_menu_file_quit(self, widget): Gtk.main_quit() def on_menu_others(self, widget): - print "Menu item " + widget.get_name() + " was selected" + print("Menu item " + widget.get_name() + " was selected") def on_menu_choices_changed(self, widget, current): - print current.get_name() + " was selected." + print(current.get_name() + " was selected.") def on_menu_choices_toggled(self, widget): if widget.get_active(): - print widget.get_name() + " activated" + print(widget.get_name() + " activated") else: - print widget.get_name() + " deactivated" + print(widget.get_name() + " deactivated") def on_button_press_event(self, widget, event): # Check if right mouse button was preseed diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index 24bc3af..f9623f4 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -30,7 +30,7 @@ def on_info_clicked(self, widget): dialog.format_secondary_text( "And this is the secondary text that explains things.") dialog.run() - print "INFO dialog closed" + print("INFO dialog closed") dialog.destroy() @@ -40,7 +40,7 @@ def on_error_clicked(self, widget): dialog.format_secondary_text( "And this is the secondary text that explains things.") dialog.run() - print "ERROR dialog closed" + print("ERROR dialog closed") dialog.destroy() @@ -51,9 +51,9 @@ def on_warn_clicked(self, widget): "And this is the secondary text that explains things.") response = dialog.run() if response == Gtk.ResponseType.OK: - print "WARN dialog closed by clicking OK button" + print("WARN dialog closed by clicking OK button") elif response == Gtk.ResponseType.CANCEL: - print "WARN dialog closed by clicking CANCEL button" + print("WARN dialog closed by clicking CANCEL button") dialog.destroy() @@ -64,9 +64,9 @@ def on_question_clicked(self, widget): "And this is the secondary text that explains things.") response = dialog.run() if response == Gtk.ResponseType.YES: - print "QUESTION dialog closed by clicking YES button" + print("QUESTION dialog closed by clicking YES button") elif response == Gtk.ResponseType.NO: - print "QUESTION dialog closed by clicking NO button" + print("QUESTION dialog closed by clicking NO button") dialog.destroy() diff --git a/examples/radiobutton_example.py b/examples/radiobutton_example.py index 8eb7e8f..5d4a0b4 100644 --- a/examples/radiobutton_example.py +++ b/examples/radiobutton_example.py @@ -28,7 +28,7 @@ def on_button_toggled(self, button, name): state = "on" else: state = "off" - print "Button", name, "was turned", state + print("Button", name, "was turned", state) win = RadioButtonWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/switch_example.py b/examples/switch_example.py index ceb85c3..dd25026 100644 --- a/examples/switch_example.py +++ b/examples/switch_example.py @@ -24,7 +24,7 @@ def on_switch_activated(self, switch, gparam): state = "on" else: state = "off" - print "Switch was turned", state + print("Switch was turned", state) win = SwitcherWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/togglebutton_example.py b/examples/togglebutton_example.py index 40ff131..16637a6 100644 --- a/examples/togglebutton_example.py +++ b/examples/togglebutton_example.py @@ -23,7 +23,7 @@ def on_button_toggled(self, button, name): state = "on" else: state = "off" - print "Button", name, "was turned", state + print("Button", name, "was turned", state) win = ToggleButtonWindow() win.connect("delete-event", Gtk.main_quit) From 25ff21814b7be1b709cda90dbda4d320624888b1 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Tue, 31 Dec 2013 22:10:24 +0100 Subject: [PATCH 010/209] Add Gtk.Stack and Gtk.StackSwitcher example --- examples/layout_stack_example.py | 31 +++++++++++++++++++++++++++++ images/stack_example.png | Bin 0 -> 7950 bytes source/layout.txt | 33 +++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 examples/layout_stack_example.py create mode 100644 images/stack_example.png diff --git a/examples/layout_stack_example.py b/examples/layout_stack_example.py new file mode 100644 index 0000000..c5b78f1 --- /dev/null +++ b/examples/layout_stack_example.py @@ -0,0 +1,31 @@ +from gi.repository import Gtk + +class StackWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Stack Demo") + self.set_border_width(10) + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) + self.add(vbox) + + stack = Gtk.Stack() + stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) + stack.set_transition_duration(1000) + + checkbutton = Gtk.CheckButton("Click me!") + stack.add_titled(checkbutton, "check", "Check Button") + + label = Gtk.Label() + label.set_markup("A fancy label") + stack.add_titled(label, "label", "A label") + + stack_switcher = Gtk.StackSwitcher() + stack_switcher.set_stack(stack) + vbox.pack_start(stack_switcher, True, True, 0) + vbox.pack_start(stack, True, True, 0) + +win = StackWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/stack_example.png b/images/stack_example.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e63c9244ecbc44bc99aaa4a987dc2bc33c7e08 GIT binary patch literal 7950 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 Date: Wed, 1 Jan 2014 17:17:51 +0100 Subject: [PATCH 011/209] Add A Gtk.HeaderBar example --- examples/layout_headerbar_example.py | 40 +++++++++++++++++++++++++++ images/headerbar_example.png | Bin 0 -> 5192 bytes source/layout.txt | 24 ++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 examples/layout_headerbar_example.py create mode 100644 images/headerbar_example.png diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py new file mode 100644 index 0000000..0ec88c2 --- /dev/null +++ b/examples/layout_headerbar_example.py @@ -0,0 +1,40 @@ +from gi.repository import Gtk, Gio + +class HeaderBarWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Stack Demo") + self.set_border_width(10) + self.set_default_size(400, 200) + + hb = Gtk.HeaderBar() + hb.props.show_close_button = True + hb.props.title = "HeaderBar example" + self.set_titlebar(hb) + + button = Gtk.Button() + icon = Gio.ThemedIcon(name="mail-send-receive-symbolic") + image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) + button.add(image) + hb.pack_end(button) + + box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) + Gtk.StyleContext.add_class(box.get_style_context(), "linked") + + button = Gtk.Button() + button.add(Gtk.Arrow(Gtk.ArrowType.LEFT, Gtk.ShadowType.NONE)) + box.add(button) + + button = Gtk.Button() + button.add(Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.NONE)) + box.add(button) + + hb.pack_start(box) + + self.add(Gtk.TextView()) + +win = HeaderBarWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() + diff --git a/images/headerbar_example.png b/images/headerbar_example.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f0e635b24288cc30a7b203dacaac9e43de4807 GIT binary patch literal 5192 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 Date: Sat, 10 May 2014 19:12:07 +0200 Subject: [PATCH 012/209] Update intersphinx mapping. --- source/conf.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 1c2fcd9..84b5f11 100644 --- a/source/conf.py +++ b/source/conf.py @@ -27,7 +27,12 @@ # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx'] -intersphinx_mapping = {'gi': ('http://lazka.github.io/pgi-docs', None)} +intersphinx_mapping = { + 'glib': ('http://lazka.github.io/pgi-docs/GLib-2.0', None), + 'gobject': ('http://lazka.github.io/pgi-docs/GObject-2.0', None), + 'gio': ('http://lazka.github.io/pgi-docs/Gio-2.0', None), + 'gtk': ('http://lazka.github.io/pgi-docs/Gtk-3.0', None), +} # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 66a1a27ab8d03534c515e523285d68422e32b4d1 Mon Sep 17 00:00:00 2001 From: Paul Waring Date: Fri, 22 Aug 2014 14:58:55 +0100 Subject: [PATCH 013/209] Correct function call typo --- source/basics.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/basics.txt b/source/basics.txt index 804861b..7aa2ce8 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -54,7 +54,7 @@ has been connected to. widget.disconnect(handler_id) If you have lost the "handler_id" for some reason (for example the handlers -were installed using :func:`Gtk.Builder.connect_sinals`), you can still +were installed using :func:`Gtk.Builder.connect_signals`), you can still disconnect a specific callback using the function :func:`disconnect_by_func`: .. code-block:: python From 973694dd890c1d7646113f4a5e0aa53a1fe8762c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=97=CE=BB=CE=B9=CE=AC=CE=B4=CE=B7=CF=82=20=CE=97=CE=BB?= =?UTF-8?q?=CE=AF=CE=B1=CF=82?= Date: Wed, 3 Sep 2014 17:25:17 +0300 Subject: [PATCH 014/209] which properties a widget has --- source/basics.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/basics.txt b/source/basics.txt index 7aa2ce8..0dc1fbb 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -98,3 +98,12 @@ which is equivalent to Instead of using getters and setters you can also get and set the properties with ``widget.get_property("prop-name")`` and ``widget.set_property("prop-name", value)``, respectively. + +To see which properties are available for a widget in the running version of GTK you can "dir" the "props" property: + +.. code-block:: python + + widget = Gtk.Box() + print(dir(widget.props)) + +This will print in the cosole the list of properties a Gtk.Box has. From 772cd0de7cf99ba508ff65b9601772623a5a7376 Mon Sep 17 00:00:00 2001 From: ozzmos Date: Tue, 23 Sep 2014 20:46:59 +0200 Subject: [PATCH 015/209] fix close button method --- examples/layout_headerbar_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 0ec88c2..1285f6a 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -8,7 +8,7 @@ def __init__(self): self.set_default_size(400, 200) hb = Gtk.HeaderBar() - hb.props.show_close_button = True + hb.props.set_show_close_button(True) hb.props.title = "HeaderBar example" self.set_titlebar(hb) From 8ec399e8f7af15d534bd9d44becb947ea50d7f51 Mon Sep 17 00:00:00 2001 From: Marius Gedminas Date: Wed, 24 Sep 2014 11:54:21 +0300 Subject: [PATCH 016/209] Fix error in headerbar example Fixes AttributeError: 'gi._gobject.GProps' object has no attribute 'set_show_close_button' --- examples/layout_headerbar_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 1285f6a..f93413d 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -8,7 +8,7 @@ def __init__(self): self.set_default_size(400, 200) hb = Gtk.HeaderBar() - hb.props.set_show_close_button(True) + hb.set_show_close_button(True) hb.props.title = "HeaderBar example" self.set_titlebar(hb) From 93e77fcb3cb7135ed586a7e47d7faeb66084ddab Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Sat, 27 Sep 2014 19:11:13 +0200 Subject: [PATCH 017/209] Add a new Gtk.FlowBox example Gtk.FlowBox has been added in GTK+ since 3.12 --- examples/layout_flowbox_example.py | 118 +++++++++++++++++++++++++++++ images/flowbox_example.png | Bin 0 -> 6183 bytes source/layout.txt | 30 ++++++++ 3 files changed, 148 insertions(+) create mode 100644 examples/layout_flowbox_example.py create mode 100644 images/flowbox_example.png diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py new file mode 100644 index 0000000..2131ac2 --- /dev/null +++ b/examples/layout_flowbox_example.py @@ -0,0 +1,118 @@ +from gi.repository import Gtk, Gdk + +class FlowBoxWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="ListBox Demo") + self.set_border_width(10) + self.set_default_size(300, 250) + + header = Gtk.HeaderBar(title="Flow Box") + header.set_subtitle("Sample FlowBox app") + header.props.show_close_button = True + + self.set_titlebar(header) + + scrolled = Gtk.ScrolledWindow() + scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + + flowbox = Gtk.FlowBox() + flowbox.set_valign(Gtk.Align.START) + flowbox.set_max_children_per_line(30) + flowbox.set_selection_mode(Gtk.SelectionMode.NONE) + + self.create_flowbox(flowbox) + + scrolled.add(flowbox) + + self.add(scrolled) + self.show_all() + + def color_swatch_new(self, str_color): + color = Gdk.color_parse(str_color) + + rgba = Gdk.RGBA.from_color(color) + button = Gtk.Button() + + area = Gtk.DrawingArea() + area.set_size_request(24, 24) + area.override_background_color(0, rgba) + + button.add(area) + + return button + + def create_flowbox(self, flowbox): + colors = [ + 'AliceBlue', + 'AntiqueWhite', + 'AntiqueWhite1', + 'AntiqueWhite2', + 'AntiqueWhite3', + 'AntiqueWhite4', + 'aqua', + 'aquamarine', + 'aquamarine1', + 'aquamarine2', + 'aquamarine3', + 'aquamarine4', + 'azure', + 'azure1', + 'azure2', + 'azure3', + 'azure4', + 'beige', + 'bisque', + 'bisque1', + 'bisque2', + 'bisque3', + 'bisque4', + 'black', + 'BlanchedAlmond', + 'blue', + 'blue1', + 'blue2', + 'blue3', + 'blue4', + 'BlueViolet', + 'brown', + 'brown1', + 'brown2', + 'brown3', + 'brown4', + 'burlywood', + 'burlywood1', + 'burlywood2', + 'burlywood3', + 'burlywood4', + 'CadetBlue', + 'CadetBlue1', + 'CadetBlue2', + 'CadetBlue3', + 'CadetBlue4', + 'chartreuse', + 'chartreuse1', + 'chartreuse2', + 'chartreuse3', + 'chartreuse4', + 'chocolate', + 'chocolate1', + 'chocolate2', + 'chocolate3', + 'chocolate4', + 'coral', + 'coral1', + 'coral2', + 'coral3', + 'coral4' + ] + + for color in colors: + button = self.color_swatch_new(color) + flowbox.add(button) + + +win = FlowBoxWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/flowbox_example.png b/images/flowbox_example.png new file mode 100644 index 0000000000000000000000000000000000000000..1128cdfba28b0e9dd75ec3881d10ddd9d61bd7ce GIT binary patch literal 6183 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 PevlemQ>jeREcibF)q?rJ literal 0 HcmV?d00001 diff --git a/source/layout.txt b/source/layout.txt index 1b5362d..4869a44 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -189,3 +189,33 @@ Example .. literalinclude:: ../examples/layout_headerbar_example.py :linenos: + +FlowBox +------- + +A :class:`Gtk.FlowBox` is a container that positions child widgets in sequence +according to its orientation. + +For instance, with the horizontal orientation, the widgets will be arranged +from left to right, starting a new row under the previous row when necessary. +Reducing the width in this case will require more rows, so a larger height +will be requested. + +Likewise, with the vertical orientation, the widgets will be arranged from top +to bottom, starting a new column to the right when necessary. Reducing the +height will require more columns, so a larger width will be requested. + +The children of a :class:`Gtk.FlowBox` can be dynamically sorted and filtered. + +Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` +children, you can add any kind of widget to it via :meth:`Gtk.Container.add`, +and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted between +the box and the widget. + +Example +^^^^^^^ + +.. image:: ../images/flowbox_example.png + +.. literalinclude:: ../examples/layout_flowbox_example.py + :linenos: From a2807df5c7b153af4d3d890e7f2fb937b68a7e74 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 19 Oct 2014 16:55:48 +1100 Subject: [PATCH 018/209] Minor spelling issue. is > if --- source/objects.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/objects.txt b/source/objects.txt index b148ce3..3a13552 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -113,7 +113,7 @@ them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button.set_label`. Create new properties ^^^^^^^^^^^^^^^^^^^^^ -A property is defined with a name and a type. Even is python itself is +A property is defined with a name and a type. Even if python itself is dynamically typed, you can't change the type of a property once it is defined. A property can be created using :func:`GObject.property`. From 2f87d1e1ea22da8042e6054b72bb8c4609b29505 Mon Sep 17 00:00:00 2001 From: oskar_cieslik Date: Wed, 26 Nov 2014 02:19:58 +0100 Subject: [PATCH 019/209] Update basics.txt Misspelled word "console" :) --- source/basics.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/basics.txt b/source/basics.txt index 0dc1fbb..491e100 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -106,4 +106,4 @@ To see which properties are available for a widget in the running version of GTK widget = Gtk.Box() print(dir(widget.props)) -This will print in the cosole the list of properties a Gtk.Box has. +This will print in the console the list of properties a Gtk.Box has. From 187ff94633d39e58a043a4abab336ad546678cb4 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 18 Dec 2014 22:28:05 +1100 Subject: [PATCH 020/209] Add note about Gtk.Table deprecation --- source/layout.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/layout.txt b/source/layout.txt index 4869a44..c4bd5fb 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -99,6 +99,9 @@ You can also set a consistent spacing for all rows and/or columns with :meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note that with these calls, the last row and last column do not get any spacing. +.. deprecated:: 3.4 + It is reccomened that you use the :class:`Gtk.Grid` for new code. + Example ^^^^^^^ From 213ab140167fe474aeaf0744409f0816d79acdc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Ru=C5=BEa?= Date: Tue, 13 Jan 2015 18:44:43 +0100 Subject: [PATCH 021/209] Fixed a small typo --- source/objects.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/objects.txt b/source/objects.txt index 3a13552..f63217d 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -96,7 +96,7 @@ Properties ---------- One of GObject's nice features is its generic get/set mechanism for object properties. Each class inherited from :class:`GObject.GObject` can define new -properties. Each property as a type which never changes (e.g. str, float, +properties. Each property has a type which never changes (e.g. str, float, int...). For instance, they are used for :class:`Gtk.Button` where there is a "label" property which contains the text of the button. From a4f0e5cf9301ae995850ef01bb7316773b12dd2d Mon Sep 17 00:00:00 2001 From: Hadrien Titeux Date: Wed, 4 Feb 2015 14:50:32 +0100 Subject: [PATCH 022/209] Example code for treeviews and treeview filters finished. I just need to add the corresponding doc now! --- examples/treeview_filter_example.py | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 examples/treeview_filter_example.py diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py new file mode 100644 index 0000000..9d69a2a --- /dev/null +++ b/examples/treeview_filter_example.py @@ -0,0 +1,82 @@ +from gi.repository import Gtk + +#list of tuples for each software, containing the software name, initial release, and main programming languages used +software_list = [("Firefox", 2002, "C++"), + ("Eclipse", 2004, "Java" ), + ("Pitivi", 2004, "Python"), + ("Netbeans", 1996, "Java"), + ("Chrome", 2008, "C++"), + ("Filezilla", 2001, "C++"), + ("Bazaar", 2005, "Python"), + ("Git", 2005, "C"), + ("Linux Kernel", 1991, "C"), + ("GCC", 1987, "C"), + ("Frostwire", 2004, "Java")] + +class TreeViewFilterWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Treeview Filter Demo") + self.set_border_width(10) + + #Setting up the self.grid in which the elements are to be positionned + self.grid = Gtk.Grid() + self.grid.set_column_homogeneous(True) + self.grid.set_row_homogeneous(True) + self.add(self.grid) + + #Creating the ListStore model + self.software_liststore = Gtk.ListStore(str, int, str) + for software_ref in software_list: + self.software_liststore.append(list(software_ref)) + self.current_filter_language = None + + #Creating the filter, feeding it with the liststore model + self.language_filter = self.software_liststore.filter_new() + self.language_filter.set_visible_func(self.language_filter_func) + + #creating the treeview, making it use the filter as a model, and adding the columns + self.treeview = Gtk.TreeView.new_with_model(self.language_filter) + for i, column_title in enumerate(["Software", "Release Year", "Programming Language"]): + renderer = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(column_title, renderer, text=i) + self.treeview.append_column(column) + + #creating buttons to filter by programming language, and setting up their events + self.buttons = list() + for prog_language in ["Java", "C", "C++", "Python", "None"]: + button = Gtk.Button(prog_language) + self.buttons.append(button) + button.connect("clicked", self.on_selection_button_clicked) + + #setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row + self.scrollable_treelist = Gtk.ScrolledWindow() + self.scrollable_treelist.set_vexpand(True) + self.grid.attach(self.scrollable_treelist, 0, 0, 8, 10) + self.grid.attach_next_to(self.buttons[0], self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1) + for i, button in enumerate(self.buttons[1:]): + self.grid.attach_next_to(button, self.buttons[i], Gtk.PositionType.RIGHT, 1, 1) + self.scrollable_treelist.add(self.treeview) + + self.show_all() + + def language_filter_func(self, model, iter, data): + """Tests if the language in the row is the one in the filter""" + if self.current_filter_language is None or self.current_filter_language == "None": + return True + else: + return model[iter][2] == self.current_filter_language + + def on_selection_button_clicked(self, widget): + """Called on any of the button clicks""" + #we set the current language filter to the button's label + self.current_filter_language = widget.get_label() + print("%s language selected!" % self.current_filter_language) + #we update the filter, which updates in turn the view + self.language_filter.refilter() + + +win = TreeViewFilterWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() From 583e4cd6041e17d61a503688b5b72f969684d44e Mon Sep 17 00:00:00 2001 From: Hadrien Titeux Date: Thu, 5 Feb 2015 09:41:50 +0100 Subject: [PATCH 023/209] Added the example code and image. Finished extending the tutorial. --- examples/treeview_filter_example.py | 1 + images/treeview_filter_example.png | Bin 0 -> 31272 bytes source/treeview.txt | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 images/treeview_filter_example.png diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index 9d69a2a..84417a5 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -33,6 +33,7 @@ def __init__(self): #Creating the filter, feeding it with the liststore model self.language_filter = self.software_liststore.filter_new() + #setting the filter function, note that we're not using the self.language_filter.set_visible_func(self.language_filter_func) #creating the treeview, making it use the filter as a model, and adding the columns diff --git a/images/treeview_filter_example.png b/images/treeview_filter_example.png new file mode 100644 index 0000000000000000000000000000000000000000..3858974b0d1aae89a1344d2bb54118412c739ba1 GIT binary patch literal 31272 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%0A7HyusU@431lVSr@?j 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 literal 0 HcmV?d00001 diff --git a/source/treeview.txt b/source/treeview.txt index 8c3d09c..121dc09 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -296,3 +296,21 @@ Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`. .. code-block:: python model.set_sort_func(0, compare, None) + +Filtering +------- +Unlike sorting, filtering is not handled by the two models we previously saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It acts as a layer between the "real" model (a :class:`Gtk.TreeStore` or a :class:`Gtk.ListStore`), hiding some elements to the view. In practice, it supplies the :class:`Gtk.TreeView` with a subset of the underlying model. + +You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it a model to filter, but the easiest way is to spawn it directly from the filtered model, using the :meth:`Gtk.TreeModel.filter_new` method. +In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` needs a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeSortable.set_visible_func`: + +.. code-block:: python + + filter.set_visible_func(filter_func, data=None) + +Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeView` stack. + +.. image:: ../images/treeview_filter_example.png + +.. literalinclude:: ../examples/treeview_filter_example.py + :linenos: \ No newline at end of file From 6bf881d44df36bc4e1f18be0083c05e5fc51cda9 Mon Sep 17 00:00:00 2001 From: Hadrien Titeux Date: Thu, 5 Feb 2015 16:43:17 +0100 Subject: [PATCH 024/209] Some more details on the usage of filters and sorting --- source/treeview.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/treeview.txt b/source/treeview.txt index 121dc09..004bda0 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -299,9 +299,14 @@ Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`. Filtering ------- -Unlike sorting, filtering is not handled by the two models we previously saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It acts as a layer between the "real" model (a :class:`Gtk.TreeStore` or a :class:`Gtk.ListStore`), hiding some elements to the view. In practice, it supplies the :class:`Gtk.TreeView` with a subset of the underlying model. +Unlike sorting, filtering is not handled by the two models we previously saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It acts as a layer between the "real" model (a :class:`Gtk.TreeStore` or a :class:`Gtk.ListStore`), hiding some elements to the view. In practice, it supplies the :class:`Gtk.TreeView` with a subset of the underlying model. Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, to use multiple filters on the same model (in the same way you'd use "AND" clauses in a SQL request). They can also be chained with :class:`Gtk.TreeModelSort` instances. You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it a model to filter, but the easiest way is to spawn it directly from the filtered model, using the :meth:`Gtk.TreeModel.filter_new` method. + +.. code-block:: python + + filter = model.filter_new() + In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` needs a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeSortable.set_visible_func`: .. code-block:: python From 3b8f8274ab599358adf6bb2162af775b6a16db77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 8 Feb 2015 11:50:38 +0100 Subject: [PATCH 025/209] Updated image of TreeViewFilter example --- images/treeview_filter_example.png | Bin 31272 -> 30328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/treeview_filter_example.png b/images/treeview_filter_example.png index 3858974b0d1aae89a1344d2bb54118412c739ba1..95c102e81cdb7e45137d6f8885b4b49f5dfda8b8 100644 GIT binary patch literal 30328 zcmb@ubzB|6mM#jx-Q9w_2X}|yAxLn7ySuwXg1bv_cMtCFE*sa4``yW$Idk94nctmv z-|Ii1c6C>G)vD_Cec!6Jces**6cRi>JQx@ll8m(Y7cj67USMG0Zm`gxnu!F8bW)+h}08P7>V!%4-~#L3mb!5GZc#@5=H(b3Ss*x1I=%+~1wqDv4A>?4?r zxX4$xjMH^jx38*C-B%ZxSz`tA=wHlbVArQ2!#~;G0vVQp_H_y-9xnkCW*R3cB>kIuINlYq_t_7;AT&=x`N= zB@IFq{TF}aMR-PEkDqA&p2bhroXn6X_&AUGx4Ef= z>in*5)xF>3!SiJxir|CUBM`tu7r>_nm`vmBR_wk%YuX&Z!op&dla@YQ&X+=ok~G|H z{I^FxsOsuYOl0ycH`#7BR%kUTcy9;e)PmbKRM0(?5kuyc(bjQTE~Frn2)>*x)fh6v z!NP)dA6#dKn*8l~*h-2V)zi&UFJ-cJTwdw%nr?@OPM!O;3Ex&pqdUE875v6mdHGah zBcqp2m0|_z0D-@Qp635m8lhW7O-h=3V%@av0;6BL7Ukz30Vg02C=woL_lj6O%SuZ~ z2rA98pUD1eB{S$&*NcfP0nY)5Y%rTrD7Osl301Jd0ZN^my0LS(Kezp)2M!L7ix?vQ z(J#J7S2aidfX6E$kH#c*9plen%{D&aN2kVvlVl(QOPO{q`Fg4UnwSYuQeoow@fYlk zQ$~AO{yv_d@Wkfd7R@YQQ65SI_!;M!)_&j#{&_|iLb`u^PgYEXew9VpE1k}tYH`D< zoY|A9t^VCRhqsG!cg@EL=uCxBXcFRBnC$jbI8r9Ld5HF7@N7{4qF(g}A~!HJ-YcJZt{fZp4ANqxU5ZZRcj_ z3bn{05x#>l-lJRIdL*qd)SVqw=U|)Lieq|5Sm?bFKP? zgP1L;V<1~_CG@rw#@#@Z4SPNm1u5dVr_5s7yyw7W8(5lSRyHnN^3YDqPkb>9Rp|E@2MPch~AO_1G3?3a#1*qqnbr9({ zD5B>mq*hWI-^s}J0uZ4JIj8|f-n;LP<1Bl=dh|1W0;M|EDpjGKk@L1wgH+nHc= z+nW`=^7C+#d;RktaCE(%1ZFS>9TQ!6vTbi>Ob2@T*T^AV->?PWoJfVvCwgtFX8<#n zDS|a9R~|}Og?CODBK!Q;B>N_ktVi3=Eu9tMgWD1>kB=AJgzN#-7iPTy$(x29ja;#U z9vA|FuX_NQgTUgq-o^gR=8NegZIhK=-z@LIY+$rg>Jv3_7k?PUyJtuj6K&!BneSe1 zr<#J0l!P;%9d|o*HqBdbadxHJ8!aDB-S(@xJ5vR!-(;4D-=vn#z@~|=Z0)+DFQ)bG zQQ8wLW%GVl*kJJDR7B4%Rkh(k`peDhy_HN$>YG~hyN{6a1f=9~GP~)k{ih^1CK4fk zV!Z6@6`*!IG(9bOk^KdS45TF{zq{6h(F7O6a$=+ofoSpQmsG(T5^F>{^lP~3Pa|i@ z=kL$6Zr;S_Ew_@09s*VE&*1nKA@6V3wzxM>j^isAJY)@7y~U-aR<*+mag8ePJ<25- z6AVj0h_1fPkyYlk(T0jo&7;VdU0gy&+do+0qHAt0 zFk*YsM;rC7?YGHXFKpQOJy!0|MF>>p(MtnFiQJ*Y{Y$RT6mp4v5qF#3YnZ?_-GhGV<-`F8%%L!^PO4X|l%DqrY-dWxTsl&6O}Z4g>qajQe*99bUFSnR#$l#P_tFYN z;#l`nDz4 zG>z+@TE|{JDQFQ9?> z5fksX)1qPU{@_%^DLw@F59lXOlUZUEVb1FXSs#p!jJRNA6 zJH6_75X~b9v=AdM-b0zLUT#1ZOFWlYP19D+Jo3QR)FnqFm^S3YrIhWDIXWaB;ugxI ziVI?@ClmDCMfBF=T1)Aj*#bO+m%%8xmQ7;iOZGvTM*u>`c~nPtGBn;q4CZgDLW(@0 ziv7DzTXeh)UWv2BWu|v3I?m-4B$j7yrKuA0@~N{B8n6gc84^5Ha`+^I*_!s1*$ZJ3 zWm_t$2_sNM*`+&l%z20`kSSB8f?oInB9cf63Cc?6l1SD$2w#FwL9nm-DI!2EzenY9 zyooqFc2}amK04aG-T^=;NZLnxQ=~NJS2XCP+fv1aMqTM}x#Pr5TS>lNCOOsN%Qx0# zQf-wP-(CyGdm~$vcy~GqOxroav)0#|U}`+hgmkr$PuDSWWyL|Umew3=)TY#~SVt&PVs>IK zvUhajZ;;}T-bRE1A2BH(-U|~VTu$YFgp*g2uu9baGQpsP83hfIHBz|d+jWm-D|8<# znGT3|d@zbX`@TGpGR_MidF%7pU+~67t;&B`EM(YlCk$Oxn8->T({jd5uR3>94Gt?1 zbgECN_1z_n7>Co|U`3QiGG0hc<_tp4)XEjenz-W^sEDr!3hIkDqcz@~(9SS8JH#^n z?fRKd(Vdd7f<(dg+B~*_>bIEO7A^VYe!=0Tu0w$5-10`+lX69&Ld1sOz|Y}Wy@}m} z-JTl)fjAqH+ml6=k&@iZ;u~u(Tj=@)WgjDqRbV?N$=X<@Xtm3^tV7t$&8{-%GSdu_ zaM}F#DRXz=_VeSYfUCjO(bVC@*?Vp0o?#X$4qSsp$+WurC~^ak`naU&2-a-S**7J| z{(O<)?LOb@9NY=*rt8k7@|PlSjs`|EKW*5!mUWQRq1XWnK%7#6wr-+5s{XS=4i=u# zQSTADu_TUj{ zCUx<-%Fy~%LnU)9^znuS1xU+F7XM^78<>x`JpF-KZ{6EolBc*yrSP~xPgNDvy9Rcf z;AMn|hwxB0DH6Gv?voTjo?yG^ssTJ@Qt@2`M3$>_gm=j9gWEhBc#_v=cQAe%*Zf4S zS<3dO0fhfFLvtW4A3882~Kd^l4dF#RRn>;#RIe#iAH@gJB%dfFupIReq1E(4_J-$G*-CX+ zSFXqX@PWmw^sXw)Me{M^8;L~zpc&iOwYG_a0UOsH)t9+xJ)tb+;&{apT@(F6A|e@u-|rSz4}~FEgo58w=G&EpUw$a z4FO2h`qr>{<|hVXUd_@EYc3F(F6 zc;FY)TT_dP=RNS|5n0QLizwh^dF-*{E{$upy>^B3&0_3riHh^v(@vCw!lX*Sp-_X~ z*KC;Lb+OwG3{mZjJvyDgG!$Fm!@u!SYz3QkhCe)Z`u8y6U#cvQK+W#;m)$dFj9va^ z#`Sh=|3-HIhZo6o|E0#$zyJR#%s*7|Qolz~Y%yzltXk@7-8Qs+47#?Je2S$9>0N{7N_F&Z$7l-B{s6)7jv%W3* zr|AXl#lF1wHKO#T)Du#ZEsYS#R(mLm%OvAkM=8!C1p#T~4%h%8SEiFL-JzlndH@WM zfV`FI4n3jPK}cPV*}5#zMn=u(j_46X3Q|=$5uKW67Pqs)xV%(PT+v=}MftRLH5;kWOt) z@k+JU$7txG&(j&pA-m{Mee>Z2LI-!aBOb0tWT5gDv$-ernV!#a&5XR2{bLOtr02Xj z`4QKfqz!HsZ0hRc(V)B$UwZ2o&`RoSF|UtZoQSi6C(6a_>I8my;+kzoQ%T|t;acONM+-*K_2d@~zAa7{ zyyw1)%V|JCbeqcXeC&C*bknEJ8^gN(fv54#vU6iQXB;d4&|tL>NF+t;QksK8R;eNs zawGq-PqpSWb+MFLr@n2;u3M@N4FhkU3HAQ!wOp?*d_9%2*%|vg@6BGV4^cP^XAggD z9ytqH%){2W5e~MB(mCmLp3n*J)8?kg#6H%`R}~>;(Wim=^3`~m8U#!gZlWh7L+N6r zIgfb}(vL;-$$f=&bdJn?bvxm!$rJYTa$i16ks)>E+W5SMbcIVQ+F7BW^}5ux(4?26 zbJgsRX^z1E@|GjOQqtMGkTC=ly%N&jXEBf$AQ(#Z)x4&s0q5rO$6pUiH~T|g3u%h% z;ymsP$FCY*>dSDmCq%vOM{yV0I7|jx&U|;A!03oc>WZdB+G5Y7MwFwrDeehIwkFhW z-d4DLQ0)hvoZQxZcOB{8OU)XYUc$)-6r%8iQrvXF({Y&eb#faVlBQKWTQuL#EL1n5 zbjgEIe}fS9>vU=W>{I}kFT394vp-U3guS}_XP#P(CL^9zgn&b#BPtu*1^nl#vIn1W z($DkyywO=>VVsiPqJzp@4$p^}ttiAj-DHwJG*1nUesy7E->I2aS%I0n zADna}>LRN>M}|fjB{($93GkwLKE=fZ4%lChFS4~q$Bq$MO7ngBteQB2Y)d`Mn?O($ zljm9uT}7UbB&%L6uqm2tuhQ~XOJmihUSlMNeK&CY$@eP?;1Q3I@hX5PgC-JrqA|w# zyox#}$%k%qWoUAh-F^_saAkZkeueL6vzq_mL=p0e61oaHoT}BSUR_8%Ip9#!Iai7R zA#GEsY2_`Xb9PjyDMm^aTq01-5h(u>Rr?ZcPSSksYw(z+M_Y@m58R`dMud#2LBwB3 z#x=CQtx`;P{XxJUkWP(EF`(YPk)2#U&m9Kpc#f<-9^NWfZSj;!#fE9q`_XBtC#|_7 zN0Y86k2MF>ORE7ysFg*>ih5J)s;2^gV4_1ixyx(b?amUr;oXbP?jgieHuC3C$NK)_cK{svA5Sk`@O*g!_!T>wPnyVR7ySe zNzUb-zSb45dv}jY{=mSpM}u*2e*4TLGmZ>rB07`DsAg;T1P=y^0;i9n@2kgZtDBcx zC^p%VdHK)W8hc_S(@76o78pCliGWf=xwa7??X3k%Xeb6cp=5ys4Ba78Yy2&L{@blt z9cxCxg4%~ba&zNpKdK;3Yw{Y%U<`uqU{#r9ZO=v>lP>SGc)c?wu@AE6#YL= z>3X5ekR+YpbEXaEX!Tvc90L~;9Vvsm!#FjfLx%*CsU0la=jUXI5uL2)Ib&7xRqXq~N6Bo*E$|c&HNgz zJj)P#ezvh*j;l##vqaa~9lN!N>}t&%d!Fmsw%r*wd{xh`)io_r6%~TMzmO~-{uL3d zK*H=CWgf`$A@Yue5(+9|DQYj-U1ZK`WF^ZGmFtI0Z~XM>W6a|T{EM27>91e;Gk2e< zV&%GLz}BzQ4@G6b`)E37c zGx@!l9$IlcZoJFP-%`Up9`%nmz7ee%XK%Osx+L4h-nYQjm6Il~E03S&%zP{hd!HjQy`h{A8dJAgGEi%bsL#Uv?^ z=O?EDRkbRE6rC=NL~57A&0;{>rePVY1jY15YqIrnS2cY;mVhDRQY_JyzBy)QeDAOO zXN|yVRNU3*^BNcpZzF{Cm_A2|vE}(`-*i#oii+&^1i}@C5PYf72OGpw#|%T+yZjUg zxCpBhAKv>`4wRxW-hq1ZWPzh#T#Qh5XAMt=+witD_jE;jrZc{ETl1|%E?B>#%IW-B}2l{Bo6 zA%eYC!a8;Sx7UIu4V*uQkRe*E^goC+RDjW9Yu=yA>|8~kz8WxfK|518i}L@pSBA8v z&C$RSx6%NMP$uOZ>z+V|DZ1ngf-$SEKN7irKyNg*GH^F1TyN769ZMp5+mw@Iy&+&F z)LD^qVa)2KV$Ol1+MYpkGCw>oWwr(|=q(W6RccFsqBhw&M6Zo9VoDXS1ro(|H5Y^K z<@VsXaF&aavd;r(W;37Ugfbo1)8Gt=3^fU)#l!qNj)Z{r9{r@6j)?2fNQJ&-X>9Fa zE83Y|cMWxR1MMAu+@?tlF&NUez!$vLGp_nY+sBIL0zFrt+J({XVs)E3bHr^f%h%RdX5O@4|v_`lhk8VtVo zwXA0e(yWYNG`Z?ezY@7MWTUA-EGqulsmLp|c(7ezfpWNazA6Y&^{gyN>GE-jk}}20 zHZ0<8y@e+gBu{Uf;SWmXcO%HF98Xk}icOIASriJpgRTawrd+EqA=Gs|fH{i8x<*Is zjld$E?|d^t&esuY*_bQUPXF|(Xj6xv4_9Xo zrB%_?rlxi4xMPgHWVl$xVh1j@->sQ0tm;(uRLs0(_$P1euLsr)%NuE(4haS~d6(Sp zM!j5kC)Fb-Gm8rnnmQQ;t{#$a9N^=lg9u2ctcsF1de-zthFwM8Hg*|Ku*auxiL|U6 ziYu1YJ+q{{VW7$LpTF5zjqfBzyNrO@)j8gq*UjJ~q4n^7u;69y(M$WY(t^@X^N_5o zgRjmyyl$37h_z1oY}i=M-5|s9c-F4ec-fn13v}^BP%<;WIU-+sgrsMVqOiWLTP?VM zNO5q69R4<#^0qHn1q0< zS`wEvae262%&%WKXHY^{RZE)~Igz#=ei3bldi;=D5j``;b;Upvirv`#Ui`6+k(@$Sjk!vrb;YNGP6&^Dt;R|l)|@h7v<&&H1#KV zld{P$8O<7IQx|dIByH*@mz+QOwG3C3-)j45F@AyG&a^dmzEDLBbgyGUV&;~Z_+$j! zXx@N;aegmPHk9nOaMdUF#X&@9BIv5nIE5IP3 z+CSyA@S>Z`cw37>vRf2=7K`*@R!Zr+?YtY&`=W( zW;qUKqsmm);A7ZtY*Z=62z45s-<2L^|LoPJZGgH}#l(~hvuaOp;g#yWpI$g%HzHO% z8z^Q-@gRPN^??!pYiKBN1eS`0E~v!Xt9){ny{0QzUTA5k%`cB2b9v0Vou(20*)mwvJd6hAMd>?%NMu&aoQ3K-|__-u#Wt~^Rk*ESdg{PK0w9EZ>ONTAt z1s;gK5xgiaV;!B2nDbnNGSy6Y|vR;;r4-`}8hI|MBEIWcOF{Xtyi2 zS3CW3>73T+`YDOT-WfV{o5Zf)OuC5lj zjt6b&$_;mJ|9dU~=v3JM7H<15_pAH{>9uk54NP*=c5m=SHZHRo*Hf$-wDV4mE# zbYQC{v|_K{o{E=>dTL_3L4Xc&@o)pU^Qh}>8v4yvg^x?&4Da-v9{s%yDqNg4%<&j zTP}!MED0}^J0oHEhea)?SN<2W0 zfj-S;&zIhW-q>}^2i-@Yj0t63_O|vqtUF?T@?d#EG2r8H+2=;L3PgNeMcJ(oc;q0N zEjR-$0MZH9ZuR<*Vq342?C00eObNiA^&6K8UyAYz;SNuILTv3oO><6EfV?7l+ZHMD z3qKLpk2aurmTv0r=V#e!7a%kwo}OPEK>mKXln-vPzCM$vT$hF^M@1Y8-hFp2@E&)b$j^kO>+QQ`5y zJuYW0(BjiR#i!o7J~ef*xCwWB_$@WQT@6p!hI6%kmGyFkQbG|7i8}55X&0vd`(?7a zl6qyACI9;G4>d({JLjw>E?ymphIA?Uyco)zi2(CZJBhpPr`3Vko)3-d2;WkYf4{O< z7U`IQ0*#v@%+H^(&sr}hCLPY76Qr_7zxNq7O$khemaWAo+79GYtcZmUm-ncCiRoDQ z1VemJxPU|WO6Dj@d`FYcMJ!Z(_C$zopJN5i1F>EBfk>P%tvzResK0&6A#lRhb zj-Pf_#Qg3rFBj>D7!_j5m>)dHjC4pr87_s6bS1fMsclU0Gu}eAABBF>imm3~J4XGX zDG3uNah0sx`0*#W!2r{mltYH?l!{{pA&}(bOsIw(;{}6IPF6S=pI;_?1kx=Cd9gEF zRU5#E_osO=UbD}~q1 zHzr9ksUcUPY&67FZYZQIvwC!b1I057Tz>@Q;U0P2!{0Hr1dE@rY^-}eIk*3A1az(4 zS4H1=8`HbHFgHdkPE*&jP0yrG8~$Fp227Ug)Px1}(IT1`-~0X@M$m+1H_nXvC-MNU ztC7`B$6s?2(^iRrdR52@5KjOao0-tr?|3Sh?=`MzU5urJ%A;~ zbpBw$Yw&xNg;e#l_=9m(-r55q${kAZRww_>w&RVKGxe~Dhm*g3l$$pfRo!MCR5~0A z435Ac-wARxFq~BUxb)l|rtcfv z5l3cf{;0c&Fn7|BvKN*s!ERhM^~`u?CFy*7I8W#*+bxju@Yw$E41Kj|6;>1Syt7&y z`bmD0=s#~^y@ap2E1%szgm%GZ@%H7-iFGsV+o#Sk_b8$l$V?&Ke#b!3v{p`#KV)(U z4i5frp!UIngETE9a*a`_j<(LPWAva-RzAXk8v`+%xr}Lj!kQp1&1ljth!@!nz$Y)sA0E_O+q2JTCo16pGCr{HpBm z?w#gxXg>FwSWH%X3h8V8MDY$idU4WcMA1P9OSl{jt-736Am}zX=O~*LWDFn=EM(pk zj@5^fm`2TFi&kIU--YUyx@vT7;h=<-P-dZw2BaGEG@r=v$q00&b=@IRc=bsUUS=IM za;WeO1X+Vqq^CTTC8lily$l)rBgPxswi z)eDpecGY#+KpR(0Wof{!nr*L@8D;Rt@?nxXGpbJ5-=AX+iVW0%zQcJm-q^hu%z#1; zp{t>85&jn5X!Q^c<(*=nv!?ONO5#g{E4rZ&kM#Vi*>aNU;ieC+?aQT2zaXQR%;J;{ zTh;3YlFbD{G-WeUAaxX3krPfTrBdxP0ru+C)gWILg&<7^u?q3dz!uV&!f4TuqGmsT zVsg1H@j>`{ubYu5*%OtGsiX5q^LleoacHCIROD(2zVpPotzEFH2pqB92<{sdjMC|; zuP=NB2Ydu)gb2#SL3JISDb{MGV)H%F4KX4BeJ-=4s+_9HA?F#{=l8FK+?U6muX!M9 zf-}A)&&QicU~@iH!;Di?jMzQw zZ>(oma58EoRK1nJnt_jmdG`IA2pxihEKlPpaeMY_U=t^nx{-E$i0?XgJW}AMv7QW% z`{+f_{lFPN%ll9`3Rh=7eQLZw(gpDI@Z%LzM&0{_R=R9j(I4+sj~k6~>3+w~$AKSB z8dPv1*u%XGVe(puP~<^G_%C6#8Me3}<5>_eeNc;gwZ!Ozav^$&5YF2hPWx!@> zmzZE!#WC(b=pEL={yscyskgNuC?Y?bvR^r1pDuc^-85TwNRNF=2el}Y&LtS3{5&23!8r#Ey=R6V>!F9bLU)HxMy#@I-+}7vxpA)#bfN1QYQ$M;J2k z1gN3}^xno+up()sGk*VY!BKBMn0QJOQgr)~882uu0nq`cMwf*WqexnB#U&L3L8S6*Fvc*-~14TlK^>H>ZpU+4?4^oXCjKb6v~d>T^SI5a>~<@yTb zgZf%5TKyDB!c?_>ci!X^F1LqR7i%Ax{bx*M&YQjG=MlPG>hoMqcmj7MAqrCUWE=lK z!?3bygM(x3^EfGm-Yw}-un?=j;|_e$q=Z{G0j_~|pJf#ZmHi4<{jB2v?nc@PFkMP1 zxh5)hZKBN9chVp|GoS*LNr+Q;leLnK+XB@JS_YDHPPXjZ-YwUa#4ir6@YaJJ3Pm0k z;-=?LNG1F7V?1j~CCN?OJK^{IgxWWR7v+52Bh(?NC1vf*8R-8b9qt&lbslI2CpW zsHvT~@@+M{QB4GK!&J7PS&c{KWZr4%W}WB{odkv_>Vx8!eNd7ctwEQ)s9QVFo0O=D zKpY1u{>fc+@da*1rax$D`X|3bC`s_eIzOWl7*jqShTrKt7~e8DYx?EwKIXGoo=PXyNUS(EQS+ggk5E`Y6_1eHO0f?mO~ zE-S}NRlzEo|J{b{ZyC6~s*6&LpV zj`x~|Zbu*w6efV|NtFJ8w6ob2R$Z`xz%uADfnsptKIN^r-^s_GFW5NP>PZSSTcIm` z61nxYNQ9@W-A4c;Yt(e@nUAJA+2QbA($Jwbttk2r>)^Kiqnn^W3H)tv>DQ(k%gVaF z$aIaFBy5Jln3@u#AKl5A%R#+=VUI;5?29j(bu$jbqV%DQ1cK?I5oC9T&`5|(_p?0s zw-l_N3?caaLyM}9xtVL-9-J%QeL;Ts7f97_U}{`h*!E!O!5jcWFIH67emS3^JI>Fp znLP&*oA%J}&u^*&eMgEiyjh(Qr)n52fa91TsE}!MU@w10bF!iuA?c)I8nrLdyZ1Y8 zzMg0FbJeNeyb)F7ec?^mr;Kb)9Xks=zDDPNK)T!a{d%iW_8VKFsHVHUMc$1+>!xUq z8yu8S&1XaC+l91|{s`ViR9u*Bwbj2$VmgXdCoPmU8X?5}c##=)vB;OgRdzZ+tqB{DhvOl5CXZT^g_y3`tEp*&dkKE2)$C~L< zFLR{7gv1s^GY1BgF86fDM0GuDdPt^(AG2ok`~<;bnMM$&lrvSH7yalg@^-{&?`>0b zabTgn$B7l>ZD;noU|e?qt#u7c@FH#tdrcCB|y44qk!vXwpMTnF=N`r2HW2Vx(x`hO5p?JO| z6aJ>@>oBf(L7~Obw77H>)UBJK zaTYHSxOa8kWt*p1k1U}Kd&(N`9Gp{n9PX7LKzBWV$YR!`#glJx^vZHA_%6`NRrQh6 zg9XK_5kbo_EUJF{rpuOd6~X&g>E{LNMMH-N*hrNAJy6X2I@eYxE!5W+iKrY~^EUnW zMJV2*@jUomYc&1?9$(T#NkPcD$$6{X=lj>8fEV#1MC;hj$}1|+(*5*PvXe0~M6H*2 z`^ty!VNs|nUnw7=8xuW}<56?pwDgz7eA4iNVIF;~3J-vB=G$*pt$D)Sz&tsE&l->> zneXjZT5qG??<>-q>Wy)x_up3^Fug^~Ov`ho=UiCB{C~+7U+*7V#dx`6ose{<;&6WI zq7RjI@txc;R7O0)i`-DuH2W%5-l+{7Eu9d%*>QN7f@pnu7aF?iAM+r& zyBVsunRMm*Onx@2Yj|E6(NM8fxr=AI-Ysj(yl+VA zbbA|W(%p}W^;MkwHel<(zgEHEzn>irbOas%=a?%oo|$s0p(WQ8CiPlF^V|L! zp6{8b_RK(FLpT<@rVkMQUkTsaUp2(>cQ|kCr9?fF7~9Dm5e~cT{7YSUa*Mc_F&$i~ z4_l}!F^^nOhMW6su0=B&N>ZA_uIF!Ei+HXNtR5kuQzmOT_1>rN4=2V8MK;QHUl*5H zU0XxGUQ_K8+KkSPuI7{tvi=clDkbIuD*wBbrUMT&17|y6b-BcFdUL~?M1nUzUI96f z<{>QXghyEY=bPtR3q7^0UlxkEyW+pksqjkTJHhg#M$rN(AvWPwMf3 zybcnmGEez`l0QlPUotBHS>w6^A^0ECm~T_!k3<*MPQa(#a{N(qgJnZ7ho7I9Ljw;E zSMqXw@L_I%w%XYKe;l#4sZHV^PALGxln}vL&*po#g`w=EvNUF=*i{2rb#x9EJUg9S z?6Ha0~#A%wZQ-~Ru#0EQ}iIDoj=eeG4;TZ(wNtq>{q z+|d`x~#tOc29F z%V;1e6!(JX-QDop*(aiN*Nt?aHwo4@xbS7|_@EVWCFG8n*kp5z?ztEmZ+Bx|b!EJi zxCM&%`=WaYQZkd|e`bHmZp+xUfE0jnp&UUMecphOL3C2GvSq5U`F@Mn1eW!M4cS<~ ztYr1yhu#Ar_?*j8K4dw*#JUbwV$EA+hBFHP<=YRfks9Ost=ChM_J)!N@!IDpQQdEt zy+Vr@ro-{HkXYs0dR!Amy<4u!>R%K#fS#8f_IxN~LJnlo*F?G_Fj9j+Zy&U0Aw2nk zQ7(u3Np%*X;*_X<*PW+RnT_=?UuqnOp>^9|?HjdOBX4$F${zyb-!~q)h4wi?{NsNR zC(nnz?ymo6^8N;{`@BO=+_h_ujN~1b-kO?TX+AF9F;D@bzxMtXmwuDRqy0s2l!9|# zpB0KIzFefqRl%}Xe5o`t`^xitJ*rrAvcd-R-(+n!B=d$Y(3g7;xrp?zf6pX0C%_aI zzbN5n;rVf!UGP)Y89A+xJ^mbD(bW<*JaBNj%9@P)JZr@7m;TOEl#%pTo})zLB^PER z16}z0$>ubd+@Ck;UN9Y}^xx`F+{9c5ZTHviX=4SG`@;rpay@fU)LV$MH=;ze8bXod zzXg^R5PDXaBlCYo%^Y0sGd4zW18zLKd2dp#`3$n`M9I%q?hm{-J6G=}ifDkK*@a)v zCS|gZ8%m;v`&7W9 zy0r^q_h+q>VdGCy_M9$am}vg0^Bn)svT>!~5kK1IYIWmIqI z{{=^3KSR#HLLLgWc_C)=LuJ$cPl}3m3jSLj(g~Q4ubv+A%L&!FyCp|xL}v3y?Q-pw zFN1)UP%%SbYm~9qo{O&cvnTTEDW=tH#$qQ;;r-lOUxpY$KwFGyhBE|nM@LF;A#wX1 z!-6ksC>GwhVaR0sHAJj@d$N293CsPoh(-hTEJNlXi{N+ms`k1BIW5vvLC^45gjW0Y zZf?<+LJ3!@!zFa=N+@CJ3jj`F5G0ecMd!la?76_WeIzwMhV zk*_6D`Z2kBk2F;w0}e+GrC~V?>igI(nKzYlEKUU5ss20tn=6$367US10%>F0`AiC! zqiLuC)}7n+l(CT3SZgO@WG0Uo*99Vd0ESrDoa!2if^q=f(*m(}lJ463M!eIr3E5T8 z_KkO`-^trG{v!2ZkD{j11&sT_1?`KI6ih&rzc`8~1mL{Mos~nO(+0{c;jgJbVQ^G< z9GgyNo#FF17k^h0Kut;qK1A~q`t#&t7kho5VT=EBwRFtn=xO9`o^ZikE zsEiqq|NhO0|1X7y_q%gG{s@cr-3QOwqs$=O&t~8vm{5=f;WRX1IH;(~)i|gfemOLa zn+^J6%0K8M@^F;HkPtpt2#eDO1bn2C@Q|e;^*^O*TOKz#xR*kQ#f?+_l013hzE8S8 zmLYJEE(5$88dh2I%3PJyOZ0jdDqeT*z5xX+lknlYwf9Zm$ztMySt_rQ}5`> z$jEjgM+7g884SePg%EqWYdBgXDW}CAeGWbk=wdnyFr(SoEZ?e90!~e@%DATKX1ZBk z!mN3MhUsH}!1#rZ-Ojdj7(<2_psp1#Gc)i=+mu-QrS@l&MCa&yI}ZuqM?6uEM?G%6l?yHGY7_n zSAetnnEv2&@5_TNwMwW!k87y>M9Y(aOFC6i>UfBZ`b>c;Gw%Wlu+|Vkqz1>~Ick&V zyTDk4{q`7<(9i6cgcGX~|44|gDylLUoV0-eMrVwL>ixM`x`!Ewx$WP)#CI?De!Z0S z%VPMBXG6J85$txJPX55JG3!EChMEFTcP&3?@^4-x#KlYFfpA{uXB4-U&R)h$jf(t?^+{_&FBbTcgZ9JSZOuzH2~g=V#G8X}&#O_X$2*n7`DQrVXCHr?xxBt2 zc9qiBpxM{A*HYgKJj+y>OgeHmfxv}?WDTP#A_YJ4%X zjes19;7IZNa&#bdc<1O2(9LDRA>ePJDlUfAO60*-PX>(z_BuMcwK z;^J?mqUYPP?6lR&s;5go^kQ5g`eAu|68x=rD&C=#w9ro17;*2fvN7c zu8l*jz(XhuhQmsuFhhS=5GE{aB;}YPKxy0EHBO(2ur7dMwomRg?qucm;2INScI2Mud;EE-YG0EI1ZkLB&?iD3!6-9YEWZqO@;;l* z!t2p~=e67X<#OtEjx8ytHE}LSU3m&op8gCMd5_tGl5^KE_6Tr%TBI$CjavcDC!KO3 zj3C)6tIIwl(>KnjA~f)a(1pUmlXN&_#~ODVboxfd?c9aO3wqNB4#PbZJY8o3=PRXw z*U_1O4+#zw$%?B1^e^AfeGl+7 z$4G=ljTp`birEjlRGLXy!9H8We+jaC6R3Oi00K@u8&JZhdmw`sb9W6lf7sA5MTSY= zs;y-@gUiUsRDyn>0`&bMIXSuI7->+q_ZX6YZm)k(cW_`63qfo_wgbBhU~C&2ME+O| zRDS?nAYPzNdkJ!&VGrC;f@q+Fq_~^QD z8LtdJw^W)E__!e?HH@Jw?f^6(*yWEFAKs>>sBRX-fb<(cFeS_|W5xK|V6pd3gqIE? z8B_X*i77z7?laGAJCcof)6a{VHw_unibNq3g`L;vMtFjvu&^N^WkGtcH+fvP_m4$K zRL|WGS-j+OyH-a5^IkFk7oboZm*$TAzl!_rxTc~lT~vw!f`BwBk*@UKi*)HK z(nD|3n-Xe}4$>5a&=F}O(t8Ifp#}lzolvC&2!xUVFWmd)-kCdh=FPk}zu)^e=j`mg z_Bm&*^?mExdtb`VB{-y~7Dl^lw>vPto~bTXAcUFdl*N6vP0&ST5HunuL^4HTGor|C zshk6oreNv}HEOgfz*f7ymnvVbfiK{4K_jU|`+Mt9Rth-)>a}I6Sb0_$aD)%4 zD^d2bQEWO!DDVBy$~Ww6@|Eqc)9|q{1d%gaIlO}#y2b;w#=hU7=gJ*UN>cmI6^k#T z$mQ>+m%Ree&hox&C@>*bo#b9UAEX=gUB#!z+k*|exhuy8lg$L%r<7a0nxcsf>l~81 zOG8rE?$2_9Atu(4&VmMXX2VOqvDax;)A$5UmL&mT^?kH#zaM7gx2ZLq{S030}#Ze`kN`)O!GS(3NLoU=Vjrbctg@^E1;v8zo&b={SAoA2M^ zL%nKH*_x^UOiFsZo>9Y10tS)7@;TD#CXFS+ACQsdyp#h#$2ofJ(q z$ljG_AbLhKT-KhmVj#jM${e3!fXZ*Pm)nk~h@1-w$`H^sofq+axW}w6RrvV|L-)(; zcmX)`L%>CM-Z& zKGpJ>!yY_%v>=)}DKpf}m#MSg8s5KC#c6M)_p;M>hnhw?Nxu5-qbo+CeOEOk7b5?p zk}s|KDG{*w%n}CvvoxJl*x7STHXpWlO1!q3Zkah=B?W=b&4BYQc>It7Z8F{hr=&Y- zp-~SU>u86zf^#u~PL##r^@I_kc}uNR<4txnhoxot8kt#p4t{sB4h5zuvDCHM>3ghG z2s+D_Dx>cS31xIIs$8u#d1EpN=;FWYA`+h?)FDiilDoI#iu+V4`h~7L}{&Hw@Kc|zZ)zPvu;Y-B}?tSM>r~&7~nvMSfDJlC}jZ3iM z-9p!*lCAm2nH^CVK+$852vJSjQNE{mqyc@=$jR>H3!>^?Q)Pt*hJQ?Z_Za8{E_(p^ zd%&NWzwzgNY$-mpUJ5)3IqM6dk|PSH>O-#O#7LwOxa0Qf3e_CU@kV`X`m|O6==j6w z8KBg8oqTql^S0&2LFvIDZ|~pEqZ1ly{L?5>lW|Pv5HIcQ)H^QP z}h(uDPH9^ zY07>6BwFig*dgmdJaql>lw3r2w`7=&n_XwD#KX1{Wz>a(^g&9$OwxYdyR&FBb;-i~ zx<3Pf?o0`!H2vkROYm`3DGFp@tC+Uqn7NL%`Zn8yVfhO;fRL>=l?#4-QQfQhsHo3*o^6pM2_4_q z=P|Y}y|7fx_6w@7yo>`4K{LL&irgz6t!GvH48S?zyM0#3c~*UAlb?#E$R$4D%R-^fFoA?6p z(Dga-d-B=ainpg_t?v$h4ZRop+~&nA+|!@~lKO0uEGNBSX1>)6Gm+^P=gwi%9XRQO zxp>Rdn$-k{Rs<8SIK2!QWCA8 zP2aoscPglzXOv~VaU`zRg|*3YmeuDv+@6X!yg5%dkQ>h3*)jc=SAlIe5et47{rNF} zcTYWtgM8^ofCLp3%~2M`iw5<3 z0gZEo<2;ot6k_6>@O5m~ss!U)e|YAphCVk{IdxV^wX~qYS9z{j7O+P5%9Ck%J~yD< zi_Myk@YWBEfEPK!ttNTo#rM4bZo+ZYPK9UEZL2%8`=iA{Uq)irTsm4xa*E~K7Zs-H zR$p&rNjqCoE$kOT{8@3?D@ihl*x>ll2#lAn`sjTeJ^H0Lw_n8096LFs`@nwPaKHtO z1Cz4Pi_U$mTNYZ9+RXXkWelms;Cw$pYaLd_$ydoq(Fg2_0ZI3ywB=Nf_=V}g6?{Nv zhHbMs2A&y%>W&){$7pA{LI= z3`Dm z^dGaPZypiV{nj$+%ujrPQ~=TbtOHwvUBkR~aJx|N!J z%f-Nz08a#urWr&}f}+FMB!tI|{_mGAXHePzD z7uZ=H0HzVNeY{}U0$TGCC0=)%8GU1l?(SQPNo+V;9xwu#|XHUN)+o!D+`4KeN4EuYN++12ENt(I-z|64!o6yEbc z==Wia0t^jqucf?YK}0NtJocbM3Io)w$>Gbe9{*$TCuZhXt;t=h+7IH~d?Df2&5Y34 z3~@Q$hd~;T52sjHg0Q6X2l4gzvuSVQ<|4|V`ME^=sW$Bow1z0f@B04;&DwlF0cBl? z$_`>0ue0pm2n6BW`&3y&mjnB9t-TV_jq@azhoANRo>0UuZpqY+C?$M0W%p|Wg!@jT zpLt3EQ)bYJb6a+R1lnv*(dsR~{K~tnvuUyXj1S#6qoh2QwtDvJRbmO2O*DJ=fPzA| zj)fdMy%K}i{R(|*&Hp`UQ>}OVAHizaPRIZTmce|WxwlPh-ZrZd)kxCO&Arsl2w?wojKTnht(7r`Ba~7H#4cDyfItkD zGXLsKtqodUud2Dap}AqQ5_P}#^%N!#kAl7=nm)^TQYnot$j z0@RJY&~92yOM-66ax1i7IHw^vc9$3&D49K@h*-}vZDhOY0%xrX1Pgpi#~*GTSX3=L ztR3$nMwGLwQ8JrLlPn{B)6Wab;PNdtt&uXLV@F?!gxGB@p019Aa%BiXn@xgHkonC8 z>H5C)5$i$UZ??Ml!%}w}rZFl8Fb8)oFI3|#I;U)e(!yjyC1!ei(o&k<X;T@kw3uSIMD6yZZV3fl+^cT~>7nOw5nYPw756JJO zrPY3xFEj44=iY*WfABMZzkLf8B*_$dKUe0e68Gy-rq}@!qhm|5k=#C8X_zSJULc`` zX;%h(lT6f66d@BJvN=J_^rYpMsVkidqMHzyOojbQ36kr6ZvHdq@u%lguyDISetC^~ zzb+rQ)oBE+^o2GfsO^eBD=)@8(qk{JYfEaWXfkLKJ_-}yV0SSc?v~22SfCV|_BiI3 zyPE6&ZK-pxu!31mZT4qOqWZltV_sLim6oF9qfQHYdg;rPFEABPuU;g6r+#zIy30v~ z17jhG)Zb^Bv$Z}=OgML6U?g$Y>UyP+(HbU;N8cQ@3a#-w-t%I5X^dU!P6p8Rg}hbF z7)31ZIG75>p6MHmvB6-d8fQfOea*FqO+a4%*IdlbY_!diU^Ic0GIh|*aCOdkf?TJ4 zbEZXROQZ`@dZVCr?P|qfoL@3t1AnonC%%At`mJyf!8QIdeV~|usFUU#2~RZ96W{p) zlmR~T?EJ{@NQyLn>pMR~nYV=<ZqvaBD%i8 zeAu)*o}=lKkD6G8R4p{^@nEM=T~|5oMOKnFahCB%T6j@(e> zT!MK}kH=d8Z8Md-t|C!{r3LHX$-ukOx$;9#AxL!^Q1N9lo(A`xDqAH}SExgJKCCHt znVwXH{Odj5;?iA}<)r`Z@?WQzb75a(&adQvS^fhgmuvwo7))cwSk@BqakIuld}qzP zdve0s|^c0V%O+0I``o0?3m{FXvu$*838NjKHGKAC`4A3D?kV=Q(?XiE}xwjZq= z3Lh;&zap+5cV+jE09yN3Wg0oWD=r6q6D)PMAQ`Y?F6q5V*`9Hvt~ywp`HSpjj(@y{ zm~@w7b=@j1Gv5}pR-nXpz0?L})7bBoe>9j$dhT&8XR`iu=jy|{WcO@AiCU%6%;~tW z%KX)%?FGi=$&?kgdbR%ln9JL0rBGJN_v6aJs`0g7A&k!PCzf2*$5M)3Lh{Mb{*1SqaEM$kdL+;*Wa=Cqcn5Nw|PXet&@(QW;5k4=u0?nS%Y zh|E&>JNW)`oSf(5Dh6wN?d3$j!lW3N+~kh?%jo$TlN>CnbbKcpHlAlK=IHlGCm8C0-RUzsz z%^-fRuI_oVJ2PHFVr6AD;H`8+zS%d%5+n2n{z=ZRca&ImQ?dEX@c&5W{Ut#B3lli- z^k6*^g=~)9pNZw~!cudwA0vS0ePa1*RQpL?S3OA$d0sLhgs6LJyTjF7V*;&?ryl=> zNPx4J*tA7^A$+fspBUp*Yd?JrhW_!W+HNgU&1&DcuPPzo#ORiMqn5=?u~Fp zc5Jf0yP_%E63NaoHM3j4MJIvE+ci8Uo~qYk<-~amY4zIAn|uG1en%?n#KGIsx!LH< z#@u*lZ$i+d`W>2O- z+L3rLq$Mb5M1D@-DswU|C+AWB5Rdy+pY60JMYa2&;lQ*g^{?EyMkT#5;gXbUOeWT8 zCYW-hrRcqen zn}7BFv{S*gV)t#pp9=G&QaqM3Z)r9((TXVK_I5=2ys>jzM0@awnYnC!GfJ9d;Cn19 zo!B7C;6Q&tkwzl+;B`Jk8pYb)E8XstHp6CSiLWllaZ@&_6f|EMoM{c|iTpEq-82d9 zS}gv%x3%o#n{1!jM=Jci`l8*IN@G?cu|klPR__Uz;iYSa1Pn#)pxiB-9-+>7V;RZi z#{%=x1UCb-8+Pt_o6Dw{7-zPqKZn`1W!44zfrtzBl<;6Bgi<>r5?H#}!ItqXvo6#y z?hX0Z&|3#sZg34Q8!2U=(=ObZz1*Ci`MhAwV&CJa zbbScE0@JAA4wtuvYgBI@4fVZjY1?DoZz-XB7plDv-x|4ww<<#1&6f&sDX#_X8M3^v z#P#5S^Z{N3l+4vw;*Hlv`?I_ZH5h-t@lC4c@!Z5O&{hiImAAmG|8@x@k1xGwcGgnz@= zvVxp$tn^L|byU%B3`>BYcqX3^I6`m^g> zsr|q+LK02v`mFw?%9E&2X&v5~H2utQ1P}RmFj}S7def_(-)h#=+g=j8>dsL64s=5kMx2 zv~kSDkHe6NH0*|0eD+HvfzM+}*q^kJV42Z~x8tkIXd~`l%fF=Vs71womCu=ajzCi_ zwaBEZ1V0$HBX*OUNkkwdAyHpmIKK1017EC9oo?m@zxPK|OQWNcN)W9d@NKUHyhVz< zw3U@52ZxYN-^U#s0t>$Bs+fRX9M9vT2`oBN`mYx> z{*4d(hiZsa$!+ufy6v|byM5jF;|CZ&V4d#s@PAeAfOk)B@lq8gug4gkTW_!~F1!s&+l{{u+*(TU@wXcralaVQLFp6=)-j&r>NFz5$q=ufk2o zhUWxA%^<{9v&RB&qXfT=!UMfG(xyd+t=4Ss;XcAw=?*8(uF34elYkA)b`RxJQ#jDj zs62jGP6PePqv6|NZJ%w__Cd|mnt#=Jw8ThJvgMf0`#lR*0Hua=5)sgIi=uB~U~YlV zYdc@AZ&4tWiw?A!d_R6X!5*#|0g8fJ(S!*zbPNuTf7>#oopyh$E9)C7H8;U5UBzU2 zar)JJlKs^Wiv{T%n>jXV{vT5J$SP}^Jh;VF%WhbT_~c(3{nwlyC9m&g&(6n1qQ%(1 zgly`y8qVJs3z(+OW)|m>*$|erK)E| zVjnr)QWxYOGT{8{ZZEL}>vxcC=jvHCv?Xq~*uKp%wZF%mNQmqRQp4nE-+N4?&P*P#P8LHi#df9jhEc zxenaZuf#0xJ855j3*j?WV&MG&w;TZwhyxWe7~B!)MAe+d&RV{>e64Rqk8#xxxp8~U z`u2ptn^7nHT)p8!AdC{&Gg~KTQDhpkt$swUz2|IlM(Ggew)Ua><7$G$s~NAGZ_o4` zSN7C9(Qir;Olt02PC8?K`|AFd#D!~_^JHorgE4uHwd@jOb1FLWBwt?XuE-p*-EqeY za9Zt$*Q8-RVnv0QVqn8sIs>4IYeODjGa~20ij384GXCR&#tc|E#&od$!R#gpzLM)^ ztHH`pwj0(T7uLbQ@W<`AzrXU43L z>IqOc_|F%lyv=uXp3wxSz>^+}50OG9;^8$e5)ED;kf zH52ym>q-HI0B5dc(sy?|( z)F3SdYVsd(O7Qyi#{PcPGJsLD&tZ-j#V#`x6GWEOqHc zXf)Smz5l6q-p7~awz{|qmRS_k`!iP+_WPTv;l6zQG?8v*($GULut04TG45T~w(%E> zK=Aw49Mc{?(uIM+5~7?Tk*63D$IS7N5=RrGi!OykA-eJUo<`y3DyGSv{($RCfz|S+ zC}XoBVe#)I0$SypF%Oa5cR1__0jI@!8(w@`u79Sa$AXCI%F*vhRqL6?`mO_P6g0k8 zi&gVgf3Y(v#$;Q)Dl(EjEOK&kta3#$i*hrnX57VUGrpd;%2mA^brFu=?maFol7({B zz0;*VnSV5^brC15%2+1?cc3%|FP z?R=N3qWtHjZZpajfo zbqwg~W)ufl%A3T6PcAac%dWEB3}D=Y_JAq37DEIxB<7sPYE5qko5gY*g@A!{)#(O{ z>UKIQ8Pckp?L+4u0jCDLggNMC1x5gWqPc%Nv?#%wz1QXTpVTK$TOS|ghC3aOTaQ_I=2{>KRQ3L(j1@vR8VdTf% zVeV9cND9R5hrPa2$LxM^x*;FAtZusIv5xi{>l;t6v)*>-sbs>KDG`hsj2L4T{G86f zvD$)WC?s}%j&lpw;gBBH|l++F7mzPUaih%f$z3B+;yJ5x;8tO-7P>0dgCd`fB*Z*j$IFU+q#iR7EM5zT!U0x9Xl zM&^mA+c}v%w-0x76qdr$Gv&NFrds%e+wOB00NAl{d-%)%g`>o&TPh1kvH}BVy0BH@ zrv}C=*u3&TlUw{}*~$M=tMUK2@n%pV1HFW27 z2j_JO`8WMV-O`pKW8d;Or5H>NQB=xtxNc;-HnLY>!=arRTc( z6$Yt;Gw~hwd-CaPE<~~ZBA0Q=#&CuK%3Ud+ILl*MLrbebHG%OAjfTIKylKaVl}cjI zoe^?dl;)<2an!p#G2s8##+0SWSly$W1iWL@UHmQyNiY2HbB|9zyhHj;YtP1iGdjd? zkE7Ja{=D74#rK6tUzy7bNvv|RK0T;JcWd8PRu|Bh>=&R)ti@%Llw-g&V z@-><$HEWNu9oPSQYgA@j%};~QzuHqmSSv`%x3WU8@oQDC+}&h+d4Lh-pcjtq{&meC zva>ORgXv4e%gq(F*oG%90p=x{dU58WyknEYn^~tD2MfI{Yqx`IXT5e2~8NL>9PbF+sFSvfN)W?|B1=d8%7Q`gZa`vT74RoyLbWBhzEzgiJ(a$tRJ-t4~=Zl!ytes1L zxoh%p?zCzxqd?s8v_n{nF!JNIhn_^t)%RVfoyEO!jqw(?7MXIMk^7DcR~L4jBRqMW z0ZTD`Gi83bvg5ebTYThFQXB0(-T6Jvva7v(-)UPT<%R+oT!t8>f*Gb-JI?lND{v&{ zY+4Xa{4{0u>^_kX33!A>Cr~j-pD6%&&PRVz(iwiKa@2hY zA5=-pF(|y3&7V&CM|oED8eUR&y>g)<|1g`FoxN~dqN_1u`ZNGqW3Xs@m12E1wbz|R zx;S#e^R?php0iT7YH~k7gPYiDy`CW`H{=?{QqkK8M0XPewENt;ZWf89tlq2;sAn>5 zR;mQeP?2n=rP`68r>->ZT1(y-a8#UG$0wgo>zM6*i<;te7?fy8J4rhPPPSn;!r}F0 zq!>?%oLgrWEBA!z)7BofF&1TqF4pNmj6by}I;8t}R*N6ZG0URaA}_KeM|aZk=}iua z{OPfyX12W~9D9_o3Ljzr)#}PD)_Ts<4hu}zunzvQfN^a8Y|wrcuk1z~2CzGvnEZj6 zs&KKI3B{{JbY?4n(q12TpdUzorS}l7)rEoZOTR`9r#g?aw{U7xDYH=VLH8fyQHiKfE zxTg(44eodCb!p{ep5N>K0iqT2Mkf}fVER94z`r@%?mTJyYHm-C@jU$PqE_;VNUe6m zBAv7|Krl0poAATCsOXvVGAFj9SFA88+EMye}uKOmf@!TpO%w+EjN#EY7 zfsY*^&Q?ZPfQbimT!K4ery+*Kr=#Qa@J?Z_{W{D5NkGc-69ws+eEVkp;qPcxw%3}a z>Sd}pTCSPBM{_(M+hQXDR}p3u*_$8IKSGkiL&xiFC6JuQW_?1W0qllJGN_G(9_;c-pPi{w-(pfCNNtc|POmtP)1C|8`H>yd}+kOGM#tI^GII8Q?|`_F&!Iy(Ka!o{tM#gd=n_JN~%2^u7&L z2XBtPhND$l50OG&h&T2JBtuR*)UUi0N0|A5N&6(Af@@8(Pk(Z;F0Fd2m7g88hfKRT zBr%Q!Cy4R7Jzs{A(p+^%Ui>c#r78%s%gdU{Hw>Lrm<(B4Y=j*af_ZU?E}O8AlpTdm#?Y;1eafxTc|G{0@B zGPXOQpX$bEt=DZ9Ke?}6l5Sy46#w+m89zVaetnNH5p_GiR?_=Eue%;@o2gx)w5~YX zRby3$F|ka)+xre51_c;BZSNo`Ngl)qRR_a-}eHQMB&3c#R9i zT*7*`U`kSuO4#q6=Tlo*L+5_?3HG!FLELa;0SRnpG4|0p9|qF+`5ZH_-NHFr4vqbK z$s_gxGze^4+QWqf>@%H6c^IwP*@0_Pd5Tq^%hiM?BR39p9nS+sK13mk*|`EZT%U+( zCH?B1a(5~+PZK}FFMQ zs`=qM+zp@oS8X6`4%nNdUS#AtTd)hZKI=5HUip-z;pum-k;|g-LzrguK?bTjDC5@s z#;eK|`oP0?u4wVBmJZyeMTz)I1}lE)Z04oNaA=Mvmn!X3B=XPMYa(b`qzBBFm@akb z;(F$&Tsm`Qez*gB2A8wA5ueUFD!;2CxFROv;FXg`@__#}WK7Nd2ka8bFz>m2X z9n0FyhZQQ&X_FQJbYWDyz`HN5YL7ky2fcX0#1xEsMwxlrSG&r2hVoU+*z17O@7^-% zuk30CZ{Lj}?y4~9=R}d`hL!?k`?(?skVjjSN>sp*V^R_hX<;0>1R|4^nB{{9^G5pg zuGPzEe)^zDN)vge`x=jPEiG}+>E1^IRYhmwfzmi&c_k%$c%6~Q+ByL6h&H~U@6i71 zJdBIweMR33Y&S3-Vsrc}rcX){G~zC4Hk;}8(x5K#=g$qFbY7iP+iBL{$rui9raxNz z8BVml&5LF}rVx0-jsI+XAVF{PzFDd1W4VIT2C z@C$GkI#!t@-1jQJ_^}@Rx>pOkYf9hn)4-8|*B-Us8Bd<{W2HKceUhjtJ$2BAt9QOC zxtq~oCcqRZ-9-C|5qb7OzpQIulzB;|EDy#UxM3ydeY^(okm?_J>p50$ncG7DLp3IV zYzSDTBhkkF`I6AwqgJTD7QoWlN17{?)x7PUn6=H?{G*qL**=+*{*3$Mp@>eLS?}m0 zYWIb29&e-YstH>K4&+{n+%`Y?f&~RFj<)wu6{r*c)JB%iDWQP%E4y5uAQP#PwvLWxnc5t|!Ib9^#S&`Bpt8F=KVyPwEob<@WcR0pPHfC= z>#=vtyCUwNBS+-aG&Na;g=@Hb*K|ESJ*TT|iLggJ5xgi>$J(p&7g*4$d(#AtZGr_! z(+wUhL6}1V64jpea#KBO8k*;q7bgxA-zi<|O=>xV|JKik$pP1T2>5-}YdU)jL=-E4 zW@Qb-jt_$wSkpmXJRBGHkj$Fi^Pc$r@Nam8%b1I-n2~dr&jqV?UvQlwz03DEK=v0K zldq@^unfV!UI6gl0G0bSZY`OanZQqQEZ8Oc6vR&LPVMabzQ{s|sLtxTCSC3UF76#B zGkeg~7bD3IiJ48;N25(L=l1pQY}}<@`|Jj%LcX)t_d(em`%F&aa}}sQtMIC_SLO z@2`y5Mk@YgF$DH!*-s{^qaUu&_4;Roa&_*W(_H)a%x~tUSUg;!^vwa+gN4nijH+e)^UMqE(Xlvc%Gye0 I3Kk*%3$s@WfB*mh literal 31272 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%0A7HyusU@431lVSr@?j zR&ETzCYJL`f{4KN?lgaJ&FkuXrO@a=lws+YKG^wiJXn$wku^S%jU^fcbN9WB>&^@b zHl3owniIU-R7T?}t=728>U20;99U#ZK$kRiNDOmrp;%@M=(J-Dm7`!Bo z#hlm+UqLC}nnr|Ng?LPrhpn#F@TjfxKBxLo2!0zdY%+ChU=Kj)Tl6IC?XhEce|dGV zaOTv94s1Kk!^PTC$txpXAr3k?`zzb~V=$-^o$CYMUvbe)xd#l11$I0E!ASV!|8N}s z>N0qRKu=A1k>7ngm)5t^ZRy+$LekFmih-WW>%`OUNegLYxJf!s!~jkr13A)^e^f}I zSKWYU4g2mzKV9xG(Xc{B-`vZ7#}a{$O*Uy zB6^A;GS*~`M8!dW%zT=NXPl&ZT9Jy){{1ao`R;|CtC=qQFGKg1Z>JogcoZo2e}PLb1Hl=L4zo)a3Oki6S0 zegs#Z`{V#MGhB?auTr|)lJ1J}YXJ4;>pdKlKwmD;yP%GjBjjd+=~Ztf8(VX95#hvk z(N9SCr(`Fsh_v)%VGY!_*D^@#`6qCNs>NMBD8K*0nBZ$p0A}*D2z`B{ap>3T3M_t} zIq72?8wokdw9^CIVuTL$ znGW3BM?=3&ifwV)&jF(~;-=Tk(nF*QR^=&T>PY`S%v5bf9>@1%)t6&Fc1@jkQaT^` zXcx8&U9NjP*;gxq72K6hvbEUFylUu7B2YDuu4X^&B>gD7tXVuL5IHC@9P#3gOnh+X z2kF^^tm)M1K{GC~GaEWeMe;bDPkjRC(VZ_mWH?nYyDFTU~LU^tu^LG`5 zaSvyA=}gtdzb2eT4MRK}jg~12h(U258#lFwyAF&;KqxYE5RJt?#$3F?_Uw4)!~k~( ze&-oTOLvCv3ZO|T3RY#T+QTCE>br?`9Dy<<5^9;glSGH`i!sUc;w$00NB8L{eV9$F zpuT>7S)j4jiDw)97i2Hp18e&`wDVPbHNi52P^&C2!vT>zfFgJ@hX^sqedd}?!Msu) zS9rUUAdTgAXEGnR$-YBlbL_zs2s_Ig>+3^_=ZmUJ279i!06Jm9qz0?oo%9I3qj`wB zdOC_Ls!ExA|0dmIHj{hB1QMh1%B~nbF9IwAEF#L4SL6H_rDxSZ1~G)(z8{tp7;K5l zz~t_<5GH6Q3Tt@WcQXzBRniwCia;qfw}ZLAZncS;=Dr`jL3+5w(ywihTU!1#j0Qw^h&ulx)k4cPq3qh_l@~CA~hvc zW|)T<+uc!X(Xv~MhYSl!>ecZGaM-2O>|a?4p3|qH>=Y{fil`UfSp!>{UgcjvKXO!2 zXrL+&Bi5Pv(h$|@mv{sMf0093WhKY0r<~lR`|;87vGiP%iiSo+d_sbuk&#hq`X_q& zjTc#qrjyav#9d89y9YI9ojHCpFImQ6?cqkEIyUY{Q!mg&oqJ}&u1DH7(XM}hh~(LP zCkS0IA=g9>>%8xE+2Y~LNw~dGDF_EVaJ_}yh=vQA%5SIJ?j-sbR#s5OEhe9Ktw@Q- z@aH|cvF(d+2rr7o!0iK8htD%Zh-5lvpV_1jnUCj%i%wAJ4|K)sL0PqP=AjI{Qt4D|II5` zU*Ur6ieF99-53Rxz4$eIz+}3ZII+6k8F}2j-^w{QwI|%<-W5d#ll&IkV+FT;H~bbT zk8ExGMr!%f^z7Y-@B4kuW;4l3k#q&CT%#dPMUUFRUcLyB^xuwI+qhA#w8h7&Sn2zU z(M-#NyW%$%7_OwTmIIdCS){7HcwA5@8ghTSZ;x%&jMi4STFckFcXK-W|~>1X$0 zVKu$`G>tEz^~Ahte@~IvseDq#`fDy#UB%V(pYHQP?Ad2(rmUbJa=-m&*~5toP-HCw z-*_YeCun@n<+UdTVK1WV?DwEv{qV%|Wodn3)cK2Usjlk|t(AdrhnP_u>1V*!!nN|* z^F)UjmG)1`8e8I50C{Uy3#@R3-dcw57V0z2%TBhG0G*wcB}Zc>YyExvRTd#*LCbMe zW8ng!-Y#V1k2T$x;Vm-v@6oIFYasnqW5>MbkHKt^!U~Bg6ZSOGoHFU zQ_<}bf5wNp~#JrV`5b|W}o!NzvC zK3f8(8x@avy47ZU=4DTH!cH`n*z2heLdFa;L!ocUkjk+bqW&@~c2VazZ)eo?;o*Vr ztlj$uxL}}4oxks!HM5kDA7^M#R$5{s%>3JSPNlQdR$b0}`Z||06Y@&EyQLvGx$4M; zvfZ!rz7xV%a^CkTsi*c?*p`9sT%1wNnQveMl6(0Qc8w^z5}Xw#Z${?blrh=q z`NiqD{#|*hHx<&hSa&0M;%*kW{AA_`ycB9+%n=HpaWtp%Y#TX1* zAu#+-ql1&~bOMUt_53#W-mNS~wnH1K^)@|mX7xO{(cv}-t zQF8Ei+)5s&W7Z4@?$5>|zAB8@RuPdvu-fY#`%rP|SV-K(wN$`Ol)0N_E`A#eDDVbW z%tKp!qlS(ib82g*Rt2o43ev87N$_xizQvKD8~ks2F(Z&5YB(7UcScDW_sQl;C!{`LY< zQMLU57^7)XPp@KVsPmthz^V(8N_c*rRvl%%6hHo2@BAg)++f=0qfZ)kwJ4I>i{0@RBiN# zZoamyG_KTK_VPEN>Iw}=E{!L7H5$M^OIp+gk$qz^`@qxyf$Dt4+$%dcj_!4_1aU`T zE94p!m(Cu%Vv8eFsSSGik=@tBf3Rp@BV2EY`%ckDvfkOvvE$>CY%tQARL4ii0mWZG zdtQS{cgwUqXYO0MxkLDTnMp&hmvrP}Que@-{|mj7yDK;+@v?!1~_KQkJ!QyF>j_hoy$4&CNxH?gQEd;d3VITT@!0=J_r!(^hSY z?S26(uUzo~81ut~VymSK-U<&+122Z8Pp)pv^Sc+L35<&5f1D`$N26S(fKK2?@?DmO_QJtq=xm^?SH{z5p%*WQqT!L#0Ji+Pb( z9TnR$^2Z^2k|jDt&l;op92lbZvgRCAW_*L&Vk!?KV+Q(%mj)&r#Q2UC$)B_0h0Raj zUYnh_@SNywb!t0KOgn4u4!TJwhS}vd!Fs0*(ZCY9>M<)f`HYEoJCZM_bXW_>ZhGy< zu`Th|TQj-m`;3f(MtZS~c!43Ct~C$DLj|IJAwz27_gvUNxGU;Ma*sNyt*3J#cq&feN(U9GAu?iXtRkU4%uCMUpAMlrTd(?##%XsrPi8}LF z=nNiw_sK{B^dyw@%;e-U#RPFEbE?!1E@Yg?MA!^ZHEL)6{#={#v0+e2u@4N*8VDyf z{W)mC=t*JrvDf`qSG5Pvb#;dJ%DmICrl{B- zV&XdTzx5*X>dDpKuw;@vmm%eMSUA#E0JBa76C~0cIuplWm%euBKyAEH^_F0N(yq7Cn`wOd3|?JNP7r=wacW6qNw(kd+{hA#Z@oh`BJs}4@W zFnzNsmV6oXL-)A8y$p|XGRTK46|}1G^6k*YhMweai}WYuNp?)mYnM9<7u&Z_7nag^ zE1fZ~`e{*84!Orb5w^_8(+32if$(}17}qLe{ku@B=Gg7G4iQvC)!r?VR&&--)w4ca z0!gFX;Np5O74O=xwLa7|W+Lo`vh!&+{f zdnGqReRrZykucB&k9w!1uxBzZ=0&}`V!(8Le%4n#vpZGdaMMQ=@(`!_T&pR_7C{6S z2Y|nv>%w9`@1PnDx(vYEg#3QbsHOP%H_O%y4GhLLRW&p$%B!0?J3C$A{#b7ZPWbqE zJ2H$w&=L4=>InTClKgu==|8FviKs7kh9OM-i`H7QGz{=>aiY$l(Hy=DK>3O5wJ7NE z&HYr$BueTNAG><|)}ycX0HI9AAIRf+ZAg3m-zcLxQu62pLiIRJ8A z-@mwUg<4(_jt(S_D~JUA@GULJ%g%WJSDu_oxz7)b3=KvrsnO`d_fkFNJ`i zyywl>FR|-dPe%pRKgvq4z6tP6i!rWcEXm6ae+OXJq~T!) zz#KGjJ{~kEc&vG_cAdVTMPaybdoa64uAA;=e~zHWnZifD$#}p&%bpG#Vy?MZQ5JtW zC~1kef}CW#+#TiWvH2wX>h^IsCEKz+k;&5!=*XaC!a>odzzWOL!v&_Nr?cF$HO>&p z6<9q=a-|eFTrrKOy=iB6*dqD+ZB}fg-fEb5VMG)AFpSQmK-&4-6V*Lxy&}a zU$>;P-dmr@t`Ex@;@Xi%&=sjiHL40Q|6Ay0PvjDI8t*5LAf~5C%Wya zT~jk|Cf{&L-|LwxEfw*E?sIx8r|P~3l`Ea8|HQTJ8O*;ieH_naxOs4*JdUs-VIKq4 zU|(U${$%1rHpK#&Y1+;i-|=(zE3g<|T3uZ&%?)R2*}{OZxqZGpby+gZMltUA zIMtV@)E)BS7lg92Hyg8dH)TN-gLp`pTI26q|q~`@>=om ztsU42a5y7n{!537222jU0*o4mXUuPY>c>BWR6xFRXUp73;jjpbx&P4ULTk0OJxU7T zcs9rWRg`hDE0`EvCz0S4E2lXOk%gd`vI=v)o{L3gh{@d!3qzRu+)1SV6_@|Fn3L>q zZr9AT5fBiN8k74+mUz^;h9jX6*1vb<;iSrY=5u1BLNlTN_D&N}xT(duO*V7~#rB>H z$D9aCoUh(#gSl(SwAj&&%$tx#g+uc8e|EHn z^6~da5f?THeRvbLjEn{bu}oj*)anD3b8HRP!!>Ylk11=W#OOgtzws>G4E+H7=nFv$ zXt64yedK@$DaFhNHpQzyWjQnfwjw^stxMZS5B2&bUu@Lmmo9&D<3qwg`yvnaquml@ z#)ih^dh4T_#})JSL++#0d^ttJ`#yr|e&<(~^9QW`9dki~l644>8qx zbMm}RqWhPTHR&rhW;h(r?uVGiP=vRiCRXF4oN~bq+;F(`%n9HsRc$v3YiNiziXq+X zT)1cpf=GScg1tc~TBnET<-8-CJYk_$=Ea_V0X}Lw{jT~tI7!(3i6*CUcwQeQJ=U4K z-J=G|W7YRhNAU#*F#|Z;`xw5nwpBm+I&jj1>py-Y6c==Of(pcU0B8g7mAwk zp}d2xzyR}lWJ{T1q$L3*SI_>&Q0)f{&*Ki1#(9Sr!_3-beT-qhjtQ`w_Hhi0-=Y*= z*P2~f1ByXEM&^*??sqBfi1Q>OZ5+`AeyGax!VP3FV$FtMUhqdIga2I3`2Klci{17& zwy3Qtud7X9iZ8R6fOU?7X(-^T|sW0 zwSjQ34D}mjZu^D1-XcGMnoKaA->*gb%!tqkFwQ02nIjo=Q4~Wayw1)8L#vxzKsGHJ zU&o>o&`b$F$b1I-f*jR#5BdU&c|EaCSEAB_noOU%LeTC{WP^Sx#DL555|u>?{~!+? zC1pCj)^KpH01`YI^`(00g|_DXi26f*i2b=?!@=&yS-q!diH)xN7>0|XoxKKgNi49? zpxT2OjgYl;A-^T(#zDs2H+G6h9^*I3zjoR}**Wy>3RCivV3)MOX20wW>eBJNDxEm_ z+qRlUC40`i^0xmn4mp^tIEUhdzTKAt}{VoptFI7%+PsbHc zlDmVQCgiQ3&f;}XKcvsQ<&RU6tco)g2|rZLp=fYVxne zP4TgJ2+glE+`#4G8R~YRtkGVZd8<-i9_bAg1mRWBVF90tkfoSI8 zy|ni_ws7eXq0f^I%WMPkN9U)KxO}Qy3a7zsJyC|v;YW{Smxw4ck0QikT{R>Z;o$`} z!KUHhE?ApNN!tXOQ~xHbIS7Wc07$F`XMACPc_l6G8htGbq=>xDDr$XO00PTCBz?2* z$L7d!!4el=THJC^27NWWJH^lJ{j!fu7J>PG)3-RJL1skf z0P2_&R8LoXq4T~}%aAw%R0+SifI))+Y&>x-BR)(x_4Rt`@)5A8rFMiu3Yd^;Fsi!^ zp{M&u0cyHp876ix`AD zFQ7uCh(>x26y5pomF#H!VGOTOO&|wf2>`w61@ch@X=1Pbj?$PRRTcQg-pY8C_o(x9 z(Ryp4J-3b_{!81F=(`qHGptxxe)?E?W@aG)1{A=Bu$vt7c#$SIr8*y5jKI3~EFG@X z4_MoI-|%&73nU<~)RMqTH{q~3GtJQX3aZ@@GwzcV)z86AKT^IzPBG2Ke82)w#hgs+ z%em7Kj0F(0r6&Tq#NnFr9%O5sy?L6|Sfh=}OD%5lAcW%PeLqnWH6tMAM$p9jfK`mF zH75+j5sN`{xzbx$;=<{Y277kz$r*F|%!!+6*+LWwquMd=(gP7pRmHAX!p=&TQDLn$ ziwfSjW2u%Vwo88-8!1KNz@Hnh>QLG&75qj-LgEPeh#`tkS(tm>iO9O`hu7m_w+7Bv z@;ZNvsBxV%7lUSLk8L8B>WPxQsC?&23XVrlq%M(YGIef)a@t!i$nuz??Fu@>_iofu z`2jmkr7xFdL1c+YJ_zzh~(NgxR}QP8czgN=C8rFog^N(D|}$W?iuWO ziG7Qd(5;QzCu+~=oS6&sTvMdlZWk&R z3*n8g{A!a`r+UwC^Y!b`>PhLco?hE37uTl|Do|a2fr#8k_Zl4N#gdUaA$mqwik+iI z4C)HYV}CbkmuHyt((!`OGjrq4ZrHOXVx!82N{OiEH`5|%-U8bFP*z+L`pzJS3pbyz z2z7EK%zpAI#8hwUi4!wGgQ%>^GX!y1V2x#$FS8n+E*A%Dr z3yPMRU2M&8ePuapg$D=2)#v`q(2Oa+3p=Qz5Jlcd7uOsqz0icvQ@$qsZBS6y7}euq z&VIxOoH;zdwl>F$PN z+i)e1YcJY$&;H)pASOLIxQc5R2NK5XsNU&$7OZX$E)8&Z-7lPLWP+i3@C6lJkHH6@ zIk?##x^O5|lzK1l3|IEL7N4RFj6|SZEPhOk6~TdkNs7VL9jT%zCvJbaMV+I=!_C#T zYo{H;k+7)Df`{xWW^;fF$6wD`y{sN$$r7$plUD{G+h-q6g$J`VgJBrLh$zPi=h5)z zu3liBcz_4n&4=umS)+*HM(WU!kWP^KK4J;tK|J@{f#fq>!I{&61Cv|?Vf?Jx;Czof zt=UvlWi3|;x=14rm-;ombv_F_gs?`n!-Do6+Me_4T}YJIQV4GuWj+NSb4yWs{&D-BD$WUbrgzKvu9^WwL#rgn(O76~ZYl4G$+<13`lbp005l2;wz<2Hy0(H*K z@8xLbUaheS-ooxPx7O~-Vs}b>xd%=LPFYP^Zs!oSs{_;&KS$nh-)Q(tlNI%K{&GN= z1pavMcM!AzK4>X@ISpp_4BisHI#jeYzSdCz=ZZ2gR1_$-Mnd0Mqg9LRk_roh_Ui9) z0tZY_8U`^t4K;4OE3ikG2Q<3LXbA#lU$xIV@MycFsm=h3tr)yI@4*P5CdV8Z0&)Ue zF$3VUZIDRbLoM2rYz5EpTAfMKx)}P-gG@#bApLZAIMfL7jKg{-OCxvAkQZ1O9|X3r zzn0UerZd859S+Uyk__MsVixrihfA!<#^KCM%F!-FspoP3VJ-rjY zc3rN8PA9o&JEh8r3#?hU3M35bOjBQdrZLFrHJYMTpUF$qKjsjX)zqBe_H80T(QEgKh8IWa^KD#Ko5qf7Thwi>QCmw~TDC5v{4QV; zB87&7BcUWZRO;YgrnT;A7hjpM0zR2RdzeA|=l)^u-QC@h4Y5C#=l`3jN%g!(YLY*! en|ALV(liey)ghwK19;Ulh`6wfP_=+w!2bX-)4ss~ From 9708d8770481689f03069a2f1cd91cc4fb9933ab Mon Sep 17 00:00:00 2001 From: tobias47n9e Date: Wed, 15 Apr 2015 21:47:00 +0200 Subject: [PATCH 026/209] fixed drag-end typo --- source/drag_and_drop.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/drag_and_drop.txt b/source/drag_and_drop.txt index 9e0148b..61020fe 100644 --- a/source/drag_and_drop.txt +++ b/source/drag_and_drop.txt @@ -55,7 +55,7 @@ Drag Source Signals +--------------------+--------------------------------------------------------------+----------------------------------------------------+ | drag-data-delete | When a drag with the action Gdk.DragAction.MOVE is completed | Delete data from the source to complete the 'move' | +--------------------+--------------------------------------------------------------+----------------------------------------------------+ -| drag-data-end | When the drag is complete | Undo anything done in drag-begin | +| drag-end | When the drag is complete | Undo anything done in drag-begin | +--------------------+--------------------------------------------------------------+----------------------------------------------------+ Drag Destination Signals From a3daa28cbd0dbf6f67fc12c7461773841c6f5612 Mon Sep 17 00:00:00 2001 From: thorsummoner Date: Wed, 10 Dec 2014 19:22:14 -0800 Subject: [PATCH 027/209] Plain notebook example --- examples/notebook_plain_example.py | 31 +++++++++++++++++++++++++++++ images/notebook_plain_example.png | Bin 0 -> 6683 bytes source/layout.txt | 21 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 examples/notebook_plain_example.py create mode 100644 images/notebook_plain_example.png diff --git a/examples/notebook_plain_example.py b/examples/notebook_plain_example.py new file mode 100644 index 0000000..39cde76 --- /dev/null +++ b/examples/notebook_plain_example.py @@ -0,0 +1,31 @@ +from gi.repository import Gtk + +class MyWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Simple Notebook Example") + self.set_border_width(3) + + self.notebook = Gtk.Notebook() + self.add(self.notebook) + + self.page1 = Gtk.Box() + self.page1.set_border_width(10) + self.page1.add(Gtk.Label('Default Page!')) + self.notebook.append_page(self.page1, Gtk.Label('Plain Title')) + + self.page2 = Gtk.Box() + self.page2.set_border_width(10) + self.page2.add(Gtk.Label('A page with an image for a Title.')) + self.notebook.append_page( + self.page2, + Gtk.Image.new_from_icon_name( + "help-about", + Gtk.IconSize.MENU + ) + ) + +win = MyWindow() +win.connect("delete-event", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/notebook_plain_example.png b/images/notebook_plain_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4020cc72228bb370f76180a42991a898076c7f69 GIT binary patch literal 6683 zcmaiZcQ71K)GyHqHcAqm1grPn`&wNPL}&HhSJWVS3(;HjC3;yz3xbF)tlrB;UA>pj z_uhQ(&3iN7e0T0W=boAS$GLaT+~4mvCt6DbM2Js`kA{Xu2v$~j_vF`}Rsb&clg(G1 zK|VQ5PdTtI?$Zdsg+x8Y6kdu3UOKKeUcMF{)@ZgauFlq+o>m^#)-IlQu3jjNE~%$8 zRbT~KU1-k1k}p)p`f=d+QWTux#r;j|{T$H+2R$DaBw89WSV7Mw@jK}_DuzW~CL)w2 zh8~wKlvqB=LL1YXjD-)Mqn6eIdyh|{Wh3b}zx>QLo+}xV@VS%vk#C-M*{QF|aI~-=JmrT>P zJ|r`Wt^`+wYWct_vU0MrC@Co@{M_an?c17NmOfJ8Vv+I5XL$Z#ZwCDNxv|jfikfV& z9h-|OY+;KDEo5P828L>>fZr*_2~ZNsOpZxEN;K=&nBIOm4VmL(H7s?Ko!YElrd)tK z`@=zrv~(2lN*!}fN_x)l;?SetI(p=KdUXQ2V$#xGqw3j0ge#5qI@C!D+YC7hN>}xQ zK|=Dgbyfo}8*D~y79o5)svmJM3o5@bf-4LgY+`F`Yrj3^V#-ux%bG&b>13iZhfwLf z+5K*6(=gWrQ6&$rS1p=oA)*qhWM9R7jYhL-p4kY&D?#+1BsVwv;<(=daWBhUmVP`y zFnJuU%98!!V9%1P0B?po;z??>0DnX@HOJT>jp2r@A<@J1^DcNyU=P;06U>5r{@2en zWDuup2sE)IKg5)cD$BChtMGNJ+C?@<_^7fHK+s?`V}3s&rui*q!R)`m=lKzF%ViP6 z{G~S8wjeB779qr{A&_uR-tLqWe}aZQeEqF$rhsVBt0iq&C|adO8!#Yk2OS>HT4u;o z%dgqd636eWVtzj;tG2(G313>-GEl**>?;21wN!HMKB&I4n7`QR&4~VvmyVP&`o>vw z1N-uu^T251fmD<>DzJA@0ZU+1x8glvmxGjuv=gYXU#k;Z=czOj_{wb`UIH}l9NnJC zwO=?Ud{E|^tr)HY&R(6r)cBR!Lo5ynq^?&Rt7%dG(c#E$;VkZBGkk^jYhYmI-bl{! z%?5La>_S2=%61yw`7EQVpka=NlTBxe$Yyx{&kA(>n~CG%2AA873fm|)g;x_rryF5! ztY;V#14B}Y5l*cSl#m*~qc-|`TUvut)t46sAO8+F@YDzq|1D_2Xj+i&O{u1c{0tycjvwHE zyf1UdAybr1)0--$XO_Gq8lai4hn(Iv>hcE>+e;K#kk;H~5OUZck3$!M_>*xgC%xwC6wmHVRWXeYU8U(7RCApTXN zFU6m)?j10s)8={vg_ahT(N{WOpV5Qi#V!^1#7ei=B*~VHl3-$7{)nS4Tyu z`|WHxmwh{!x{=}_DXZx`b&dxH%Eh*$3z1+6YnnqY=Ef#5{(v)pSZZ5eW)*=!0OQ(W z`ZjF^axMaYYpB6#(6U1JV$0(nIhP4hUzr?M8mFOxB3-^*W%*HzV0ae(5;S;}p0c&y z13Du9oKhq+b-;=j*{W+|nkNz}+xzU_HsR`M!=qn(L6{Qn9bSk*^)HCz8^6%>0Yd8| z*yB+sH^4WvSG(UIk@e9X_(?cK>}>{5v2fTxryLcH0^L>oQKPX6FYDC>r7E3f%k_rs zeiWZ|oA~*SIGqaBPyiEesekRzzQplt5yTFq|f%Rq|j=Hw?6r$>9> zg74k$0xG5P8JmAb^2cu@XkroWvghA!v#pLUfB&n$@yZ{J5v}3(IO0*dEGH^Hb+x0; zOk9;elR);!?uD4=bVx8u?+x-QV&U?9Mj_8m~tXSb( zoy(!K>M;5QB+s!<@)p@clQ=pb52@@OM3)()wZzevc+O{M3|oDkBxn4mgIBoU>@E80 zIv@7AL7E@vgwqA-GpeBXvm710D7*HyH>J{$d^m|ilG1A3+XW-bL(lDRNHI6aTA!Xd z@85z=?Q!(Nvzaw>KkCLqU3VOpVnB-1sBiW)V$<62@u0{_6n!;1vBpSBGr(G@$}qP? zJgZylyRbZEz`!B^i|x`vS;rS5qu!>n`e&wZwPeg1FstRM z7(lO)I+ zkC~QcZsHK7SjhF#4Ul38l}P{@b!{K)!eiDIjbL|2(}0Q&&N;l-Bd>DAGXAt67+Gf? zz;DcHkxVTCE6^E)#~Q+`DoD1(+k3vb4%9xZQU-ba$pP(|z7QTwg6^4-sByZhbbvRV zWjxA4Rh0-S^u@HaIRueL12lUfp z4?1tSHT^d22pS}a=4d_9$Vfu<8{Ygn$){=kl8Dh(-vaU@2{P+htYTmZ!niUI($5L< zPmf*!p%c%Y=0vi(c6tkksJ`OHH1F9g4+kmmTzCC7Y&ba$t%Bjk)G_HsEl7ubVo!#) z+ncc2SG#Yz%IIg8rs4d)k<)pXbpvmsl zl}H;G5@jykqohxEKGnt=9;pszlpn^$emrj`@D9(61vCD>Q z`**$K-P9Sz{Ofp@5X2y!=)<#HVkPqR>){a$XkJ4LbcdwLaoTd?j`$G%@#%pef3jWO zcTTn}XY&`yH+T!eb<~4DTrr+re!0h_ZI3c8qNxcuV$SV|b?1)&?ilmtV93rS{Sn+M zp+J|gsO8PyAZ>?l21Z=_ds-tuNL_m|?OmAk|EuKwnT^hO$O+=BH%$;FOg#P*={iwU zK&5}-Y>Tx2{DH=Ft4NshaX6Xkp$NlHd->DsM%(N)(tDD?AhJ7{%~dFILraS+S>Ni} zGVPZ-vukJmuG@y>92gx>JaR~W5*2HBwZQ3gIU5&Fiw{8_O71Uqq%1MKp#E^o(6&)< z=ea>KUP(}cGbPKHXSox)RD9hvTpMA^f}AsRB&%$t8 z(s1SGMpWMANCz$XcloCPjl9L4NQ!g-YJ{0?D;{YJ*dLGRlWqqQl-<30p;EwiA>j{& zp1m!SPPWWUZnz7;Q4XAyYI}p5Nc}=iwzgsN?-MC|2cuuoKGtKFt>u5>Xqe)p3}pXh z2Es$lZ3~(HPyEE&YWcGn+P(J>Vb$^gT0_q3Hu7m_(K=oVp&Hr;ES@St`RYWhd~vKERg*lOd&$#kZ`GMGM#3u(M2% z3=@5*$%fy}SNYNUg@Fq_Y{pOe-`^@Syb!EkM1_bewErWwWC8D!ZFeSo-OE z0IeRP8g>qc#gLi2kXZ|2-I5f|rlc5|`Zuzf;40p$7_Rz8+|xlV@OzlsUpd7LxO{Zb~$R3op| z9k!ifrM%VIQ~?&VeE9j|MC(l72ru%Z`V+QBcpIrpthA@#TD(-b5gcv~JFYxq^<9Ur z>a}vGhuIVso5>^e>V5ruv}5G{sSgFc-O=ZY)6>~LQgy;DbIF3Gc%tbErq<@q99f&= zS~S1oag;2dap&20s>&?K%WbiS#=Nklej zbS~0}7F3*+B_1Ddweb^vrpt!Y@o%8o{;;Gp`CI`Iv2T@IPlPI1yO&F(c}ieRaci^N)5e|d$l{BtKG&Ox#o%w%A%>x)s40HcP}umB*&tpG&fQ|B*b>-yPeExzcGV> z)lFUq-2+r`cRn{{6YFK4fs(z8nIB?!`_OZ(ywyDVH7NgTd}CqD)644_Y`~v+SXPu% z)-=w)qK)s2$-VrxnOX?Q!X=iHYe5ipy_AHy+YwiYxM|`}pV<+)7>~iN(p&Q~A_hIS zMD(;ho$)4qY#gwJZH5$KgoGA;-6uz?HM@Sn1izmR}bCZurgv^)Zx2z`5O z+|CzW+S#UmRasIoPV$y6De#ts7AtOOVHp+y8E(*o<%o+`KkZpL(nX`mmE#u>-y=s# z%(mK9-h**Xdu{!>zr7Di8`PO!gPvJ!-+8@7=?zhCT1q`{xH$EUtw;0`*wVK;n3cvu zNos&-y(}DLIuf>qejEfTTQ)c2? zg3GVjG?b9j)63Sm5J#`tG6Msq&-@@4gG;$rzLL0TvUmjLaR1Yt+x zuSjb1$LkD#ViUq9iaP}KM(ASoN&gyLjwr!tqJM6}*c~-hgos=oe&0|s8jHsjR{Te;`dl#Yf5FvvsDO*rHZC&V+q9f+m$N(9M%MO(UHkprRV5v&P?jhF zerRs=|7*y1tQ_IhT!KtINMG;p$ce&g8~=1I8?u?&6D*wfH}hMwBG zSomvm4YmY4Gex&^U6YI=BD2d(xT0h%;k}W>W5Id1T#8Vh-TAf*X{xCVa1R_X(2$6upM1%{9Zs_&*0+x4UJl}8m)x?9!M21MiNwfnPbX|_R z)~f8Ldc?eo2mZ}fO21I;?(9w*O?5UqYOtVgOQ41foNc#|samjsgAXi`)>Kxy$jVl4 z-y2PnzAqUhH=`yhJb%R+3m-4PUKVfe0j-SGF%JP*fS4d#oZHaFKLuUw>E-o;2cZcUCd~yjkPqx)QI>}&bwojcywwo z^EVcE>IW||evFN%1m+qMb*--X z0@Zg{Qehu2iaiI0(;iFIA1(hl)1gBoxju4Yr`Jm^hii#2-FDH7YNIk=wuIAc)-aM! za@RTRT0S`3GTep|)w+jA*R0${6|vGbUXMvEqjsZh$C&o#>f#=zC17(WST@0=zXyw? z8yeMF%(&*&T`20o7p1*lMdM%`+(|>RL$!KA z-(}w#k?iSp1tsX(zyIQ!-EuM;?j0cd4S#;|f)|W67m{7{wi?@=6~Leq-9dbM(xF`tUcSp_2{g&lL%g-`fUW#Y{jKw*Sa$iAWzXH4 zZ}kKAK=G@X>R$su0VV}cBcFi?26~Y>9-lEiSB#r=&Qt^b!6e-=s3LU-AIvxF0&()OuQK10dNF;r@wU7=g}g}> zyDG$)+&G;DffK*~=Upc#$oW#8a8ofg?x0^AKUzT-DFj@kTEv?zmM;?RP-&jq`>sGn zn)@U?_LPhk7tZ^NJ+PESW;LAwDm94_t7tA+LNGr3N>`VgN|3B>V$ku{qgA6_(uWE| z>B3synm8a!-8|^A!VcXt?-o{~F(cLTmD|&*0spc9Vw#-lMN%|cdtVf-wzM}g4qk%6 z&;#RL&MMuq$oCQesh0g;NqV>bGAy>2#g<#D#Q;aTQ}Aht+<;$~s5FzEB>O7POVdCS z14PEFa7*U3{g;Sb-g&9pa`&Dg@EW3Tueji4ZQro%ZK>n_0;TL;>)zbSy>NhNhj0@$ z|70Fgs?=obs7@O1ri|V;_A^M4H*(w~V7h|l;6~kAeKtkS=$2`NO2k$``NxkqQ@&hg zhEr&DAXQcqYAAyo)Z#Zb_!2J>VFhhH#AEihSKWK{l4K$Xpebf}h?q7X|N05)9GqJA z!Mpge41Bh0MjAFESt(PdE$KGPlk@(-Y%TlyWn8ACywn0H()Tmjg*qxMc)>@&bxZSh zf*n^w_hcDl^*lHicUw)N9=E_v|C7=#=kI9*Ee&fH{&A`E~+(HJ}cl7sP}Bued4%s`PM=3;t%fsuUP)O z-_U!D|bx#zx2$L5@In_`U%M#4zbMC9fF)@3xALyevLN3 z(TvC^OuMB~f&0j^oX5#fCOKpt8kA0PG~2h*kXAs7r`41~<3l2b$1Bph2tt#@NhuiA zFeV3`$g4OD@!^`o2HD`g`jGy5Hw0Rir{Q}*xEcbRBR7uT<{)eNAbI;Gqa(XrzYki~ z8W|>oFXGMs=;&xSlJ*SC5ziTGJW8beE$(%l&2KUCa;9O*pOphqd~d=-lj!y`wH#gQ zmtR&eH9k}__@ng+#$z(LBK9GKR)_@&Be~Rll(jMh9%l%Y1$dNgXOJC^yswr`#)q=w g$}LabxjfSC)}$R6;TQ`&b$8IfiW&;la^|7`0T7<~?*IS* literal 0 HcmV?d00001 diff --git a/source/layout.txt b/source/layout.txt index c4bd5fb..8208e6c 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -222,3 +222,24 @@ Example .. literalinclude:: ../examples/layout_flowbox_example.py :linenos: + +Notebook +-------- + +The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children are pages that can be switched between using tab labels along one edge. + +There are many configuration options for GtkNotebook. Among other things, you +can choose on which edge the tabs appear (see :meth:`Gtk.Notebook.set_tab_pos`), +whether, if there are too many tabs to fit the notebook should be made bigger or +scrolling arrows added (see :meth:`Gtk.Notebook.set_scrollable`, and whether +there will be a popup menu allowing the users to switch pages (see +:meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook.popup_disable`). + +Example +^^^^^^^ + +.. image:: ../images/notebook_plain_example.png + +.. literalinclude:: ../examples/notebook_plain_example.py + :linenos: + From f0add93123b87b9cc5ad079a65ae19fe41e937fa Mon Sep 17 00:00:00 2001 From: TingPing Date: Sun, 3 May 2015 14:13:32 -0400 Subject: [PATCH 028/209] Remove usage of deprecated stock icons --- examples/button_example.py | 6 +- examples/cellrendererpixbuf_example.py | 8 +- examples/clipboard_example.py | 2 +- examples/drag_and_drop_example.py | 4 +- examples/entry_example.py | 8 +- examples/textview_example.py | 29 +- get_stockitems.py | 55 -- images/button_example.png | Bin 6419 -> 5649 bytes images/cellrendererpixbuf_example.png | Bin 9451 -> 9012 bytes images/clipboard_example.png | Bin 11095 -> 9947 bytes images/drag_and_drop_example.png | Bin 12953 -> 11366 bytes images/entry_example.png | Bin 7986 -> 7461 bytes images/stock/application-exit.png | Bin 967 -> 0 bytes images/stock/dialog-error.png | Bin 2828 -> 0 bytes images/stock/dialog-information.png | Bin 3259 -> 0 bytes images/stock/dialog-password.png | Bin 2358 -> 0 bytes images/stock/dialog-question.png | Bin 2809 -> 0 bytes images/stock/dialog-warning.png | Bin 2358 -> 0 bytes images/stock/document-new.png | Bin 736 -> 0 bytes images/stock/document-open.png | Bin 612 -> 0 bytes images/stock/document-print-preview.png | Bin 1244 -> 0 bytes images/stock/document-print.png | Bin 818 -> 0 bytes images/stock/document-properties.png | Bin 1146 -> 0 bytes images/stock/document-revert-ltr.png | Bin 1404 -> 0 bytes images/stock/document-revert-rtl.png | Bin 1411 -> 0 bytes images/stock/document-save-as.png | Bin 1206 -> 0 bytes images/stock/document-save.png | Bin 951 -> 0 bytes images/stock/drive-harddisk.png | Bin 1360 -> 0 bytes images/stock/edit-clear.png | Bin 1163 -> 0 bytes images/stock/edit-copy.png | Bin 697 -> 0 bytes images/stock/edit-cut.png | Bin 1032 -> 0 bytes images/stock/edit-delete.png | Bin 1449 -> 0 bytes images/stock/edit-find-replace.png | Bin 1379 -> 0 bytes images/stock/edit-find.png | Bin 1238 -> 0 bytes images/stock/edit-paste.png | Bin 893 -> 0 bytes images/stock/edit-redo-ltr.png | Bin 1070 -> 0 bytes images/stock/edit-redo-rtl.png | Bin 1085 -> 0 bytes images/stock/edit-select-all.png | Bin 717 -> 0 bytes images/stock/edit-undo-ltr.png | Bin 1052 -> 0 bytes images/stock/edit-undo-rtl.png | Bin 1035 -> 0 bytes images/stock/folder.png | Bin 662 -> 0 bytes images/stock/format-indent-less-ltr.png | Bin 843 -> 0 bytes images/stock/format-indent-less-rtl.png | Bin 876 -> 0 bytes images/stock/format-indent-more-ltr.png | Bin 852 -> 0 bytes images/stock/format-indent-more-rtl.png | Bin 870 -> 0 bytes images/stock/format-justify-center.png | Bin 490 -> 0 bytes images/stock/format-justify-fill.png | Bin 447 -> 0 bytes images/stock/format-justify-left.png | Bin 489 -> 0 bytes images/stock/format-justify-right.png | Bin 503 -> 0 bytes images/stock/format-text-bold.png | Bin 947 -> 0 bytes images/stock/format-text-italic.png | Bin 971 -> 0 bytes images/stock/format-text-strikethrough.png | Bin 966 -> 0 bytes images/stock/format-text-underline.png | Bin 969 -> 0 bytes images/stock/go-bottom.png | Bin 1037 -> 0 bytes images/stock/go-down.png | Bin 973 -> 0 bytes images/stock/go-first-ltr.png | Bin 1028 -> 0 bytes images/stock/go-first-rtl.png | Bin 1061 -> 0 bytes images/stock/go-home.png | Bin 1050 -> 0 bytes images/stock/go-jump-ltr.png | Bin 1229 -> 0 bytes images/stock/go-jump-rtl.png | Bin 1226 -> 0 bytes images/stock/go-last-ltr.png | Bin 1061 -> 0 bytes images/stock/go-last-rtl.png | Bin 1028 -> 0 bytes images/stock/go-next-ltr.png | Bin 906 -> 0 bytes images/stock/go-next-rtl.png | Bin 915 -> 0 bytes images/stock/go-previous-ltr.png | Bin 915 -> 0 bytes images/stock/go-previous-rtl.png | Bin 906 -> 0 bytes images/stock/go-top.png | Bin 1037 -> 0 bytes images/stock/go-up.png | Bin 946 -> 0 bytes images/stock/gtk-apply.png | Bin 1002 -> 0 bytes images/stock/gtk-cancel.png | Bin 1067 -> 0 bytes images/stock/gtk-caps-lock-warning.png | Bin 360 -> 0 bytes images/stock/gtk-color-picker.png | Bin 891 -> 0 bytes images/stock/gtk-connect.png | Bin 946 -> 0 bytes images/stock/gtk-convert.png | Bin 1413 -> 0 bytes images/stock/gtk-disconnect.png | Bin 852 -> 0 bytes images/stock/gtk-dnd-multiple.png | Bin 1215 -> 0 bytes images/stock/gtk-dnd.png | Bin 1349 -> 0 bytes images/stock/gtk-edit.png | Bin 1120 -> 0 bytes images/stock/gtk-font.png | Bin 1109 -> 0 bytes images/stock/gtk-index.png | Bin 960 -> 0 bytes images/stock/gtk-no.png | Bin 952 -> 0 bytes images/stock/gtk-ok.png | Bin 963 -> 0 bytes images/stock/gtk-orientation-landscape.png | Bin 1097 -> 0 bytes images/stock/gtk-orientation-portrait.png | Bin 931 -> 0 bytes .../gtk-orientation-reverse-landscape.png | Bin 1059 -> 0 bytes .../gtk-orientation-reverse-portrait.png | Bin 940 -> 0 bytes images/stock/gtk-page-setup.png | Bin 1081 -> 0 bytes images/stock/gtk-preferences.png | Bin 1691 -> 0 bytes images/stock/gtk-select-color.png | Bin 993 -> 0 bytes images/stock/gtk-undelete-ltr.png | Bin 1692 -> 0 bytes images/stock/gtk-undelete-rtl.png | Bin 1722 -> 0 bytes images/stock/gtk-yes.png | Bin 1044 -> 0 bytes images/stock/help-about.png | Bin 982 -> 0 bytes images/stock/help-contents.png | Bin 1728 -> 0 bytes images/stock/image-missing.png | Bin 894 -> 0 bytes images/stock/list-add.png | Bin 571 -> 0 bytes images/stock/list-remove.png | Bin 369 -> 0 bytes images/stock/media-floppy.png | Bin 951 -> 0 bytes images/stock/media-optical.png | Bin 1372 -> 0 bytes images/stock/media-playback-pause.png | Bin 383 -> 0 bytes images/stock/media-playback-start-ltr.png | Bin 863 -> 0 bytes images/stock/media-playback-start-rtl.png | Bin 895 -> 0 bytes images/stock/media-playback-stop.png | Bin 400 -> 0 bytes images/stock/media-record.png | Bin 1063 -> 0 bytes images/stock/media-seek-backward-ltr.png | Bin 902 -> 0 bytes images/stock/media-seek-backward-rtl.png | Bin 776 -> 0 bytes images/stock/media-seek-forward-ltr.png | Bin 776 -> 0 bytes images/stock/media-seek-forward-rtl.png | Bin 902 -> 0 bytes images/stock/media-skip-backward-ltr.png | Bin 806 -> 0 bytes images/stock/media-skip-backward-rtl.png | Bin 848 -> 0 bytes images/stock/media-skip-forward-ltr.png | Bin 848 -> 0 bytes images/stock/media-skip-forward-rtl.png | Bin 806 -> 0 bytes images/stock/network-idle.png | Bin 1015 -> 0 bytes images/stock/printer-error.png | Bin 1130 -> 0 bytes images/stock/printer-info.png | Bin 1154 -> 0 bytes images/stock/printer-paused.png | Bin 1096 -> 0 bytes images/stock/printer-warning.png | Bin 1099 -> 0 bytes images/stock/process-stop.png | Bin 1043 -> 0 bytes images/stock/system-run.png | Bin 1592 -> 0 bytes images/stock/text-x-generic.png | Bin 736 -> 0 bytes images/stock/tools-check-spelling.png | Bin 950 -> 0 bytes images/stock/view-fullscreen.png | Bin 606 -> 0 bytes images/stock/view-refresh.png | Bin 1466 -> 0 bytes images/stock/view-restore.png | Bin 677 -> 0 bytes images/stock/view-sort-ascending.png | Bin 413 -> 0 bytes images/stock/view-sort-descending.png | Bin 379 -> 0 bytes images/stock/window-close.png | Bin 1453 -> 0 bytes images/stock/zoom-fit-best.png | Bin 937 -> 0 bytes images/stock/zoom-in.png | Bin 993 -> 0 bytes images/stock/zoom-original.png | Bin 962 -> 0 bytes images/textview_example.png | Bin 21195 -> 18048 bytes source/cellrenderers.txt | 2 +- source/entry.txt | 2 +- source/index.txt | 1 - source/menus.txt | 4 +- source/stock.txt | 517 ------------------ 136 files changed, 35 insertions(+), 603 deletions(-) delete mode 100644 get_stockitems.py delete mode 100644 images/stock/application-exit.png delete mode 100644 images/stock/dialog-error.png delete mode 100644 images/stock/dialog-information.png delete mode 100644 images/stock/dialog-password.png delete mode 100644 images/stock/dialog-question.png delete mode 100644 images/stock/dialog-warning.png delete mode 100644 images/stock/document-new.png delete mode 100644 images/stock/document-open.png delete mode 100644 images/stock/document-print-preview.png delete mode 100644 images/stock/document-print.png delete mode 100644 images/stock/document-properties.png delete mode 100644 images/stock/document-revert-ltr.png delete mode 100644 images/stock/document-revert-rtl.png delete mode 100644 images/stock/document-save-as.png delete mode 100644 images/stock/document-save.png delete mode 100644 images/stock/drive-harddisk.png delete mode 100644 images/stock/edit-clear.png delete mode 100644 images/stock/edit-copy.png delete mode 100644 images/stock/edit-cut.png delete mode 100644 images/stock/edit-delete.png delete mode 100644 images/stock/edit-find-replace.png delete mode 100644 images/stock/edit-find.png delete mode 100644 images/stock/edit-paste.png delete mode 100644 images/stock/edit-redo-ltr.png delete mode 100644 images/stock/edit-redo-rtl.png delete mode 100644 images/stock/edit-select-all.png delete mode 100644 images/stock/edit-undo-ltr.png delete mode 100644 images/stock/edit-undo-rtl.png delete mode 100644 images/stock/folder.png delete mode 100644 images/stock/format-indent-less-ltr.png delete mode 100644 images/stock/format-indent-less-rtl.png delete mode 100644 images/stock/format-indent-more-ltr.png delete mode 100644 images/stock/format-indent-more-rtl.png delete mode 100644 images/stock/format-justify-center.png delete mode 100644 images/stock/format-justify-fill.png delete mode 100644 images/stock/format-justify-left.png delete mode 100644 images/stock/format-justify-right.png delete mode 100644 images/stock/format-text-bold.png delete mode 100644 images/stock/format-text-italic.png delete mode 100644 images/stock/format-text-strikethrough.png delete mode 100644 images/stock/format-text-underline.png delete mode 100644 images/stock/go-bottom.png delete mode 100644 images/stock/go-down.png delete mode 100644 images/stock/go-first-ltr.png delete mode 100644 images/stock/go-first-rtl.png delete mode 100644 images/stock/go-home.png delete mode 100644 images/stock/go-jump-ltr.png delete mode 100644 images/stock/go-jump-rtl.png delete mode 100644 images/stock/go-last-ltr.png delete mode 100644 images/stock/go-last-rtl.png delete mode 100644 images/stock/go-next-ltr.png delete mode 100644 images/stock/go-next-rtl.png delete mode 100644 images/stock/go-previous-ltr.png delete mode 100644 images/stock/go-previous-rtl.png delete mode 100644 images/stock/go-top.png delete mode 100644 images/stock/go-up.png delete mode 100644 images/stock/gtk-apply.png delete mode 100644 images/stock/gtk-cancel.png delete mode 100644 images/stock/gtk-caps-lock-warning.png delete mode 100644 images/stock/gtk-color-picker.png delete mode 100644 images/stock/gtk-connect.png delete mode 100644 images/stock/gtk-convert.png delete mode 100644 images/stock/gtk-disconnect.png delete mode 100644 images/stock/gtk-dnd-multiple.png delete mode 100644 images/stock/gtk-dnd.png delete mode 100644 images/stock/gtk-edit.png delete mode 100644 images/stock/gtk-font.png delete mode 100644 images/stock/gtk-index.png delete mode 100644 images/stock/gtk-no.png delete mode 100644 images/stock/gtk-ok.png delete mode 100644 images/stock/gtk-orientation-landscape.png delete mode 100644 images/stock/gtk-orientation-portrait.png delete mode 100644 images/stock/gtk-orientation-reverse-landscape.png delete mode 100644 images/stock/gtk-orientation-reverse-portrait.png delete mode 100644 images/stock/gtk-page-setup.png delete mode 100644 images/stock/gtk-preferences.png delete mode 100644 images/stock/gtk-select-color.png delete mode 100644 images/stock/gtk-undelete-ltr.png delete mode 100644 images/stock/gtk-undelete-rtl.png delete mode 100644 images/stock/gtk-yes.png delete mode 100644 images/stock/help-about.png delete mode 100644 images/stock/help-contents.png delete mode 100644 images/stock/image-missing.png delete mode 100644 images/stock/list-add.png delete mode 100644 images/stock/list-remove.png delete mode 100644 images/stock/media-floppy.png delete mode 100644 images/stock/media-optical.png delete mode 100644 images/stock/media-playback-pause.png delete mode 100644 images/stock/media-playback-start-ltr.png delete mode 100644 images/stock/media-playback-start-rtl.png delete mode 100644 images/stock/media-playback-stop.png delete mode 100644 images/stock/media-record.png delete mode 100644 images/stock/media-seek-backward-ltr.png delete mode 100644 images/stock/media-seek-backward-rtl.png delete mode 100644 images/stock/media-seek-forward-ltr.png delete mode 100644 images/stock/media-seek-forward-rtl.png delete mode 100644 images/stock/media-skip-backward-ltr.png delete mode 100644 images/stock/media-skip-backward-rtl.png delete mode 100644 images/stock/media-skip-forward-ltr.png delete mode 100644 images/stock/media-skip-forward-rtl.png delete mode 100644 images/stock/network-idle.png delete mode 100644 images/stock/printer-error.png delete mode 100644 images/stock/printer-info.png delete mode 100644 images/stock/printer-paused.png delete mode 100644 images/stock/printer-warning.png delete mode 100644 images/stock/process-stop.png delete mode 100644 images/stock/system-run.png delete mode 100644 images/stock/text-x-generic.png delete mode 100644 images/stock/tools-check-spelling.png delete mode 100644 images/stock/view-fullscreen.png delete mode 100644 images/stock/view-refresh.png delete mode 100644 images/stock/view-restore.png delete mode 100644 images/stock/view-sort-ascending.png delete mode 100644 images/stock/view-sort-descending.png delete mode 100644 images/stock/window-close.png delete mode 100644 images/stock/zoom-fit-best.png delete mode 100644 images/stock/zoom-in.png delete mode 100644 images/stock/zoom-original.png delete mode 100644 source/stock.txt diff --git a/examples/button_example.py b/examples/button_example.py index abd1a98..e7b30e4 100644 --- a/examples/button_example.py +++ b/examples/button_example.py @@ -9,15 +9,15 @@ def __init__(self): hbox = Gtk.Box(spacing=6) self.add(hbox) - button = Gtk.Button("Click Me") + button = Gtk.Button.new_with_label("Click Me") button.connect("clicked", self.on_click_me_clicked) hbox.pack_start(button, True, True, 0) - button = Gtk.Button(stock=Gtk.STOCK_OPEN) + button = Gtk.Button.new_with_mnemonic("_Open") button.connect("clicked", self.on_open_clicked) hbox.pack_start(button, True, True, 0) - button = Gtk.Button("_Close", use_underline=True) + button = Gtk.Button.new_with_mnemonic("_Close") button.connect("clicked", self.on_close_clicked) hbox.pack_start(button, True, True, 0) diff --git a/examples/cellrendererpixbuf_example.py b/examples/cellrendererpixbuf_example.py index 1b0d0e0..c9cf370 100644 --- a/examples/cellrendererpixbuf_example.py +++ b/examples/cellrendererpixbuf_example.py @@ -8,9 +8,9 @@ def __init__(self): self.set_default_size(200, 200) self.liststore = Gtk.ListStore(str, str) - self.liststore.append(["New", Gtk.STOCK_NEW]) - self.liststore.append(["Open", Gtk.STOCK_OPEN]) - self.liststore.append(["Save", Gtk.STOCK_SAVE]) + self.liststore.append(["New", "document-new"]) + self.liststore.append(["Open", "document-open"]) + self.liststore.append(["Save", "document-save"]) treeview = Gtk.TreeView(model=self.liststore) @@ -20,7 +20,7 @@ def __init__(self): renderer_pixbuf = Gtk.CellRendererPixbuf() - column_pixbuf = Gtk.TreeViewColumn("Image", renderer_pixbuf, stock_id=1) + column_pixbuf = Gtk.TreeViewColumn("Image", renderer_pixbuf, icon_name=1) treeview.append_column(column_pixbuf) self.add(treeview) diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index 3921693..bff4da0 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -9,7 +9,7 @@ def __init__(self): self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.entry = Gtk.Entry() - self.image = Gtk.Image.new_from_stock(Gtk.STOCK_STOP, Gtk.IconSize.MENU) + self.image = Gtk.Image.new_from_icon_name("process-stop", Gtk.IconSize.MENU) button_copy_text = Gtk.Button("Copy Text") button_paste_text = Gtk.Button("Paste Text") diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index 70c992c..2e22a63 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -60,8 +60,8 @@ def __init__(self): model = Gtk.ListStore(str, GdkPixbuf.Pixbuf) self.set_model(model) - self.add_item("Item 1", "image") - self.add_item("Item 2", "gtk-about") + self.add_item("Item 1", "image-missing") + self.add_item("Item 2", "help-about") self.add_item("Item 3", "edit-copy") self.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], diff --git a/examples/entry_example.py b/examples/entry_example.py index 52bbd01..fbf1952 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -63,11 +63,11 @@ def do_pulse(self, user_data): def on_icon_toggled(self, button): if button.get_active(): - stock_id = Gtk.STOCK_FIND + icon_name = "system-search-symbolic" else: - stock_id = None - self.entry.set_icon_from_stock(Gtk.EntryIconPosition.PRIMARY, - stock_id) + icon_name = None + self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, + icon_name) win = EntryWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/examples/textview_example.py b/examples/textview_example.py index f91b9eb..efe371d 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -36,13 +36,16 @@ def create_toolbar(self): toolbar = Gtk.Toolbar() self.grid.attach(toolbar, 0, 0, 3, 1) - button_bold = Gtk.ToolButton.new_from_stock(Gtk.STOCK_BOLD) + button_bold = Gtk.ToolButton() + button_bold.set_icon_name("format-text-bold-symbolic") toolbar.insert(button_bold, 0) - button_italic = Gtk.ToolButton.new_from_stock(Gtk.STOCK_ITALIC) + button_italic = Gtk.ToolButton() + button_italic.set_icon_name("format-text-italic-symbolic") toolbar.insert(button_italic, 1) - button_underline = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDERLINE) + button_underline = Gtk.ToolButton() + button_underline.set_icon_name("format-text-underline-symbolic") toolbar.insert(button_underline, 2) button_bold.connect("clicked", self.on_button_clicked, self.tag_bold) @@ -54,19 +57,19 @@ def create_toolbar(self): toolbar.insert(Gtk.SeparatorToolItem(), 3) radio_justifyleft = Gtk.RadioToolButton() - radio_justifyleft.set_stock_id(Gtk.STOCK_JUSTIFY_LEFT) + radio_justifyleft.set_icon_name("format-justify-left-symbolic") toolbar.insert(radio_justifyleft, 4) - radio_justifycenter = Gtk.RadioToolButton.new_with_stock_from_widget( - radio_justifyleft, Gtk.STOCK_JUSTIFY_CENTER) + radio_justifycenter = Gtk.RadioToolButton.new_from_widget(radio_justifyleft) + radio_justifycenter.set_icon_name("format-justify-center-symbolic") toolbar.insert(radio_justifycenter, 5) - radio_justifyright = Gtk.RadioToolButton.new_with_stock_from_widget( - radio_justifyleft, Gtk.STOCK_JUSTIFY_RIGHT) + radio_justifyright = Gtk.RadioToolButton.new_from_widget(radio_justifyleft) + radio_justifyright.set_icon_name("format-justify-right-symbolic") toolbar.insert(radio_justifyright, 6) - radio_justifyfill = Gtk.RadioToolButton.new_with_stock_from_widget( - radio_justifyleft, Gtk.STOCK_JUSTIFY_FILL) + radio_justifyfill = Gtk.RadioToolButton.new_from_widget(radio_justifyleft) + radio_justifyfill.set_icon_name("format-justify-fill-symbolic") toolbar.insert(radio_justifyfill, 7) radio_justifyleft.connect("toggled", self.on_justify_toggled, @@ -80,13 +83,15 @@ def create_toolbar(self): toolbar.insert(Gtk.SeparatorToolItem(), 8) - button_clear = Gtk.ToolButton.new_from_stock(Gtk.STOCK_CLEAR) + button_clear = Gtk.ToolButton() + button_clear.set_icon_name("edit-clear-symbolic") button_clear.connect("clicked", self.on_clear_clicked) toolbar.insert(button_clear, 9) toolbar.insert(Gtk.SeparatorToolItem(), 10) - button_search = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FIND) + button_search = Gtk.ToolButton() + button_search.set_icon_name("system-search-symbolic") button_search.connect("clicked", self.on_search_clicked) toolbar.insert(button_search, 11) diff --git a/get_stockitems.py b/get_stockitems.py deleted file mode 100644 index 12266d5..0000000 --- a/get_stockitems.py +++ /dev/null @@ -1,55 +0,0 @@ -from gi.repository import Gtk -from os.path import join, exists -import re -import urllib -import sys - -download_base_url = "http://developer.gnome.org/gtk3/stable/" -image_base_dir = join("images", "stock") - -img_p = re.compile("fileref=\"(.+?)\"") -define_p = re.compile("\\s+") - -def print_item(item, imgs): - print "* :obj:`" + item + "`" - print - for img in imgs: - if "-ltr" in img: - print " LTR variant:" - print - elif "-rtl" in img: - print " RTL variant:" - print - - img_file = join(image_base_dir, img) - if not exists(img_file): - dl_url = download_base_url + img - url = urllib.urlopen(dl_url) - if url.getcode() == 200: - urllib.urlretrieve(dl_url, img_file) - else: - print >> sys.stderr, "ERROR downloading file %s: %d" % (dl_url, url.getcode()) - - print " .. image:: ../" + img_file - print - -fp = file("/usr/include/gtk-3.0/gtk/gtkstock.h") -imgs = [] -item = None -for line in fp: - if "inlinegraphic" in line: - if item != None: - print_item(item, imgs) - imgs = [] - item = None - - m = img_p.search(line) - if m != None: - imgs.append(m.group(1)) - else: - print >> sys.stderr, "NO MATCH in line:", line - - if line.startswith("#define GTK_"): - item = define_p.split(line)[1].replace("GTK_", "Gtk.") - -fp.close() diff --git a/images/button_example.png b/images/button_example.png index 82d96ddc74eee2972ac3b64c62e424e5be64db63..14fd829ec2a5fd2fc0c83c922a095b0f5950e7cd 100644 GIT binary patch literal 5649 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 literal 6419 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 Cz_7^x diff --git a/images/cellrendererpixbuf_example.png b/images/cellrendererpixbuf_example.png index 268a3f37385b43c207ae85aa4bac4c59cb19fd5d..7b44d510c03a8bb9707ea21a01f2cfcc64237688 100644 GIT binary patch literal 9012 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 literal 9451 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 literal 11095 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 QDq~?}C6y#9#7qMJ2l_Jj$p8QV diff --git a/images/drag_and_drop_example.png b/images/drag_and_drop_example.png index a40093f06238e31320e99a9ac3fe8341b73f1ed0..3d7ab888d5f6a5b2394a1a1c836b9acbf4b645d8 100644 GIT binary patch literal 11366 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 X@|qh&PZjVc6oyd%0A(tqjD!9MgI^W$ literal 12953 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 T>llIGmLMt0s>*<+OauQ1h`^2o diff --git a/images/entry_example.png b/images/entry_example.png index 2b1cd73a45e25d5e00431dbfd57ce87816c722e1..ce5ca968956cdd7f8d8683bbed0f902735c2f54d 100644 GIT binary patch literal 7461 zcmcI}Wl$WzvnK?%gy0qkf#4e4$>I=X@el&R-Q7cQcZbC_xJ%IB?k>R=Sr)g2U3mQ8 zhkJEZ_vPy9=0nd+S5HsRRL!q@x+Bz7lsS7I1&<7 zi-PoLP0wuThL^8~*3~a%bg)VPJ{TW>N&DX41pX3W?T!BOb@U=0PV9Rn%E%p|@s;@(_@7A7%>Edh+y8RKK-{UxHykluf zW4Q^5L_h2@`WtFgC>IBUx_A8Duotjz>3~^(2)2AnG(d=>S4EO%JC@2mRa{)`hYm+= zWg%^uQm4~xyg9l1<+0^=mkBJCH4~(Y#ZMaxsd#`MVbV_WR8$mHu%x`hk}6fn2{mwE zF%z;`s%A$WEd#v*o(C($Oh#;}k&Ajdo>}Dj-4d71kvL_AJ&a&kIN z&Ne&c&ZA9vHNzBQXrl+WRJ1E~6Tr@GeOWDKfN+-(?caDb68><<_e5N;&?ODq4$ra3 zb8?|6{C2DQAFmhzn1J5;#TZ~vJLKzcCW3pdNsTwYLjvAFZ zN(b-{lW@M*#RSITSNxTZvS=(Ueh7~rJDZ`Q4K524kpB~vnwh_I7hjJX5R88_bI-P_ z7ch1%hdE=qd0s}ykP>yR8H}&2z12cAzoqfkB7rW-%tLwaW|z+)wi`yg`C!5lD$DOd z>^szc=OW*Bita6oVKiE);spp-h7R!Up6*unzQams$s;L${+F-sd~xQvyi(N9OTFS^y^Ypr-x6zFTuz;k+E zWFbRn*FD43H81dK!zJ3!lhVv?sLpx8uZRMkV!?7p52-anBt4#e8`(^$srBo3!Hrd~ zrG^Ek9dI55(Wq`u4@{f%cZxpsU<#8HGi~)=Lvr_q4BmVaGUuuB_l*B!f)V;9doa9D zAiW#xqta&5>bhPCcLS&v@Ukra{pRJ>%fgRve3iu?diwYD2RO(|-!c^?HBdhH@s-BY z7Vc~FcgCa98BCD?a4*{`1AV;sU5L3~%veC#fbht{ZxU{Y&*)d5o+bzBVk>;8B)WP# znxEEP4v>s1xuz1xI7$jl(9BRsgEfa1>&Xd(Le- zkVv{7*>G6-U;EXCeab_G8@XB+LEg?<2|lM`F9+;g*;4A>HJoe4Ad|u#}%Q`i*v-v;LKX(CJ*;kN|{oRf1niy$>4zJ_-XUM z(tHCH4>-reU<~}ewF!7<-9u@N@5Jxi%yzCj$UTO{qOIPv#wKZ%75Y8r!^J7yCvM?& zfa>TtXiKceiH2fumM$kpL%wtfX7_(ya;bYIBhr$j;hqc?!3i{-4Q-U$(w*UDFs9@E z83Kr+gapR;x)R8DMwPc1j#UM;=d$9)Kf?H(ZM!Jl_q(h-xb5K^(U!Z+2Yhe7fMcBq zTdzL+eD!*Nt&Vzmcv1AM2>r;J6?{z($h$$0ABu>w3(eWnAWKh;ao4u8r}dlZmRB#OXsO z=WTGE7^yt@M0`IIh@e{CIch@^6>D3MN@j=|U9dLXsgMMgED)!@1qx|dr$8}BktB)$ z>P?ez9U-rSH29QM)UYj0)(G>_KGLTaIlk`>UsorU9+_+AhM}Q-$+_TK5fajJVG;^^ z!{Y}2%cjSb%g@a{al8DfbauAP`i56_U%(NziSbiAOx?@yrUKM0wuM@@b88RTke!)d zZy`{q;Z8GIZOUPP-u%KbEe6Hj;S-14v&T`6P0`eH5Mp))e;z@1t@i8-oSodw5GiKd zP8lgaENtz`E6~1Y_SjdZuwF#bk|AA5#q`gkKVur06i=@#71TavcJWP@1?3{A!(Y96(E}&wnBA z9maatVKByL*HX`KBlf&rVWw7(JQndcTk%hX6)ArwcyQi^eC3vIky@`;!zDIB?;Oo= zt#|oO*jsj(`$Y0TpjE6y3ZC-ns?hn5&F12_s2Lb<_#q}rWsSP8>$~9Lm80D|e`Q@P zO!5n)r#*Hyu0c(iIU)je7kgx(OOz}>%PCDl2kX83sN0ol_Ak>zOO~lj{n}F42EG`_ z(MEUPP}@V-7I~ftyx%5~ib@R^5dZ0LB9rf zf0m_<>Hh4oawS>L@>1(dfb%Oc>i~s3{8EKb2|)PIoZEA`*DF}GDrw`zIJCbM0Wz3x zH3?V%;dzNd#I(|C3abCZ*p9>hPzDcGG%(oA;0VLt5#1KhbU#^kDjA~<7F4~*OG%)U z106ZPgad@1fULooELi`op$zkX*Q@pxfSM8<`J#*d#UpZ8kv_Cuj_&}tMhuiBoh{GT~=JrryEHgCxO#`-O_CT@m&gI~?G8bRY`kz$ooIf1c zQc`a$c@w3Fg=cab^xexZzV3lvL(qlhq;I~TghUsRT{^k39e2Dl6!e;*I5QkJDqBq% z?X+D~#^L&IoZhmE%IUNG7qXFR?57->`;(g^%Ne_m{SNcV2OchWj9k)k=R*ljxG_sR zOdJ*)Lv4S&#$}`qjwlM~(mmbS{;nQRuR>3jy?zaJurgKEC5%R7J4bql&1~q(SIgv^ zSkQfZ#1=}R82niBDmEFg_F5Kjc_sA2!L++wjhcdHs+?0%zU@=0zv5esXD#hQ{p|?u zak81v&21LOxYY9y^h|+@V8J`yvvf(yKK7--q(lU33#WKb@^@?#*#RdjsU-Y%eEV(= z(EN#Eo67~~dMg9Xfmy_tqk>|0?Nyvn*bF(KTM*Ck=K3V>yn9?-oPC<-Jus-i@@N$( zXP=rvV2AX$5W>}*8(1SQ*suKiO7QU7i_4G6BhFfCZ4m6ng}P^WPR?p#l_E0Gv);L7J8e;}KjRtPmqkZqL7#eEUq9+|#2Qa;EyQRY)uR zi*-WV0MUDV^qDBF&OU(cisSW1wuWf+t(15C%?EubIe6*VG1pj4bqrG@`6#bXmH3P& zL&aw}x+Hca3Exrn_-i?LjajTQmzIi)SDA!k6XD{5rdY`8zlQcc- zkL;MF1HKjEog;G%7S18^@!_n<0{r$}Ru5nGzml$+1Jl>cN8B};SF8O7ldo$t7T-F9 zYXk=cntP~Mw6^o~ZRiy-1VvjyLTns$1Z(dzdYE8M(Ys*Bhf+%+ui9S(#MuKRT^>#Q z6&x%je_p*_L0NX#7cA*YcU;TSw3NbJ(zdU$4CmEuiM!V9hgA+_ml|_2Z8y}b*+a}2 zKG)>UK@QU`=}Q9T+=x;y6(SO{IPgBIqlA_@+MiT!htX8=g^8zR7n5`~1#{7p-%^$1 z3Z&)K1T1i!e-LZKs7lTm^oPtB*G6x|stw+98LJcZt;sn1{X&hvZ{mA-;At@e0@?4c zk5N+*3SrbKe+tpY{ihT^qpbZw^kRJoYuUXK7jAqlBI5Cmk#6p&n{>Or;i@bvt3&s` zdAK7qODaQqJ_@kxH-1E($>-MHw8E;}#+;k+SLFN_2~Ez3nUd$-wUu)rrj!5Go%U~< zo7v}+u|dWpqVLZ}nT;|SnKhaRd2dRJK+q4EGq$nBs~L^LVajtHR5+SQsiVc~2i|Bu zQs@f)1Ihn^&IKzP#EM{(O#_iU=FDYddf^L>vLO<`pa~NPNEUBw+($fo5mm(XSVtY)H+XeZ*TiJlFmgr_Luek>MTaNyE|f1aSd&jzYF3z zCA4don3FT{6B*@|by8v?L9@eFYyr~*Y4hi56F)uEjVy(reCLy8?uYB6pcUJ}BUk?R zhHg&7UQ$DUG)Y@2EXbtE?zN96^W5Fwk3-kQkSrgYs zb75jWx4iJa3WV>h%xv48OMF-LVIGnex87 z?q&DU;3H!hiledU`HB3JQjqmX?s9xWE$?I?-tlVGgdw{E(#Od!1_vL<%- zb2>@_B4fP`uY3cY7yhFQYEd}Q9FewS3!X36K(4gPoAXoB^_F5I?mpeFYMZ(kFTl}7 zq;*MydW9EDy^gCt+D~hO8s3@1Mf|+LGc&H1u7E-qpDwDF7NxS5mX?BHYxvEXS387z zW@bH}KQjHWOtwYK)f*RGstQn+eCm@WbmVXWWyZrw!!?Q5&_Jx;x$9UI@t8hdvB4d% z7IPV0u12fZAN!;lSJHd8#GfKeieKY8r8$p{%aJ{IoR30@N8Q;iydNx1Sbz3+wOrg^ zQ?^d)KYlGW7J0x@0$1(r1{EK!84R+|nL9oXY$JE0XO%*)8)*d7gFTw-c>?IIE-2J+ zU{AYW3eZ*dUb#t-duY1vcN|=8k8#$+8-j?0Zu(s*2MQY)95c2Lj!*qtQkNK-+Vrc@ z4``0nu7erB%dRer{JHYyA26de{h}*>V)#56^c_zUts}QP%`2h76B>w9KGWSqbG2o@ zolWU>CrZ#g0TsZ>W`-@LV6RU-j@*1YF zfpBIR>2nnO*>jSG&pWW;nD}n+*tZOV+Y{BjKro-WxmnkXl4>wZAb3FOV-F_9AHAQq6k8rXqD6Gun{OLHt1g1TKS{eShEUlRzC~hF1 ze6931$MR8UxH?`tJKvN5fkB(xme8+%p2pSvk6?l}{C|c*)9gRro!ZWJbCgt&+#0Uj zy6Bjj!ebU{CM=@OP?Y#-3d?KuWTgg&Gg=4@6bgP+WgDP9ZpxL?0Gh_k^7x{e>}jnb|(BY5S3 zu~9dT(3Lo9Ct2Q1%=Wvp(DD=1kDF@1>+4n{rtbh^UNDYAM>Qc#q-)=^O526%@t3Mf zvEx|NM#MCQrNsLfd*Tk5=n(Y}A<@iYs4J9AkS*|}s$<0CHxc5_{+eEEnXjTX~B1mY$2n8j;`6`gaUb9Ru~$i2>c#aI7)j_+~?m9-=s)i%s( zg1755(7=98U3PqW0*ljU;->Ei&oBd`5W@$)2Gc1{g&hRdK(0o}7`v3zN~aS|@unsa z_nK@Wu31=;R4K07i0FU_|NiGh;S7~Wn`n)E(n#=tvC&-Ew`nGdN`BUF5*z4}($c6( z26~dl9nH#QJjX|lkgIWW;xp#pMd>2ylYN*b*(!c{R)4>Y?6#kvj#b)wYSdVGgL;cv?Io|dtJ1ZtKX#d76ugdC- zYGTe^c=d)xwxgxFp0!&bpT>f~Zvg=s5z0Lc5r>(B#q5k>kcKupEz!ScIemM-MHc)L za*Fw}H2<9~rns<}tS&$=G&_djC9oz8e`EK}87oHI9hw2&wlJ!~+fYoudvybh7 zC?S5_C67`j4=L221OQJ`Z^tunE=+}G$<6)`{iGY7ydgzh?% zd&_RoS=`0Os=8c26)^<_7%cfrt;|!LgJ$jc4J7BV0Gq!%m;yI@btw&pq$EGw;Fi_R za|3rKo@*`34>tm2pG?TS0|?w0;cor#Cv<8R)!ogFnybTxfc+Sb02AX!z2E;i{=5|) zvbCC;iGsX_-u zoPP247j1C^O;vt#kRSbiYDuexRx(e2BmFqUdWIhQLf@hmfRVQ2d1Uhu1# zJ#RjizVHLGJ=8dFvU2UKb&@37Cd19N$G>)krFszraIkWY(C325UIjATjfm!j*zwpY zRdpPQrgT>d{w%!4YygLFLlSISAx8?yW~PoqA_HaZsOVGKLnbI9+^6LjOp3WYs3c1U{TsvKXvJRRm;Dup`fU^ zvp15|XtNZXo=%oLik#+ANlHy^&{SPfp{c1EpOvL#Y;4SLtX5Yqt}`4+ zZ3J9pW2?Ch>+t3@e*a$8rmUy5v7fc|zj8wVkMVwq<3Cu52_tCho1+eg_5RMCQl_gU z<_}bWA4lg>Ov+vEer_NMAlvA*Xg7yhl|Bm#>F=rHs;)B);6+g!j_L;?B=!Z`BK13; zm6z(903%4P4%xlJhkcVe3j3+MaB(fhNyk2~YJFKiP5;K0HCQmfON7i_w0B2@sDk3v z0x9mMK_t#|;0_)otu$nN0_AK6TIJc$hZlIG2}g@W$=D+8_5AAq+{q-xwdlS;heqKoU@<3pWOR*qBKD7aIvYd(a_Lvl@#UPqoFt!7(AH}Zm?Vpb_{!oMJSJr6{cfJ9#X$xLM~_LLTaTs`QD*= zHb9!K@bgOzGAGTtxo|de&9B(?&$I~*^&2rBhrE#@OB$})S(damPa1ub{59(ajvriL=p6VgeZ~`mq08HeiLndAge3(TCZp`Z^^Hpi#4A3NBaWvak%8H*jCs zIc(R0(7A+T2})>p^uh0WooC&4F#!tZg{C3|~-m;hMV$ zwbO$_QR3y{QgU7%-mZV+5tkGRV$$_SoHg$qjmG1qK3|B7tfwcZY49`putMe*qZ$Rt z_+iUJiwHdTA+{%8Dx=RR&@gufHUo@DgW2oG%ax2i^^?MGh-9w#JXJ1ypTL=-JM`Aib+1T zwj>#>{L<&#XrVo52t;vEaO-z50kReb3`JlvtakeZXOZV(zUZTSnc8COWIq@%5Cq9D ziDkTv3kYHgT!V!_VrB^T**ixmMLwf%=g^4E{1}l=h!oN*K?{9J4*l%T6i$%J5={gn z#i^)xtZgVbe|yG2?@36>?<@oH(WenT-EWsP4Tfo_`TeEPDw{a(h>wY5cwNMgesf{* zv!#wAPFga$FjIr1WY$PSC$+{HT3EpvflpW3*hmt5b>&@OUq8tg7l69txBWUp0gisv zb%rO1vpw;;$m7cqq^AHZkX^TQ2yr&l&=}%%+d2KE5=ZV!SLH)alM92r$D+@{3AlQa!HJ4%heP z6d%~aA}Tt%>fF3x>5v{$RV~04f%gzRY>CZszW>wjHZ08BQGi-AF|oL`c(TjI)Oy0_ zYr@}P)9zvdeM)&R_j@qkCc>qP@-$Mdi8rIg z?eTAQ!tBc6dQ>(Y)w^feUm>{A=0r`JhV6Ua@d7qrxPJ*Sa{LsA0lB$ z!{MS1tnhn9bj?AP?-@JZ3$Y>DuI%1}+K$itVDn+qG*r_VCvyRyb+NNQo3Sq>V!c*S zqNJpxx9dH^Mv`D5&at3=ue!^h{Vp1MdPA`O+6LE!_sYu3`sV{g*RgY-PMi8<^aU9h z!hiqPHl^{4D0#1?rKF@(KD~3@E~^@r|MYCJAOT(Mh@o-C(Jp5ni?)<;I+r^A4S1(=0TQQ|BH& zyjTi^;?2bYW(zbOF9JO{@a~3?j*bo{vCnhNITvMY`7cx=xls43c3HZIf9t96bj`T`cghSu4x&Lj@0VS|lKwNldfG;sIP27xq^+|)4hyHltYfEeE z#~=64?W%Oy8UjVj7Cm(aZE5h{l~8+#D59HBitr{tj0<63QsG1N@Jy07kKZfJ3Rzy%vbTCM-avVRR^0wjIV~mSy@`p!db!r07s9{xz2?4VCiaAV+WgpRB&VPNt97Bv^Su;C zv>Xb+rl)~YMnXaYYZ&CGpZ%P@;Ap)TeE-&b1HupxN2k6&Dwy{qyY8EySm>@mx{Apk?^WVg}E|Okq@ra;>Q6Zubc1IPUy@ zg$O63NR}xmr#t3so0yt^%q>Lfhtt%UV2xz8J8Kv06lF43h&Ey zR?s9dfH*1{*t2Ret_}ape&HA5zW5gNi_+=ix26{Du2QlwL`wM3iY+Sw-a<0X>S0iE*g6*#7f}%MMm-ibfjT&zp)8uSKhZ5kZG? z#QmB;BgPybAU*=wxY=W5us|=wqP(vG)gcG;c})NNO&i9^y3bP{;lY#cW#?zg0 zyE1zq6D%G^#_558suv&w#iA_ZF*OIN81w!8Y{J5s zIXN$gh={Uu98?X!GLc{3FfeFpYW74CGXZPrbrcYc3ArzzCnF`DN!cQh;d8@_2pt_& z1x6G0K7QHX-%sAA82oQb;GvB)TfrlwCFHhb^ zAps*ImI;I4NU}185$s6IsA3V$zUd1iFjxD3HQ9GbQKWd@e)$T%IiKMr7G5Fnr+DP^ zMrL07LVQoNwUA?8w%8nM?=X*zj%(4|;!)1`A}#5xyLmg<*xnEIKagu}E@y72_hKkQ z89t$Yx4^<2R4;Y(kt70B{!@O~%GqpyAnlRx-xU*Kic=FF-o?Js{_(~@>75M0Ij;lfhopX9hZ13CV9n=kbMYs*Y{^N5gbhV~drrl+k z+<1rV3i0j_ig)K%EB1-wCubUU1{`{-I0QNP9v7nnCW0MU=G^V!&v{ElyMp#a;|`{I zlDo5FC35s&Xg(Gg_nTmZrk!CsY#9C$=8XvMOnOREm02t}=|q9n<@e}$i@z=N{V5tUFCF441Un}wp(_GXu`kz^083eDY{_O>S z8sy4WsU=Y+(;q{?{Or(_3uijn6s7wPf-z;hTw~;RzU8^Wz%RNqqC##XzOhgm z$uu{4`#0=h)(H9h%Q{<;^Y*u;u-m_$+<%Ab)?j}=Jdz1(h+*uD&ujWr*e6}b|wUv#?;O!g~Z*5XKT(*0Rg{%rbkSi z{tgqM(0N)`n*74%O+$EQ$Gcy$60<1Y`m5Cd`Pki@U`?GCyA%9JBaQ;h%gay(+1lvW z3>=L$5Q4({eNwQ?@)Sq$Md`Uqf9jrQd&~M8`7KZ>uF^U}nq?GqZmGDWPM0Jj)0k-I zLi1>?N7HVUBJ1b!1=Hi2uFXN7yu5jghMoXafkgUXJKRZaSj( zI*~Co-MQvI&YU?39LwAt1%|q;L=jHylgQUR+wCDcFXm#Vj7bmXdZAE+%T9t7V2S9O-Vee%28OG&wJ!%8%^Z<( zpj6@EGn}d$+DiM(i4^D$QIEx@*tL(Hkl8~Zztv84<~EA(dEV*`9K9=<7U#|SBlOzI zFe6}<))(sZ!A34I&#dBd5dmB9-F@q2lCEl09MYnQ-bI-)x`U~V?#a;6ISe77F6U`? z6Z5;38Qp^|_!BeOh&zl67VBEcwi9DP8o~}3g z@HRh`sd|()aUhB1@VYl+Hnv^lQ7||rW(-r=2kehw0cFzl!~Fr6YCJ_)-``J^3?4}N zv;;(US5z=yAz~!r=lZKo#66Jt`!dzyi3MdMBmY_n>4mUv0nY?5c0Opq+uac(#>Hi@ z&ml=jN7v5*grzANqL8Il`JuKc$dYC}yO}}Tfa{YcD4Ap*e9_bBN#2Gf6BaIdulw_A zC{8ttZ;xE+so9C@R^S91+JU@VT_wQ=>X&r{&!QlmYA1$?KkPIOX$V= z`K6jBBYhvk=sJvh_L~nWUtes6pN(}W-z<>h%6eq}{vtto?4J5b(#vVRCu!lKWX5*7 z1L~Jmn4njxo6UnaiH`K#BNBIaq>CfTQ{y>tNy_)#$Yr;a%$;VT=#5OVC01r;>;k{X zu%lMLWVZ?QLlvy4V|SWWpHlQTgz&mMQh2YUm~T?p)MH6XSd*Q&+f4?V&axsl#jlHa z`+AY&W|)?*&w0P1e%mk(`Jn%QFIHn`jN(zccWP~>|EiR7s?>Sy^YKHKlfM9|SR*;Y z4<@Y;d?|(>y@AWoH4u69qV&C#&neDRB-~iFB7PXnIuzBU%cwKxs2$0*mVK1Btbc4O zsdWw3vbDme0w*f86h$;!u&TWT^iXcNGW5OUf3o=hmeBwIX;R7>PdPWwv@AQuAB%G~ zJM?8R(8eDk7;r+q%tw8;_{i&IeeIEw8VrHa;cWX zfoaE5%}o_2UG|wLj$9zkZK=EI1^aB20JRlrFl(b1m6X0dCGfz;pW)l!kqNH{e!Ed$6XWrqO8b9$%rsWyJP8lOR=h-6prV4iPQKaL6R^*p(<#q2@11148ckBlecCfZyU z1GO!h3urEVBjJ?_*QlQ25NYs1@0bG^Usi4a3>R-|uN%%)`wTMpRrZNP9gwv~oou)$6cvTMUSz`udU_*dC2G>+$4}bD zqN8ID+MNRUtvdz=`xD^}OopAe^{`u)PI$tYvkkx%q%Ll77$<$n>&Im>RZDO1!Ax)7 ze9g#^QaG3$&GE!nQi}2qS~ElMO#U*XeE~E2r&MYxg;-$pj^tab zRrRt~4-KYE+J?<~!}*H~>6I+rr1)xL>Z)MRh|sQ@z-)Cvr&p3)1+aR+2UJ_#ShE3| z5mRk?dNnz?n8s^q})==v-ypfyeHebog`#X4d}pxpf^LR`Q51Z~2DV4;I?ZJ2<}^Ffwp&H7$An`L;TJ zvCkoPKiVMl0&lem$J8eiaOthwW?geG3cVI@rOA2@!`A4afCupev2#B%PVZD0tf9Th z_EYYvo5fsZGvs0>uLG@xFRps2`NO`6?!~DC&TdL-e^PiY_fdH3KOQsb!D*Qr&XcLi zxWDAW%EI!kr6t2+FrmThgxaNr{@L5C#?9T+vItV zk{8#uH+{YR{8*R6Csb!7&9(G<?D@TM|{p$G#Gkx3via)&p%~WT|@V2LwU2u zR5Qh*#tfUDyts9@qjHcm8H@#-6K>@cl@PO;PR#Vf=1B6usC1xa?)!IUjPrw?gZGFB zglG{+Z~6vN2Gk)&Ln1iUOC*aFnlFi++rpy+SAYH9;}v$l z!p!qKjS^{&Z~r`FCo~(AK4!f+t(Kj^>qkaeZCF&X1MWk7{PF3`x>UU*rlm!1V*{Ki zZ~+nss(T8BBMeMcYC zZmBnndx%(+Wc6eac^l4fP3xRjHEB=-Hk(YMkmUO z8%eP4an)R1c>uc0D=$AY;&#KQTbWAPa3ooKDmDH4V6rFF+Y^B^PlMMvf5QN%5)FWm z?su4UE%`b@C~D+rdxD9$@5jMEN{z!q-!FvJjBV(v9jYGCJb%=f2Rx~q{#Zp`3#dJI zpnJ3229z&7=fQI;Ay_>`*GSO|WvRcVSrL{1GH-7h%Q4=uo@Zge+c8CWZR?qU{n z0r@$%4ero(2097u#6Ak7cgV1%{UoP^L6dFBf+OS3uBM2URd{>u$ku5<@3j^PPhChCzy9wNpxwbYV%28bJ3Yk3~^hX!!c>o~juLYFW zwR_zvuUeD#W0+Xy^`#*;HqJupL1h6-Nm=!=*+KdebF&^m%Tf&AGDrKF4#v~jTvrHI zI(fD2K1bWy+PbycV!gQ>SJ2Vf5Tk2!=|aVC`XGoe7VqzT_7`@pcLY~8H1viNi{33j z{Jentp!K`*f6+F>I&9p#xIgGG889h=Z=57P5k@QQ6RgP!Ac;Lf@fF6 z#I!yo2?lUy75zp_N&vT2*O7meuy=}r*e5El3~#;=zSJtYHa3(6jd%Iiswof;v%~gv zA~PH4zMtPjSH-v2b&F3T*U*t?i-q!Hr&q}>MjSP5^~A%~22YpOjf~zVJ9kErZ+EEr z`->&qt|N^CW^`g{#It}6z?b=X3XIF6qotLl_ue*RelI3OrInPP1^C+VZstKBDJrX4 z_Dy~hJ0HrYaO+jH20 znCHTQ-hl*?Y0kk`)H^!!p2B`HQKUTZSq32IClRY-(wZcQE-ywLa?bS+UTX3>+8F0Y zgW_KBg_nc4Z!|_=jlLK5sG-Ey)Q1H!Sen_m)B^t}vU62=LNBM6OaP!N{%73((}a9I z`pX(d5XXS*Qzyw2QF5*1f`kp_ZanZ5+8tV6q96+-^^)NK60@9NV zOJ{uy_dwY694({gmmUZO-+wG6%V>t1i;@@+ky>G422j2*EH<6NZc9}FiRo6vhYV+A z5ESZHIz3k%0EQnkaQe?fwzKxs=*ir`q#AUWDCVzYqm)$sLA1|JeFBd21dfRSp(Djy zJ6Gk9I#X@4!S?pEe@*a6?y+WI!pcr!-qy|o=HD=aS3;O(=v8^;KY8`six~JJxdUxxh5v1O~>$!2P3b?D}dz4v7o; zuXxd+TWDG*ht-dlr%gYNp5Sr0v^=AivpCsK@H%Z8XkRFnwq>uAdbBOoxj-Vr$KitE zQ|1flyG0)jidB^d)HK!7zAESIHuz8nV&^_`Lr+D2J1LkAOhBW3VUy1KK7qff&z;pY z=G(^_t8K}DLr+zzQq455*b=bNOJD6jvC>fA7uAnq*hEnpLb2vr14K(pCy4=8{7Z z54}|^@o0lZu#}cwdaw(HNDnFXP`ng+E_x9PMM{fAq_k#jQ;nh9)MN>%!C13#cTGBP zW@p~(p=5U_-DI`J|7n=_ec$imeVT|Ef%HHVkj$>on7Sa+30iY35JUsx|B;eYx5CilcCY4G72FsR6TOcGD z4BCVso7QhUA|u4knB)AIP>N(SiSK)8qtPZL3;F zD9_F|Z*wCD=Y)7{*>=^5ZQDr8vbLquV({!)uDpJn-Y-6fGUpu$hd^4E#C$(g#ydjENC5p7-QJd z-OZ6>$N2WlyL676gSHkXCVxY@9{Jh%DxgqWsOC9#EDG@Qc~mY3mIXo}gusL$S}9ht zSrP*SytsQew?D|R^ZduW)N`QfU{!_kgX(ijtSt)Au8TJ_g9*dv0EHmY-_LTX#GQPe zUGKkxaU6Pj_S4a^gXNXwIzY`qqBR)>0Bju`j271#e{K#p9_Q-V7+oKIh}_>rsZ^wq z>K%l-)~F3|@zN!)KG=~`96xa)wi1ssn$2?X{3qD^x+s+!7hellyX37wbTmm|YH4AC zE7z~{+Ql!i_NFPW)A_2F%JoZjYJiL}k<4Ks2(@;;8yzi=?mMt$sIQlY5C2@Z@alaM zU2;6)pi$OiKM0O2B@#C`Dt!O`BGc1<5Z@*vfQC!1lW*YFj4|Vv`}!Lep2^Sg^Y{eF zkkku4*7ipf%C(s167A~)GRFJ`jIVvKwP9l7SFT?B9%MkT9H}+0;2tLFWEBRE=|#w*rVK1Dt;QJzCmq_8yAi#_j>F?BJDVX;0=r pYt6m+c>t#GQtj$#B%bwe%iotCyoKH`mb=tFt!1pyL$>6G+=l&V6|s+6cu1Er#olEx$=A!_1~P~uB{ z*-gCH*_k-!bY&MIpvWPDm!2c>=c>>yvFtXn? z6AthYN%<{FG{nsPiaDc{N(muKL^Lmmrd;L;<+^`zfxmo^&6aM&+Vn+hV8ArR7T}&`o4Dc1$&=Yd)c0bC;T!28Frf(R6lQwpfnz=Ztdd(*n6{bZkMe&Y)hc+fO&(WHEH=RNl%la2#kTx>{K`4kKU%S^dhrSR2A?2%IyW@_wHR&`smuosEN{E_Vj}oTn zys$n0$O{YTN~N%E+qP6ph}W;1z&_J_NKYiT4-O7Wo|yrH_7_^D>3Nfm(@?yj2sE>` zB+O9L)3|lxMoOg98}^#!fomr4E7K$)#4opP-=4yiD_+Z6MVgXo(n437vrLo%@_B6A zzCEc6@#0;ksb3R;!@#%OJ3H6)W-{O_S5^goqof%j&gapS$)K~lyFCRw)ok7}0)~`N zZyp*-b3WgYIx9(ZRB+DBOS^BYF|E#h1K?Z^n}>!{hNgY5*^mYT`%TkunD=JZtpgW} ztqrdPgxOozKZbwvH9DlhUa^Rt{(d-0?bvIY?JE+nfqh*)J+{US*!DF6Migj-L==1j zu~lp{0N6H!>mt+FR|D|KiUfoZkM*x#--be=wZSHU!~cbWhP8oMhcpNTs zcXUi+1en`oEap8`0n769X34TbcN}Pj0mU5OZ<;bZwt)Z<6&%|JG|ijn@1kEu6gYI- z!I}ogwjqeBZ)dY^c$|ow%v#kdpzC$;f%j{*n}a-9C-6QI$S`1879`QKyUK4`at7f16tqbgxjZgXx?5KegynBOS%rLQUOUh9ktn5 z#K6DG#UfKY4i>_TKoG_tm4byLeLlKrUC)0}@PRXy(kPKYxl{sxiPZ@Fd1i95fX+^D zqLhFT%Sf=lV06=334F6L2-ymQXCFLC2^Ip>*@>ykmy5Pie_WA3=Y|dM<>uyeN7ubN z001FC0SV?hnO0yT*IHeVdVfiUsILitbRA05FgG(}=cn@`+q-aYX_E;4;5_@$A_m z_4d}&hX|}`9tkOzT5C8O(YsGps%iQx10K|trg;Q3tzLgpg4V9Zg|lbN3V1n+wJCw` zzVgcJS97_U`Po@eCgUvv_1z1Y2zyczEz6Mcg$mtf>gVYQIXHBbb zoKk}N`f&RA@v;))hmXAVR&8{2blINT^r8M>vG~_ov3Tn9^XFY{aIhYJA-v+&G;c9Y z1Nkp*+4ouiZt3AY^ag?hM`)S{P)e|_gLS zmaKPlJbC)~@j|{*fmpY$p2tDR{Z7TYUMJ&g@HQHe-@*T^X?5Vi7{5U%r6BwJakW~- z$48HrD#_%*XPB=gyotL#Amq-QZikULP135W~a6 zX#oZ4-oQzegP*YRht%IMhUY1b9lUh@Wrj#$N6rdE?bs_ru;iS_zdgMrH zp-}kQ^INw3yj(6j=g*&a04M;+X0r_ow0yby+;h(X0G%BgI7Xqz^n;5hj3%{Qyl)#~#inuR6|2*L5AsvTOjZuS+Dx$Hys*xn&LbBm@8nKyPbni#v{!&@?TTt=0CA zF#l*xZ*TYJty|-31_mH)8!Dd%SF7M!&HDo5I3T}Ukzs%m35c#PC{4rs<;$2jeY&I~0tm>cXboJ;XI2KF3Wb6Lz>de`wU?ORjZ1la zbawX9$+59-rig~S)~J?!2j8Y%HEyVb|Qi}j8L{xQMH}H1g z@i2*iKvP-qE2W=C;Z)K9=)M}h#&lhe0Wg?37W!W@vqb2%KM@5vZ99%r^FdmXW1x<& zOHqiX4{#kR6#4DI^Nt0eV%xUn+X__r8aN<4SD{{RuJ0^JWS(Mj$vg(`d0W euzcr@%6|dBP+X3VX+XRH0000$}ukuX32 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 diff --git a/images/stock/dialog-password.png b/images/stock/dialog-password.png deleted file mode 100644 index f81198437427c0f95c8fdcd0dca817c3f7606943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 zcmV-63CZ?}P)`loI8Hh}8-RKE z;f*&Ea6>*Wd>{zI%M@AYy>A72j5Yh~N&Q9FaJ!<2zubNIx zgT-QT+0v!U;`X+Vu(h?7QmI53M$~E*`uh8M`|V@e-F>8X@U=szm#4)wzPobe`h7D7 zVACU;KAexEpR~7kT>QQ(-(Og`U?HVa3)b3k*D4AM-aERF9^vJece}lN_N3m+7N0iO zuU-3{z2_9b!w+xzO1_YL^dmQYw0O~l@4*;Q1#1kVig=In9xo1q!CH&476S}cD^#lk z3{(aXKNaNs~qo!qu|?YI7XP5^BB(GS0x&li8Z{MK8G3+62(m&*fCuP4;g25F;# z^A0Z_@g7kD1#1m92r$MV-cw7e3|0r}>FMF67k5=sFJD-{X8j+}Du9O`dSI!IaxX1k zzP#8udk!t7GPyVhKvGXg>NRS$8eSaUdwd4Kdj}{6OBjX3VT`CSSQ(^J9iX?jm!1FE z)n~MR@#@tZj!wpx)2c!?h@ZIP$}4hht?gKANz)V&!5DDPlOzeR9(qCr8%9QSQp@9A&z5mxg4o$Fl*K<7A~4!IQ-_3UjUz+j4xA;z{ZXD zEsOJoowt4VbH!4jL=Xgc@3A((0KL7(`TZZBs`}LJNE-D=t+GE2c`I_fORc#y48oOh z9A9$H^;Z{5#S+CrkuZ#?CRHkx0UBw_bI(3s^>yC6Zr!@qPvy^)BM?OK9gCM-7)C*e zwE;jg4f+R3k{VmKY_2vMjc=}5bkjzV^DSOJNuhh7n;9 z;=KoyIh}Lt(YJcO41DiY{*146r@FxgpIWqVQ5*yT)|lqHs!$oMux0b+TBFfeF@f_Z z*qT-AzMVGG2X^k*RdGH=A&aEqoTGD2N8VWTnMwIGRRAI~ucf8jOc`Uq7{n`Y9DW@q ze(#!9_xyS?S4^_chOAuJZ3;9A05t%>j0J^%mtcbLgT1r@BF~(p3 z=Tr9W**EB1x^XJw88zSUKGI!NRSX7WEM9~-&Y|Ml7|~JF0|1CsmB0pAYnruO1m_+7 z1ATE)NuQd^U{NXer@{WgVR>ha!8?bs1~8_pt1CC%0Gbc77Go@`il~s(5^QMG4I4HL zPGy|CR@`;ii$8%6CG`XvaijcYnC}NBmJ0T~l(FWkjC!aLdka*FS zAxEYiz}8=xSt8tvny=lwI4C}UtP5jIbM|SLP!UgH>g8vCiqCj`V#~&o430=sGjaTj z^aq=i@=Ydlzs zh~P!BL7q!K{utI8!Z08VL&Crk1i`S#6A_#fQs?nr5LMpzTSBH&GgM78#&W~we+QZr z-~89(-{{`+G{CB{{+*HoYPoaXrFVqJ<}s#OI-MWVI1cX}^?Dsu=J25SdulaDrP5$vpfRGAGQFh3jD~8>6GpRGaQTW*EO$=i-zg&?o;G9i zfWa80qrJfPZChEqcnO74iJqfJ*}L}@Iy)j#2NztBCkQN26cL3XL13}gpbDxsd!)l! zPw16gT<6fiLv+rWjfi5g{Cn?yTFW_VNlLlgLJ*ZvPupn$XwF6f)MKr3%T4px_TpRY z*l~nCo_TX;bIZ+T1_o=7{462vN!yJp%yV4G=_2!8FBN zp=>CWCk6ck8^5eJ&jdNhw?O*@_o$>)j{g-slL)wEA4$(@;=)qGxNVrgA`Zz&I7Da> zhsdbojPT8CU3OmZ*|Eq-K^XpDJmMYJ3Z;CFxeGsmIinN;&<1D)G!N=P9V!kLpYc$wED1`!=Gv5l#K4FL%G$$Bf9&ju><$-h?05_Hcqw_xp6l*Cxwf_CsXvsNrdc?x0jWikH zSRelZij43e0LEobwD+>b$x2C4RHYQ>Qumb-<~rO!$>@R3z-EekPUc5GOsO cIH0QfKQ^z(6vO-n_5c6?07*qoM6N<$f{J!t{{R30 diff --git a/images/stock/dialog-question.png b/images/stock/dialog-question.png deleted file mode 100644 index 14dbd9cacaabab56439677e510252ba4c5dc32a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2809 zcmV(oqKl^HbJCGEqOQuV7#jpa0-`8(FvkAD7<;=>lFl3Z5aS~LiQS%L z6ND4VnVHEqW@g%ckd}t|Nl749D~KQff&hqO@F@rYA>pUC0O2P9a2|eY3uECYV*sT9 zW8jQI@p>`d-;d$mUfSK#GUZp4wZ|ptaf^agspkPtPiWMRs7yw2`!NycNG@KIgT9pIe=fPU381sVzm||FI_6~^XI>R@LJ&< z{PWN8!}N3_3c?y~la7Ew>1_*AQotuCzgvK_5bp87mY4{cu~conZVHKlaCUTH;GP?j zlffq@bOtOhzYHNiADBP?+9GwkLG52yuB_POBl0Y&uqk?$+@yAhHTZ@5#0gR82V`yjyU0q$MsHi|j zMh5P@^UkQcbjJ?x&dzX!AVA!-31_RSykmode{Fd3$$F!XX)>1z*sr);qoZA25SB03 zJF(k=Kp-jz0J!6hJMiL*FQUA>9QWUU|JC|!+qOm3;r;z!hYsoLNLCg+BO`E~KJA-e z>{T;8Qvy|zq)^75`M9deL+-juxBKwn;fO6xD@8>`_~esM@X|{!;fW`nKuJl-)waIA zzNmV%v@{%P0I*sitXzpRd-hCG#(sB7lBQ-&000^#sn&D(a_?|!D;HL-)H~a=2Z(am ztyr-FM3WcQ*N3B?laphr!_S=qYiiO1%g@JHPY;IApa04Vlt;rk?e{={v0t@SR!)&y zZUIS53^%ylpcNILPL`KX$&_wA zDoNB-aV7%IlGGCLc-s2w>zS}_ovw}6)PN5SMb&L=Y{Zr=TOi9aEEWqYD=U$gmlx5G zwX}eDbm&2?S%b?hEqrol=+kCNIuxNaTLJ*UDE-apef#_@B?V;h;&4MC5M0nvFEuq4g@uJEEG)!hk3DAEhrRzkxXYynv~eRY9XiAUlat3ABRNuPde1OUL#*q^$N9h3bN6A_17#4a+EjE#Zr-K(o2x8DwGv*GN4 z0|76kzn`tCSra%RNn-&1cy{MbukgSFfF=AX!JW>CeSA8hyLST~j|PPR@!^Nj{pOo~ z&Ux_(N&0fOw&rv%w2-ma`%j&6dp`RN!hQGYK^aa`N+~$!;G82NA>nF09~=aI_gy`R zygc~F#?bx22Y!*Uzsv>GoCwrPl3!-*x2KAWJ;K_xfXx;L*540WR|hCc_^L!Jp=%Rb zS_*`=R{+73;lT&tC@%JL;Dw`-ZURjmAvKRo)O2+-ZTbv8+2BCvcpP81hUc@*X85EcT>9juAp z2#NS2GXi%w9I64;xCnr}2YmUkqU2p?wWcpzy;|Vy?N{}<%LO4f7bG?opcJgR8LXi} z@A#2N@a2gUy!ZI=wk?cpGZ4^$b~qfw;cyT$tWhIi9PvnoCmJs;Zki)o2N{id;>J$agCwiQNZr=`edjPpg?z*6d{B_Sho({ zyLJTzDLvExcmZ4&BA|^z48lXM~~8C#@;c2w;?=*rdSZklt=^J%AA*@;z z>1h3WjGjA(&)VC4C5*KqJlEBEuC>oKWm=hzfYBHQzz{s{)pzxtQSbp|7h@IwDk_o# zNl6e^tpZuJ2qYy1!us{_+H5#hR3z_Ytil_#CunRa0OU|n?bDE7HXV_OgUsaMg6202 zZR-3K0SJA-M4T*pEvHXs&QDDhY`M8aNlwOKPY-V?D^sf7?&=SLP5_=zackavp%Ty# zQOW3tXj6=c$tp<_53O=lNh@4auNE3|=mp@e1P)IQ4-fQIROH_XWO0DHfR0v5+dcrg zLj9&R1k~Rua3gqaq$6aeWKK&$3!H`=1VR8j2ycI}b-<-MO6#GY+bYoj0KcJ_fmWZo z^(%4sBPg>CeG=iNKa8>>b7pwPq3ix_w00000 LNkvXXu0mjfN9ZC% diff --git a/images/stock/dialog-warning.png b/images/stock/dialog-warning.png deleted file mode 100644 index 827a33918a26a734190f0a5f4dbce0d09567ddbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 diff --git a/images/stock/document-new.png b/images/stock/document-new.png deleted file mode 100644 index c89e797b729c004345d7e50960764724b65539b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmV<60w4W}P)%u~Y(r zXb}_|8`BG=c%ukX-$4{9q76doLzp{zV@x*PwAt}u&t}hl#Z3GlB7)KAFFf)5O^6;q@Ed~j={Z&#>!se0@Ao_1wrp*-9>)b( zH#Q9uXJ=D@e0^d95rMVPpZ^&SVcRy=SDWRPl`E}Ix4pdxpz6vXVlXq9{2)Cz{Oven zl*?t*>vddT+bGp)ms*`}`_V!G6M@wY6A?3V90wwTN~HqZwsE6*t87`-2c2&FPLR)t z1BeNbzuU}rxG+-h<4b)|0w*W}lR4ps~${?^TE3$Q=fuAMBk!B-^8wGo# zD+NIFTdGQgY0_+BM)?5Rf#{(KF2g7XfK+?4N-)P{87%@tOtg#ZMw!iD1`t4qDB0As z=Bsio1<0~VG=G6nEPx3&R7$SoHaUZ5(_JVhYhzJpR zgI|NYhlgMGK7IbUft>#;QkIy8c{CUd?g8*bL`ao|0TfgO#k~+f#SFkqM7)1JxOeC1 SEjfSy00009o|JHzI~l(wc+X|X62@sgVbK}7Ih5cH;AiwYh@ zK@r+2QuJcIl!6u!Jk^6DcozHz{5TmbjWkIULz|H8W@mPG##1$$O&c~?y!f2v@bY`! zdFKQ8PY=k>;`ZIkXD!NJs~{NeEMlD1q)_J{JzV|}SHN}_oZCwmFI*ZP$&N;fHY)4c zm6cbE08aERkkUVvJvf3=sN20?Z~+l^x*0aOU(mq=gcExYjM-4i9DTODFum!1pNWph^DuE_ z60Tc^+iJuXB$ESBK854d>yKw&Rzm`3+rfc!2Ap%Wyc&Gv#TKN9_W>j`woQw0000H|oDo`U{!cL{d$|9-y>Gg%SFg36^!)E4gz&7K zz@C?0tb2XJq1JlBwR`VdZYq`3|5aSq)qCD~+nvnUq!DVZP20|;qbrJ(5-BByG)8n| zf^Fy6D5WO#HDw8;lziXRj1&SPB~r+7x{#8}HEX6U-;@AD8kCo>9uxIw22vVX`?dj6 zN*WuRMk1F8DTZ|^5hM4?%E~(d7*s?elSDn5i4fxU0fv;E{;qK(a)XZkG^c-y(cY7! zXTV|3ESs`r_poK%19y5SJoo~HkY~*oNpcAV&@Q^ z46vvEDQ1P|;f4l=YHF%VCk0ejSBC<2{>&N*<4k%eraES zkJZ=LmyO`mMajk|R#7;A0oUU$Ii|!kBuZ&Ap2G1Ij;okoU^5i!;)}1(Df>qA&vs7U zgAEN0t_hGzCk`)Pv0_OiQek55+pkRMq=KMDGLgiP0>|@FdL#ohzS6k9 z##0(QV310sxGQL(mCnvb79gd-kb;YU{5}pa!;<`Yxt)TdVy^VM7*cR+wtO`L@ifH+ z0b1Ik6o+l39IagzU>F9bWdX2lYi;(0)$RSfcJLJMzPgy6xJx|g4cA@|XYDIZFwbI6 zP_k>^X;$5*$CMdNA%xhlaXp4FKl^)&Ho@e1}Js=A+}6sN4NHb*tWgx-~P`DKaXCw zfFUoBw6d{fnrUW|JntIu-mAlht$zW7`wh9V>7U;K0000fLnND1e4wX{UGgaCKd&`$L)b_+m2jCOTf%{ms|uB zftbO>c`-2~*xp{Wd_@HW3$(S}I^{aI0%noT%NAf}BofJta|SV`V`fn19SjC55fBLY z{SK~kD7;Z%l>V&%*@QL76^nwp|hUqn)$waeYI25li1kUK+4c_ zC81ndoUpgQkN*DqwWDLB^Py1aT09=#2LMt^Argsbdg^Ggqoecs?%sE8cXzks5}Zce znL3>F)|;nozX@C8XUb1j3^*0}Q=) zX71R|7a{mI2>kY zLz6!g+S=aN-*foC0MdO`h$xg&DDhJAQ{~R__$q$CpW5159&OyUrMmi#_P+j}?)-XY zF+g-_iO|W>tiTWF)}*B)6LB^H8l~7 z#j?hW2-Q`0a_aOz&896Hzjh69NhT6Jvu6*-K0Jzuuy^ksoP^En>?|`gGbj->P!$a3 zrVLFm7%Zr_4j>o|5|770T<(A1K3ZB2kW3|U-4ss3=C7+GG&b%;L;*UN;*D@|tec`Y z-*}te6TK|nT%s}%#Ih`ssRXuT^XDH|85Z zkltBRLW>H}m2kG_HCo?#9#>0A`{}k6ATS@ZS&An;HcI6-?1m${i2~UO8ZeYWbTyIv z?YizdQ;QX4xut8G=|cg4ZQDenQC#g3jXStnV<=%_VuH%bN~)@=2m}I%c*HYK6e$o9 z$+pPIXBmw~Sy)&AgxSSq3}qq$Q&UrfLLpq&#pm;3Sr&z_xv&91(oC~Az+2BsDGbBF zFbwwXs^hzJ=g}IPchq267N%+9^Z77MGea}$mqKMWY6c*cHQ6++!7INHH$Ac=LMRlX zqN0MX*SB)ug=HMa!SDA|QBgs8c{yceWd&441VM0Jm*FeJn5H$Dt((@Dnwp$^=fZ{a zCx86uhh4><+(u~Av@T6eP96kOfX*14X_Gkb&=O_47VHKgfJ>s1SVWsb zP*6xTF)CVt2>w7K;vY2{qXs20Dk26Xm}qc;ptzQRf}+8QWfP$wE-71=X=$11y>rhw z{dBjIq!4c_xol>7-IlPO?y5BSoEsJk0R}g9S?;BgkliK;d<_a-#WD zK6qm}0|u2-ch@>%i9r_tgbGAbvp#tJzA+&sB14*=cUfs}kxQ#*-asiCwtuR-e!#(soB(P-rp^!!HJ|CP4(QQydzw zie0{w35uewbNvw~-iF$A)*lz)6nA3Xfp_-jh^Jxcj`g7x3QK$1ui_ zRl2VO$k|HE!R$?}#M`%sM59p}wlwhe2b(z&olNH$k8n7Ix>!U(R-?2=DFZ!ij2kzBbh?^Vt5>7E zCMt@XIIwR7$TGTBhk1t#t@6eh(@EVT=9DT^aiCAQc5C`2&JW^1&78M`a59|U|Ry;OJgt! zNZLTCyZI-Avu(>U^-F{d#RvC~*mLLC7vlQ2(pr->A$I@Jm?fXL0g>tW{X-xsfEbVh zQZgJLV1*Nr|5W|=GDZb{)_0EphXlFrQ6vwtb7B5J0HA>$!2b)B9A9CM@W4v|0000< KMNUMnLSTZ`NQ%Y) diff --git a/images/stock/document-revert-rtl.png b/images/stock/document-revert-rtl.png deleted file mode 100644 index 46435e1a01b950060e3a3b5c7f44da8bcff7a753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1411 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 Z_!s4XugTBPGP3{x002ovPDHLkV1mKCxpx2n diff --git a/images/stock/drive-harddisk.png b/images/stock/drive-harddisk.png deleted file mode 100644 index 1be6b6c88e856db4fa568efc4a5165bd66cc1a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmV-W1+V&vP)8*lP;ER0s*@5pc^aA);mDMzgga7VXDmeQ_H#O z^HVY10B%t*Iy%}NC}pOeGWhlHGh_-&Xg~y{xeL%D2$~^N^ITZaXwC#NdJY`q!uMj1 zj*fN%f8Rq;Rw|W@`t^Vs>Fg4s1S=Euif8GrZ$yLLZ< zp=QwBqRZ%DF568kwrHid2!6b`$pNWY)U!&J1@IWLLy>iR%HT&Y$Pa zH{T*;g$RPJ9&FtBhP9c`s8*^-^i{gY&az|h4c>U`Z7yD%Mhm#EgNW?fR)G%awZaxF zD=Um28ppP6mR4>eB19uGN~@GT?d1B0xlmnoF;E5y$IM=3_$!Etwzh__QHqj|h>lN8Oc*T$v$HpPe9x-{Iv|_P6OYA7udh-l<|!2O#QX%`ojl3q%a=Lz{Uk9z z(Tt_nSBb~s*N2vRZMBV-u(F`u>c8i-IR6}C38aFxTa9OnA` zAM~gCnOnHljK!k~*3xTuzK3C&coCO;u9yNAnhNToQ(nXgIgUeTdj~UfGju0+P^pxu zRLWer`YY!y{6NSuxc=uX^;!*pN~KJ9atAYWGjt@{aa@~-Ynye^sg@FHt^0k?Gi}!< z)t}<@B-ad_VwaA4iVQ0X|4NP z2u!7hZKq9a+s1Vq_U?OxSyKhDVR zVQkx`&1oYX4vVR_&O);XA`BRYf#cd}t?BCO05GVloCW3Xdws!-2*}{U%;^)G|<`E$umzs!~Fa_UwwUoTrN+& z9$+Yi=SN7icktA~gCK&|8m%??d;vr?@LCU=U$0d;GkJzuqk;c!S2=r^$21LMehk2G z_CQ2jt+m=LmoW_EKEby)5k;j|MQg1@#J#N`AtJ@4<&{WhGD&k(-Z8BQtZ0A6=VUjQ%GHfIzmqS^5MTGg(AjAkH>F0sp~jK;|D5XZ-QN SMmskE0000by{Kg+gD-FDmE zo!Ol??|EobOzoB${3b8+-u&kGKJ%O3`~5Ovt)-O)hTKh#Qm-meuUKr#So?)B=IC%< zUvB9%Ptpo7FywCcT<`eaoo@u)*&cVia*dJO7vpm`es475XxDIFpIZvRZDmM#sgIw1 zd{1WA#up?pnmDeodChjucU||?mE%W%{-pp^D?^eb+j?_-a_QCy`{l2P!mm#rtraH< zX7!3bG1%<`LvBmoB>@m{RElp-9ib;yS?8{{i?bYKClh zs9)B0ZOx2Nj!>nP=r_8(xPHiFTLC~hJmHBQn<7 z{JtSCZv_FYSgsoE;Ba35I3FO^TK2!6zBIV^lSkI%HX(A?Xsw|USBQ0kB+*!-@SJw6 z1!D}x7?LERSRUcXFK?E<%{RLij6f&4Pn!bQ?-XHP=ZJMo9N!)KAM;pi;#iYt4MOLF zpJ-snRsH_E?x`PSAv@sDj>WYjwQa%s?r>h4Lm#}y%FZr=z$fri_<>Il1o$bRAn-}2 zgE@yVj0nS!Fl-P;AyG85E)_>XM3~n-=Z@+4*yugq@?QFIknG^R8kqqU-sbhUzNh%- zMY3%o|uck^_Jm!ZMd#K0}wU4@eD{>0F>K_ zh{6lni7JZ#94El{mjf0N2N8u54=Z*qg82}OrB8~_JsH#%uDabi!$$`z_SeoL~QJL$;nz)wHO)eC1>yYVF~8LnNv zNbmZ6)T#|eZ)r;G+F2M-=>2#^IfKi|*3U5|RN zxg=R7j)*86Hz00S5m8ty)*4vkF9Zcuhr&Cb+n0g!z@*GZu?)xo%V!hcs;uv&7^nbu dfGKOO{u^MI#kY@oNCp4^002ovPDHLkV1j1(7Lxz~ diff --git a/images/stock/edit-copy.png b/images/stock/edit-copy.png deleted file mode 100644 index a1178e64fc4059eafabced346d3898213cf8a37e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 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 diff --git a/images/stock/edit-find.png b/images/stock/edit-find.png deleted file mode 100644 index 5c83fb689480f20df187d7bcf9db0458f06dbffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmV;{1S$K8P)wK~zYIwUujZ6jc<*|956~W_FkDV?kTiR%>hv2ox%zlnNDy zwLl>juu{VZj3kN=Vqz>YVgfbPP^}@Re84ZDekeYI@{ks-0jf~rR$eWZcYzv9=~i}^ zc6MfVckb~+w`K)nhD1(sa&sT~|8D;0%v?r9xR)W^Q*{8+?F+SywJEA0zXqZbFg6na zK-2-o+6^_jZR5I)x9$eOk}cZOuz7*Nq#e&Jud+Oz)J&ICbrKOYP1nP>f_;1TedFL1 zf8nh+-#K*GfGrK17d$XNd)Ly6%9P7Jm*uZ^?~PsQ8`NagX-&?3(6xMNxij7CH4ilJ zAL<|Id(JL|5fN$|Yg3$2rSru#Ycra5eeP)5f223RpeR^eTtpLdvRs#X`?RC&?bfo= zDFwwvkI~LgcLa3VEU;sj1OSTec%!Q7S*y4An%uPahl|UrSKoYf)#5_ViJNgtpYYKA zhR^5w?Qq-C)=BxH#T5%HVh39GuLDqL3&0r7cDp?pA8p${Jga2R!1F80a)Sd{1@HpA&uT|K>jTzKX6m0UBT{o!FF z&~rD%e^abPg0SqT15pC|&NqJ*Wcb)C=<>Z7Nf?zQMXAGPKMvRCv2A;06T+`Gw z0{7bi2qXG9HZ(jGSh4JB-)VoFTb2-XhzQ9d!m@<0Lqy0SBBaW~(73cQrNLk@z#ts6 z4bZjN);)W_wlXp@t;+IwtNn*toeE=NMM6lD5K;vz>{f)KN4)ALS(efAT?-kJ=r%im zzdyA459>;^#%J#?d$K$wFgR#+cc1@W^>_|u`7(7;KxvxCvr+9x7vg5Og#Y+^=7*D#Yj{GW2GpdJgh5l?g*lfC-E z)`^IrukZBxf3yVvfQE(!w*~Vh5GxS`VI}}@&O5-UU4-&65qWm+`}X&j*RGLLQ&X|! zgRPnwF_)a|`1yz}fSo8To_%Qbs_OaE3#P#0gbkZEYY{zC(dqZM{V#xmS+iz~#9Alh z<+v9uEW^0_GV$(v?`wu;EINJsm!E6{7-PUlr?Jtc(Y+~!Gar{E;lRZFhu!m@n1j?b zFSa&r*CK}gRF~i1K6>ts7mbaC$QW|~Pyon@QBBS>Cp&&M4YTsxg)7>TwxbB%97J_h zrQ4;bpCm2@;INPy*mcN-=2^0l=4&GtKKAS0@O}6OG1d&UK#p5`acTbVm)6d{0g(NpKV@ zCDn%jL;)B8A^>7U!~q*!lmOmQ8M!s4-%q#vk!=xt)0yJA1oX7d;dQhGE~ndEfW_zBe=QpNFc) zsjshZ5a^7VhXw`)y8a1Z|GwQ@Qw{kW#zr;5aIsNx9_HWgh)d zba(e~=gw`OJ$sSJAeYNgEEbt}6l-%!e68j%B8^d>RMJK*0zhwXFI`=ozb#@uznbGG zj-rhu{{IC)M9|uxoUlA&V`C)wb#!!uNoheueh(1*_Ou`>bS{-j%K`^$G@fT9u_xmU z8Up8_B>~3A#}k4IrBcYi(Ata3S*1~2oeaB(8l1@Qv;uYS;k;=G`WkS z(rHco0NRsUJ+#&oi$z3)OeTYf;5ZISDMW<9p}S}!Xk$p%&p;xQ2on<%HL1>>KSM%G z;pv*B?w=W00IfA5LVJ5V*=*JaMcBE07XY(!A9(y^nDyUoqK&EV9QYEM2ta6eT^HB& z6P$iG&GXTxw9a3pacK%KEV%w7K-CC{p<1ny&1P#I%QD#MR^Jh z2=y?KP@+{!Q=B>5zx;4nhZhg8)AD_omE{RM1xi?UFyjCLw{+NYhBfam(-hpG2#6m^ zQ2seUp%FkK_B%3Mo32S&kTkGbL{z}QPg;R8{wgMRq4=v(5}Lx%3@iYZ6p#T{0&BGq zy|Ab$6k7i3{askph_DD0EQ`<48kjeq=)ZPv@{sGQ#=imZw0wX4k&}Tu_`;I5GY91D zbghGDYm~84y7t?R=v<3$Wtj)Q0%f2Qy|J9wG&X>W*ix~#JlJn+|1a4!*egE)FO_yf T+84v~00000NkvXXu0mjfWif{q diff --git a/images/stock/edit-redo-ltr.png b/images/stock/edit-redo-ltr.png deleted file mode 100644 index 3da43f0c0464c1c4d60dceda7b0136dec7b538d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcmV+}1kwA6P)vjT%5$Us}{W#pG6|1|K; zI!MVGbblUszOHKbn}^z8iriYgh`TFSun?qB)H%o?K#;i+FHYzmH- z1z_NCeNCK3{X6iNG!U3*j6I2liUTl(1+6s}oiHL^HQ%r_kW$z76B{y zU>T-x&=A{)vFx32*h@|*rC$e$XS7i752bI2-@If-ghto--j(czg_cs+Azz-(PRc5) z9O7aFcyhK0`}q}B7^VwXa1gBy*51L6{FRz zDccEL9Ci1-%Vr~#KN5pC+W4vl;*uNfgEEBK)eUnvyg3-E^k z#mu@~00A%)37CZftcZdoU6{-uBCuf~^nFOjfvlQ^@&E-uZ#3u)Q*>Xe0)S`*DAx#~ o6v#BerU~{uX#AHXE|sEx08&85+=67o`v3p{07*qoM6N<$f)i!p{Qv*} diff --git a/images/stock/edit-redo-rtl.png b/images/stock/edit-redo-rtl.png deleted file mode 100644 index f2c1a50a1ad33546bed740f4b37e5b0413898035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1085 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 FV1k#U=I;Oi diff --git a/images/stock/folder.png b/images/stock/folder.png deleted file mode 100644 index 28b68f338807fa590d8edea923ffa165ffd1b24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`q;P)A#k-MzbfCl`%ir{szh3RPUe(x|0`Ah{U4+(+)R=kCtVjD>{cZZA163N}8~z`pZ)cHW(t zh5vLwY!7ZvUA^c?_f@QQwzbIh+>I!VFFm;T{B5@acYEM@>BTFTC$qythZ9Am^4g&n zFP}XHCJro!B6WOdFw5HaC5(x83LKBI(UXLc%5@vwBmnCO;h>aiD$qJYN|#hB?cBO^ z&F&W_gjB9{=H~A%&b1MM5CRpM#Kh`mfg6)k2q_ZJny}W(Kc1cj_7;SZPRuK;FH=}w z-ai~TF>wKFO;cuzKvJu3@%iH?ViiHBH*VqmyAOCNkExmK6{MV>pIOYi%_V}BMe1)l4X^7;ULX!i}mh@PH) zR2*WAYM0STf#0a(NV(ot5Jdr*bcRN-(R3bu7a^cls{-O{LST$RN{Q>bs5royeYgFd z)M{n4HeV8gTD`*HK$ci5v_43Ces!T#Ei0qrm4u+Tx1U@tht?rlM+XvsL#14bjF77d zL0@k_IdU;w}vODdHn)*;p=uZ&Je>0yjzv$~mDEqtr& z7K{iX;yCtQ*U8{{ee`5TyA}xHV6;Z-*n9JOsj*u?V=H*_aAEeQl%l))p#@`X==(n& w6^q3PcK&Dszz87!Bz(6Ar~vi9l=lz$35vb+aio=WC;$Ke07*qoM6N<$f_pYJW&i*H diff --git a/images/stock/format-indent-less-ltr.png b/images/stock/format-indent-less-ltr.png deleted file mode 100644 index 36d2314346edbfd57285cb3b5955e6353c6c4227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 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 diff --git a/images/stock/format-justify-center.png b/images/stock/format-justify-center.png deleted file mode 100644 index 35579d5538e805a24a6141cd81bd32ac158d9f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 490 zcmVK~zYI#g;!$!ax|tpQBL1U}C$qwY1$`9UKfF$k~`UuxVl> zAq*~l83q>;BRIH2t%Zda5>pz6_H{5NB-(3fRi5OM-oNK}_w*f(5fK33_U`7mUa#K^ zf^fzdV<;dZq9}?U*X#B9<;B%&G6*6yrik|bjl z21O3PktE3wYho+uS2iC)rBEzCY1^yHTj;zwaGdwlc|}!VStb|81?Wv3dQ;~bWT}$9 zq?}T3U{7qg?lhMPFRE04VHz+@BNu?D{Y8|BS4p~llvxCsfU=dezldhj8OGyDE)&Z# zp{UAk07X?&H|?VRR*~yYVNdMTdCN+VCKo`{RA`#YHOSJRNA!PyIEv}FOt-x@{~%Ze z1ApP4%932l++X+zR>9yKVE8<06Fpov8jX`OuZl1XpGL!%b~472XA5KO0Kg#tq44p) g6aiQg(FXv00>T!*r@dj|HUIzs07*qoM6N<$f-peHEdT%j diff --git a/images/stock/format-justify-fill.png b/images/stock/format-justify-fill.png deleted file mode 100644 index eaf9a460be49a3ffd571ace509f2d7d866a0ae9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4{~57O()A%Uhltq^`PS~cFXPu7knLcrts^Kix?oQa&^gn?#edIQ7OUM=bVMRqgHbS0#C3b3 zgxvgjb8Js}3JA6>K6s;Wn#l3OrOzz9rTW;CS4K~Nm*xCcvW?UJ!zmfNg9bh;c(y}D&O!K%K(h^nXVH%Xbp&~ZHuKtwj zA>F>b?ZIanqGj$p+R3vodG;coZJMW^yblU_qMucME5mGU65Ic0`oC9vby7sp=bUlk(iC~)WOGX7f2<0&@}N!(`K n!0n(}`^R62A>ZW-AA|e{-~H7$m&?ik1DnCq)z4*}Q$iB}pT@L$ diff --git a/images/stock/format-justify-left.png b/images/stock/format-justify-left.png deleted file mode 100644 index 07db84109726423f4bc8398adb12ebf659040f68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmV!#uiqVn++yg?m-x0Q zN?5v1mdURriW2w|-wwYE>k3!M6w5YkvWiiI%r_IJ`5puR(L8GAGbon@oSwB( zLE^N(h%9RgV`3x%R855}*M4sx%eB}a(`tVa#oa|aIYs~GF8Vuzzz=9w&`s8Q51gel zv=??u5~W;ldtt*_I>R3Z`e@uCdc3JrDkphf6|U<(kM);M*v7(V3uEj6z##xG^Yp*v f1Nb1KPXPD=+xoxMb_q)P00000NkvXXu0mjf#V*O$ diff --git a/images/stock/format-justify-right.png b/images/stock/format-justify-right.png deleted file mode 100644 index 9bbd47ca05ffa8e344c6cc856bed91a241a330c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmV)_PdVuwntNh(MhIwY@yBm|p&kf`;63(0+7&bc}F5-uYm0Knzd z#ZD@fy5>0Uh%v?x0wN;Ywr^*%+41Sg*`qrNB0{ZRZRom2j^jicx~@^JUTwI#ao0VW zNR|ab#MCmwEZ##9L?jc*vilzM9=KSjSc33t#g{d@44wxV4qq15GuaFZg?wObEdx0( zL(a?Vw9XM*-4cz3U$80`KcOOu5{sYBMf9Ccrwi>(3#{$!?}F#~Xa=gPKvk7>+dVcL z(P;FFey_h$B$vxBJP=C_BqA-DMiMtB2F$71oHJf9KA`wS`0e16|a(%P1+_+ODkR* zg!m6wfW(GXHb|&!QdRAO1tR}Po49ssCw+t@M2%=l(gsB_5+YrIN!`>=JtYnK+HChYPHJr%pC1jEdI`FvA7LCXq0BV&WFA>jLod zfdd@u?vCTH<_cJ$iYVU5ZWKsFWRb~UkM{=$j&o{gApXB`^EQrCZ(Nl$liNW-qrj2W zUl;GQ_V8i6e{%2yr-x3)|BmA@dE-{%jO<2%h+vFiJd=(0UfjQ*cl-M2Idq7F-LJ;$ zW0_nFxNK99Xw#@IjToLhsW3G?8}FslX}`|tgO=0^BP7VAlarJ3B(B3 z@)L1!0sbzPxO`=tPBxag%JAW@35*~?a#kj55D_4ZXL23EI$2@zCbgQ=oL|o(XiOYo z;oc&DuC2wZAAk4(ccyPMKQqPr>`%wrV01(Jt%acl_VjmhD zhzl6?{pq1oiI`lz0PO=YBDrvJL{(Kw>woEbxuoTdN4imYtkunmKCNx4Q?KckyQQAz zX%GbJd7f^$Tk6zn`n0yG)y;}-R32-2kIope00=SDHjom-!h_|dzBgWfYuAO{$(Db+53mUAvjKj&bN8I@1?R7fU4B#A z+u%7(Rn_TQOw#}W002ovPDHLkV1ikqy7vG8 diff --git a/images/stock/format-text-italic.png b/images/stock/format-text-italic.png deleted file mode 100644 index 8842b5aa7a3af574e4fee700c4c23b7f5552d292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)*^MsjphlMZYAQQY}SGKM-5|Kr|NHM)UGshzco;)z{J8<}A@WuvNrI~82t+)%V`>P52gieZg2W^=VulSS zsAwIuae{d7GX)OVYp^y)lEchxRQ(KcGsyi@DpPlP>+Rj_AO856v#L4BCIxADL{Sk) zRgm6=^ZLXWr>M=>xKk=&j3EdDuoh#pyIEL)XoCv%o~LW);cpi%a{JB%LxWpM;)Hwm z?&r=mE6D9cwN4^AV7IPTtDHRbC9iKE;}1EAZ`8A;yZc4Tl}bH9j4`dVD9w9U4=$df!o}Y& zas9>^U0rJ!{_p^49n3wNI?RI|!&slc@fr{e3=qdb_M<>ZMX>w9`!L-G~-$E7R0|G|Dr zlNGjZ*@9Txn!t6OtVPVsJmA~YqYMphqp!EuH$P8cEo)zX34n>o$;>(1QUSh2xkH~E zD`J87_P&$5cxw&D7&<#vvAnH~iBh@lVDoDdiijRQa;RAd2pkzXm{n)J=?T_)B?3SF zcm`vP>!Mj7OhXE#2>|ez%R*p@C^!EZ|7*i5>w0+} zWBm5t0JngpA;67mV;?2489DpInI36Qga0_JwKhqT@vE1w9>NE9DbNnA1YQ6F7WeQQ tU>=wQ9ty75mH^8r-Z+&r_L&l6!NvXj~ ziUK3UD6t3MDtN+TT44XT>hRYiVzV5K}0}6 zd{QEiBj=ZaPVgo2Uc_;Xs%8j8Jb1#?PzVo>2loWAjcLR* z4KAo?3fib3KKgnF39!$>xeQ4LGqX_j8e}x^d!HTaXZwzq`Q+1Mnf%ixKMw+|MzUz$L4Ns@{4Q(V1vo!z^3GCTV#<7X$92YPLwo~W>9 z&3!!8-OW9#S2H*?ocUj~S6NO5QX>jbQU1K~7vG*5W6S1EcT`5hGUdHO#75bGSyS**4Hat6NdllzdQJb7`NOP8=!<77VaTlyeuSC)Yi2|3lmfnf`7H z-~y000B6sPzZFMz|MC9MAC!e{@E^rF=i)e?9y>L*4`0|ka5r!-a2F7;vWMRSRp2*Z oMo2no6;SYGdIt#RfjOZ14^jO&<}28}1ONa407*qoM6N<$f^}lQx&QzG diff --git a/images/stock/format-text-underline.png b/images/stock/format-text-underline.png deleted file mode 100644 index be0906d8a39389986dc6fc387519b7d2c7499442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmV;)12+7LP)}C5@L$@=%p^m`sx(zGjWLN7TvRLC)U;TF?J)1% z>*C$%yqPxBNc6ykcOU1R?|kRn`(1I)@qbzXaNxlHUQGofVLcoGWQ{ppkP4=3J$!lZ z-q%kC0GbL$o*3G(tv9!Itpx+f%>)}9eZYw{ZK1CRYhzNopA|N21 zlnBHG9gWU995`^!;cx^dpr^Z!VsUH$e2aV(Q52!7EdU}ud5n~3ginr7?g1hjk<6({ zZYtVbnp_4o%EzCM^4#t{eE88PsPX@kem=G(XUis;FtLm(B1*AT!CFhPQ~?BY4PVt& z0jLjd0?zy}$Jw)sy!7JpES*2k^z=*%gQWk;0Bx;F29?Sc?z;01c0K(RH*MTVsa#p1 zm<|A<&Hl@kV8inAGRLQ;csxHy5TtnQ(d|rq^BsR(yom8E8vdPUAg#kvHK-^Pl`8dm z$WVR|qsmY|PZULrPgGm{8u1+%2$E=1Z|0Uwn;0vVTl^Z| z*JU6gR|4ke7dZXPuk`mnz|ztM7SEmI_dgct>&bEE%x}!j%_Wk{RSbgUrg5=Ud{v^1 zj+Fp7c<3+(4;`l6juuMvbmy>u3Rvv*0Yn8A;nJnQnf&4y5A{FD+i$&zG4X{nY7iB6 zzp#huv9EaT)mO-5GFTPFwrZtb6M%RYz+zAnn2QKLDr$mx0%x-q4`5>#5;fH?Qn7~cZ4yjF=7E{ zPT+7S;M@rumI)Z~06>)keTA6CUOuBdZZSzCe>3QA}|XRv$x5v*MJA(L2>0ninYS|R}8 zaG-63VP^z6#{&_8h@g@PAOa(v8s8TH07L*W!l=6wLvioSzbrp%$ok>8k3AnM ztx({_W=j$wwh@ScvFtAFD%^#om4#3l@upvvv)#0Mwy8fQKWRku=iXVEX;{Nh$P{5n zA+{3U&;)Mw?#0P73sIU8ZNQTs48LKF znYI?`|KI-00GRd5@&#baz%j;5AKZV0d+vD8$T&98${CmK~zYIwUt|FTvZf?zje->%uHq`Gto>`idL;4DivSa2SvmS zf}-{U1x0#w?z<|1?T6BTKKsZk#T&A>b8&HuQ2Eq!gjSlG zj`(T%EaxZA1j)S0uI8la6UDK~Z76JJDi~u{{l@srNy0#(0u9>Xu4^7VhLhNTj=(mXz8Tv%yJI@nS(k{-9^IgSP^I=g9N~qO7d>t zIEF%Fepx29C9y&-f^Aun*GYfNf#h<(5nNl$Lq|&LLq+Eci3bc~eZxj-dk0#_q=;vWaRjTGjYt;Q~KSo$!oUPY#v+V{pYL zZ>>1@r;}YrUwfjG$)vjYOJ5*}7YO17JT=EcFvBHxl8f^{qXJFnYr;TtQ)VN!N%Q^0 zs2_`YW~dwvHq2n4tiSd`ciaBYc6#&vG+DdnA32B!kpA_)h*vYw>-{D5;gx(1 zr)Z!Qd>X21>Aj<`dP*y@cCkK^BGgQX2y~~`u`YWD-;NJ^wOI8Hm4mk%ajiP0{iX1e zYEXUY{o&oNi7c{Ckw_FZ6OilZ;pW^uoH+l5@9X&wj+Fd2R^w^92ZJU5pzBt59~ybn zbK(rP<&bu|xFxrVZ_W+-^NTZsgC)JI8Ar=S>o0rn&M(gH{rK2^H%BiUGWT-o+-NX8 zH+ei+2%a-E|8tvuIG5MfN_yY5h2EEY^1aU3?`Katx!}RWJB(_DYg+(d`@z&Zi1mP* v@b4Rb-neanj4^9EkA6gEE&Xe9a5eQeGYza`8yzKD00000NkvXXu0mjftm?ws diff --git a/images/stock/go-first-ltr.png b/images/stock/go-first-ltr.png deleted file mode 100644 index e44f9b612b09bef8004652d93a13326c41f432b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1028 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 U^^^vyM*si-07*qoM6N<$g85VEm;e9( diff --git a/images/stock/go-jump-ltr.png b/images/stock/go-jump-ltr.png deleted file mode 100644 index 9b639939f8282a462ca1c38f6e9ca841146f36c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmV;;1Ty=HP)>%f9uC;NBHAH&rnl3|eF^U)@svqd>*ZXd~FVhuy)pjc>!f#sh;IW;-Ie^0-$jpQxd#$FK zJ+l|A$mH9*uv2aLZjox~62A`*R$OOn$P4Nl9(qoX-If4wZQGpi{jhh(qHxkSjI;T< zE3L!+fqOH+0#T{ppVT zv-!?Bmc=k=4#clBf~L-t;)!Nad6c1Mxk1jy8;G6Vr>%XiAQ z{$0(x2ev-2c|nV``sXptb`T3B0jjz2gRX)oR5U`%tc6ywFx)dZAbq|4dY>5v(UvVQ zy-Y`PK1z&#iX%cTD$ zn&+G2U+CwT&XAc>p;Gl2ANR0r3)5^2f-ns6{eV1SONH?BOpy z9Au-&Ek=b@ZOeA5j`!p`6^`^QQKxgA9ZlJ`CaYGxg6F%`LmyE#rkNs{Y^PRof>NPS z+5dgi^UeSlfMD8T2cWffYBg{5&^zI&AxJ&DCVI4g&DfsGWct45w&qki)q-i8gnmfq z*0?hIM{RPV`qQ3I*!tBGCIABnZ>GQkmLGpBJQ+7a5@-hUJ6>dM_uV`)qlJ4DmbBG; zef9EH&i(Q$N8fmlL%`M89l)EGV9G>9Xv`}cNCR0Q7sm`>0UD?Q6`&M*8E}E{rYXA4 zA|L>&@!F385^)-c&ucMg4e*G&@|Fs&Q$ei6pph~ob`>j#fH3xY{H?Xt`nCkq5KX0R rYCQ!I#ZeQZ|0e~vAo`c-X~6ylaqipT?GGS_00000NkvXXu0mjf1M@sw diff --git a/images/stock/go-jump-rtl.png b/images/stock/go-jump-rtl.png deleted file mode 100644 index 80068face1070a9b5e81c833ffdb1974b5e99c5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1226 zcmV;*1U37KP)3kK~zYI-IZI2RaF?re{0{*%$zyfnR7;mY0L`}irG-ug~=?2 zh(w8qBBFtMsE0xjgrXaP4^7YEgLDz~MKH9Rbismb3{w#WDzVSJYg6{ccNv! zVK5|`pCm~>?|zQ$Fx|Knuh|QLk^a7D{8}w_waEv!sn$r;W;ff`)4t%I#$3J=uOUwq zl&O@57&>)mVzM}ROp`p_-7ABs_&lXlzlbdF?~8_K1bn|m`Ho?n$aO6DI~LvP`q>I7 zyS_=~0w82Kf9hyFbo{$YBvIEJzglA3=7A*9d99`6Mu5v6I0o-$^0(*w_FG-YI0+Jf z%7EDh#;kfZ`aE;yc3Opn4>XR2>a)g7iZf0^~ z05=zsBne0i5`r$(H!1-TF;pDqt*;L7{FAS%)}B$^XK}W2ur8=UL_k0b zgz*GTW&x#?wg8mDeA{&x85zZOX5o1*mSxi1oM0IB&Wn?d(6%+cJgq~8Vb&0n(a1B<$%^`NkO8CLIDv&i3t5$RgdE}eCl^DY`QdZoXJW| z5Q1&nSXRA;I8Lb5YIv@q?9Ah%pNC~d_oJ%CZ)5kKkHcyhq!+7hssbZSf*+KKpp;Vk zwz8wSt$nqd^Sp9#kRVKmB1m-Fat7G8K{nTc8518l{rl-He|YWp-`&%^|M1>w5LUZ@ zi`QI(vZ}WTYQtIz58b7X`E9dvO@*uzR7MDERg$=dGHfg>gPX|{PE_O4pTog7`}Kog zV|v-V^JOBsQ76eQH+(A6FafuB6?30i&BmOcxz8{787t#rIW|cxCJsYNBc|*`SJ^TWc?pvzdYwpn*6AP30LYzYcH}1g0O|)VEv{ o{G0f7fN2X?VAIBb5xsi+4QERI_;pmY?*IS*07*qoM6N<$f)Us{2LJ#7 diff --git a/images/stock/go-last-ltr.png b/images/stock/go-last-ltr.png deleted file mode 100644 index 3ba5c4ba75525224e0d9a7eeac3235c753ea637e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1061 zcmV+=1ls$FP)PZjzvbToM3xG=EB-}m?e3^7 z&$QA!ax6S(jM;B3E`rqa+@W{->Q7|?^o;loAsk_h>59toR0~bLcUxaj3fEFsa~%KR zXp-7A%+w-)J=s*JTE18x!P1_U?QmXb(#x-4(w-%Q~-TBzR0Xykb*ZY9&fj>uVb`ucrudC7#)F zICy<*-(b&(ACC6NN3ID#aAeokr#o(6b1yErmO|HYiIXbzbe5vm$)4>4;n3I%hk8c* z!f1bds3jmZX~+8FCZ^*Fq^%(YAOr%jFb9DE4JihIIK524>7;+#i{Y`;0|$EE3W}{O z0H$ga%%}^5UI#*mCZKr%1VRXeBUnfgLJ)JALavj?w>}>p|M=Bsr!P&e`aV4Xr8Vbg z&f$9nN^R>1aveCrU4&c>y#f-<#=qk@9y{*q4c|UFh)E2IHl%5KH6YOmGFB*|sn+Lk zgiAgb;JZaUw+&Z#xQacTFd=fCtlo8D7CBti>>`U^>yKn>mOX!-zCH5E^6jqPDTg^ zZYtc$dVe#Yj-PDIRHsg*sqFiRXwcEr)n;&&l zoN#k#6KnIg@yT~leZDbw!dlxOm8I<(&XcGF*-#{USp`v9zScFIA55*urPj0pT+%A> zZz*o!I`2k4`|Q;AP-wYi<+U0QaotMhz}+Bq?DpX5vrml zQZb1lR>X(aZn2;bjUNcMZ$bMYzNm<1SNbABs^}sWg@E{hr7fj`)mCloht(MEwrP{> z?%c2A!+s>8*=7}bVc_07=lp;7oO3xdo``TYhyQ;a2S!sjw_?`@@W}4yZDZ_K1mE+p zK@jZvXj5s&6~xzjo;L=pToN!ano9VdzvamXxA{@Blc~~Vu;+{2!@#0|fzec75CjDg z*HUhMAn-ij3lkZBn*E$ixB?Lpiy05*QiGYO>*J^UUrDth4z(1uG6r+u;~imF{)G*> zbSBx|s#|MC9?XSLWumV9@P@b2=~RT4O3Q#HBN)nu&tB8sz3Z9&*U~}4=e#~mhkqT; zNjQ`b%gy{e-qS>$#}ponuxN5d@K%ARw-`rYc&UR`*KgINiw`fO$1=&SA90CMrd^>~{q4`A-<9Li?YH&b6P{FuxKNp>3N*x<15!ad zN+}Sj0z|4Qs+1HeW9v1!f1-G5&o@W*_O0vfOIzjh_v}f;!L8R1R7I=7Hz17*Aj0v< z?-69S5rNT$xU4YB08q%rW?(e+aPiV){_7tLkF8tXABhe)J9P|eVEl(MSCzkfII%df z3fQ@z$d$52Ytt|+WMcs~59U(mzdiQpwzW6j7kM2?v@#f{6tJwxH3!gzY;5NMv8_d5 zFSGn)OZ@!6XsWpX#AiEhS#@`$wXPpv$)?n3cGfwpb+{&<&_XtT)mSxr`1kSBKhtNH z(p>?bpqoJ6abhd+5gt?=R(_Udy_`!4ExXVTNJ zW4gZ0T`L_l3n4r+EjYTl9TQ>zZk7$(7C85?J~A2}Y6|R(9-9&1Yt0<5Dm&mQ%2@#h zHTfG6VUWLtfCHW7f*ck8M-9=j(9p^D>S#k!K;;FOJhb{Wks%FSdfXHl3HAH0?=bfz1yrrsj}hJnL(K&dB|re0oW%3-9Ed<57-}xu$icOz zry_%6!7G7kbGJm?cv>wi%f`piSI`t4*{%W@suzqHh)tR&en|psOn!sH6qK!8uXl6? zw))zF`r*%1)z~P-G=R-*m?lSzEQF%tAR@RFH(VJ8RHi{?Dil&7;J_gZj^wZrgCjX~ z)eB=z0kVudWnd(@q$eLbfY20xh=FqpG1E#Y1A&u;5Sy5mn;I!$rZbV$j1u>O5%Sy%vCvhDXI*zA-$#Q_wCtGg!6wOn z*(Q`oPP`v@?J3S%1w~;15;hrevv>~Z{1yNaP~a)T0<9QNyKY5(goXp9Ut?8`HBuy& zeF`9@tnclAbE3Du$3v97!ONCz2RAJgdP^`@U4&=dw<2La)^ekU|FNSfl^@R93$Ezu z;w_oOksu7si`Snz!ZBeUzp*QNB-xteEt@1P%LWq~UVOYCwrqarW*t8>lRjm@z<3`% z484pn{L;|?#)J@(sj*%VJSt~?HY4d<^TXG<*Y~Ld2Mkj gdMRaUr|4heCv*~gC1rF%E&u=k07*qoM6N<$g8HY4CjbBd diff --git a/images/stock/go-next-rtl.png b/images/stock/go-next-rtl.png deleted file mode 100644 index 23b89b761c8ae88f8fa0e71d153b62510dd5b7ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)K~zYIwUke29CZ}OKfl>Ovoo8`vTIsQMF@CN3q1(7=s_&C zELhvkMtX<`k)~-6g&+zAG2p4Rh@c+4WV4Crtspg(D*i$3O{zjQ^q|(JrGIFx**0lr zcK-Z!o`-C9-8Mjo%|ThB+LzF!wWe>qh! zV#X+$tPHCZzAf<%>T;dm&e>hx8Hqyuhj2RFfd^q$z?XY zzVC%mJ5cjDdbauOl6M9G5n+iVA|Q)CVOVTP^?@k!rb7Z~2MkQ6KIqBz4!^SfP1})w zSO}}gVm7kq8U+QR0g)x3;OHtn=AE{N;{Xb!`X^H5jk!k#3)^0{XBK{J;z*d9ZxTi$!`Ls+5x-AuvA=a=}za3P-|{D7jeQWF%ra8ikM0glLQ7a z>Y~w+Mn?gD=n~Xjq9$AjgAjGMf|Cct-Ttw9?(Zwpr+m+OX6utXt&9FI%=tGESwN!J zYiO!yC}@jC2*MClYxGl^34lhoj&`8yD71SE_(635Z?K)d&*`xo6ZeB`}m9Yb@x2i=Knwhp6)F+dTMk}>m!2@MG-UA zY5uzMTg}V`nPtaR5Mh}8#j-hj`rOo^ZI2bwl8P~N>nxF0d^7!NTZe7A5)mnJVul($ zzE|qYD)_$@E9T*(k$UH;z8!Wgyu-$>KE6Ho2~)$qS~2M^TlHTwHRQjm>$Q=eFMREy z4Z064KfsA#2M{r&2X?$z7p*B$_Ha-aVh7{x#TJ>#qk0O0fC+IL384&Zi2 pg!Tox|FwH8xw(_`t4`5c*nbvO@YCjT5t{%2002ovPDHLkV1l`lqPqY9 diff --git a/images/stock/go-previous-ltr.png b/images/stock/go-previous-ltr.png deleted file mode 100644 index 23b89b761c8ae88f8fa0e71d153b62510dd5b7ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)K~zYIwUke29CZ}OKfl>Ovoo8`vTIsQMF@CN3q1(7=s_&C zELhvkMtX<`k)~-6g&+zAG2p4Rh@c+4WV4Crtspg(D*i$3O{zjQ^q|(JrGIFx**0lr zcK-Z!o`-C9-8Mjo%|ThB+LzF!wWe>qh! zV#X+$tPHCZzAf<%>T;dm&e>hx8Hqyuhj2RFfd^q$z?XY zzVC%mJ5cjDdbauOl6M9G5n+iVA|Q)CVOVTP^?@k!rb7Z~2MkQ6KIqBz4!^SfP1})w zSO}}gVm7kq8U+QR0g)x3;OHtn=AE{N;{Xb!`X^H5jk!k#3)^0{XBK{J;z*d9ZxTi$!`Ls+5x-AuvA=a=}za3P-|{D7jeQWF%ra8ikM0glLQ7a z>Y~w+Mn?gD=n~Xjq9$AjgAjGMf|Cct-Ttw9?(Zwpr+m+OX6utXt&9FI%=tGESwN!J zYiO!yC}@jC2*MClYxGl^34lhoj&`8yD71SE_(635Z?K)d&*`xo6ZeB`}m9Yb@x2i=Knwhp6)F+dTMk}>m!2@MG-UA zY5uzMTg}V`nPtaR5Mh}8#j-hj`rOo^ZI2bwl8P~N>nxF0d^7!NTZe7A5)mnJVul($ zzE|qYD)_$@E9T*(k$UH;z8!Wgyu-$>KE6Ho2~)$qS~2M^TlHTwHRQjm>$Q=eFMREy z4Z064KfsA#2M{r&2X?$z7p*B$_Ha-aVh7{x#TJ>#qk0O0fC+IL384&Zi2 pg!Tox|FwH8xw(_`t4`5c*nbvO@YCjT5t{%2002ovPDHLkV1l`lqPqY9 diff --git a/images/stock/go-previous-rtl.png b/images/stock/go-previous-rtl.png deleted file mode 100644 index 727ff37f22736a8c4240cb4b788a28928cc6d395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmV;519kj~P)?=R(_Udy_`!4ExXVTNJ zW4gZ0T`L_l3n4r+EjYTl9TQ>zZk7$(7C85?J~A2}Y6|R(9-9&1Yt0<5Dm&mQ%2@#h zHTfG6VUWLtfCHW7f*ck8M-9=j(9p^D>S#k!K;;FOJhb{Wks%FSdfXHl3HAH0?=bfz1yrrsj}hJnL(K&dB|re0oW%3-9Ed<57-}xu$icOz zry_%6!7G7kbGJm?cv>wi%f`piSI`t4*{%W@suzqHh)tR&en|psOn!sH6qK!8uXl6? zw))zF`r*%1)z~P-G=R-*m?lSzEQF%tAR@RFH(VJ8RHi{?Dil&7;J_gZj^wZrgCjX~ z)eB=z0kVudWnd(@q$eLbfY20xh=FqpG1E#Y1A&u;5Sy5mn;I!$rZbV$j1u>O5%Sy%vCvhDXI*zA-$#Q_wCtGg!6wOn z*(Q`oPP`v@?J3S%1w~;15;hrevv>~Z{1yNaP~a)T0<9QNyKY5(goXp9Ut?8`HBuy& zeF`9@tnclAbE3Du$3v97!ONCz2RAJgdP^`@U4&=dw<2La)^ekU|FNSfl^@R93$Ezu z;w_oOksu7si`Snz!ZBeUzp*QNB-xteEt@1P%LWq~UVOYCwrqarW*t8>lRjm@z<3`% z484pn{L;|?#)J@(sj*%VJSt~?HY4d<^TXG<*Y~Ld2Mkj gdMRaUr|4heCv*~gC1rF%E&u=k07*qoM6N<$g8HY4CjbBd diff --git a/images/stock/go-top.png b/images/stock/go-top.png deleted file mode 100644 index 9b98fd26f74fdb879cf376d01b0414dd9bbda781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 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 diff --git a/images/stock/gtk-caps-lock-warning.png b/images/stock/gtk-caps-lock-warning.png deleted file mode 100644 index ca76d509bab52e9e58d243f28a3bc01527ef3167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmV-u0hj)XP)A4oC$eiVp;^MJ$;BB@S7LjaVER4OfI0z{)BnByUj@)Wd?Cg_!b$ z2v_3@sz4@EDi0Dt04#_m0PzPZ8xAtB5yW5|@~sMh00RK3OhUKr0VX5>00001BCpEP)ia|L46oZ#vWJ2NI^lO0``yXse1PO=+Tu zq+Sq=QPiRf}+FsC&djfy1$Hdocw z26BUsc2sUv*A<8KZ{L3eUcBr$GnPyNz=f>eqDMqT1OTc=;l_rBK>mt6y`!@e@pv3Q zT@8Tfgx7!39cU!>9-b{TriCo+6bt@qPFw7~^1^gE0<=$bnD0_)i@ehEbsh zwAiVZlYtK(`w@;rkV^hSDr12Q!AQzc5Ds;>zZ_gNAe;Q;@s|9u(o!lfE62p-ByQcg z3n6R}DAC>Vs&uB3j9IehrLJ7uE|gkZ$6Dd3ISD^ z_}S5B@{HLK4o9BOH-TAqkdy1bzH8snRYJ|hyMa+iE&y&~r0YhCXUzQzNe;}igTsf7 z=5-r3)#r!GwB9cha5#s$yFKzwKt%(75K zqjI9F&CF!X1NZOTf9T#83kMJpXj+tpw3*bDao)3P6*JdT`t+((IvL=Y8y+l`_rS&tmPZQ&UqGfC2yv00$rd2qJRk z`VzBC&H{XvnHubRaH-H{=@)(P`!4nO4}1lX2fz=&0+4YP02~0))fpw*qml)<>Ia~^ zXVpz4-0Hn50L<9|Nh#qOlj4D8&*Z7nc41kSa-L_&A3vH0VqKoB-Lt*QWa||Y9VRkCh0b2GM(wY zKC}sA5*4cb;PA~IzB%VR-{syRQcA35u+<_yfAQ>q5Tc*1mVgkVzkO#rTQvbGCF7iZ z{}J82cV|F|#s1RzyE-sTod~hm|5N*}a^v6Rz%X?mfFr7^?xU3SDvF{>DH&(HT(e>U z!_*_3^WktfylHdmCVxvyD>9i(Ro#jN3{zjPD9R(lFxG9|5}}&b07@y+=@}$vlix1D z7(0Dn{{eq=`wq&viueDe;kpj8*%df2OnozeUP|dM#@KElL@W>pXkDFM{LS0fNTrex zLIRKwLZB(s{B;4t)cpYZIOl(H&VP)>qKHM~{$MajHZ*KReSJNqr{5xxc!ly+LjWPf zmmL_U-lHhWaY|`lC=`;tJw5fB)_|gIA(P4A+4Bjw&KLrLwP5+ckdovEZSuU zgb=K$TT?B-7<<*!6clZ3+x(&CrTKBjk(y0m@@3+~yXkj?QhM8U-TMG00Zb~2@@Foa z`y~=-^UclWN)y6{jg8d;zyJDMox(VLJ{6W_VPfLh;=|DgMccNg9mlyKrTk~`+EBh? zlqa4%eQLC{wDMRqP7786&cXsTtpRiM*$M|-MKYPh`1n{pF_j>MkU__Bt_%&{7_Dk& zIfe#rh1*bkdO*gzVixt|Fg0J03gqt8*sb2JIm*QVCm{Eq1M_9FQM?{5+osHp;)xlS|69l z6%QByUIT0yrMhxMQp!^=p1=6N7V+mCl(Kg;pLAX0Sys;WOM6hc;nI_9?gIdP1c8(~ USPH)vssI2007*qoM6N<$g3CI&H~;_u diff --git a/images/stock/gtk-convert.png b/images/stock/gtk-convert.png deleted file mode 100644 index da8194fa8da8a49231f00e131910364105d06db4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1413 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 diff --git a/images/stock/gtk-dnd.png b/images/stock/gtk-dnd.png deleted file mode 100644 index c58e5a6f4162af0e9e6e86d6da6c17fc313e4368..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 zcmV-L1-kl)P)}(9?q+5N zGvnR&56vw6{u@h{92C-d$>6tP7<~QDYkc@f?(cUF9UO4-2ffK*;P8>0{>JNXD!(q| zQ7VolO~C~<3kCPZ6KHN0IClK#Ez>l&)nY<83nEf1MgS55f(U{LBnU(T zf&@qqK&V-flz?fNFinYldtXT?igG$PIWbTdfO|lYbukh)5K#q02mvC08d#Q)OeSII z26WB9-aWNJQ~@BelK)>Is-~f(wFPZ$Z7|IeG)=?U*vpBgrY2tyRcaR`z{I#Rvw)?` zOF_(eBC;-mj?oO58JemB3?vc>Ff*2ymq8%B@cfIdpM3i9>D=UmM-x>5ND#n4$4DpI zM>1}20fwbXOO$Z>ZXX9Tm>8O&!x45enS_)Qg+c+5NQ_2DM_Z@AoIaJCoERS8f8bIu z17O@-x`E|Fp&5sy7`~pv6D)r(sRKrAOZonSy;l2 z#lIS2AdyU>E!hSTBl~bKG*$Js#wh}X#|8#*@|&;S>jsK2l};m-O4-%=52Z>*hyey6 z5{*{ux6Zc=<8_U%2#E>#`HRqXy=LVhC4}~l3{K2l$JEJdkWzY!5dyoPd;q%!(_jKD z*Ry9&pa^?{qth)914u4Yzk7MJ;hurVGHYE`c3wOPE z$Fz&GtnK$85$J;czDEGOm5hu%)rs9ZI^oes z#U0dgK|>5!E?_EKjEKr0h(QhrBAZ%gzjXm3F9>U!{}WVz3xIRy=1^QM`kwS(LQxcC zd;44jp-}kD<@x+bPj{~`BljYh8CU0SI4KPzc~2$iO)vh)0%q(prkY_->RDWmUHZ1CY-G&#buIx00000NkvXX Hu0mjfL84-` diff --git a/images/stock/gtk-edit.png b/images/stock/gtk-edit.png deleted file mode 100644 index f429e10150249ce916a67fbe9f787965ace974d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmV-m1fTnfP)VujP6GP(1gBlYPQJ}39Y`a1~w0x9SunNWEmI7Vq zZg;nx|nGsb5VDJ0yJ(8ZD{!t_nDFK8OOhoW_JiE8Q zwqw_{lT;N|mK$!33}Mxzl;)vjOf*Dt^NJY2nh@4IfC$?kPQk!WN^Vc}z_DtGSO z##Y;zMB)p$W0aBT2ull>`TVDvUjN|0KF#{HvT@cw<_Cn(aHhTLrOS4UiO<;bTEt>e z5GQ>xf{0+^JpTS*Fi3uWKFgLCW#oi!RL=U#{8aSJM(>hGi?e+H%CCoVDS&^uH!d^JVakB1vzS~nl z`G!}xcjPQQF^`+AZJg`;n_-Prd>3th1{rv9 zD?4^o9|o8P>G8}k+xB%E-> zDdA*<871=j8(CNU5X+x@4t$x+TUd~=Ka2?;{Xw-@c>|1mcOmNb=rEK z31Y;csAVDk668mELU)4L{e^)*W3=ihmVJOf9d~+}qpxDqyRs%9tz$ m@Qk@D?*9Ue`6w`|s`h^rofgh~l8iS10000w-=zK;6r`UZBc2d zQo6Hqe3;qpZp$U6dXmX}U*??u|NEbFzB8h#{GVn6?A*D%!erRZPRywWWR93>XV^cu zG3U{(Tc7Q<0ZfM7d`In_H5KK{=6YZN=^KdD9QbyBGjNj);KZEjit=UrJUoQsIEV;> zAR-_jz9xH zGRl_C8&cxDyJPEoQ93-2?T-|W04mMVN5!KJ(EC0XnOrkhEAR$loui^D~qwQaqnA- z0tJ4JMp-cb8n0HWxSFiZg$cwE>FsBD_!nB5n-CFt`v>TW^kNx{nYLj5we&>#sk*U} z-=ZTF78cA>khT+J_~XnO0>L0+3{z86eEHSa)9RAx@z$FjTu*z)K^}kV8Cu`{5ZktA z)nJx_+itm;_V(}Cxal!su_^9ey^7ARZbXFo2O0o)YgZHV=3PNa@gknv_B4v(x~|u% z>GnGw)rprT&d{EB)$22~f)ODe!0 zQAsCBAx+qOAAH2Ij2?&bW>`QLNyeWI#7$YKBUWqf>Ovs$gA>YG8MCftl8ORS=0 zSzn-q<42DUFV+R9)jE3c<%4fLlG$e6N3h}S?9A(@&zx4^&H4b}45qs>*1}Q_&-0q{ zZre8Lu8gI=8Qc(H)PzMW<`;9Qnx+6E7MnZbte4iVx45@^7Xd5K6u>ur-S2e)^9yrq zR9)?xI$8K-g4yW_G6O@zo*ClS$`T?%GM;J-u)MOgp+s8}U1ZOnp#PeGMVI7Yqqo0ce*Ok;eP zXzIyw2Bkkq_C1d&-XhWW9PaHIqMcibruG6-_1jz(iGV7x#|CJL?p zhfS$nu&y{7uA)>jjfjo$U1HmxqL7_L0xc9~e?rwKe|?gNlRHqYE!P@=C05b*{cygp zM$vI<7It>Th{n5dZqH(c+Az*41RMk@%V}ItgK-N8T0JSNn=B#`$8*p8`r8GwHNBm_ z9go*oC>SEK=MXn9eNCvNhd?xrdPRKa4#ru>cn0<-~9 zzyt1WOCSvL(I=xb`{Y~lOV_FmCzj9}>*WV|ix1yE)DGNHRa4DCRr4ZZfKmle_p~bl z*@q6$_v$+YgCPQe0G{Vn?aOa|2Uyceo!8!Is>OstE-86b9O*-s&_Y8 i9`s+u{ao%%jlTeQ4|r`oRu%RD0000Fo!6iR}@ zg&s^Vz4q=?|A9a#r38BDf8bN^IhEpD4aTJuTpBgBhf=UCx44eutfZACOWt3v2ki<+ zNp2nZ?vHtIKfIauomC>j|2f<@1s*DOU&Dq2>nYp?aG;*TUIx35MD}0zotmuhfl?I< z+g_=(xwO1&W~){At+_b>E`oqgyPY%}jW`+%cCKLSYmxRFfnO-~A@Kdm%F5JxckWmX zcyn`TV-OLtI3{kj$duyGr%$gMjm9PL$yXvjy#jooRK>vI+S*#BR;i#%CCv2nC`$wp zfn0GIB56v{ZgX&O(2n7DQK>G-7Pgme-I}VF%M4CVkR%~$wTOb?6=iYE<#m0m^j=pFH86)m3Y(-F&Fj z{c)EyY`nd&V3N~Q2t#xjq8taEFHsfyEJ7xNWEnb1kT4`VJ>}+&8|Lu%cmvpXb33fh zmP)Sbbg+OrJ45?EI?GVkfSCwn*@zuQqufr1ndxcQf%S2P8Qh)qeVmgMT)^%1aQb~5 z5fq^E{gF{FX+EcbtlMQ~VS&P{V`J+i!HA&qNmm3X-{kASG*^n02MF;7;EYD`*8|; zV_*im&2BfrT3l;!@@1O|XaRH!`99+NG{Z2-V0R3BB(fhT$}ry=|?3uUz&@QG}Z$BNGGSy2QpX@H~F(_v6FiaQHiX{vG@PybzJ- zI&cQ4EyD7r@MTr0wRb(wS+mz;zbqf*z0000J@o>_mt~a1n4JLM-A&bXuhg(QzSKELay7@c}LrS0<}Mjao^4v@|gt^P2hQ zyZ5-rmyk)OVlVu;FV63td(SynRFxZPyN6F4LwQ}nf=X&G0M6ReawEV}xe|%U(yPxN zupPN9UWFt;Q21vt;rP4f)cp_0y}WE+Qq^l#xw-ZyuL1-k<@WLazZU+$aU$FjX zP8<>8hZF{&pb`|C0pdhydZn2t^|*-1rr*rO$zT%eWM~4sP*KMl;L6;%1hq;A18qaahw#@*o9+t|L?bh0_ z_VxGOHn?|ZCL7t6^_IxJ@Wy8VSSuVH=wtNh{Y=;9TY;r=<$$yH%;AH3HtoFgR+;>3 zp8L0TadPwtoB?NrjD>7u$vQ(m8_`+FA_6nDMZ6CH-Yq}=$rn5FxmS)p_E4d-kmu(= z=gBxYKUE{+gvdbTAnSz43R$~6FZSMov%=)1t8DGL2|!){@Y|<*du|>&a_E7=d?WDN z)g=lUL5x9+tb~@JiVt8!Nd$}sMNt);H8h$D)=J$0Srh`$^h)dl&KorL)D{v1#Tg|Z z3AsqfMP_xZLBT*S8*zDNj>y?b^W%HZJ$_|+_Ohh^~KK^DAKtv)D$)vp#5i25X4_QrY5ivlNt~p@r?!zx%$aHqU32a_t6H<8* z@j#NQsj5L#6%lbjCIz;r_~29bO@062Pw8#KT0k2$R)FR@KnK`V!g7xLRO_J)AZ`gt l`YtAwZ3Fae6o9b8`4=@dXE|PZi0J?T002ovPDHLkV1lE6xRL+> diff --git a/images/stock/gtk-orientation-landscape.png b/images/stock/gtk-orientation-landscape.png deleted file mode 100644 index fcf7f2a496a4f001daefc7f8e2b6e476b1738f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1097 zcmV-P1h)H$P)V>IY+-I>b7Ns}WhPDj z>;M1&6?8>dbU}4=Xm4@=N^f&zW*}C1V#BR+VQhE>n)d(z02g#cSad^jWnpw_Z*Cw| zX>DZyGC3|YE;2AMH%saoD*ylkS4l)cR7i=nmQQRHRUF4ZZ|2SHwzcd6v8|QET0N8o zE<~%P8l}6OmFO97ax)>M96Wg`xhmrZu9!C2ek z+MPc;&ja0dX1gm*4d3MD9p=5y_xJm~-^5I-ORdW5a8s<7Y>dQuv2{WZ?A+Zy$R{CSi#&N2%jpH~tj*aU&IF5tsy11@`=T%r*`jh9oUXZz5_Rx*_)ULyQ{nOP1 zG(ebU2-_~B6bJzz0<%((`aZ?v`AIH)d5LT`1Aq_$r4){16N|-&4;&3k-F$y+Vq~al zpeK&TKYX?SH7v{80`CSm6Hs9J6z?bar;K@7a9_At)4!bUoKab8|D% z=x(|A`)@DK&RuUg+}A%Nt4@vJxm=dHR4Q<8N-2`bB(J>O2SB-82B5XIl~^o>QYw7& z)(r?71sfKusiX0A;Sy53xn z&*vWtuPUF!4yUl-Lb=zXb|g@vEE_vPi9`qJfrt$o_T&UR;x54*GO zbZ37gev^}#WX}11@Auww?;TN90Ipp9Y=5jLc5}nocoPu1fQS%@L@s~u{)I~|lT;N| zC3F4SgZyGnJQ%5Zrk+t_cJzj*xI>c z=f$Z^`onetO$0t?7`ZCg&r4XA#X$c6hg0L$_U$`9n#!avwiO7HR~*%1kR%}kGVeRiC!+VDVjS!Fb268&CK{Amb8jUuQN25`aiDXEZ1<|&P0OIjDlM|DO z{I|J9gj4TKU|CjxJWQnJ8Z;IRCST&ffrBhBKL%jWo|hR+4t69D71-LMv){~+y_*dX zEG_-Tqen{|ed{O_rzRT)*DTU<4FG<;_X7*rh0sD(C3`o^PxtS&br8A+0Hu=6-27Z< zQ6s+nZXVmV1GOCls-t0HkVYMTdmuq82PS}s7@wyv*U15fhF;~^+sDW+E+PUV21ac!c(waN6-Gx!7#ez|$$^L% zs_OY|8gQbjL?RJR96!m4<0qlZBOIi$n+(7+q`E~7fJ&u;X__qwf|rmsk@xiU_$MlW zAtF-WXr^gC{NvC3k9h7~KE>002ovPDHLk FV1hWsu9g4* diff --git a/images/stock/gtk-orientation-reverse-landscape.png b/images/stock/gtk-orientation-reverse-landscape.png deleted file mode 100644 index 69ade25242809e3008b0a5425ba5ccd57144415d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1059 zcmV+;1l;?HP)V>IY+-I>b7Ns}Wgv28 zc4cyNWwtg!>Hq)$6?8>dbU}4=Xm4@=N^f&zW*}C1V#BR+VQhE>n)d(z02g#cSad^j zWnpw_Z*Cw|X>DZyGC3|YE;2AMH%saoD*ylkDM>^@R7i=nl+AAwM;M2n*_|CbsS~?Y zIYu}HQ>!1B9!N_fRSiY0N}-}~C@O{i1AIhLXqrEu68Y?<6+(O*+TQ8C0w)cLT7fwl zwRpJ%$_0pgq5C*~!pfwte_BDoK(%09AG)=m@ zGwki(7r&mnc4}g3Ob-qW4c83-0&pQ9pU?C2FF!qZ?dRriaQfsK5{U#|U0pzbe0FZ; z^u*MtKR9r9WZj?{4uYax+|=f3tywHR0idm|jdVJV);fOk)*k~CQ=?ioqzyPgM@Pq| z3;5gC+a9Mdy778VvzN|D)_;nV#G$!1@FCVYbmfxb)`Ri z_z$I0DH0x8K~#xC2vVtJ2o9i>B9Ul&COlxUk?_qo-lDU!Gi31L-hD`E*0j-#Pz6yY zQc8x;4%4%{hnAKWUfZ^f&kr5u=od!`H%7y(9um-==LySFc%B<+l1jbGsgq{_y>_cU z)eun)QrkCeNGa#@w{HRvkGBwu#fin@C>2Ag7?!1K!@{x@Qc6ryVwxs~VPY7yt6Ycx zJb(KZmbB(&v1kuzt*5T%uI&yj^cF&z^3S4e4+-EEKmq1@3R@2iQ~^f-Rt;X?@U5EE d4~-90{|7paRP$0P1;79R002ovPDHLkV1g@@&uRbw diff --git a/images/stock/gtk-orientation-reverse-portrait.png b/images/stock/gtk-orientation-reverse-portrait.png deleted file mode 100644 index c309a6d82cf1708ac2b03442c5031894170c7e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 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 diff --git a/images/stock/gtk-select-color.png b/images/stock/gtk-select-color.png deleted file mode 100644 index 0e71c35d78f3d84ef8023e01c8af5229925660dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmV<710MW|P)5vF^3Jm66T(_53YtxbByrhY#_m3L0Wj3=;d83WLKr#4S+XN8pe zQY8@}ZZs=$hp9cjk&4{m#Tf*0QG)-@KAbzmmS^52oIA9rf2B$waAjTyjzw9e0gkmO zK{0|rQF#Rz@dFEpTLVn=4-f@}rUNk1{|RLQ7(e5+sa_4`XDFK^=)Z3V?T_ssT=$3v z{O!KiLWMHVGVys;0GW z1chs?O0^^Z{)1JiZCKM6sc%?LRnuyuPhAUmG=3rkC`EEj8{xVZmbVD>C3W1>vYAkA zoW|w{;1)%*Bm#ksbS#?Ut>lM$5qg;XrIRS-@Yhf;wGH>8l(R6wFTW0P?)0DsP-%!9O$`$WMUdBLLBEbbpp*n@fs)vTJPM7cbGt}KSMdJKpX@9WG^guHZC}IvkFU7N zxm1#mfBcGIYcqp=U9@g{5qoAB`|23dvHneqAY7MZBzqFOVGA2uQp6jpN=uO_p5oS( zm_w)O{q$`fYI}<6hV=-|-5(0Ym5XQj;lxp{rjFb?MGJ}mnOVnY2g>2ZQD)5FkkUPH zLer>OmY}=v9O;Ut|3@I^*C7Evvz~)5ze6w>Lf3U{+n#&g-1nugkA));H+QS6ZPKrO z?hCD4680xB48zg&fO&cRvaz&&sR!`z-R(4%xmWcYuh@V+H+J?|f_S3YV>3EBPAC{M z0fbVDy|3@>2nemyvI?F{f3VWKa7D@WKI^Lw1w&>*IeRYjywxr4^l!^QSDiH!2Z^ra P00000NkvXXu0mjfq>#T{ diff --git a/images/stock/gtk-undelete-ltr.png b/images/stock/gtk-undelete-ltr.png deleted file mode 100644 index bccc39e7cc56aa6416c5bc0ea2a78e8eac606f74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 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 Qpa1{>07*qoM6N<$g6Y^qk^lez diff --git a/images/stock/gtk-yes.png b/images/stock/gtk-yes.png deleted file mode 100644 index e562366386ccdf43bf9e9fc8d2042c6334778c8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 zcmV+v1nc{WP)OAbtdQ?i{Qf_z#d1I3$q}5(%*ggxHBgkPrS`?}ztuc4xXc%&u_~a-*d> zb@kI#?_1rXs{EhJy=dd@D{=|Ul6AVMsayaMt7~Z@H^8sny{fnV>zq7W;knPH6eY4U zR+#v7{_KLAoILF&Cr$xSt{qS=?j}!AGT$Qb=GU^1&!x zJ&M90Pf@!4CSEcG*4pi?HaKo1ZU4iL4AcW@tbmH+p$)VK#braEHJ}H2W3WX@yo=rQ>UK ze2rFGqnT7`_9_@-d3bP#xrN!NkQ=?6nRx87S(=`i4i39p^l1_65ve*rK@8=d5sZP1nE9d}yeNX=#L(9!rSaDo&Z=XO z?@b?T1&qNu!8$=~1{4u=K=dj2R7tHOMll{d{o$Ph4Xv!z>-9^ysT?seHq4;L3C3nX z0QH)|5)cC-5NV$JehsXw9lM++dZSu7>PKM?8yIXLxKIcpA&3k??%!~c!G$Kvb3zp6 zs8t&MG|?L;=FqS1JgOv)h`k^Z0LrS`I|&>ICP!Xj=FFmenJ?OlQwup;d^xnm z(*XcS`+bhKdwy@do3^Uy+T-i`Rp)@efikfD6mS470+T@L)pvM*C^>_Rg>T4Ag-GU{6((r&>O_M8pF56A=yOKLNUfXali61NaAKo62^xM@5@aC=H3JuClKjEiPGlLp=e@Zpjx^r6>}u@t-VBV3Gk&@ zk0I)tyJuMFUI7Rlun+>3`VN7M5(+PIjHX>!#$~a0UGIY>G?O-%;>CDT?xtX6&PMJKm zdpF)K0a^SoM2}&F`ZsLf9}Gn{3Ge0*s3=01fI>+dC6g$b1W}4n+DR;WiHoDJBphe{ z#ckaj5F+!>3Izb1_=tP_KI2H$`p&vl_wMz}*askQfC7b!k|_`tdTAe5FC28He;>J~ z((;MsUMBLrZhKT5+mAn7%3qB;4g{@W6qy>&d~s1Sjb?5jY1eT6+ZVimP1)u>BntTy zYEuCi``$umhT&Sv8j$YDAQB; z!p|^2`-d7o+{I5vdzhcSB7NaLy!2HnYMX+~%0*9Bm*WF0?SpLNYk*j}5?{a+kC#=p z3W4JCxqbHZ<&#%FJ}moG8rkc;-CtF=rLJ~kU!deJN0_Gm;QfuRb@n{*jEBtlEp}5j z%nyVHUuEmqp-?>bXTKWzd`0rBgM7HUk~KgrP+M8an&a;=aQ09nIXC&5`f(%}8-ATO zAe8Y~+`zeuBC_RmY{%N$%Lz?THF=HapL~gLa;hXVGxgaUwA8KQT@=wzzM$p(BisbM z3{`$WevpeV8hvL7)-{W>x%XfuC3IG5A07*qoM6N<$ Eg1|M;^Z)<= diff --git a/images/stock/help-contents.png b/images/stock/help-contents.png deleted file mode 100644 index b00fbd8c1282499bab0abfd25a6c8df1ca2d7f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmV;x20!_UP)F}X7){JQl)k!k#w3Bh#bo>_EMh%WJkW`vDQ?)V0s_{{SiAu#MN+J)lAh573 zERS7w_ug~*A+RBt(QiF7XYT#*|NnmXod5saqeviM}fZrIePMwd!q9yljhIQ7IRZlA`%l46r0_S6cU$ffbRR<;^wWJzMI#sDrvz_ z1`>F%9q63?z-NK{+D6?oBlsPVUfZa@uyg0m)Z~<;BYDx*qN4KkMyu8O$SrWWT-3k3 zBXHMf_@{5e|BJ(i4|{i48{PtXYa8`H&Iks8l|IKGMl#Y<+sk5YbK-X3Zl7 z^58-4UB6DB->1J5oEjJ%9nXJi&PSQRnc7But~wpp2IM3rCmbz{wau}QjjLkM9yoLe zdEfw=rV$7P2n2%6ZVIt)9~?i&vO z4a?MJ@k-z8VSziL;&iTK_5LMm*BWWQh?10qR1}=2PSHIy#DjbH#QDyS3C$LBO;r^$ zo{`6YeBq)c-{Vm;`}#1iSV5%2LH^2>Bo{A>`0a0Y%$?M_kB0?Osf$--Wo3)#Xe+E< zjdVI0ZfKx=$W41%nto%6W7|9L|6}jW)@<3b#dQ4X($~kYwEWu8-fm3K$iQ4vgQcQ^ zRAAx4LayD?76WHg0E;D}Bq=G`94_4E&D<+4=6;M-wif2UI2#U7S63H$`|pQeY5v~Q zeP71L%D}pHs5LcTxVSiF1`rGe87wK`Qt|g)?;bf;_plD? z@lL#aXyub3P39HfOpID2~tMn+wJ7#yIfsVN}s zw)U>>u5SqJHaog5io$|PpI=Dvb^Ap{MPX1>RE5x^1OSReN-4e}@cVrzC?YJ7LbSWx zL*XD*RasQ%AZpUL>{0Nlsw#8Dkh>sjes&l>Ha3RS=|nZC{|yT!CMPa9dz@l+a^AVK zJaz7T%FipxfA%mzqSSXi-~5@80|(Hw5TQ^Ak7t&K<;`|AN=+#pmi_KR!d`l@{=Lkf%>G5EDbd*~9r8S3}v# zr!KqdS`XCE{EKQ5c(DDtqW-kQ>#Yoym#bMHeu(OFVS4Q~tku=b5rX98B!m#?x{g*^ z$&?nt{Nk?|jE-iwtc-5&s6J@6y!}MTbpm*4wxAH`ymjMt?ceejmQ*RmO#0XS-4slbB+oFkEEdO-*NeYiq0W z(aDd?4+j1JetG*q%2DJ4QkgwWA-jbJc{&*#JKb~89QNcVyT)DOF~`ib$T6HTXo z(%;`7X^Y~ephg|cx-uoSPX#&I(k(x*Me&`al+^8gk<0A`1&^r(1%<}+^bCV7HkPR= zKhB;WzPx{5@965#dz@W*mUd~x+3R|1c!DpAbCnHN3#(jX6z=+$KB&xGAiJv#ahlFH zgUZ&RPDkGeCyw2Yz7m(3y~t*ZEsRfyf6Qz$=SV5#RA8#h;~u^}Ix^Zm*xPky!{h#? zneocg5k|6u8g(I^-M>GgyTdE^_D~c>0n9)o5HUT?fC*3lZF&ZQDZmc|q?FpXS^on( W)$V7^fm_@F0000Wv1T zw+fJOUH1ae1wfP*0i)(On`w?oI&=F5KMs}&Z5b>0!U=EI+ZI=GoYphIXp;T%$T<~6$eJq1GKyRT;Vy1wOj{36X z^LPtobZoREF3#2kP*oBqPqk+ehBJNuJ22MT1E^?Au1x`~`8x4)HZLvJ!wtG=fB-~9 z+7q^wzITy(0{rpk`;FrFKBgj~mva|89;`Qq0{z?L1HueMM9s_#7_4o8DSBpZ)c>Cr8=fzls<$*KuE0DwPSqGc%K>EDH2BJrMVs0GhrEteTnk6$71n U&c>$oB>(^b07*qoM6N<$f+xtJQ~&?~ diff --git a/images/stock/list-add.png b/images/stock/list-add.png deleted file mode 100644 index 2f8b70d9c25283e2ba84a1ce6ec52a63d0b4253a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)4H_Z zu(8Rn2t*LkN+FOYRlwSqG_ee^@B{BT$Kp+9XIG8S=sXyPx$oV3?mhR+ok_OQ=6X_c zXfPbzoW<$I?9u+a^9KU}z}o5xY(O?-L-h9v}vQgxRDR25kNLD8)`ZvxO`ib6;U3BB&wU^u$f z=V<$Fsw-GqT>+JYgbdN3RR<0VVs3I!c(c6JA)R|u-ARKINMUF9%eaD^q44d;Z@5y5 z8>-2+oV{%v9-lPqIRV?X(w@(CCn?GtyUx(kQ~-|yH1?&N&Il2@4iFR;7y6*8GUW++ zXyf~@6G+Cwd@ob@cdtQDM5gc>!1{+z1b~TdR}U#6y?(XSVWpy=u(|bFqB?hpBLkdX z%>Hw5^}1&v)*O?94Hr+-yABP8BSehfmMiLf%-SOUJr@7~002ov JPDHLkV1m|v@+<%V diff --git a/images/stock/list-remove.png b/images/stock/list-remove.png deleted file mode 100644 index 0bd69c92c9e58d699ad9e4b72c67a62ae523ab8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4+jEadiuONUD{UIZUtov^}^VbQWk&UFm3iw`Q+B9k}B4a1OFLhcpg4^^Gz{*TfL#l(k*{0_U)U)P?T0( zT*{Zo>bZdB(t;iZ$EiMCj#FdXG+a0qUV3fy=;_zDOb0|57~Gn_pVvRpmJ-qQWaBiJ z_fKQ@+h;${D7IM7!LVZI>EF)0k$(?l+S;f%*)#8&Q&_d<<<$+>gSU7zODS);>>}kT z+H0~)=5xbWE8BZ_?YDkdkgb*Pv;RlU>?zxl*WE7#I_^_L{)@BE*R&w+1;6JyKT|*CV?Utiv>M+Ek!{s zdhz1HOEIViPg1M5dQ=Kt6f1bBkb^|@peP}=AR?>!GQ zyV=;#(!>YD`(XI~zxV#{`)0(<0GK-bRs#t5f1K(?Iq{xgFNqU5{`s+O zLEe1&ZLek~;@-XZ#cQvI0EQlU;kn1cC~9!{w^Q3HJw5VNFc_@y;m4<60V;q)qA&rv_^7I`(sr?XXy%&KB<1$e~_ zR`P;Q+}M&uD}w?v+W;6@d=Af#1xcqEx&p-W#kgbKs!^tgWr_(d;b!{&l+D-MoJEC~+K2wl0oeohHk)|nWn$qj_ zDj_F0Cv}mVbWnPaSFHvqf^&{mt5pGmW-U_Hlcp(ImXT!{I^0vg^Qsiy|98kxmL63b zi6lv~;mQwVTs+G%k|e2%TAyW6j9DZi4rB4J#Vfwk4ypA?lFE*qJ9pz3PLd=$09aaD z8a;WQ6NW<*1gr+s9f(K}0_~-9b2FyT&Z*aKvlTlt8=aC5-akp6=YZk8$2mu{*<^BZ za@3)j(M=){2m@h|uVI)6Iw8>bXYnVB8_VxtGsna=;(NNy@Wq#BMt0pURF%>ioc-Zk zN$t0R+`RthXFyAUHZTQDxhUQhL=(+Bs@^`#d@(2o*+t-2p*pI~8Wghex3DDupuj3H Z_!s4XugTBPGP3{x002ovPDHLkV1mKCxpx2n diff --git a/images/stock/media-optical.png b/images/stock/media-optical.png deleted file mode 100644 index c4358f5f8ecbc19cc834b4f9ce14c0ce6f29f96a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1372 zcmV-i1*7_jP)Cq3ivw%liO8RoRSX z+gBm!v>R}*O`e?0t!9I)reNrkp@WLbCid>yt!~`dVuPr7(*o=H?!Y^lZ8~ z{m1Xzb9rj~%=r2L`np4+$YquA!2O{`v-1c8KvfRqA43J4+Kc^;k@@+cNf?0j#xdSL&7 zn5xrrwKjbR!$$@WwX`I6?%uISbzBER@D=kCkWxYl=^Gb<`>;wT3NLcl(Z5S=Yi-*( zd}Q!YU5W-y3`7l2fAIBJ-$X*8Fmkza8WpC1F$F>jKne&c%L>HH8zb5rL(wYYi!VQa zZYg%>8F@qpxo( zQ%mahl@t-Nt#@;8&~|J%jt!4{K5WN^0HEsusEPtjRS^zHpsH#e&*L6k&xLK<*wnMh z01?}O%0)ADy}zrolR8cbLWlR!}UOc=Yrkmhu_o z3wh)VIZ#Rw4o2#DilQM92w--0wg^e5SBe~Pul;%NE`KsVhmQ7j4N(CAr3`|X#{^>x zlqv`Zn-Fb^`J9e5YcantkMx~c?grdzzJtk=lR3}jsj<;hrm84N#FKT#%M+A>QC5Kh z#waMI2nEB4Mq-FZTcB$?Mn^|X&*iD=j__yE_?hwZ`9gl`(v=^bwq!e!i8heR{PYc1 zMh9aIj4?lekP$|6B#NJYzU<`kxvARSP`A-arklDlHFZY_5&Pi%54A{BGoH>r1{b^> zwXcBr&Z`Qq-@M^nx_o)rwY*fF`qdUrQ#i8c*wJI5_BF4-aU9r=4bD9fl$TERc-+I- z>Cs|lF>~c#7Y-pr0bl?K>_52wKx058UZFF^Z(`Ymb0>Cs)Jbp4Kuiw00 zN~hEO>D>Hh7r(#w0{|O<1;CP0dUXy6AqIdDfM5loZn eg_P3YR(}ER-MJdW3!B&g00002?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4=z-@p2q%G0aB7!#UyWT3^YUPM?5HPoFs&X#W-St8~Y|+kG8@jF{_WE`SIT3~nzYo9TI#AMhv&4?Ep!3P!PrWB5JSp1h z5;;wwQoHMr%7+CG%nY6r&Q7yAKXvQ0i8ihmY$m79^n2jg$jGqJp^ZhYae4WIt#WT4 zbS~$ZrR$~Hf8b;?>!olFCBDY#?5t@kHu!(|#OGEK!|vpCOK^vk#KXd-b-TVrseV|n zK=xpRrxZiall;;Lf4Xe`R5QK5FLK~-iCx+EQ;HIg9UE`1+1|ZeLimTkpZO>4#cdcK X>1!-(eZ0W{7!C}cu6{1-oD!M+jpkQpA^Md$~mW;bFvwLW}Q6&03y*S1P#UM ziZgn<-L`LFpzl>HZyA(Cp^H#8cB$LogExd4N~fal zE>{ZYT+2D%9Doo4LMUR_BT!Wp9BN(6wdjY z$T#c(Ap`;yKnOqyi2*?n4u|3Ox*N>3V{j$0SIEE zlu}R<1BqG*I-LxcYZ2C7tIzHJF`AQ`*9;&Cz?)n|g0RwoKR4HEMaZ%q0ly#J*4Mt7 zuhY)dwDe}y*klE;#25=F)dTt$0EqQNmi0gs7#)-;bAFFMJM%!={*(o0XMS?*J??#sZ0i6FTVc z@AHq1fAsH4NxR)}y|GIaMH^$xovd&?03=Zw{X8}Krl#t`W0T1=3&4@g!^|x p18@VdGsc2j5ne6w|I<%YzW~9?0kp)N&@%u4002ovPDHLkV1g2peVPCO diff --git a/images/stock/media-playback-start-rtl.png b/images/stock/media-playback-start-rtl.png deleted file mode 100644 index 036f05f556ffcf47a07ff6da5bad2e50d3a6ae64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzRAP)5k1o?s6!NuH_aJ9{{ zplhcTqo5?h$hmZppn~XR@LGq0C0R}AgAPR&NhCz5br9N$_7Hs=q0z2e&W!EM&UBdB zMIl|&?9@Al8Q$le|L=MJ?>oV8 zA6aC+NV|KweH6G@`xUI=vSWp0YRswVaKu;&GEg8TVBLJ+S{*ZenmN;j#T6XPd zYPOY>mJ&%8@h$!p00EzCH{<~dK+Os;g)KuvLxr!RFOTccI~oE3YgLtpCX-1_PsgC7 z6lj_TLJ0J$oNQpY&t&Z z_tha#-vCurA<1IKih07skRu!gAtbGxso;0V^n0K-kSKN)?}X`E!kOYm=9HtL)R+T6uvi6xAZP#*jIq0-D310Igj@Ot!Y94n8s1;)&$U>skYx!f zROkSRPN3_$X;DTd`z8y5kOVNv7z;(C(R&Yv9~^!0B66rP&}gmlY@({FVs=)Brlp_* zpd?elJZG|g$$}t=9*^hs(T-!MHv9bB$DWMc5BK%TQt@}(`-5kkg=;o8H}AANolYo<0##997O}imAqav3;0t5y0f6V1 z!=c^RZ(KcHSyAZ-)Hm{mMPwdeSd~Y};jXfPrnM?l6 zq6Hvn+Y(0(cU*`>B7=_}49hd+B002ovPDHLkV1kz6nVkRt diff --git a/images/stock/media-playback-stop.png b/images/stock/media-playback-stop.png deleted file mode 100644 index 9e54ef3f55481d85a3048eec0991cea762b8cec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|^P)q^i7pJGi9`6(U$ uo~RC)%8hp2OAhhcBJihi`ZwC?3w#46cpDV`(0$tg00003rXe3yJ)lGttl9=eO?q>74 zKi{{9RjM1cEx|({_%g#V^Zh(C&oCp#$HzI&P>$6dQ2)&&%d*5ycenKbY}@ue31C^4 zoIG`^|EHTbuTZal;d)*IKoMdARsFR;8vXI>SFe_A+iv_PfMr?An7%#!{1$b@L=L(GFi55+imp{twpvhOKiS;8T{qk zxu12@959nfqgE(TFO_i1We@_X>!^VMzF?5`xjCnt%RT+_*|V=AXU-H`kL{o$8<|w< znttNMKx}Z(sIIKw=JWWZL=T0~gF#d&aW^-qtgaGECJlc$JdjDHt^r1?**<_}S?Z&7 zI#JK%Zk$XejqPj}3HT!sw2lrm!)PiHKo5sef%5a`#D<29dM3R4R1+Q9d0%|ox3&3+-lv)i@uOl?A znT!x0dA0(oZK2R&xlp*Ehr`s?*P+oscpeDR)NZ&gcpjb*_(CDdg#vA%&>~RXYuH+Y ziod)2v6IU+^sX*^ih@rFR6zASRM-7mJK6aZ1-+{aCzosZySpC)m7@TqvtwiTUoS6L zlt=_U8pS7N6LgTIM2|*MA`xCMFIUcvjok-IhXQQdc6!q3`OZ{oVrh2PF%k)M(`-Tx zkZzh7i3CftvrcC!HPMq!&)c@`9JK?0)#1s>J2fd6=BK6{H6Euuk-#5|p#=hHfdKwk zjP^tVH6CYvYRaiexiCCAc?Vc+HIt*Gqx%MCW@fz4FJ3J4U%&qJ&BKSK#e4S#gkdPs zG!?z42PGDx1gyP%+xUHYx*Qo9`C)Ws=6k7W3$|@nS^*zDcDrF&mIV6#ynA;jd+XLn zd1Ynr!@GBJfcDPLKlIb5=lZT*o$kJL={F#I*pq!IU=OGRFoE!n0Je6tVcYimqt^c; h;8Ww+|K$Ha;4gk?Wf~I>>+1jj002ovPDHLkV1g=8=pO(8 diff --git a/images/stock/media-seek-backward-ltr.png b/images/stock/media-seek-backward-ltr.png deleted file mode 100644 index 5088082857ddc8e5ac509ac13248beab68b21781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmV;119|+3P)kb|mJ!sX~5_A>5Ywzg|}{BJDQ6zOhXJXP)ZpW zFP<6qu=UBg8RaudX3d;sboYEfJRSpxK$%O|Md0S0>yha>7!Y6>2KO^iO4*S}B=quC z`}v9m6=Oo7DOz{Wd$_I(A_5bC4FI_Fb?2dlb1O!MLZLw!1|Wp^R=`Rr0l@dl>DW^~ zt$b{0S((<`*Mn3l1!e-1fM5m_A)SU%GI?@gX<2Db1|aCVo;@P4lrjmRw>TKub^pQr z&Xz}yTwlH)nx=zEfSJKUfQUgv@u$z8b+xv%O1%Hy8|d48`<&$UlE*Qp&hxSueJ2*}n5l*W3NaPacbA&lq3d5CI_JfuTVQ zG9?KBFSc&3-Jf)mJC7VW9DVn;3-Nd&oz?fk4=myfWlvCujbg;{X%_aHN!uSH@Gp-^~BB clmB$S0H_pt3=d4g3;+NC07*qoM6N<$f-J<9-v9sr diff --git a/images/stock/media-seek-backward-rtl.png b/images/stock/media-seek-backward-rtl.png deleted file mode 100644 index 4a1bdf89b929ff57ba2d58f309ec2e028de26379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmV+j1NZ!iP)|; zP{D8!NJxYb)tvkvqD4sWHgI7S#u#qG#2K7yG*O|2N@%)Jvk2R0^PyvodRl0UN$;JR zg{^wmzjL4ayywDYZnqmJIs8PQ{?7x7iVM7U`?(uN2a++m0kPfK6_K9y;(TG=L%jpZ zm}3Kohyy@VW1}TE*Y>Ee$WBBghzO||qXq&1&YZEKxw+X|V7K4tdivzG&*#e|B9?;D z4M+n3r4+)E5UyUko>5+2UjJ!s*5B{#KTAX+Nn_kVK_MF5!bWf%E|<&VtaLh8=9b1i z9#1gq@?TU!55A4muN=o|iq9L}ZRzOI!eB z5L_I*=l(u|p$(LjmWnJ*vkm))-y9HqGw^o6-`)MJm59awY#wdEID`-oT!3>9rGRiG zg#3IvbGfRs00<*fTU)0E!@+IYriE$t1z^RK(At2;&mBYj4uxU{6DrKx3FN*UI< z1Ab6laAam^n3y|fwd!Kk)@WeF(A3n_EJ`UO$6Yf2vm%qp42#){594Fo z^9%E{^$iW}jxxszfV@OTO1WkHnKA~8*@_|WV02;ev#;&utu{xQWBKr4GA3@0tSA%; z!s{D~h9lwU?)#lx0KQ5of2ClI1A0BZ+Zk5N<9m1AuK;|JQpQp=x&g{;GLL3!IeqQz zxBUQ?rIdSr`DBc4z?%C(rvwl>th|4WPsYRz`~TBVG`|5<&~a3Ome6Ye0000|; zP{D8!NJxYb)tvkvqD4sWHgI7S#u#qG#2K7yG*O|2N@%)Jvk2R0^PyvodRl0UN$;JR zg{^wmzjL4ayywDYZnqmJIs8PQ{?7x7iVM7U`?(uN2a++m0kPfK6_K9y;(TG=L%jpZ zm}3Kohyy@VW1}TE*Y>Ee$WBBghzO||qXq&1&YZEKxw+X|V7K4tdivzG&*#e|B9?;D z4M+n3r4+)E5UyUko>5+2UjJ!s*5B{#KTAX+Nn_kVK_MF5!bWf%E|<&VtaLh8=9b1i z9#1gq@?TU!55A4muN=o|iq9L}ZRzOI!eB z5L_I*=l(u|p$(LjmWnJ*vkm))-y9HqGw^o6-`)MJm59awY#wdEID`-oT!3>9rGRiG zg#3IvbGfRs00<*fTU)0E!@+IYriE$t1z^RK(At2;&mBYj4uxU{6DrKx3FN*UI< z1Ab6laAam^n3y|fwd!Kk)@WeF(A3n_EJ`UO$6Yf2vm%qp42#){594Fo z^9%E{^$iW}jxxszfV@OTO1WkHnKA~8*@_|WV02;ev#;&utu{xQWBKr4GA3@0tSA%; z!s{D~h9lwU?)#lx0KQ5of2ClI1A0BZ+Zk5N<9m1AuK;|JQpQp=x&g{;GLL3!IeqQz zxBUQ?rIdSr`DBc4z?%C(rvwl>th|4WPsYRz`~TBVG`|5<&~a3Ome6Ye0000kb|mJ!sX~5_A>5Ywzg|}{BJDQ6zOhXJXP)ZpW zFP<6qu=UBg8RaudX3d;sboYEfJRSpxK$%O|Md0S0>yha>7!Y6>2KO^iO4*S}B=quC z`}v9m6=Oo7DOz{Wd$_I(A_5bC4FI_Fb?2dlb1O!MLZLw!1|Wp^R=`Rr0l@dl>DW^~ zt$b{0S((<`*Mn3l1!e-1fM5m_A)SU%GI?@gX<2Db1|aCVo;@P4lrjmRw>TKub^pQr z&Xz}yTwlH)nx=zEfSJKUfQUgv@u$z8b+xv%O1%Hy8|d48`<&$UlE*Qp&hxSueJ2*}n5l*W3NaPacbA&lq3d5CI_JfuTVQ zG9?KBFSc&3-Jf)mJC7VW9DVn;3-Nd&oz?fk4=myfWlvCujbg;{X%_aHN!uSH@Gp-^~BB clmB$S0H_pt3=d4g3;+NC07*qoM6N<$f-J<9-v9sr diff --git a/images/stock/media-skip-backward-ltr.png b/images/stock/media-skip-backward-ltr.png deleted file mode 100644 index c3a649f4e4811c1d58a7fa680091c7e933fac03d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmV+>1KIqEP)LJ~# z8Q7CS7*rV14uJ^1^^g=H9H=Klj8W96Ud+@UUBWC#sVC7vDUPg>&Xvx*>U!8(ck{{| zWzc#2pYMLZ@Be+@B;)z^+s7vT{8e1+j2k&0U zb8~lH&J&8oQbMB92sSp>6EmV|g=})LkS)Q7eMwi~ZT{EM@p*|<`qfH5g?PZ=m<+GWVqK>|=$ckF$Ywc6P~@ci>s zaB|&jGDDVRFv`Fv%eh6VrPfrYx}ENKwTJ8te*bWAeEjXI$z+CX$OB`!15$(6t|{ky z$!@n#x}5IQW8-6QhW*1Ug#|^(GvueWh;yEcgY-X{bG~e~T0fj`x!4j6PW2BA_Q&!J z`8f|c<$&t!H|KmsQIr{e^;&y4{H6QJGhZwkUCbSDucsS5y*--%NysXInJbq)cT{!l z`ol*LVtR490sy(at;3b6Wd?E1*MtxsFI{MT>h<0aFGRkc0}#)QBY*lP3n2)AasXxk kAzVF-FpH8=2fy-g@VmDEiR0OuP5K&B< zU38H|NOTj$4uJ&Sbx|QAe)rvIgkj}HhT#@MMiOF{Mnp)EKRGnSpKUaAZl{aw=sG*I zB^mTyzC6$SoacGJ^L@nQ@nAcPZtL`aA)rxf7VatVMph$t{r4=AE_-#bUi>FSK#a zIpdrwp#mX<)SszGLqh`yAyJFPA}B#>J755imuH3B?KTwHY?oTwS|0g)zAVl;Np=7L zgb)xCA7d~Wm;$3JpaB3$k`N39P*GWBbUK~YA3nbC@Ah`@Ov*kzXCX#vH> z#lnfQa>rNy)a&;9?FRuEl@2r-P09zS7a#vFlq0XSs`auGsOt`9W_R3>V*I%FGjFgW;XWq4%xU3E=O zoy+C=B#L4PiDN1+IKdGB{PLr1;($P}Goa7=EIi|%d4B%fg(j=jIxUJ~IGL+(ka!0 diff --git a/images/stock/media-skip-forward-ltr.png b/images/stock/media-skip-forward-ltr.png deleted file mode 100644 index 3da34257d39c2541a8492a5c03a15367bf05c36c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmV-W1F!svP)zVF-FpH8=2fy-g@VmDEiR0OuP5K&B< zU38H|NOTj$4uJ&Sbx|QAe)rvIgkj}HhT#@MMiOF{Mnp)EKRGnSpKUaAZl{aw=sG*I zB^mTyzC6$SoacGJ^L@nQ@nAcPZtL`aA)rxf7VatVMph$t{r4=AE_-#bUi>FSK#a zIpdrwp#mX<)SszGLqh`yAyJFPA}B#>J755imuH3B?KTwHY?oTwS|0g)zAVl;Np=7L zgb)xCA7d~Wm;$3JpaB3$k`N39P*GWBbUK~YA3nbC@Ah`@Ov*kzXCX#vH> z#lnfQa>rNy)a&;9?FRuEl@2r-P09zS7a#vFlq0XSs`auGsOt`9W_R3>V*I%FGjFgW;XWq4%xU3E=O zoy+C=B#L4PiDN1+IKdGB{PLr1;($P}Goa7=EIi|%d4B%fg(j=jIxUJ~IGL+(ka!0 diff --git a/images/stock/media-skip-forward-rtl.png b/images/stock/media-skip-forward-rtl.png deleted file mode 100644 index c3a649f4e4811c1d58a7fa680091c7e933fac03d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmV+>1KIqEP)LJ~# z8Q7CS7*rV14uJ^1^^g=H9H=Klj8W96Ud+@UUBWC#sVC7vDUPg>&Xvx*>U!8(ck{{| zWzc#2pYMLZ@Be+@B;)z^+s7vT{8e1+j2k&0U zb8~lH&J&8oQbMB92sSp>6EmV|g=})LkS)Q7eMwi~ZT{EM@p*|<`qfH5g?PZ=m<+GWVqK>|=$ckF$Ywc6P~@ci>s zaB|&jGDDVRFv`Fv%eh6VrPfrYx}ENKwTJ8te*bWAeEjXI$z+CX$OB`!15$(6t|{ky z$!@n#x}5IQW8-6QhW*1Ug#|^(GvueWh;yEcgY-X{bG~e~T0fj`x!4j6PW2BA_Q&!J z`8f|c<$&t!H|KmsQIr{e^;&y4{H6QJGhZwkUCbSDucsS5y*--%NysXInJbq)cT{!l z`ol*LVtR490sy(at;3b6Wd?E1*MtxsFI{MT>h<0aFGRkc0}#)QBY*lP3n2)AasXxk kAN#D43S!52t}l{f|bTpimZR|Q0O_7f?}Fdq9p`0Jy?rPY1gLK%_fum zGw(eQlb!BHH`x~aV0dqs_rBlzzM0<$=N$iMXn=wJ15YND8ZVd2sm(Sd5{db;F|VKa z^u!Mh1GH4*y}iAu&Wxx^8_gd9 zoO3v5Sz0L|g`i0Zv=nFsVQ49ZhSgHYZwt3ECgff|jJN`Tzw-sI+{j^!#afFo7PB^5 zW4XDQr+WQ80{~VF#kGVkPHt=jsKkA>CKBh3zc` zo_;LH;Lrh*$s_}B?5#_wc0~&zME}cu^K)~vsWV6V>w0kXlcV(X?4mJOeobXEnQ@>) z13CzTa}y^gQmtEBX=!f8^L#w71<&*1YhmFUogH1g@NS0RuP>vuB%xF^YDGdxv{pR& z@BneytO3BQni%2PJHZ|%BL>|n| z&7!rM7ea^{fVGzH9XmNcHO<)J5f_FA=iuO>_sM2&GI4T(ja>1353jkI)2Gi61i?8# z>vadn?wWBY(%UHi}-JoV+N z!$49>$@!^ioO7(M7I4mO>PjW9{&BT3)ncTY7q)db_Q?Z9`Y8!sYJdMkXiE l9%~e!0Ut;-3INJL@DD?H=mE=+FzEmQ002ovPDHLkV1f=V%T)jX diff --git a/images/stock/printer-error.png b/images/stock/printer-error.png deleted file mode 100644 index 28517473d1abfa61d11ad21a89c8b6c0f2db4278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1130 zcmV-w1eN=VP)3;XCT_ac1Tk$)7Y$7l-Ly5dHO5_QTvVt@HBrFCq6~2~4q6!m2L_nA zbMNV5hR2kF8cqM?=A3iSx##=eSBx?IpJHWu`PHf3V~&$NYK+Oc|8EhIr0w^eIP&S| zU#!_Q#;kdIdXGB`3-jh##c>?d(|g>>c2`ynjWJeEPA(4~-bX2gQVOkfdal>3bNo51 zXYGbAP)hN~;1!ezq7+J0#$1%5wWVc4_iYH!O4HD=XO-3~7AU2c*Ut@5N-;1nnATh& zN>X#Bko4Hv+WH~@O;clI7Oht-5s~KyXr;LP`#@TAjZ(6#xl#&%mKTYEQktgbrpye| zsSJ8n$pCbAw%2Oge|1}JEzxL{*nBLdxt5Id1X!4uVCMRD=7T}y!c9f?G;nk(@*6<>Z$ zrQgq+6%|;vjY7O);c5DJ`r|q-OBZFSoYk#x8u@lubu(kwE!05i(R{S?Pfd}MCqjf zW_DTU@5em8aDlzG+YmrR5Rv8c#u!9|H%dzh507ZGrKD>a0N@$J{d=Kxv%&rIDg}W6 zR!Irg{{71>gS3m3F^K13oj*@eK>?elXMj~%q?DkQFnas1tboFiA<9G{Wo7sdA6{3H z#NZ$S5dzWKOn}xJ%eDdd#FURBA)7>wuPhC$C4yqTY&Av zlc!IfJn`{={hzhC?2Sy4a2)C?E74kmF(88DdE5+zxEp=SC0r9<@J<7^00E%p;5!|^ zH8nSsR99DR2yy1-m_79kT)RdfFP}o&W+onIE*2wNx1Dfv1GmP;$A0b=015O37UX>cg0000007*qoM6N<$f{mCFyZ`_I diff --git a/images/stock/printer-info.png b/images/stock/printer-info.png deleted file mode 100644 index 13304368e01792a5a4291f5d098c988e7fe85ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmV-|1bzF7P)*L=Yuab0tFm)~!ok-;w}B3^s3m@n5R%WgucKtRER5BAh;brlMR> zqRMj-RAub%?|&SCL0@lg4b}HDQA#~Jz!2fo$Jz-V$ipxui8OI z*+CB*Re+s4w{;s<;{5vVZu0p&#Zs}X+)!2a1jx)eT)dX!`b>$A=6dFe5rePo%*CPK zbM)vp6L-&4cU#54z`%;S`o!3-UGKJk{>2gX#_Mn5`R=_dsf=C_^X1uF{5+YbFTDWQHk;Nz!S8?Puq}fpyH_(lIj!R43mcs26NiCUO#s((2RA*p ziA$4{h;g@o)m=6>A8>N)79Cxkn1*1RLPNq}MT1RKgGCg_xTet7zLEb$qVs<7(dczW#X%JHNY?oOv?h`owtS-0nYw$o8j*- zVVi>EN0_3RnkfQMa6({0PwzrY@8LN-6d7j_nwxfn}EgpMEyH2;hbWce1N# zX=}j?H3cW2;Di-GK(6TH`VmnaGhcF973WY&DHE`iQehB;X4|TE+FokEZyn}OOfxxi zhvwFmcwtOeYYKp_)&_pLoW(YUx!Ei|>(Wf0_d>uj0W0vrLkAA*d;3A}bBw`Ex}PWt zY42FY=y-%j330hR(9fOR`w893IrWpi^^*P10EeyI8G zHTj()WRm^3LHKDcsaYTu7P{IvUc95pXV zs6>k-ap#(tS7|I=pe4#OlX00fOV07*qoM6N<$f|Dj7h5!Hn diff --git a/images/stock/printer-paused.png b/images/stock/printer-paused.png deleted file mode 100644 index da6df48a9e28f51b71d312aea70433f262fb5680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1096 zcmV-O1h@N%P)PbXFRCwC7Rb6NtRTTbaXLfcbX`tPt z#cTw%f%c(DAGDji*~H{UP$Z>kSwSgk0~Qe#qUf`Ksn80(D7Dmz^-WM?<3nm~wwBh^ z&?b^LB#?D?YsmgJO|rW)JAa-t`;)}%N^J1L;oNiX%sJorx#tRwqljZ{+hiXQRt73}@iu4~%NIsv>0MilQPu z7lp^;aY^)urMdTXrOIRKiy}iADrOr2g?3H7IbKiU|9C_hI=ml*hB_(c} zCI-)ck3=Gg9Zfsn_cx-xz8=|Z7MV;M(OA?m9dqF9>95|dIOyx^^J;qTN>9&$y{UA< zn@Xi>h8&B<@L8_V>v(M6<7o8z;aI?pn>QKzhoP54=UfMxu7%p$+A%XT z4N~1X|G4)PxH^U!b&EunZfI?%4~D{!(}Z?QL!H)oWK@lU5JC zNF-9zIL#WQ(ka)$(&9amE&dCR?YL*mS!R8Xnq%A6tvqI*t~hY#3w6TO)UB!xICaz^ z#XM^oXq>wRw;da%WfeKete0iE47;)7Kq3cTsVE+OsjrFy3va#CUqS=uMxIE6O~x~K zGcISD^_FFqVW%a!>cYW82OxSS(4*n1KR@+Z)hJ|1#`5wqBm$xr3U2>flpZZtI82js`y)Fau2EzY$z%#CqUo6#DuaMJwQk*a3-=Z< zpGYhXe)l66@;ax8D`G}xqXQRlv442j-d-yTj!>fx()EHHLBp0UkbORPWK+XZggGoN zWi!*ar$6OOPZZ|}yhLnt+p6IwY+z9Oh?LU*{GUOjmncVcmniwS00RK8eh8B>vK_~t}r<+Q}Ll zYT^e7e`F>Gk&#T@MwTpDw#3B5nTxV+Sj#8E_p5*1-bMJlUcg}g|p7(@OivLqg$tK@D*7}xVg!d_>lCEDXLWr<# zF&}ApeeZ!Ki%O{_*WuPfMj$Y&u2&4hP={L&8OdxV^-w8gvRcy^pS*~a5-BB`)E36t z65VRCvRt$&Qy`_p-Fq4-1VT!rkO^ZUB^Bl6Dbtq{ph=CAl5JOc9gjdtEvDZvKuU?r z)w|%iL`V@GONm&xS5#Eo3_!zCTAIY`cqBrI8wY4o^3y5Tg6A4iikRn8N&w1l<{e0> z;V5$?R*)90pzDvf?k*_6=kwv8^+!F|L_&Ekif4M7_l~_o?#4U0|LR9oAJ6LW#k=B}=;zhi*r=4L$*oIPDtS^1!6dP?_rJS&DiFgQ$l zV1)N;G=gDx?t?I;WlyvDf%}c_6DNL6v!p-nbUF){L!MK!qU<*JsdU&g@P%K zU%4{F%S}zRZ;wV~F~P19LHF<=ExY&Ve~ynA_V@K22ez94=7Mwe#r9&(kBlI-#T;ML zWv@~@zv{$smm)t)@S1akEqAP6-vSmd9LI_b^TZLxQ(9Kc6$DcZr0^Dvl4fY5bmN;Oe&BB_D_;D)Ck!;D0 z@cU&SLI`03bRk68Fv6w{**R=@HYcg^iOIkCp{Ix1M-or5d%%a;BzdxMO>A!0HbwO( zUMv=?*#ziDFx-Ch=#i#W-{%>BfUNW|CQVP6|Ged%C3|z$3g+jPTDN|ErT|s}n`&RE z`O#5UV$09ZOA7FMeK^}bLKh)&*Dl{dl~VjM6;|Gv;ONlMg{=a}0P^g`_Gj|*Zr?W_ znYS(Xuz$vne>OlQ^`D4$;?m@I=g*z%0NesF16e>OpaZEJ{K}#L1NaB<{0Bjdj#|K* Rwfg`7002ovPDHLkV1ivb2uJ_` diff --git a/images/stock/process-stop.png b/images/stock/process-stop.png deleted file mode 100644 index 54e1cb3e9f75821b263a44e766ff5ad1bd2f3d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1043 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 SEjfSy00000n8yBqVlR0vwMwY9VmhqM_7)YfWW ziZ9zf2rZ3msU7h_3RO`mK8O#BAT&s6!KhDBA6hUY_~ZwgLSa~1GD1NbLu{LvP1~eR zcC(qgyK}D(y@7R2;#Su4GME4P_}~9IbFQJ3;{P?FaS%0U&|(8XvAM`VRu&fIe>p-ULcoQKfYQX`mPQ7#P?1&gBZH z2jT|kAzQX{8CVB=r~Mm&rvXRbFb*6Ab^(WgGr;%2H^5EcL;Zd7(N{)Jnla-CCDnGN z*lAj}vlZw8z6>({ks#wA0gh>+N)=xKJGj@v4}y$8q?PA@Q@|hwoo3ANT04_HiPi=T zgBOi@EShCI9YDC@)!=kTM{0j!Z814{H8-oIT3;6efW4o`-|cLD@Z{P}vE=B;bRjCq zgPtpf>axk{fp}kABK6L?%^k_?#B51PHSD=!2>!kY|5l`hd&@Wl{Oq}+r19N}c=M-Q zx;G^z7p^cjT`Vc7US7(psYU65_#+tn_V~k3$b!g6lefngl~mh+RAWQa#b zfBZVXPzvm}a>96O+p{e@tUW0+W(=FA`O~iLFC?eU5oWWY zEEnY{inEouH4iyG5N|V0W9*?V&8hCL=eRpnEHySYnE40BVl(+axfbL?B~`EIiYt|Q zH4oWy#hjGt=+y6p{MGpjw0AW%#@ZKR^QA1)V}%0HUtRpZ2sFvJvaEibnFz&b{sK1^ zN66hSBJ$C!lIp$Xa_;*#m63AivLY0Ph^VZ%IldT5sro!uh`JDXuDB(odM!Iz$lV$* z2;jWuieFZW|4)nNxni(fl$Y{%%At(Z@zr8$UbJeHkvatQc&@m!T3p@UqLr*JZ_#S@ Y7krOcTWt$xl>h($07*qoM6N<$g1lC?EdT%j diff --git a/images/stock/view-fullscreen.png b/images/stock/view-fullscreen.png deleted file mode 100644 index 21462fe0e592b4af0b0d1cb96c52ec747bd70d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)qi52hj9f|K~&olZp=q)|#J>E<#h+aZ(J#C|=BwHnoJ=YJl*6X;NEz?q8YrXEdenOZ)tETyE|XJ@&Wd54%XdmEtL!!2kdN07*qoM6N<$f@#2!@xYN`e{!Cd3B=iH!zhxQG=(G(s?-2}LMMp-8ta^hVq5WxJQz zxtw!+*x6-COZ3G_{>)D1%>Vu8|Gw}1ON0>kKQGsRSwsjSk9sHmr9$$k_k<8KV`XEl zi^}g3LhFPOHGq(bL`J9}cTF>MSns{@?Qq+7X$NP@L{kDp7B~2*rtB{+@x8HrS)CdV z`AK=e3rZ>C$qa@@lepN@uD9O0t7qZ^Yx*u6xB`Gxul{JGOqIrH^Um2h&`AK1#SJR; zdD@rNKVP}JevW*-YXaSaNsJ~hfhOl8l7>k}O$E;8h#*zkpZ5sv@ z4coWArWKckn!G;$k+(N5)|^y601_dDJVbJ2d1GC5$p7B*h0nUL-0Z_2H#&^L;kX!& zrzF`$Q5gz|8Q}_7?K2VDH>#t(H;%_DeAuyVg_{Y$>v88&6#+;Auw8}KM^^6LR2m4l z8$LgoNhT(GlKt1uXX1T*R=jtJx>VP_V9m@Mm2>KUZ>gHMcGW^9JWWIINE$wm3|S(O z6*-qq1wes^WlA7P^IO}ZA~kTcarkP}WdIg{G=K~Mu8%~evD;^lW#(;JccPhpuyx~7 z#p`y#uoxJpFfEqLMJN3L0C4d%H{zcRUu`-8pa($IiEbyl07Qpxo%+hq^?~m0`+`ye zN(cx63_CBFyl)=jKnQju+5Ougr(z3$0l)^p3ziv=FWvKLu&k`SG8`gAdQhWj=XbyX z2%x|Rj$5SyQ06QwOpf3y@A!NrHA8?e0GT{MWKBbe5H%{e(5C!Q zqFtTMyPk9&RR941L1Yz^W7h&O24K*+Tlp3Vj)1Bu?7*IF;9P(U0l@*ouyE+>pE4bH zI*$O*0O(Glai^6oI9!&`-7?c%{>18@pZ6XFU<)CHE7zVG%XU)$1VZ5Sm44Vvpu+D) zW^9N>??kWmoZEL6fER%205AtEM=0@zU)WCwtpe~_e&_ie2u=V2#sMJ&gb+w&7^>f@b4U^BDLYYvwH3RNUH0RY{!QKZSREP>I40acc; z?)3%okCYxPs;-@H8~RDX64!)ML}co#CRBdW<#xZXDDrewRg73)^fmxD0GkjZCd~ug zUBl;ZL6AB@(0T_x1!+hw$^mK z^I~hkPA3nX&fXZlId;yH6&dSR*30F76@9TZKnO}JDy2Y0rI(AW=5>R?v>7-P=xD#5 ziTAgCk?6TRf&w2r03cLYrmY@5em*tu=MN29X=L{CQ}&y$E_z7`7JD(4G%%hrVc8ru z%W}lHfMpuEf49Tb$77vCElthH9&!c%o>vh7Fu~&xqGu%9vMbSbsVmWS=^SHQ|N4co zy}_~|nH~-+lB__MB-n!8L;(O^h~Vv=$DTETVv1vj6}907*qoM6N<$f@6M|m;e9( diff --git a/images/stock/view-restore.png b/images/stock/view-restore.png deleted file mode 100644 index ff9c2289d8a8dacf188bd2b2cbb40775d9f0cb62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmV;W0$TlvP)E8qpK=|)2MPr z6oD!+Ap`@9<%I!+m?~9bAd@3it|CQ3B|Bna2m>K_VxtTlGTdI0RpbU>h(Q%x!G`!RT0ASm;1OS$0@wA+| z1pWq74|)5+%Mjau;vvz|%oVvRgi?AG`5I@09EN_ji!ZWfRGR{s4#X z-s|J@abLqaAV@XSENO8=Apk{D@Z;C-#Gxn(#xrc1C5<4}u0}|f-o4?%*YvNn}vMm>$j$D+xINX;t%g~JlZcJ z48ueL#uyF`4**=;Fm+|AS?U%}A>V!jJ&UT%~O`Mr|l_;o}M;0$$ha@kkWs zx#yR#EQ|9<6uqw3OB5iY{vZnUv=y2J$8pXEQJ@o1|C)dRua5T?naStA?}IUxIDFrS z%;fVp$E~|<0bU($d|D;He)H;i6oob>6eJOak|bMC9zT6C$;ZN5#as`LZQIgi!%K^W zx9e29G0l>;tmZleZR5_``mNg}iB7pv-b%xr8Nq*fGXDh&|5f|}?QZ)7ng~Do00000 LNkvXXu0mjf6L}}p diff --git a/images/stock/view-sort-ascending.png b/images/stock/view-sort-ascending.png deleted file mode 100644 index 44c87113324969cfc93177948a9b00668ee83954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggCCN_RO{Xdhm(ttv;C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3LzP(3hti10q;{(^B5Qy89iMbLp+WrCrG?%5Ikn!87p+^z<~{1zIJcUyqR%z zO2mPdBXLI$95_&rR>t#q=1s$%6G>M#HK;YP#vV{9Jz1X>)$ovci$apb7e|wdhNke} z{{!b=ko$2qY4!KnN59?A7mK#NTFYd-=k>&s^(o#7k3_`F>Nel_ce~<+;hsMqIvish z`W~L>^X35p-heY3G~bFVYuZ(ASUXA3cCo3<&B9Kwil^=FJZ5rL5LHs@6(IRGNeKx) z$JX_UPoDT@?w7i#8@N?KLA6viB_Ux$azaAHmxSo0X4e)m-4qgxG79fvnDnq)E@$F`Hrff}8LPEj|ZmdKI;Vst0Ec#v;{X5v diff --git a/images/stock/window-close.png b/images/stock/window-close.png deleted file mode 100644 index 312b84dae42b9b72cddf567b35ab4b12fd328c47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1453 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 P00000NkvXXu0mjfk$TB( diff --git a/images/stock/zoom-original.png b/images/stock/zoom-original.png deleted file mode 100644 index 499cbd6c61ac54f5602212257bd047dcbb9b214e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 962 zcmV;z13mnSP)08MzM#GBXzVM0^iToc=O zX1Z`}5o&TRk^ZaE(V6-5|8r(YDTV)2TDf9dS67P^DhNUV3i|;7gc&HrgycWZ#m1jj z3ZOR~5E0wk-qA-yUw_tn@L})49(QZ2-v@vt5{t`^p3EEJ$gRfL+1z)t(Wxs+DOoXK z{qR3(YhB)JLxb+d9bTUh5<;3Vg@BMIq!2KSOlENS+Oufvetb4M^|=+K6w%)Hj=tI& zm-qKyBYPNQOezUYCm%oXH8uFs z=`_NToBwIl_0>|{VRyn|x7)uAe({1c5wrw=5cssWr%nio$S+~&`f90Rf=Ml_R1EG`RaLI|;;p%~GdQc{6)j)izU2_R+-P>4NxGH=NBQM8g& z0-S3Yzcam35rAIeC$I?A0FsD-yZnr z^o9Pj%|rx;-3eE<3mUfpRER|?0U{0p-dbk%!2Zh+)MJf0lCGrcl4cH1wM{NBH-;ql+EjNg`5bRwc3?oLh&SOSWw^t;~I z(Uoo5vCW=(xuR$D;>NwniT;WJm8z|?`;y(p&oy~HHHqh`vXJ)z0KmS^?#m7vKlUyN z+iY_sx;Ht|pUsOKiRUT3$?K_c*!Z!w&hATF26!9d*;ZGhlsdnqfFdN97sH8XFJCiY ks91mRJFwE0Ie3@;1*LGG7GdRZ0000007*qoM6N<$g44^j0{{R3 diff --git a/images/textview_example.png b/images/textview_example.png index 4ba4714a38d6656e8b8a91d03368107361abed35..3c53e622c98924516eb41a4e195589f009f6ba94 100644 GIT binary patch literal 18048 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 A_y7O^ literal 21195 zcmeFZRa9J2*DYAMTW}8~xVyV0gy1fPyE_!_4k37O2*EA5yL)i=;O>4;zWcY_aYy%4 zKlH=TsDi2*hf{Ud-g~XN=bWn|6y;^mkcp5%AQ0N;Pm;>IN%WT5`X%+2Fg1aWB`fRF)p7JY zn-d57a@TD*S)yh#y7$RoeXKlTbd5drmn29rGIh42_BPfBR939qqb` z^?iqhr55UNt)kWc={M3@tMSOhP*9hFXwQadt=$?4atO3jQ>%0-6=fcA(3n|JpH<%! zcA*0^1(Y~-*sM)gHbV*|?|m>VNT)a(8Z?Ydt;uNC*wT_~E-6!MISpT~T^HEW;>9$E zj)gUw6ot=Xbhg&EzuaJ7x6Dp}YB5(!#|&-_cU^W9MI;6_=DrWN0hJZ_E-8ZJK9?)! zN<<|S@Vn3o3JSgt_8&7Vb&Hpj{OH4;hH6&Rv~)s?gUo5SLO?-5fhleWYFJn z$GD(ymb7Sm>3%0VlFURAOuKDLN!c7fwCj`tj}3x_h0XEQl=ydi|4pt5!*k0qS%Pc< za9sk7cu`+aK2TB~IJ?Fb7k#bMM#F(kfSwQg4h>g$JKXvpMx8QZShKib44e*WR+1Hp zwz*~*jY?uD^85Uc;ZruKjXJ7kL#=Xk!JE;V$wtfb)nhGJJ^9S2CNEats;jIHwwjqk zKIZ)jEdHjmIgzLM8%KDD7PXAsOAhot*dQ)K_b}EgH1XkCzoWd|DcyW~d~;*7hv1^~ z1>}ExY!mHq?0En1u(kJa^*#aj*_b-G^Mit5#ONsFv!EX{EUd{lv0~M^1$521XLWP1 z^$*~phD=J1*gru>j{i`*=0CSb_;tOGZlTDYI7*9HkY`{N7h$EazSj0WWu)42M19bN z{rYH{7?h)4YRE}cI`j9>E`!5IZafT;>-S~q46SW#j$Ti0ye{{M;~6m$rO8Yn5RF2n zGz0>lM@fnK?p+|9h&M)(EF6gI5kvFh0k(vvvM%5)`ki9cYH|vcQxnO_QeBWP^T1+_ zITVOVr#^VhtSA11OvVs8E;97zh`=LRDsd#*J+yk!E_m(hb?SJA*2h1RMXK~ROTTet z3*Oncy%O1Q6Guyb_&ciaZ!6%|X~O>Dw~9G=^!p zetUXCSSD zoS*@Z1x^W}F)%R7G@nsGoi^OYn-d+n8bOOD-9W%Y@W#?NqX?&=Knl^G@a%)EXHWJ} zAZ)NFn)&wD`Bk9j`P~%*+eF_UHi!|Af%>aw!;0sl!66PKxSmA7{X|;Uie8l-SG&O~ z#9Ue=1pej-1_X~r7MUA#7LZ-Zl3cDEBE4ytdi|GJv%~O%dWBX{GLyE!P7p@USb4)z z*cl07z~rRj^Tj-*)?yCTzV#OQ+1qDCS7Db4g+)O@!xs6YA+V&_)5=!-lt;}tfPvd_ z;?u6Pg3Ec&0z4TttN9{KQPfR_EfN^6TYgS z2A(C_3%#=A@*UXwL2Wdx1JqDw8%6$iOyW};B$fZb_M`sSu7!&UiPG6EAR4)fgSqOZ zSgQpbGge&nXDcDq`Pres09OcknquzG5z2fXu8@n ztk!hkW=2;pMT2i6+hghd@Dt3sHJ;hSRIZ)p`w1~x+BkxA$*9_3>6)-gyWC@dPIPK?f zr1P<;6OgodcqFBy4dzdUcs&m}8SywO3JUY>&%l#bb(2RoRKL!OLdTWjd5Q7E5(?#w z2P*V{q>D64%~5Z&9C~|V2jp~#y9zxZNmVSTgv02Ju-fdR5nJYuy6LRmtc)#fd3kz>>-qsVJ z>H8*cQjonX+N|`lqVpwS*VY<**lc5&~iq;Ldby$#H;1@lnJ5_-|QO0 zTw|Lg8zM4S0S|gYx2e{o&nTQWAK%)OigKh7Ci8rFxOIy+dec)w{*4$FgTJ@Qc$81cg=36D}-;) zR|;eB*j{p~#KD+|=;-1`e{jpR+Hr_t`d_uD#vRYk4gV#pO+&+b>lgUz<2hX0<=Sct z<2r4_nxqx5fa@_xK>>p#A|_;3*+E6pM3P36F_~RKUrklQLz6&U{E*`I9?8VSB`f`ZK(4RCjPLv4Sm zitE4<#@ta9Hr3w?=rs|L?wP7G}3E z)4|=k9|CB_bzZM((FRyy%!|^)FZf0KX!YLbn};$7G2RAmubAQ+QI+le)!PG(8yghf zJm$=oS6A^F-niN0_atb^OHy4|=3h_UZ;VEFn4`%`3(b+=o?f>S(zbcGY zARbVm*Sygk;-M?|Np#|LHCK^#80}Z26{dKOv&qL;QW120eSJxn#!TptWlOv0&R*`xf522x?GS0x-dkTDWU~+}EE?K`7#EZ@j1d1!1zv5awwN6*O5Y<8HH1O9*1k z(a&a=7*ax$YH)XtjqY7qpUc(HUi&t(`)$Z%ACEK!EuA~xtHBPpz6~hIPwOmSJ*GAV zg)SEIQ#;OOfb3u-+R+XyoT#?8KPLiL?*1Jj-96n^u1{_&Ywe_25O38ciW3X1 z$(ZteA{9>_HXvcuTF;Na3V>kY;F9iJmbelxGOVWZq<#g!ASCbiV>f*_-z*>S^z^*l z0}2yx0}4hkZKK)G`J>I#Q}iZX^foX?=`3=HI25o((#PO4wGsdPVaI1|#;&#~TMe^|SYH2+| z!Dlwu8H~S!nuM9e6~2smsX#CQpwpqGo!zPHM4H?$_OnNN-zr#S`8Ztib))LUr+}V< zuyQN3-8xfN0@;;^zoVR>fh!a4^vWm6$gOF*Rl9?ZC! zCt9n4v1$%IOyyEEHzDV!-Iyt0`Y-nf*C=G$yve53aYGR8PDJgDl03~&h%Z)5dBC=`I&54yiNV7{YSL=m`<+56ME8PxHn~UHESv&$N@N1 z_iJ0^2Bd2;{Tk5{Q@M0{9(aI`F70H+j)@}a5?(ZWfF1Ah?_f-KVRW&ZK;-s7F)&XX zZs{0uc{-l?M5ZYaz+M75SP&u-Qoy2BMNM22ixIAR@J#9I8WGlK6no$IAkpVOk0%ZK z`J4RuN_(vMS|GS?uB$qfl+Xlns?n&Z)RZM&sK3$&*V??WNJ;fhkDTBpj=vxAF0JW) zT`1$NHKX6cDDxls7Ut&O8eI=VquL~-G3U4MjgH=Hx-BVAHcquC0kXi`isg=J#hh9p z#$xi;WzQsr3o1r02e%*(4QW((fvFS3m{UG*a-vRU=5L;nZ+t)4-PuvS=l7D^k&UhA z(O7QqfM#68pJI2S)#kR3o<$MvW@;M{Eq1F^_Npin(J=42PIBaRq`p_~dmRe?_;!|8XqQnnj^HR> zDidC+9QFPU#KZ*L^W8M+;@()Hd$r91_^bq1_R!nhKW~h*ofLgdzb7oCQWiLz7tMw$+n6y*p0?Ue^!62V$>_B4{y(^C(R-hAdt3fA|SBPlEa%EeW8-*=qg zK!hevR75lOh;`agXvFiz``-+ivwba(*{1wvH}%&CPNvvCwUdO&e@z@5mlLyCCKxnv zb%yZMtOxV#k%*>ju*%U5R1Eb^q5-^|ThmHN{ z+P&lHbw2Vli^pf8SUT{aJLHOh``TBtEcwU_#w_7wq|nLP*^&E{#3+umFCk7ukD(13 zGlhn&a2=8GNnXCfrA4f(%VPPoz9e~f@(ASN?vMK;j1K|w(! zG&yKf*QksXQXdw7-n(Ox8o6D4Uz3)5V;`OA_Y#b^D%~Yg=94+&yx~HRp7}|-0kXM3 z@I(`O-G=LvzudVl0?NuFJHNy5@8}>`rRO>f3GSSjz#t>b(yZF@lJj0nWH5R75r-kN!}3Ian0jjs*$AlFo;sD=sb~f2YgP7C1AbI;zi# zF!o~|I%q1o#(Z3~IB`4RiCo;k;Jw?)S_G+p+s1WM6tCxBPNHDge1!?J^V?fDPo}1( zru*$U*H6t(aD;?}gF{21i#GKg6^iun2?-dP;JDFf)D(pd#@LE{Tg{H@KL`T(UH(kz z^&9oKCst*rRgX25T@~e9-Z5nQR><5IEuA*=JfLH}$ znhl!J_rBGjvfT-xq>0D$q6~aXi;vx(O42{A_lH`Eo~mm*x?c@oOV;$Stm#a* zDyn8Rgc=D6)lN6EJ9~RQ7MzqkJQ!!aoM-MWvuvYpX{*_4c}Y|t=4n3$>2h&VfFwM)m!|wQ6EKj30-4a|saxc^vB0UOqAUlPWj34qt9+6uU$-*bv z0|VN$Dc^UJ3$F<~+?|Vdz4@~5-|!o2~kL7ZGc@;9@_wOo> zm)C@YHh7x0>WJxR_1$4%+Of~x93ZGR@YyBN@Yep{uqopKgX;yhI_0PjYE2cYWE#2> zhC+1=d$QE;(@{D^8CDWYbFNz>uM^Y43EUXG1A~rg>s2m>_OT$ujN&<#7Oa9oLb;C9 zqVNl6=eW?{hG2ugiIq=v_VmD%>x3E}kU!-l7dxCfS#7eq@-w*h7j&u4VDGNpgE6($J=XWfgI)4>J-hy`$IX#-Kb7zZK@3XqNlqVjp_8h7B-~d)rnwj;qX>YPj z%eiRQ3bE?7f03DK2W_u*#F)Oy=xWOodfjEEM0(w4W-E(8A|li%xU z=G^Iq%+GWwBb&eIcrh80E{RTXkJoC5otoZh@ijGOcpwoKkiftv3flW}pE8bT3Lu2Y zqVa^Fe*M8I6$FoF^)o9932AU>ETsP{N_tg}Udt_jaGBVm!Id%wpL~jD>4&aU=iZvu zOc7d)s|Tjo@(%TFvG9mOX~=v^hPUzeBCTo53f)p&pT4DYLV>|wa~q1juvQQ!mBsHVX)oMk|mL{e`JGWb)0r)?XPe zNmh+OE)uxz3|?On{!FsP2gv^A6`RF^Vv#DP7*)Qw_)Y1`L<`fch3t zMs6`Am+Nh-t(TLJ>=M@NtnuH2$nEVLEoUZ=tY}h6^bjtA?7P@i;mlPj@cE?q-BGdU zuU5Um7IrMObRqQg#poOeHNjPa;cwEu-JjbID*YgJE>$vDuhN^7@od#$>; zw}&EOCk*z!!R54?A~iv>M{VPuiXS@cw-#hOn?Oz+|~vtUjuf z@K%u%bK6M{&z4#&KH}X!dWe-T9znx@=SKO#2PUwp zN#6S8Pdn0_O|(>_{g+hNm?~c#!B8|S7#<#;g zu%<(`3mA{Nimhrj95%b*JRT6bY}mz_ZEjUufc^gn<7GB{o^*VB&E&JU0-2$n7oZ&_Y8K5cCRnfyb#-NYgJdQZy+*xVK~Ru-$Z z4$jjXb2>Wt#sjhU4}1E$+Fu-<5YE1fxSWIDVPluB_Y4t^Ja z{QF~wKhQU$0F1mUz3Jxmx(Xzd-?jIoVLi6Vd9Ud=Bdr?!AjQUMg_Jsk3`pQ}WqLu` zey@Z|N=l7ar!7F)i@dJo1o(-JD1k6Ok?n!uzAuvpE*_T$G(h19>XHbfWDy}3VR@d~t;5+X8o1sg_fvZ? zFlYTy<@h4)aYJLeDkEa%BO(WEEYpVLlbP zf-Xiz^QzE*+e|dY5l_1kb8uHS6_tOXEV-M)_S+C{)uPp{EzLN@{du+Vsi|_aoEME; zhvRs`useRcWvW^N)6S9%)P&0GPKW!1p4}6#g1?z>ft(-}fb&AdsY11pfA`Da&&=Hs zg!?f1OAsA9<-5Y|@f_b52*3cb?z^5}-1LXXe{f_HLZhRjt6D6Zv=GcyDn&V!RH6f@ zn1H>05rq7yV2t&*&Lk=*5Wnkwc#n)R))FmAu|`FXd$#cYYAJrd;1%jSX1(4`352Oy zE$n~$NON<;zLMSZt1B4`O#EU@k8bPrg0FVG$UNGwMl;Hi}@hrnHFjbLM6)T~TTk=x)^%s^ter z({{~#nDN%Y2$sdTxWokBCt28vpSu0*BaW$zd;pFxG2=RM*sa%K3Ag6nqbKs z)YV-Og zFmEMQVF5YA$;tVAwPBr-f&!}9n-uJ|Z7S&++i82U)NR80;dX(ocVJ+Wy~UGlZR&iVgJ~znbqJ;_}{*xA%Xvf$UHVqrBxc z%Xsr)nZOI)(Fcu5&Q9dE&j#~r9Tywt6sa6{G@Pg?5*@xUcFp!FZl77T81eR9_<;(9 z$kOqQJXijNW-gz}d`z*pvAYWgNE#j<9$U%kAlVEf-5A9TA#CH{b9B1d?~Bb?hW^Ndxlmz>-J)MTVPiwg6Gw` zBvxeuTFe$=z)zJnYiBLlL zhm;8@JO-HL|HBIa>Xvw(Z2yY6)L;W;{Kz-@die!5lv`Ri3vak53=nC&F4lHFpI_a` zJT2RYiRU(2LJw1Q{ZysL!o&oTlar$obECo_px54c11VRII>BcEWUy`#xh7XKYX!s& zrDr5xJ3v*kK$(J-6%z~w17Quw&L&@~w?)aHLIgf*RG(30q2JppkZvX|I31jwgW}>a z0Pv2oR$V@&+LBBuCDce2g`e-94Nm%@5Y-n5Jo#YONy>FgcZ}@WC-h5X?qzePYuti! zvr^<$JnmG;`ses>Af5KLBxDNEh&ULG`N@MV0YRV_KYPr{N>f938p)O*avtoPzjOj} zb&vVHO9mAOzb=}6OTk`YC+eW-r#tc~Y^cmXof?M-Ltm2#-o!jZ%psNL^7lknSu+ZE zX2m&s05V`)pie3pN8cAmM5LIk^TC!}BSHoQ0N|S1x=5(F;K}PktRf<9z>YLxBI{9I@vt4IGl`O$WnQGdv9!i$gD(~v)}}Rfrwbt z!m|QJ<>k;W?3;Sir;%irZ@=DtyY`d8%R!37M=2*eJ9`?Tg-pn6<`5raJoSRmY-Z9@ zL*xFqX5wPeJbQlW`e(af232CF!Nnt%CtrF_R60t?3UrK)5G^NK?yW^Y>$9rI{W?v0T40& z##lN(0B~)@TyMxa&lp3t$9OLK)9vRLt|Mfpt?ELar2Gg_R}DFigO%QRu0!(&TkFZX zlMxVwoGQyhF7Uf%@i+w&&FiqKGhX;UYW>1rK5dJ8I90!+c$+8RKD(+iqsq(}h@p zvu5H<0r#fjTLt*(uf0=uva52$!n1-JzHw=C)HT`NZhfRJ;|^*sQrWc32}8$iy#Mry zSJfF~dLf&hP&Bsv@s{I>bvXh#p7{O!$n}+B14<32+P2S`rAI8tDS2R=q_{3gw^-rt z;o(Kx|LE<>pN`l=y1KT18b9l$h)TMKcS(Z$OEoIeHGSD*ik256Q83S=@Pf0>R<9wk4bp;AMGTx`~{!i+JDkH*Up z(UGN}`|bhuKcWBYw;#!of4`>ZOSGWZ@!L{<$Aia)qV>4amkdLcbfJB2zFKahr(Lb{E^OmSXY@1gM9(_**YvYb} zPmQ<#G7Sz6_C~X`Gd5h@N8wKi|8_2jDmnB}<OFrOTB&G+WhUW$K}Y1iOk z>9u@d5qWE#r|!5D&dR=L_itW50}LSQW#FKJEN`MVg#H}oIB=uiPEYFVgIr;M<0@`4k2NjE$W|AaD6(i3p~ z3GAq|=LW^*3sdrkxQm0T_~3wC)}sKl9g!G>L1unwgqM#p*Rjio9y; zZ+X@%GB)2G(D=Sxu~0~^p1Dt(`%(Z>x@?(dn>I;|5H*0@@Q_lNqoSix3;W$&1WOpr z?-rX^8mz_DZa4pow71$?0@59HXB!9}Y9H?XyUubD5ey>y2Artc=~L>;%F4!H^>bXr zG%YOK-TkG>$j?by%k|O2E8jYWd7;)61-=ipR;1%?gM#2I_4Vl@jOc3Ry1t)I z7~!LK$$l!+ySbMSFLbuyw{OT9)9 zMfC&q$VB(vIsZ*w1gi}=bJ~D?h1XurKU@>L;6L`GcJH{a%K!wi&yOH@jJ{I)_L$Tb zgl)hYWpK;0zV%Os{wR;-1BSfwjOY~{PGjVhB<8|*7LgQ0*(&>;=pdb1egm# z*WL^wOzVvIn8Qv;1bm@0y{^Sqnyx?~3fO)HZ={-zhdIL*T&4+TA+PP1xYw|j(6y*R zyH&R10EBA$H{Y<4Di;Ci1SEZ*C(=^_!Cv8)E&7^hlJacu3krHsobUq<7Nt-tiA>k}x76?T{33K%bE#By;|z z9Zj`$OkioA^rWXCsi9Stp^XVQMuYU<8c|#L%JA~s8X^+eBNG=n5)onaXU4s6@`;?$ zxs`3ZKZ@M%RSH0Y@o7nFcJ9?B+k8Z~W1kcHIJUF#7Z>>`1q5USpPr+(>KfLV*~a=t zlA}1xw|mPfJFtM&)r&x`fK4Nx^=^G4lZLY82GguY3sK2oX)~TC3+D-g1m^;uC30#a z7TaDSP1{aymq|kA#QUj-#Bp8XLvWV`PU-wBy>u+38!RDpqRx5ZhNWcmILgxd8iXLF z{0Eoqq3y13wdd5i5%o*M)q#0-RM*`q%kAkh&AWu}z2mDbUozl}j@e5rUT|hl_HlYx zqEfZpjEfppyzK8+u6%>x@frW%3czoRYB1WeB=9 z58EOsIWJ52`nHE3&q>&9n*J}KINa%Do9tNP;TahuY?g;DdB!Oflz&gVwxSmGBLG>Z zFhxP@>eRxso#RI6Vr!%_{7VW83ZR1<>6$B`&F!``N%k$b=KHKp3F~Tmj+DBT7rZeO zO)RQ-G9&%klFt-oT9R>NzPh=<2EPO1N&mePT<##I;o2G*%0&>9=VM}y<$jv+0&LAE zqHg0eM_R$j+1dI=a0f2@Q_PgIA9b5QGOCyEujHoyLf@!wjKNcEW}f}%`@+4?h?}Yc zz@-R2_Nr`+xl>2I2A#f3Vb*tBsK~cWSv!yI?O&Qt!`x-***ei=#KW4ZO9xI-*2^ko ztKmk-r!8VSd-4ea3AMn-a$RL-c(+*B!t1*g{BpKUqYw!UDixXOnAgF>YO8B{qxC`? zI&8rn(0_k@>!O2{s z&6~A?0s$1JrKKgX-aW2|3Q6X`SmsMgv^X9oyAdAu7c>{gsZ)q3XytR9BU>lCYDSrS zHLcSXdO<@b(j$0dBQ`a^M+T=Ji}gi%i`}?w7b87U@F)+4aZOCkVMNmki9k6@`O>@| z`>abV5C%}r*P}V!WT0c4wOR8#DE~@jy^d33x&F3R%$kL%}iW4LN@6 z!n?jY)f{yzTo#z>l`ps$=;X0X%MHfE%l2aB%7(x^uvq?u=61RkgftQ7-rPUu|xm zpn)_SAXKrZ>l#~|;j>odsseyO#A+|xEGcE!cQ|{CR+;BkI+C_aibH@HBOP>gVd^(+ zYnl?zFgF4C3orVAx}T5k7oN}CTRZNb3E`pxo5&tk^H*rVhvZP=lXJW)co;7;`IxNk z@pAHcRvUw>O~~bp2(3vxpv~_sW=y9cxe+UmzV7;97Q0YB8-Qq0{|r^z(lL__3ibfr z#eRFPAqQNfA&(T}FA_?4fW7YaWU0%7onH?d^b{~Zbq>UfHElG!!=t*JKSQt3wc1|8 zEuCc?Sjay(MoP=%BWgyP8nw}Wt-n2E@3H9mPnn1Vr_bRb&=m%I_E^nW^`h>_9dLAr zs=IOj{$0an{5PfXX^*s)aOoYj)D=rrRgM)|FPx$;8C#UmX)OGk!IJjTQFN@ms)SJXNV+Kl=En zgP1NVStvhS(l<7S*5-B7>qY*8;RCsWR-7Dhb$0Gq2|;nZ%Mqhma;X)hZhs^aemQmq zvM?L~D*FE5GOz-9)Z=(FEVE>&g%uT@lrIpdVCZ3YS631#<4XSq^q(gf6<#9gwj4kw z3@u~$d;hhzA&V(IU{}>6B9)6h*$&~yMaMj^Y~MT;7alh6-kw|Msn{h~H$j=6zdJkO z?!Ve;AQ;hDKF077cfya^gCi3x?qJz$Yo=FsH@Db(izS+WnfxCtWV?Pv=jfb)_)7|q(|`a)_y(Qgl={8Q{s)Nsx!OIx zWERo|PU>-$Ig|$^oIC*JZUNQpAHr!F9x2MZQBhwlShV40vwcLxnr$oG=h>IPn5tEf zol(InouyB%)Mf&ZHWJoqO~d|FLkGdlwFTSJk$o^gbFtZIjWl_D)lgBETu&7veqpQu54flgbsY4FjO*&r=*s+1|Ko#St0nUVWler^Yd3>w^isi z4?8<%x3krlnQPSL{&ktqiLUSoZezUiekbwpeOX7q;KRGxmnJ{Y=mQ zBK!+%3arXf9VcMVagb7xl)NUd+8FR$Xtw1D#$>i{S?WpzSgz4g)W#NTJtYh*tQUmf zFs^Qqr#r)|Y z$l7Z2E3-ggfDiAqXV!J z0LOt7gF3<3SW{mm5d+3_xVJWPVfJU(pr`bjo61hC^o;3|^UKQQ22D0xsVVc)d*^I* zj&pa0kG_a<1tHNQ(g2!lru<$c1fbYNHva6wN=ms&pMib!UilJd(Wya*$f! zO-PNNnT7_TiBc!z zf(?XHyoY`;EK^eE{ZP{wuvvQ+1zf?(c5!r^oVDCX?}47cl?ZH_45C<}|F>f5_*g?J zM{OKZSvpJfboM|^EI2bNNVf&~NLlPmAU9MTvEXNdQO3!|#qJXzw>ZT2SgF@opgDKz~D;j>f48X;T-qw}T9 z?TItj5Jn^RG*| zoX_nPgEH2sBQe}LY|SMrHmU}GDi`M}mw-T!8nl$@F$==WGuQCOQvTM4Luj%?yig%W z!byu-UZ-OmUjqCS7pxj{-_S{Tv|~R2eHZpy1Ineqk6b)XLy#0pX92j2WwBO92(%P#{F)LiP;T1cf%YRUYD`HE40D`Z<0?^J3#`9Js;4ey`94 zv;_g61&u-I)lbZ}Y=G|yuXAJ?o1@V0GW+TEgFOq2q}yRIX^UGD;;#?Y0|uOFlT6Jh z{znZ>mx){}V^x`0O@Tf6VcJ>_qRZsjAz$bgJzmHE@+P>Tkyj3NP2Iah@6RG5V1KRp z;j-XZcbKFvVDcI0ZqZq&JN^HD&U@{<5K$qF*|^a zl$KsQbdFX3Cv?_waBr5SIqHLkT*OsZ8D!<+FdO-5+W}eSRd2uH;C+BpFA(W|YU}@t zVl9c;XlB}2R@eB^b@l9a{_kjd9MDF&H5-9lWwGh){oLhcT0aH!sxW3;34sib9!08M zU$Sq{kB#Hq%2|XGdA_FV- z?e!vW4`quMvw3jsZ&r9f6CV-e=Gf5hBuY!4f{F_lrTq;ZW$)QPdQ@&SLueTY5$;Xo zE6~0Nv@|SMIZtH06Ds;cUs76|ZYc1<363W4GhBgk#CUn&6s2gWK@8UNHtPA!Ro_|^ zUg~9y!}&g4nWsH%ci>8?YVUDcw&B=ss@nll7z7XqXp)?(&jLLll%1bOHD_`H+utJN^-M>qH{<=n)+ zdUpc-LRY9nJjh`UDfpon#E~!v7;2X7)+%2sWia9b9p$7|>a0(IeomkVG#}jNcLuLo zI>YO}2@UuS0M^6y%rR}$%x0+>cOr%mjfF+Q!_#wXkxjw)=#~_CbKH8ZAL^x24f_`V zdRRdY$M=q!jOxHz(>&$fomETzpJ6DhV58eXrrqfrZaC|lq$_p&a@DWt_wM|+*%m;c zK0jotyxmbB;z9sD%mj|q)N%w3DIoa5_*NCDW))eJF{3V>F}e|u@xw6TSD zXMBj;8GN0#-a#`-lTrf*rG~?Tv2y9_DxHrYr{?Q8CJCP>ncvx3%*+fvr$9DFL(pZ51^kbS?g8Gu_j@*;(KPuHJqZup0Wu&IU~Zh* z`^h6hed4+$kid5NHH+vVT-GgJ6t?lAalA z;wKR3oz%bY1&CcKS|*HV;6qxgfbrgfs!ldUxDB#( zbmk}OCXfEx+39@j&KYQoTSxZd-&HD|-JdFF02;gz4Y4iOEA)~M=|}#nNT_%QyxutM zTD^PsZu^VidIglj#a73%&`1m4gM=TBoq>ij<3H(@`2bbgxHm4qw)=vyd2kRwrq{AGkTPU) zetX&d-E<`0g^F--adDpnH^R|48wzy)@Mt8u-tJ-i$7ID-2DM*A0I#x*6YC0(xtE4R zSjNnZ`f$Dy=ohJ?*Ly1YT31arYsF>e`-qfWp&6k+{}P*4(;k?fP7LIQfe#;~K_GD2 zIi;ER1=XDWQgEj~$fdDO2uO@U$pIbQHr;@Z64GTM>7hwL-Ojr9y41Tjuw823F|eIK zAj+JOuQP8EP5R=J^cM=~Tt5f`{-d`|B21K`k~fE;q;zns7AO(oTIM#YQFu)3eZ9Ri z5H_IUY+Jj-S4cXR#FHE(1k&65(6Mj^dG2Tvh_nAaipTppBD+M*q-TlD6iFNOp7KvJ z9sx_F>NRqaJBe83+5~M>xJ`v~SW{jg?$l^}f?g@Qn>!3EOM4j%3H;i6c(^`egX-|MNfhFAex# zwaUzV1uul8%rA>eOJPI{QSw!ckmtdxq~&vO9jurgf)V-mRG(iXl3~?SF%0b%pW+T~RcGM6SeY?5v-FNpI2i0S>OK zEl=8duH1YjA%R)5!|g?2#dm&n=7${k2!l*`wCc%s-bTO|9XJqmn26}l-g&gKjU40D z)YSgcfnw=Qk(!muiHoF+3^p+-xeJLNP!$*XN(qI0p|#vGwky0&je+ytUo5cEGn8un z_Ld3<>n&40xaTVF>gyaHz4;pQ7no1fA8^BO?G1({!>XpnWU+N@ zLdU>zr`;jMf>9veb-L=+I(N3z7Is~$s!BggWh;}zPfc~P*>V+aP#CrFR3x9DD;|F2tfEzESkNwhyH9cu1kVyIy z9Q7r-ii&|##cu@IeM_sZy)rb4N}ijA@cR9Nj|fh46}u+BN76E5O(o9ezz3~%p0~Se zjvSUnMu{R|^CnonyllOlSgwnTzP|o)``o2mtO|6Vha6uBZ4&@raiU#r=ZJ)Yfx;il z@LR)h@<{8qgD}j~-9T#Ur=MN^01(Jk3_h-_OYXDU49l01xLo+|w8z1rKFdOm_GRVdt9t(NUY(bP&O%#QYCwy zB3<=TnFW`2M@-|xuQk*rTh^MransEezM{mj`4J$LR3phXKqxcN5e|xrqsax}gT(y0 z+L1#7q0$I#CPuc$1%CU78mzArV!UxXyq|crBywvZt<(Pc*^-Xt3gy$0SIyJCKxoXy z+GfxF_0>f6;<1hQn-D0uQnxR8MR$0FAv`Y5xO<`6!0jUh-o%X6 z^^asNQOx=YFnt9t7YLkqe2_aQH}4#t%7YeK-azIf<3@6FCR^Cs2h%M)ljl+GmRDxN z&mJEJ6fyui{-z86>cCTEKA1d0Jzwe|KTa zBOIWQ@ne$;O;(m*e3lRdcBZ4Nzt@JlhS7^^`RcN$oNKDoTmk%imAz2^0nlj7Aa#35 z_=O2mETrjU{g=l{JHBqY{CpI<#uOkeeE^q;)+FK|&x$NHCC zj~={7@FJtWXnPBN$LP8cFjA()0m9Fz&9(6LqZEAvvWlW<1x-h{v{*qVQB=_F{|FTd z>h)ntlA@GgGto|~L95Xc%xC0rqaUTDq?GqR_|WG*3l=S=xTJ(t%l<;nish77R51U| zH+}9uATxtK`}SkC*#OwSV<#EuX>_~pTC`d%hmITpVCSyg+|aX!`;7;{VzCe%9nIqT z^LTs7TkiF-(a}8e;Dbzi{yBQ}=*je%uV8C@e2c}xjW_h$IoEgZ&fEoy+}q!K{{vR7Udz41hcSER3`YI_{+7DeBaT|s z8VxG7+V7&(Y6FgASy?$X=g!f!>otD&9rNfPSTt`AYqD4Hn{LWGFY0p2$(l-}U zU0uVXB}?7U=c^q}N&cM|>ioNyzV`RN;wu&_vRCru)~|VH%4F8%tYp@VmqOOYD=i=V z@mrYGYBf4tI5A-=VssAd<{GYz(-0G`^jf;ctFhHp6CdHkpi>gAi$D{=XvrlaB7&zT zO=QKY9Ewhzx?sE2W@B@1F5}0H#$eE6Fz9)F%wyz!wH2$?+U#R?@7|rTFdh339KdR| zvTy%>()#vAsZ=tse;CF*qol)mn5T+4jmHQ>+T&foS|7m`0arHjD74; ztX3-}rKRre-LAV1olZyRlw>AN7|&N2JHIyY9%McduR~CU)Sip?7fV^lA6D zzixP!=bw3sA%kz@#$GotWbkb*_OC0BI2@>yYSb!?-^Jl@1RTeRh;RU`mgZyOY2^LC zqv!S4lVmh<--zK}7r6NA-(X^5u~_(g%NCxVJc*7;Nq#@21JpYle7x}!o)|lpt2(C; zX)y2~_l#iA-hE#CHP?=&B>&C}b^f)suLFHwX&Q_A`g%UvxRK|deu|rKx(Q=qBI&8A zA!(zpHo)bZ5B~T)m8U>KTyz3;7Bi0zxr(uW#u@XPC9n%=w6p(G&Y>OuBdGG4ML?< zG9V+99XofSR47SFNuhoFhV!NaGBS8$!2-sOevEww4l;i1n1I^2^_y+1duIb@ii@eL zt_JWK$du${tX3=K6&1wC#kIKIAA??x)9C~nKIv3dRdLPLT>@$|c*ikbrS|(K?NB&^ ziep$<7zy$5?Af=E!M6?yxLxhqwR68N2(Ewq9aB}5E)vqldRhP|$m)RcClrnJLWTglutpE2l$1cs+~#9}tnA9 z9uER6Oj?Z=V?rm+6rbXM9_Yi%|C!3}{YRLU{dZ<%|DC-Dk1*rmRHi*}6K6_Jk(kgi zsMC0!A`J$nOq{^7x3inHLBpV1e#=|SmQz(-O;vR@OO~zR_SI?Qc`r|QbYil`v;skRS zEacu1!@Vx%@V7k>YPFi7Swnc~)md!Yk;lpWe6Op0eDRE<-DdZBxvtG_YgHWY9X^cM z*ccvvauT0?@dbrNMHChlk^9wGeD}To%YFmt-(Zeu-@ZLJ_qmCeU!BFl!-uh0EMB9t z==RY7eErQfYE350W-~gSjscmOy!^^6_8mCTI1!!C&fWg|w>gr3=Y=}|TGQ99eP2@s}SA5mBgAYEG3D z(7j`OR!$j&rt#_yo83l5RT-y?3yF{EK$tEf=!SS2*uOvh(zf#D)~#Oar#v}<#Y>m* zU!%vMR4D16nZdZxkG1$%TCJA!v@{MLI>fctcu&mt&&Xi&|L3|Vz5VIYy*qc`c_%Nt zJQKY>f`OTt7YvDK%xX9V*&!i;A%kz@p^*;+wLMT1pBRr`uV?Ynzfg1TTtJ_&z&nnS zk?o0zin}0=RaF(OilbJmW&Z24+3?=q_;}+d%wMz^oleJ9ol|&d#SK>S zKoiVYszF&p$yu?Cl;q@AZNC^tfBcaNlc%z2058$Q+XpLWrRGn^U@&IVKq~2_b}N zQ+$q?Hf`GUbGAbWA;hnP4X`&Z^?;*saW*c^UX`Z?+5tKs%;VPev#xQwCbVrALI`n% zu>lsq+_=;=E@qEgi?0!rlZFabPeWC+0V>WHGH2s@A%qYjP<9#$lLfGHe)QxTIXR*E zQ+cl8l%w$gRpY^)MXBD$u|fzTgfFgvj+KVuS?|xxeAsLLI@Ek zS50v(u2GY#-Z&tz5mR$T$%b6fCxj3pIIg` (set via the "stock-id" property). +property) or a named icon (set via the "icon-name" property). Example ^^^^^^^ diff --git a/source/entry.txt b/source/entry.txt index ffb7133..73f8704 100644 --- a/source/entry.txt +++ b/source/entry.txt @@ -23,7 +23,7 @@ or :meth:`Gtk.Entry.progress_pulse`. Additionally, an Entry can show icons at either side of the entry. These icons can be activatable by clicking, can be set up as drag source and can have tooltips. -To add an icon, use :meth:`Gtk.Entry.set_icon_from_stock` +To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` or one of the various other functions that set an icon from an icon name, a pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup. diff --git a/source/index.txt b/source/index.txt index f8f4840..dfe6029 100644 --- a/source/index.txt +++ b/source/index.txt @@ -54,7 +54,6 @@ Contents: drag_and_drop builder objects - stock Indices and tables ================== diff --git a/source/menus.txt b/source/menus.txt index 8613306..84fd088 100644 --- a/source/menus.txt +++ b/source/menus.txt @@ -37,8 +37,8 @@ Different classes representing different types of actions exist: Actions represent operations that the user can be perform, along with some information how it should be presented in the interface, including its name (not for display), its label (for display), an accelerator, whether a label -indicates a :ref:`stock item `, a tooltip, as well as the callback -that is called when the action gets activated. +indicates a tooltip as well as the callback that is called when the action +gets activated. You can create actions by either calling one of the constructors directly and adding them to a :class:`Gtk.ActionGroup` by calling diff --git a/source/stock.txt b/source/stock.txt deleted file mode 100644 index 01fdaed..0000000 --- a/source/stock.txt +++ /dev/null @@ -1,517 +0,0 @@ -.. _stock-items: - -Stock Items -============ - -Stock items represent commonly-used menu or toolbar items such as "Open" or -"Exit". Each stock item is identified by a stock ID; stock IDs are just strings, -but constants such as :obj:`Gtk.STOCK_OPEN` are provided to avoid typing mistakes -in the strings. - -* :obj:`Gtk.STOCK_ABOUT` - - .. image:: ../images/stock/help-about.png - -* :obj:`Gtk.STOCK_ADD` - - .. image:: ../images/stock/list-add.png - -* :obj:`Gtk.STOCK_APPLY` - - .. image:: ../images/stock/gtk-apply.png - -* :obj:`Gtk.STOCK_BOLD` - - .. image:: ../images/stock/format-text-bold.png - -* :obj:`Gtk.STOCK_CANCEL` - - .. image:: ../images/stock/gtk-cancel.png - -* :obj:`Gtk.STOCK_CAPS_LOCK_WARNING` - - .. image:: ../images/stock/gtk-caps-lock-warning.png - -* :obj:`Gtk.STOCK_CDROM` - - .. image:: ../images/stock/media-optical.png - -* :obj:`Gtk.STOCK_CLEAR` - - .. image:: ../images/stock/edit-clear.png - -* :obj:`Gtk.STOCK_CLOSE` - - .. image:: ../images/stock/window-close.png - -* :obj:`Gtk.STOCK_COLOR_PICKER` - - .. image:: ../images/stock/gtk-color-picker.png - -* :obj:`Gtk.STOCK_CONNECT` - - .. image:: ../images/stock/gtk-connect.png - -* :obj:`Gtk.STOCK_CONVERT` - - .. image:: ../images/stock/gtk-convert.png - -* :obj:`Gtk.STOCK_COPY` - - .. image:: ../images/stock/edit-copy.png - -* :obj:`Gtk.STOCK_CUT` - - .. image:: ../images/stock/edit-cut.png - -* :obj:`Gtk.STOCK_DELETE` - - .. image:: ../images/stock/edit-delete.png - -* :obj:`Gtk.STOCK_DIALOG_AUTHENTICATION` - - .. image:: ../images/stock/dialog-password.png - -* :obj:`Gtk.STOCK_DIALOG_INFO` - - .. image:: ../images/stock/dialog-information.png - -* :obj:`Gtk.STOCK_DIALOG_WARNING` - - .. image:: ../images/stock/dialog-warning.png - -* :obj:`Gtk.STOCK_DIALOG_ERROR` - - .. image:: ../images/stock/dialog-error.png - -* :obj:`Gtk.STOCK_DIALOG_QUESTION` - - .. image:: ../images/stock/dialog-question.png - -* :obj:`Gtk.STOCK_DISCARD` - - .. image:: ../images/stock/folder.png - -* :obj:`Gtk.STOCK_DISCONNECT` - - .. image:: ../images/stock/gtk-disconnect.png - -* :obj:`Gtk.STOCK_DND` - - .. image:: ../images/stock/gtk-dnd.png - -* :obj:`Gtk.STOCK_DND_MULTIPLE` - - .. image:: ../images/stock/gtk-dnd-multiple.png - -* :obj:`Gtk.STOCK_EDIT` - - .. image:: ../images/stock/gtk-edit.png - -* :obj:`Gtk.STOCK_EXECUTE` - - .. image:: ../images/stock/system-run.png - -* :obj:`Gtk.STOCK_FILE` - - .. image:: ../images/stock/text-x-generic.png - -* :obj:`Gtk.STOCK_FIND` - - .. image:: ../images/stock/edit-find.png - -* :obj:`Gtk.STOCK_FIND_AND_REPLACE` - - .. image:: ../images/stock/edit-find-replace.png - -* :obj:`Gtk.STOCK_FLOPPY` - - .. image:: ../images/stock/media-floppy.png - -* :obj:`Gtk.STOCK_FULLSCREEN` - - .. image:: ../images/stock/view-fullscreen.png - -* :obj:`Gtk.STOCK_GOTO_BOTTOM` - - .. image:: ../images/stock/go-bottom.png - -* :obj:`Gtk.STOCK_GOTO_FIRST` - - LTR variant: - - .. image:: ../images/stock/go-first-ltr.png - - RTL variant: - - .. image:: ../images/stock/go-first-rtl.png - -* :obj:`Gtk.STOCK_GOTO_LAST` - - LTR variant: - - .. image:: ../images/stock/go-last-ltr.png - - RTL variant: - - .. image:: ../images/stock/go-last-rtl.png - -* :obj:`Gtk.STOCK_GOTO_TOP` - - .. image:: ../images/stock/go-top.png - -* :obj:`Gtk.STOCK_GO_BACK` - - LTR variant: - - .. image:: ../images/stock/go-previous-ltr.png - - RTL variant: - - .. image:: ../images/stock/go-previous-rtl.png - -* :obj:`Gtk.STOCK_GO_DOWN` - - .. image:: ../images/stock/go-down.png - -* :obj:`Gtk.STOCK_GO_FORWARD` - - LTR variant: - - .. image:: ../images/stock/go-next-ltr.png - - RTL variant: - - .. image:: ../images/stock/go-next-rtl.png - -* :obj:`Gtk.STOCK_GO_UP` - - .. image:: ../images/stock/go-up.png - -* :obj:`Gtk.STOCK_HARDDISK` - - .. image:: ../images/stock/drive-harddisk.png - -* :obj:`Gtk.STOCK_HELP` - - .. image:: ../images/stock/help-contents.png - -* :obj:`Gtk.STOCK_HOME` - - .. image:: ../images/stock/go-home.png - -* :obj:`Gtk.STOCK_INDEX` - - .. image:: ../images/stock/gtk-index.png - -* :obj:`Gtk.STOCK_INDENT` - - LTR variant: - - .. image:: ../images/stock/format-indent-more-ltr.png - - RTL variant: - - .. image:: ../images/stock/format-indent-more-rtl.png - -* :obj:`Gtk.STOCK_INFO` - - .. image:: ../images/stock/dialog-information.png - -* :obj:`Gtk.STOCK_ITALIC` - - .. image:: ../images/stock/format-text-italic.png - -* :obj:`Gtk.STOCK_JUMP_TO` - - LTR variant: - - .. image:: ../images/stock/go-jump-ltr.png - - RTL variant: - - .. image:: ../images/stock/go-jump-rtl.png - -* :obj:`Gtk.STOCK_JUSTIFY_CENTER` - - .. image:: ../images/stock/format-justify-center.png - -* :obj:`Gtk.STOCK_JUSTIFY_FILL` - - .. image:: ../images/stock/format-justify-fill.png - -* :obj:`Gtk.STOCK_JUSTIFY_LEFT` - - .. image:: ../images/stock/format-justify-left.png - -* :obj:`Gtk.STOCK_JUSTIFY_RIGHT` - - .. image:: ../images/stock/format-justify-right.png - -* :obj:`Gtk.STOCK_LEAVE_FULLSCREEN` - - .. image:: ../images/stock/view-restore.png - -* :obj:`Gtk.STOCK_MISSING_IMAGE` - - .. image:: ../images/stock/image-missing.png - -* :obj:`Gtk.STOCK_MEDIA_FORWARD` - - LTR variant: - - .. image:: ../images/stock/media-seek-forward-ltr.png - - RTL variant: - - .. image:: ../images/stock/media-seek-forward-rtl.png - -* :obj:`Gtk.STOCK_MEDIA_NEXT` - - LTR variant: - - .. image:: ../images/stock/media-skip-forward-ltr.png - - RTL variant: - - .. image:: ../images/stock/media-skip-forward-rtl.png - -* :obj:`Gtk.STOCK_MEDIA_PAUSE` - - .. image:: ../images/stock/media-playback-pause.png - -* :obj:`Gtk.STOCK_MEDIA_PLAY` - - LTR variant: - - .. image:: ../images/stock/media-playback-start-ltr.png - - RTL variant: - - .. image:: ../images/stock/media-playback-start-rtl.png - -* :obj:`Gtk.STOCK_MEDIA_PREVIOUS` - - LTR variant: - - .. image:: ../images/stock/media-skip-backward-ltr.png - - RTL variant: - - .. image:: ../images/stock/media-skip-backward-rtl.png - -* :obj:`Gtk.STOCK_MEDIA_RECORD` - - .. image:: ../images/stock/media-record.png - -* :obj:`Gtk.STOCK_MEDIA_REWIND` - - LTR variant: - - .. image:: ../images/stock/media-seek-backward-ltr.png - - RTL variant: - - .. image:: ../images/stock/media-seek-backward-rtl.png - -* :obj:`Gtk.STOCK_MEDIA_STOP` - - .. image:: ../images/stock/media-playback-stop.png - -* :obj:`Gtk.STOCK_NETWORK` - - .. image:: ../images/stock/network-idle.png - -* :obj:`Gtk.STOCK_NEW` - - .. image:: ../images/stock/document-new.png - -* :obj:`Gtk.STOCK_NO` - - .. image:: ../images/stock/gtk-no.png - -* :obj:`Gtk.STOCK_OK` - - .. image:: ../images/stock/gtk-ok.png - -* :obj:`Gtk.STOCK_OPEN` - - .. image:: ../images/stock/document-open.png - -* :obj:`Gtk.STOCK_ORIENTATION_PORTRAIT` - - .. image:: ../images/stock/gtk-orientation-portrait.png - -* :obj:`Gtk.STOCK_ORIENTATION_LANDSCAPE` - - .. image:: ../images/stock/gtk-orientation-landscape.png - -* :obj:`Gtk.STOCK_ORIENTATION_REVERSE_LANDSCAPE` - - .. image:: ../images/stock/gtk-orientation-reverse-landscape.png - -* :obj:`Gtk.STOCK_ORIENTATION_REVERSE_PORTRAIT` - - .. image:: ../images/stock/gtk-orientation-reverse-portrait.png - -* :obj:`Gtk.STOCK_PAGE_SETUP` - - .. image:: ../images/stock/gtk-page-setup.png - -* :obj:`Gtk.STOCK_PASTE` - - .. image:: ../images/stock/edit-paste.png - -* :obj:`Gtk.STOCK_PREFERENCES` - - .. image:: ../images/stock/gtk-preferences.png - -* :obj:`Gtk.STOCK_PRINT` - - .. image:: ../images/stock/document-print.png - -* :obj:`Gtk.STOCK_PRINT_ERROR` - - .. image:: ../images/stock/printer-error.png - -* :obj:`Gtk.STOCK_PRINT_PAUSED` - - .. image:: ../images/stock/printer-paused.png - -* :obj:`Gtk.STOCK_PRINT_PREVIEW` - - .. image:: ../images/stock/document-print-preview.png - -* :obj:`Gtk.STOCK_PRINT_REPORT` - - .. image:: ../images/stock/printer-info.png - -* :obj:`Gtk.STOCK_PRINT_WARNING` - - .. image:: ../images/stock/printer-warning.png - -* :obj:`Gtk.STOCK_PROPERTIES` - - .. image:: ../images/stock/document-properties.png - -* :obj:`Gtk.STOCK_QUIT` - - .. image:: ../images/stock/application-exit.png - -* :obj:`Gtk.STOCK_REDO` - - LTR variant: - - .. image:: ../images/stock/edit-redo-ltr.png - - RTL variant: - - .. image:: ../images/stock/edit-redo-rtl.png - -* :obj:`Gtk.STOCK_REFRESH` - - .. image:: ../images/stock/view-refresh.png - -* :obj:`Gtk.STOCK_REMOVE` - - .. image:: ../images/stock/list-remove.png - -* :obj:`Gtk.STOCK_REVERT_TO_SAVED` - - LTR variant: - - .. image:: ../images/stock/document-revert-ltr.png - - RTL variant: - - .. image:: ../images/stock/document-revert-rtl.png - -* :obj:`Gtk.STOCK_SAVE` - - .. image:: ../images/stock/document-save.png - -* :obj:`Gtk.STOCK_SAVE_AS` - - .. image:: ../images/stock/document-save-as.png - -* :obj:`Gtk.STOCK_SELECT_ALL` - - .. image:: ../images/stock/edit-select-all.png - -* :obj:`Gtk.STOCK_SELECT_COLOR` - - .. image:: ../images/stock/gtk-select-color.png - -* :obj:`Gtk.STOCK_SELECT_FONT` - - .. image:: ../images/stock/gtk-font.png - -* :obj:`Gtk.STOCK_SORT_ASCENDING` - - .. image:: ../images/stock/view-sort-ascending.png - -* :obj:`Gtk.STOCK_SORT_DESCENDING` - - .. image:: ../images/stock/view-sort-descending.png - -* :obj:`Gtk.STOCK_SPELL_CHECK` - - .. image:: ../images/stock/tools-check-spelling.png - -* :obj:`Gtk.STOCK_STOP` - - .. image:: ../images/stock/process-stop.png - -* :obj:`Gtk.STOCK_STRIKETHROUGH` - - .. image:: ../images/stock/format-text-strikethrough.png - -* :obj:`Gtk.STOCK_UNDELETE` - - LTR variant: - - .. image:: ../images/stock/gtk-undelete-ltr.png - - RTL variant: - - .. image:: ../images/stock/gtk-undelete-rtl.png - -* :obj:`Gtk.STOCK_UNDERLINE` - - .. image:: ../images/stock/format-text-underline.png - -* :obj:`Gtk.STOCK_UNDO` - - LTR variant: - - .. image:: ../images/stock/edit-undo-ltr.png - - RTL variant: - - .. image:: ../images/stock/edit-undo-rtl.png - -* :obj:`Gtk.STOCK_UNINDENT` - - LTR variant: - - .. image:: ../images/stock/format-indent-less-ltr.png - - RTL variant: - - .. image:: ../images/stock/format-indent-less-rtl.png - -* :obj:`Gtk.STOCK_YES` - - .. image:: ../images/stock/gtk-yes.png - -* :obj:`Gtk.STOCK_ZOOM_100` - - .. image:: ../images/stock/zoom-original.png - -* :obj:`Gtk.STOCK_ZOOM_FIT` - - .. image:: ../images/stock/zoom-fit-best.png - -* :obj:`Gtk.STOCK_ZOOM_IN` - - .. image:: ../images/stock/zoom-in.png From f5db7c691faedb95115189e91622a388684cfc08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 16 Aug 2015 13:52:32 +0200 Subject: [PATCH 029/209] Fixed warning: Title underline too short --- source/treeview.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index 004bda0..a281bc1 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -298,7 +298,7 @@ Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`. model.set_sort_func(0, compare, None) Filtering -------- +--------- Unlike sorting, filtering is not handled by the two models we previously saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It acts as a layer between the "real" model (a :class:`Gtk.TreeStore` or a :class:`Gtk.ListStore`), hiding some elements to the view. In practice, it supplies the :class:`Gtk.TreeView` with a subset of the underlying model. Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, to use multiple filters on the same model (in the same way you'd use "AND" clauses in a SQL request). They can also be chained with :class:`Gtk.TreeModelSort` instances. You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it a model to filter, but the easiest way is to spawn it directly from the filtered model, using the :meth:`Gtk.TreeModel.filter_new` method. @@ -318,4 +318,4 @@ Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :clas .. image:: ../images/treeview_filter_example.png .. literalinclude:: ../examples/treeview_filter_example.py - :linenos: \ No newline at end of file + :linenos: From ca3602577f4f2e82523b5b4d6faa40f85b328dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 16 Aug 2015 14:30:45 +0200 Subject: [PATCH 030/209] Update images of all examples --- images/cellrendereraccel_example.png | Bin 9778 -> 9496 bytes images/cellrenderercombo_example.png | Bin 10131 -> 9783 bytes images/cellrendererprogress_example.png | Bin 13143 -> 12214 bytes images/cellrendererspin_example.png | Bin 8864 -> 8332 bytes images/cellrenderertext_example.png | Bin 11411 -> 11052 bytes images/cellrenderertoggle_example.png | Bin 10935 -> 10920 bytes images/checkbutton_example.png | Bin 5499 -> 5073 bytes images/combobox_example.png | Bin 6165 -> 4856 bytes images/dialog_example.png | Bin 7287 -> 7351 bytes images/extended_example.png | Bin 3234 -> 3314 bytes images/filechooserdialog_example.png | Bin 95674 -> 65899 bytes images/flowbox_example.png | Bin 6183 -> 6488 bytes images/headerbar_example.png | Bin 5192 -> 4908 bytes images/label_example.png | Bin 55131 -> 52767 bytes images/layout_box_example.png | Bin 4852 -> 4590 bytes images/layout_grid_example.png | Bin 8020 -> 7632 bytes images/layout_table_example.png | Bin 7747 -> 7349 bytes images/linkbutton_example.png | Bin 5458 -> 5134 bytes images/listbox_example.png | Bin 14052 -> 12005 bytes images/menu_example.png | Bin 9598 -> 9694 bytes images/messagedialog_example.png | Bin 11044 -> 9460 bytes images/progressbar_example.png | Bin 8280 -> 7537 bytes images/radiobutton_example.png | Bin 6033 -> 5365 bytes images/simple_example.png | Bin 3966 -> 3550 bytes images/spinbutton_example.png | Bin 6338 -> 6042 bytes images/spinner_example.png | Bin 5941 -> 5306 bytes images/stack_example.png | Bin 7950 -> 7612 bytes images/switch_example.png | Bin 5510 -> 5034 bytes images/togglebutton_example.png | Bin 6097 -> 5883 bytes images/treeview_filter_example.png | Bin 30328 -> 29967 bytes 30 files changed, 0 insertions(+), 0 deletions(-) diff --git a/images/cellrendereraccel_example.png b/images/cellrendereraccel_example.png index 37eb15c57769b79ba2e767711b36374ee6527c91..16e539ba52f4560407d0cfa40fd431b80303b37e 100644 GIT binary patch literal 9496 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 EZ~0VwM*si- literal 9778 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 HBme&cNU62@ diff --git a/images/cellrenderercombo_example.png b/images/cellrenderercombo_example.png index dea656a6f0b6342c786a67fad442961f42b3e336..7aa90c7a261a875e32281eefb65b260fd8387ec8 100644 GIT binary patch literal 9783 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 diff --git a/images/cellrendererprogress_example.png b/images/cellrendererprogress_example.png index 50fce3b57eaa3fa2f8d5586a1913d5ad67322500..3f7200bc320c41ec5f0d289ef2fde9599bd6ef22 100644 GIT binary patch literal 12214 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 RzZTvj$Vw|oRZ19z{1;zwNFo3L literal 13143 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 literal 11411 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 f|9&gy{Uf-~-$5p0EC;yr6h%%-S+YXh^viz(�`E diff --git a/images/checkbutton_example.png b/images/checkbutton_example.png index 705d351e94949f19eedaacc7052fce95960439fa..32e215035ec9a2e1bcfa9c2d8aa1fdc62f52764a 100644 GIT binary patch literal 5073 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 literal 5499 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 CvBxn0 diff --git a/images/combobox_example.png b/images/combobox_example.png index 2be13fefc617a87919a1bd51afe4d327ab585356..e6b6b6ff21292b011a7510854584dcd331e895d5 100644 GIT binary patch literal 4856 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 Q@`$D^uOU}0`|;C%0eqTmod5s; literal 7287 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 diff --git a/images/extended_example.png b/images/extended_example.png index ed4167d9ed53840fb3550b0b3f92191819c6da6c..5bcf2ec5a34aeb2097d8905623df32334aabc7ab 100644 GIT binary patch delta 3292 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 diff --git a/images/filechooserdialog_example.png b/images/filechooserdialog_example.png index 9d10fdfaa28a1e9fb5234842b7bf54656af407d3..76adc3c6de82c9d44f8eb86fa8a007aaed652941 100644 GIT binary patch literal 65899 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 drmOn7g~XRnp!uf^ir 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 NtI6G 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 diff --git a/images/flowbox_example.png b/images/flowbox_example.png index 1128cdfba28b0e9dd75ec3881d10ddd9d61bd7ce..84eaeae9de6d8da7fa7f623430342b7e37a3fc8c 100644 GIT binary patch literal 6488 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 PevlemQ>jeREcibF)q?rJ diff --git a/images/headerbar_example.png b/images/headerbar_example.png index d3f0e635b24288cc30a7b203dacaac9e43de4807..277fbaa95fcec12d9b4724dd08bbee7573a74ffd 100644 GIT binary patch literal 4908 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 Np&nSb=AKLZzX889xW51Z literal 5192 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 BIF|qb diff --git a/images/layout_box_example.png b/images/layout_box_example.png index a7a7fec0a25e358cc0f083c1776aa05f4e211264..bcff82c10c793077eaa66ad377478168cc02c63e 100644 GIT binary patch delta 4579 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 N002ovPDHLkV1k&e`Og3V delta 4843 zcmVM1QN24m86nd-kU!v^{Aw_S4k?QpuRcx z+`8{>zu&EI{qFDGci#;J5I_I{e*_Rf009Kx34({~p5g#5AIP3!t&>WEIQe!7vk`5F zksC*+aofbPL`6mt931RZX#=?UFdB_CHZ`&D_z89#I81Ygksw_N_1|oXz)Bn$kh;Y( zfHN|IMItst$Mg5!O>RyO>FMc&g@yHxHUYRrd3ibCe)}y`rcCi!AMNe!e`HluaLuR# zyk7JL_3cIg9ai#4fTde3;mR^;jUBxBz@6NG-+hFKha<}}k|g;|_yD|vAPAVvW}mgM z)oK|wY#2#NNeF_#f2`XC5Q>#NX1iGEjAcM@YMG`@7)wrewnC%;1{MTCz+$oZyq}<; zAjXUy&CTOSvvJQh9aiFKe*hB~{AOk9b84Ax8=ua|ks|}vXn?}kmdPFo2?<<3ZZsRM zmdS)8k)+PFbIYWUh#)L1tY6q4fcNN6GKr#yJ|Y6FWYXYBBn{SSƚXfzrmNeWDH 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 literal 8020 zcmYj$1yEaEv^7$S6p9on1xkSwrxds1?!_I7yF-FoDO#Y#DOQ39D^}dCxC97JaS0Gy z3%vWifBu=5ndD4z_sLmz?{oHAd*A4fYVrhlukg^&&C2zbZgJOw^~#mmhC z!xK*_MQt456@X(E1$?LUlGXRpa<%b-n0r{G*}AwoTXT3?dRSY#c-pyop)fnd(9m9Q zE6PY}`(zzvLjp*x9|l%=TK1?&4Dry(=t8n0r(}{bpM~Y++Y0^4#*&pF>e?7<=?TNq zkdY*kk&uvFlbOW9Ay>m93(mp%#`;!4K}u0-KQ&{OwuR?_(TH(gb$-)#hp#Flko!Vp z9MV31HgYzC{RAUa;tdhb{|2Kq-K{|b)Qe$ro5jn4x zsJV1I6-KSNoC=AFbT>ije>(<_pITiW_BUHLQZ z7k_how-> z$q=q6Vgw15vXhfj#RvN*VYe#I!j{R>flFQ)DTc%2oENPjx^K&|=x zofsnHVH2OcgFm-Uw}SPa({e6K$$sx}@oeaT0tTVu3;FJdj}219+kIBU4lh)uurjcD ze7GkiC&!p5P<$~3hij02$ql+?DX7xB7p??FS3haL-rXQ*ZMR~ONn0^#(x zxmpNkY}&hx3?|xQBSfVj^>gay*lnDsFCfJ~HD8xqu5Q9ptTV2Co^5Syq4RvH`u#Mv zPfA6lZs4(8*RhR-r72fFP^cJ2ub616eHppz!oYWAyul}W&iuxydAG~}FT4xb1D6X|dnSKLRw!vth%bMQ_tU_U| zkQM$PVtS@|W{W!aw>8dp0?aW|DAP2qpaV=9IXOR3v&`kODS@=JErgktp{7!Ui%Evy zk>vXNI=-2wvn6Q#hYBMQ=KI@=uP?bUYUjVgU~`Ay*($RH_ThAuqHnj!tNkoozPaGX z=E#*cKl6q~cR}hP1P3Q4Q>nG`b~|q-Vy8n%TRS-jGe19@*mFK6CE((MpHbZ}DrGqJ zcY4|2whB@qfUgu6!;a)YN3`r$~_#bn5=}vLkiIaaPmNaA=h_ zyE_DVd$yjHb}=Rdgxag+Tyw?ncX$)$=(f)#?ly)VkN)v|%VA>gU`7PMcqLa<_g;fW+DNs)mE1I`2@->VPQd^EdqIZ>=QWM0&xYS zR#bz6f)vJ8TL&th+E*B!oQ-80yFJ{Lz?AO56sITH$f)@EZ983Z$g)U8diqPiYv<0? z&m$4|Zu{r<0MNa?Ll#cXtLFHIyHC~nQ86*okHyR}4{yF(XWSjN#||c_ZCp;~3s$L8 z4Gj&Qdv~m~XV;@DHe}S^*^cL6m7G^j+0^=y`W}Ksh>3}BtCuF}-5eb7wshIBDs^?P z&cuE9Nv*A|RRXM(3LU>&H?3^*<;z-En3gf)ArV#B$0cV+bJYw5fsbD{bU%L$#neB! zWcBkx%6Vv#{Ph}HU$;nrRIS9slEE_>8A-?}2fs7O+h^wQb z5z6n@HsUg03NwEOZW1k?T6Cy<-t&5=u46LaUx1#0f%3gi2_jH?>w~t=*6t)b@QeLQ zIi>Ab*2#5lpH6~FlM`-*rWWSwDzU%+<&vJY2`UC29-fN}M3ve2->%OWkq*pN8l)*@ zU7g6vjU6*E_u86#qj|5J9~dQPAw|!mp1q!*AkH`%i+S5^#XVVJq?eN`nt6w6iYzEd zr55u5{RPX)%F4*f?ZrEC5Bf2T7mXS*v$I=`J*)NE&)7+C_(Z40q>ho*7oeECGN z2hqFmeFLSR9)sGiQNinprJvG%{)W7+ruHI`e)S&*CoO?3;8tEo#*W9JEHc-&(E|e>U?Wvq9&P2x7u8%0 zbM7q`6VgnWSCqw5MMCK-e}C9$%0R1gnoo4B+#fJ$SdEx*cuPkY zT6X&oZU6XB0Q2r@r``WyC>(pB=60E{_1}KL>Dig0ni5nMIeUIE*=G8jZie3FO(ai- zigCb6AKL4x0N{r0CZV#0=ijn2)9RucR)ZFWKXsx(p-?HmUl9s2GEZ!34T4!6`{=Lw z$pLmzRE(Cd)=jmxu(V`hWyQ$K0I{+vje{2a&!?s|tNP4i`!rcpHAsPD^vya0*lK}B zK)B-K`W)&lYUj~x2cn{)aI|M`7P_7Ik$nMIXQ$wY1r!~FtJVCvY!;%3;IEfW=IFNj z;pF640{+4wcxZU|J1F|kAB8s0=-HX7^78UmvsDIo&z{XUc`}`xoYaFydLjvV9HvXC zLN$N(@{zT0q+wXouRo2RaUhtZhw-5`ZMX@3n9|Xy&|I~0z4KaaXxS)*?VnI((XyOv zv6EfV>_Xh#tH)CjF^B?~Lz|bT*-I8y1Qs-&jp(}5PNV4^5wRW-FM&{%T^n@Ys3UN# zG0dU%Xn6(%0=Zot%s__1(t6@MydL&x;ik`#h_vZ0h4`4Q3R>DSK zDe*V5NHr5k=t^KPKY$!yui4msR)Fj;>WFb(@$hHH@jEYkOHco^(&jI{veVcc1+9@F z3IY6TVPUZgFIJDEb)13eM9e;OhCC1b845V``~h)+PV9~q_P!TY?D(8oxbtLVKv7XG zub?hGF_A<`NjboI>SuJE`%q19f3FAq&J+8JDLce(nh=*_K%UGU@H_D%Hh&w_-mT*~ z5GD-*c{JRUTi%ELG3Xy8;h)u$+<5=L6X?)s`Xo?P$<1J zcgxkm_TRP7B{07+HJEfm!sWh1B1n5$&QT!r1qY!vwH*}dVV|aa@z07B_^%Ilf|Qut z%neu%KMgFUQ>}!(4|*fi`O$DhaKoS$LEK^L1F9+ty?H*54$_tbdBPGN3phkzk|$sM zgN9hfxa#862S!JSWmByV94dx6!?9{WNttP7oX>#iU83TYT`1%m9UTqgK5a1v$^zBL@ZaWP9E%L05wBN%>3i( z)M>WDpzqF658g1Iq7rNo@$SmbYG`oKdP$m)N{#U1d`oZfdToHV>26HKn8MjOWT+&2 ze`A{H$OL?eJLU?H2v*4)f+DuLd?qBw+uOqlXM?qOE-Q{ixs)d2v=$_-4Hy|L-vF|! zpr9_9@u@hP2~eQ4-($1V4CwilPznqF2MYaoshpzBS_WslztpV*l4dgdd3ZPP@imtd zGf>=Y-O&bpy8cDS=XcP|xGP*4bM|?`mr1>5KbsGK=%qqyAJi3c|BblyVd29g3Wgs=ql_&RB++EzKf z>TdHKSaWj&A(`9!F7aFLh^L|e+1&YB@=El*sadLZMi(U}3mfOzN6C*S!3#C~C{Jrw z@;3f7E<%-0J@Uv8mq-p1*{zwIXM>#VpVt2Ap`{Bs@_X)Zep<*+KpQI#^m4*aVvJ*G zvL+`&b^k21N0K*b^3;b>C4KqY--!TsMexsu_hls-#5Td(L zEpAEqVuY*-6 z@Clh!V{CS9af9g zb5EL8jg6gBUSY%F=^v8_$ocsAlK=Nk9LFZyLo=nu=qyX*cfJJ=D(YRS^-zfSL{B{T+-a! z=iY{eMTr?r(OEB={?#~APzku6%t552Fwho%2THrU;{u9R49+lO^Dw=GN6s0T6xJ<; zhxg3aa?qo)9mZ)>JMWfUa^3q5P@Cch6($Kqe_b|l4G`-4`(n#I_bb_Ao)O-t;6H!9 z_b{`tOrk6$B_*>L8=9|rnI#eK#Se#Eoh*y#KYn!oA(q|?KAgD)Z}i8n%^=86_8K|u z08wPpY+O!Z+i9S32Z&c6>lF<46Y?UJoIkSJ!nZ24{*P_!K^v;Cv)ZB< z$OBo$XHIkD%Ie5OoQFbLLG>zAX@Eu7&#mID4ap!qp^i7SIvSGQLKM4y62C&3Hz@?` zHUBgC$OYuw;*FxhqLaImRYg@r+3#dldQ5DpFN&-4WVNxd3=+M+b835ulqSMDC?NByHlwwPmHLxj~DMnR)j&UQ1x-Mfc-l$)J@B9z~ACaKqe8L$jkn zW6dNjdq}93iE6Eug9q#*@`X=duAv!N?RQS@S7DdV_MsSQyLIgXsA~9skg{7X6>PLL z$ZR##p_4B#mxw03Obo!=8*S*dlWNdrJreHkfwV<*K}YoM*Y z8BkA$5e>0Qiz705jn(y{CPxe067?o@!U@#;0WVDUT&MDFuaB`LGwzL#aVS?WrrO8M zsL*pdiDZ>0T_mT_nobc5{oFUnQR;|k^tIha0!bUK9+%p)ztTy9Ue{6P8Pm6NI%n!W z(NVKn`?vnBGxrg$jl)h3@O?f<`$^~*q)qtF{lrnUhD@0UU#VT1TU`=3xJSq4#Tz!{ zOXP~#c$uf!`en_Yfw840e$0)E1PT85%`^Q}kJj@YaWCY9?~$7GC)ZP8tl zRbJ5-5L4g`7wb8{ILhcVu{q1wG5a(nz42id7bsnl=bwDA;!jF6)D_NY8L^QS8(LCW zo3H&!BRah2~>Tloc?XXjHNtMrrP8|$n1y-L9#LK%!VZ|Oom9p69p>oyX6tT z2YaCM`?7OifEdj_wv8o&*UV4Jr%}Oz@14{SBHfY z_V!%XI+X7Jh4@{%A1ns^y{0$d2ra|CKYK z8)R46sy0uUa{F!SZ&t^gheii2yL;vFiz5RPe>$eU8}SJcJ~PcxMb_~?oXmM0@VBfU z@=CW1e~(dAnaN(VHi{$i!p5JuV9K=OeoA09AJf3h!d9pl-j!#*RY~`WEPjJcblR)E zd7<=^oyPhpN4Ul{Rc;V`|P0-eI=_NE!nfcP55exS037GEGpg?g7)--N$gs2nhVGrlfBtej%%nRr1$JY~z7#j$EwP_~84%R~P0USVJdeTDR2C zPf3Xz2J^W6x;XK^VWZE$Sh@$pSYFEFMKic9yi|*k`yo%Bne`q0*oE71WD9kvwELSu zl0*=np@Axy-sf0AWY<81G|icE!Q4v6-o{sULrr<+hCe`xJBAruJ4=A?X zS1z|i@6Gmt_dT&X_%po$tfv&mTKxb!hMO>Y>m*X zt=|6rm#`g1Mi5?xDsAJiJVv*g7?4~UU;49ru-+F(+nM;KTUxs0)8kf&432wv#NBxP zY31J+r<()M9|ErZZ%rO{C*7>8d)?u248Fcc0qYwZ8N%KqKx^qVL+qjJ&Y;eR#d1JZ zCK2=w#hlf{3+?ERZd~k{~b#ij&b&2Td+%JP}{{xxtro-o`}42xj`km(p`Ayiu-dU(ht3 zoX0Vn`fg=c>y23X*DvGd8$Hv-A2Q=k`h_0@L*`N;2jJ+TAUabJq~ z#N=kWL-=?X?M++0GqKk5CvoJou$kq#w<(9WEczkv$ zw)`IVC4e@^$tHaKKZA%V>3HPnY^ABejad-TVkH(hIDFDt?Ic7c5ZDd0w%5iM<%Rq& z%$L;Uh$@C=3ZQwIl%~UVYpnLAhvH&lD?5*{8rtATLR*ph^D|DTxog~5@{t)Da;a5j zCVCf~_auti-9}TI!`SliHt4LWbAmtkT(`ZKV}9GKfEVg~pGjle9xunEggkg-Hw%Cs zZ?jn^I$K^sBSux@Vt>?#O=E(Qu10ll-^sO>x|X4?oMaGs+Qq?GzSe6-M#laf@0Kf7 z7ku!o_qb`$d{gY2^i%lZl=8I&GOaw&m8PndS2@iF*NTZDiVzx!#_%1K^_Bx2po){D zeX?7WbY%Q{&)HaZ$t_N+%IZTJ5%%!DXx%Vuq>6y)>6%Om2_RVq%PK@M((>P;ujA&h*y^=xJ&js|-Bf8}T_^?7m8?EbN9Uw9yUW5s`;Hz*(WD@iV?krB< zVUh*{FH+5;OkgwJcq*qOD^F&o{na>bSxuE)^?ZxJ)VYk>o=*n*D-j)xwBK$7%*rl2 z8Y zl;FLLT4Y}{4nB(UUU*fy(QmY#9jHu|krxML#yd&%p=Y4?&QO)KUfN=y%FI?$dL|U$ zRW&Z`95?Om>EWrMtSX)OmX6i{-N570XmHRwsMYX~lV343z{;{lE4GM3(8H-?^?$AT zZvG@ElWH5x@Hkqg#7@(HfwKOoDIcbXLIJ^76ZZAji;%D|c0M(cx4iC`Q+V3N72g3; zpuHKcG*fW+KD|3V!@6E6mFCZ_mnQqfD?`;A+lMb3*cG&fJe~~klo8Q?q=r1Mt^h2ab9^*(7q0TJHsE}B=OMm0$S2aiJ08!~TCAhpD@FE9UV@R=g)!7iv02z)0Mg^9^8Q+y}3eZ_~ z0-jP*nWj;M{ydueH@Y0Uyc5Jw8MEWh5ba4k7YLxvldX8qqJ1f!JH|wr_1`l2Pk%g$ Z&z$0Dmgb8j0FTAd6lK+9Dy2S!{SPgA+6Mpt diff --git a/images/layout_table_example.png b/images/layout_table_example.png index d73b9a0275c99cb96e6067b6cd8f28fa0fe37da5..ede6835b026f0c4fdbc26d1d051c6da1aa879159 100644 GIT binary patch literal 7349 zcmYjW1yCHpw#7q$;2vBTcSz76iv{-}OIU)tJ0v)Z6I>Qpf(Cbo;1b+}dvJIAn^*7u z`cqRqw|i!)&uzKq+?fb96}dMU=xFfrIDy0menD}OQqV$& zAHL{c!r^r?SD>D&rh~bwhl#Tpf`z?j`p)I06ENoPvy`mS^Ts zmX{}?c712SjE^9G7n6_LXDS+AjNhhd6OwVjI5R`&5Izy9qn0C~6A%wk@-<+9E<-rS z(v$U^ke@T0t}zFYafmdeB9)+0cvEsC=fRvcPW#PO$jaG&)uZFs!0qS$Y|{-?xS>Ra z5*J1C|IWr+0EwCoOI?=6zAkQXNuvCO?XDRk5LcOBx#m4Z46;m=BLl) z(c;Z}ZSC(`+Cc4@fvgA`bUbNwUumO?Ib=fL^Fe0K`>TT+#!7zNX9p%u?f_J&2fYwtEoefdZk++flVQ~dnO-2uOZ^7HfEI(E`+u+7ZPp@}R9H==9+FYb?bShV%Ja75*&@e@Ltuc2 z_%bLBx;A2DFFp>+Y9tomHGQwDw3I&K`9>m*78m=oF;O$Q!D0G9Fb|p?#3`Md?2PILOW{;&9ASF(fR2&9>*Hu!%n3YQtM-uldIK(kI z@RYd-6Vc)|+>TT|n)9j52*3UMmTkaGQT?@yVCZe3f#F05R+>V)whs>Toh_+KixXn6j$nLTm;@D#H&UeB~M%~t%W ze45^Bn#{_7`Ax0Dxw4#%ags)XMUGmXWpZ-gtlc8n#pye9i{BsA3HxH+j;;7TSpNB; zVCE4ps=|B&pp&ArJMoRHFUmCZi@R#MN%&(z8vEQrL_9JI^%Tx3}a)%tVU z9M*qw08G!dZrXI+N%UAFXr&WP53#YZ7eIN3as8*na zEftSA(GKRG!`WWDQ&006i#&&eg=GG2&fB9EZa2)kVO1tnaM>a{0j@QfL45 zXqJkaDLk-ojIq~Myj5$*2r%r|4ey3Nrigg@ug3hA*V;?{3bP&J86@VT8zG-C@BVsF za-8^PwxkF8O^Ff*WGeIxZN@DHF`t~sC>z~fx%s|eybK=n7*MsIOBPs=B zetBe*e`JrMv$?%2ush6Ja#V7BZDf}uf>#v60Q1}lLNU(+eR=lf&FmDr9#*FOq&yjs zs!LyZO?YLWvA+W#fV}qs%r@(6><`Y&a?X^EPdhN;!%~}4g=G{<(gdqStW0)>#T_vl z`LJF z;3r@FXC(PtNeGoI(?&D`E2Fi85?wD0*^kbR00HB@CTaOai|gR%pvhr(tmEl;F3bl% z44c~guu(2m%muAZLzCX!wn+|8y*392$J#PIC9}eucl*h%$f|+IO<#3mPHZH|f%>ZA zCdJ*tg?}}&V0c}P^Mh#dSu_3-%!)kpM>7NB>~I*bpOR0)0omVx!Y}u*JQV6FKZwM+sAaRQzX(CW z#ZR;-pTh_`#xv)>NQ5ZATRdz^@!#FC;-fa0Br=EdV09U?ip6LQ(v8iD?c<%{H*(U6 z!kr1b1yv$mLN+Rh#gu!Ko#^?T&B@6^6T8)81EQzm4*mtZ%>_&tsuVj~K?Yu@s%A55 z3PR!r9{fCYNapJ~qSdTb)V@26NUY=wU9P)6 zJ+q>@;xZBK_?Xi6a6Rz|VN2z)vyQ(yg(HPyetmtkNg5tW z6y$b%4;4xlbnQ6AJ!lsX)p#I3_C7D?hOXuh&t(UA&sOUf7vt42AO$Bh@CXUb5uMRv z&fqM1i1J$^Wkeed=)I4RIU{M2Li(VnI5hH=5^%|EFdiVX7T2E_NRt=|z>vfp0v1pO zs*My6OiNS6Vg#yj@?PPh2jlt*)jv{yal}5KwB(YEP)ReK=fh&1@wS zn{`X$zbWXb?X}M9+q-{6R5&%xiLOx0WID>amI^}XlK(8bq@VB^n@yBB%x7)V=I$9Q zP~YG-)F~1=3~D5@;FJMmmO_}u*_g^nzYlt32%a7l4tv!PJ0&Ya$5iVvY)?jZGJu$$ z{03skS*b^V{F$$FM)FX7hTh&s{B>J@_mW`p(51i1nguRgZkr9V6-nzm)fL}(sLB|?i!^d}4fU!a)^Sh_3Tc_*qzvmOeOn1@IIEtiy@(W3zo=58Qg8O8=8)x~1Oj)uY z(}S3EUmH14cQ+a=s!1beilp&~BG>7P#5gRCR%KEwy?HqOJLNIOlV9u4uioON%G5SX zW;cpka62ZEDfl6On~beTt%Z#xz~u6F)YFI)gVJ38v5n1*ufb(9e}eZMvC9;K&I(C* z(8yw5sCK8kD|;AkF9_V3&eL`Mo3vrNcZmT3A?7p9iSx&s7|5M3OXyZM`rwyb(0mMy zKHVj7f-VfPHYYUZeG(Ph{{$+1VI_D;55%VQp2HJg6i6kCq%Mp<_DEj- zK6;4bQ~AY_Ac~RoXWp#9a?xg8^}^A?Ul@QhPS4t7B)Xf*bA4cV(9U4MZa#!Ra*P)r z5>W(1uyxoUJKa0cL#<2VX|U#m}PdEk$NIjf!)va#EYD)hw)q%k&g-v=10S6252+v$v%L zH_b+#ucto}0G)Ds^jcmyQolr{fW`{udfNHNBVYjK;6f^s(~94&6$ttt}{;L0Nh# zO@X(>Q{au7-Ha&q1DwxX66YRYP-8|OvO*y{{ja}nwImg6-dT8=Afd58+5SzlVT_-l|n z2Sn7riZ@}ODLRE|*5+W7)%tycz#e%?SYxaw@4%(YGkmLjyH)QgT3CWU3C#dqyt@A! zr(odu?yFaS)ApchkqC%Yu1BkNu$7%EoMdN=%@#cBF7Y0CaeH%e==cy7pe(J){-dY( z3-!AQO-*%{w7HoR+0}a=Pn#KRXED|o`nO&p!?F+0cJk=Wib+M^D};B;U7T_&SG3#b zJsR@T!1>E2xTqmX8w9R7snaIeDS4F=ClY!ch!TFyj`4d+H17DR*x`=(fp4Q{cg*4 zYrs5O7`2I-`I$S%vB6NLc-^)UghmRD#eXwe$WYAZx^%1DE%m#mJi33k?A2QBBEa?j zw@4Nbv_}RL4OJ@^Ijlb%SQT$^aXXuVUleaCTj&M&-LNs)|7!cf3Ctu;OI0I@sI}z& z7S+9>f)9X(uaTgJ;mqP_^EHr`HiRMn>k^U&nc|0Esi{(d){GV71jNAjq$Jeac5)rD z@GSSawC@TE?;eP_9ZWdAV)oC5{B(4P_xAQkh<}iFIiX%|42<+SmE&{1^?F~AKYaM> zAPY6qiI|YwrXT40%7vO&J}{hK&-l!x%iLQ zO{}bhwCz;tQvbp??;8R*KlQ-E@#$1)lktH64dM_wML6f^!Fh?BJo;UhiV~Ak?oTYv z6wI21sFD&m&kW)H%_gG#0h9mu(e&nc+0g%P8^3Y~$>|-%;h(xlCgpU5|HoNCI6=)< znZ8Q>buh=ZrLS+R=;TinINkB4F(s)1D^V9{m!nPm@Nay~STSf@!(q5!vMM;yDTxK^$+ANLv=H5Jvwwp&BMYq} z^x<#(vtZ1-eq3yO^2~b@Wf#H-mV+p7bqlC(fCKE_d$YKMV~H8Z6vX|kcpj{oz>|9= zU$OF1SRs0Z>aafpnp0q=>mnR3=4uc)-VWiV*<0WOIhP#9T3Zskln3ubP95cGro{75 zz0<{(V=BcD?oBs6M7HKH&MPTg>He#=ebup0Y8k z9v3`ADSh-VI(c2DF;O!3a0bhPYYIO!p>#@OQ!t9rFyODz8Wtx)7*F0tLTZAmFS{rZb>AJ}dSO zU`<1h-nCna^t+6%+0SR3sV)PUjp9`RUIdQTJ@re}c-hA=!4cS}@t$2s%DV-2XZ z^%QoQz5INZmEVf4E%eRtE%fop_qxyeTm-Ao)OtG!MV?(ZcONf#J`a~FQmVW6`Oag? zrQJcjGqSQA-}V~inZ$<(R@{jB1PUHSI=>(y^cZY?IMsziD)>Co4cg?w+9MeI8|(i0 zXeop|J+uI>7(O#=Q0SaT-1y+_K#zdvMGM({_FGE+RYCb)0npU>5Um#jza${I2}3*j zB3g{xByz(L6l{?qPQAVL#uLxFM76hw)x3kmBo{*f!PPuLiM)O8u8xkYOYQIe<@(In z%eT?Ak@C`}sFz*On0C=|CT0OsUb^6is(28bcM8Lz6fBxnX6ij{i1HLOG zFg@|a=RZ$i)p0jkz;dfS_RAiGVIGdk0&DI-Ve^)})cKXp7GU@xn*M9hT`EUj`#(JZAtfTWgAl_JI9uZj} zz1E_$W{Pa7=j(o1Dsda9_>@@YQX-=0)Ml<(8a*HDqf+(Hn0+>WrZ$0|M=|1PQ6g(PF3QTXA*8 zN<5Q(HE?LFOYp%*&?z^39WL74JCwx6Rew_ineq;GAqy>8j1dsJW%=4B<27R>?{9B% zhU8Ez%860N8JI$t3)c?AZ$MuQxnq}bf!ZFlv#oJHuiqxM@6yBBhs>yFjvh|K-H`)) z%>(}e*YCpr*znj0PqpCb7yJo02PGZP^AJr<4e4&$uNP+rjov{X1~ccfhr7074BEC{ zTMAy6e(G9k==gkaCY31LaIydMW}Hs(So(ZD9iZ-|+Cd80+hbYNl0*tft4>!wn7f-y z_%=NiGPYQyKd9+)@$f+437Aq|Wl8hB7!mSq05fnzt$(-h8knY6)Y6Bh6N~VOiJ@jz zGEcrs3va{KF59wN9n45${>!rmyyu@;2UJ2YGJeE=fQMSV7`D%+?OOc`{`xI3kF#Qa zJYp?uGF+P zu493er7!v~AHj1;N_vk>KXo~_R32E(18zmiYs%}f&oN^zj**}4e8yImQlH;lw2S+@ zH$~d2_drCA`Wq@|{K*8`p*>kIr1B>QvgbVp27^}+pwr+#Y`=RhYirjh8YI5>8uGsW zaxv^Pb$63!A#cbXMyuTAVo)kPIA!Dr@m=((2A7;p^|P)2;-7<)B5ZibJcU?<*P2TZlZ$ z%9j=t`eR1q9AyV#xbPLxHC4rO-ZxT%+Uj&ueU?M1%(fT(v)JEZsk7>%*J|?UL#vbO zU8|G88)cCOA$xT{Kwf#t{#%+7l7{6N%^8yjKGZj*B{=}FG&FSD{718@Gy7ObiB%DZ zSul(ws8`SVAu<=xHHn+h#X7bYQ`CGh|I{@0w!u$LY3zS9hZ*WAzVWj_Q*UclR>q6w z`{lm|0XPn2e^s+wbYlJ4)1T>bhc}AjTd`Z z^8sKWwAnkr^z)PvySFJpf0q5ZM}^5kEU~a#aV(G0IXjM5ES+MeYF=U$GMKTTuwbXg z><&|D(FIM&TO-|gc$}nvk{)%*+Vj{?o7qc><6b$vbC9K`(PCW7@JzYUzvqiAzYxqj z&xNZ>>15)dqC=dOsB!vkBa-W@V-HnyZYorm;I+c*)GI^>Ly{P&x9%R>B5rUEt~Rpu zI)@K0n>4ofgypDu5h9k)_6;73z*_ehq#t?2o{TXuo3gpp%eMAJNb5zJ>#JwwNY&x; z?wry9T^7Dmx5WPQ@#vr6fC#mQi{?ebm6X&L8At{?@gEsNDe|xNqdd@rpWLa*5TC6k z0R=2lQUVY3-CqazTD63)i+YAiMe|KXAfjwx@Rm%6!-+U9!|mdOKD~ z!3L7JU`(O4oT??H zN3^O3pA4xyJ$27h7IY!Tq~L}qJ5xHmm|3eqL_dxYd*xn@Xu*o`Ck?^DQ!e#6@P7cA&_8Ve literal 7747 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 ZO7r2=>K^_A@D>;Yq^7G{^Wtsf{{e?(N00yj diff --git a/images/linkbutton_example.png b/images/linkbutton_example.png index 48e19eef04f4e34a6a749740a8d81475d77585a0..a03b85f0cbaccf22ab078fa39a2be1357077ef82 100644 GIT binary patch literal 5134 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 i;HAil+5DOEj~tAtH?Gx3;w%ak^#z diff --git a/images/listbox_example.png b/images/listbox_example.png index b4854b0019e58fb57f7ecb157254770c4353b46f..8a6a3c52274f5a25366284ae10da4982b8eed4e2 100644 GIT binary patch literal 12005 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 O2S|%6i2W8Z4E!&#_*b6* literal 14052 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

N(TBfqr?Pd3?otQnPz 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 diff --git a/images/menu_example.png b/images/menu_example.png index b1241f62af04dfc1b04fc8e9c70db8dd36a62c05..d2ee8e103fbf079df757918471d4773de936028c 100644 GIT binary patch literal 9694 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 Rp|m9!sqgY)<)Q|G{{vy8xNraf literal 11044 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 literal 8280 zcma)iby!rFw2wsyGF+)6OkVaVC3ofD5+(p#lzAh}hzPYiO zUB<)Qdfi|;I7@rIJ*OHX>i=<~+U=9At=NkjZyq0A^{|Q_b97GiUF*8Xh0~`q8xNl} z4`$dnILOG!4PFMame$zW*`0I~%S;rj!wNNe;!$ZX`F0+#a%Lhg|4m3Np4&*bI?wos3hOLKr_*FuPQtz z)r_Ts2C1}=7w^sj+9y*sPFBB`U+cxP^lXy~(6zC#@hg>Mp*>_+(r`#!!0Uh?A>`{# zBO)TcZjO*o@qX3YRVz*-K{ePi`M6r@ZE_tJYGhFr;bp2tk3z^^$9FmcEkInEc!!1R zx~XQ*7|MYG(3m~sqDx_gRF8E;ecvtWi9UNKi8jQb+|TR9>=WL&$W(~ZH{XODviRb( z1ts%F@t(Y=W%DBR2`{hd-|AH$s&t`d22;uP>Tr@XB+fj`R14E{wz#u2u_ODN6?*^r zqIS*1);FqPtMg#&**-Jk{D%c>Xxts_M;eY(e{s91U|Pr($u_r4JIGk3^ob+ccP( zv~A-r2SFcmOPlOdW2IzP8CHS8;F3xA!)tfLs+%;ay*-Uwp_<>ZOJs%FqmXZg+<5CUBr2{ID2>oK-y~DW|_kY~! z7&z_iVJ$?%pFQezv>4lZ8#Dqr^PV>}Hs%aRL+epc_OyCSq>(R-RX5+&oJi|>UBfB< zj2sWTtG8@dV{F_J(l%+!!NHN9lXEz=^!MVR#`w9*k>AFjD)oe8W23ZASi@?`A9=tw zsMP-5={jt)_Jz1!*w)!rKDv&MPG>}~x~SVKlklKYdCRfQL>US-k}?KiuaL$@$%l%fm+*Dp+JE(_=o9t% zp0_*AWya4b8&RgO{MHe#xF`Sv*VhZ_>Fev3PphOw z_1ZA=@DLX3#i|v5&3L5FvQQddB6w$G#54sD^fgz08J70Y~oyTS&Xg8 zrWJiFD~yppI}iOCQ;Q~Rte5EwxG2atv|k@9pZU9w*t4mwmp3?kvuMmKxxZs`cdxlU zpX3Yr?(q~24Q=-#0PX|lMMV|$C;b_U-*^|7u-QHD`QhOYi&C;5nrhmIm%a?XEB+iC zN{Kx-HEu5@Xo2YJwRz_Iq;nDjTjI*1P-g;Fn76sLQ^a-aYsSG6@gO4>0%~Tw-v$NBbPsbtbd+Y@M+>Kd`a&0~ zWe4Em0=p4#arkp&-VjO0#Y8Qw#EM=n5ylJbT zLHwfriBBei455eoj~}n24Owh=+6#Ts<8qj(#~mkr($(`!|A|Nd8+&>z5bxh^PPuvQ zAgS5e_&TtlCi~DO-BZ_8_kHr%*jNUnHCC9^kc1+`v;a97t zG7{|)>nLsba~5gd$`R?Pm>2>3PCFMtn}f*~);){b-tv zD-3sfw*l8KVEQL8#K!XF(Fci8w40lo&F$@4`#}M5 z-yl$;Qlwh(C&!(!R>3`sOM1~x0Mpl2lVzG3Xh}$97Xp8u%=D;!MlLD$mFd$-`6T4F z_(*8?97*_i?4LWF;^VzbitDm|v5rI{eV)i#S~7@R@WT15UO)Vd9Lennvy=)170ez0 zXCWpgW{Ug1&>2;Td6{iSdJ!uJ$6K<{yI$Xg?}9cXqBcdgDo0DS<AavSPP}OJVm*^%ySjPfT07i$N*-{b4hb3AM#3l+k7-ZZQ+42I0I*W<*3Uw+x#dFb zH-oqzNjyBb%abob0c~;e%gb>>1^{N{(%51M=w$8faqy{la^OCg6$n%_v^rFfeO$h2D21^HV3X&6M|_6w2rL44FN85i~^&y1l!L zO^)9{NC*3sDie=D1PRmAc2m>39+m^LS68inFHOb_Gy&Q9|m0fCJd9Rb|NCdRIn zh03U^%~pnOCUh(v9ejOhHBs!z(FK-IWg9%Yid#L|JwAR~YQXhT$N^pFP+Hc>>3M2u zYHr{>=gum*B+@{Bl53OuZkkdQI@dgJFG zG``qiFV)=kSaCezhdf^ishery(LSW4-|$ZG5IuGifBz&=3F>6LEKp%+<|F|)OWl0J zypzxUHWHbvROC*STQ&_l4``EGbVC40HWkjMI_8|2aIJGx}!Ugl?I{%Vwe^QOj^p5$!2%EV0$5~7N*uaIxe(M(o z+0uB2qQ?P-n_^`Ls)-~48w;+`Ukk4P+_e?P$I1DFbX*F5h?$e~-N}iYldxIC+5Srw zFEmtd8HvvY2NzddLIOb-9x~a03KpeIHATn5awu{$mM^2NqJjgMdU}0*s(1ne1Eai_ zF~T%r-ie)`KNT1$iC%&oCCE)t+!w_g@iEe}iUS}GMD*h3SI!m2HC;tM(+3yiauq+F zggr0zr)if6Il7AQgCb}{Gnq&X(7?Os`LZ|`t7JHZ_(AB*Ug6qI04c+bn!u6{Cu#2F zAOTZdWBzMY@N2wz&PiB$*A=Y;m=RqHAV z{ch%kKLepyCodC>)Yw=sE)=k6#H>gZ4nD*S;dtMDYLvA^zr`qny9o{wejK>BcP)-? zhs-j56UQWUt<=_QYsQ3;16MS<9@G3m*841%0!}fwVEC^=UoLs$rBnS^RFHe_!`vvg z@a5-)BI>2%=8)MvkPXX-P|{=M7eg$(;)rr1KKI)y8T*VW1H*+(%D=x?5`}zjcv;r6am+3uLXkGvOGPN#k%!OjVvSj8F387&O~8(GVf zkwo+w@)uItLDx*IH^k)D_$iLHb%oFhsXaoK3vu9uM(D{Yoz~xeM0zL|N9Pq2Gc7~p zbHw~LYOM_TM_RZtzfM;XON-2qKTc%0<=LyFOL2ZL$G`WC9wuTrhucHSzJoGD}EZEHFzr!?&czdyemlSxror6!bHkrWi z-(i5p$njOZL{Mm|e0IuP%n2Mk@QzZhx*6c|@?3s%lh4ud^FN&lwD}^YVRiB55Tix}|Khg5k@p@eZgPA6@ z^1aErp4?hCEYDko+e+iuaC0mq^VmEWq@xZA5F#Yw51@Gc{e!6gU(8tC#sQa>U*OPE zO@YV#b3ts$pPRAFg|FRvNp${h*%RNR7Od>v?;Jh$T;8fZu%VJeo6EgufEOKLQkT+N zv*@RduA%?!(#G7s1_+eE)mg>(o)+9dLf7}xE}*N~H;7Hq#?trrxCFT}On@7z6`#(v zk3wwk8nfr>{qdpW`SMjFI(*D|5@z+*b16UVpgYy;XX8)A?XBPV$m^&B!_y=((lqoH zeGj3LY2;JP*ept>a^Ib(lANlOXk6CIudaRpiikX{ve@(R{$_dBOGps_flxjK9yo80 z{;gJ;yLf6x(QJB@C6?HS!vCe2-S}ed;*XFkyDKS&82`rvI@H-XjqNNv#n}&`?M&6o zk*;*KQz5@|sWdo}BLUA36^p9Kp(>I1;#Fd+<}2=t9Gr}dIYBXoio&<3$X_`BC1CJh zS7kW9!bEBX<}aED(j)jfEQe1Jw(;{cqF&TwB^ur#vj-QSC8x4wv~OR*S|ogqw#&jJ z<1d(lkaIBt9QpgBJEHtS?e;q>%yLCWKtn)p&{YjfoZNF}YO`~evn)M{5| z)`C6`Si~o}@{j#5dm%sCme$Kt^~IS2G`=?BynAh_?g+(rvCuVenNMUsedh@A@q)|UgiaQB|>Y0bOGs5 zl|Va8#SK4O;Xrv_59sF6h<-r&9zLHrj%`mye0H~8-&pr!yRgcU_Iw0NpC9pEXcTlh zVFH8eqoVAei2E@u_#Ogk1CRt`OTORj0I3K%ykX7-_M zuhhnsbcJ9@J|+67n5c=3pXALYUbcYz%xbY_CSDA+%5uKDyUTSbuQG3sU{hsdV-tn< z_xCcZJ~pa?kdcvT!nJbePLA010xxWQ1H=Kbrch*<-tNoT2vCOQJ8bIPLr~S6V-}st|yoY==tMH9?o1JuP-HA;Fef706cXO@q?ee z4m$nyV5%bWAIG1s8(SI6l}XksV`J&Ee9#ouRL5wR(0IOsOp#end>GFtZ&a(lJ7?$ zZO3l0Hg~;%3*gu(mAMjYJ5U)_z+Mismki6*j}IKao*Y5jr(;P!8Qj{F?g?Lz);QPuKVZcgn@9!j`%HZ3EEk^;fyO8CLy7WKUM7->3xa*4kPxIJQhP4SJJEd)8#$Az3%!pEY7A4 z>-lxi8^1w4h;}GrrrzM3F00>VQ(;ic8~mjfZ|>R3PS2q@CZSWRLpxtgzCYu*wxL|>cI9Dt zb-h?!q?vXa-K1_0Hbs;CC5{~3t@_P^u<3XEvG2$ZzW1X;WCDV9elFMVY&xFy^q*bq zXS&St%vU})i`b7JaVU}+{bE*wuU9_WcZu|U;j^i79w4Qh#Bc_?t9`s*Zomb-NI2!3 z*J9hLG8v#OlE6dr11sX8f$08T7y)TXm3PTSlNeWZz!Pa!mP?Ik0U>^?7=QB`X?c2v zZ$I-Hm&`IWQED&Hf8)p(l*2sGgX@}-LNcz8fn66osq`;dB;Rr0ckZB{bIGomtE6L1 z5_~^BJnzz9x%B3@c*r_tDAewx?|L@pz;*t6Vq&)N*?miT{KeUMmSF4c?*kzY>oETuQBUr9z!50Sc zEaG>3z1|%Bbg@ufXg90>P`y*MJ1i;zD8Du(w{IltQH0!6b0VfEezLTxr;s`ig?} z__H+ZAa9y@Y^;HdYKsf~zq7@H$Lui`t$Ma$Mb5&>XKFd;62N$KEv_=ni{?-%Mr=Sj z@8r!~%D`rN<4dRWdKW8I_I^j#d(-Y-?Xo&8wdZE==C*xxL)4)ngPMGJh`o_xGtLVR zE0sKQ3~aHUREsv_IR z#>Sp343=09MoN7YZi*}&7!W{h4!u_@Dg<&aLFa#1YCUTm=07#{qxSH86$yYuW(Bf6 z`x&xroUh|v4KUx~QsYWfJ4Y`LOycDylFqTEK>OuyS)NgaobKsyC_jKSQi2ge%r{crZ&s_FN`E_dNz1b29_T8dBk5%&I_0& z5m)>MmX;hpx-3W|;e82^?Zu{q&<#x>{n03*#_N;z-YB7yiX<9Ti2<+g0@@^$g z9Mcflu*QK-3I zi_&YCO?-wq!C&0sxqog=%y9I;Rz4H7W`3;s>HhGLZkyM5clxqQB$G#|I%K2qTqXF! z0}3I4q?R(urm+bJ zU(s8YRBRv<2mmBYV-tgSH?Z9UsUU!cP>aAYHIILEzxni#b~82XxWnt-(U<`rkh!P{ z0ZGchgkYHf@j)>H30tY(*j93oq{DD23a`{E~hQD6|LTRG7^#N~q*tv*Nlh5+FywA}El@A{!gu?_-K zP>6y*{!13j=ou0MP+5Z1XL;Ui#}9tXbS2n~0ENYfA=uigv2A4_b!R&bbv_Ee!SF+}tG3PEfLqCc6o2CI+U>iK#<5nk`%my~55CdP5_)oNoxb zdAIYna2l2+g=FT_;O&t0X;ky-0?X8|A*W++z3FJDL6T8J*4Bn*c*hM>*t-6;MwY0NlACu#I=6&0(}W2 zjorbSrrhV<%E`bN961ucc|U#_vnMcWXV0|jeo)i-2vh=|EfBn)0VKBMUjBsIc!j&_ zJ4!VdT)J=Hu9&xag_jN(Ki(MP#YW<-A+TP?#KQ$^RE2ph$Ib&Rn7!l@nZLRas70rh zHuGCnaRWa+CNlF^w$C!hV*r&6#daFJHePZSpZ|xl)8aq%|CiD-i`wEJ=B)lIa{XOj z#)V=gF?b|s{VeBOScO{}UWvfUlUEq`vLF&;yW?v*ogb|>ChsuO{rNGJI(0<%@HymD zn-H1G@alY0!$WB76CL-Xo)o-LDjXLf%0sXSI(wzR?^`Im;BcaM?btb*yA;oem&>C( z-Wx08Yv0;C&ADDnp#=9BzRI5clWoHx%BBrW5}+?pqB#3oBj4TGM|u9|wF)ju33E7K zv59iUzu@_we`4XIspBREQyCD`u|6kqrpyi8LeS^GBByGiYr4gX7+Rlz>i(q4g&!cE z#wE*h{n%cM*Fyi9sKmuT&skvww|V6!N`>@i HI^w?oxxXEn diff --git a/images/radiobutton_example.png b/images/radiobutton_example.png index ad6530b49c78fbd6fe11638e562df2ac3453ef69..12ad389a139813561ca30660d8690433090bba0e 100644 GIT binary patch literal 5365 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 diff --git a/images/simple_example.png b/images/simple_example.png index 2bb355d1083ba75268db8696bbc3e654d1812355..de202c876818518c0fb0d5df6fab961dc1ec8cac 100644 GIT binary patch literal 3550 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 literal 3966 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 literal 6338 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 literal 5941 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 KrND%}kpTC3;Go9YIS$9cv#N{c{XN-_$UWKb1! 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 Rn_(LOs;>8>Qq}(DzW{wbvmyWh literal 5510 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 diff --git a/images/togglebutton_example.png b/images/togglebutton_example.png index 088ae0c1495010fcfbfd548e3ce988bc45291e82..ca65b6a7dc4380782d116c818d3154c864f89872 100644 GIT binary patch literal 5883 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 A3;+NC literal 6097 zcmZ`-cRX9)``4mYRqbjiMQhXAGcg*(R(n&SsM@H6?j zt0&1&_^X3WsYx4@8uFfW&k+E!3^4I_4G4Dfb0K@-<^9S<%-`A1#l_3t%{$K z3AJBRQ9lwU!jtu$HcF5QM8U|)%3w?R)PnRpIhgt}bE-ny#p$3POe!r$Z%|L22Nzlp zrf6qI+RsjuyaO$Q->UN5rlz<~GV+-p*ZKw*Xeq=P#g=7-M%13w03FKBGY|NBpa0$6 z2YrfAr>d8f0)xTs)3dY`^xbHzW7EP}*dPpgiu8ge=ol=>Ryx!Rk|Ty>RFi&tkWEFy z;Od=Xu$L0@d4TXR6I0XZ{^#yxNJdVP-Q|wFqTw5co(b-`1#_;=hf|Nw9`oBlr+7WSzaYJ%9$OUdUyuaH;;Jsj459+ zkQWH#wo0|ct_ncu-0?B{bn`lIt8Qo;ixJ)P6(`#)YCdmKMgbG}!Ga0X>o|S^0c4ep zoG_fLGMrK>A|;PZ0s#ZR+cz{#M75bv834{8P8*a-W#7ai1ZDG*7C-16+CU`&K{Yo{ zN^A&Y9|A<#bQ^5HMLFmFW$6?hg+L&09Pp2}6PBYPH&e+s0x5e2he&gqx_AHvU_5;&P(H zaqHnu6J8x3HQ*N=UHHM_5RAV(e>|n}fy$D{mP_sVNB-f-B{i$eYuoEdtSCz+Ucy7& zth%j@{wK(*pi{e>Tfqjs*0ZW7gmV#QuiT#PX}O!+QiL_8>FMc@E*ymuT55yIdhJe} zP(1LnHKE+Q2iJKknpB=m5fJ3 zB(bMQ-PFuwG*gU*HL{~8i{IIQN;Av0=PM(hwvNtPQ#~qMGVrcQrWk#hji|foTFoD~ zFJ)zGL2dM#g}CE1P6wkm#e$+X#Ji_J`TU0xoo|LAk^xW<=ph4u@YoP=&aHvf?@w^i zotpHK=k!F?y>l6L*i177x(po0C4a>yQKNQn#e%f;q9&G>L&;o9WP+li6spE7?e^Z2 z=K@jL4>3(rNzuR3S*DR<+2h~3<2~o+tw;sZ@fDs>EEqd_QKD8}bhhLrXJ3=`;GOu2 zk3PM9&72R1cvB)5aF<^}VcrO8k{=ut#OCfQC0mj4_VVJWFY_QS;+%_ zHaYW60uKe4S6Q=4e*l3%EUc`Qfz2K>!cc(2qTk);mdx8|EoMi-@87?Vg-1NdlMRoD ze>(>3hz>XalRq3EI}!tTP@7dv7DuBJh!q;@!@UfVo26Q7xU&#q3`wY`_S0K?pRo}Z%;^lL%lZG;BRZ4#Sy6{Dl}6pGO4X>Y2eUF0~0YK^hv2U z(vkx^tzm4I(KJ`NF+jsCkLfe`l7qY>v&Kujn3*Fn4%Ly^C%L%O<Y0C8>@NlFn0A! z{oA)wrv3|v9haHe@W@DUbMu|9tDSY+bt79_J#+KSB1xvd+tTKQqCsx?klXr5!L8qn zu)%k5xTU{8i9g$x)ckZLleax+>DpF;+IBv@M{dC7RO**6&CHr@#l1Q%lNB+ol)rr2 zma-u^_sjD~*5jE&w^BG3eHW@ilnb&qogqL;fITgo_&(!z^OXN<$v_%qg zqN1+9xq;K-eX_kBeSTb8T1sXM#r6-?>lqs}=E=U&*;=fNrUPce3e)nF_`w8o^H>=< z_BY`h8``N)7k<3*QOxIm_z;UW1p4}Ai3e`W4f}Oq&QW3Q`%;KTpKE(ZN9Z3?cMiEL zF49x^SFzCyK_$2pKnP3}C{1!{%Urx(f9els4T53rS8Z`)da7}Wk=b{(%M?L%yZmz_ zmWLrlHP+vSvk{Gr>5P1u(Mz0Qmhr#aU%q^K{28S%mMfK&n|l{tQDIf&Z3iWV9||EOHJL@pS!9nsa5y;>yOH(Zhm85eY0EY@H|ze5%L&zdU0FEj zblz**>G>%_f=U%}JL^0N;h?M}8Ws%pH0-yxwP3olVs84L|s|r>v*!y;S}>$L{NF;IXknJ4U^`RXcY|6_5b%Jeyl(WCUa1YZVuX$?-+DgebkK7|6f@52Ok3*qGli#Wa}y|(<|Wm^t&^Kgu714r6$ z^u%WGUQpZ&yW-@un7<=2=(d>|Hmt+RD{dIVDow%#RSu}04O?}kOD z-{^W?)a)bs*3T|Zzh)Ge8o#;^FEn|-7@oG6x3Ev1@z_{?z5iSl5kVpcY5l}JaktPd zLzkqV7aro)>4$CkezZvLX5d(1byXF8D~SUs#pn|I)eQ`8!QnsTD^SI@T<`Y{<@oI; z>xah2T~7CxAXEiTjV#vb{p_5t8{N^7@-4v!_LAgV8ma=;cb#-6<45CgpZnu}9 zq@-M5U#|_n2)f0k81N;JqEXdC%V&2rKoP8~TM~KoJB^mPKlP#R%?+jcgHjr6QV!30 zN5ya-<4VEE<}fL&@UP_N+ZAe_XbHCr>Qy@Hha^2^9)G*@vl;LIQzac%oeYQX65It` zTwK=Y|9uUdeP&~$Th$=TxTmyT`^Bo(Qq*!|1j}@!`zhn%{LV zsRZ&vn36rHZpD#n1@;2azLg&{azN(hY*sl|gysvagjSZRqvHaa$duBl9@H7qVCaOvxXl*Td;@ZYurg!A0K9ZP}f9hobOJj8Q{en6$H2vx;p zTJv>UT#B+8b z$kx)*LUb5mJGQphRi9$;=H-L()LFk-5`ACz{uEmn4ln~0I2OW4W~{-NxI7>UX7)}jEyE4LB^KEKeWV96uD@4 zXv!+VmyyS?&K~}1#LX}A^wl{eZC_j;(61Bwmw)b z)rB;y<(jzowCuIZnGGNRB4( z8ksJ!4BP`GhAp1O@QD);ZzmN z_KC5Yh=><*?n^1sdHr*THKukgkwD$d&Jj>=TuM#~qw;=F%EPhzOTFK;YiI%e)%>RA zl@deQe=7l3I;*{!w%5DDubSCmbN6IAy$hFr{hE~wCLTfSFbFqzBqf#xJ(!ZRT1YVS zn`gE4Syt^_ZqK+hyBMArMVEn@x9!xFJynE1(4ao{XC;j*OM@Tj)dN}BPhH0U;P6n| zZ$bl^p3hif93n+3OdKllPmvuLLQWU6i?+ferw#s_u$!EdHQ=3O{s%o4W-|L}3)r+W zimObQ9LCQBS-yC)wg!O2R;~tK|*D|tDW)&luOJuT`=MhrU$|1@(H5Jae@YwI;= z3wp(2Cz;SAo==|-gTvD;Oego!tH%Ld-Xw@FR+ex5E+Uta`A#^v*c%J;5+}8~;B|Q! zMJ*<*F6^5Ph2z6HUQsBoEuGp2w6r_{hR>qY;~S7hz@X_5Am0iEiWZJjQJb+|`vj!1QL`j1zCYEPDMqLHs2o)W+B z^G>IPbl7K#+9iW!pE!0YjEfVZf3f{g^-KS}c}?4}X>zBsK(9dhEle)LTEMUoy*sN(=S42DfdoTK~iIEuo;i$W04CKqF; zh^)4=Nl3gP&24!0TjcY_3vv|LYX(RAXy#H}Wd~JGpCX}#UVQse+VxL0HNzhNL_~!Q z)fb*WdXCyWia}AvGZiikAkH=CyHaacW-NHJA<*GIPn1bH z;{F&C04y}Cm^JFGiSq8e%nZIR@_q+1KR-|AxrpZ=p+`RdXEt^i48FM)dF!Yk@>*N( z+oe@UVif38*W3inT3JPLrXGpP5b9+Q%W4 zpT+Df9N0HQvjnS@vTpZMhQr}ezErpFAD3@HK(9<7;Zr?IFJ~V-@ZFPf)}|G`ne}yM zKZn81( zB;^V((Vm{pQrXgSlgsbgCd(=P{m7Z@(NOo{XMhVRv%>s5XYkiGMZ!L|w;^_8wrqYmzQj zQ@;@52H2!mt_i&tn2zm^WoRbm?$B@8HMr6{4}550@wxu}tr7FTCT5>__hB)zC*Z0x z#s;apI~srpX5bUnU!ZpXg+Bg&*D`s0NjaHRs!rzdmA1yu+KRx-XjcbSXG|+wX0tJa z?3@y!5uC{q+JsGuyJ7^56Ad@`4JKk0&wJ6~ukeuvuXktKMMOlf=k3`hW(tnt;5`xW8=Nzx|YCB5_U zp~4nYYhR9Hb(=c*E^m0)Dw-}CymofnL+aJEz9UQwOhW!q{3eo)+rdYVX`IcA{qKgtbGN|_{?;qZW#STR7CjlWc%x{kfBrrR6mfcNU^J(zW9BHVo%9C%zvF5~k? z$j9gFR>qw{S_-YZOGd8`6M?_>Xj+x(`YLQ*$7~hPNl?H2Tw3(foS}7Q4p$lVB#~SH z*uIbJf!gTPxvKlbkNpg+;a?{t_(+O9XDiqzpeoku9t4X+=tn1Z26mc?xM8-!=sU>N zn{d|9q{E8>CdAeC=o|mF38Kho4NDfXA6_x%af^4u{W)$W0|>`V{r~^~ diff --git a/images/treeview_filter_example.png b/images/treeview_filter_example.png index 95c102e81cdb7e45137d6f8885b4b49f5dfda8b8..945fe3c94835be0393aaa3edaa3b04fe73761315 100644 GIT binary patch literal 29967 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%0A&jHJ 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 I3Kk*%3$s@WfB*mh From b7fe9c25e20f874602c9beb5b48a140e9855e6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 16 Aug 2015 14:32:31 +0200 Subject: [PATCH 031/209] Fix iconview example --- examples/iconview_example.py | 2 +- images/iconview_example.png | Bin 0 -> 11574 bytes source/iconview.txt | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 images/iconview_example.png diff --git a/examples/iconview_example.py b/examples/iconview_example.py index 98763e9..bf1c150 100644 --- a/examples/iconview_example.py +++ b/examples/iconview_example.py @@ -1,7 +1,7 @@ from gi.repository import Gtk from gi.repository.GdkPixbuf import Pixbuf -icons = ["gtk-cut", "gtk-paste", "gtk-copy"] +icons = ["edit-cut", "edit-paste", "edit-copy"] class IconViewWindow(Gtk.Window): diff --git a/images/iconview_example.png b/images/iconview_example.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fad290649e72b4ef4dd36b27cb8b32c9529036 GIT binary patch literal 11574 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�rO{l_30(o#u|S@dmU7_@VNh$T`!~Sz{WpcSNdg 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 O5tQWAWh5#(gOO literal 0 HcmV?d00001 diff --git a/source/iconview.txt b/source/iconview.txt index 272718c..9ea3a8d 100644 --- a/source/iconview.txt +++ b/source/iconview.txt @@ -9,5 +9,7 @@ Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk.Lis Example _______ +.. image:: ../images/iconview_example.png + .. literalinclude:: ../examples/iconview_example.py :linenos: From c6967aa5c80916b8e811c9b1ca057ed967758233 Mon Sep 17 00:00:00 2001 From: Giovanni Paolini Date: Tue, 1 Sep 2015 19:31:08 +0200 Subject: [PATCH 032/209] Fixed minor typos in treeview.txt https://github.com/sebp/PyGObject-Tutorial/pull/69 --- source/treeview.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index a281bc1..3f30177 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -14,7 +14,7 @@ in many ways, including: * Filtering of data With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. It -is often difficult for beginner developers to be able to utilize correctly due +is often difficult for beginner developers to be able to utilize it correctly due to the number of methods which are required. The Model @@ -55,7 +55,7 @@ Both methods return a :class:`Gtk.TreeIter` instance, which points to the locati of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` by calling :meth:`Gtk.TreeModel.get_iter`. -Once, data has been inserted you can retrieve or modify data using the tree iter +Once data has been inserted, you can retrieve or modify data using the tree iter and column index. .. code-block:: python From da7841a92250f75e46c78eaf56a62120a460610d Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 16 Sep 2015 23:47:32 +0300 Subject: [PATCH 033/209] window title fix --- examples/layout_headerbar_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index f93413d..0300b6d 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -3,7 +3,7 @@ class HeaderBarWindow(Gtk.Window): def __init__(self): - Gtk.Window.__init__(self, title="Stack Demo") + Gtk.Window.__init__(self, title="HeaderBar Demo") self.set_border_width(10) self.set_default_size(400, 200) From 90db142a9b35eac93ecb97fa87b72bf5422186a9 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 16 Sep 2015 23:48:12 +0300 Subject: [PATCH 034/209] window title fix --- examples/layout_flowbox_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 2131ac2..40d2cd1 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -3,7 +3,7 @@ class FlowBoxWindow(Gtk.Window): def __init__(self): - Gtk.Window.__init__(self, title="ListBox Demo") + Gtk.Window.__init__(self, title="FlowBox Demo") self.set_border_width(10) self.set_default_size(300, 250) From de51f7bf1b2cecfcde4c412a384f32a681c9f55b Mon Sep 17 00:00:00 2001 From: sunshine <294101042@qq.com> Date: Mon, 11 Jan 2016 11:30:59 +0800 Subject: [PATCH 035/209] Update unicode.txt spelling error --- source/unicode.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/unicode.txt b/source/unicode.txt index aab5a95..90018d6 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -16,7 +16,7 @@ numbers in the range from 0 to 0x10FFFF. As mentioned earlier, the representation of a string as a list of code points is abstract. In order to convert this abstract representation into a sequence -of bytes the Unicode string must be **encoded**. The simplest from of encoding +of bytes the Unicode string must be **encoded**. The simplest form of encoding is ASCII and is performed as follows: 1. If the code point is < 128, each byte is the same as the value of the code From c36cea3edfa094076575b9345c21f8bd152d1c7b Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Thu, 11 Feb 2016 18:14:34 +0100 Subject: [PATCH 036/209] Add documentation for Gtk.Application https://github.com/sebp/PyGObject-Tutorial/pull/73 --- examples/application_example.py | 80 +++++++++++++++++++++++++++++++++ source/application.txt | 71 +++++++++++++++++++++++++++++ source/index.txt | 7 ++- source/menus.txt | 4 ++ 4 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 examples/application_example.py create mode 100644 source/application.txt diff --git a/examples/application_example.py b/examples/application_example.py new file mode 100644 index 0000000..7b565bc --- /dev/null +++ b/examples/application_example.py @@ -0,0 +1,80 @@ +import sys + +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import GLib, Gio, Gtk + +# This would typically be its own file +MENU_XML=""" + + +

+
+ + app.about + _About + + + app.quit + _Quit + <Primary>q + +
+
+ +""" + +class Application(Gtk.Application): + + def __init__(self, *args, **kwargs): + super().__init__(*args, application_id="org.example.myapp", + flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, + **kwargs) + self.window = None + + self.add_main_option("test", ord("t"), GLib.OptionFlags.NONE, + GLib.OptionArg.NONE, "Command line test", None) + + def do_startup(self): + Gtk.Application.do_startup(self) + + action = Gio.SimpleAction.new("about", None) + action.connect("activate", self.on_about) + self.add_action(action) + + action = Gio.SimpleAction.new("quit", None) + action.connect("activate", self.on_quit) + self.add_action(action) + + builder = Gtk.Builder.new_from_string(MENU_XML, -1) + self.set_app_menu(builder.get_object("app-menu")) + + def do_activate(self): + # We only allow a single window and raise any existing ones + if not self.window: + # Windows are associated with the application + # when the last one is closed the application shuts down + self.window = Gtk.ApplicationWindow(application=self, + title="Main Window") + self.window.present() + + def do_command_line(self, command_line): + options = command_line.get_options_dict() + + if options.contains("test"): + # This is printed on the main instance + print("Test argument recieved") + + self.activate() + return 0 + + def on_about(self, action, param): + about_dialog = Gtk.AboutDialog(transient_for=self.window, modal=True) + about_dialog.present() + + def on_quit(self, action, param): + self.quit() + +if __name__ == "__main__": + app = Application() + app.run(sys.argv) diff --git a/source/application.txt b/source/application.txt new file mode 100644 index 0000000..d4fbe46 --- /dev/null +++ b/source/application.txt @@ -0,0 +1,71 @@ +.. _application: + +Application +=========== + +:class:`Gtk.Application` encompeses many repetitive tasks that a modern +application needs such as handling multiple instances, D-Bus activation, +opening files, command line parsing, startup/shutdown, menu management, +window management, and more. + +Actions +------- + +:class:`Gio.Action` is a way to expose any single task your application or widget +does by a name. These actions can be disabled/enabled at runtime and they can +either be activated or have a state changed (if they contain state). + +The reason to use actions is to separate out the logic from the UI. For example +this allows using a menubar on OSX and a gear menu on GNOME both simply +referencing the name of an action. The main implementaiton of this you will +be using is :class:`Gio.SimpleAction` which will be showed off later. + +Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` support +properties to set an action name. + +These actions can be grouped together into a :class:`Gio.ActionGroup` and +when these groups are added to a widget with :meth:`Gtk.Widget.insert_action_group()` +they will gain a prefix. Such as "win" when added to a :class:`Gtk.ApplicationWindow`. +You will use the full action name when referencing it such as "app.about" but when +you create the action it will just be "about" until added to the application. + +You can also very easily make keybindings for actions by setting the `accel` +property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application.add_accelerator()`. + +Menus +----- + +Your menus should be defined in XML using :class:`Gio.Menu` and would reference +the previously mentioned actions you defined. :class:`Gtk.Application` allows you +to set a menu either via :meth:`Gtk.Application.set_app_menu()` +or :meth:`Gtk.Application.set_menubar()`. If you make use of :class:`Gio.Resource` +this can automatically use the correct menu based on platform, otherwise you can +set them manually. A detailed example is shown below. + +Command Line +------------ + +When creating your application it takes a flag property of :class:`Gio.ApplicationFlags`. +Using this you can let it handle everything itself or have more custom behavior. + +You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio.Application.do_command_line()`. +In combination with :meth:`Gio.Application.add_main_option()` to add custom options. + +Using `HANDLES_OPEN` will do the work of simply taking file arguments for you and +let you handle it in :meth:`Gio.Application.do_open()`. + +If your application is already open these will all be sent to the existing instance +unless you use `NON_UNIQUE` to allow multiple instances. + +Example +------- + +.. literalinclude:: ../examples/application_example.py + :linenos: + +See Also +~~~~~~~~ + +- https://wiki.gnome.org/HowDoI/GtkApplication +- https://wiki.gnome.org/HowDoI/GAction +- https://wiki.gnome.org/HowDoI/GMenu diff --git a/source/index.txt b/source/index.txt index dfe6029..d7e038e 100644 --- a/source/index.txt +++ b/source/index.txt @@ -48,12 +48,17 @@ Contents: combobox iconview textview - menus dialogs clipboard drag_and_drop builder objects + application + +.. toctree:: + :caption: Deprecated + + menus Indices and tables ================== diff --git a/source/menus.txt b/source/menus.txt index 84fd088..897f8c7 100644 --- a/source/menus.txt +++ b/source/menus.txt @@ -1,6 +1,10 @@ Menus ===== +.. note:: :class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` + have been deprecated since GTK+ version 3.10 and should not be used in + newly-written code. Use the :ref:`application` framework instead. + GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which contains one or more :class:`Gtk.MenuItem` instances or one of its subclasses. From 0492d9e939710ff345bfcf96a2cc36bc40b9f792 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Mon, 18 Jan 2016 16:27:22 -0500 Subject: [PATCH 037/209] Mention setting properties through object.props https://github.com/sebp/PyGObject-Tutorial/pull/74 --- source/basics.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/basics.txt b/source/basics.txt index 491e100..fd172a3 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -95,9 +95,10 @@ which is equivalent to label.set_angle(25) label.set_halign(Gtk.Align.END) -Instead of using getters and setters you can also get and set the properties -with ``widget.get_property("prop-name")`` and ``widget.set_property("prop-name", -value)``, respectively. +Instead of using getters and setters you can also get and set the gobject properties +through the "props" property such as ``widget.props.prop_name = value``. +This is equivelent to the more verbose ``widget.get_property("prop-name")`` and +``widget.set_property("prop-name", value)``. To see which properties are available for a widget in the running version of GTK you can "dir" the "props" property: From cea98ec521565c1cad19b25fc663ca0486672717 Mon Sep 17 00:00:00 2001 From: Wolf Vollprecht Date: Wed, 10 Feb 2016 01:49:04 +0100 Subject: [PATCH 038/209] Added example with custom ListBoxRow class Also added sort, and filter func example And row activation https://github.com/sebp/PyGObject-Tutorial/pull/76 --- examples/layout_listbox_example.py | 31 ++++++++++++++++++++++++++--- images/listbox_example.png | Bin 12005 -> 14590 bytes 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index cc435b8..4b314ac 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -1,17 +1,23 @@ from gi.repository import Gtk +class ListBoxRowWithData(Gtk.ListBoxRow): + def __init__(self, data): + super(Gtk.ListBoxRow, self).__init__() + self.data = data + self.add(Gtk.Label(data)) + class ListBoxWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ListBox Demo") self.set_border_width(10) - hbox = Gtk.Box(spacing=6) - self.add(hbox) + box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) + self.add(box_outer) listbox = Gtk.ListBox() listbox.set_selection_mode(Gtk.SelectionMode.NONE) - hbox.pack_start(listbox, True, True, 0) + box_outer.pack_start(listbox, True, True, 0) row = Gtk.ListBoxRow() hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) @@ -52,6 +58,25 @@ def __init__(self): listbox.add(row) + listbox_2 = Gtk.ListBox() + items = 'This is a sorted ListBox Fail'.split() + + for item in items: + listbox_2.add(ListBoxRowWithData(item)) + + def sort_func(row_1, row_2, data, notify_destroy): + return row_1.data.lower() > row_2.data.lower() + + def filter_func(row, data, notify_destroy): + return False if row.data == 'Fail' else True + + listbox_2.set_sort_func(sort_func, None, False) + listbox_2.set_filter_func(filter_func, None, False) + + listbox_2.connect('row-activated', lambda widget, row: print(row.data)) + + box_outer.pack_start(listbox_2, True, True, 0) + listbox_2.show_all() win = ListBoxWindow() win.connect("delete-event", Gtk.main_quit) diff --git a/images/listbox_example.png b/images/listbox_example.png index 8a6a3c52274f5a25366284ae10da4982b8eed4e2..33575519829694dd8c2902645b46317dbf9d3ac5 100644 GIT binary patch literal 14590 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 literal 12005 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 O2S|%6i2W8Z4E!&#_*b6* From 965b93bae871c7f1a001ef3cc74dfe53796371cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 11 Feb 2016 18:40:34 +0100 Subject: [PATCH 039/209] Add gi.requires line to examples --- examples/builder_example.py | 2 ++ examples/button_example.py | 2 ++ examples/cellrendereraccel_example.py | 2 ++ examples/cellrenderercombo_example.py | 2 ++ examples/cellrendererpixbuf_example.py | 2 ++ examples/cellrendererprogress_example.py | 2 ++ examples/cellrendererspin_example.py | 2 ++ examples/cellrenderertext_example.py | 2 ++ examples/cellrenderertoggle_example.py | 2 ++ examples/checkbutton_example.py | 2 ++ examples/clipboard_example.py | 2 ++ examples/combobox_example.py | 2 ++ examples/dialog_example.py | 2 ++ examples/drag_and_drop_example.py | 2 ++ examples/entry_example.py | 2 ++ examples/extended_example.py | 3 ++- examples/filechooserdialog_example.py | 2 ++ examples/iconview_example.py | 2 ++ examples/label_example.py | 2 ++ examples/layout_box_example.py | 2 ++ examples/layout_flowbox_example.py | 2 ++ examples/layout_grid_example.py | 2 ++ examples/layout_headerbar_example.py | 2 ++ examples/layout_listbox_example.py | 2 ++ examples/layout_stack_example.py | 2 ++ examples/layout_table_example.py | 2 ++ examples/linkbutton_example.py | 2 ++ examples/menu_example.py | 2 ++ examples/messagedialog_example.py | 2 ++ examples/notebook_plain_example.py | 2 ++ examples/progressbar_example.py | 2 ++ examples/radiobutton_example.py | 2 ++ examples/simple_example.py | 3 ++- examples/spinbutton_example.py | 2 ++ examples/spinner_example.py | 3 ++- examples/switch_example.py | 2 ++ examples/textview_example.py | 2 ++ examples/togglebutton_example.py | 2 ++ examples/treeview_filter_example.py | 2 ++ 39 files changed, 78 insertions(+), 3 deletions(-) diff --git a/examples/builder_example.py b/examples/builder_example.py index 32bd59a..893320e 100644 --- a/examples/builder_example.py +++ b/examples/builder_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class Handler: diff --git a/examples/button_example.py b/examples/button_example.py index e7b30e4..37abf22 100644 --- a/examples/button_example.py +++ b/examples/button_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class ButtonWindow(Gtk.Window): diff --git a/examples/cellrendereraccel_example.py b/examples/cellrendereraccel_example.py index 0770383..250ea86 100644 --- a/examples/cellrendereraccel_example.py +++ b/examples/cellrendereraccel_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererAccelWindow(Gtk.Window): diff --git a/examples/cellrenderercombo_example.py b/examples/cellrenderercombo_example.py index 32524d8..2abd421 100644 --- a/examples/cellrenderercombo_example.py +++ b/examples/cellrenderercombo_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererComboWindow(Gtk.Window): diff --git a/examples/cellrendererpixbuf_example.py b/examples/cellrendererpixbuf_example.py index c9cf370..49afa84 100644 --- a/examples/cellrendererpixbuf_example.py +++ b/examples/cellrendererpixbuf_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererPixbufWindow(Gtk.Window): diff --git a/examples/cellrendererprogress_example.py b/examples/cellrendererprogress_example.py index 9e85ae5..125a62f 100644 --- a/examples/cellrendererprogress_example.py +++ b/examples/cellrendererprogress_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GObject class CellRendererProgressWindow(Gtk.Window): diff --git a/examples/cellrendererspin_example.py b/examples/cellrendererspin_example.py index 5ba9d3c..e8be729 100644 --- a/examples/cellrendererspin_example.py +++ b/examples/cellrendererspin_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererSpinWindow(Gtk.Window): diff --git a/examples/cellrenderertext_example.py b/examples/cellrenderertext_example.py index 9dae41e..72c27c0 100644 --- a/examples/cellrenderertext_example.py +++ b/examples/cellrenderertext_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererTextWindow(Gtk.Window): diff --git a/examples/cellrenderertoggle_example.py b/examples/cellrenderertoggle_example.py index 1b375bd..e89c386 100644 --- a/examples/cellrenderertoggle_example.py +++ b/examples/cellrenderertoggle_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CellRendererToggleWindow(Gtk.Window): diff --git a/examples/checkbutton_example.py b/examples/checkbutton_example.py index a01b864..dedcb1a 100644 --- a/examples/checkbutton_example.py +++ b/examples/checkbutton_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class CheckButtonWindow(Gtk.Window): diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index bff4da0..1ecf59f 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk class ClipboardWindow(Gtk.Window): diff --git a/examples/combobox_example.py b/examples/combobox_example.py index 427b0cc..cff9531 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class ComboBoxWindow(Gtk.Window): diff --git a/examples/dialog_example.py b/examples/dialog_example.py index 34b9234..7a449e1 100644 --- a/examples/dialog_example.py +++ b/examples/dialog_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class DialogExample(Gtk.Dialog): diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index 2e22a63..fd350fd 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk, GdkPixbuf (TARGET_ENTRY_TEXT, TARGET_ENTRY_PIXBUF) = range(2) diff --git a/examples/entry_example.py b/examples/entry_example.py index fbf1952..bf3f0c5 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GObject class EntryWindow(Gtk.Window): diff --git a/examples/extended_example.py b/examples/extended_example.py index 5dbd4ea..2657cd0 100644 --- a/examples/extended_example.py +++ b/examples/extended_example.py @@ -1,4 +1,5 @@ -#!/usr/bin/python +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class MyWindow(Gtk.Window): diff --git a/examples/filechooserdialog_example.py b/examples/filechooserdialog_example.py index 4f12197..a6e1a86 100644 --- a/examples/filechooserdialog_example.py +++ b/examples/filechooserdialog_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class FileChooserWindow(Gtk.Window): diff --git a/examples/iconview_example.py b/examples/iconview_example.py index bf1c150..8744011 100644 --- a/examples/iconview_example.py +++ b/examples/iconview_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository.GdkPixbuf import Pixbuf diff --git a/examples/label_example.py b/examples/label_example.py index bf9e266..a0dd87c 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class LabelWindow(Gtk.Window): diff --git a/examples/layout_box_example.py b/examples/layout_box_example.py index 037653a..1d0236e 100644 --- a/examples/layout_box_example.py +++ b/examples/layout_box_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class MyWindow(Gtk.Window): diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 40d2cd1..1e81899 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk class FlowBoxWindow(Gtk.Window): diff --git a/examples/layout_grid_example.py b/examples/layout_grid_example.py index 0528e8b..6ce31ac 100644 --- a/examples/layout_grid_example.py +++ b/examples/layout_grid_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class GridWindow(Gtk.Window): diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 0300b6d..a15caa7 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gio class HeaderBarWindow(Gtk.Window): diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index 4b314ac..37bf926 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class ListBoxRowWithData(Gtk.ListBoxRow): diff --git a/examples/layout_stack_example.py b/examples/layout_stack_example.py index c5b78f1..f64643b 100644 --- a/examples/layout_stack_example.py +++ b/examples/layout_stack_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class StackWindow(Gtk.Window): diff --git a/examples/layout_table_example.py b/examples/layout_table_example.py index 130022f..05642e4 100644 --- a/examples/layout_table_example.py +++ b/examples/layout_table_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class TableWindow(Gtk.Window): diff --git a/examples/linkbutton_example.py b/examples/linkbutton_example.py index 23c5911..8132145 100644 --- a/examples/linkbutton_example.py +++ b/examples/linkbutton_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class LinkButtonWindow(Gtk.Window): diff --git a/examples/menu_example.py b/examples/menu_example.py index aa36f5e..03be355 100644 --- a/examples/menu_example.py +++ b/examples/menu_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk UI_INFO = """ diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index f9623f4..3339905 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class MessageDialogWindow(Gtk.Window): diff --git a/examples/notebook_plain_example.py b/examples/notebook_plain_example.py index 39cde76..959d42c 100644 --- a/examples/notebook_plain_example.py +++ b/examples/notebook_plain_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class MyWindow(Gtk.Window): diff --git a/examples/progressbar_example.py b/examples/progressbar_example.py index 3506930..b3f7d0e 100644 --- a/examples/progressbar_example.py +++ b/examples/progressbar_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GObject class ProgressBarWindow(Gtk.Window): diff --git a/examples/radiobutton_example.py b/examples/radiobutton_example.py index 5d4a0b4..1cc1256 100644 --- a/examples/radiobutton_example.py +++ b/examples/radiobutton_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class RadioButtonWindow(Gtk.Window): diff --git a/examples/simple_example.py b/examples/simple_example.py index 33b18e9..8f0c4eb 100644 --- a/examples/simple_example.py +++ b/examples/simple_example.py @@ -1,4 +1,5 @@ -#!/usr/bin/python +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk win = Gtk.Window() diff --git a/examples/spinbutton_example.py b/examples/spinbutton_example.py index abb0cc5..499fab6 100644 --- a/examples/spinbutton_example.py +++ b/examples/spinbutton_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class SpinButtonWindow(Gtk.Window): diff --git a/examples/spinner_example.py b/examples/spinner_example.py index 624c4ed..bd1be0a 100644 --- a/examples/spinner_example.py +++ b/examples/spinner_example.py @@ -1,4 +1,5 @@ - +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class SpinnerAnimation(Gtk.Window): diff --git a/examples/switch_example.py b/examples/switch_example.py index dd25026..debdc26 100644 --- a/examples/switch_example.py +++ b/examples/switch_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class SwitcherWindow(Gtk.Window): diff --git a/examples/textview_example.py b/examples/textview_example.py index efe371d..42659cc 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Pango class SearchDialog(Gtk.Dialog): diff --git a/examples/togglebutton_example.py b/examples/togglebutton_example.py index 16637a6..db23918 100644 --- a/examples/togglebutton_example.py +++ b/examples/togglebutton_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk class ToggleButtonWindow(Gtk.Window): diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index 84417a5..4008615 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -1,3 +1,5 @@ +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk #list of tuples for each software, containing the software name, initial release, and main programming languages used From a1e45abd55bdc57d7fbdb17a54171e0f4a28fb85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 11 Feb 2016 18:48:08 +0100 Subject: [PATCH 040/209] Mark Gtk.Table as deprecated --- source/index.txt | 2 ++ source/layout-table.txt | 32 ++++++++++++++++++++++++++++++++ source/layout.txt | 32 +++----------------------------- 3 files changed, 37 insertions(+), 29 deletions(-) create mode 100644 source/layout-table.txt diff --git a/source/index.txt b/source/index.txt index d7e038e..5427f22 100644 --- a/source/index.txt +++ b/source/index.txt @@ -57,8 +57,10 @@ Contents: .. toctree:: :caption: Deprecated + :maxdepth: 1 menus + layout-table Indices and tables ================== diff --git a/source/layout-table.txt b/source/layout-table.txt new file mode 100644 index 0000000..d0f9ab9 --- /dev/null +++ b/source/layout-table.txt @@ -0,0 +1,32 @@ +Table +----- + +.. note:: :class:`Gtk.Table` + has been deprecated since GTK+ version 3.4 and should not be used in + newly-written code. Use the :ref:`layout-grid` class instead. + +Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`. + +The grid's dimensions need to be specified in the :class:`Gtk.Table` constructor. +To place a widget into a box, use :meth:`Gtk.Table.attach`. + +:meth:`Gtk.Table.set_row_spacing` and +:meth:`Gtk.Table.set_col_spacing` set the spacing between the rows at the +specified row or column. Note that for columns, the space goes to the right +of the column, and for rows, the space goes below the row. + +You can also set a consistent spacing for all rows and/or columns with +:meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. +Note that with these calls, the last row and last column do not get any spacing. + +.. deprecated:: 3.4 + It is reccomened that you use the :class:`Gtk.Grid` for new code. + +Example +^^^^^^^ + +.. image:: ../images/layout_table_example.png + +.. literalinclude:: ../examples/layout_table_example.py + :linenos: + diff --git a/source/layout.txt b/source/layout.txt index 8208e6c..cdc67ab 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -23,7 +23,7 @@ There are two flavours of containers: single-child containers, which are all descendants of :class:`Gtk.Bin`, and multiple-child containers, which are descendants of :class:`Gtk.Container`. The most commonly used are vertical or horizontal boxes -(:class:`Gtk.Box`), tables (:class:`Gtk.Table`) and grids (:class:`Gtk.Grid`). +(:class:`Gtk.Box`) and grids (:class:`Gtk.Grid`). Boxes ----- @@ -61,6 +61,8 @@ Subsequently, we add two different buttons to the box container. While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to right, :meth:`Gtk.Box.pack_end` positions them from right to left. +.. _layout-grid: + Grid ---- :class:`Gtk.Grid` is a container which arranges its child widgets in rows and @@ -82,34 +84,6 @@ Example .. literalinclude:: ../examples/layout_grid_example.py :linenos: -Table ------ - -Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`. - -The grid's dimensions need to be specified in the :class:`Gtk.Table` constructor. -To place a widget into a box, use :meth:`Gtk.Table.attach`. - -:meth:`Gtk.Table.set_row_spacing` and -:meth:`Gtk.Table.set_col_spacing` set the spacing between the rows at the -specified row or column. Note that for columns, the space goes to the right -of the column, and for rows, the space goes below the row. - -You can also set a consistent spacing for all rows and/or columns with -:meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. -Note that with these calls, the last row and last column do not get any spacing. - -.. deprecated:: 3.4 - It is reccomened that you use the :class:`Gtk.Grid` for new code. - -Example -^^^^^^^ - -.. image:: ../images/layout_table_example.png - -.. literalinclude:: ../examples/layout_table_example.py - :linenos: - ListBox ------- From 9914a75e9e9aa498cd3643d2c2a18800a6a2fb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 3 Mar 2016 22:51:52 +0100 Subject: [PATCH 041/209] Fix :lines: when displaying parts of files Examples were shifted by two lines due to commit 965b93bae871c7f1a001ef3cc74dfe53796371cc Fixes https://github.com/sebp/PyGObject-Tutorial/issues/79 --- source/introduction.txt | 30 +++++++++++++++--------------- source/layout.txt | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/source/introduction.txt b/source/introduction.txt index ff2b39a..2da976f 100644 --- a/source/introduction.txt +++ b/source/introduction.txt @@ -17,36 +17,36 @@ This program will create an empty 200 x 200 pixel window. We will now explain each line of the example. .. literalinclude:: ../examples/simple_example.py - :lines: 1 + :lines: 1-3 -The first line of all Python programs should start with ``#!`` followed -by the path to the Python interpreter you want to invoke. +In the beginning, we have to import the Gtk module to be able to +access GTK+'s classes and functions. +Since a user's system can have multiple versions of GTK+ installed at the same, +we want to make sure that we when we import Gtk that it referrs to GTK+ 3 +and not any other version of the library, which is the purpose +of statement ``gi.require_version('Gtk', '3.0')``. -.. literalinclude:: ../examples/simple_example.py - :lines: 2 - -In order to access GTK+ classes and functions we first must import the Gtk module. The next line creates an empty window. .. literalinclude:: ../examples/simple_example.py - :lines: 4 + :lines: 5 Followed by connecting to the window's delete event to ensure that the application is terminated if we click on the *x* to close the window. .. literalinclude:: ../examples/simple_example.py - :lines: 5 + :lines: 6 In the next step we display the window. .. literalinclude:: ../examples/simple_example.py - :lines: 6 + :lines: 7 Finally, we start the GTK+ processing loop which we quit when the window is closed (see line 5). .. literalinclude:: ../examples/simple_example.py - :lines: 7 + :lines: 8 To run the program, open a terminal, change to the directory of the file, and enter:: @@ -67,24 +67,24 @@ This example differs from the simple example as we sub-class :class:`Gtk.Window` :class:`MyWindow` class. .. literalinclude:: ../examples/extended_example.py - :lines: 4 + :lines: 5 In the class's constructor we have to call the constructor of the super class. In addition, we tell it to set the value of the property `title` to `Hello World`. .. literalinclude:: ../examples/extended_example.py - :lines: 7 + :lines: 8 The next three lines are used to create a button widget, connect to its `clicked` signal and add it as child to the top-level window. .. literalinclude:: ../examples/extended_example.py - :lines: 9-12 + :lines: 10-12 Accordingly, the method :meth:`on_button_clicked` will be called if you click on the button. .. literalinclude:: ../examples/extended_example.py - :lines: 13-15 + :lines: 14-15 The last block, outside of the class, is very similar to the simple example above, but instead of creating an instance of the generic :class:`Gtk.Window` class, we create diff --git a/source/layout.txt b/source/layout.txt index cdc67ab..7c8f21f 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -51,12 +51,12 @@ First, we create a horizontally orientated box container where 6 pixels are placed between children. This box becomes the child of the top-level window. .. literalinclude:: ../examples/layout_box_example.py - :lines: 8-9 + :lines: 10-11 Subsequently, we add two different buttons to the box container. .. literalinclude:: ../examples/layout_box_example.py - :lines: 11-17 + :lines: 13-19 While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to right, :meth:`Gtk.Box.pack_end` positions them from right to left. From 402f67098e8ba7314ff0a44084d7a3421d52440f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 3 Mar 2016 22:58:55 +0100 Subject: [PATCH 042/209] Consistently use print function instead of statement --- source/builder.txt | 2 +- source/objects.txt | 8 ++++---- source/treeview.txt | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/builder.txt b/source/builder.txt index f318bfd..3c37f18 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -95,7 +95,7 @@ When the button is pressed we would like to print the string "Hello World!", so .. code-block:: python def hello(button): - print "Hello World!" + print("Hello World!") Next, we have to connect the signals and the handler functions. The easiest way to do this is to define a *dict* with a mapping from the names to the handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method. diff --git a/source/objects.txt b/source/objects.txt index f63217d..18e354d 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -70,7 +70,7 @@ called each time the signal is emitted. It is called do_signal_name. } def do_my_signal(self, arg): - print "class method for `my_signal' called with argument", arg + print("class method for `my_signal' called with argument", arg) :const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the object method handler (:meth:`do_my_signal` here) in the first emission stage. Alternatives are @@ -164,8 +164,8 @@ You can get this property using: .. code-block:: python my_object = MyObject() - print my_object.readonly - print my_object.get_property("readonly") + print(my_object.readonly) + print(my_object.get_property("readonly")) There is also a way to define minimum and maximum values for numbers, using a more verbose form: @@ -217,7 +217,7 @@ When a property is modified, a signal is emitted, whose name is my_object = MyObject() def on_notify_foo(obj, gparamstring): - print "foo changed" + print("foo changed") my_object.connect("notify::foo", on_notify_foo) diff --git a/source/treeview.txt b/source/treeview.txt index 3f30177..672d53c 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -60,7 +60,7 @@ and column index. .. code-block:: python - print store[treeiter][2] # Prints value of third column + print(store[treeiter][2]) # Prints value of third column store[treeiter][2] = 42.15 As with Python's built-in :class:`list` object you can use :func:`len` to get the number @@ -69,11 +69,11 @@ of rows and use slices to retrieve or set values. .. code-block:: python # Print number of rows - print len(store) + print(len(store)) # Print all but first column - print store[treeiter][1:] + print(store[treeiter][1:]) # Print last column - print store[treeiter][-1] + print(store[treeiter][-1]) # Set first two columns store[treeiter][:2] = ["Donald Ervin Knuth", 41.99] @@ -83,7 +83,7 @@ Iterating over all rows of a tree model is very simple as well. for row in store: # Print values of all columns - print row[:] + print(row[:]) Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will only iterate over the rows of the top level, but not the children of the nodes. @@ -97,7 +97,7 @@ To iterate over all rows and its children, use the ``print_tree_store`` function def print_rows(store, treeiter, indent): while treeiter != None: - print indent + str(store[treeiter][:]) + print(indent + str(store[treeiter][:])) if store.iter_has_child(treeiter): childiter = store.iter_children(treeiter) print_rows(store, childiter, indent + "\t") @@ -207,7 +207,7 @@ Then to retrieve data for the row selected: def on_tree_selection_changed(selection): model, treeiter = selection.get_selected() if treeiter != None: - print "You selected", model[treeiter][0] + print("You selected", model[treeiter][0]) You can control what selections are allowed by calling :meth:`Gtk.TreeSelection.set_mode`. From b13d2701ac0b4d94f893132f38131672027c6d38 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sat, 13 Feb 2016 01:56:56 -0500 Subject: [PATCH 043/209] Add examples of stateful actions https://github.com/sebp/PyGObject-Tutorial/pull/77 Fixes https://github.com/sebp/PyGObject-Tutorial/issues/68 and https://github.com/sebp/PyGObject-Tutorial/issues/44 --- examples/application_example.py | 66 ++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/examples/application_example.py b/examples/application_example.py index 7b565bc..f717af4 100644 --- a/examples/application_example.py +++ b/examples/application_example.py @@ -9,6 +9,30 @@ +
+ Change label + + win.change_label + String 1 + String 1 + + + win.change_label + String 2 + String 2 + + + win.change_label + String 3 + String 3 + +
+
+ + win.maximize + Maximize + +
app.about @@ -24,6 +48,44 @@ """ +class AppWindow(Gtk.ApplicationWindow): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # This will be in the windows group and have the "win" prefix + max_action = Gio.SimpleAction.new_stateful("maximize", None, + GLib.Variant.new_boolean(False)) + max_action.connect("change-state", self.on_maximize_toggle) + self.add_action(max_action) + + # Keep it in sync with the actual state + self.connect("notify::is-maximized", + lambda obj, pspec: max_action.set_state( + GLib.Variant.new_boolean(obj.props.is_maximized))) + + lbl_variant = GLib.Variant.new_string("String 1") + lbl_action = Gio.SimpleAction.new_stateful("change_label", lbl_variant.get_type(), + lbl_variant) + lbl_action.connect("change-state", self.on_change_label_state) + self.add_action(lbl_action) + + self.label = Gtk.Label(label=lbl_variant.get_string(), + margin=30) + self.add(self.label) + self.label.show() + + def on_change_label_state(self, action, value): + action.set_state(value) + self.label.set_text(value.get_string()) + + def on_maximize_toggle(self, action, value): + action.set_state(value) + if value.get_boolean(): + self.maximize() + else: + self.unmaximize() + class Application(Gtk.Application): def __init__(self, *args, **kwargs): @@ -54,8 +116,8 @@ def do_activate(self): if not self.window: # Windows are associated with the application # when the last one is closed the application shuts down - self.window = Gtk.ApplicationWindow(application=self, - title="Main Window") + self.window = AppWindow(application=self, title="Main Window") + self.window.present() def do_command_line(self, command_line): From 5026eaa1c0f13a04821ebce21a5b29cc4ccf1ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 3 Mar 2016 23:20:28 +0100 Subject: [PATCH 044/209] Add image of application_example.py --- images/application_example.png | Bin 0 -> 12227 bytes source/application.txt | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 images/application_example.png diff --git a/images/application_example.png b/images/application_example.png new file mode 100644 index 0000000000000000000000000000000000000000..1bdde057518b16f98475ec9d24ef64143d834a08 GIT binary patch literal 12227 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 Date: Thu, 3 Mar 2016 23:30:09 +0100 Subject: [PATCH 045/209] Add link to https://wiki.gnome.org/HowDoI/ApplicationMenu --- source/application.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/source/application.txt b/source/application.txt index 8cbc6ff..7015ca2 100644 --- a/source/application.txt +++ b/source/application.txt @@ -70,4 +70,5 @@ See Also - https://wiki.gnome.org/HowDoI/GtkApplication - https://wiki.gnome.org/HowDoI/GAction +- https://wiki.gnome.org/HowDoI/ApplicationMenu - https://wiki.gnome.org/HowDoI/GMenu From f94c13c7b4baf3232f08c5e5363fa71910c973b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 3 Mar 2016 23:32:34 +0100 Subject: [PATCH 046/209] Raise level of "See Also" heading by one level --- source/application.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/application.txt b/source/application.txt index 7015ca2..4b38e06 100644 --- a/source/application.txt +++ b/source/application.txt @@ -66,7 +66,7 @@ Example :linenos: See Also -~~~~~~~~ +-------- - https://wiki.gnome.org/HowDoI/GtkApplication - https://wiki.gnome.org/HowDoI/GAction From 1917acaf6a50806cb4426a9aaa451c2992e25cb2 Mon Sep 17 00:00:00 2001 From: mozbugbox Date: Mon, 23 May 2016 23:18:26 +0800 Subject: [PATCH 047/209] Update GObject property decorator to class The GObject.Property deprecated the GObject.property as described in _propertyhelper.py. --- source/objects.txt | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/source/objects.txt b/source/objects.txt index 18e354d..7c9129a 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -115,7 +115,7 @@ Create new properties A property is defined with a name and a type. Even if python itself is dynamically typed, you can't change the type of a property once it is defined. A -property can be created using :func:`GObject.property`. +property can be created using :class:`GObject.Property`. .. code-block:: python @@ -123,8 +123,8 @@ property can be created using :func:`GObject.property`. class MyObject(GObject.GObject): - foo = GObject.property(type=str, default='bar') - property_float = GObject.property(type=float) + foo = GObject.Property(type=str, default='bar') + property_float = GObject.Property(type=float) def __init__(self): GObject.GObject.__init__(self) @@ -139,12 +139,12 @@ Flags are :const:`GObject.PARAM_READABLE` (only read access for external code), .. code-block:: python - foo = GObject.property(type=str, flags = GObject.PARAM_READABLE) # not writable - bar = GObject.property(type=str, flags = GObject.PARAM_WRITABLE) # not readable + foo = GObject.Property(type=str, flags = GObject.PARAM_READABLE) # not writable + bar = GObject.Property(type=str, flags = GObject.PARAM_WRITABLE) # not readable You can also define new read-only properties with a new method decorated with -:func:`GObject.property`: +:class:`GObject.Property`: .. code-block:: python @@ -155,7 +155,7 @@ You can also define new read-only properties with a new method decorated with def __init__(self): GObject.GObject.__init__(self) - @GObject.property + @GObject.Property def readonly(self): return 'This is read-only.' @@ -167,6 +167,27 @@ You can get this property using: print(my_object.readonly) print(my_object.get_property("readonly")) +The API of :class:`GObject.Property` is similar to the builtin :py:func:`property`. You can create property setter in a way similar to Python property: + +.. code-block:: python + + class AnotherObject(GObject.Object): + value = 0 + + @GObject.Property + def prop(self): + 'Read only property.' + return 1 + + @GObject.Property(type=int) + def propInt(self): + 'Read-write integer property.' + return self.value + + @propInt.setter + def propInt(self, value): + self.value = value + There is also a way to define minimum and maximum values for numbers, using a more verbose form: .. code-block:: python From b9da024caaba928e42b77dd3bc93448f036f92d0 Mon Sep 17 00:00:00 2001 From: Felix Heinrichs Date: Mon, 26 Sep 2016 18:34:05 +0800 Subject: [PATCH 048/209] add hint for required canonical property names When connecting to the notify signal for a property, we have to use the canonical property name. This is in particular relevant for typical python style underscore_case named properties, e.g., `foo_bar_baz`, where the canonical name replaces the underscore with a dash, i.e., the signal is `"notify::foo-bar-baz"`. Cost me some time and a false Bug report to PyGObject to figure that one out ... so maybe add it here? Think that might save some people some work in the future :). --- source/objects.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/source/objects.txt b/source/objects.txt index 7c9129a..9ea5168 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -231,7 +231,7 @@ Watch properties ^^^^^^^^^^^^^^^^ When a property is modified, a signal is emitted, whose name is -"notify::property_name": +"notify::property-name": .. code-block:: python @@ -244,6 +244,21 @@ When a property is modified, a signal is emitted, whose name is my_object.set_property("foo", "bar") # on_notify_foo will be called + +Note that you have to use the canonical property name when connecting to the notify signals, as explained in +:func:`GObject.Object.signals.notify`. For instance, for a python property `foo_bar_baz` you would connect to +the signal `notify::foo-bar-baz` using + +.. code-block:: python + + my_object = MyObject() + + def on_notify_foo_bar_baz(obj, gparamstring): + print("foo_bar_baz changed") + + my_object.connect("notify::foo-bar-baz", on_notify_foo_bar_baz) + + API --- From 1fae7c12b211256a4391ce1a3a8bc8054b2d985c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 26 Sep 2016 20:55:23 +0100 Subject: [PATCH 049/209] Use uppercase Python in text --- source/objects.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/objects.txt b/source/objects.txt index 9ea5168..2aac5d3 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -9,7 +9,7 @@ The :class:`GObject.GObject` class provides methods for object construction and property access methods, and signal support. This section will introduce some important aspects about the GObject -implementation in python. +implementation in Python. Inherit from GObject.GObject ---------------------------- @@ -113,7 +113,7 @@ them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button.set_label`. Create new properties ^^^^^^^^^^^^^^^^^^^^^ -A property is defined with a name and a type. Even if python itself is +A property is defined with a name and a type. Even if Python itself is dynamically typed, you can't change the type of a property once it is defined. A property can be created using :class:`GObject.Property`. @@ -135,7 +135,7 @@ Flags are :const:`GObject.PARAM_READABLE` (only read access for external code), :const:`GObject.PARAM_READWRITE` (public): .. there is also construct things, but they -.. doesn't seem to be functional in python +.. doesn't seem to be functional in Python .. code-block:: python @@ -246,7 +246,7 @@ When a property is modified, a signal is emitted, whose name is Note that you have to use the canonical property name when connecting to the notify signals, as explained in -:func:`GObject.Object.signals.notify`. For instance, for a python property `foo_bar_baz` you would connect to +:func:`GObject.Object.signals.notify`. For instance, for a Python property `foo_bar_baz` you would connect to the signal `notify::foo-bar-baz` using .. code-block:: python From 260b11a25b115fa621de586ca50d553208d81eb7 Mon Sep 17 00:00:00 2001 From: Tord Date: Thu, 13 Oct 2016 14:59:02 +0200 Subject: [PATCH 050/209] Python GObject Introspection API Ref. link added Fixes issue #86 --- source/index.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/index.txt b/source/index.txt index 5427f22..f668991 100644 --- a/source/index.txt +++ b/source/index.txt @@ -25,7 +25,8 @@ lists and tuples will be needed. Although this tutorial describes the most important classes and methods within GTK+ 3, it is not supposed to serve as an API reference. Please refer to the `GTK+ 3 Reference Manual `_ for a -detailed description of the API. +detailed description of the API. Also there's a `Python-specific reference +`_ available. Contents: From a489131833c60efb1c3831b45952a003b6e71873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 16 Oct 2016 11:52:53 +0100 Subject: [PATCH 051/209] Use https URLs --- source/builder.txt | 4 ++-- source/conf.py | 8 ++++---- source/index.txt | 4 ++-- source/install.txt | 10 +++++----- source/unicode.txt | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/source/builder.txt b/source/builder.txt index 3c37f18..5959226 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -2,7 +2,7 @@ Glade and Gtk.Builder ===================== The :class:`Gtk.Builder` class offers you the opportunity to design user interfaces without writing a single line of code. This is possible through describing the interface by a XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. -For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner +For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner This method has several advantages: @@ -15,7 +15,7 @@ There is still code required for handling interface changes triggered by the use Creating and loading the .glade file ------------------------------------ -First of all you have to download and install Glade. There are `several tutorials `_ about Glade, so this is not explained here in detail. +First of all you have to download and install Glade. There are `several tutorials `_ about Glade, so this is not explained here in detail. Let's start by creating a window with a button in it and saving it to a file named *example.glade*. The resulting XML file should look like this. diff --git a/source/conf.py b/source/conf.py index 84b5f11..65af604 100644 --- a/source/conf.py +++ b/source/conf.py @@ -28,10 +28,10 @@ extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx'] intersphinx_mapping = { - 'glib': ('http://lazka.github.io/pgi-docs/GLib-2.0', None), - 'gobject': ('http://lazka.github.io/pgi-docs/GObject-2.0', None), - 'gio': ('http://lazka.github.io/pgi-docs/Gio-2.0', None), - 'gtk': ('http://lazka.github.io/pgi-docs/Gtk-3.0', None), + 'glib': ('https://lazka.github.io/pgi-docs/GLib-2.0', None), + 'gobject': ('https://lazka.github.io/pgi-docs/GObject-2.0', None), + 'gio': ('https://lazka.github.io/pgi-docs/Gio-2.0', None), + 'gtk': ('https://lazka.github.io/pgi-docs/Gtk-3.0', None), } # Add any paths that contain templates here, relative to this directory. diff --git a/source/index.txt b/source/index.txt index f668991..1270ba7 100644 --- a/source/index.txt +++ b/source/index.txt @@ -24,9 +24,9 @@ lists and tuples will be needed. Although this tutorial describes the most important classes and methods within GTK+ 3, it is not supposed to serve as an API reference. Please refer to the -`GTK+ 3 Reference Manual `_ for a +`GTK+ 3 Reference Manual `_ for a detailed description of the API. Also there's a `Python-specific reference -`_ available. +`_ available. Contents: diff --git a/source/install.txt b/source/install.txt index 7c0df8a..429f20e 100644 --- a/source/install.txt +++ b/source/install.txt @@ -42,7 +42,7 @@ by running:: It will print any applications and libraries that are currently missing on your system but required for building. You should install those using your distribution's -package repository. A list of `package names `_ +package repository. A list of `package names `_ for different distributions is maintained on the GNOME wiki. Run the command above again to ensure the required tools are present. @@ -58,9 +58,9 @@ To start a shell with the same environment as used by JHBuild, run:: $ jhbuild shell -.. _PyGObject: https://live.gnome.org/PyGObject +.. _PyGObject: https://wiki.gnome.org/action/show/Projects/PyGObject .. _PyGTK: http://www.pygtk.org -.. _JHBuild: https://live.gnome.org/Jhbuild -.. _JHBuild manual: http://library.gnome.org/devel/jhbuild/unstable/ +.. _JHBuild: https://wiki.gnome.org/action/show/Projects/Jhbuild +.. _JHBuild manual: https://developer.gnome.org/jhbuild/unstable/ -.. [#] http://download.gnome.org/teams/releng/ +.. [#] https://download.gnome.org/teams/releng/ diff --git a/source/unicode.txt b/source/unicode.txt index 90018d6..dc2a7ad 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -107,7 +107,7 @@ return a :class:`str` instance. Accordingly, ``txt`` and ``unicode_string`` are *not* equal. This is especially important if you want to internationalize your -program using `gettext `_. You +program using `gettext `_. You have to make sure that gettext will return UTF-8 encoded 8-bit strings for all languages. In general it is recommended to not use :class:`unicode` objects in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects since @@ -163,14 +163,14 @@ as instances of :class:`str` only:: References ---------- -`What's new in Python 3.0 `_ +`What's new in Python 3.0 `_ describes the new concepts that clearly distinguish between text and data. -The `Unicode HOWTO `_ discusses Python 2.x’s +The `Unicode HOWTO `_ discusses Python 2.x’s support for Unicode, and explains various problems that people commonly encounter when trying to work with Unicode. -The `Unicode HOWTO for Python 3.x `_ +The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x. `UTF-8 encoding table and Unicode characters `_ contains From ae8d5e207347d92b521862b6872ea2633de5fc8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 27 Nov 2016 18:05:48 +0000 Subject: [PATCH 052/209] Update jhbuild command to install gtk+-3 master of gtk+ is used fro gtk+-4 now. Fixes #87 --- source/install.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/install.txt b/source/install.txt index 429f20e..f902410 100644 --- a/source/install.txt +++ b/source/install.txt @@ -52,7 +52,7 @@ Executing the following command will build PyGObject and all its dependencies:: Finally, you might want to install GTK+ from source as well:: - $ jhbuild build gtk+ + $ jhbuild build gtk+-3 To start a shell with the same environment as used by JHBuild, run:: From 2eac2ee5a7a6a219fcb6907d1206f12e0391921a Mon Sep 17 00:00:00 2001 From: Enliten Me Date: Sat, 26 Nov 2016 15:15:49 +1100 Subject: [PATCH 053/209] Fix spelling of implementation Fixes #89 --- source/application.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/application.txt b/source/application.txt index 4b38e06..8b1d5c5 100644 --- a/source/application.txt +++ b/source/application.txt @@ -17,7 +17,7 @@ either be activated or have a state changed (if they contain state). The reason to use actions is to separate out the logic from the UI. For example this allows using a menubar on OSX and a gear menu on GNOME both simply -referencing the name of an action. The main implementaiton of this you will +referencing the name of an action. The main implementation of this you will be using is :class:`Gio.SimpleAction` which will be showed off later. Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` support From 2d2476a7d004f96e646fd64c5ddea81ad9d463b1 Mon Sep 17 00:00:00 2001 From: hcpl Date: Thu, 8 Dec 2016 01:36:14 +0200 Subject: [PATCH 054/209] Use the other line in Gtk.Builder code reference --- source/builder.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/builder.txt b/source/builder.txt index 5959226..4d6ff0f 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -113,7 +113,7 @@ In our example the last code snippet could be rewritten as: .. literalinclude:: ../examples/builder_example.py :linenos: - :lines: 3-12 + :lines: 3-11,14 Example ------- From 0132b1a0779786bbb94e702ff05730700b4b7289 Mon Sep 17 00:00:00 2001 From: Shiv Dhar Date: Mon, 13 Feb 2017 13:01:48 +0530 Subject: [PATCH 055/209] Correct a typo --- source/application.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/application.txt b/source/application.txt index 8b1d5c5..ea15499 100644 --- a/source/application.txt +++ b/source/application.txt @@ -3,7 +3,7 @@ Application =========== -:class:`Gtk.Application` encompeses many repetitive tasks that a modern +:class:`Gtk.Application` encompasses many repetitive tasks that a modern application needs such as handling multiple instances, D-Bus activation, opening files, command line parsing, startup/shutdown, menu management, window management, and more. From ca7a053b25382298abd3392dfca3fb9a10d13cf7 Mon Sep 17 00:00:00 2001 From: abcleanonme Date: Sun, 19 Feb 2017 03:18:48 -0600 Subject: [PATCH 056/209] Update introduction.txt Delete extra 'we' and an extra 'r' in 'refers'. Add a missing 'the'. --- source/introduction.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/introduction.txt b/source/introduction.txt index 2da976f..7eb813d 100644 --- a/source/introduction.txt +++ b/source/introduction.txt @@ -22,9 +22,9 @@ We will now explain each line of the example. In the beginning, we have to import the Gtk module to be able to access GTK+'s classes and functions. Since a user's system can have multiple versions of GTK+ installed at the same, -we want to make sure that we when we import Gtk that it referrs to GTK+ 3 +we want to make sure that when we import Gtk that it refers to GTK+ 3 and not any other version of the library, which is the purpose -of statement ``gi.require_version('Gtk', '3.0')``. +of the statement ``gi.require_version('Gtk', '3.0')``. The next line creates an empty window. From 0c2acb277958273495bb49149e763590473e5120 Mon Sep 17 00:00:00 2001 From: abcleanonme Date: Mon, 20 Feb 2017 01:17:05 -0600 Subject: [PATCH 057/209] small grammatical corrections in ListBox section Added and subtracted some commas and changed 'contents' to 'content' for better subject-verb agreement. --- source/layout.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/layout.txt b/source/layout.txt index 7c8f21f..1ac3e22 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -93,12 +93,12 @@ added dynamically depending on the row content. It also allows keyboard and mouse navigation and selection like a typical list. Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, especially -when the list contents has a more complicated layout than what is allowed by a -:class:`Gtk.CellRenderer`, or when the contents is interactive (i.e. has a button +when the list content has a more complicated layout than what is allowed by a +:class:`Gtk.CellRenderer`, or when the content is interactive (i.e. has a button in it). -Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` children you can -add any kind of widget to it via :meth:`Gtk.Container.add`, and a +Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` children, you can +add any kind of widget to it via :meth:`Gtk.Container.add` and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between the list and the widget. From 03ad8a781fa25bee122f441361d024b595be4d00 Mon Sep 17 00:00:00 2001 From: Matthieu Crapet Date: Wed, 8 Mar 2017 10:39:12 +0100 Subject: [PATCH 058/209] Update basics.txt typo fix --- source/basics.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/basics.txt b/source/basics.txt index fd172a3..386ce79 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -97,7 +97,7 @@ which is equivalent to Instead of using getters and setters you can also get and set the gobject properties through the "props" property such as ``widget.props.prop_name = value``. -This is equivelent to the more verbose ``widget.get_property("prop-name")`` and +This is equivalent to the more verbose ``widget.get_property("prop-name")`` and ``widget.set_property("prop-name", value)``. To see which properties are available for a widget in the running version of GTK you can "dir" the "props" property: From 60db616cdd4bfbc1bf71a9c4af45d31a588892a3 Mon Sep 17 00:00:00 2001 From: Matthieu Crapet Date: Wed, 8 Mar 2017 11:42:09 +0100 Subject: [PATCH 059/209] Update layout_headerbar_example.py Drop last empty line --- examples/layout_headerbar_example.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index a15caa7..05731c8 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -39,4 +39,3 @@ def __init__(self): win.connect("delete-event", Gtk.main_quit) win.show_all() Gtk.main() - From a65390fafe13c9aba7693dceb593ae4c210f636e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 11 Mar 2017 09:53:35 +0000 Subject: [PATCH 060/209] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9239dd7..39fc903 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ The PyGObject Tutorial ====================== -An introduction to GTK+ 3 and Python. +An introduction to deveolping GTK+ 3 applications in Python with [PyGObject](http://live.gnome.org/PyGObject). + +The tutorial's web site is https://python-gtk-3-tutorial.readthedocs.io -http://live.gnome.org/PyGObject Dependencies ------------ From b3f0f8195b6c1a23c96ff785cb4f316de9449450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 13 May 2017 17:18:23 +0100 Subject: [PATCH 061/209] FIX Conceptually -> Conceptional Fixes #103 --- source/unicode.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/unicode.txt b/source/unicode.txt index dc2a7ad..a8bbc6d 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -6,7 +6,7 @@ and GTK+ and discusses common errors that arise when working with strings. Definitions ----------- -Conceptionally, a string is a list of characters such as +Conceptional, a string is a list of characters such as 'A', 'B', 'C' or 'É'. **Characters** are abstract representations and their meaning depends on the language and context they are used in. The Unicode standard describes how characters are represented by **code points**. @@ -126,7 +126,7 @@ Python 3.x's Unicode support Since Python 3.0, all strings are stored as Unicode in an instance of the :class:`str` type. *Encoded* strings on the other hand are represented as binary data in the form of instances of the :class:`bytes` type. -Conceptionally, :class:`str` refers to *text*, whereas :class:`bytes` refers to +Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`. From 0240aa1a9f24c905edefb39542e56a7220f34873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 13 May 2017 17:40:22 +0100 Subject: [PATCH 062/209] Explain parameters of Gtk.Grid's attach and attach_next_to methods Fixes #104. --- source/layout.txt | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/source/layout.txt b/source/layout.txt index 1ac3e22..3362a84 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -68,8 +68,25 @@ Grid :class:`Gtk.Grid` is a container which arranges its child widgets in rows and columns, but you do not need to specify the dimensions in the constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span multiple rows or -columns. It is also possible to add a child next to an existing child, using -:meth:`Gtk.Grid.attach_next_to`. +columns. The :meth:`Gtk.Grid.attach` method takes five parameters: + +1. The ``child`` parameter is the :class:`Gtk.Widget` to add. +2. ``left`` is the column number to attach the left side of ``child`` to. +3. ``top`` indicates the row number to attach the top side of ``child`` to. +4. ``width`` and ``height`` indicate the number of columns that the ``child`` + will span, and the number of rows that the ``child`` will span, respectively. + +It is also possible to add a child next to an existing child, using +:meth:`Gtk.Grid.attach_next_to`, which also takes five parameters: + +1. ``child`` is the :class:`Gtk.Widget` to add, as above. +2. ``sibling`` is a child widget of ``self`` (a :class:`Gtk.Grid` instance) + or ``None``. The ``child`` widget will be placed next to ``sibling``, or + if ``sibling`` is ``None``, at the beginning or end of the grid. +3. ``side`` is a :class:`Gtk.PositionType` indicating the side of + ``sibling`` that ``child`` is positioned next to. +4. ``width`` and ``height`` indicate the number of columns and rows + the ``child`` widget will span, respectively. :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just using :meth:`Gtk.Grid.add`, which will place children next to each other in the From 3ce44e1e9aaf371cc01b213f8c930031dbd1b04f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 13 May 2017 17:45:01 +0100 Subject: [PATCH 063/209] Emphasize that sibling is an existing child widget --- source/layout.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/layout.txt b/source/layout.txt index 3362a84..03c14aa 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -80,7 +80,7 @@ It is also possible to add a child next to an existing child, using :meth:`Gtk.Grid.attach_next_to`, which also takes five parameters: 1. ``child`` is the :class:`Gtk.Widget` to add, as above. -2. ``sibling`` is a child widget of ``self`` (a :class:`Gtk.Grid` instance) +2. ``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` instance) or ``None``. The ``child`` widget will be placed next to ``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the grid. 3. ``side`` is a :class:`Gtk.PositionType` indicating the side of @@ -88,7 +88,7 @@ It is also possible to add a child next to an existing child, using 4. ``width`` and ``height`` indicate the number of columns and rows the ``child`` widget will span, respectively. -:class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just using +Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just using :meth:`Gtk.Grid.add`, which will place children next to each other in the direction determined by the "orientation" property (defaults to :attr:`Gtk.Orientation.HORIZONTAL`). From 280e3e0cf8170cd3e6b149738eca97642117b135 Mon Sep 17 00:00:00 2001 From: rst0git Date: Thu, 18 May 2017 10:54:04 +0100 Subject: [PATCH 064/209] Use consistent examples The example of ListStore given at the beginning is `Gtk.ListStore(str, str, float)`. Here we are setting string and float, this are the last two columns (not first two). --- source/treeview.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index 672d53c..446b996 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -74,8 +74,8 @@ of rows and use slices to retrieve or set values. print(store[treeiter][1:]) # Print last column print(store[treeiter][-1]) - # Set first two columns - store[treeiter][:2] = ["Donald Ervin Knuth", 41.99] + # Set last two columns + store[treeiter][1:] = ["Donald Ervin Knuth", 41.99] Iterating over all rows of a tree model is very simple as well. From e7a43854455e6992d6187d47f077ad468d86ca8d Mon Sep 17 00:00:00 2001 From: Dan Yeaw Date: Sat, 15 Jul 2017 21:17:34 -0400 Subject: [PATCH 065/209] FIX GObject parameter flag names and Python 3 syntax Fixes #106. --- source/objects.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/objects.txt b/source/objects.txt index 2aac5d3..3bcaf65 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -130,17 +130,17 @@ property can be created using :class:`GObject.Property`. Properties can also be read-only, if you want some properties to be readable but not writable. To do so, you can add some flags to the property definition, to control read/write access. -Flags are :const:`GObject.PARAM_READABLE` (only read access for external code), -:const:`GObject.PARAM_WRITABLE` (only write access), -:const:`GObject.PARAM_READWRITE` (public): +Flags are :const:`GObject.ParamFlags.READABLE` (only read access for external code), +:const:`GObject.ParamFlags.WRITABLE` (only write access), +:const:`GObject.ParamFlags.READWRITE` (public): .. there is also construct things, but they .. doesn't seem to be functional in Python .. code-block:: python - foo = GObject.Property(type=str, flags = GObject.PARAM_READABLE) # not writable - bar = GObject.Property(type=str, flags = GObject.PARAM_WRITABLE) # not readable + foo = GObject.Property(type=str, flags = GObject.ParamFlags.READABLE) # not writable + bar = GObject.Property(type=str, flags = GObject.ParamFlags.WRITABLE) # not readable You can also define new read-only properties with a new method decorated with @@ -203,7 +203,7 @@ There is also a way to define minimum and maximum values for numbers, using a mo 1, # min 5, # max 2, # default - GObject.PARAM_READWRITE # flags + GObject.ParamFlags.READWRITE # flags ), } @@ -215,13 +215,13 @@ There is also a way to define minimum and maximum values for numbers, using a mo if prop.name == 'int-prop': return self.int_prop else: - raise AttributeError, 'unknown property %s' % prop.name + raise AttributeError('unknown property %s' % prop.name) def do_set_property(self, prop, value): if prop.name == 'int-prop': self.int_prop = value else: - raise AttributeError, 'unknown property %s' % prop.name + raise AttributeError('unknown property %s' % prop.name) Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a @@ -395,15 +395,15 @@ API Invoke the object method handler in the last emission stage. -.. attribute:: GObject.PARAM_READABLE +.. attribute:: GObject.ParamFlags.READABLE The property is readable. -.. attribute:: GObject.PARAM_WRITABLE +.. attribute:: GObject.ParamFlags.WRITABLE The property is writable. -.. attribute:: GObject.PARAM_READWRITE +.. attribute:: GObject.ParamFlags.READWRITE The property is readable and writable. From 991d283735312e1af9c6f8451323e89e09473902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Tue, 1 Aug 2017 20:46:18 +0100 Subject: [PATCH 066/209] Remove trailing whitespace --- examples/entry_example.py | 2 +- source/entry.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/entry_example.py b/examples/entry_example.py index bf3f0c5..9c6f520 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -19,7 +19,7 @@ def __init__(self): hbox = Gtk.Box(spacing=6) vbox.pack_start(hbox, True, True, 0) - + self.check_editable = Gtk.CheckButton("Editable") self.check_editable.connect("toggled", self.on_editable_toggled) self.check_editable.set_active(True) diff --git a/source/entry.txt b/source/entry.txt index 73f8704..878615c 100644 --- a/source/entry.txt +++ b/source/entry.txt @@ -26,7 +26,7 @@ can be activatable by clicking, can be set up as drag source and can have toolti To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` or one of the various other functions that set an icon from an icon name, a pixbuf, or icon theme. To set a tooltip on an icon, use -:meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup. +:meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup. Example ------- From 097487aba2ff09f3e7bc6f28d09d388b3fc6cc14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Tue, 1 Aug 2017 20:58:23 +0100 Subject: [PATCH 067/209] FIX unecessary trailing newlines in literalinclude Use temporary workaround from rtfd/sphinx_rtd_theme#417 Fixes #108 --- source/conf.py | 7 +++++-- static/css/custom.css | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 static/css/custom.css diff --git a/source/conf.py b/source/conf.py index 65af604..cce2add 100644 --- a/source/conf.py +++ b/source/conf.py @@ -101,7 +101,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'default' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -130,7 +130,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ['../static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -224,3 +224,6 @@ ('index', 'pygobjecttutorial', u'PyGObject Tutorial Documentation', [u'Sebastian Pölsterl'], 1) ] + +def setup(app): + app.add_stylesheet('css/custom.css') diff --git a/static/css/custom.css b/static/css/custom.css new file mode 100644 index 0000000..cf4e8da --- /dev/null +++ b/static/css/custom.css @@ -0,0 +1,5 @@ +/* Temporary fix for https://github.com/rtfd/sphinx_rtd_theme/issues/417 */ + +.rst-content .highlight>pre { + line-height: 18px; +} From 46f4f1677ea40738c49781aaf55b80a8435b0db1 Mon Sep 17 00:00:00 2001 From: Frank Drolshagen Date: Mon, 6 Nov 2017 20:27:24 +0100 Subject: [PATCH 068/209] Small grammatical correction in ListBox section --- source/layout.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/layout.txt b/source/layout.txt index 03c14aa..0cb82aa 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -105,7 +105,7 @@ ListBox ------- A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk.ListBoxRow` -children. These rows can by dynamically sorted and filtered, and headers can be +children. These rows can be dynamically sorted and filtered, and headers can be added dynamically depending on the row content. It also allows keyboard and mouse navigation and selection like a typical list. From 5fafd6adb12caf025dc237ca5d24f32fad187e71 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Fri, 2 Feb 2018 19:19:59 +0000 Subject: [PATCH 069/209] Use is or is not with comparisons to None https://www.python.org/dev/peps/pep-0008/#programming-recommendations --- examples/cellrendererprogress_example.py | 2 +- examples/clipboard_example.py | 4 ++-- examples/combobox_example.py | 6 +++--- examples/textview_example.py | 2 +- source/treeview.txt | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/cellrendererprogress_example.py b/examples/cellrendererprogress_example.py index 125a62f..3efe8cb 100644 --- a/examples/cellrendererprogress_example.py +++ b/examples/cellrendererprogress_example.py @@ -42,7 +42,7 @@ def on_timeout(self, user_data): new_value = self.liststore[self.current_iter][1] + 1 if new_value > 100: self.current_iter = self.liststore.iter_next(self.current_iter) - if self.current_iter == None: + if self.current_iter is None: self.reset_model() new_value = self.liststore[self.current_iter][1] + 1 diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index 1ecf59f..4d6bde5 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -37,7 +37,7 @@ def copy_text(self, widget): def paste_text(self, widget): text = self.clipboard.wait_for_text() - if text != None: + if text is not None: self.entry.set_text(text) else: print("No text on the clipboard.") @@ -50,7 +50,7 @@ def copy_image(self, widget): def paste_image(self, widget): image = self.clipboard.wait_for_image() - if image != None: + if image is not None: self.image.set_from_pixbuf(image) diff --git a/examples/combobox_example.py b/examples/combobox_example.py index cff9531..e338b0a 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -52,7 +52,7 @@ def __init__(self): def on_name_combo_changed(self, combo): tree_iter = combo.get_active_iter() - if tree_iter != None: + if tree_iter is not None: model = combo.get_model() row_id, name = model[tree_iter][:2] print("Selected: ID=%d, name=%s" % (row_id, name)) @@ -62,14 +62,14 @@ def on_name_combo_changed(self, combo): def on_country_combo_changed(self, combo): tree_iter = combo.get_active_iter() - if tree_iter != None: + if tree_iter is not None: model = combo.get_model() country = model[tree_iter][0] print("Selected: country=%s" % country) def on_currency_combo_changed(self, combo): text = combo.get_active_text() - if text != None: + if text is not None: print("Selected: currency=%s" % text) win = ComboBoxWindow() diff --git a/examples/textview_example.py b/examples/textview_example.py index 42659cc..4cd28b2 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -192,7 +192,7 @@ def search_and_mark(self, text, start): end = self.textbuffer.get_end_iter() match = start.forward_search(text, 0, end) - if match != None: + if match is not None: match_start, match_end = match self.textbuffer.apply_tag(self.tag_found, match_start, match_end) self.search_and_mark(text, match_end) diff --git a/source/treeview.txt b/source/treeview.txt index 446b996..c32e05d 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -96,7 +96,7 @@ To iterate over all rows and its children, use the ``print_tree_store`` function print_rows(store, rootiter, "") def print_rows(store, treeiter, indent): - while treeiter != None: + while treeiter is not None: print(indent + str(store[treeiter][:])) if store.iter_has_child(treeiter): childiter = store.iter_children(treeiter) @@ -206,7 +206,7 @@ Then to retrieve data for the row selected: def on_tree_selection_changed(selection): model, treeiter = selection.get_selected() - if treeiter != None: + if treeiter is not None: print("You selected", model[treeiter][0]) You can control what selections are allowed by calling From 390de9c8edac652a32e6bb7aec210e37b0d54b86 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Fri, 2 Feb 2018 20:03:46 +0000 Subject: [PATCH 070/209] set_visible_func is a function of Gtk.TreeModelFilter https://developer.gnome.org/gtk3/stable/GtkTreeModelFilter.html#gtk-tree-model-filter-set-visible-func --- source/treeview.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/treeview.txt b/source/treeview.txt index c32e05d..3841ff6 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -307,7 +307,7 @@ You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it a mo filter = model.filter_new() -In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` needs a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeSortable.set_visible_func`: +In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` needs a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`: .. code-block:: python From 6e6e7a1aa40e04e164a950d42542ac2c057496e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Fri, 30 Mar 2018 13:11:36 +0100 Subject: [PATCH 071/209] Remove translations They haven't been updated for several years --- source/conf.py | 2 +- translations/.doctrees/basics.doctree | Bin 17487 -> 0 bytes translations/.doctrees/builder.doctree | Bin 44489 -> 0 bytes translations/.doctrees/button_widgets.doctree | Bin 112522 -> 0 bytes translations/.doctrees/cellrenderers.doctree | Bin 81293 -> 0 bytes translations/.doctrees/clipboard.doctree | Bin 27930 -> 0 bytes translations/.doctrees/combobox.doctree | Bin 45377 -> 0 bytes translations/.doctrees/dialogs.doctree | Bin 142133 -> 0 bytes translations/.doctrees/drag_and_drop.doctree | Bin 71652 -> 0 bytes translations/.doctrees/entry.doctree | Bin 44625 -> 0 bytes translations/.doctrees/environment.pickle | Bin 132363 -> 0 bytes translations/.doctrees/iconview.doctree | Bin 140825 -> 0 bytes translations/.doctrees/index.doctree | Bin 10122 -> 0 bytes translations/.doctrees/install.doctree | Bin 16375 -> 0 bytes translations/.doctrees/introduction.doctree | Bin 18937 -> 0 bytes translations/.doctrees/label.doctree | Bin 47867 -> 0 bytes translations/.doctrees/layout.doctree | Bin 97424 -> 0 bytes translations/.doctrees/menus.doctree | Bin 106891 -> 0 bytes translations/.doctrees/objects.doctree | Bin 74268 -> 0 bytes translations/.doctrees/progressbar.doctree | Bin 35372 -> 0 bytes translations/.doctrees/spinner.doctree | Bin 11780 -> 0 bytes translations/.doctrees/stock.doctree | Bin 131122 -> 0 bytes translations/.doctrees/textview.doctree | Bin 134270 -> 0 bytes translations/.doctrees/treeview.doctree | Bin 164807 -> 0 bytes translations/.doctrees/unicode.doctree | Bin 44387 -> 0 bytes translations/ja/basics.po | 87 --- translations/ja/builder.po | 182 ----- translations/ja/button_widgets.po | 315 -------- translations/ja/cellrenderers.po | 257 ------- translations/ja/clipboard.po | 107 --- translations/ja/combobox.po | 117 --- translations/ja/dialogs.po | 481 ------------- translations/ja/drag_and_drop.po | 304 -------- translations/ja/entry.po | 127 ---- translations/ja/iconview.po | 609 ---------------- translations/ja/index.po | 65 -- translations/ja/install.po | 104 --- translations/ja/introduction.po | 102 --- translations/ja/label.po | 122 ---- translations/ja/layout.po | 311 -------- translations/ja/menus.po | 372 ---------- translations/ja/objects.po | 337 --------- translations/ja/progressbar.po | 97 --- translations/ja/spinner.po | 52 -- translations/ja/stock.po | 97 --- translations/ja/textview.po | 674 ------------------ translations/ja/treeview.po | 548 -------------- translations/ja/unicode.po | 154 ---- translations/templates/basics.pot | 88 --- translations/templates/builder.pot | 183 ----- translations/templates/button_widgets.pot | 316 -------- translations/templates/cellrenderers.pot | 258 ------- translations/templates/clipboard.pot | 108 --- translations/templates/combobox.pot | 118 --- translations/templates/dialogs.pot | 482 ------------- translations/templates/drag_and_drop.pot | 303 -------- translations/templates/entry.pot | 128 ---- translations/templates/iconview.pot | 373 ---------- translations/templates/index.pot | 68 -- translations/templates/install.pot | 103 --- translations/templates/introduction.pot | 103 --- translations/templates/label.pot | 123 ---- translations/templates/layout.pot | 312 -------- translations/templates/menus.pot | 373 ---------- translations/templates/objects.pot | 308 -------- translations/templates/progressbar.pot | 98 --- translations/templates/spinner.pot | 53 -- translations/templates/stock.pot | 98 --- translations/templates/textview.pot | 388 ---------- translations/templates/treeview.pot | 549 -------------- translations/templates/unicode.pot | 155 ---- 71 files changed, 1 insertion(+), 10710 deletions(-) delete mode 100644 translations/.doctrees/basics.doctree delete mode 100644 translations/.doctrees/builder.doctree delete mode 100644 translations/.doctrees/button_widgets.doctree delete mode 100644 translations/.doctrees/cellrenderers.doctree delete mode 100644 translations/.doctrees/clipboard.doctree delete mode 100644 translations/.doctrees/combobox.doctree delete mode 100644 translations/.doctrees/dialogs.doctree delete mode 100644 translations/.doctrees/drag_and_drop.doctree delete mode 100644 translations/.doctrees/entry.doctree delete mode 100644 translations/.doctrees/environment.pickle delete mode 100644 translations/.doctrees/iconview.doctree delete mode 100644 translations/.doctrees/index.doctree delete mode 100644 translations/.doctrees/install.doctree delete mode 100644 translations/.doctrees/introduction.doctree delete mode 100644 translations/.doctrees/label.doctree delete mode 100644 translations/.doctrees/layout.doctree delete mode 100644 translations/.doctrees/menus.doctree delete mode 100644 translations/.doctrees/objects.doctree delete mode 100644 translations/.doctrees/progressbar.doctree delete mode 100644 translations/.doctrees/spinner.doctree delete mode 100644 translations/.doctrees/stock.doctree delete mode 100644 translations/.doctrees/textview.doctree delete mode 100644 translations/.doctrees/treeview.doctree delete mode 100644 translations/.doctrees/unicode.doctree delete mode 100644 translations/ja/basics.po delete mode 100644 translations/ja/builder.po delete mode 100644 translations/ja/button_widgets.po delete mode 100644 translations/ja/cellrenderers.po delete mode 100644 translations/ja/clipboard.po delete mode 100644 translations/ja/combobox.po delete mode 100644 translations/ja/dialogs.po delete mode 100644 translations/ja/drag_and_drop.po delete mode 100644 translations/ja/entry.po delete mode 100644 translations/ja/iconview.po delete mode 100644 translations/ja/index.po delete mode 100644 translations/ja/install.po delete mode 100644 translations/ja/introduction.po delete mode 100644 translations/ja/label.po delete mode 100644 translations/ja/layout.po delete mode 100644 translations/ja/menus.po delete mode 100644 translations/ja/objects.po delete mode 100644 translations/ja/progressbar.po delete mode 100644 translations/ja/spinner.po delete mode 100644 translations/ja/stock.po delete mode 100644 translations/ja/textview.po delete mode 100644 translations/ja/treeview.po delete mode 100644 translations/ja/unicode.po delete mode 100644 translations/templates/basics.pot delete mode 100644 translations/templates/builder.pot delete mode 100644 translations/templates/button_widgets.pot delete mode 100644 translations/templates/cellrenderers.pot delete mode 100644 translations/templates/clipboard.pot delete mode 100644 translations/templates/combobox.pot delete mode 100644 translations/templates/dialogs.pot delete mode 100644 translations/templates/drag_and_drop.pot delete mode 100644 translations/templates/entry.pot delete mode 100644 translations/templates/iconview.pot delete mode 100644 translations/templates/index.pot delete mode 100644 translations/templates/install.pot delete mode 100644 translations/templates/introduction.pot delete mode 100644 translations/templates/label.pot delete mode 100644 translations/templates/layout.pot delete mode 100644 translations/templates/menus.pot delete mode 100644 translations/templates/objects.pot delete mode 100644 translations/templates/progressbar.pot delete mode 100644 translations/templates/spinner.pot delete mode 100644 translations/templates/stock.pot delete mode 100644 translations/templates/textview.pot delete mode 100644 translations/templates/treeview.pot delete mode 100644 translations/templates/unicode.pot diff --git a/source/conf.py b/source/conf.py index cce2add..7bcac6a 100644 --- a/source/conf.py +++ b/source/conf.py @@ -50,7 +50,7 @@ project = u'Python GTK+ 3 Tutorial' copyright = u'GNU Free Documentation License 1.3' -locale_dirs = ["../translations/locale",] +# locale_dirs = ["../translations/locale",] # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/translations/.doctrees/basics.doctree b/translations/.doctrees/basics.doctree deleted file mode 100644 index 75fdeb1b64bf05f86466cbd81f768fe67caa5c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17487 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 bB|veO7=J5^N%GOIU*jeazro+GIr0Ah#G8`s diff --git a/translations/.doctrees/button_widgets.doctree b/translations/.doctrees/button_widgets.doctree deleted file mode 100644 index ffbd3c6422d043ac44f11d64b9c59870cf8673cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112522 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 OZgY3(nJbcR?|%YG1Cq=D diff --git a/translations/.doctrees/menus.doctree b/translations/.doctrees/menus.doctree deleted file mode 100644 index 9fa02ac1399b3b6428eee8465e289c430b593f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106891 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 diff --git a/translations/.doctrees/objects.doctree b/translations/.doctrees/objects.doctree deleted file mode 100644 index e3a7bb6bef827949ade4487b8824c14620117c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74268 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 P;guf!&EMxe+;{Om57LQ? diff --git a/translations/.doctrees/progressbar.doctree b/translations/.doctrees/progressbar.doctree deleted file mode 100644 index 0508e9041827c3474983bfa09fad1df7a35ff501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35372 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 diff --git a/translations/.doctrees/spinner.doctree b/translations/.doctrees/spinner.doctree deleted file mode 100644 index dced60a4c0b38e7e2709388db6d3f97e9fb288fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11780 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 P<+tz>%WvbiYZZSApB|xV diff --git a/translations/.doctrees/stock.doctree b/translations/.doctrees/stock.doctree deleted file mode 100644 index d3753e14c2a551ac8df49896dcc24778503402af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131122 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ⅇe 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 z

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 RzR#D2`+*hc2Yrj2SaSHGmA7w_Lvs(|enc)W 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 NFHMu=?@V#SKLOGv_!a;F diff --git a/translations/.doctrees/unicode.doctree b/translations/.doctrees/unicode.doctree deleted file mode 100644 index 8bb97464fd2e2991a4b84a7bc554dc1a96466ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44387 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 KXFNO3`2PTR@h!Ok diff --git a/translations/ja/basics.po b/translations/ja/basics.po deleted file mode 100644 index e0a2bfd..0000000 --- a/translations/ja/basics.po +++ /dev/null @@ -1,87 +0,0 @@ -# Japanese translation for basics.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-09-24 17:56+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/basics.txt:4 -# 89c80c4c2d494795ad0b4a96ad457e53 -msgid "Basics" -msgstr "基本" - -#: ../source/basics.txt:5 -# 82479bad82cf45beb69d8ab747f4c9d9 -msgid "This section will introduce some of the most important aspects of GTK+." -msgstr "このセクションでは GTK+ でもっとも重要な部分について紹介します。" - -#: ../source/basics.txt:12 -# ec0e7ac1935d4b5f8f1eeb6e3f2c4941 -msgid "Main loop and Signals" -msgstr "メイン・ループといろいろなシグナル" - -#: ../source/basics.txt:13 -# 57996fea1fff487c897e40417d3f51ba -msgid "Like most GUI toolkits, GTK+ uses an event-driven programming model. When the user is doing nothing, GTK+ sits in the main loop and waits for input. If the user performs some action - say, a mouse click - then the main loop \"wakes up\" and delivers an event to GTK+." -msgstr "多くの GUI ツールキット同様に、GTK+ もイベント駆動型のプログラミング・モデルを採用しています。ユーザが何もしなければ、GTK+ はメイン・ループの中でじっとしたまま入力待ちになります。ユーザが何かアクションを起こしたら - 例えば、マウスをクリックすると - メイン・ループが「目を覚まして」そのイベントを GTK+ に配送します。" - -#: ../source/basics.txt:18 -# fe001a9811074026b8c0d3f44d56a150 -msgid "When widgets receive an event, they frequently emit one or more signals. Signals notify your program that \"something interesting happened\" by invoking functions you've connected to the signal. Such functions are commonly known as *callbacks*. When your callbacks are invoked, you would typically take some action - for example, when an Open button is clicked you might display a file chooser dialog. After a callback finishes, GTK+ will return to the main loop and await more user input." -msgstr "ウィジェットがイベントを一つ受け取ると、それらは一個以上のシグナルを発行します。シグナルは、あなたがそのシグナルに接続しておいた関数を呼び出すことで、あなたのプログラムに「何か興味あることが起こりましたよ」と通知してくれます。そのような関数は一般的にコールバックと呼ばれています。コールバックが呼び出されると、原則的に何かアクションを起こすことになります - 例えば、開くボタンをクリックするとファイル選択ダイアログが表示されます。コールバックが完了したら、GTK+ はメイン・ループに制御を戻し、再び次のユーザからの入力待ちに入ります。" - -#: ../source/basics.txt:28 -# cbbe13db88f149dbb5f41fa8671466be -msgid "A generic example is:" -msgstr "シグナルに接続する一般的な定義は次のとおりです: " - -#: ../source/basics.txt:34 -# 1551dac8189c4cecb9f2ac613603a8fd -msgid "Firstly, *widget* is an instance of a widget we created earlier. Next, the event we are interested in. Each widget has its own particular events which can occur. For instance, if you have a button you usually want to connect to the \"clicked\" event. This means that when the button is clicked, the signal is issued. Thirdly, the *callback* argument is the name of the callback function. It contains the code which runs when signals of the specified type are issued. Finally, the *data* argument includes any data which should be passed when the signal is issued. However, this argument is completely optional and can be left out if not required." -msgstr "まず *widget* はこれより先に生成した任意のウィジェットのインスタンスに相当します。次に *event* はこのプログラムで興味を持ったイベントです。ウィジェットはそれぞれ自分自身で特定のイベントを所有しています。例えば、ボタンならば、通常は \"clicked\" イベントに接続します。これは、ボタンをクリックしたら、そのシグナルが発行されるという意味です。三つ目の *callback* はコールバックの関数名です。この関数には、特定の種類のシグナルが発行されたら実行するコードが含まれています。最後の *data* はシグナルが発行された時にコールバックの関数に引き渡すべきデータが含まれています。但し、これは完全にオプションであり、必要なければ指定しなくても構いません。" - -#: ../source/basics.txt:46 -# 12d9e4b1e404412bb7345589fff8dfe2 -msgid "The function returns a number that identifies this particular signal-callback pair. It is required to disconnect from a signal such that the callback function will not be called during any future or currently ongoing emissions of the signal it has been connected to." -msgstr ":func:`connect` 関数は、この特定のシグナルとコールバックのペアを識別する一個の数値を返します。この値は、コールバックに接続しているシグナルが発行されているか、または将来発行される状態にある時に、あえてコールバックの関数を呼び出さないように、シグナルからの接続を切断するような時に必要になります。" - -#: ../source/basics.txt:56 -# abc3f208228249b099b0c3ce8cd571b2 -msgid "Almost all applications will connect to the \"delete-event\" signal of the top-level window. It is emitted if a user requests that a toplevel window is closed. The default handler for this signal destroys the window, but does not terminate the application. Connecting the \"delete-event\" signal to the function :func:`Gtk.main_quit` will result in the desired behaviour." -msgstr "アプリケーションのほぼ全てが、トップレベル・ウィンドウの \"delete-event” シグナルに接続します。このシグナルは、ユーザがトップレベル・ウィンドウを閉じるように要求があったら発行されます。このシグナルに対するデフォルトのコールバック (ハンドラ) はウィンドウを破棄 (destroy) しますが、アプリケーションは終了しません。\"delete-event\" シグナルを :func:`Gtk.main_quit` 関数に接続すると、アプリケーションも一緒に終了します。" - -#: ../source/basics.txt:66 -# 692cf251df884ab39d074470d0391ee1 -msgid "Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` return." -msgstr ":func:`Gtk.main_quit` 関数を呼び出すと :func:`Gtk.main` 関数の内側にあるメイン・ループに制御が戻ります。" - -#: ../source/basics.txt:69 -# 532f209e0a554e548e5d3df141e498d9 -msgid "Properties" -msgstr "いろいろなプロパティ" - -#: ../source/basics.txt:70 -# 4c92101d20a34ac9a0cf40a6448e3a2e -msgid "Properties describe the configuration and state of widgets. As for signals, each widget has its own particular set of properties. For example, a button has the property \"label\" which contains the text of the label widget inside the button. You can specify the name and value of any number of properties as keyword arguments when creating an instance of a widget. To create a label aligned to the right with the text \"Hello World\" and an angle of 25 degrees, use:" -msgstr "プロパティにはウィジェットの設定や状態を記述します。シグナルに関しては、ウィジエットは自分専用のプロパティの集合を所有しています。例えば、ボタンならば \"label\" というプロパティがあり、これにはボタンの内側にあるラベル・ウィジェットが所有している文字列 (これもプロパティ) が格納されています。任意のウィジェットを生成する際にキーワード型の引数を使ってプロパティの名前とそのプロパティに格納する値を、いくつか指定することができます。例えば \"Hello World\" という文字列を右寄せにして、表示する角度を 25 度にしたラベルを生成する際は、次のようになります::" - -#: ../source/basics.txt:81 -# b6b022a0ebbc418e8bd55193506a3cd5 -msgid "which is equivalent to" -msgstr "これは次の呼び出しと等価です::" - -#: ../source/basics.txt:90 -# beb9a2afa7e844e69cc7d0311a095423 -msgid "Instead of using getters and setters you can also get and set the properties with ``widget.get_property(\"prop-name\")`` and ``widget.set_property(\"prop-name\", value)``, respectively." -msgstr "getter と setter を利用する代わりに、 ``widget.get_property(\"プロパティ名\")`` と ``widget.set_property(\"プロパティ名\", その値)`` を使ってそれぞれプロパティを取得したり指定することも可能です。" - diff --git a/translations/ja/builder.po b/translations/ja/builder.po deleted file mode 100644 index 3e59059..0000000 --- a/translations/ja/builder.po +++ /dev/null @@ -1,182 +0,0 @@ -# Japanese translation for builder.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-08 08:12\n" -"PO-Revision-Date: 2012-12-23 16:23+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/builder.txt:2 -# e7e7bb2863294defb1285ffd93d26127 -msgid "Glade and Gtk.Builder" -msgstr "Glade と Gtk.Builder" - -#: ../source/builder.txt:3 -# 923b3452167548ef9ff2f55e6f32bd06 -msgid "The :class:`Gtk.Builder` class offers you the opportunity to design user interfaces without writing a single line of code. This is possible through describing the interface by a XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner" -msgstr ":class:`Gtk.Builder` クラスではプログラムのコードを使わずにグラフィカルなユーザ・インタフェース (UI) を設計するためのメカニズムを提供しています。これにより XML ファイルでインタフェースを記述しておけば、Builder クラスがプログラムの実行時にその XML の記述を読み込んで自動的にインタフェースのオブジェクトを生成してくれます。さらに一行一行 XML を記述しなくても `Glade `_ というアプリケーションが ``WYSIWYG`` (*what you see is what you get*) な作法でユーザ・インタフェースを生成してくれます。" - -#: ../source/builder.txt:7 -# 12e253e2a5e6448b8b538b2da88f63d5 -msgid "This method has several advantages:" -msgstr "このメカニズムにはいくつかの利点があります:" - -#: ../source/builder.txt:9 -# 90f6bc10b5414a78834b2a084b3f2be9 -msgid "Less code needs to be written." -msgstr "記述すべきコードが少なくて済む" - -#: ../source/builder.txt:10 -# 931392cc55954f65bd755c8cec84be85 -msgid "UI changes can be seen more quickly, so UIs are able to improve." -msgstr "UI の変更がすぐに分かるので、たくさんの UI を改善できる" - -#: ../source/builder.txt:11 -# a31b3e0b1bea41558e4382ce40baa921 -msgid "Designers without programming skills can create and edit UIs." -msgstr "プログラミングの技術を持たないデザイナのレベルでも UI を作成したり変更できる" - -#: ../source/builder.txt:12 -# c1a6788798b7469183bda5ed78412f3d -msgid "The description of the user interface is independent from the programming language being used." -msgstr "UI の記述が、使っているプログラミング言語に依存しない" - -#: ../source/builder.txt:14 -# 7ea060dfdc5f44d587408488e8fc0554 -msgid "There is still code required for handling interface changes triggered by the user, but :class:`Gtk.Builder` allows you to focus on implementing that functionality." -msgstr "ユーザ・インタフェースの変更には、まだプログラマがコードを書いてやらないといけない部分もありますが, :class:`Gtk.Builder` を使えば機能的な部分に集中して実装できるはずです。" - -#: ../source/builder.txt:17 -# 660ba3e8075c47c595502d5916ff5447 -msgid "Creating and loading the .glade file" -msgstr ".glade ファイルの作成と読み込み" - -#: ../source/builder.txt:18 -# 3a81795c12f743dfb48d56121b1b3ebf -msgid "First of all you have to download and install Glade. There are `several tutorials `_ about Glade, so this is not explained here in detail. Let's start by creating a window with a button in it and saving it to a file named *example.glade*. The resulting XML file should look like this." -msgstr "まず最初に `Glade `_ をダウンロードしてインストールする必要があります。Glade については `チュートリアルがいくつか `_ あるので、ここでは詳細の説明は割愛します。ではウィンドウを一つ作成して、その中にボタンを配置して *example.glade* というファイルに保存するところから始めましょう。その XML ファイルは例えば次のようになります。" - -#: ../source/builder.txt:42 -# 4770210fc03c4b9c98e8fb112b9d5d65 -msgid "To load this file in Python we need a :class:`Gtk.Builder` object." -msgstr "このファイルを Python で読み込むには :class:`Gtk.Builder` 型のオブジェクトが必要になります。" - -#: ../source/builder.txt:49 -# 804b2d2649614a40a99df1393ee8047a -msgid "The second line loads all objects defined in *example.glade* into the Builder object." -msgstr "2行目で *example.glade* にある全てのユーザ・インタフェースの定義を Builder オブジェクトへ読み込んでいます。" - -#: ../source/builder.txt:51 -# 3af5a77bbefc4c0b98dc7af337240813 -msgid "It is also possible to load only some of the objects. The following line would add only the objects (and their child objects) given in the tuple." -msgstr "あるいは、複数のオブジェクトの中のいくつかのオブジェクトだけ読み込んでやることも可能です。次はオブジェクト (とその子のオブジェクト) だけタプルの中に追加する例です。" - -#: ../source/builder.txt:58 -# 6e5059d724b147dda31235700d379a6e -msgid "These two methods exist also for loading from a string rather than a file. Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:`Gtk.Builder.add_objects_from_string` and they simply take a XML string instead of a file name." -msgstr "ファイルからではなく文字列から読み込むメソッドが二つ用意されています。それぞれ :meth:`Gtk.Builder.add_from_string` と :meth:`Gtk.Builder.add_objects_from_string` で、共にファイル名の代わりに XML 記述を受け取ります。" - -#: ../source/builder.txt:62 -# cf1fd17f6a27474ebb5d90a57e910f74 -msgid "Accessing widgets" -msgstr "ウィジェットへのアクセス" - -#: ../source/builder.txt:63 -# a579bf9ccf6841daacf91e7ad73097e5 -msgid "Now that the window and the button are loaded we also want to show them. Therefore the :meth:`Gtk.Window.show_all` method has to be called on the window. But how do we access the associated object?" -msgstr "ここで読み込んだウィンドウとボタンを表示するために、ウィンドウの上で :meth:`Gtk.Window.show_all` メソッドを呼び出して下さい。とはいえ、表示されたユーザ・インタフェースのオブジェクトにアクセスするにはどうすればよいのでしょう?" - -#: ../source/builder.txt:72 -# e6287bb2af794200898590d499c3399a -msgid "Every widget can be retrieved from the builder by the :meth:`Gtk.Builder.get_object` method and the widget's *id*. It is really *that* simple." -msgstr "これらのオブジェクトは全て :meth:`Gtk.Builder.get_object` メソッドやウィジェットの *id* を使って Builder から取得することができます。それは本当に簡単です。" - -#: ../source/builder.txt:75 -# 58cd1e049e1047019e0538a1f6db397a -msgid "It is also possible to get a list of all objects with" -msgstr "さらに、次のようにして全てのオブジェクトのリストを取得できます:" - -#: ../source/builder.txt:82 -# 481357fbcecc48a6afb7a34749a64bd2 -msgid "Connecting Signals" -msgstr "シグナルに接続する" - -#: ../source/builder.txt:83 -# d01467dbfb184508a598920c7c4da57d -msgid "Glade also makes it possible to define signals which you can connect to handlers in your code without extracting every object from the builder and connecting to the signals manually. The first thing to do is to declare the signal names in Glade. For this example we will act when the window should be closed and when the button was pressed, so we give the name \"onDeleteWindow\" to the \"delete-event\" signal of the window and \"onButtonPressed\" to the \"pressed\" signal of the button. Now the XML file should look like this." -msgstr "Glade ではさらにコードの中にあるハンドラに接続することが可能なシグナルを Builder から全てのオブジェクトを展開して手動で接続することなく定義できます。その際に最初にやることは Glade の中でシグナルの名前を宣言することです。例えば、ここではウィンドウを閉じた時とボタンを押下した時のハンドラとシグナルとして、\"onDeleteWindow\" にウィンドウの \"delete-event\" シグナルを接続し、\"onButtonPressed\" にボタンの \"pressed\" シグナルを接続するものとします。この時の XML ファイルは次のようになります。" - -#: ../source/builder.txt:91 -# 08ab98d6ec0149bf9a2b23411c0b5214 -msgid "Now we have to define the handler functions in our code. The *onDeleteWindow* should simply result in a call to :meth:`Gtk.main_quit`. When the button is pressed we would like to print the string \"Hello World!\", so we define the handler as follows" -msgstr "それからプログラムでハンドラの関数をそれぞれ定義して下さい。例えば *onDeleteWindow* では単に :meth:`Gtk.main_quit` を呼び出すだけにします。もう一つのハンドラの場合、ボタンが押下されたら \"Hello World!\" なんて文字列を出力したいので、次のような関数を定義します:" - -#: ../source/builder.txt:100 -# 9c547f16ebc04bab89559d02c3512e87 -msgid "Next, we have to connect the signals and the handler functions. The easiest way to do this is to define a *dict* with a mapping from the names to the handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." -msgstr "次に、対応するシグナルとハンドラの関数とをそれぞれ接続します。それを一番簡単に実現する方法はハンドラの名前をキーに持つ *辞書* を定義して、それを :meth:`Gtk.Builder.connect_signals` メソッドに引き渡すというものです。" - -#: ../source/builder.txt:111 -# 98d22b2b82f345b7ac73e03676fb01b7 -msgid "An alternative approach is to create a class which has methods that are called like the signals. In our example the last code snippet could be rewritten as:" -msgstr "それ以外の方法としては、シグナルのようにハンドラを呼び出すメソッドを持った任意のクラスを生成するというものです。この例だと、最後のプログラムコードを次のように書き直すことになります:" - -#: ../source/builder.txt:119 -# d8b862b9e41c4771a2fac1aff2fa67cf -msgid "Builder Objects" -msgstr "Builder のオブジェクト" - -#: ../source/builder.txt:124 -# 8b4f0bc10fa6498c803b995cc2d193c1 -msgid "Loads and parses the given file and merges it with the current contents of builder." -msgstr "指定したファイルを読み込んで解析し、この Builder が持つ現在のユーザ・インタフェースの定義とマージします。" - -#: ../source/builder.txt:128 -# 175e055be48e431c995fecdd48dd5bba -msgid "Parses the given string and merges it with the current contents of builder.." -msgstr "指定した文字列を解析し、この Builder が持つ現在のユーザ・インタフェースの定義とマージします。" - -#: ../source/builder.txt:132 -# 82a8d921436d4531a933c6b51394c8b8 -msgid "Same as :meth:`Gtk.Builder.add_from_file`, but loads only the objects with the ids given in the *object_ids* list." -msgstr ":meth:`Gtk.Builder.add_from_file` と同じですが、指定した *object_ids* というリストの中にある id を持ったオブジェクトだけ読み込みます。" - -#: ../source/builder.txt:136 -# d7b9ca39a89a40f3afa97a5bfba532ca -msgid "Same as :meth:`Gtk.Builder.add_from_string`, but loads only the objects with the ids given in the *object_ids* list." -msgstr ":meth:`Gtk.Builder.add_from_string` と同じですが、指定した *object_ids* というリストの中にある id を持ったオブジェクトだけ読み込みます。" - -#: ../source/builder.txt:140 -# 3bb7565501d243d98d090eda8c8235dc -msgid "Retrieves the widget with the id *object_id* from the loaded objects in the builder." -msgstr "この Builder が読み込んだオブジェクトのうち *object_id* を id として持つウィジェットを返します。" - -#: ../source/builder.txt:144 -# e08e217135f346fcaa931c974b1b27df -msgid "Returns all loaded objects." -msgstr "この Builder が読み込んだ全てのオブジェクトを返します。" - -#: ../source/builder.txt:148 -# 866fd3589f624a1cbfee450f84bd1460 -msgid "Connects the signals to the methods given in the *handler_object*. The *handler_object* can be any object which contains keys or attributes that are called like the signal handler names given in the interface description, e.g. a class or a dict." -msgstr "シグナルを *handler_object* の中に指定されたメソッドに接続します。この *handler_object* には、Glade ファイルの中で指定したシグナルのハンドラ名のように呼び出されるキーと属性値を含むオブジェクト (すなわち、クラスまたは辞書) を指定できます。" - -#: ../source/builder.txt:152 -# fb0b6e6b87564d30804e240b4d3449dc -msgid "Example" -msgstr "例" - -#: ../source/builder.txt:153 -# 1eb58c88a926405c960e4284482e4af4 -msgid "The final code of the example" -msgstr "この例の最終的なプログラム・コードは次のとおりです。" - diff --git a/translations/ja/button_widgets.po b/translations/ja/button_widgets.po deleted file mode 100644 index bdb53a2..0000000 --- a/translations/ja/button_widgets.po +++ /dev/null @@ -1,315 +0,0 @@ -# Japanese translation for button_widgets.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-12 10:51+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/button_widgets.txt:2 -# a2c5277c9bdc48d4a6a0c8263609f56d -msgid "Button Widgets" -msgstr "ボタン・ウィジェット" - -#: ../source/button_widgets.txt:5 -# 7075419322e746b38d7f4cbcf22dc58c -msgid "Button" -msgstr "ボタン" - -#: ../source/button_widgets.txt:7 -# cd5489c07355433faac45c297aec33a4 -msgid "The Button widget is another commonly used widget. It is generally used to attach a function that is called when the button is pressed." -msgstr "ボタン・ウィジェットもよく使用するもう一つウィジェットです。ほとんどの場合、ボタンを生成してから、そのボタンを押下する際に呼び出すメソッドを関連づけるという使い方が一般的です。" - -#: ../source/button_widgets.txt:10 -# c42871a81fc84928b72500b3c97e9666 -msgid "The :class:`Gtk.Button` widget can hold any valid child widget. That is it can hold most any other standard :class:`Gtk.Widget`. The most commonly used child is the :class:`Gtk.Label`." -msgstr ":class:`Gtk.Button` ウィジットの上には妥当な子ウィジェットをいくつかパッキングできるようになっています。それらの子ウィジェットは、すなわち、標準の :class:`Gtk.Widget` クラスのオブジェクトです。もっともよく利用する子ウィジェットは :class:`Gtk.Label` です。" - -#: ../source/button_widgets.txt:14 -# 80fa2eed7f094ac184bad72476920984 -msgid "Usually, you want to connect to the button's \"clicked\" signal which is emitted when the button has been pressed and released." -msgstr "通常、ボタンを押下したり解放する際に発行される \"clicked\" シグナルに接続することになります。" - -#: ../source/button_widgets.txt:18 -# 5fdd84f13d3e4c42beb2ed750d2070f9 -msgid "Button Objects" -msgstr "ボタンのオブジェクト" - -#: ../source/button_widgets.txt:21 -# d30c131880974cc5a1ac635dbd250eb3 -msgid "If label is not ``None``, creates a new :class:`Gtk.Button` with a :class:`Gtk.Label` child containing the given text." -msgstr "*label* が ``None`` でなければ、指定した文字列を格納した :class:`Gtk.Label` を子ウィジェットに持つ新しい :class:`Gtk.Button` を一つ生成します。" - -#: ../source/button_widgets.txt:24 -# f5e026010fb245159e1ca15f6c63ad18 -msgid "If *stock* is not ``None``, creates a new button containing the image and text from a :ref:`stock item `." -msgstr "*stock* が ``None`` でなければ :ref:`ストック・アイテム ` から取得した画像とラベルを子ウィジェットに持つ新しいボタンを生成します。" - -#: ../source/button_widgets.txt:27 -# 2e460ff68cc74d16bc75b347b8eeaa0c -msgid "If *use_underline* is set to ``True``, an underline in the text indicates the next character should be used for the mnemonic accelerator key." -msgstr "*use_underline* を ``True`` にすると、ラベルの中で下線の次にある文字をニーモニックのアクセラレータ・キーとして利用できるようになります。" - -#: ../source/button_widgets.txt:32 -# de6b723a11ec4ab18b94484d56452339 -msgid "Sets the text of the label of the button to *label*." -msgstr "ボタンのラベルを *label* という文字列にします。" - -#: ../source/button_widgets.txt:36 -# 85aed9f7f2724b2897723afc0f03fdba -msgid "If *True*, an underline in the text of the button label indicates the next character should be used for the mnemonic accelerator key." -msgstr "*use_underline* を ``True`` にすると、ボタンにあるラベルの中で下線の次にある文字をニーモニックのアクセラレータ・キーとして扱います。" - -#: ../source/button_widgets.txt:40 -#: ../source/button_widgets.txt:79 -#: ../source/button_widgets.txt:150 -#: ../source/button_widgets.txt:186 -#: ../source/button_widgets.txt:279 -# 474eb29d570b4f3790c695ff1e5c9121 -# bfe505aabfba44ff890bf7bb3117a8ab -# 0d7cf4162bb04f9cb5c377e67cd0f426 -# 3578a99b221a4bb786c98dbcf8185a2f -# 11719ed1ff8f4bcbae422bdbe2820745 -msgid "Example" -msgstr "例" - -#: ../source/button_widgets.txt:48 -# c84758a5ca2a471a8a325d63d9595d5c -msgid "ToggleButton" -msgstr "トグルボタン" - -#: ../source/button_widgets.txt:50 -# 7d1722ee33a74d3fa3a7ab8f676c5599 -msgid "A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, but when clicked they remain activated, or pressed, until clicked again. When the state of the button is changed, the \"toggled\" signal is emitted." -msgstr ":class:`Gtk.ToggleButton` クラスは :class:`Gtk.Button` クラスにとてもよく似ていますが、ボタンをクリックするともう一度クリックされるまでそのボタンの状態を記憶しています。ボタンの状態が変更されると、\"toggled\" というシグナルが発行されます。" - -#: ../source/button_widgets.txt:54 -# 7ded42e712c44c09a5535ee130c69ef7 -msgid "To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the button is \"down\". You can also set the toggle button's state, with :meth:`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state actually changes, it causes the \"toggled\" signal to be emitted." -msgstr ":class:`Gtk.ToggleButton` の状態を取得する際は :meth:`Gtk.ToggleButton.get_active` メソッドを利用します。このメソッドは、ボタンが「押下」されていたら ``True`` を返します。さらに、トグルボタンの状態を :meth:`Gtk.ToggleButton.set_active` メソッドで指定することもできます。但し、このようにしてトグルボタンの状態を変更した場合でも \"toggled\" シグナルが発行される点に留意して下さい。" - -#: ../source/button_widgets.txt:61 -# 8ee1fc9888d546ce981c93fd842f3ec6 -msgid "ToggleButton Objects" -msgstr "トグルボタンのオブジェクト" - -#: ../source/button_widgets.txt:65 -# 10f1e2c2bf0044bdacd0c287fc33c2e0 -msgid "The arguments are the same as for the :class:`Gtk.Button` constructor." -msgstr "引数は :class:`Gtk.Button` のコンストラクタと同じです。" - -#: ../source/button_widgets.txt:69 -# e637b154632042f9a9c2da946bd969d1 -msgid "Returns the buttons current state. Returns ``True`` if the toggle button is pressed in and ``False`` if it is raised." -msgstr "現在のトグルボタンの状態を返します。トグルボタンが押下されている場合は ``True`` を返し、トグルボタンが押下されていない場合は ``False`` を返します。" - -#: ../source/button_widgets.txt:74 -# a912c48cb3fb4d9c8e871bcb8e7191e0 -msgid "Sets the status of the toggle button. Set to ``True`` if you want the button to be pressed in, and ``False`` to raise it. This action causes the \"toggled\" signal to be emitted." -msgstr "トグルボタンの状態をセットします。トグルボタンを押下した状態にしたいのであれば ``True`` を指定し、逆にトグルボタンが押下されていない状態にしたいのであれば ``False`` にします。このメソッドを呼び出すと \"toggled\" シグナルが発行されます。" - -#: ../source/button_widgets.txt:87 -# facee9c3f3be4c6ab4dcfc55cac5c1a4 -msgid "CheckButton" -msgstr "チェックボタン" - -#: ../source/button_widgets.txt:88 -# 34a8d842db3e448aa102ad78570b6013 -msgid ":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk.ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are inherited." -msgstr ":class:`Gtk.CheckButton` は :class:`Gtk.ToggleButton` から派生したクラスの一つです。この二つのクラスの違いは :class:`Gtk.CheckButton` の外観ぐらいです。 :class:`Gtk.CheckButton` クラスは一個の完全な :class:`Gtk.ToggleButton` オブジェクトを任意のウィジェット (通常は一個の :class:`Gtk.Label`) の隣に配置します。\"toggled\" シグナルや :meth:`Gtk.ToggleButton.set_active` や :meth:`Gtk.ToggleButton.get_active` といったメソッドも継承しています。" - -#: ../source/button_widgets.txt:96 -# e1e28be7e65348e3bbd18b9eaa19109a -msgid "CheckButton Objects" -msgstr "チェックボタンのオブジェクト" - -#: ../source/button_widgets.txt:100 -# c8a3e28360514cf49ecb9617c0cde37d -msgid "Arguments are the same as for :class:`Gtk.Button`." -msgstr "引数は :class:`Gtk.Button` のコンストラクタと同じです。" - -#: ../source/button_widgets.txt:103 -# d7074c27d2f74d1d8a91532499ef86de -msgid "RadioButton" -msgstr "ラジオボタン" - -#: ../source/button_widgets.txt:104 -# dbfd782af8004aa6baca000e7aebbc49 -msgid "Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, but these work in groups, and only one :class:`Gtk.RadioButton` in a group can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is one way of giving the user a choice from many options." -msgstr "チェックボタン同様に、ラジオボタンもまた :class:`Gtk.ToggleButton` クラスから派生していますが、ラジオボタンはグループで連動します。具体的には、グループの中にある :class:`Gtk.RadioButton` を一回につき一個だけ選択することができます。そのため :class:`Gtk.RadioButton` クラスは、ユーザが複数のオプションを選択するといったユーザ・インタフェースを提供しています。" - -#: ../source/button_widgets.txt:109 -# ea41c356454c45e0868c375cecfdd8bf -msgid "Radio buttons can be created with one of the static methods :meth:`Gtk.RadioButton.new_from_widget`, :meth:`Gtk.RadioButton.new_with_label_from_widget` or :meth:`Gtk.RadioButton.new_with_mnemonic_from_widget`. The first radio button in a group will be created passing ``None`` as the *group* argument. In subsequent calls, the group you wish to add this button to should be passed as an argument." -msgstr "ラジオボタンは :meth:`Gtk.RadioButton.new_from_widget` または :meth:`Gtk.RadioButton.new_with_label_from_widget` 、あるいは :meth:`Gtk.RadioButton.new_with_mnemonic_from_widget` といった static メソッドのいずれかで生成します。グループの中にある一番最初のラジオボタンは *group* という引数を ``None`` にして生成します。それ以降の (ラジオボタン生成の) メソッドで、この一番最初のラジオボタンのインスタンスを引数に渡すことで、生成したラジオボタンをグループに追加できます。" - -#: ../source/button_widgets.txt:117 -# 5d38ae6480d74b8bae80c403562685e0 -msgid "When first run, the first radio button in the group will be active. This can be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as first argument." -msgstr "初めて実行した場合、グループの中にある一番最初のボタンの状態が ON になります。これは ``True`` を先頭の引数にして :meth:`Gtk.ToggleButton.set_active` メソッドを呼び出すことで変更することができます。" - -#: ../source/button_widgets.txt:121 -# 2d20a1605089495ead9fdcc32b46cde0 -msgid "Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be achieved by calling :meth:`Gtk.RadioButton.join_group`." -msgstr ":class:`Gtk.RadioButton` を生成した後に、それらが所属しているグループを変更するには :meth:`Gtk.RadioButton.join_group` メソッドを呼び出して下さい。" - -#: ../source/button_widgets.txt:125 -# 7423ee3404e94ad98e61cff311ab2244 -msgid "RadioButton Objects" -msgstr "ラジオボタンのオブジェクト" - -#: ../source/button_widgets.txt:131 -# ba19fd6a37234f36b7d6f40f7267fa40 -msgid "Creates a new :class:`Gtk.RadioButton`, adding it to the same group as the *group* widget. If *group* is ``None``, a new group is created." -msgstr "新しい :class:`Gtk.RadioButton` を一つ生成し *group* というウィジェットと同じグループに追加します。 *group* を ``None`` にすると新しいグループも生成されます。" - -#: ../source/button_widgets.txt:136 -# cf13b331c11e4f629788532e18d2d27c -msgid "Creates a new :class:`Gtk.RadioButton`. The text of the label widget inside the button will be set to *label*. *group* is the same as for :meth:`new_from_widget`." -msgstr "新しい :class:`Gtk.RadioButton` を一つ生成します。ラジオボタンの中にあるラベルの文字列を *label* にします。 *group* 引数は :meth:`Gtk.RadioButton.new_from_widget` メソッドと同じ扱いです。" - -#: ../source/button_widgets.txt:142 -# ec3e480f6fb6479281b066c79c4b3323 -msgid "Same as :meth:`new_with_label_from_widget`, but underscores in *label* indicate the mnemonic for the button." -msgstr ":meth:`Gtk.RadioButton.new_with_label_from_widget` と同じですが *label* の中にニーモニックのアクセラレータ・キーを表す下線が付与される点が違います。" - -#: ../source/button_widgets.txt:147 -# 280bb54525f8444e8c2d5f41cfae8886 -msgid "Joins this radio button to the group of another :class:`Gtk.RadioButton` object." -msgstr "このラジオボタンを別の :class:`Gtk.RadioButton` のグループに追加します。" - -#: ../source/button_widgets.txt:158 -# 8f2c50015b0b4db3b049df962f47d735 -msgid "LinkButton" -msgstr "リンクボタン" - -#: ../source/button_widgets.txt:159 -# d2bf4f5d234841778a18d4dac8bd3905 -msgid "A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar to the one used by web browsers, which triggers an action when clicked. It is useful to show quick links to resources." -msgstr ":class:`Gtk.LinkButton` はウェブ・ブラウザでよく利用されるハイパーリンクを持った :class:`Gtk.Button` の一種で、そのリンクをクリックすると関連づけられた任意のアクションを始動します。いろいろなリソースへのリンクを素早く表示させる際に便利なインタフェースです。" - -#: ../source/button_widgets.txt:163 -# 005cd41d1b08416cabd061f7146ce5d8 -msgid "The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton.get_uri`." -msgstr ":class:`Gtk.LinkButton` に関連づける URI は :meth:`Gtk.LinkButton.set_uri` メソッドで指定し :meth:`Gtk.LinkButton.get_uri` メソッドで取得できます。" - -#: ../source/button_widgets.txt:168 -# 8d5f60ffdff9418d8341ad24882d9629 -msgid "LinkButton Objects" -msgstr "リンクボタンのオブジェクト" - -#: ../source/button_widgets.txt:172 -# f6b6ff0117334b45946175a8e819fca8 -msgid "*uri* is the address of the website which should be loaded. The label is set as the text which should be displayed. If it is set to ``None`` or omitted, the web address will be displayed instead." -msgstr "引数の *uri* は参照することになるウェブサイトのアドレスです。引数の *label* はハイパーリンクとして表示する際の文字列です。この引数を ``None`` にするか省略すると、ウェブサイトのアドレスがそのまま表示されます。" - -#: ../source/button_widgets.txt:178 -# 92d4f1ccf51b44eeadeffa0feeea8ea6 -msgid "Retrieves the URI set using :meth:`set_uri`." -msgstr ":meth:`Gtk.LinkButton.set_uri` メソッドを使って指定した URI を取得します。" - -#: ../source/button_widgets.txt:182 -# 0cca91030f42426cbe32c0ef12a10fb6 -msgid "Sets *uri* as the URI where this button points to. As a side-effect this unsets the 'visited' state of the button." -msgstr "このボタンが指している先の URI を *uri* にします。このメソッドを呼び出すと、ボタンが保持している 'visited' というステータスをリセットします。" - -#: ../source/button_widgets.txt:194 -# 7b20b55dd6584fb0bf0f50afea9199e8 -msgid "SpinButton" -msgstr "スピンボタン" - -#: ../source/button_widgets.txt:195 -# 182bc3469ad64debb8ee1b2ed920e0dc -msgid "A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value of some attribute. Rather than having to directly type a number into a :class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one of two arrows to increment or decrement the displayed value. A value can still be typed in, with the bonus that it can be checked to ensure it is in a given range. The main properties of a :class:`Gtk.SpinButton` are set through :class:`Gtk.Adjustment`." -msgstr ":class:`Gtk.SpinButton` クラスは、ユーザが任意の属性に対して調節しながら値を指定できるようにするための理想的な方法を提供します。直接 :class:`Gtk.Entry` に値を入力する代わりに :class:`Gtk.SpinButton` を使えばユーザは二つの矢印 (アローボタン) のいずれかをクリックして表示されている値を増やしたり減らしたりできます。さらに値をそのまま入力することもでき、その値が指定された範囲に収まっているかチェックする機能も付いています。 :class:`Gtk.SpinButton` の主なプロパティは :class:`Gtk.Adjustment` を介して指定します。" - -#: ../source/button_widgets.txt:203 -# 66fea2dc06a94f598670a0197012b5cf -msgid "To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk.SpinButton.set_value`. The value entered can either be an integer or float, depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :meth:`Gtk.SpinButton.get_value_as_int`, respectively." -msgstr ":class:`Gtk.SpinButton` が表示している値を変更する際は :meth:`Gtk.SpinButton.set_value` メソッドを使います。入力できる値は必要に応じて実数値または整数値いずれかで、それぞれ :meth:`Gtk.SpinButton.get_value` または :meth:`Gtk.SpinButton.get_value_as_int` メソッドで取得できます。" - -#: ../source/button_widgets.txt:208 -# 0022f50dfd2f4ca9aa56cfb86eba6e50 -msgid "When you allow the displaying of float values in the spin button, you may wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk.SpinButton.set_digits`." -msgstr "スピンボタンの中に実数値を表示できるような場合 :meth:`Gtk.SpinButton.set_digits` メソッドを使って小数点以下の桁数を調整できます。" - -#: ../source/button_widgets.txt:212 -# b065c06baacf4e45b679ce016937889a -msgid "By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` with ``True`` as argument." -msgstr "デフォルトで :class:`Gtk.SpinButton` は文字列のデータを受け取ることができるようになっています。もし数値だけ入力できるように制限したい場合 :meth:`Gtk.SpinButton.set_numeric` メソッドに引数として ``True`` を渡して呼び出して下さい。" - -#: ../source/button_widgets.txt:216 -# 92a302d5b897477f8337ceafea5fd6f1 -msgid "We can also adjust the update policy of :class:`Gtk.SpinButton`. There are two options here; by default the spin button updates the value even if the data entered is invalid. Alternatively, we can set the policy to only update when the value entered is valid by calling :meth:`Gtk.SpinButton.set_update_policy`." -msgstr "また :class:`Gtk.SpinButton` の更新ポリシーも調整することが可能です。ここには二つの選択肢があります。デフォルトで、スピンボタンは例え間違ったデータが入力された場合でも値を更新するというポリシーになっています。あるいは :meth:`Gtk.SpinButton.set_update_policy` を呼び出して、妥当なデータが入力された時にのみ値を更新するというポリシーも選択できます。" - -#: ../source/button_widgets.txt:222 -# ea16456c896545c4926f2910439669c6 -msgid "SpinButton Objects" -msgstr "スピンボタンのオブジェクト" - -#: ../source/button_widgets.txt:228 -# a24a2bc6e166495dab3a84fe10da6150 -msgid "Replaces the :class:`Gtk.Adjustment` associated with this spin button." -msgstr "このスピンボタンに関連づけられている :class:`Gtk.Adjustment` を *adjustment* で置き換えます。" - -#: ../source/button_widgets.txt:232 -# 89610757dda042fda7433743655d042b -msgid "Set the precision to be displayed by this spin button. Up to 20 digit precision is allowed." -msgstr "このスピンボタンに表示する値の精度を指定します。小数点以下 20 桁までの精度を指定できます。" - -#: ../source/button_widgets.txt:237 -# 517d09775408474c9153233f490bb61f -msgid "Sets the step and page increments for this spin button. This affects how quickly the value changes when the spin button's arrows are activated." -msgstr "このスピンボタンに対するステップ単位とページ単位の増分値を指定します。これは、スピンボタンについているアローボタンを押下した時にどれくらい値を変化させるかに影響します。" - -#: ../source/button_widgets.txt:242 -# fb8fe0784b2949d78b07384905f845ae -msgid "Sets the value of this spin button." -msgstr "このスピンボタンの値を *value* にします。" - -#: ../source/button_widgets.txt:246 -# ac8e992e390f45239721a447e6cfdf9a -msgid "Get the value of this spin button represented as an float." -msgstr "このスピンボタンが保持している値を実数値として取得します。" - -#: ../source/button_widgets.txt:250 -# 16f3381c44dd43e9801b93dbc9ba330d -msgid "Get the value of this spin button represented as an integer." -msgstr "このスピンボタンが保持している値を整数値として取得します。" - -#: ../source/button_widgets.txt:254 -# 0051591e55dc4540b337c1fe51fabbcc -msgid "If *numeric* is ``False``, non-numeric text can be typed into the spin button, else only numbers can be typed." -msgstr "*numeric* が ``False`` の場合、数値ではない文字列をスピンボタンに入力できるようになります。それ以外は数値だけ入力できます。" - -#: ../source/button_widgets.txt:259 -# 2af30b64fdbd440ba92a78324a807804 -msgid "Sets the update behavior of a spin button. This determines whether the spin button is always updated or only when a valid value is set. The *policy* argument can either be :attr:`Gtk.SpinButtonUpdatePolicy.ALWAYS` or :attr:`Gtk.SpinButtonUpdatePolicy.IF_VALID`." -msgstr "このスピンボタンの更新ポリシーを指定します。このポリシーは常にスピンボタンの値を更新するか、あるいは妥当な値が入力された時にだけ更新するかを決定します。引数の *policy* には :attr:`Gtk.SpinButtonUpdatePolicy.ALWAYS` または :attr:`Gtk.SpinButtonUpdatePolicy.IF_VALID` のいずれかを指定できます。" - -#: ../source/button_widgets.txt:265 -# 69e75c4f8af04daba45c41719ea4c69d -msgid "Adjustment Objects" -msgstr "アジャストメントのオブジェクト" - -#: ../source/button_widgets.txt:269 -# b90362f91d564b1baeb798b064af06d4 -msgid "The :class:`Gtk.Adjustment` object represents a value which has an associated lower and upper bound, together with step and page increments, and a page size. It is used within several GTK+ widgets, including :class:`Gtk.SpinButton`, :class:`Gtk.Viewport`, and :class:`Gtk.Range`." -msgstr ":class:`Gtk.Adjustment` は下限と上限を持ち、ステップ単位とページ単位の増減値を持ち、ページサイズを持つ一個の値を表す抽象的なオブジェクトです。このオブジェクトは :class:`Gtk.SpinButton` や :class:`Gtk.Viewport` や :class:`Gtk.Range` といった GTK+ のいろいろなウィジェットの中で利用されています。" - -#: ../source/button_widgets.txt:274 -# 71fb53e166644da6a51e73de52685f68 -msgid "*value* is the initial value, *lower* the minimum value, *upper* the maximum value, *step_increment* the step increment, *page_increment* the page increment, and *page_size* the page size." -msgstr "*value* は初期値、 *lower* は最小値、 *upper* は最大値、 *step_increment* はステップ単位の増減値、 *page_increment* はページ単位の増減値、そして *page_size* は一ページの大きさです。" - diff --git a/translations/ja/cellrenderers.po b/translations/ja/cellrenderers.po deleted file mode 100644 index f50fa49..0000000 --- a/translations/ja/cellrenderers.po +++ /dev/null @@ -1,257 +0,0 @@ -# Japanese translation for treeview.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-16 09:34+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/cellrenderers.txt:4 -# dc5d6be0641649b2816a8c9aa8bfb2ca -msgid "CellRenderers" -msgstr "セル・レンダラ" - -#: ../source/cellrenderers.txt:6 -# 6a24d6b784ea4c33ab79e5ee537d7bf0 -msgid ":class:`Gtk.CellRenderer` widgets are used to display information within widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They work closely with the associated widgets and are very powerful, with lots of configuration options for displaying a large amount of data in different ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used for different purposes:" -msgstr ":class:`Gtk.CellRenderer` は :class:`Gtk.TreeView` や :class:`Gtk.ComboBox` のようなウィジェットの中に何かデータを表示するために使用するウィジェットです。このウィジェットは関連するウィジェットと連携し、とても強力で、いろいろな方法でたくさんのデータを表示するための設定オプションが用意されています。この :class:`Gtk.CellRenderer` クラスのウィジェットはいろいろな用途に利用できます::" - -#: ../source/cellrenderers.txt:12 -# e70498c7146442889f5270ea8926a091 -msgid ":class:`Gtk.CellRendererText`" -msgstr ":class:`Gtk.CellRendererText`" - -#: ../source/cellrenderers.txt:13 -# ed745ed5ab5f4b03b362f00f1061fac8 -msgid ":class:`Gtk.CellRendererToggle`" -msgstr ":class:`Gtk.CellRendererToggle`" - -#: ../source/cellrenderers.txt:14 -# ca0e392b0ff740a0b693c2f745af6f96 -msgid ":class:`Gtk.CellRendererPixbuf`" -msgstr ":class:`Gtk.CellRendererPixbuf`" - -#: ../source/cellrenderers.txt:15 -# 188450b69c7d4495a2c18ce0ba67f9b9 -msgid ":class:`Gtk.CellRendererCombo`" -msgstr ":class:`Gtk.CellRendererCombo`" - -#: ../source/cellrenderers.txt:16 -# 5d088776ca9a40dcb3df68b183a6963e -msgid ":class:`Gtk.CellRendererProgress`" -msgstr ":class:`Gtk.CellRendererProgress`" - -#: ../source/cellrenderers.txt:17 -# c5fa948aad0d430d9c0d5dbfa1094e37 -msgid ":class:`Gtk.CellRendererSpinner`" -msgstr ":class:`Gtk.CellRendererSpinner`" - -#: ../source/cellrenderers.txt:18 -# 180ab82a3ab64a809fe4bbdfa3220f63 -msgid ":class:`Gtk.CellRendererSpin`" -msgstr ":class:`Gtk.CellRendererSpin`" - -#: ../source/cellrenderers.txt:19 -# 638cf3b96d5d457da31c8bf6debd7419 -msgid ":class:`Gtk.CellRendererAccel`" -msgstr ":class:`Gtk.CellRendererAccel`" - -#: ../source/cellrenderers.txt:22 -# d6b020f6f08f4f42bac1068a0b9db273 -msgid "CellRendererText" -msgstr "CellRendererText" - -#: ../source/cellrenderers.txt:24 -# aadf3477f71e49bca12a9266c46df336 -msgid "A :class:`Gtk.CellRendererText` renders a given text in its cell, using the font, color and style information provided by its properties. The text will be ellipsized if it is too long and the \"ellipsize\" property allows it." -msgstr ":class:`Gtk.CellRendererText` クラスはセル (項目の中にはセルをいくつか描画でき、セルが一個の場合は項目と同じ扱いになります) の中に、プロパティとして指定したフォントや色、スタイルの情報を使って文字列を描画します。文字列が長く、\"ellipsize\" プロパティが有効になっている場合は省略表記 (\"文字列...\") になります。" - -#: ../source/cellrenderers.txt:28 -# eab29354f2ff4b6cb67de6a2735ffc54 -msgid "By default, text in :class:`Gtk.CellRendererText` widgets is not editable. This can be changed by setting the value of the \"editable\" property to ``True``:" -msgstr "デフォルトで :class:`Gtk.CellRendererText` クラスの文字列は編集不可です。これは、次のように \"editable\" プロパティを ``True`` にすることで変更できます::" - -#: ../source/cellrenderers.txt:35 -# a61ce8b364544f4c829e7e394ab5dfc2 -msgid "You can then connect to the \"edited\" signal and update your :class:`Gtk.TreeModel` accordingly." -msgstr "それから \"edited\" シグナルを接続して :class:`Gtk.TreeModel` クラスをそれぞれ更新していきます。" - -#: ../source/cellrenderers.txt:39 -# 582c8186590d4363b1575b2c5b7ecc82 -msgid "CellRendererText Objects" -msgstr "CellRendererText のオブジェクト" - -#: ../source/cellrenderers.txt:43 -# 1de8a99bc9ed454881867dd509b1ed39 -msgid "Creates a new :class:`Gtk.CellRendererText` instance. Adjust how text is drawn using object properties. Also, with :class:`Gtk.TreeViewColumn`, you can bind a property to a value in a :class:`GtkTreeModel`. For example, you can bind the \"text\" property on the cell renderer to a string value in the model, thus rendering a different string in each row of the :class:`Gtk.TreeView`." -msgstr "新しい :class:`Gtk.CellRendererText` クラスのインスタンスを生成します。このオブジェクトのプロパティを使って、どのように文字列を描画するかを決定します。さらに :class:`Gtk.TreeViewColumn` クラスを使って :class:`Gtk.TreeModel` にあるデータのプロパティと連動させることも可能です。例えば、セル・レンダラの \"text\" プロパティをモデルの中にある文字列に関連づけることで :class:`Gtk.TreeView` の各項目の中にいろいろな文字列を描画することができます。" - -#: ../source/cellrenderers.txt:51 -#: ../source/cellrenderers.txt:96 -#: ../source/cellrenderers.txt:121 -#: ../source/cellrenderers.txt:155 -#: ../source/cellrenderers.txt:180 -#: ../source/cellrenderers.txt:209 -# 8ee612ac4caf48c5b488853754bf5501 -# b95112e6d4c147dfa61288aeba65de4a -# 85ebd98e736f4ea6a7c44b6fa62d2659 -# e1a0e801471843bcbd4e18a29aa93430 -# 93068da6f30b423984f47f7b71d729db -# b6fb319b9e6d4bec93d645f6bd9db7db -msgid "Example" -msgstr "例" - -#: ../source/cellrenderers.txt:59 -# 9bd10de1a6934930b96bb10dc6409b9a -msgid "CellRendererToggle" -msgstr "CellRendererToggle" - -#: ../source/cellrenderers.txt:61 -# 8125070d424047fe9072f6437e6bdfe1 -msgid ":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The button is drawn as a radio- or checkbutton, depending on the \"radio\" property. When activated, it emits the \"toggled\" signal." -msgstr ":class:`Gtk.CellRendererToggle` クラスはセル (項目の中にはセルをいくつか描画でき、セルが一個の場合は項目と同じ扱いになります) の中にトグル・ボタンを描画します。このボタンは \"radio\" というプロパティに応じて、ラジオ型またはチェック型のトグルとして描画されます。このボタンが押下されると \"toggled\" というシグナルが発行されます。" - -#: ../source/cellrenderers.txt:65 -# 86445b772f7d4deca00be464fa5f55c8 -msgid "As a :class:`Gtk.CellRendererToggle` can have two states, active and not active, you most likely want to bind the \"active\" property on the cell renderer to a boolean value in the model, thus causing the check button to reflect the state of the model." -msgstr "この :class:`Gtk.CellRendererToggle` クラスは二つの状態 (押下されているかどうか) を保持できるので、セル・レンダラの \"active\" プロパティをモデルの中の論理値に相当するデータに関連づけるといった扱いがもっとも一般的です。その場合だと、例えばチェックボタンを押下したらモデルの状態にその結果が反映されるようになります。" - -#: ../source/cellrenderers.txt:71 -# debc4a86107043d881a4ee2f614bd435 -msgid "CellRendererToggle Objects" -msgstr "CellRendererToggle のオブジェクト" - -#: ../source/cellrenderers.txt:75 -# 577a57c0b5f54cb6881562958d18d211 -msgid "Creates a new :class:`Gtk.CellRendererToggle` instance." -msgstr "新しい :class:`Gtk.CellRendererToggle` クラスのインスタンスを生成します。" - -#: ../source/cellrenderers.txt:79 -# 52991316424649068604e0d544b76322 -msgid "Activates or deactivates a cell renderer." -msgstr "セル・レンダラが保持する状態を有効にしたり無効にします。" - -#: ../source/cellrenderers.txt:83 -# d740008ac8c248feb3aa9562acad2787 -msgid "Returns whether the cell renderer is active." -msgstr "セル・レンダラが保持する状態を取得します。" - -#: ../source/cellrenderers.txt:87 -# b848217a91cd4524af3e7f1e04cf9ca3 -msgid "If *radio* is ``True``, the cell renderer renders a radio toggle (i.e. a toggle in a group of mutually-exclusive toggles). If ``False``, it renders a check toggle (a standalone boolean option)." -msgstr "*radio* を ``True`` にすると、セル・レンダラはラジオ型のトグルを描画します (つまりトグルがいくつかあるグループの中で一つだけ有効になる排他的なタイプです)。 ``False`` にすると、チェック型のトグルを描画します (いわゆる単体のオプションを表現するタイプです)。" - -#: ../source/cellrenderers.txt:93 -# f258f40b1b234e8d8614300db2ce3607 -msgid "Returns whether we're rendering radio toggles rather than checkboxes." -msgstr "このセル・レンダラがチェック型のトグルではなくラジオ型のトグルを描画しているかを返します。" - -#: ../source/cellrenderers.txt:104 -# d6167371c4d54512ae66fbc3ec6681b8 -msgid "CellRendererPixbuf" -msgstr "CellRendererPixbuf" - -#: ../source/cellrenderers.txt:106 -# 71f2b104eeb549579b2aa13c9ec8000b -msgid "A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf\" property) or a :ref:`stock item ` (set via the \"stock-id\" property)." -msgstr ":class:`Gtk.CellRendererPixbuf` クラスのインスタンスはセル (項目の中にはセルをいくつか描画でき、セルが一個の場合は項目と同じ扱いになります) の中に一個の画像を描画する際に利用できます。このセル・レンダラを使うと :class:`Gtk.Pixbuf` (\"pixbuf\" プロパティに指定したもの) か、または :ref:`ストック・アイテム ` (\"stock-id\" プロパティに指定したもの) のいずれかを描画できます。" - -#: ../source/cellrenderers.txt:111 -# a355150af070492998bc9f26f55e39c4 -msgid "CellRendererPixbuf Objects" -msgstr "CellRendererPixbuf のオブジェクト" - -#: ../source/cellrenderers.txt:115 -# ff385fb4ee264e8f88170eafaee2d956 -msgid "Creates a new :class:`Gtk.CellRendererPixbuf`. Adjust rendering parameters using object properties. For example, you can bind the \"pixbuf\" or \"stock-id\" property on the cell renderer to a pixbuf value in the model, thus rendering a different image in each row of the :class:`Gtk.TreeView`." -msgstr "新しい :class:`Gtk.CellRendererPixbuf` クラスのインスタンスを生成します。このオブジェクトのプロパティを使って、描画パラメータを調整します。例えば、セル・レンダラの \"pixbuf\" または \"stock-id\" プロパティをモデルの中にある :class:`Gtk.Pixbuf` 型の画像データに関連づけることで、 :class:`Gtk.TreeView` の各項目にいろいろな種類の画像を表示できます。" - -#: ../source/cellrenderers.txt:129 -# abad9386a9a84968980d41055e041a6e -msgid "CellRendererCombo" -msgstr "CellRendererCombo" - -#: ../source/cellrenderers.txt:131 -# c57170fdfe954f6d9bc66e5059748bdb -msgid ":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk.CellRendererText` from which it is derived. But while the latter offers a simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :class:`Gtk.ComboBox` widget to edit the text. The values to display in the combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model\" property." -msgstr ":class:`Gtk.CellRendererCombo` クラスは、(このクラスから継承した) :class:`Gtk.CellRendererText` のようなセルの中に文字列を描画します。但し、後者のクラスが文字列を編集するための簡単なエントリを提供するのに対し、 :class:`Gtk.CellRendererCombo` クラスは :class:`Gtk.ComboBox` (コンボ・ボックス) を使って文字列を編集します。コンボ・ボックスの中に入力候補として表示する一連の値は、\"model\" プロパティの中で指定した :class:`Gtk.TreeModel` から取得します。" - -#: ../source/cellrenderers.txt:137 -# 3866d1e47bea411483fafbe0cbe61e1e -msgid "The combo cell renderer takes care of adding a text cell renderer to the combo box and sets it to display the column specified by its \"text-column\" property." -msgstr "コンボのセル・レンダラは文字列を描画するセル・レンダラをコンボ・ボックスに追加する処理の面倒をみます。そして、追加した文字列を \"text-column\" プロパティで指定したカラムに表示します。" - -#: ../source/cellrenderers.txt:140 -# d8dffa800c3c488ebb8ff5f490fe05c5 -msgid "A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used with and without an associated :class:`Gtk.Entry` widget, depending on the value of the \"has-entry\" property." -msgstr ":class:`Gtk.CellRendererCombo` は二つのモードで操作できます。それは :class:`Gtk.Entry` ウィジェットとの連携の有無です (このモードの切り替えは \"has-entry\" プロパティで指定します)。" - -#: ../source/cellrenderers.txt:145 -# a7c35851b9784a44b0e269d5da182514 -msgid "CellRendererCombo Objects" -msgstr "CellRendererCombo のオブジェクト" - -#: ../source/cellrenderers.txt:149 -# 030282c8778a4ad3a54f1ffea35628df -msgid "Creates a new :class:`Gtk.CellRendererCombo`. Adjust how text is drawn using object properties. For example, you can bind the \"text\" property on the cell renderer to a string value in the model, thus rendering a different string in each row of the :class:`Gtk.TreeView`." -msgstr "新しい :class:`Gtk.CellRendererCombo` クラスのインスタンスを生成します。このオブジェクトのプロパティを使って文字列の描画方法を調整します。例えば、セル・レンダラの \"text\" プロパティをモデルの中に格納した任意の文字列と関連づけることで :class:`Gtk.TreeView` の各行にいろいろ異なる文字列を描画することができるようになります。" - -#: ../source/cellrenderers.txt:163 -# 7b6bc79d4bca4fdb93b8a06b26880116 -msgid "CellRendererProgress" -msgstr "CellRendererProgress" - -#: ../source/cellrenderers.txt:165 -# 4eca225849a64fb884752b09043ef909 -msgid ":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar in a cell. Additionally, it can display a text on top of the progress bar." -msgstr ":class:`Gtk.CellRendererProgress` クラスはセル (項目の中にはセルをいくつか描画でき、セルが一個の場合は項目と同じ扱いになります) の中にプログレスバーを描画します。また、そのプログレスバーの上に文字列を表示することもできます。" - -#: ../source/cellrenderers.txt:168 -# bb6bac3e62de4980ad120e1d01ced270 -msgid "The percentage value of the progress bar can be modified by changing the \"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the *activity mode* by incrementing the \"pulse\" property instead of the \"value\" property." -msgstr "プログレスバーが持つ百分率の値はその \"value\" プロパティ経由で変更できます。 :class:`Gtk.ProgressBar` と同様に、\"value\" プロパティではなく \"pulse\" プロパティの値を増分することで ``アクティビティ・モード`` を利用することもできます。" - -#: ../source/cellrenderers.txt:173 -# fb040bda97a94a4985c0ec83c712c81a -msgid "CellRendererProgress Objects" -msgstr "CellRendererProgress のオブジェクト" - -#: ../source/cellrenderers.txt:177 -# 5f056a8e3b884805b1e21e1b367105ec -msgid "Creates a new :class:`Gtk.CellRendererProgress`." -msgstr "新しい :class:`Gtk.CellRendererProgress` クラスのインスタンスを生成します。" - -#: ../source/cellrenderers.txt:188 -# 941c656ab65c40f5a008850c1b57befe -msgid "CellRendererSpin" -msgstr "CellRendererSpin" - -#: ../source/cellrenderers.txt:190 -# ba51e7627665419ab7ca0e4664f163d5 -msgid ":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk.CellRendererText` from which it is derived. But while the latter offers a simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:`Gtk.SpinButton` widget. Of course, that means that the text has to be parseable as a floating point number." -msgstr ":class:`Gtk.CellRendererSpin` はそのクラスの派生元の :class:`Gtk.CellRendererText` クラスのようなセル (項目の中にはセルをいくつか描画でき、セルが一個の場合は項目と同じ扱いになります) の中に文字列を描画します。但し、後者の暮らすが文字列を編集するために簡単なエントリを提供しているのに対し、 :class:`Gtk.CellRendererSpin` クラスは :class:`Gtk.SpinButton` クラスのウィジェットを提供します。もちろん、それは浮動小数点型の実数として文字列を解析できることを意味しています。" - -#: ../source/cellrenderers.txt:196 -# d926297980d540c9955fc42c420104d9 -msgid "The range of the spinbutton is taken from the adjustment property of the cell renderer, which can be set explicitly or mapped to a column in the tree model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` also has properties for the climb rate and the number of digits to display." -msgstr "スピンボタンで指定可能な範囲はセル・レンダラの \"adjustment\" プロパティから受け取ります。これはセル・レンダラの他のプロパティ同様に、明示的に指定するか、もしくはツリーモデルの中の任意の項目に直接マップして指定できます。さらに :class:`Gtk.CellRendererSpin` クラスには climb レート (矢印をクリックした時にスピン・ボタンが変化する量) や表示する桁数のプロパティがたくさんあります。" - -#: ../source/cellrenderers.txt:202 -# 5dcbf3e4a5c14843aefafdec02421931 -msgid "CellRendererSpin Objects" -msgstr "CellRendererSpin のオブジェクト" - -#: ../source/cellrenderers.txt:206 -# b0d739a925234c0cab77ff8f9d2db594 -msgid "Creates a new :class:`Gtk.CellRendererSpin`." -msgstr "新しい :class:`Gtk.CellRendererSpin` クラスのインスタンスを生成します。" - diff --git a/translations/ja/clipboard.po b/translations/ja/clipboard.po deleted file mode 100644 index d893f04..0000000 --- a/translations/ja/clipboard.po +++ /dev/null @@ -1,107 +0,0 @@ -# Japanese translation for clipboard.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-08 08:12\n" -"PO-Revision-Date: 2012-12-08 23:49+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/clipboard.txt:2 -# 6b6308bcf5f74461a98c457a673b8d89 -msgid "Clipboard" -msgstr "クリップボード" - -#: ../source/clipboard.txt:4 -# 9a2a6db6956145a9862797af0dfd1550 -msgid ":class:`Gtk.Clipboard` provides a storage area for a variety of data, including text and images. Using a clipboard allows this data to be shared between applications through actions such as copying, cutting, and pasting. These actions are usually done in three ways: using keyboard shortcuts, using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk.Button` widgets." -msgstr ":class:`Gtk.Clipboard` は文字列と画像を含むいろいろなデータを格納しておく場所を提供してくれます。クリップボードを利用すると、アプリケーションからコピーとか切り取りとか貼り付けといった ``アクション`` を介してデータを共有することができます。これらのアクションの実行方法には、キーボード・ショートカットを使う, :class:`Gtk.MenuItem` から実行する、関数を :class:`Gtk.Button` クラスのウィジェットに接続するの三つあります。" - -#: ../source/clipboard.txt:11 -# d6f914dda98a489c825a72cc472c4612 -msgid "There are multiple clipboard selections for different purposes. In most circumstances, the selection named ``CLIPBOARD`` is used for everyday copying and pasting. ``PRIMARY`` is another common selection which stores text selected by the user with the cursor." -msgstr "様々な用途に応じて利用できる複数のクリップボード・セレクションがあります。ほとんどの場合, ``CLIPBOARD`` というセレクションを利用してデータのコピーと貼り付けを実現できます。さらに ``PRIMARY`` というもう一つのセレクションはユーザがカーソルを使って選択した文字列を格納します。" - -#: ../source/clipboard.txt:17 -# 35304fd1f6ff4e3d8ef727c9fd97f0bd -msgid "Clipboard Objects" -msgstr "クリップボードのオブジェクト" - -#: ../source/clipboard.txt:22 -# 0c6ecac9889143abb7e3ba8d446d1c2d -msgid "Obtains the :class:`Gtk.Clipboard` for the given selection." -msgstr "指定したセレクションの :class:`Gtk.Clipboard` を取得します。" - -#: ../source/clipboard.txt:24 -# 688f50a6bb8141d482ef67fe2cac4264 -msgid "*selection* is a :class:`Gdk.Atom` describing which clipboard to use. Predefined values include:" -msgstr "*selection* には使用するクリップボードを定義した :class:`Gdk.Atom` というオブジェクトを指定します。事前に定義されているオブジェクトは次のとおりです:" - -#: ../source/clipboard.txt:27 -# 8289809912dd453fa735a91730cae97f -msgid "``Gdk.SELECTION_CLIPBOARD``" -msgstr "``Gdk.SELECTION_CLIPBOARD``" - -#: ../source/clipboard.txt:28 -# de919ef660654b4d9ee7ccfdf3a9b8f2 -msgid "``Gdk.SELECTION_PRIMARY``" -msgstr "``Gdk.SELECTION_PRIMARY``" - -#: ../source/clipboard.txt:32 -# 06ccb235fd2f46c7b6527c5af1ca4621 -msgid "Sets the contents of the clipboard to the given text." -msgstr "指定した文字列をクリップボードのデータにします。" - -#: ../source/clipboard.txt:34 -# 776ff712e8d04253b3b5a6fca3cc69a8 -msgid "*text* is the string to put in the clipboard." -msgstr "*text* にはクリップボードの中に格納する文字列を指定します。" - -#: ../source/clipboard.txt:36 -# e7f45ed7da164c2d9391a2d08fd293bf -msgid "*length* is the number of characters to store. It may be omitted to store the entire string." -msgstr "*length* にはクリップボードに格納する文字数を指定します。文字列の全てを格納する場合は省略できます。" - -#: ../source/clipboard.txt:41 -# 85a1e894dcd24ee1b0ee10e0bc35b422 -msgid "Sets the contents of the clipboard to the given image." -msgstr "指定した画像をクリップボードのデータにします。" - -#: ../source/clipboard.txt:43 -# e59d519f47c24c918ba463bafa161709 -msgid "*image* must be a :class:`Gdk.Pixbuf`. To retrieve one from a :class:`Gdk.Image`, use ``image.get_pixbuf()``." -msgstr "*image* には :class:`Gdk.Pixbuf` 型の画像を指定して下さい。 :class:`Gdk.Image` 型から取得する場合は ``image.get_pixbuf()`` メソッドを使って下さい。" - -#: ../source/clipboard.txt:48 -# 0a72a291b06742f886c1897272e3cfd2 -msgid "Returns the clipboard's content as a string, or returns ``None`` if the clipboard is empty or not currently holding text." -msgstr "クリップボードのデータを文字列として返すか、あるいはクリップボードが空または文字列が格納されていない場合は ``None`` を返します。" - -#: ../source/clipboard.txt:53 -# 8c7a944afec542fc81c0b7e459dfd339 -msgid "Returns the clipboard's content as a :class:`Gtk.Pixbuf`, or returns ``None`` if the clipboard is empty or not currently holding an image." -msgstr "クリップボードのデータを :class:`Gtk.Pixbuf` 型の画像として返すか、あるいはクリップボードが空または画像が格納されていない場合は ``None`` を返します。" - -#: ../source/clipboard.txt:59 -# 9676a5d39adb4b289f5345eb3731f8d8 -msgid "Stores the clipboard's data outside the application. Otherwise, data copied to the clipboard may be lost when the application exits." -msgstr "クリップボードのデータをアプリケーション外に格納します。格納しない場合、アプリケーションが終了した時にクリップボードへコピーしたデータが破棄されます。" - -#: ../source/clipboard.txt:64 -# b609e0f3e9724f768826d144502d3944 -msgid "Clears the contents of the clipboard. Use with caution; this may clear data from another application." -msgstr "クリップボードのデータをクリアします。他のアプリケーションが格納したデータもクリアする可能性があるので、注意して利用して下さい。" - -#: ../source/clipboard.txt:68 -# e227396d5ed142bf8cbcad034820778a -msgid "Example" -msgstr "例" - diff --git a/translations/ja/combobox.po b/translations/ja/combobox.po deleted file mode 100644 index c70aca3..0000000 --- a/translations/ja/combobox.po +++ /dev/null @@ -1,117 +0,0 @@ -# Japanese translation for combobox.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-17 08:44+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/combobox.txt:2 -# d79ee1b077414bf384a191eccb16f133 -msgid "ComboBox" -msgstr "コンボ・ボックス" - -#: ../source/combobox.txt:3 -# cfac9411004648d18ad14021f07ef55d -msgid "A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown menu. They are preferable to having many radio buttons on screen as they take up less room. If appropriate, it can show extra information about each item, such as text, a picture, a checkbox, or a progress bar." -msgstr ":class:`Gtk.ComboBox` を使うとドロップダウン式のメニューからアイテムを選択できます。このクラスでは画面にたくさんのラジオボタンを持つようなケースでの対応を想定しています (コンボ・ボックスなら場所をとらなくて済むため)。さらに必要であれば、各アイテムに追加の情報 (文字列や画像、チェックボックス、あるいはプログレスバーなど) を表示させることも可能です。" - -#: ../source/combobox.txt:8 -# 709a18bb54f14f56bb1bcd533691b9ed -msgid ":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use the model-view pattern; the list of valid choices is specified in the form of a tree model, and the display of the choices can be adapted to the data in the model by using :ref:`cell renderers `. If the combo box contains a large number of items, it may be better to display them in a grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox.set_wrap_width`." -msgstr ":class:`Gtk.ComboBox` は :class:`Gtk.TreeView` クラスにとてもよく似ています。これらのクラスは共に ``モデルとビュー`` の設計思想を採用しているからです。すなわち、実際に選択が可能なアイテムのリストをツリー・モデルの形で指定し、選択が可能なアイテムは :ref:`セル・レンダラ ` を使ってモデルの中にあるデータの種類に応じて描画するというものです。コンボ・ボックスにたくさんのアイテムが含まれている場合は、リスト状に並べるよりは格子状に並べて表示する方がよいかもしれません。これは :meth:`Gtk.ComboBox.set_wrap_width` メソッドで指定できます。" - -#: ../source/combobox.txt:16 -# 16d8ce848973460089dc88bf4689c7bf -msgid "The :class:`Gtk.ComboBox` widget usually restricts the user to the available choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user to enter arbitrary text if none of the available choices are suitable. To do this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk.ComboBox` instance." -msgstr "通常 :class:`Gtk.ComboBox` クラスのウィジェットはユーザに対して選択できるアイテムを制限することになりますが、オプションで :class:`Gtk.Entry` を持たせることで、選択肢にないものを任意の文字列として入力できるようになります。これはスタティック・メソッドである :meth:`Gtk.ComboBox.new_with_entry` かまたは :meth:`Gtk.ComboBox.new_with_model_and_entry` といったいずれかのメソッドを使って :class:`Gtk.ComboBox` クラスのインスタンスを生成します。" - -#: ../source/combobox.txt:23 -# 38c2bf3b9d3d49df9ef9080856abeecc -msgid "For a simple list of textual choices, the model-view API of :class:`Gtk.ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk.ComboBoxText` can contain an entry." -msgstr "選択肢が文字列からなる簡単なリストの場合だと :class:`Gtk.ComboBox` クラスのモデル・ビュー API は少々大げさに思える場合があります。そのような場合に向けて :class:`Gtk.ComboBoxText` クラスという簡易版が用意されています。 :class:`Gtk.ComboBox` と :class:`Gtk.ComboBoxText` クラスは共に一個のエントリを含めることが可能です。" - -#: ../source/combobox.txt:29 -# a4dee5fb33ed49f79bd984d8c7840189 -msgid "ComboBox objects" -msgstr "コンボ・ボックスのオブジェクト" - -#: ../source/combobox.txt:35 -# 40044de710dc437bbae556d939270639 -msgid "Creates a new empty :class:`Gtk.ComboBox` with an entry." -msgstr "エントリを一つ持つ新しい空の :class:`Gtk.ComboBox` を生成します。" - -#: ../source/combobox.txt:39 -# 8511745ad2a245728a012f1961703659 -msgid "Creates a new :class:`Gtk.ComboBox` with the model initialized to *model*." -msgstr "*model* で初期化されたモデルを持つ新しい :class:`Gtk.ComboBox` を生成します。" - -#: ../source/combobox.txt:43 -# 10b552e08e5a4f04bbaf52e59c72f858 -msgid "Creates a new :class:`Gtk.ComboBox` with an entry and the model initialized to *model*." -msgstr "*model* で初期化されたモデルと一つのエントリを持つ新しい :class:`Gtk.ComboBox` を生成します。" - -#: ../source/combobox.txt:48 -# 17e255b6898f4d0aba7b7e43669bfa55 -msgid "Returns a :class:`Gtk.TreeIter` pointing to the current active item. If no active item exists, ``None`` is returned." -msgstr "現在、選択しているアイテムの :class:`Gtk.TreeIter` を返します。もしそのようなアイテムが無ければ ``None`` を返します。" - -#: ../source/combobox.txt:53 -# 191732e9b9ad466d9f3ede70c889a93c -msgid "Sets the model used by this combo box to be *model*. Will unset a previously set model (if applicable). If model is ``None``, then it will unset the model. Note that this function does not clear the cell renderers." -msgstr "*model* をこのコンボ・ボックスが使用するモデルにセットします。セットする前に既にモデルが存在していた場合は、先にその古いモデルを解除します。 *model* を ``None`` にすると、セットされているモデルを解除します。このメソッドはセル・レンダラをクリアすることはありません。" - -#: ../source/combobox.txt:59 -# 8b465db7097b4a7caf4b3bc49fd4f90e -msgid "Returns the :class:`Gtk.TreeModel` which is acting as data source for this combo box." -msgstr "このコンボ・ボックスのデータ・ソースとして機能している :class:`Gtk.TreeModel` を返します。" - -#: ../source/combobox.txt:64 -# b27c94202ac94cebaa90f704baf0a492 -msgid "Sets the model column which this combo box should use to get strings from to be *text_column*. The column *text_column* in the model of this combo box must be of type ``str``." -msgstr "*text_column* を、文字列を持つ項目 (``カラム``) に指定します。但し、モデルの中にある *text_column* という項目は ``str`` 型でなければなりません。" - -#: ../source/combobox.txt:68 -# a86e0691c3254449ad08cb6e694853ea -msgid "This is only relevant if this combo box has been created with the \"has-entry\" property set to ``True``." -msgstr "これは、\"has-entry\" というプロパティが ``True`` としてコンボ・ボックスが生成されている場合にのみ有効です。" - -#: ../source/combobox.txt:73 -# 162f1698e99f4211a7d43ddfb922b6d2 -msgid "Sets the wrap width of this combo box to be *width*. The wrap width is basically the preferred number of columns when you want the popup to be layed out in a grid." -msgstr "コンボ・ボックスのラップ幅を *width* にします。基本的にラップ幅は、ポップアップを配置したい位置を表す格子上の列番号に相当します。" - -#: ../source/combobox.txt:78 -# 7078b7ae8c4f41a389bb78f261a30183 -msgid "ComboBoxText objects" -msgstr "ComboBoxText のオブジェクト" - -#: ../source/combobox.txt:84 -# 5f75181b19e341b5930313e581a9f7f8 -msgid "Creates a new empty :class:`Gtk.ComboBoxText` with an entry." -msgstr "エントリを一つ持つ新しい空の :class:`Gtk.ComboBoxText` を生成します。" - -#: ../source/combobox.txt:88 -# 5ae8975765cd46c79e0b9d7aeeb637e3 -msgid "Appends *text* to the list of strings stored in this combo box." -msgstr "このコンボ・ボックスの中に格納されている文字列のリストに *text* を追加します。" - -#: ../source/combobox.txt:92 -# e980d2ec0035448991c19760b3149438 -msgid "Returns the currently active string in this combo box, or ``None`` if none is selected. If this combo box contains an entry, this function will return its contents (which will not necessarily be an item from the list)." -msgstr "このコンボ・ボックスの中で現在、選択されている文字列を返します。あるいは、何も選択されていない場合は ``None`` を返します。また、このコンボ・ボックスがエントリ付きで生成されている場合、そのエントリの中にある文字列を返します (この文字列はコンボ・ボックスが持つ文字列のリストの要素である必要はありません)。" - -#: ../source/combobox.txt:97 -# 35c829cf41d24d488937dea706eb3be8 -msgid "Example" -msgstr "例" - diff --git a/translations/ja/dialogs.po b/translations/ja/dialogs.po deleted file mode 100644 index 29f7051..0000000 --- a/translations/ja/dialogs.po +++ /dev/null @@ -1,481 +0,0 @@ -# Japanese translation for dialogs.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-08 08:12\n" -"PO-Revision-Date: 2012-12-03 23:23+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/dialogs.txt:2 -# 122d55390bd34955a862970999fd002f -msgid "Dialogs" -msgstr "ダイアログ" - -#: ../source/dialogs.txt:4 -# cd189b96a4124c259840b19ef014058b -msgid "Dialog windows are very similar to standard windows, and are used to provide or retrieve information from the user. They are often used to provide a preferences window, for example. The major difference a dialog has is some prepacked widgets which layout the dialog automatically. From there, we can simply add labels, buttons, check buttons, etc. Another big difference is the handling of responses to control how the application should behave after the dialog has been interacted with." -msgstr "ダイアログ・ウィンドウは標準的なウィンドウにとてもよく似ており、ユーザに情報を提供したり、ユーザから情報を得ることに使用されます。例えば、設定ダイアログとしてよく利用されます。両ウィンドウの主な違いは、ダイアログはそれを構成するいろいろなウィジェットが事前にパッキングされて自動的に配置される点です。さらに、そのような状態からいろいろなラベルやボタン等を追加することもできます。その他の違いとして、ダイアログに対応した後に、アプリケーションをどのように扱うかを制御するための応答を処理することがあります。" - -#: ../source/dialogs.txt:12 -# 96dd01fe750440139d73cbc1d90c3117 -msgid "There are several derived Dialog classes which you might find useful. :class:`Gtk.MessageDialog` is used for most simple notifications. But at other times you might need to derive your own dialog class to provide more complex functionality." -msgstr "ダイアログにはたくさんの便利な派生クラスがあります。 :class:`Gtk.MessageDialog` は簡単な通知を行う際によく使用します。それ以外には独自にダイアログを派生させて、さらに複雑な機能を提供する必要が出てくるかもしれません。" - -#: ../source/dialogs.txt:18 -# 9166d297a354496f9d06beea4386e19e -msgid "Custom Dialogs" -msgstr "独自のダイアログ" - -#: ../source/dialogs.txt:20 -# b73ace49790943559f06c18f7b6d8592 -msgid "To pack widgets into a custom dialog, you should pack them into the :class:`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk.Dialog.add_button` method." -msgstr "いろいろなウィジェットを独自のダイアログにパッキングするには、ウィジェットを :class:`Gtk.Box` の中にパッキングしてから :meth:`Gtk.Dialog.get_content_area` メソッドを使ってそのウィジェットを利用します。単に :class:`Gtk.Button` をダイアログのボタンとして追加したいのであれば :meth:`Gtk.Dialog.add_button` メソッドを使うことになります。" - -#: ../source/dialogs.txt:25 -# 989235514ba54434a855ace6e892414b -msgid "A 'modal' dialog (that is, one which freezes the rest of the application from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." -msgstr "「モーダル」なダイアログ (ユーザからの入力中はアプリケーションへの操作が凍結されるモードのダイアログ) は、 :meth:`Gtk.Dialog.set_modal` を呼び出すか、または :class:`Gtk.Dialog` のコンストラクタを呼び出す際に ``flags`` という引数に :attr:`Gtk.DialogFlags.MODAL` というフラグを含めることで生成できます。" - -#: ../source/dialogs.txt:30 -# 436e079906234e2896a3790e1d4d2bea -msgid "Clicking a button will emit a signal called \"response\". If you want to block waiting for a dialog to return before returning control flow to your code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which may be a value from the :class:`Gtk.ResponseType` or it could be the custom response value that you specified in the :class:`Gtk.Dialog` constructor or :meth:`Gtk.Dialog.add_button`." -msgstr "ボタンをクリックすると \"response\" というシグナルが発行されます。もし制御をプログラム側に戻す前にダイアログで待ちが発生しないようにしたいのであれば :meth:`Gtk.Dialog.run` メソッドを呼び出して下さい。このメソッドは、 :class:`Gtk.ResponseType` が表す int 型の値、または :class:`Gtk.Dialog` のコンストラクタや :meth:`Gtk.Dialog.add_button` で指定した独自の応答値を返すようにします。" - -#: ../source/dialogs.txt:36 -# fa61bc92b963469ba9ce2329ab45545b -msgid "Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` method removes the dialog from view, however keeps it stored in memory. This is useful to prevent having to construct the dialog again if it needs to be accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` method can be used to delete the dialog from memory once it is no longer needed. It should be noted that if the dialog needs to be accessed after it has been destroyed, it will need to be constructed again otherwise the dialog window will be empty." -msgstr "最後に、ダイアログを削除する方法が二つあります。まず :meth:`Gtk.Widget.hide` メソッドはダイアログをビューから削除しますが、メモリ上にはまだリソースが残ったままです。これは、後でダイアログにアクセスする必要がある時に便利です (再びダイアログを生成する必要はありません)。もう一つは :meth:`Gtk.Widget.destroy` メソッドで、これはもう必要のないダイアログをメモリ上から削除する時に使用します。ダイアログを破棄した後に再びアクセスする必要がある場合はダイアログをもう一度生成する必要があるので注意して下さい (さもなくば、空のダイアログになってしまいます)。" - -#: ../source/dialogs.txt:46 -# b3466f53a20848188da54550526dee91 -msgid "Dialog Objects" -msgstr "ダイアログのオブジェクト" - -#: ../source/dialogs.txt:50 -# ea7cc4bcbe184801ace5726d077c8610 -msgid "Creates a new :class:`Gtk.Dialog` with title *title* and transient parent *parent*. The *flags* argument can be used to make the dialog model (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`)." -msgstr "*title* というタイトルを付きで *parent* を一時的な親とする新しい :class:`Gtk.Dialog` を生成します。引数の *flags* を使ってダイアログのモード (:attr:`Gtk.DialogFlags.MODAL`) を指定したり、一時的な親と共にダイアログを破棄するモード (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`) を指定できます。" - -#: ../source/dialogs.txt:55 -# c94fd289298849698ae12ab990fed405 -msgid "*buttons* is a tuple of buttons which can be set to provide a range of different buttons and responses. See the :meth:`add_button` method for details." -msgstr "*buttons* はボタンに関する情報を要素とするタプルで、その情報はボタンの種類とその応答 ID とをペアで指定します。詳細は :meth:`Gtk.Dialog.add_button` メソッドを参照して下さい。" - -#: ../source/dialogs.txt:59 -#: ../source/dialogs.txt:163 -# f399bfcf0dd34d75a9eb786807e0395d -# 201a7d216cfd4ebc994351baf7f0c07b -msgid "All arguments are optional and can be referred to as key-word arguments as well." -msgstr "全ての引数はオプション扱いで、キーワードの引数も同様に扱われます。" - -#: ../source/dialogs.txt:64 -# 9b4ba84f5b1545159f82bf2a965cdad6 -msgid "Return the content area of of this dialog." -msgstr "このダイアログが持つコンテンツ領域 (ボタンやボックスなどを含む領域) を返します。" - -#: ../source/dialogs.txt:68 -# 2cba0855d00441868982e8c47d2efc2d -msgid "Adds a button with the given text (or a stock button, if *button_text* is a :ref:`stock item `) and sets things up so that clicking the button will emit the \"response\" signal with the given *response_id*. The button is appended to the end of the dialog's action area." -msgstr "指定した文字列 (または *button_text* が :ref:`ストック・アイテム ` ならばアイコン) を持つボタンを追加設定するので、ボタンをクリックすると指定した応答 ID の *response_id* を持つ \"response\" シグナルを発行できます。新しいボタンはダイアログのアクション領域 (ボタンを配置する領域) の一番最後に追加されます。" - -#: ../source/dialogs.txt:73 -# 3826768e48884717a4aa2fd85e221771 -msgid "*response_id* can be any positive integer or one of the predefined :class:`Gtk.ResponseType` values:" -msgstr "応答 ID の *response_id* には正の整数値、または事前に定義されている次の :class:`Gtk.ResponseType` 型の値を指定して下さい:" - -#: ../source/dialogs.txt:76 -# 58811e5b0e4f4d2d869e5cc8fec7e82c -msgid ":attr:`Gtk.ResponseType.NONE`" -msgstr ":attr:`Gtk.ResponseType.NONE`" - -#: ../source/dialogs.txt:77 -# 53d335f295774f1c96ec4e175b6a09f9 -msgid ":attr:`Gtk.ResponseType.REJECT`" -msgstr ":attr:`Gtk.ResponseType.REJECT`" - -#: ../source/dialogs.txt:78 -#: ../source/dialogs.txt:209 -# a2d4b58ca53643d4ba28279fe83d5395 -# ca38c8c95e6e4d2baf3eaea270c60a14 -msgid ":attr:`Gtk.ResponseType.ACCEPT`" -msgstr ":attr:`Gtk.ResponseType.ACCEPT`" - -#: ../source/dialogs.txt:79 -# f5915e7f40204cfb93a6e7cf901d7fcc -msgid ":attr:`Gtk.ResponseType.DELETE_EVENT`" -msgstr ":attr:`Gtk.ResponseType.DELETE_EVENT`" - -#: ../source/dialogs.txt:80 -#: ../source/dialogs.txt:210 -# cda53cf4b9fd4ea09f6197e76c4002af -# 7a903727b7d74ba1a7e9e6d104ecb904 -msgid ":attr:`Gtk.ResponseType.OK`" -msgstr ":attr:`Gtk.ResponseType.OK`" - -#: ../source/dialogs.txt:81 -# 6feea1196a3147d099cd315ed3ab140d -msgid ":attr:`Gtk.ResponseType.CANCEL`" -msgstr ":attr:`Gtk.ResponseType.CANCEL`" - -#: ../source/dialogs.txt:82 -# 075aec1df44c4db3a6231b950ffb4584 -msgid ":attr:`Gtk.ResponseType.CLOSE`" -msgstr ":attr:`Gtk.ResponseType.CLOSE`" - -#: ../source/dialogs.txt:83 -#: ../source/dialogs.txt:211 -# 88cb4577681b4edc9509abbae3cb2c4e -# 80e7c3c3a1c147e9ae1d45c375737674 -msgid ":attr:`Gtk.ResponseType.YES`" -msgstr ":attr:`Gtk.ResponseType.YES`" - -#: ../source/dialogs.txt:84 -# cfb88210a1a0423486796ff1f3a88eca -msgid ":attr:`Gtk.ResponseType.NO`" -msgstr ":attr:`Gtk.ResponseType.NO`" - -#: ../source/dialogs.txt:85 -#: ../source/dialogs.txt:212 -# fd9c847b8c9c490a8a72b3d6de8623f2 -# cd44ba621b9f4902ba4163b19dfd6c95 -msgid ":attr:`Gtk.ResponseType.APPLY`" -msgstr ":attr:`Gtk.ResponseType.APPLY`" - -#: ../source/dialogs.txt:86 -# 49641c8de2a44ab3a5ae130013932a48 -msgid ":attr:`Gtk.ResponseType.HELP`" -msgstr ":attr:`Gtk.ResponseType.HELP`" - -#: ../source/dialogs.txt:88 -# 988d3b35149d4e3b8366db305671e8d7 -msgid "The button widget is returned, but usually you don't need it." -msgstr "このメソッドはボタン・ウィジェットを返しますが、通常は使用することはありません。" - -#: ../source/dialogs.txt:92 -# da4e4a21c59b46f4ac4eae4f07bf9de0 -msgid "Adds several buttons to this dialog using the button data passed as arguments to the method. This method is the same as calling :meth:`add_button` repeatedly. The button data pairs - button text (or :ref:`stock item `) and a response ID integer are passed individually. For example::" -msgstr "引数として渡されたデータを使って、このダイアログにボタンをいくつか追加します。このメソッドは、複数のボタンに対して :meth:`Gtk.Dialog.add_button` メソッドをそれぞれ呼び出すことと等価です。ボタンのデータはペアで指定して下さい ー ボタンのラベルを表す *button_text* (または :ref:`ストック・アイテム `) と応答 ID を表す整数値の *response_id* のペアをボタンの数だけそれぞれ渡して下さい。例えば::" - -#: ../source/dialogs.txt:102 -# 694d9479eabb41aca090445deec23095 -msgid "Sets a dialog modal or non-modal. Modal dialogs prevent interaction with other windows in the same application." -msgstr "このダイアログをモーダルまたは非モーダルにします。モーダルなダイアログは同一アプリケーション内の他のウィンドウへアクセスできないようにします。" - -#: ../source/dialogs.txt:107 -# 5dde047e0d804af297646cdf62c9635e -msgid "Blocks in a recursive main loop until the dialog either emits the \"response\" signal, or is destroyed. If the dialog is destroyed during the call to :meth:`run`, :meth:`run` returns :attr:`Gtk.ResponseType.NONE`. Otherwise, it returns the response ID from the \"response\" signal emission." -msgstr "このダイアログが \"response\" シグナルを発行するか、または破棄されるまで再帰的にメイン・ループの中で他のイベントをブロックします。この :meth:`Gtk.Dialog.run` を呼び出している最中にダイアログが破棄されたら、このメソッドは :attr:`Gtk.ResponseType.NONE` を返します。それ以外は \"response\" シグナルが発行したら応答 ID を返します。" - -#: ../source/dialogs.txt:113 -#: ../source/dialogs.txt:175 -#: ../source/dialogs.txt:340 -# 4f11f2bc88424808954e0e741d5b1a6c -# 8f557e29deb64b8fafc75f8297e2655e -# 65e7e07d91364561a40ae896b5b6d1a7 -msgid "Example" -msgstr "例" - -#: ../source/dialogs.txt:120 -# 6bf0ecb7fabd4ccc9116be321e8a8ce4 -msgid "MessageDialog" -msgstr "MessageDialog" - -#: ../source/dialogs.txt:122 -# 909eaa0ada8b484aaebcde9eb000a308 -msgid ":class:`Gtk.MessageDialog` is a convenience class, used to create simple, standard message dialogs, with a message, an icon, and buttons for user response You can specify the type of message and the text in the :class:`Gtk.MessageDialog` constructor, as well as specifying standard buttons." -msgstr ":class:`Gtk.MessageDialog` はオールインワンで便利なクラスで、メッセージやアイコンや応答 ID を返すボタンといった簡素な構成を持つ、標準的なメッセージ・ダイアログを生成する際に使用します。 :class:`Gtk.MessageDialog` のコンストラクタには標準的なボタンを指定する他に、メッセージの種類とその文字列を引き渡せます。" - -#: ../source/dialogs.txt:127 -# 8915e46d195a44fcacae6fd51f7eda47 -msgid "In some dialogs which require some further explanation of what has happened, a secondary text can be added. In this case, the primary message entered when creating the message dialog is made bigger and set to bold text. The secondary message can be set by calling :meth:`Gtk.MessageDialog.format_secondary_text`." -msgstr "ダイアログの中で更に詳細な情報を提示する必要がある場合、二番目のメッセージを追加することができます。その際はメッセージ・ダイアログを生成する際に指定した一番目のメッセージが大きく太字で表示されます。二番目のメッセージは :meth:`Gtk.MessageDialog.format_secondary_text` メソッドを使って指定できます。" - -#: ../source/dialogs.txt:133 -# ae0a6eb9b0cb45868acef639bf451f15 -msgid "MessageDialog Objects" -msgstr "MessageDialog のオブジェクト" - -#: ../source/dialogs.txt:137 -# 3a822dacfc0047aba6b9dca4e048f2aa -msgid "Creates a new :class:`Gtk.MessageDialog` with transient parent *parent*. The *flags* argument can be used to make the dialog model (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`)." -msgstr "一時的な親として *parent* を持つ新しい :class:`Gtk.MessageDialog` を生成します。引数の *flags* を指定してダイアログのモード (:attr:`Gtk.DialogFlags.MODAL`) を指定したり、その一時的な親と共に破棄させる属性 (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`) を有効にできます。" - -#: ../source/dialogs.txt:142 -# 9498a5b4d79f4f26a19011de9fe2fdec -msgid "*message_type* can be set to one of the following values:" -msgstr "*message_type* には次のいずれかの値を指定できます:" - -#: ../source/dialogs.txt:144 -# f15ca6e1fb8c49a580154542bb390cc9 -msgid ":attr:`Gtk.MessageType.INFO`: Informational message" -msgstr ":attr:`Gtk.MessageType.INFO`: 一般的な情報 (Informational) のメッセージ" - -#: ../source/dialogs.txt:145 -# 4f102e3f41074564a03821afde14a824 -msgid ":attr:`Gtk.MessageType.WARNING`: Non-fatal warning message" -msgstr ":attr:`Gtk.MessageType.WARNING`: 致命的ではない警告 (Warning) のメッセージ" - -#: ../source/dialogs.txt:146 -# b40b84d76a114f519a68b4bbe73d4c49 -msgid ":attr:`Gtk.MessageType.QUESTION`: Question requiring a choice" -msgstr ":attr:`Gtk.MessageType.QUESTION`: 選択が必要となる質問/問い合わせ (Question) のメッセージ" - -#: ../source/dialogs.txt:147 -# 9bfddbf1f16d45ae84a59b18219bea63 -msgid ":attr:`Gtk.MessageType.ERROR`: Fatal error message" -msgstr ":attr:`Gtk.MessageType.ERROR`: 致命的なエラー (Error) のメッセージ" - -#: ../source/dialogs.txt:148 -# ce62bc00389148a08c50fd86a075a1c8 -msgid ":attr:`Gtk.MessageType.OTHER`: None of the above, doesn't get an icon" -msgstr ":attr:`Gtk.MessageType.OTHER`: 上記以外 (アイコンなし)" - -#: ../source/dialogs.txt:150 -# 7127d46910de476b9a199740bbe90b3b -msgid "It is also possible to set a variety of buttons on the message dialog, to retrieve different responses from the user. One of the following values can be used:" -msgstr "更にメッセージ・ダイアログにはいろいろな種類のボタンを指定して、ユーザからいろいろな応答を受け取ることができます。引数の *buttons* には次のいずれかの値を指定できます:" - -#: ../source/dialogs.txt:154 -# ac77f173e141404ebb6d030d91e76db4 -msgid ":attr:`Gtk.ButtonsType.NONE`: no buttons at all" -msgstr ":attr:`Gtk.ButtonsType.NONE`: ボタンなし" - -#: ../source/dialogs.txt:155 -# 02223a9c5b0444e4aecea68bdab77341 -msgid ":attr:`Gtk.ButtonsType.OK`: an OK button" -msgstr ":attr:`Gtk.ButtonsType.OK`: [OK] ボタン" - -#: ../source/dialogs.txt:156 -# 0bdc930035fa41e0b4577372b4b0711d -msgid ":attr:`Gtk.ButtonsType.CLOSE`: a Close button" -msgstr ":attr:`Gtk.ButtonsType.CLOSE`: [閉じる] ボタン" - -#: ../source/dialogs.txt:157 -# 463ed75cfcd441d6bf58542d6ebebf62 -msgid ":attr:`Gtk.ButtonsType.CANCEL`: a Cancel button" -msgstr ":attr:`Gtk.ButtonsType.CANCEL`: [キャンセル] ボタン" - -#: ../source/dialogs.txt:158 -# 538664b779114ab7b80d5d32286fd9a6 -msgid ":attr:`Gtk.ButtonsType.YES_NO`: Yes and No buttons" -msgstr ":attr:`Gtk.ButtonsType.YES_NO`: [はい] と [いいえ] ボタン" - -#: ../source/dialogs.txt:159 -# 46e66c1d3ddd4c0cb11951de990f4639 -msgid ":attr:`Gtk.ButtonsType.OK_CANCEL`: OK and Cancel buttons" -msgstr ":attr:`Gtk.ButtonsType.OK_CANCEL`: [OK] と [キャンセル] ボタン" - -#: ../source/dialogs.txt:161 -# 68140d8e3e5f48208061cf5f6869d757 -msgid "Finally, *message_format* is some text that the user may want to see." -msgstr "引数の *message_format* にはユーザに通知したい文字列を指定します。" - -#: ../source/dialogs.txt:168 -# 4ac1c1cd643148749b14fc8afe65ec3a -msgid "Sets the secondary text of the message dialog to be *message_format*." -msgstr "*message_format* にメッセージ・ダイアログの二番目のメッセージを指定します。" - -#: ../source/dialogs.txt:170 -# f967b4b8acec4fecb25e430f4afff9c8 -msgid "Note that setting a secondary text makes the primary text (*message_format* argument of :class:`Gtk.MessageDialog` constructor) become bold, unless you have provided explicit markup." -msgstr "二番目のメッセージを指定すると、一番目のメッセージ (:class:`Gtk.MessageDialog` のコンストラクタに引き渡した *message_format*) の書式を明示的に指定しない限り、自動的に太字になるので注意して下さい。" - -#: ../source/dialogs.txt:183 -# 521383e079c64b23b691aefc074f06ce -msgid "FileChooserDialog" -msgstr "FileChooserDialog" - -#: ../source/dialogs.txt:185 -# f70a9fc9092f40fcb65a57adda4cfcdd -msgid "The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or \"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." -msgstr ":class:`Gtk.FileChooserDialog` は \"ファイル/開く\" や \"ファイル/保存\" といったメニュー項目と一緒に利用するのに適したダイアログです。ファイル選択ダイアログでは :class:`Gtk.FileChooser` が提供する全てのメソッドの他に :class:`Gtk.Dialog` のメソッドも利用できます。" - -#: ../source/dialogs.txt:189 -# ee929ba5b56345ea9ba07a1c293dcc43 -msgid "When creating a :class:`Gtk.FileChooserDialog` you have to define the dialog's purpose:" -msgstr ":class:`Gtk.FileChooserDialog` を生成する際にダイアログの使途を指定する必要があります:" - -#: ../source/dialogs.txt:192 -# e778c6e73b49406e9d65a81c54568ddc -msgid "To select a file for opening, as for a File/Open command, use :attr:`Gtk.FileChooserAction.OPEN`" -msgstr "\"ファイル/開く\" のようにオープンするファイルを選択する場合は :attr:`Gtk.FileChooserAction.OPEN` を指定する" - -#: ../source/dialogs.txt:194 -# 018db105c1c74861b57291836f8a644b -msgid "To save a file for the first time, as for a File/Save command, use :attr:`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :meth:`Gtk.FileChooser.set_current_name`." -msgstr "\"ファイル/保存\" のように初めてファイルを保存する場合は :attr:`Gtk.FileChooserAction.SAVE` を指定し, :meth:`Gtk.FileChooser.set_current_name` メソッドを使って \"名前なし\" のようなデフォルトのファイル名を提示する" - -#: ../source/dialogs.txt:197 -# a862e5091aa645ddbcc2a03fc72d635f -msgid "To save a file under a different name, as for a File/Save As command, use :attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:`Gtk.FileChooser.set_filename`." -msgstr "\"ファイル/別名で保存\" のように別の名前でファイルを保存する場合は :attr:`Gtk.FileChooserAction.SAVE` を指定し, :meth:`Gtk.FileChooser.set_filename` メソッドを使って既存のファイル名をセットする" - -#: ../source/dialogs.txt:200 -# ea2e73a1a2b146c2a6f995fa544bc6b4 -msgid "To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction.SELECT_FOLDER`." -msgstr "ファイルの代わりにフォルダを選択する場合は :attr:`Gtk.FileChooserAction.SELECT_FOLDER` を指定する" - -#: ../source/dialogs.txt:202 -# 3ae94505693c462a87f6496562396af2 -msgid ":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk.ResponseType.CANCEL` which can be specified in the :class:`Gtk.FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can not use custom response codes with :class:`Gtk.FileChooserDialog`. It expects that at least one button will have of the following response IDs:" -msgstr ":class:`Gtk.FileChooserDialog` は :class:`Gtk.Dialog` クラスから派生しているので、そのダイアログにあるボタンは :attr:`Gtk.ResponseType.ACCEPT` や :attr:`Gtk.ResponseType.CANCEL` といった応答 ID を持ちます。これらは :class:`Gtk.FileChooserDialog` クラスのコンストラクタの中で指定できます。 :class:`Gtk.Dialog` クラスとは対照的に、この :class:`Gtk.FileChooserDialog` では独自に応答 ID を定義できません。いくつかあるボタンのうち少なくとも一つは次の応答 ID を持っているものとみなされます:" - -#: ../source/dialogs.txt:214 -# 9bf3f088cd0c436b99370ed5fe425439 -msgid "When the user is finished selecting files, your program can get the selected names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs (:meth:`Gtk.FileChooser.get_uri`)." -msgstr "ユーザによるファイルの選択が完了したら、選択されたファイル名 (:meth:`Gtk.FileChooser.get_filename`) または URI (:meth:`Gtk.FileChooser.get_uri`) を取得できます。" - -#: ../source/dialogs.txt:218 -# d598c9c5382a4c77abaa109a37d34c6e -msgid "By default, :class:`Gtk.FileChooser` only allows a single file to be selected at a time. To enable multiple files to be selected, use :meth:`Gtk.FileChooser.set_select_multiple`. Retrieving a list of selected files is possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk.FileChooser.get_uris`." -msgstr "デフォルトで :class:`Gtk.FileChooser` は一度に一個のファイルだけしか選択できません。複数のファイルを選択できるようにするには :meth:`Gtk.FileChooser.set_select_multiple` メソッドを使用します。選択した複数のファイルのリストを取得するには :meth:`Gtk.FileChooser.get_filenames` または :meth:`Gtk.FileChooser.get_uris` メソッドを使用します。" - -#: ../source/dialogs.txt:224 -# 49b9edb07bf840839ff1e642153d1510 -msgid ":class:`Gtk.FileChooser` also supports a variety of options which make the files and folders more configurable and accessible." -msgstr "さらに :class:`Gtk.FileChooser` では、いろいろなファイルやフォルダを設定したりアクセスするためのオプションをサポートしています。" - -#: ../source/dialogs.txt:227 -# 4171e81ea18c4655a0686f7ec84ee934 -msgid ":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." -msgstr ":meth:`Gtk.FileChooser.set_local_only`: ローカルにあるファイルのみ選択できる" - -#: ../source/dialogs.txt:228 -# 7452af3f9f674606b1730dbccb9548c3 -msgid ":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." -msgstr ":meth:`Gtk.FileChooser.show_hidden`: 隠しファイルやフォルダを表示する" - -#: ../source/dialogs.txt:229 -# 83aa559fc1dd406cb93645ba07b55544 -msgid ":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a confirmation dialog if the user types a file name that already exists." -msgstr ":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: ファイル選択ダイアログを :attr:`Gtk.FileChooserAction.SAVE` モードで使用するような場合、ユーザが既に存在するファイル名を入力したら上書きする旨の確認ダイアログを表示する" - -#: ../source/dialogs.txt:233 -# 4b131891a4a34949b975dce477fb3365 -msgid "Furthermore, you can specify which kind of files are displayed by creating :class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser.add_filter`. The user can then select one of the added filters from a combo box at the bottom of the file chooser." -msgstr "さらに :class:`Gtk.FileFilter` のオブジェクトを生成して :meth:`Gtk.FileChooser.add_filter` を呼び出すことで表示するファイルの種類をフィルタリングできます。すると、ユーザはファイル選択ダイアログの下にあるコンボボックスに追加されたフィルタの中から一つ選択できるようになります。" - -#: ../source/dialogs.txt:239 -# a262ce49648646ce91417780f6bea287 -msgid "FileChooser Objects" -msgstr "FileChooser のオブジェクト" - -#: ../source/dialogs.txt:243 -# 406512cebd6f462c844b0c24c35f1532 -msgid "Creates a new :class:`Gtk.FileChooserDialog` with title *title and transient parent *parent*." -msgstr "タイトルが *title* で *parent* を親とする新しい :class:`Gtk.FileChooserDialog` を生成します。" - -#: ../source/dialogs.txt:246 -# c0349b70d8254b68b7f269000ded368e -msgid "*action* can be one of the following:" -msgstr "*action* には次のいずれかの値を指定できます:" - -#: ../source/dialogs.txt:248 -# ffed0b072e784ef2aa26331760796bff -msgid ":attr:`Gtk.FileChooserAction.OPEN`: The file chooser will only let the user pick an existing file." -msgstr ":attr:`Gtk.FileChooserAction.OPEN`: ユーザは既存のファイルを一つだけ選択できる" - -#: ../source/dialogs.txt:250 -# 1844e05abe9449518c4d27d2f7c86bc0 -msgid ":attr:`Gtk.FileChooserAction.SAVE`: The file chooser will let the user pick an existing file, or type in a new filename." -msgstr ":attr:`Gtk.FileChooserAction.SAVE`: ユーザは既存のファイルを一つだけ選択するか、新しいファイル名を入力できる" - -#: ../source/dialogs.txt:252 -# 1b937b60cdfd48dc8826ba3b4c2fc60c -msgid ":attr:`Gtk.FileChooserAction.SELECT_FOLDER`: The file chooser will let the user pick an existing folder." -msgstr ":attr:`Gtk.FileChooserAction.SELECT_FOLDER`: ユーザは既存フォルダを一つだけ選択できる" - -#: ../source/dialogs.txt:254 -# b6c78fb00146446f9d375a0e2042fe05 -msgid ":attr:`Gtk.FileChooserAction.CREATE_FOLDER`: The file chooser will let the user name an existing or new folder." -msgstr ":attr:`Gtk.FileChooserAction.CREATE_FOLDER`: ユーザは既存のフォルダまたは新しいフォルダに名前を付けることができる" - -#: ../source/dialogs.txt:257 -# 17b4b69786c24588846f8effca830cad -msgid "The *buttons* argument has the same format as for the :class:`Gtk.Dialog` constructor." -msgstr "引数の *buttons* は :class:`Gtk.Dialog` クラスのコンストラクタと同じ書式で指定します。" - -#: ../source/dialogs.txt:264 -# da6b76a03922413299b7f7a666ebafe6 -msgid "Sets the current name in the file selector, as if entered by the user." -msgstr "あたかもユーザが入力したかのように、ファイル選択ダイアログで現在の名前をセットします。" - -#: ../source/dialogs.txt:268 -# 8dd997d8a849471e93fb33b922491a72 -msgid "Sets *filename* as the current filename for the file chooser, by changing to the file's parent folder and actually selecting the file in list; all other files will be unselected. If the chooser is in :attr:`Gtk.FileChooserAction.SAVE` mode, the file's base name will also appear in the dialog's file name entry." -msgstr "ファイル選択ダイアログでファイルの親フォルダに変更することで現在のファイル名を *filename* にし、ファイルの一覧で選択状態にします (すなわち、他のファイルを全て選択解除します)。もしファイル選択ダイアログのモードが :attr:`Gtk.FileChooserAction.SAVE` の場合は、ファイルの基底名もダイアログでファイル名を入力するエントリ・フィールドに表示されます。" - -#: ../source/dialogs.txt:274 -# 5bbd5db3ba5449148ca574b5802fe0ac -msgid "Note that the file must exist, or nothing will be done except for the directory change." -msgstr "ここで選択するファイルは必ず存在しているか、またはフォルダの変更以外に何も操作しないようにして下さい。" - -#: ../source/dialogs.txt:279 -# c80649e6ad7343efbd0f9a61f0cba313 -msgid "Sets whether multiple files can be selected. This is only relevant if the mode is :attr:`Gtk.FileChooserAction.OPEN` or :attr:`Gtk.FileChooserAction.SELECT_FOLDER`." -msgstr "複数のファイルを選択できるかどうかを指定します。これは、ファイル選択ダイアログのモードが :attr:`Gtk.FileChooserAction.OPEN` または :attr:`Gtk.FileChooserAction.SELECT_FOLDER` の時にだけ有効になります。" - -#: ../source/dialogs.txt:285 -# e56ffd09594f4bd8ab1fc62245ea2313 -msgid "Sets whether only local files can be selected." -msgstr "ローカルのディスクにあるファイルだけ選択できるかどうかを指定します。" - -#: ../source/dialogs.txt:289 -# d9e2e94c12da4d0090f5072670d5935f -msgid "Sets whether to display hidden files and folders." -msgstr "隠しファイルやフォルダを表示するかどうかを指定します。" - -#: ../source/dialogs.txt:293 -# b81663c3b89943bdb5ed78ce344706cc -msgid "Sets whether to confirm overwriting in save mode." -msgstr "ファイルを保存する際に上書きを確認するかどうかを指定します。" - -#: ../source/dialogs.txt:297 -# bb461b4337784e4fa08125b4b02a786c -msgid "Returns the filename for the currently selected file in the file selector. If multiple files are selected, use :meth:`get_filenames` instead." -msgstr "ファイル選択ダイアログの中で現在選択中のファイルの名前を返します。もし複数のファイルを選択しているのであれば代わりに :meth:`Gtk.FileChooser.get_filenames` メソッドを使用して下さい。" - -#: ../source/dialogs.txt:302 -# e2da3e5f0fe34c8788676a0ed9a53fd1 -msgid "Returns a list of all the selected files and subfolders in the current folder. The returned names are full absolute paths. If files in the current folder cannot be represented as local filenames they will be ignored. Use :meth:`get_uris` instead." -msgstr "現在のフォルダの中で選択している全てのファイルやサブフォルダを要素とするリストを返します。ここで返される名前は完全な絶対パス名です。現在のフォルダにあるファイルがローカルのファイル名として表現できない場合は無視されます。そのような場合は代わりに :meth:`Gtk.FileChooser.get_uris` メソッドを使用して下さい。" - -#: ../source/dialogs.txt:309 -# cfd212e6826b4bb59518ad3455ee7a39 -msgid "Returns the URI for the currently selected file in the file selector. If multiple files are selected, use :meth:`get_uris` instead." -msgstr "ファイル選択ダイアログの中で現在選択中のファイルの URI を返します。もし複数のファイルを選択しているのであれば代わりに :meth:`Gtk.FileChooser.get_uris` メソッドを使用して下さい。" - -#: ../source/dialogs.txt:314 -# 949a42d5e77a478ca0a1f65f3769f2a6 -msgid "Returns a list of all the selected files and subfolders in the current folder. The returned names are full absolute URIs." -msgstr "現在のフォルダの中で選択している全てのファイルやサブフォルダの URI (完全な絶対パスからなる URI) を要素とするリストを返します。" - -#: ../source/dialogs.txt:319 -# 92933c27e4c042ee81e3d81acbf1522e -msgid "Adds the :class:`Gtk.FileFilter` instance *filter* to the list of filters that the user can choose from. When a filter is selected, only files that are passed by that filter are displayed." -msgstr ":class:`Gtk.FileFilter` クラスのインスタンスである *filter* をファイル選択ダイアログでユーザがファイルの選択で利用するフィルタのリストに追加します。そのフィルタを選択すると、そのフィルタにマッチするファイルだけが一覧の中に表示されます。" - -#: ../source/dialogs.txt:327 -# 9178523999ee4c1a898d0e1a3900edd8 -msgid "Sets the human-readable name of the filter; this is the string that will be displayed in the file selector user interface if there is a selectable list of filters." -msgstr "フィルタに対して可読な名前を指定します。すなわち、これは選択可能なフィルタのリストがファイル選択ダイアログの付いている場合、そのリストに表示される文字列です。" - -#: ../source/dialogs.txt:333 -# 123e24c7c4d34b5790eb078fd3a2442f -msgid "Adds a rule allowing a given mime type to filter." -msgstr "フィルタに指定できる MIME 型のルールを追加します。" - -#: ../source/dialogs.txt:337 -# bd20bb4f796a418cb2cdc71961d6f53a -msgid "Adds a rule allowing a shell style glob to a filter." -msgstr "フィルタに Shell スタイルの `Glob `_ のルールを追加します。" - diff --git a/translations/ja/drag_and_drop.po b/translations/ja/drag_and_drop.po deleted file mode 100644 index 1ecece9..0000000 --- a/translations/ja/drag_and_drop.po +++ /dev/null @@ -1,304 +0,0 @@ -# Japanese translation for drag_and_drop.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-08 08:12\n" -"PO-Revision-Date: 2012-12-16 16:36+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/drag_and_drop.txt:2 -# e52c75849aa5433195b5fa7158ec04a1 -msgid "Drag and Drop" -msgstr "ドラッグ&ドロップ" - -#: ../source/drag_and_drop.txt:4 -# 8e4059c6a281467c9f38526514301891 -msgid "Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is required for the following examples to work." -msgstr "PyGObject < 3.0.3 には正しく機能しないドラッグ&ドロップの実装が含まれています。そのためここで紹介する例を動作させるには PyGObject >= 3.0.3 が必要になります。" - -#: ../source/drag_and_drop.txt:8 -# 730f6952b91e46b18ffab522fdeb95bd -msgid "Setting up drag and drop between widgets consists of selecting a drag source (the widget which the user starts the drag from) with the :meth:`Gtk.Widget.drag_source_set` method, selecting a drag destination (the widget which the user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then handling the relevant signals on both widgets." -msgstr ":meth:`Gtk.Widget.drag_source_set` メソッドを使って選択した ``ドラッグ元`` (ユーザがドラッグを開始するウィジェット) と, :meth:`Gtk.Widget.drag_dest_set` メソッドを使って選択した ``ドラッグ先`` (ユーザがドロップする先のウィジェット) のペアの間でドラッグ&ドロップを設定し、双方のウィジェットで適切なシグナルを処理します。" - -#: ../source/drag_and_drop.txt:14 -# 1e5fff83838e430d9469614c195c075b -msgid "Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget.drag_dest_set` some specialised widgets require the use of specific functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." -msgstr "(:class:`Gtk.TreeView` や :class:`Gtk.IconView` といった) 特別なウィジェットの場合は :meth:`Gtk.Widget.drag_source_set` と :meth:`Gtk.Widget.drag_dest_set` といったメソッドではなく、特定のメソッド必要になってきます。" - -#: ../source/drag_and_drop.txt:18 -# 38fac742837a4f468244dcb1fd24728b -msgid "A basic drag and drop only requires the source to connect to the \"drag-data-get\" signal and the destination to connect to the \"drag-data-received\" signal. More complex things such as specific drop areas and custom drag icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." -msgstr "基本的なドラッグ&ドロップ処理ならばドラッグ元を \"drag-data-get\" シグナルに接続し、ドラッグ先を \"drag-data-received\" シグナルに接続するだけです。そうではなくもっと複雑なこと、例えばドロップする領域を指定したり独自にドラッグ用アイコンを指定するような場合は :ref:`その他のシグナル ` に接続し、あらかじめ指定しておいた :class:`Gdk.DragContext` 型のオブジェクトを利用して処理する必要があります。" - -#: ../source/drag_and_drop.txt:24 -# afcdb0f676874d308c730d32f5777c80 -msgid "In order to transfer data between the source and destination, you must interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." -msgstr "ドラッグ元からドラッグ先へデータを転送するために, :class:`Gtk.SelectionData` 型の変数を :class:`Gtk.SelectionData` の getter/setter を使って :ref:`\"drag-data-get\" ` と :ref:`\"drag-data-received\" ` のシグナルに引き渡す必要があります。" - -#: ../source/drag_and_drop.txt:30 -# 70575951f30349a682625ca6039b9523 -msgid "Target Entries" -msgstr "ターゲット・エントリ" - -#: ../source/drag_and_drop.txt:31 -# ba3c81dec8604a3493d4554f187e42bf -msgid "To allow the drag source and destination to know what data they are receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of data that will be sent by the drag source and received by the drag destination." -msgstr "ドラッグ元とドラッグ先でどんな種類のデータを送ったり受け取ることができるかを知るには :class:`Gtk.TargetEntry ` を要素とする共通リストが必要になります。この :class:`Gtk.TargetEntry` にはドラッグ元が送信し、ドラッグ先で受け取るデータの一部が記載されています。" - -#: ../source/drag_and_drop.txt:36 -# 9b3bf49dc2ab4431a046fb4c9924d7de -msgid "There are two ways of adding :class:`Gtk.TargetEntry's ` to a source and destination. If the drag and drop is simple and each target entry is of a different type, you can use the group of methods :meth:`mentioned here `." -msgstr "複数の :class:`Gtk.TargetEntry ` をドラッグ元とドラッグ先に追加する方法は二つあります。もし簡単なドラッグ&ドロップとしてターゲット・エントリがそれぞれ異なる種類であるならば, :meth:`rag_source_add_text_targets ` 系のメソッドを利用できます。" - -#: ../source/drag_and_drop.txt:41 -# 258821ad12374d799cad0409779def1c -msgid "If you require more than one type of data or wish to do more complex things with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." -msgstr "もし二種類以上のデータをやりとりしたり、データを使ってもっと複雑なことをしたいのであれば :meth:`Gtk.TargetEntry.new` メソッドを使って :class:`Gtk.TargetEntry ` をいくつか生成する必要があります。" - -#: ../source/drag_and_drop.txt:46 -# 188fc9c0906849938041f9abf171a66c -msgid "Drag and Drop Methods and Objects" -msgstr "ドラッグ&ドロップのメソッドとオブジェクト" - -#: ../source/drag_and_drop.txt:51 -# 303f9faa49104fd7a3cf89c63c0988c6 -msgid "Sets the widget to be a drag source." -msgstr "このウィジェットをドラッグ元にします。" - -#: ../source/drag_and_drop.txt:53 -# 277ab51c45f24b2cba62ff8f137351c1 -msgid "*start_button_mask* are a combination of :attr:`Gdk.ModifierType` masks which sets which buttons must be pressed for a drag to occur. *targets* is a list of :class:`Gtk.TargetEntry's ` which describe the data to be passed between source and destination. *actions* are a combination :attr:`Gdk.DragAction` masks to show possible drag actions." -msgstr "*start_button_mask* には :attr:`Gdk.ModifierType` 型のマスク (ドラッグを開始する際に押下するのボタン) をいくつか組み合わせて指定します。 *targets* には :class:`Gtk.TargetEntry ` (ドラッグ元とドラッグ先との間で転送されるデータの種類を記述したもの) を要素とするリストを指定します。 *actions* には :attr:`Gdk.DragAction` 型のマスク (ドラッグで実施可能なアクションの種類) を組み合わせて指定します。" - -#: ../source/drag_and_drop.txt:62 -# ad1320052540486aac5f0bdcd32b7835 -msgid "Sets the widget to be a drag destination." -msgstr "このウィジェットをドラッグ先にします。" - -#: ../source/drag_and_drop.txt:64 -# ccb2f645a6734159a574a81c6a6f04ca -msgid "*flags* are a combination of :attr:`Gtk.DestDefaults` masks which configures the processes which occur on a drag site. *targets* is a list of :class:`Gtk.TargetEntry's ` which describe the data to be passed between source and destination. *actions* are a combination :attr:`Gdk.DragAction` masks to show possible drag actions." -msgstr "" -"*flags* には :attr:`Gtk.DestDefaults` 型のマスク (ドラッグ先で処理するアクション) をいくつか組み合わせて指定します。 *targets* には\n" -":class:`Gtk.TargetEntry ` (ドラッグ元とドラッグ先との間で転送されるデータの種類を記述したもの) を要素とするリストを指定します。 *actions* には :attr:`Gdk.DragAction` 型のマスク (ドラッグ先で実施可能なアクション) をいくつか組み合わせて指定します。" - -#: ../source/drag_and_drop.txt:74 -# ceeb95893c524bcd9ae8a5648f363448 -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a piece of text." -msgstr ":class:`Gtk.TargetEntry` を文字列を含むドラッグ元/先へ一つ追加します。" - -#: ../source/drag_and_drop.txt:80 -# a9cdd6075e384d739b1eb16a3b87990a -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a :class:`GdkPixbuf.Pixbuf`." -msgstr ":class:`Gtk.TargetEntry` を :class:`GdkPixbuf.Pixbuf` を持つドラッグ元/先へ一つ追加します。" - -#: ../source/drag_and_drop.txt:86 -# a8109ca9869b4cc4b795af8b2d91b567 -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a list of URIs." -msgstr ":class:`Gtk.TargetEntry` を URI を要素とするリストを持つドラッグ元/先へ一つ追加します。" - -#: ../source/drag_and_drop.txt:93 -# fbcfa422c049453c8c04153a6351cf8a -msgid "Creates a new target entry." -msgstr "新しいターゲット・エントリを生成します。" - -#: ../source/drag_and_drop.txt:95 -# 7daf72f11df84f63958cdc50b53c0149 -msgid "*target* is a string describing the type of data the target entry describes." -msgstr "*target* にはターゲット・エントリに記載するデータの種類 (文字列) を指定します。" - -#: ../source/drag_and_drop.txt:97 -# e1f65e755cde4b9ba39a8ff985d9c9c4 -msgid "*flags* controls under which conditions will the data be transferred in a drag and drop and is a combination of the :attr:`Gtk.TargetFlags` values:" -msgstr "*flags* はドラッグ&ドロップでデータを転送する条件を表し、次の :attr:`Gtk.TargetFlags` 型の値を組み合わせて指定します:" - -#: ../source/drag_and_drop.txt:100 -# daf2ff4c129d40a2bf1b27cdc4145b6e -msgid ":attr:`Gtk.TargetFlags.SAME_APP` - Only transferred in the same application" -msgstr ":attr:`Gtk.TargetFlags.SAME_APP` - 同じアプリケーションの中でのみ転送する" - -#: ../source/drag_and_drop.txt:101 -# c8608bfcad274eabaa9730dba24e219a -msgid ":attr:`Gtk.TargetFlags.SAME_WIDGET` - Only transferred within the same widget" -msgstr ":attr:`Gtk.TargetFlags.SAME_WIDGET` - 同じウィジェットの中でのみ転送する" - -#: ../source/drag_and_drop.txt:102 -# 9f6e62745615411ebeb8bd75a1e3f455 -msgid ":attr:`Gtk.TargetFlags.OTHER_APP` - Only transferred in a different application" -msgstr ":attr:`Gtk.TargetFlags.OTHER_APP` - 異なるアプリケーションの間でのみ転送する" - -#: ../source/drag_and_drop.txt:103 -# de78d435a33047c1a39ef899bc5df84c -msgid ":attr:`Gtk.TargetFlags.OTHER_WIDGET` - Only transferred within a different widget" -msgstr ":attr:`Gtk.TargetFlags.OTHER_WIDGET` - 異なるウィジェットの間でのみ転送する" - -#: ../source/drag_and_drop.txt:105 -# de729c46c9e048a586110e2605567bcf -msgid "*info* is an ID which the application can use to determine between different pieces of data contained in a drag and drop operation." -msgstr "*info* は、ドラッグ&ドロップの操作に含まれているデータの種類を確定する際にアプリケーションが利用できる識別子です。" - -#: ../source/drag_and_drop.txt:112 -# 88e10bedb97c4c1d8263b1c794cbd746 -msgid "Returns the contents of the text contained in selection data" -msgstr "``セレクション`` の中に含まれるデータから文字列を返します。" - -#: ../source/drag_and_drop.txt:116 -# 0a6a1b56f1574d3f96681608f959e01a -msgid "Sets the contents of the text contained in selection data to *text*" -msgstr "``セレクション`` の中に含めるデータに *text* を格納します。" - -#: ../source/drag_and_drop.txt:120 -# 6cde736dd7de4d5796323c7f02e817a8 -msgid "Returns the pixbuf contained in selection data" -msgstr "``セレクション`` の中に含まれるデータから Pixbuf を返します。" - -#: ../source/drag_and_drop.txt:124 -# 1d732eb2d13b4dd09288eda176f372c9 -msgid "Sets the pixbuf contained in selection data to *pixbuf*" -msgstr "``セレクション`` の中に含めるデータに *pixbuf* を格納します。" - -#: ../source/drag_and_drop.txt:129 -# 00295244c86d47dc9e178e774b5fe7f3 -msgid "Drag Source Signals" -msgstr "ドラッグ元のシグナル" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# d344c48fec3b4dad851a0f29fcda6eea -# 7e210b1d7a654e6da8788518585a0d7e -msgid "Name" -msgstr "シグナルの名前" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# 4a6094bad8fc4600bff4012168953ee5 -# 67c32bafef2047e6a6d84c1e5d9af41c -msgid "When it is emitted" -msgstr "発行されるタイミング" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# 7479867a4d5d4fc3af8554a04c4377df -# 362beeeff9084aa382803be9a88aecff -msgid "Common Purpose" -msgstr "主な目的" - -#: ../source/drag_and_drop.txt:133 -# a470107f17734ffbb1712d2b16933f69 -msgid "drag-begin" -msgstr "drag-begin" - -#: ../source/drag_and_drop.txt:133 -# 4c7cdc204f0944c0af4ce66511cea19f -msgid "User starts a drag" -msgstr "ユーザがドラッグを開始した時" - -#: ../source/drag_and_drop.txt:133 -# 7d70582b6bac480cacae906b14eb7269 -msgid "Set-up drag icon" -msgstr "ドラッグ中のアイコンをセットする" - -#: ../source/drag_and_drop.txt:135 -# a8c88e71355846b0a0b9371bf05067e0 -msgid "drag-data-get" -msgstr "drag-data-get" - -#: ../source/drag_and_drop.txt:135 -# 01af826196a3419398c1440614e622b7 -msgid "When drag data is requested by the destination" -msgstr "ドラッグ先からデータの要求があった時" - -#: ../source/drag_and_drop.txt:135 -#: ../source/drag_and_drop.txt:151 -# 60fa4001e5084b7b93a612fac00d3881 -# b793053772eb4d72827091f76eb39165 -msgid "Transfer drag data from source to destination" -msgstr "ドラッグ元からドラッグ先へデータを転送する" - -#: ../source/drag_and_drop.txt:137 -# 27251ae678824cb5aeb5d571f2d600e2 -msgid "drag-data-delete" -msgstr "drag-data-delete" - -#: ../source/drag_and_drop.txt:137 -# 5490f1115bee4b7c88ac32e99af4c7f6 -msgid "When a drag with the action Gdk.DragAction.MOVE is completed" -msgstr "Gdk.DragAction.MOVE のアクションを持つドラッグが完了した時" - -#: ../source/drag_and_drop.txt:137 -# 636afa0179af402aac748ce0c77156e6 -msgid "Delete data from the source to complete the 'move'" -msgstr "ドラッグ元のデータを削除して「移動」を完了する" - -#: ../source/drag_and_drop.txt:139 -# 09de934d1f0a4b0d8756bc4dec46a300 -msgid "drag-data-end" -msgstr "drag-data-end" - -#: ../source/drag_and_drop.txt:139 -# acac8e51708a4e73aa22df6acbf04fa9 -msgid "When the drag is complete" -msgstr "ドラッグが完了した時" - -#: ../source/drag_and_drop.txt:139 -# e6458f6081224e29966e37289c896bd2 -msgid "Undo anything done in drag-begin" -msgstr "drag-begin で実施した状態に戻す" - -#: ../source/drag_and_drop.txt:143 -# 790bb27b8f5b4549bf5f27dd34404617 -msgid "Drag Destination Signals" -msgstr "ドラッグ先のシグナル" - -#: ../source/drag_and_drop.txt:147 -# 2a9657e0643e4e6a8893a462afd6330d -msgid "drag-motion" -msgstr "drag-motion" - -#: ../source/drag_and_drop.txt:147 -# 1a03fbb8e6de4c62b5841a5a06b4aa0d -msgid "Drag icon moves over a drop area" -msgstr "ドラッグ中のアイコンがドロップ領域の上に移動した時" - -#: ../source/drag_and_drop.txt:147 -#: ../source/drag_and_drop.txt:149 -# 4681010393294453acba8964997a244d -# 45b992f96c4a479094893430a1d6f948 -msgid "Allow only certain areas to be dropped onto" -msgstr "決められた領域だけドロップできる" - -#: ../source/drag_and_drop.txt:149 -# c7dacb98fa9d41d0b16609e03a32f4e9 -msgid "drag-drop" -msgstr "drag-drop" - -#: ../source/drag_and_drop.txt:149 -# b56649e376874b37b51a0be57011d481 -msgid "Icon is dropped onto a drag area" -msgstr "アイコンがドロップ領域の上でドロップされた時" - -#: ../source/drag_and_drop.txt:151 -# a3e6a72948284fd3a2cafdaf62fca75b -msgid "drag-data-received" -msgstr "drag-data-received" - -#: ../source/drag_and_drop.txt:151 -# bd71e5db15064669bd7193eedb43c865 -msgid "When drag data is received by the destination" -msgstr "ドラッグ先がデータを受け取った時" - -#: ../source/drag_and_drop.txt:155 -# 202a33cfa4a94649a8ce3022820241f1 -msgid "Example" -msgstr "例" - diff --git a/translations/ja/entry.po b/translations/ja/entry.po deleted file mode 100644 index a66a1cb..0000000 --- a/translations/ja/entry.po +++ /dev/null @@ -1,127 +0,0 @@ -# Japanese translation for entry.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 08:47+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/entry.txt:2 -# 11237d7502d9473aaf161b36f4e8b15d -msgid "Entry" -msgstr "エントリ" - -#: ../source/entry.txt:4 -# 18088fe1daf44320b483763d533e00b1 -msgid "Entry widgets allow the user to enter text. You can change the contents with the :meth:`Gtk.Entry.set_text` method, and read the current contents with the :meth:`Gtk.Entry.get_text` method. You can also limit the number of characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." -msgstr "エントリ・ウィジェットを使うと、ユーザは文字列を入力できるようになります。 :meth:`Gtk.Entry.set_text` メソッドを使ってエントリの中にあるデータを変更したり、 :meth:`Gtk.Entry.get_text` メソッドを使って現在のデータを取得できます。さらに、 :meth:`Gtk.Entry.set_max_length` メソッドを使ってエントリに入力できる文字数を制限することも可能です。" - -#: ../source/entry.txt:9 -# b8415cbded904689858ca9238e6839f9 -msgid "Occasionally you might want to make an Entry widget read-only. This can be done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." -msgstr "たまにエントリ・ウィジェットを表示専用にしたいと考える時があるかもしれません。このような時は :meth:`Gtk.Entry.set_editable` メソッドの引数を ``FALSE`` にして呼び出せば実現できます。" - -#: ../source/entry.txt:12 -# 0b0eb9eece594eeda5e4c058d23e0cdd -msgid "Entry widgets can also be used to retrieve passwords from the user. It is common practice to hide the characters typed into the entry to prevent revealing the password to a third party. Calling :meth:`Gtk.Entry.set_visibility` with ``False`` will cause the text to be hidden." -msgstr "さらにユーザからパスワードを受け取るような場面でもエントリ・ウィジェットを利用できます。入力した文字を表示しないようにして、第三者にパスワードが露見しないようにする一般的な手続きを採用しています。 :meth:`Gtk.Entry.set_visibility` メソッドの引数に ``FALSE`` を渡すとエントリの中にある文字列が表示されなくなります。" - -#: ../source/entry.txt:17 -# 056bf2e096cd4be59766cdfb8d945cef -msgid ":class:`Gtk.Entry` has the ability to display progress or activity information behind the text. This is similar to :class:`Gtk.ProgressBar` widget and is commonly found in web browsers to indicate how much of a page download has been completed. To make an entry display such information, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry.set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." -msgstr ":class:`Gtk.Entry` には、入力したデータの背後に処理の進捗や実行状態といった情報を表示する機能があります。この機能は :class:`Gtk.ProgressBar` ウィジェットに似ており、一般的な例としてよくあるのがウェブ・ブラウザの場所バー (エントリ・ウィジェット) の中に入力した URL のコンテンツの読み込み具合を提示するというものがあります。そのような情報をエントリの背後に表示する際は :meth:`Gtk.Entry.set_progress_fraction` や :meth:`Gtk.Entry.set_progress_pulse_step` 、あるいは :meth:`Gtk.Entry.progress_pulse` メソッドを使って下さい。" - -#: ../source/entry.txt:24 -# 29660a820c664a6cb1dc21f95eb5490b -msgid "Additionally, an Entry can show icons at either side of the entry. These icons can be activatable by clicking, can be set up as drag source and can have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_stock` or one of the various other functions that set an icon from an icon name, a pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup." -msgstr "加えて、エントリ・ウィジェットの左右どちらかにアイコンを表示することもできます。このアイコンをクリックしてアクティブにしたり、画像などをドラッグしてアイコンをセットしたり、アイコンにツールチップを表示することが可能です。アイコンを追加する際は :meth:`Gtk.Entry.set_icon_from_stock` か、それに類するメソッドのいずれかを使い、アイコン名や画像データ、あるいはアイコン・テーマからアイコンを指定して下さい。アイコンにツールチップを表示する際は :meth:`Gtk.Entry.set_icon_tooltip_text` か、マークアップに対応したメソッドを使用して下さい。" - -#: ../source/entry.txt:32 -# 5bfb07af4ba6454f83a6485d8ee8c59e -msgid "Entry Objects" -msgstr "エントリのオブジェクト" - -#: ../source/entry.txt:38 -# 92679265382742509831d87136f08214 -msgid "Retrieves the contents of the entry widget." -msgstr "エントリ・ウィジェットの中にあるコンテンツを取得します。" - -#: ../source/entry.txt:42 -# 0245b53c5ee84c86aec2f7ff6d98a4f5 -msgid "Sets the text in the widget to the given value, replacing the current contents." -msgstr "エントリ・ウィジェットの新しいコンテンツとして *text* をセットします。今までのコンテンツは上書きされます。" - -#: ../source/entry.txt:46 -# 5b14556959ab4ff6bb8b4e756f2472cc -msgid "Sets whether the contents of the entry are visible or not. When *visible* is set to ``False``, characters are displayed as the invisible char, and will also appear that way when the text in the entry widget is copied elsewhere." -msgstr "エントリ・ウィジェットのコンテンツが表示可能かどうかを指定します。 *visible* を ``False`` にすると、実際の文字の代わりに代替文字が表示されます。これはエントリの中にある文字列をコピーする時を表現する方法です。" - -#: ../source/entry.txt:52 -# 5efb68a781d042b1aabef43c797a3c43 -msgid "Sets the maximum allowed length of the contents of the widget. If the current contents are longer than the given length, then they will be truncated to fit." -msgstr "エントリ・ウィジェットの中に入力できる文字列の最大長を指定します。もし現在のコンテンツが、指定した *max* よりも長い場合は *max* に合わせて縮められます。" - -#: ../source/entry.txt:57 -# 0c5f607c4125473b8c53b2424681ce01 -msgid "Determines if the user can edit the text in the editable widget or not. If *is_editable* is ``True``, the user is allowed to edit the text in the widget." -msgstr "エントリ・ウィジェットの中にあるコンテンツが編集可能かどうかを指定します。 *is_editable* を ``True`` にすると、ユーザはエントリ・ウィジェットのコンテンツを編集できるようになります。" - -#: ../source/entry.txt:62 -# 2be822e16f7146f1b72326bfc18b9fdb -msgid "Causes the entry's progress indicator to \"fill in\" the given fraction of the bar. The fraction should be between 0.0 and 1.0, inclusive." -msgstr "エントリ・ウィジェットの背後に表示するプログレスバーの進捗率を *fraction* にします (プログレスバーがエントリの中を全て塗りつぶした状態が進捗率 100% であるとします)。 *fraction* には 0.0 〜 1.0 の値を指定します。" - -#: ../source/entry.txt:67 -# ccc88bd5bffa46cbbdc635a227a6a1ba -msgid "Sets the fraction of total entry width to move the progress bouncing block for each call to :meth:`progress_pulse`." -msgstr ":meth:`progress_pulse` メソッドを呼び出す度に、エントリ・ウィジェットの中で行き来するブロックの幅を指定します。" - -#: ../source/entry.txt:72 -# 1c09140edc4f48cbb6e482d9e8c8137e -msgid "Indicates that some progress is made, but you don't know how much. Causes the entry's progress indicator to enter \"activity mode,\" where a block bounces back and forth. Each call to :meth:`progress_pulse` causes the block to move by a little bit (the amount of movement per pulse is determined by :meth:`set_progress_pulse_step`)." -msgstr "エントリ・ウィジェットに対して何か進捗があったことを通知します (但し、実際にどれくらいの進捗があったかは不明です)。これにより、エントリ・ウィジェットの中でブロックが前後に行ったり来たりします。このブロックの幅は :meth:`Gtk.Entry.set_progress_pulse_step` メソッドで指定します。" - -#: ../source/entry.txt:80 -# 800efcc15d774a8883f43bb19d99ac7a -msgid "Sets the icon shown in the entry at the specified position from a :ref:`stock item `. If *stock_id* is ``None``, no icon will be shown in the specified position." -msgstr "エントリ・ウィジェットの指定した場所に表示するアイコンを :ref:`stock item ` (ストック・アイテム) から取得します。 *stock_id* を ``None`` にすると、指定した場所にはアイコンは表示されません。" - -#: ../source/entry.txt:84 -# 7cf8b6ebbdee4554a8cdc82f31de7d44 -msgid "*icon_pos* specifies the side of the entry at which an icon is placed and can be one of" -msgstr "*icon_pos* には、どちら側にアイコンを表示するかを表す次のパラメータを指定します::" - -#: ../source/entry.txt:87 -# 1e1b15d0dc6948d586bb9d46c78f7187 -msgid ":attr:`Gtk.EntryIconPosition.PRIMARY`: At the beginning of the entry (depending on the text direction)." -msgstr ":attr:`Gtk.EntryIconPosition.PRIMARY`: エントリの先頭側 (文字を描画する向きに依存します)" - -#: ../source/entry.txt:89 -# 180530aaddd34864b079e95f1591076d -msgid ":attr:`Gtk.EntryIconPosition.SECONDARY`: At the end of the entry (depending on the text direction)." -msgstr ":attr:`Gtk.EntryIconPosition.SECONDARY`: エントリの末尾側 (文字を描画する向きに依存します)" - -#: ../source/entry.txt:94 -# 5b4977fa21e34444b8a4f55e050bd722 -msgid "Sets *tooltip* as the contents of the tooltip for the icon at the specified position. If *tooltip* is ``None``, an existing tooltip is removed." -msgstr "指定した位置にあるアイコンのツールチップとして *tooltip* をセットします。 *tooltip* を ``None`` にすると、既にセットしてあるツールチップが削除されます。" - -#: ../source/entry.txt:97 -# 2228884c5ac84c678376abfd5968eb44 -msgid "For allowed values for *icon_pos* see :meth:`set_icon_from_stock`." -msgstr "*icon_pos* で指定できる値については :meth:`Gtk.Entry.set_icon_from_stock` メソッドを参照して下さい。" - -#: ../source/entry.txt:100 -# 824894d1bb14404ba90f86422b479d2d -msgid "Example" -msgstr "例" - diff --git a/translations/ja/iconview.po b/translations/ja/iconview.po deleted file mode 100644 index b908e74..0000000 --- a/translations/ja/iconview.po +++ /dev/null @@ -1,609 +0,0 @@ -# Japanese translation for iconview.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-18 09:05\n" -"PO-Revision-Date: 2012-10-19 09:41+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Language-Team: Japanese \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -# 686464a72c314ece9b9e0cf314905f4b -#: ../source/iconview.txt:2 -msgid "IconView" -msgstr "アイコン・ビュー" - -# 133ffa7f007d499cbb37a4fc4e787ec6 -#: ../source/iconview.txt:3 -msgid "" -"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " -"grid view. It supports features such as drag and drop, multiple selections " -"and item reordering." -msgstr "" -":class:`Gtk.IconView` はアイコンの集合を格子状に配置して表示するウィジェット" -"です。このウィジェットはドラッグ&ドロップや複数同時選択、表示するアイテムの" -"並び替えといった機能をサポートしています。" - -# f268231b7b4c45d79cd811736f82ef06 -#: ../source/iconview.txt:5 -msgid "" -"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." -"ListStore` for its model. Instead of using :ref:`cell renderers " -"`, :class:`Gtk.IconView` requires that one of the columns in " -"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." -msgstr "" -":class:`Gtk.TreeView` と同様に、 :class:`Gtk.IconView` は自分のモデルとして :" -"class:`Gtk.ListStore` を使用します。そして :ref:`セル・レンダラ " -"` を使う代わりに, :class:`Gtk.IconView` は自分のモデルである :" -"class:`Gtk.ListStore` の中の桁で :class:`GdkPixbuf.Pixbuf` オブジェクトを含ん" -"だ桁 (``カラム``) を使います。" - -# f0967bfd34ef41d99c63cc30e064763c -#: ../source/iconview.txt:7 -msgid "" -":class:`Gtk.IconView` supports numerous selection modes to allow for either " -"selecting multiple icons at a time, restricting selections to just one item " -"or disallowing selecting items completely. To specify a selection mode, the :" -"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" -"`Gtk.SelectionMode` selection modes." -msgstr "" -":class:`Gtk.IconView` クラスはいろいろな選択モードをサポートしており、例えば" -"一度に複数のアイコンを選択したり、一個だけしか選択できないようにしたり、まっ" -"たく選択できないようにすることができます。選択モードを指定するには, :meth:" -"`Gtk.IconView.set_selection_mode` メソッドに :class:`Gtk.SelectionMode` が表" -"す選択モードのいずれかを指定して呼び出します。" - -# cfa123256a57480c94e18374d4420e05 -#: ../source/iconview.txt:10 -msgid "IconView objects" -msgstr "アイコン・ビューのオブジェクト" - -# 471c258b11104c279e5375d55057f77d -#: ../source/iconview.txt:16 -msgid "" -"Creates a new :class:`Gtk.IconView` widget using the specified *area* to " -"layout cells inside the icons." -msgstr "" -"指定した *area* にアイコンを格子状に並べる、新しい :class:`Gtk.IconView` を生" -"成します。" - -# ad26488a51b74f42a737ee172de0d664 -#: ../source/iconview.txt:20 -msgid "Creates a new :class:`Gtk.IconView` widget with the model *model*." -msgstr "*model* をモデルとする新しい :class:`Gtk.IconView` を生成します。" - -# d6b041583947409a9c29d5e5e2dfc302 -#: ../source/iconview.txt:24 -msgid "" -"Sets the model for a :class:`Gtk.IconView`. If the :class:`Gtk.IconView` " -"already has a model set, it will remove it before setting the new model. If " -"*model* is ``None``, then it will unset the old model." -msgstr "" -":class:`Gtk.IconView` のモデルを *model* にします。既に :class:`Gtk." -"IconView` がモデルを持っている場合、新しいモデルをセットする前に古いモデルを" -"削除します。 *model* を ``None`` にすると、セットされているモデルを解除しま" -"す。" - -# 51dade251e7b4102b0825410545eda5c -#: ../source/iconview.txt:28 -msgid "" -"Returns the model the :class:`Gtk.IconView` is based on. Returns ``None`` if " -"the model is unset." -msgstr "" -":class:`Gtk.IconView` が採用しているモデルを返します。モデルが解除されている" -"場合は ``None`` を返します。" - -# 134f377a05004132b3ee2c1fd12e9096 -#: ../source/iconview.txt:32 -msgid "" -"Sets the column with text to be *column*. The text column must be of type " -"``str``." -msgstr "" -"*column* を、文字列を持つ桁 (``カラム``) に指定します。この桁は ``str`` 型で" -"なければなりません。" - -# a4e87d8ea73046b986b6744e0ad9f47f -#: ../source/iconview.txt:36 -msgid "Return the column with text, or -1 if it's unset." -msgstr "" -"文字列を持つ桁 (``カラム``) を返します。あるいは、指定されていなければ -1 を" -"返します。" - -# 752d77be9a684a85a993b951303785ef -#: ../source/iconview.txt:40 -msgid "" -"Sets the column with markup information for the :class:`Gtk.IconView` to be " -"*column*. The markup column must be of type ``str``. If the markup column is " -"set to something, it overrides the text column set by :meth:" -"`set_text_column`." -msgstr "" -"*column* を :class:`Gtk.IconView` でマークアップ情報を持つ桁 (``カラム``) に" -"指定します。マークアップ情報を持つ桁は ``str`` 型でなければなりません。マーク" -"アップ情報を持つ桁に指定した場合は :meth:`Gtk.IconView.set_text_column` メ" -"ソッドで指定した情報を上書きします。" - -# 0805416cab2d49829c9e545847eedadf -#: ../source/iconview.txt:44 -msgid "Returns the column with markup text, or -1 if it's unset." -msgstr "" -"マークアップ情報を持つ桁 (``カラム``) を返します。あるいは、指定されていなけ" -"れば -1 を返します。" - -# 7f3856375fda47959ca074c81a3b9ddf -#: ../source/iconview.txt:48 -msgid "" -"Sets the column with pixbufs to be *column*. The pixbuf column must be of " -"type :class:`GdkPixbuf.Pixbuf`" -msgstr "" -"*column* を、Pixbuf 画像を持つ桁 (``カラム``) に指定します。Pixbuf 画像を格納" -"する桁は :class:`GdkPixbuf.Pixbuf` 型でなければなりません。" - -# 3f2ca665f73041d2ac0cfe843244eb53 -#: ../source/iconview.txt:52 -msgid "Returns the column with pixbufs, or -1 if it's unset." -msgstr "" -"Pixbuf 画像を持つ桁 (``カラム``) を返します。あるいは、指定されていなければ " -"-1 を返します。" - -# 40009229caec4a1483de021db73dee91 -#: ../source/iconview.txt:56 -msgid "" -"Finds the path at the point(*x*, *y*), relative to bin_window coordinates. " -"In contrast to :meth:`get_path_at_pos`, this method also obtains the cell at " -"the specified position. See :meth:`convert_widget_to_bin_window_coords` for " -"converting widget coordinates to bin_window coordinates." -msgstr "" -"bin_window 座標系の相対位置で (*x*, *y*) にあるアイテムのパスを返します。これ" -"は :meth:`get_path_at_pos` メソッドとは異なり、返り値には指定した位置にあるセ" -"ルの情報も含まれます。ウィジェットの座標を bin_window 系座標に変換する方法に" -"ついては :meth:`convert_widget_to_bin_window_coords` メソッドを参照して下さ" -"い。" - -# dc61b14f28084107ad8e6ec7cf31d289 -#: ../source/iconview.txt:60 -msgid "" -"Converts widget coordinates to coordinates for the bin_window, as expected " -"by e.g. :meth:`get_path_at_pos`" -msgstr "" -"ウィジェットの座標を bin_window の座標系に変換します。これは、例えば :meth:" -"`get_path_at_pos` メソッドで使用する座標です。" - -# 6a233e72969d45f3a2c74727328d9b27 -#: ../source/iconview.txt:64 -msgid "" -"Sets the current keyboard focus to be at *path*, and selects it. This is " -"useful when you want to focus the user's attention on a particular item. If " -"*cell* is not ``None``, then focus is given to the cell specified by it. " -"Additionally, if *start_editing* is True, then editing should be started in " -"the specified cell." -msgstr "" -"現在のキーボードのフォーカスを *path* の位置に移動して、それを選択状態にしま" -"す。このメソッドは、ユーザの注目を特定のアイテムに促したい時に便利です。もし " -"*cell* に ``None`` 以外を指定すると、そのセルが指す場所にキーボード・フォーカ" -"スが移動します。さらに *start_editing* を ``TRUE`` にすると、指定したセルの編" -"集が可能になります。" - -# f700a423ea434cfb9a2d1c0b78256c5f -#: ../source/iconview.txt:66 -msgid "" -"This function is often followed by :meth:`grab_focus` in order to give " -"keyboard focus to the widget. Please note that editing can only happen when " -"the widget is realized." -msgstr "" -"この関数はウィジェットにキーボード・フォーカスを与えるために :meth:" -"`grab_focus` の後に呼び出すのが普通です。この場合、ウィジェットをリアライズし" -"た後にのみ編集が可能になるので注意して下さい。 " - -# 1427c33abbc24c0b8b20b10e61c6ccd8 -#: ../source/iconview.txt:70 -msgid "" -"Returns the current cursor path and cell. If the cursor isn't currently set, " -"then path will be ``None``. If no cell currently has focus, then cell will " -"be ``None``." -msgstr "" -"現在のカーソル位置を表すパスとフォーカスが与えられているセルを返します。カー" -"ソルがセットされていない場合 *path* は ``None`` になります。セルにフォーカス" -"が与えられていない場合は ``None`` になります。 " - -# f44580d88010420bb757cd6269b31644 -#: ../source/iconview.txt:74 -msgid "" -"Calls a function for each selected icon. Note that the model or selection " -"cannot be modified from within this method." -msgstr "" -"選択されているアイコンのオブジェクトを引数にして、それぞれ *func* を呼び出し" -"ます。この *func* の中でアイコン・ビューが使用しているモデルや選択している範" -"囲を変更することはできないので注意して下さい。" - -# b3b69b82bf96422ea78eb20d4f62958a -#: ../source/iconview.txt:78 -msgid "Sets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`." -msgstr "" -"このアイコン・ビューの選択モードを :class:`Gtk.SelectionMode` にします。" - -# 89ba0b898224466ca3d96c6929f52e3f -#: ../source/iconview.txt:82 -msgid "Gets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`." -msgstr "" -"このアイコン・ビューの選択モードを :class:`Gtk.SelectionMode` 型で返します。" - -# 50706a04d4ab4fe0826a801fa3793f3e -#: ../source/iconview.txt:86 -msgid "" -"Sets the \"item-orientation\" property which determines whether the labels " -"are drawn beside the icons instead of below." -msgstr "" -"ラベルをアイコンの下ではなく横に描画するかどうかを決定する \"item-orientation" -"\" プロパティを指定します。 " - -# 7e534ebdac764b5c882a020da4922447 -#: ../source/iconview.txt:90 -msgid "" -"Returns the :class:`Gtk.Orientation` of the \"item-orientation\" property " -"which determines whether the labels are drawn beside the icons instead of " -"below." -msgstr "" -"ラベルをアイコンの下ではなく横に描画するかどうかを決定する \"item-orientation" -"\" プロパティの :class:`Gtk.Orientation` を返します。" - -# 7bbdf048b72a403297c43c2217dd877c -#: ../source/iconview.txt:94 -msgid "" -"Sets the \"columns\" property which determines in how many columns the icons " -"are arranged. If *columns* is -1, the number of columns will be chosen " -"automatically to fill the available area." -msgstr "" -"アイコンを格納できる桁 (``カラム``) の総数を決定する \"columns\" プロパティを" -"セットします。 *columns* を -1 にすると自動的に桁の総数を決定します (これは、" -"アイコンを格納できる桁のうち空いている桁の総数を計算します)。" - -# 523fbdafd69842bd8b9d1b3eca25adbd -#: ../source/iconview.txt:98 -msgid "Returns the value of the \"columns\" property." -msgstr "" -"このアイコン・ビューにセットされている \"columns\" プロパティの値を返します。" - -# 49bb8e86ea3f4bfc8df0ae637a0e8a70 -#: ../source/iconview.txt:102 -msgid "" -"Sets the \"item-width\" property which specifies the width to use for each " -"item. If it is set to -1, the icon view will automatically determine a " -"suitable item size." -msgstr "このアイコン・ビューに表示するアイテムの幅を表す \"item-width\" プロパティを指定します。この *item_width* を -1 にすると、アイコン・ビューが自動的に適切な幅を決定します。" - -# 07a5dc92ad8e49d5936a87843275bff7 -#: ../source/iconview.txt:106 -msgid "Returns the value of the \"item-width\" property." -msgstr "" -"このアイコン・ビューにセットされている \"item-width\" プロパティの値を返しま" -"す。" - -# 1d472d8da8184b5f8dc7afb0d7831eba -#: ../source/iconview.txt:110 -msgid "" -"Sets the \"spacing\" property which specifies the space which is inserted " -"between the cells (i.e. the icon and the text) of an item." -msgstr "" -"一個のアイテムにおいてアイコンとラベルの間に挿入する間隔を表す \"spacing\" プ" -"ロパティを指定します。" - -# 6b35e9cf2c1a4d2fa450d930420399d1 -#: ../source/iconview.txt:114 -msgid "" -"Sets the \"row-spacing\" property which specifies the space which is " -"inserted between the rows of the icon view." -msgstr "" -"このアイコン・ビューの行 (``ロー``) と行との間に挿入する間隔を表す \"row-" -"spacing\" プロパティを指定します。" - -# 1ec15a0e12084b749be664745fe164b6 -#: ../source/iconview.txt:118 -msgid "Returns the value of the \"row-spacing\" property." -msgstr "" -"このアイコン・ビューにセットされている \"row-spacing\" プロパティの値を返しま" -"す。" - -# 35a073f2fc934ecab9acc69763e1f5c9 -#: ../source/iconview.txt:122 -msgid "" -"Sets the \"column-spacing\" property which specifies the space which is " -"inserted between the columns of the icon view." -msgstr "" -"このアイコン・ビューの桁 (``カラム``) と桁の間に挿入する間隔を表す \"column-" -"spacing\" プロパティを指定します。" - -# 226960c6c74442b68ad22dde55118c88 -#: ../source/iconview.txt:126 -msgid "Returns the value of the \"column-spacing\" property." -msgstr "" -"このアイコン・ビューにセットされている \"column-spacing\" プロパティの値を返" -"します。" - -# 5128d02423e448758e2ccff56d9481cc -#: ../source/iconview.txt:130 -msgid "" -"Sets the \"margin\" property which specifies the space which is inserted at " -"the top, bottom, left and right of the icon view." -msgstr "" -"このアイコン・ビューの上下左右に挿入する間隔を表す \"margin\" プロパティを指" -"定します。" - -# 2e7214cdcf4443a9acc784c6972c48d5 -#: ../source/iconview.txt:134 -msgid "Returns the value of the \"margin\" property." -msgstr "" -"このアイコン・ビューにセットされている \"mergin\" プロパティの値を返します。" - -# 4705dc71055b4a119aa3da8b65d571ab -#: ../source/iconview.txt:138 -msgid "" -"Sets the \"item-padding\" property which specifies the padding around each " -"of the icon view's items." -msgstr "" -"このアイコン・ビューのアイテムの周囲に挿入する間隔を表す \"item-padding\" プ" -"ロパティを指定します。" - -# a1821697a5034dc88b3f251240c143c1 -#: ../source/iconview.txt:142 -msgid "Returns the value of the \"item-padding property." -msgstr "" -"このアイコン・ビューにセットされている \"item-padding\" プロパティの値を返し" -"ます。" - -# 383f41df563e442b9cf9a3954ed67d94 -#: ../source/iconview.txt:146 -msgid "Selects the row at *path*." -msgstr "*path* にある行 (``ロー``) を選択状態にします。" - -# 260edb885ef14269b94f3e127e2b045a -#: ../source/iconview.txt:150 -msgid "Unselects the row at *path*." -msgstr "*path* にある行 (``ロー``) の選択状態を解除します。" - -# 8bf22dda56734636a2f1cea5177dfa10 -#: ../source/iconview.txt:154 -msgid "" -"Returns ``True`` if the icon pointed to by *path* is currently selected. If " -"*path* does not point to a valid location, ``False`` is returned." -msgstr "" -"*path* で表されるアイコンが選択状態の場合は ``TRUE`` を返します。もし *path* " -"が妥当な場所を表していない場合はは ``FALSE`` を返します。" - -# b462a91c6c3d436d9c8f52c113ac5786 -#: ../source/iconview.txt:158 -msgid "" -"Creates a list of paths of all selected items. Additionally, if you are " -"planning on modifying the model after calling this function, you may want to " -"convert the returned list into a list of :class:`Gtk.TreeRowReference `." -msgstr "" -"このアイコン・ビューで現在選択されているアイテムのパスを要素とするリストを生" -"成します。さらに、このメソッドを呼び出した後にモデルを変更する予定があるなら" -"ば、返り値のリストを :class:`Gtk.TreeRowReference ` 型" -"のリストに変換する必要があります。" - -# dc0a77881eeb47999c0a9a62acbfb6da -#: ../source/iconview.txt:162 -msgid "" -"Selects all the icons. The :class:`Gtk.IconView` must has its selection mode " -"set to :attr:`Gtk.SelectionMode.MULTIPLE`" -msgstr "" -"このアイコン・ビューに表示されている全てのアイコンを選択状態にします。あらか" -"じめ :class:`Gtk.IconView` の選択モードを :attr:`Gtk.SelectionMode.MULTIPLE` " -"にしておいて下さい。" - -# 93fdaeea916f422bb137d24a89f7cb67 -#: ../source/iconview.txt:166 -msgid "Unselects all the icons." -msgstr "このアイコン・ビューに表示されている全てのアイコンの選択状態を解除します。" - -# d782c45adc8f441aac58bdd2365c540f -#: ../source/iconview.txt:170 -msgid "" -"Moves the alignments of :class:`Gtk.IconView` to the position specified by " -"*path*. *row_align* determines where the row is placed, the *col_align* " -"determines where *column* is placed. Both are expected to be between 0.0 and " -"1.0. 0.0 means left/top alignment, 1.0 means right/bottom alignment, 0.5 " -"means center." -msgstr "このアイコン・ビューに表示されている内容を *path* で指定した行までスクロールした位置にあるアイテムにします。スクロールして表示する行 (``ロー``) を *row_align* で指定し、表示する桁 (``カラム``) を *col_align* で指定します。 *row_align* と *col_align* は共に 0.0〜1.0 の範囲で指定するものとします。ここで 0.0 はビューの左上隅を、1.0 は右下隅を、0.5 は真ん中をそれぞれ表すものとします。" - -# 5a6fb0da8b774ab5a743d76025d90518 -#: ../source/iconview.txt:172 -msgid "" -"If *use_align* is ``False``, the the alignment arguments are ignored, and " -"the tree does the minimum amount of work to scroll the item onto the screen. " -"This means that the item will be scrolled to the edge closest to its current " -"position. If the item is currently visible on the screen, nothing is done." -msgstr "*use_align* を ``False`` にすると *row_align* と *col_align* の値を無視し、アイコン・ビューはセルを画面に表示するために最小限の移動量でスクロールされます。これは、セルの位置から最も近い端へスクロールされることを意味します。既にセルが画面上に表示されている場合は何も起こりません。 " - -# 9439598d1c0644219f992222247d5b11 -#: ../source/iconview.txt:174 -msgid "" -"This function only works if the model is set, and *path* is a valid row on " -"the model. If the model changes before the :class:`Gtk.IconView` is " -"realized, the centered path will be modified to reflect this change." -msgstr "このメソッドはモデルをセットし、 *path* がそのモデルの中にある妥当な行を指している場合にのみ正しく動作します。もしこの :class:`Gtk.IconView` をリアライズする前にモデルを変更した場合は、この変更を反映するために真ん中にあるセルが修正されます。" - -# 4c46bafc70fb4262bf13a54fc7ae473e -#: ../source/iconview.txt:178 -msgid "" -"Returns the first and last visible :class:`Gtk.TreePath`. Note that there " -"may be invisible paths in between." -msgstr "このアイコン・ビューで表示している :class:`Gtk.TreePath` の先頭と最後を返します。これらの間にあるパスは表示されていない場合があることに注意して下さい。" - -# ddd9de4e9f974dd789c1488fb52ad28c -#: ../source/iconview.txt:182 -msgid "" -"Sets the tip area of *tooltip* to be the area covered by the item at *path*. " -"See also :meth:`set_tooltip_column` for a simpler alternative. See also :" -"meth:`Gtk.Tooltip.set_tip_area`." -msgstr "*path* が指すアイテムに対して *tooltip* を表示する範囲をセットします。もっと簡単な代用方法を提供する :meth:`Gtk.IconView.set_tooltip_column` メソッドも参照してみて下さい。また :meth:`Gtk.Tooltip.set_tip_area` メソッドも参照してみて下さい。" - -# acb4b80afebd46d8a28f5e6cfe486b47 -#: ../source/iconview.txt:186 -msgid "" -"Sets the tip area of *tooltip* to the area which *cell* occupies in the item " -"pointed to by *path*. See also :meth:`Gtk.Tooltip.set_tip_area`" -msgstr "*path* が指すアイテムで *cell* が閉める領域に対して *tooltip* を表示する範囲をセットします。 :meth:`Gtk.Tooltip.set_tip_area` メソッドも参照してみて下さい。" - -# 5cda87e1f2c7471bbb0285f0dec02e9d -#: ../source/iconview.txt:188 -msgid "See also :meth:`set_tooltip_column` for a simpler alternative." -msgstr "さらに簡単に実現できる代替の :meth:`Gtk.IconView.set_tooltip_column` メソッドも参照してみて下さい。" - -# c81f8fe97b6a4fdd866c3108bb38af48 -#: ../source/iconview.txt:192 -msgid "" -"This function is supposed to be used in a \"query-tooltip\" signal handler " -"for :class:`Gtk.IconView`. The *x*, *y* and *keyboard_tip* values which are " -"received in the signal handler, should be passed to this method without " -"modification." -msgstr "このメソッドは, :class:`Gtk.IconView` のシグナルである \"query-tooltip\" のハンドラの中で使用されることを想定しています。シグナル・ハンドラの引数として受け取る *x* と *y* と *keyboard_tip* は何も変更せずにこのメソッドに引き渡すようにして下さい。" - -# 35712f30871e4bf68bd3e10491b3856e -#: ../source/iconview.txt:194 -msgid "" -"The return value indicates whether there is an icon view item at the given " -"coordinates (``True``) or not (``False``) for mouse tooltips. For keyboard " -"tooltips the item returned will be the cursor item. When ``True``, then all " -"of the items which have been returned will be set to point to that row and " -"corresponding model. *x* and *y* will always be converted to be relative to " -"the :class:`Gtk.IconView`'s bin_window if *keyboard_tooltip* is ``False``." -msgstr "このメソッドは、マウスが指す位置 (*x*, *y*) にツールチップを持つアイテムが存在する (``True``) かしないか (``False``) を返します。キーボードによるツールチップに対しては、現在カーソルがあるアイテムが対象になります。返り値が ``True`` の場合、返される全てのアイテムはアイコン・ビューが持つモデルの中で対応する行 (``ロー``) を指すことが保証されます。引数の *x* と *y* は, *keyboard_tooltip* が ``False`` の時は常に :class:`Gtk.IconView` の bin_window 座標系における相対座標に変換されます。" - -# c73f64e4b62d48c483158f9fac31defc -#: ../source/iconview.txt:198 -msgid "" -"If you only plan to have simple (text-only) tooltips on full items, you can " -"use this function to have :class:`Gtk.IconView` handle these automatically " -"for you. *column* should be set to the column in the :class:`Gtk.IconView`'s " -"model containing the tooltip texts, or -1 to disable this feature." -msgstr "アイコン・ビューにある全てのアイテムに対してシンプルな文字列ベースのツールチップだけを使用したいというのであれば、このメソッドを使って自動的にそのように処理してくれる :class:`Gtk.IconView` を持つことができます。 *column* には :class:`Gtk.IconView` のモデルの中で、文字列のツールチップを持っている桁 (``カラム``) を指定するか、-1 を指定してこの機能自体を無効にして下さい。" - -# 6c4ed9a3c7044c6691cfa20b1719b3f5 -#: ../source/iconview.txt:200 -msgid "" -"When enabled, \"has-tooltip\" will be set to ``True`` and :class:`Gtk." -"IconView` will connect a \"query-tooltip\" signal handler." -msgstr "この機能を有効にすると、\"has-tooltip\" というプロパティに ``True`` がセットされ, :class:`Gtk.IconView` が \"query-tooltip\" というシグナルのデフォルトのハンドラに接続されます。" - -# aba5dd7579a5439e8e59c71f3e191139 -#: ../source/iconview.txt:202 -msgid "" -"Note that the signal handler sets the text with :meth:`Gtk.Tooltip." -"set_markup`, so &, <, etc have to be escaped in the text." -msgstr "そのシグナル・ハンドラは :meth:`Gtk.Tooltip.set_markup` を使ってツールチップに表示する文字列をセットしているので、& や < といった文字をそのまま表示したいのであれば文字列の中でそれぞれエスケープして下さい。" - -# 44e469b6308d4021bca9adfbc87b1c8d -#: ../source/iconview.txt:206 -msgid "" -"Returns the column of :class:`Gtk.IconView`'s model which is being used for " -"displaying tooltips on :class:`Gtk.IconView`'s rows, or -1 if this is " -"disabled." -msgstr "この :class:`Gtk.IconView` のモデルの中で, :class:`Gtk.IconView`' の行 (``ロー``) でツールチップを表示する桁 (``カラム``) を返します。あるいはこの機能が無効ならば -1 を返します。" - -# da9984afb89d4215a7dfe9d52faa7abf -#: ../source/iconview.txt:210 -msgid "" -"Gets the row in which the item *path* is currently displayed. Row numbers " -"start at 0." -msgstr "現在表示されているアイテムのうち, *path* が指すアイテムがある行 (``ロー``) を返します。行数は 0 からカウントします。" - -# f22d3abfa3e84714a4a451fac0478ecb -#: ../source/iconview.txt:214 -msgid "" -"Gets the column in which the item *path* is currently displayed. Column " -"numbers start at 0." -msgstr "現在表示されているアイテムのうち, *path* が指すアイテムがある桁 (``カラム``) を返します。桁数は 0 からカウントします。" - -# 4a59a695302649dca633585aba8e6579 -#: ../source/iconview.txt:218 -msgid "" -"Turns :class:`Gtk.IconView` into a drag source for automatic DND. Calling " -"this method sets \"reorderable\" to ``False``." -msgstr "この :class:`Gtk.IconView` を自動ドラッグ&ドロップ処理のドラッグ元にします。さらに \"reorderable\" プロパティに ``False`` をセットします。" - -# f304a4124b694306bd505ceeecb4fd77 -#: ../source/iconview.txt:222 -msgid "" -"Turns :class:`Gtk.IconView` into a drop destination for automatic DND. " -"Calling this method sets \"reorderable\" to ``False``." -msgstr "この :class:`Gtk.IconView` を自動ドラッグ&ドロップ処理のドロップ先にします。さらに \"reorderable\" プロパティに ``False`` をセットします。" - -# 437d905ec4ed4faa8d0b9657fdbefbd2 -#: ../source/iconview.txt:226 -msgid "" -"Undoes the effect of :meth:`enable_model_drag_source`. Calling this method " -"sets \"reorderable\" to ``False``." -msgstr ":meth:`Gtk.IconView.enable_model_drag_source` メソッドの呼び出し効果を無効にします。さらに \"reorderable\" プロパティに ``False`` をセットします。" - -# 4c6b0576097a42489cc09d11183dadd0 -#: ../source/iconview.txt:230 -msgid "" -"Undoes the effect of :meth:`enable_model_drag_dest`. Calling this method " -"sets \"reorderable\" to ``False``." -msgstr ":meth:`Gtk.IconView.enable_model_drag_dest` メソッドの呼び出し効果を無効にします。さらに \"reorderable\" プロパティに ``False`` をセットします。" - -# cafad79c9f3f4b8187b7b9a2a05d9a38 -#: ../source/iconview.txt:234 -msgid "" -"This method is a convenience method to allow you to reorder models that " -"support the :class:`Gtk.TreeDragSource` and the :class:`Gtk.TreeDragDest` " -"interfaces. Both :class:`Gtk.TreeStore` and :class:`Gtk.ListStore` support " -"these. If *reorderable* is ``True``, then the user can reorder the model by " -"dragging and dropping rows. The developer can listen to these changes by " -"connecting the model's \"row_inserted\" and \"row_deleted\" signals. The " -"reordering is implemented by setting up the icon view as drag source and " -"destination. Therefore, drag and drop can not be used in a reorderable view " -"for any other purpose." -msgstr "このアイコン・ビューが使用するモデルを :class:`Gtk.TreeDragSource` と :class:`Gtk.TreeDragDest` 型のインタフェースをサポートし、その中にあるアイテムの並び替えを可能にします。 :class:`Gtk.TreeStore` と :class:`Gtk.ListStore` は共に、これらのインタフェースをサポートしています。 *reorderable* を ``True`` にすると、ユーザはドラッグ&ドロップすることで任意の行 (``ロー``) の順番を並び替えることができるようになります。アプリケーション側ではモデルの \"row-inserted\" や \"row-deleted\" といったシグナルに接続しておくと、並び替えの変化を捕捉できます。このアイコン・ビューをドラッグ元またはドロップ先に指定することで、並び替えの処理が実装されます。その場合、ドラッグ&ドロップの機能を他の目的のために使用することはできません。" - -# 5c6ff490ed6b42d0b773019c9817317f -#: ../source/iconview.txt:236 -msgid "" -"This function does not give you any degree of control over the order -- any " -"reordering is allowed. If more control is needed, you should probably handle " -"drag and drop manually." -msgstr "このメソッドは並び替えの制御の度合いを指定するものではありません -- どのような並び替えも可能です。さらなる制御が必要な場合は、ドラッグ&ドロップの処理を独自操作するような実装にする必要があるかもしれません。" - -# 26d00b8ca3d54356b8e720763154569e -#: ../source/iconview.txt:240 -msgid "" -"Retrieves whether the user can reorder the list via drag-and-drop. See :meth:" -"`set_reorderable`." -msgstr "このアイコン・ビューに対してユーザがドラッグ&ドロップを使って並び替えが可能かどうかを返します。 :meth:`Gtk.IconView.set_reorderable` メソッドも参照して下さい。" - -# 44171e8cfe404d848d8807ee22a1e343 -#: ../source/iconview.txt:244 -msgid "Sets the item that is highlighted for feedback." -msgstr "指定したアイテムをドラッグしていることをユーザに知らせるために強調表示の状態にします。" - -# 149e261ce0134bef9e690a18037e566e -#: ../source/iconview.txt:248 -msgid "Gets information about the item that is highlighted for feedback." -msgstr "強調表示の状態になっているアイテムの情報を取得します。" - -# 066065d520814d7f8143af32a9d1b3e9 -#: ../source/iconview.txt:252 -msgid "Determines the destination item for a given position." -msgstr "指定した位置 (*drag_x*, *drag_y*) がドロップ先になっているかどうかを返します。 " - -# 3d85590981f247a6bae3f7f4846331d8 -#: ../source/iconview.txt:256 -msgid "" -"Creates a :class:`Cairo.Surface` representation of the item at *path*. This " -"image is used for a drag icon." -msgstr "*path* が指すアイテムをアイコンで表現するための :class:`Cairo.Surface` を生成します。この画像はドラッグ中であることを表すためのアイコンとして使用します。" - -# 9917e60d53dd4b48b388b9e1dbb12b49 -#: ../source/iconview.txt:259 -msgid "Example" -msgstr "例" diff --git a/translations/ja/index.po b/translations/ja/index.po deleted file mode 100644 index 2911b23..0000000 --- a/translations/ja/index.po +++ /dev/null @@ -1,65 +0,0 @@ -# Japanese translation for index.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"PO-Revision-Date: 2012-09-25 10:08+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/index.txt:7 -# 586fe65828da4061a517c0a724bf9a0d -msgid "The Python GTK+ 3 Tutorial" -msgstr "Python GTK+ 3 チュートリアル" - -#: ../source/index.txt:9 -# f2038ac775e546fc87e6cfa2ea72366f -msgid "|version|" -msgstr "|version|" - -#: ../source/index.txt:10 -# 7d255eae4d2044d19ca2b086f87c5092 -msgid "|today|" -msgstr "|today|" - -#: ../source/index.txt:11 -# 4604911c512142b58a657c2aff0b6e24 -msgid "GNU Free Documentation License 1.3" -msgstr "GNU Free Documentation License 1.3" - -#: ../source/index.txt:13 -# 60f7ae1f03e94ea98ebd8cde59b31f53 -msgid "This tutorial gives an introduction to writing GTK+ 3 applications in Python." -msgstr "このチュートリアルは、Python で GTK+ バージョン 3 を使ったアプリケーションのプログラミングを解説する入門書の一つです。" - -#: ../source/index.txt:15 -# fba16feb37fb49368d2461dba3e6cbd6 -msgid "Prior to working through this tutorial, it is recommended that you have a reasonable grasp of the Python programming language. GUI programming introduces new problems compared to interacting with the standard output (console / terminal). It is necessary for you to know how to create and run Python files, understand basic interpreter errors, and work with strings, integers, floats and Boolean values. For the more advanced widgets in this tutorial, good knowledge of lists and tuples will be needed." -msgstr "このチュートリアルを通して作業する前に、まず Python というプログラミング言語についてしっかりと理解しておくことをお勧めします。GUI のプログラミングは標準出力 (コンソールや端末) を使った対話式のプログラミングと比較すると、新しい別の問題を引き込む可能性が高いです。ここで必要なことは、Python の実行ファイルを作成したり実行する方法、そして基本的なインタプリタ系のエラーと文字列、整数値、実数と論理値の動きについて理解しておくことです。さらに、本チュートリアルで紹介する高度なウィジェットを使ったプログラミングでは、リスト型とタプル型をよく理解しておくことが必要になってきます。" - -#: ../source/index.txt:25 -# f9d392cce3384440992d311bdc963319 -msgid "Although this tutorial describes the most important classes and methods within GTK+ 3, it is not supposed to serve as an API reference. Please refer to the `GTK+ 3 Reference Manual `_ for a detailed description of the API." -msgstr "本チュートリアルは GTK+ のバージョン 3 で提供されている最も重要なクラスとメソッドについて説明していますが、一種の API リファレンスを提供することを目的とはしていません。API の詳細については `GTK+ 3 リファレンスマニュアル `_ を参照して下さい。" - -#: ../source/index.txt:30 -# c8bc180535ba4371ba3756805ee88a51 -msgid "Contents:" -msgstr "目次:" - -#: ../source/index.txt:60 -# 4b10bdea56964e7f8ff71223a35473b1 -msgid "Indices and tables" -msgstr "索引と図表" - -#: ../source/index.txt:62 -# fe195a890d1945909f399d32d36c9046 -msgid ":ref:`search`" -msgstr ":ref:`search`" - diff --git a/translations/ja/install.po b/translations/ja/install.po deleted file mode 100644 index 0d9e517..0000000 --- a/translations/ja/install.po +++ /dev/null @@ -1,104 +0,0 @@ -# Japanese translation for install.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 22:15+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/install.txt:4 -# 2ac1be3574e04362a489c1172c0aca6c -msgid "Installation" -msgstr "インストール" - -#: ../source/install.txt:5 -# 404fdbb7f6374c87aa635e3f8971bcaf -msgid "The fist step before we start with actual coding consists of setting up `PyGObject`_ and its dependencies. PyGObject is a Python module that enables developers to access GObject-based libraries such as GTK+ within Python. It exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in your application, use `PyGTK`_, instead." -msgstr "実際のコーディングを始める前の第一ステップは `PyGObject `_ とそれに依存するパッケージの設定です。PyGObject は Python のモジュールの一つで、開発者が Python の中から GTK+ といった GObject ベースのいろいろなライブラリにアクセスできるようにするものです。GTK+ のバージョン 3 以降のみサポートしています。もし Python から GTK+ のバージョン 2 を使いたいのであれば、PyGObject の代わりに `PyGTK `_ の方を設定して下さい。" - -#: ../source/install.txt:13 -# 325496c5a1ce4fec965ecd67a2bdcaa9 -msgid "Dependencies" -msgstr "いろいろな依存関係" - -#: ../source/install.txt:15 -# 9755c21c74f548ba807af0167f3478c7 -msgid "GTK+3" -msgstr "GTK+ バージョン 3" - -#: ../source/install.txt:17 -# e88a5620cd0c4df4b0b509e58eb8a382 -msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" -msgstr "Python 2 (バージョン 2.6 以上) または Python 3 (3.1 以上)" - -#: ../source/install.txt:19 -# 5b192092a7304196b06d9c446d8efda1 -msgid "gobject-introspection" -msgstr "gobject-introspection" - -#: ../source/install.txt:22 -# 66df1f7e7a9947e285a4da6090e161e9 -msgid "Prebuilt Packages" -msgstr "バイナリ・パッケージ" - -#: ../source/install.txt:23 -# 628e583aa3cd4c9da18c82e542e84d56 -msgid "Recent versions of PyGObject and its dependencies are packaged by nearly all major Linux distributions. So, if you use Linux, you can probably get started by installing the package from the official repository for your distribution." -msgstr "現在のバージョンの PyGObject とそれに依存するパッケージのほとんど全てが、主要な Linux ディストリビューションから提供されています。そのため Linux をお使いならば、対応するディストリビューションの公式リポジトリからパッケージをインストールするところから始めることができるでしょう。" - -#: ../source/install.txt:29 -# 6bfa5307029e47a1b4d8ddab6606037c -msgid "Installing From Source" -msgstr "ソースからインストールする" - -#: ../source/install.txt:30 -# a8f35d6bbb834c3cb68bd644ecd6aa41 -msgid "The easiest way to install PyGObject from source is using `JHBuild`_. It is designed to easily build source packages and discover what dependencies need to be build and in what order. To setup JHBuild, please follow the `JHBuild manual`_." -msgstr "PyGObject をソースからインストールする一番簡単な方法は `JHBuild `_ を利用することです。これはソース・パッケージのビルドと、それに必要な依存関係の解決を簡単にしてくれる設計がされています。この JHBuild の設定については、 `JHBuild のマニュアル `_ に従ってみて下さい。" - -#: ../source/install.txt:34 -# ec6b6b5e65c5476181fecc82fde3a8d9 -# -# [ERROR] Compile error is caused by when set '[#]_' as original -msgid "Once you have installed JHBuild successfully, download the latest configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." -msgstr "JHBuild のインストールが完了したら、 `[1] <#id1>`_ から最新版の設定をダウンロードして下さい。拡張子として .modules が付与されているいくつかのファイルを JHBuild のモジュール・フォルダにコピーして sample-tarball.jhbuildrc というファイルを ~/.jhbuildrc にリネームします。 " - -#: ../source/install.txt:38 -# b3a9233bb5ba492fb0c826d73aa8c20c -msgid "If you have not done it before, verify that your build environment is setup correctly by running::" -msgstr "ここまでを完了できなかった場合、次のコマンドを使ってお使いの環境が正しく設定されているかどうかをチェックしてみて下さい::" - -#: ../source/install.txt:43 -# 473e5060d24d464fad34736f9655bca5 -msgid "It will print any applications and libraries that are currently missing on your system but required for building. You should install those using your distribution's package repository. A list of `package names `_ for different distributions is maintained on the GNOME wiki. Run the command above again to ensure the required tools are present." -msgstr "お使いのシステムでビルドするのに必要であるものの、現在は不足しているアプリケーションやライブラリの名前が表示される場合があります。そのような場合はディストリビューションのパッケージ・リポジトリからインストールして下さい。GNOME の Wiki ページにはディストリビューション別に `パッケージ名 `_ が一覧としてまとめられています。それから、もう一度、上のコマンドを実行して必要なツールが揃っているかどうかをしっかりと確認して下さい。" - -#: ../source/install.txt:49 -# d0f06586d2cb483f8981227295bcf8eb -msgid "Executing the following command will build PyGObject and all its dependencies::" -msgstr "次のコマンドを実行して PyGObject とその他の必要なものをビルドして下さい::" - -#: ../source/install.txt:53 -# 508391276d6545e6a829c25e66539d1b -msgid "Finally, you might want to install GTK+ from source as well::" -msgstr "最後に、GTK+ も同じようにしてビルド・インストールして下さい::" - -#: ../source/install.txt:57 -# 9fe85dcaaf6142998a35fcd8b78cab3d -msgid "To start a shell with the same environment as used by JHBuild, run::" -msgstr "JHBuild が使用している環境と同じシェルを起動するには、次のようにします::" - -#: ../source/install.txt:66 -# bd34f657eb1c45a89ab036792c9bb264 -msgid "http://download.gnome.org/teams/releng/" -msgstr "http://download.gnome.org/teams/releng/" - diff --git a/translations/ja/introduction.po b/translations/ja/introduction.po deleted file mode 100644 index 3f496d8..0000000 --- a/translations/ja/introduction.po +++ /dev/null @@ -1,102 +0,0 @@ -# Japanese translation for introduction.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-09-25 10:18+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/introduction.txt:4 -# 609587f529dd41ecb787903c8fdf9812 -msgid "Getting Started" -msgstr "始めてみよう" - -#: ../source/introduction.txt:7 -# 2c499ca8eda141da843a159a8279982d -msgid "Simple Example" -msgstr "簡単な例" - -#: ../source/introduction.txt:9 -# 4470761ff8404cf7a1188909db6999ab -msgid "To start with our tutorial we create the simplest program possible. This program will create an emtpy 200 x 200 pixel window." -msgstr "これからチュートリアルを開始するにあたり、一番簡単なプログラムを作成します。このプログラムは縦横が 200 x 200 ピクセルの何もないウィンドウを一つ生成します。" - -#: ../source/introduction.txt:17 -# 430555bca5084c50b07b33632b660c8f -msgid "We will now explain each line of the example." -msgstr "このプログラムの各行について解説していきます。" - -#: ../source/introduction.txt:22 -# 9efa67af4bb0498294943927dc6e99a8 -msgid "The first line of all Python programs should start with ``#!`` followed by the path to the Python interpreter you want to invoke." -msgstr "全ての Python プログラムの先頭行は ``#!`` で始め、それから実行時に呼び出す Python インタプリタへのパスを続けます。 " - -#: ../source/introduction.txt:28 -# ae20279a575049c89044cd1e120049e2 -msgid "In order to access GTK+ classes and functions we first must import the Gtk module. The next line creates an empty window." -msgstr "GTK+ のいろいろなクラスと関数にアクセスするために、まず Gtk モジュールをインポートする必要があります。次の行で空っぽのウィンドウを一つ生成しています。" - -#: ../source/introduction.txt:34 -# a76c9126076b47218a052a1a7768477c -msgid "Followed by connecting to the window's delete event to ensure that the application is terminated if we click on the *x* to close the window." -msgstr "続いて、ウィンドウの delete イベントに接続することで、 このウィンドウの *x* をクリックして閉じるとアプリケーションが終了することを保証します。" - -#: ../source/introduction.txt:40 -# 8fb9a6579ca945d1a0d67265efc8cd4d -msgid "In the next step we display the window." -msgstr "次はウィンドウを表示させています。" - -#: ../source/introduction.txt:45 -# 9bb7a90cdef3461e86f77097fc48fe92 -msgid "Finally, we start the GTK+ processing loop which we quit when the window is closed (see line 5)." -msgstr "最後に、GTK+ の制御用ループを起動して、ウィンドウを閉じたらアプリケーションが終了するようにします (5行目を参照のこと)。" - -#: ../source/introduction.txt:51 -# 56f165fd59eb4543b87fc1f44b63ee14 -msgid "To run the program, open a terminal, change to the directory of the file, and enter::" -msgstr "このプログラムを実行するには、端末を開いて、このファイルがあるフォルダに移動し、次を入力します::" - -#: ../source/introduction.txt:57 -# d920733aed62408dbd818f65bca7da23 -msgid "Extended Example" -msgstr "ちょっと高度な例" - -#: ../source/introduction.txt:58 -# c037778710534edc809f0527cd91eecb -msgid "For something a little more useful, here's the PyGObject version of the classic \"Hello World\" program." -msgstr "ちょっとだけ使えるものにするために、ここで古典的なプログラムである「Hello World」の PyGObject 版を紹介します。" - -#: ../source/introduction.txt:66 -# 4a0ce2a1cec94ad1857d840fe25cc431 -msgid "This example differs from the simple example as we sub-class :class:`Gtk.Window` to define our own :class:`MyWindow` class." -msgstr "この例と簡単な例との違いは、ここで自作した :class:`MyWindow` クラスは :class:`Gtk.Window` クラスのサブクラスとして定義している点です。" - -#: ../source/introduction.txt:72 -# 4ca9b42f75574e668b98e07d4cc4a22c -msgid "In the class's constructor we have to call the constructor of the super class. In addition, we tell it to set the value of the property `title` to `Hello World`." -msgstr "クラスのコンストラクタの中で、スーパークラスのコンストラクタを呼び出す必要があります。加えて \"title\" というプロパティの値を `Hello World` にするようにスーパークラスに指示します。" - -#: ../source/introduction.txt:78 -# 93c5573d13c54e96a1d82abdbf914431 -msgid "The next three lines are used to create a button widget, connect to its `clicked` signal and add it as child to the top-level window." -msgstr "次の三行はボタン・ウィジェットを生成し、その `clicked` シグナルに接続して、ボタン・ウィジェットをトップレベルのウィンドウに追加します。" - -#: ../source/introduction.txt:84 -# 316d66dd6f914ecaba3a7d932d69335f -msgid "Accordingly, the method :meth:`on_button_clicked` will be called if you click on the button." -msgstr "そのため :meth:`on_button_clicked` というメソッドを実装して、ボタンの上でクリックしたら呼び出されるようにします。" - -#: ../source/introduction.txt:89 -# df0f484eb27e472ab4cf3639d328515a -msgid "The last block, outside of the class, is very similar to the simple example above, but instead of creating an instance of the generic :class:`Gtk.Window` class, we create an instance of :class:`MyWindow`." -msgstr "クラスの外側にある最後のブロックは、前述の簡単な例のプログラムにとても似ています。但し、 :class:`Gtk.Window` という汎用クラスのインスタンスを生成する代わりに、自作した :class:`MyWindow` クラスのインスタンスを生成しています。" - diff --git a/translations/ja/label.po b/translations/ja/label.po deleted file mode 100644 index a1f9f7b..0000000 --- a/translations/ja/label.po +++ /dev/null @@ -1,122 +0,0 @@ -# Japanese translation for label.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 22:19+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/label.txt:2 -# 08093c081e8f4b28a6a0a39ce93799ba -msgid "Label" -msgstr "ラベル" - -#: ../source/label.txt:4 -# a3d6521aa5c7479b89b1960f977cea11 -msgid "Labels are the main method of placing non-editable text in windows, for instance to place a title next to a :class:`Gtk.Entry` widget. You can specify the text in the constructor, or later with the :meth:`Gtk.Label.set_text` or :meth:`Gtk.Label.set_markup` methods." -msgstr "ラベルはウィンドウに編集できない文字列を配置する最も一般的な手法です。例えば :class:`Gtk.Entry` ウィジェットの隣にタイトルを表示する時にラベルを使用します。このクラスのコンストラクタで文字列を指定するか、またはラベルを生成した後に :meth:`Gtk.Label.set_text` や :meth:`Gtk.Label.set_markup` メソッドを使って指定することができます。" - -#: ../source/label.txt:9 -# 997375d036384b0fb225489a3cf4d387 -msgid "The width of the label will be adjusted automatically. You can produce multi-line labels by putting line breaks (\"\\\\n\") in the label string." -msgstr "ラベルの幅は (その中の文字列に応じて) 自動的に調整されます。文字列に改行文字 (\"\\n\") を挿入することで、複数行からなるラベルを生成することができます。" - -#: ../source/label.txt:12 -# 50a53365ddd148e1b1f9ff09e2d88dc3 -msgid "Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. Selectable labels allow the user to copy the label contents to the clipboard. Only labels that contain useful-to-copy information — such as error messages — should be made selectable." -msgstr ":meth:`Gtk.Label.set_selectable` メソッドを使って、ラベルを選択させることができるようになります。ラベルを選択可能にすると、ユーザはラベルの中のデータをクリップボードにコピーできます。コピーに適した情報が含まれているラベルだけ - 何かエラー・メッセージのようなものとか - 選択可能にできます。" - -#: ../source/label.txt:17 -# 5029d64b492c446693ea3110fd8c5ad9 -msgid "The label text can be justified using the :meth:`Gtk.Label.set_justify` method. The widget is also capable of word-wrapping, which can be activated with :meth:`Gtk.Label.set_line_wrap`." -msgstr "ラベルの文字列は :meth:`Gtk.Label.set_justify` メソッドを使って左右両端を揃えることができます。さらに :meth:`Gtk.Label.set_line_wrap` メソッドを使ってワードラップ (行端の折り返し) の機能を有効にできます。" - -#: ../source/label.txt:21 -# 34dbc17dfb884380904eb5a5f36691c5 -msgid ":class:`Gtk.Label` support some simple formatting, for instance allowing you to make some text bold, colored, or larger. You can do this by providing a string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax [#pango]_. For instance, ``bold text and strikethrough text``. In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup for links is borrowed from HTML, using the a with href and title attributes. GTK+ renders links similar to the way they appear in web browsers, with colored, underlined text. The title attribute is displayed as a tooltip on the link." -msgstr ":class:`Gtk.Label` では、例えば文字を太字にしたり、色を付けたり、大きくするといった簡単な書式を利用できます。この書式は `Pango のマークアップ言語 `_ に従った文字列を :meth:`Gtk.Label.set_markup` メソッドに引き渡すと、利用できるようになります。例えば、 ``太字の文字列 とか 打ち消し線付きの文字列`` です。さらに :class:`Gtk.Label` はクリックすることが可能なハイパー・リンクもサポートしています。HTML 同様にリンクのマークアップには \"href\" と \"title\" という属性を指定できます。 GTK+ では、リンクをウェブ・ブラウザで表示した場合と同様の方法 (色つきで、下線が付いた文字列) でリンクを描画します。\"title\" 属性はリンクに対するツールチップとして表示されます。" - -#: ../source/label.txt:36 -# e25a6fa484e2401bac70b2031d9a3d91 -msgid "Labels may contain *mnemonics*. Mnemonics are underlined characters in the label, used for keyboard navigation. Mnemonics are created by providing a string with an underscore before the mnemonic character, such as \"_File\", to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label.set_text_with_mnemonic`. Mnemonics automatically activate any activatable widget the label is inside, such as a :class:`Gtk.Button`; if the label is not inside the mnemonic's target widget, you have to tell the label about the target using :meth:`Gtk.Label.set_mnemonic_widget`." -msgstr "ラベルにいろいろな ``ニーモニック`` (*mnemonic*) を含める場合があります。ニーモニックはラベルの中では下線が引かれた文字として表示され、キーボードの操作で使用します。ニーモニックは、\"_File\" のようにニーモニックを表す文字の直前に下線を付けた文字列を :meth:`Gtk.Label.new_with_mnemonic` または :meth:`Gtk.Label.set_text_with_mnemonic` メソッドに引き渡すことで生成できます。ニーモニックは、例えば :class:`Gtk.Button` のような、ラベルをコンテンツに持つ全てのウィジェットで自動的に有効になります。もし、そのニーモニックが対象としているウィジェットがラベルの中に存在しなかったら、そのラベルに対して :meth:`Gtk.Label.set_mnemonic_widget` メソッドを使って、対象となるオブジェクトについてラベルに問い合わせる必要があります。" - -#: ../source/label.txt:47 -# 46418ab06d0b405d9aacfe0223086f52 -msgid "Label Objects" -msgstr "ラベルのオブジェクト" - -#: ../source/label.txt:51 -# c7f1fb3c670f44f9b4560966561e5449 -msgid "Creates a new label with the given *text* inside it. If *text* is omitted, an empty label is created." -msgstr "指定した *text* をコンテンツとして内部に持つ新しいラベルを生成します。 *text* を省略すると、(何も表示されない) 空っぽのラベルが生成されます。" - -#: ../source/label.txt:56 -# 5b6e4ea599ca47348c07df72a76293c4 -msgid "Creates a new label with *text* inside it." -msgstr "*text* をコンテンツとして内部に持つ新しいラベルを生成します。" - -#: ../source/label.txt:58 -# f93cd0d0619248c7b62041cb1508defa -msgid "If characters in *text* are preceded by an underscore, they are underlined. If you need a literal underscore character in a label, use '__' (two underscores). The first underlined character represents a keyboard accelerator called a mnemonic. The mnemonic key can be used to activate another widget, chosen automatically, or explicitly using :meth:`Gtk.Label.set_mnemonic_widget`." -msgstr "*text* の中にある文字の前にアンダースコアがあると、それらの文字には下線が付与されます。ラベルの中で通常のアンダースコアを表示させたい場合は '__' にします (アンダースコアを連続させます)。一番最初に下線が付与された文字はニーモニックと呼ばれる一個のキーボード・アクセラレータを表します。このニーモニック・キーは別のウィジェットをアクティブにする際に利用することができます。このウィジェットは自動的に選択させるか、または :meth:`Gtk.Label.set_mnemonic_widget` メソッドを使って明示的に指定できます。" - -#: ../source/label.txt:65 -# 371531f0a7734e37a0c8b9f323d8c9f0 -msgid "If :meth:`Gtk.Label.set_mnemonic_widget` is not called, then the first activatable ancestor of the :class:`Gtk.Label` will be chosen as the mnemonic widget. For instance, if the label is inside a button or menu item, the button or menu item will automatically become the mnemonic widget and be activated by the mnemonic." -msgstr ":meth:`Gtk.Label.set_mnemonic_widget` メソッドを呼び出さない場合 :class:`Gtk.Label` のうち一番最初にアクティブにすることが可能な親のウィジェットがニーモニック向けのウィジェットに選ばれます。例えばボタンやメニュー項目の中にラベルが含まれている場合、ボタンまたはメニュー項目が自動的にニーモニック向けのウィジェットになり、ニーモニック・キーを押下するとそれらのウィジェットがアクティブ (入力したり選択できる状態) になります。" - -#: ../source/label.txt:73 -# 7e879ce47a244e848357a2e65ed34370 -msgid "Sets the alignment of the lines in the text of the label relative to each other. *justification* can be one of :attr:`Gtk.Justification.LEFT`, :attr:`Gtk.Justification.RIGHT`, :attr:`Gtk.Justification.CENTER`, :attr:`Gtk.Justification.FILL`. This method has no effect on labels containing only a single line." -msgstr "ラベルの中に表示する文字列の相対位置を指定します。 *justification* は :attr:`Gtk.Justification.LEFT`, :attr:`Gtk.Justification.RIGHT`, :attr:`Gtk.Justification.CENTER`, または :attr:`Gtk.Justification.FILL` のいずれかを指定します。このメソッドは一行だけのコンテンツを持つラベルに対してのみ効果があります。" - -#: ../source/label.txt:81 -# 024e70adaf5a45c5acb1478eadd8008f -msgid "If *wrap* is ``True``, lines will be broken if text exceeds the widget's size. If *wrap* is ``False``, text will be cut off by the edge of the widget if it exceeds the widget size." -msgstr "*wrap* を ``True`` にすると、ラベルの大きさより長い文字列は行端を折り返して表示します。 *wrap* を ``False`` にすると、ラベルの大きさより長い文字列はウィジェットの端で切り捨てられて表示されます。" - -#: ../source/label.txt:87 -# 09519cba69f64c998b7672adf63443ff -msgid "Parses *markup* which is marked up with the Pango text markup language [#pango]_, setting the label's text accordingly. The markup passed must be valid; for example literal <, >, & characters must be escaped as < > and &." -msgstr "`Pango のマークアップ言語 `_ に従って文字列を装飾するために *markup* を解析し、それに応じた文字列をラベルの中にセットします。ここで指定する *markup* は妥当なものにして下さい。例えばリテラル文字の '<' や '>'、'&' はそれぞれ '<'、'>'、'&' のようにエスケープさせて下さい。" - -#: ../source/label.txt:94 -# e7f3b76f726144efa6047eef36990d23 -msgid "If the label has been set so that it has an mnemonic key, the label can be associated with a widget that is the target of the mnemonic." -msgstr "もしニーモニック・キーを持つラベルがセットされている場合、そのニーモニックの対象を *widget* に関連づけることができます。" - -#: ../source/label.txt:99 -# f0f2e06c616d4263a55abb4fa6aba4c1 -msgid "Selectable labels allow the user to select text from the label, for copy-and-paste." -msgstr "選択可能なラベルを使うと、ユーザはコピー&ペーストの目的で、ラベルの中にある文字列を選択できるようになります。" - -#: ../source/label.txt:103 -# e7e377fa8e8640ce8bc69b5109b0a44c -msgid "Sets the text within this widget. It overwrites any text that was there before." -msgstr "*text* をこのウィジェットの中にセットします。既に文字列が表示されている場合は上書きされます。" - -#: ../source/label.txt:107 -# 37bc879ec91f487baf010d9fa67bd986 -msgid "See :meth:`new_with_mnemonic`." -msgstr ":meth:`new_with_mnemonic` メソッドを参照して下さい " - -#: ../source/label.txt:110 -# 9248de6d73a04a90a263523ab84c65f2 -msgid "Example" -msgstr "例" - -#: ../source/label.txt:117 -# 9da1f3ee002c4507a7b7f85d9d56d993 -msgid "Pango Markup Syntax, http://developer.gnome.org/pango/stable/PangoMarkupFormat.html" -msgstr "Pango のマークアップ言語の文法、 http://developer.gnome.org/pango/stable/PangoMarkupFormat.html" - diff --git a/translations/ja/layout.po b/translations/ja/layout.po deleted file mode 100644 index 1b52094..0000000 --- a/translations/ja/layout.po +++ /dev/null @@ -1,311 +0,0 @@ -# Japanese translation for layout.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 08:45+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/layout.txt:4 -# 85b1e0a25dae4b38853920f26a251cb6 -msgid "Layout Containers" -msgstr "レイアウト用のコンテナ" - -#: ../source/layout.txt:5 -# e4fad19f97a74303aa981e19f5df0b7b -msgid "While many GUI toolkits require you to precisely place widgets in a window, using absolute positioning, GTK+ uses a different approach. Rather than specifying the position and size of each widget in the window, you can arrange your widgets in rows, columns, and/or tables. The size of your window can be determined automatically, based on the sizes of the widgets it contains. And the sizes of the widgets are, in turn, determined by the amount of text they contain, or the minimum and maximum sizes that you specify, and/or how you have requested that the available space should be shared between sets of widgets. You can perfect your layout by specifying padding distance and centering values for each of your widgets. GTK+ then uses all this information to resize and reposition everything sensibly and smoothly when the user manipulates the window." -msgstr "多くの GUI ツールキットがウィンドウの中に任意のウィジェットを正確に配置するために絶対座標を要求してくる一方で、GTK+ では別のアプローチを採用しています。ウィンドウの中に配置するいろいろなウィジェットに対して位置と大きさをぞれぞれ指定する代わりに、行や列、そして/あるいはテーブルの類にウィジェットを配置していくとができます。ウィンドウの大きさは、その中に配置しているいろいろなウィジェットの大きさに基づいて自動的に計算させることが可能です。さらにウィンドウの中にあるウィジェットの大きさは、それらのウィジェットが格納している文字列の長さとか、明示的に指定した最小値と最大値から計算するとか、もしくはウィンドウの中で利用できる領域を複数のウィジェットの間で共有するよう要求することができるようになっています。ウィジェットとウィジェットの間隔や均等配置などを指定することでレイアウトを完成させていくことができます。それから、GTK+ はこれらのレイアウト情報を全て利用して、ユーザがウィンドウを操作したら、賢く滑らかにその大きさを変更したり配置を更新します。" - -#: ../source/layout.txt:19 -# 2445b1bca09f4c938215ae9c4aa493a1 -msgid "GTK+ arranges widgets hierarchically, using *containers*. They are invisible to the end user and are inserted into a window, or placed within each other to layout components. There are two flavours of containers: single-child containers, which are all descendants of :class:`Gtk.Bin`, and multiple-child containers, which are descendants of :class:`Gtk.Container`. The most commonly used are vertical or horizontal boxes (:class:`Gtk.Box`), tables (:class:`Gtk.Table`) and grids (:class:`Gtk.Grid`)." -msgstr "GTK+ は *コンテナ* を使っていろいろなウィジェットを階層的に配置していきます。ユーザにはコンテナは見えません。コンテナはウィンドウに埋め込まれるか、別のコンテナの中に配置されます。コンテナには二種類あります: 子を一つだけ配置できるタイプのコンテナは全て :class:`Gtk.Bin` クラスから派生しています。複数の子を配置できるコンテナは :class:`Gtk.Container` クラスから派生しています。もっともよく利用するのは垂直と水平のボックス (:class:`Gtk.Box`)、テーブル (:class:`Gtk.Table`)、そして格子 (:class:`Gtk.Grid`) です。" - -#: ../source/layout.txt:29 -# f425a7019e2f41469490954b8c096f84 -msgid "Boxes" -msgstr "ボックス" - -#: ../source/layout.txt:31 -# 0a850d3cd10649ecb938fe1f92e09945 -msgid "Boxes are invisible containers into which we can pack our widgets. When packing widgets into a horizontal box, the objects are inserted horizontally from left to right or right to left depending on whether :meth:`Gtk.Box.pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets are packed from top to bottom or vice versa. You may use any combination of boxes inside or beside other boxes to create the desired effect." -msgstr "ボックスは見えないコンテナの一つで、いろいろなウィジェットを詰め込む (パッキングする) ことができます。水平ボックスの中にウィジェットをパッキングしていくと、それらのオブジェクトは左から右へ、または右から左へ横方向に並べられていきます (並べられていく向きは :meth:`Gtk.Box.pack_start` または :meth:`Gtk.Box.pack_end` 関数で指定した向きに依存します)。垂直ボックスの場合、ウィジェットは上から下へ、またはその逆向きに縦方向に並べられていきます。ボックスを他のボックスの中にパッキングしたり、別のボックスの横に並べる等してお望みのレイアウトを実現できます。" - -#: ../source/layout.txt:40 -# c4fa099c0792482689d5e9d21e02000b -msgid "Box Objects" -msgstr "ボックスのオブジェクト" - -#: ../source/layout.txt:44 -# cdafd7a8997d4f8a921bf36c2f1794d5 -msgid "The rectangular area of a :class:`Gtk.Box` is organized into either a single row or a single column of child widgets depending upon whether the \"orientation\" property is set to :attr:`Gtk.Orientation.HORIZONTAL` or :attr:`Gtk.Orientation.VERTICAL`." -msgstr ":class:`Gtk.Box` の矩形領域は、\"orientation\" プロパティの内容 (:attr:`Gtk.Orientation.HORIZONTAL` または :attr:`Gtk.Orientation.VERTICAL`) に応じて複数の子ウィジェットを一行または一列の中に並べていきます。" - -#: ../source/layout.txt:49 -# 290bc44b97454683a76ccb3709dd7cef -msgid "If *homogeneous* is ``True``, all widgets in the box will be the same size, of which the size is determined by the largest child widget. If it is omitted, *homogeneous* defaults to ``False``." -msgstr "*homogeneous* というプロパティを ``True`` にすると、ボックス内の全ての子ウィジェットが同じ大きさになります (一番大きな子ウィジェットの大きさに合わせられます)。このプロパティの指定を省略すると、 *homogeneous* の内容はデフォルト値の ``False`` になります。" - -#: ../source/layout.txt:53 -# 8df2488e42924522b2cce23ffbaea0d3 -msgid "*spacing* is the number of pixels to place by default between children. If omitted, no spacing is used, i.e. *spacing* is set to 0." -msgstr "*spacing* というプロパティは子ウィジェットの間隔をピクセル単位で指定します。省略すると間隔がなくなります (すなわち *spacing* が 0 になります)。" - -#: ../source/layout.txt:56 -# 3ca04d0052d84ef8920a4db2a75c3a97 -msgid "By default, child widgets are organized into a single row, i.e. the \"orientation\" property is set to :attr:`Gtk.Orientation.HORIZONTAL`." -msgstr "デフォルトで、子ウィジェットは一行の中に並べられるようになっています。すなわち、\"orientation\" プロパティは :attr:`Gtk.Orientation.HORIZONTAL` になります。" - -#: ../source/layout.txt:59 -# 9d7030882e154c0283868d266e30cf8e -msgid ":class:`Gtk.Box` uses a notion of *packing*. Packing refers to adding widgets with reference to a particular position in a :class:`Gtk.Container`. For a :class:`Gtk.Box`, there are two reference positions: the start and the end of the box. If \"orientation\" is :attr:`Gtk.Orientation.VERTICAL`, the start is defined as the top of the box and the end is defined as the bottom. If \"orientation\" is :attr:`Gtk.Orientation.HORIZONTAL`, the start is defined as the left side and the end is defined as the right side." -msgstr ":class:`Gtk.Box` は *パッキング* の記法を使用します。パッキングは :class:`Gtk.Container` の特定の位置 (リファレンス位置) に関してウィジェットを追加していくことを指示します。 :class:`Gtk.Box` の場合、リファレンス位置は二つあります。それはボックスの先頭と末尾です。\"orientation\" が :attr:`Gtk.Orientation.VERTICAL` の場合、先頭はボックスの上端で、末尾は下端になります。また、\"orientation\" が :attr:`Gtk.Orientation.HORIZONTAL` の場合、先頭は左端で、末尾が右端になります。" - -#: ../source/layout.txt:70 -# 740656ccc0a14ca487cdbfb83548610e -msgid "Adds *child* to box, packed with reference to the start of box. The *child* is packed after any other child packed with reference to the start of box." -msgstr "*child* を、ボックスの先頭をリファレンス位置としてパッキングしながら追加します。 *child* は、ボックスの先頭にパッキングされたその他の子ウィジェットの後に追加されていきます。" - -#: ../source/layout.txt:74 -# 1d85accfefd34fa38852a3cc2b4849b8 -msgid "*child* should be a :class:`Gtk.Widget` to be added to this box. The *expand* argument when set to ``True`` allows the *child* widget to take all available space it can. Alternately, if the value is set to ``False``, the box will be shrunken to the same size as the child widget." -msgstr "*child* は、このボックスに追加する一個の :class:`Gtk.Widget` です。 *expand* を ``True`` にすると *child* はボックス内で利用できる空間を全て占有します。逆に ``False`` にすると、ボックスが *child* と同じ大きさに縮まります。" - -#: ../source/layout.txt:79 -# 4c4f56df62c94902a390acb6915af629 -msgid "If the *fill* argument is set to ``True``, the *child* widget takes all available space and is equal to the size of the box. This only has an effect when *expand* is set to ``True``. A child is always allocated the full height of a horizontally oriented and the full width of a vertically oriented box. This option affects the other dimension." -msgstr "*fill* を ``True`` にすると *child* は利用できる空間を全て占有し、ボックスと同じ大きさになります。これは *expand* を ``True`` にした時にだけ効果があります。 *child* は常に水平ボックスと同じ高さを持ち、垂直ボックスと同じ幅を持ちます。このオプションは他の次元でも効果があります。" - -#: ../source/layout.txt:86 -# a68ce9d52c5647dabc050267881a52e7 -msgid "*padding* defines extra space in pixels to put between this child and its neighbours, over and above the global amount specified by \"spacing\" property. If *child* is a widget at one of the reference ends of box, then padding pixels are also put between *child* and the reference edge of this box." -msgstr "*padding* は、子ウィジェットとその横にあるウィジェットとの間に挿入する余白をピクセル単位で指定します (その際は、ボックス生成時に指定した *spacing* というプロパティの値と加算されます)。 *child* がボックスの末尾に配置されたウィジェットの場合 *padding* に指定した余白がその *child* とボックスの終端との間にも挿入されます。" - -#: ../source/layout.txt:94 -# 4ae744bb6086434fbf8437fba39dc137 -msgid "Adds *child* to box, packed with reference to the end of box. The *child* is packed after (away from end of) any other child packed with reference to the end of box." -msgstr "*child* を、ボックスの終端をリファレンス位置としてパッキングしながら追加します。 *child* はボックスの末尾にパッキングされたその他の子ウィジェットの前に (ボックスの先頭に向かって) 追加されていきます。" - -#: ../source/layout.txt:98 -# b0cb06ae537e4347bce05d031b102b09 -msgid "Arguments are the same as for :meth:`pack_start`." -msgstr "引数は :meth:`Gtk.Box.pack_start` 関数と同じです。" - -#: ../source/layout.txt:102 -# 6f40f8bc1a8344ad8e7457bba5b3f01a -msgid "If *homogeneous* is ``True``, all widgets in the box will be the same size, of which the size is determined by the largest child widget." -msgstr "*homogeneous* を ``True`` にすると、ボックス内の全ての子ウィジェットは同じ大きさになります (一番大きな子ウィジェットの大きさに合わせられます)。" - -#: ../source/layout.txt:107 -#: ../source/layout.txt:177 -#: ../source/layout.txt:277 -# d71d8b7eb2a2406e8379fdff80319326 -# bd9158399f854aa2a3ca005e4bb3da67 -# 7d438b6e0a91417697ba143b0110f794 -msgid "Example" -msgstr "例" - -#: ../source/layout.txt:109 -# d3e284b61bb2405bb9600f307044da9c -msgid "Let's take a look at a slightly modified version of the extended example with two buttons." -msgstr "前述のちょっと高度な例を少し変更し二つのボタンを持つアプリケーションをみていくことにしましょう。" - -#: ../source/layout.txt:117 -# ab132aa15007447d99390a5895ce3727 -msgid "First, we create a horizontally orientated box container where 6 pixels are placed between children. This box becomes the child of the top-level window." -msgstr "まず最初に、水平方向のボックス型のコンテナを一つ生成します。このボックスの中で子ウィジェットは 6 ピクセル毎に配置されるようにします。個のボックスはトップレベル・ウィンドウの子になります。" - -#: ../source/layout.txt:123 -# bdbe6f047c684445a418010165c84054 -msgid "Subsequently, we add two different buttons to the box container." -msgstr "その次に、このボック型のコンテナにボタンを二つ追加していきます。" - -#: ../source/layout.txt:128 -# 8da77c5704404585a3ccb748735a482a -msgid "While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to right, :meth:`Gtk.Box.pack_end` positions them from right to left." -msgstr ":meth:`Gtk.Box.pack_start` メソッドを使うとウィジェットを左から右に配置していくのに対し :meth:`Gtk.Box.pack_end` メソッドは右から左へウィジェットを配置します。" - -#: ../source/layout.txt:132 -# 7e94e8efef4041f4b8d2d635927c719c -msgid "Grid" -msgstr "グリッド" - -#: ../source/layout.txt:133 -# db7fe55787bf43caaf0e566f1d7cd984 -msgid ":class:`Gtk.Grid` is a container which arranges its child widgets in rows and columns, but you do not need to specify the dimensions in the constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span multiple rows or columns. It is also possible to add a child next to an existing child, using :meth:`Gtk.Grid.attach_next_to`." -msgstr ":class:`Gtk.Grid` は子ウィジェットを格子の中に配置することができるコンテナの一つですが、コンストラクタで格子の次元 (行数×列数) を指定する必要はありません。子ウィジェットは :meth:`Gtk.Grid.attach` メソッドを使って追加します。子ウィジェットを複数の行や列をまたいで配置することもできます。さらに :meth:`Gtk.Grid.attach_next_to` メソッドを使うと、位置を指定せずに既存のウィジェットを指定してその隣に子ウィジェットを配置することもできます。" - -#: ../source/layout.txt:139 -# f6c7413a6a3b45d982d7f9e9cb09c37f -msgid ":class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just using :meth:`Gtk.Grid.add`, which will place children next to each other in the direction determined by the \"orientation\" property (defaults to :attr:`Gtk.Orientation.HORIZONTAL`)." -msgstr ":class:`Gtk.Grid` は :meth:`Gtk.Grid.add` メソッドを利用すると :class:`Gtk.Box` のように、\"orientation\" プロパティの値 (デフォルトは :attr:`Gtk.Orientation.HORIZONTAL`) によって決定される向きに子ウィジェットを並べていくことができます。" - -#: ../source/layout.txt:145 -# f7b6a047198c4ffb9306cdc93f65c976 -msgid "Grid Objects" -msgstr "グリッドのオブジェクト" - -#: ../source/layout.txt:148 -# a81f04787bc6482980087974db07baa9 -msgid "Creates a new grid widget." -msgstr "新しいグリッドのオブジェクトを生成します。" - -#: ../source/layout.txt:152 -# cf2303e7ef124aa9bbd1547ec772289f -msgid "Adds *child* to this grid." -msgstr "このグリッドに *child* を追加します。" - -#: ../source/layout.txt:154 -# f75e49c6e5ce49c7b7ec7dc7714bbcf3 -msgid "The position of *child* is determined by the index of the cell left to it (*left*) and above of it (*top*). The number of 'cells' that *child* will occupy is determined by *width* and *height*." -msgstr "*child* の位置はその左側 (*left*) と上側 (*top*) のセルの番号で決まります。 *child* が占有するセルの個数は *width* と *height* で決まります。" - -#: ../source/layout.txt:160 -# b2955fcfaf454cd6947ec5bf45c0f2aa -msgid "Adds *child* to this grid, next to *sibling*. *side* is the side of *sibling* that *child* is positioned next to. It can be one of" -msgstr "このグリッドの *sibling* の隣に *child* を追加します。 *side* は *child* を配置する *sibling* の側を、次のいづれかで指定します::" - -#: ../source/layout.txt:163 -# 48b747ce77944002983d7b95261fa235 -msgid ":attr:`Gtk.PositionType.LEFT`" -msgstr ":attr:`Gtk.PositionType.LEFT`" - -#: ../source/layout.txt:164 -# 759a8bbbd0c44e9e9afa3f50de7946a0 -msgid ":attr:`Gtk.PositionType.RIGHT`" -msgstr ":attr:`Gtk.PositionType.RIGHT`" - -#: ../source/layout.txt:165 -# e254d5f045754045b1e4faa603954a02 -msgid ":attr:`Gtk.PositionType.TOP`" -msgstr ":attr:`Gtk.PositionType.TOP`" - -#: ../source/layout.txt:166 -# feafe31bb08549f38ea0f20d0f8bd6d5 -msgid ":attr:`Gtk.PositionType.BOTTOM`" -msgstr ":attr:`Gtk.PositionType.BOTTOM`" - -#: ../source/layout.txt:168 -# ebcea3b8dd0d4aa3945bdf6856bd7459 -msgid "*width* and *height* determine the number of 'cells' that *child* will occupy." -msgstr "*child* が占有するセルの個数は *width* と *height* で決まります。" - -#: ../source/layout.txt:173 -# 7498fc5d253746dab650d3d21dc4e298 -msgid "Adds *widget* to this grid in the direction determined by the \"orientation\" property." -msgstr "このグリッドで \"orientation\" のプロパティが指定した向きに *widget* を追加していきます。" - -#: ../source/layout.txt:185 -# 17c00f23089742c7820bca83d9ba747c -msgid "Table" -msgstr "テーブル" - -#: ../source/layout.txt:187 -# 097363a7d43b468483ba72000dc161a0 -msgid "Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." -msgstr "テーブルを使うと :class:`Gtk.Grid` に似た格子 (セル) 状のボックスの中にいろいろなウィジェットを配置できます。" - -#: ../source/layout.txt:189 -# ca501b81667643eebee2cc8e33d6e9fa -msgid "The grid's dimensions need to be specified in the :class:`Gtk.Table` constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." -msgstr "格子の次元 (行数×列数) は :class:`Gtk.Table` クラスのコンストラクタの中で指定する必要があります。そのボックスの中にウィジェットを一つ配置する時は :meth:`Gtk.Table.attach` メソッドを使用します。" - -#: ../source/layout.txt:192 -# 38fb8881b2564d05a90d088969d98389 -msgid ":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set the spacing between the rows at the specified row or column. Note that for columns, the space goes to the right of the column, and for rows, the space goes below the row." -msgstr ":meth:`Gtk.Table.set_row_spacing` と :meth:`Gtk.Table.set_col_spacing` といったメソッドは、指定した行または列にある行間または列間に挿入する余白の大きさを指定します。ここで、列間の場合の余白は列の右側に付与され、行間の場合の余白は行の下側に付与される点に注意して下さい。" - -#: ../source/layout.txt:197 -# 7e9b15e0b05545bd9cbe209a3130ea0e -msgid "You can also set a consistent spacing for all rows and/or columns with :meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note that with these calls, the last row and last column do not get any spacing." -msgstr "さらに :meth:`Gtk.Table.set_row_spacings` と :meth:`Gtk.Table.set_col_spacings` メソッドを使って全ての行または列の間に一定サイズの余白を挿入することもできます。その場合、最後の行と最後の列には余白が付与されない点に注意して下さい。" - -#: ../source/layout.txt:202 -# 0e7a63d0579744888d853034bea7517e -msgid "Table Objects" -msgstr "テーブルのオブジェクト" - -#: ../source/layout.txt:209 -# 118549773a3248f8b30207a7b6d60007 -msgid "The first argument is the number of rows to make in the table, while the second, obviously, is the number of columns. If *homogeneous* is ``True``, the table cells will all be the same size (the size of the largest widget in the table)." -msgstr "一番目の引数はテーブルの行数で、次の引数は、お分かりのとおり、テーブルの列数です。 *homogeneous* を ``True`` にすると、テーブルの中の格子が全て同じ大きさになります (テーブルの中で一番大きなウィジェットの大きさに合わせられます)。" - -#: ../source/layout.txt:216 -# 0994e2c9a404449293a5c0c37d6ac1ad -msgid "Adds a widget to a table." -msgstr "一個のウィジェットをテーブルの任意の場所に追加します。" - -#: ../source/layout.txt:218 -# 99c3fb666c2d4eac9c560c059f6f75da -msgid "*child* is the widget that should be added to the table. The number of 'cells' that a widget will occupy is specified by *left_attach*, *right_attach*, *top_attach* and *bottom_attach*. These each represent the leftmost, rightmost, uppermost and lowest column and row numbers of the table. (Columns and rows are indexed from zero)." -msgstr "*child* はテーブルに追加するウィジェットです。任意のウィジェットが占有する「セル」の番号を *left_attach* と *right_attach* と *top_attach* と *bottom_attach* で指定します。これらはそれぞれテーブル上の左端、右端、上端、下端の列番号と行番号を表します (列番号と行番号は共に 0 から始まる整数値です)。" - -#: ../source/layout.txt:225 -# a37ea1446ef8410e85111a5cfaa7e35e -msgid "For example, if you want a button in the lower-right cell of a 2 x 2 table, and want it to occupy that cell only, then the code looks like the following." -msgstr "例えば、2×2 の大きさを持つテーブルの右下隅にあるセルにボタンをパッキングし、そのセルだけ占有したい場合のコードは次のようになります" - -#: ../source/layout.txt:235 -# 7bb2feb945da4b5ea796b763840eb37d -msgid "If, on the other hand, you wanted a widget to take up the entire top row of our 2 x 2 table, you'd use" -msgstr "また、その一方でウィジェットを同じ 2×2 のテーブルの先頭行一杯にパッキングしたい場合のコードは次のようになります。" - -#: ../source/layout.txt:242 -# 44bdae5accee496c9edb429a7bafb5c3 -msgid "*xoptions* and *yoptions* are used to specify packing options and may be bitwise ORed together to allow multiple options. These options are:" -msgstr "*xoptions* と *yoptions* はパッキング時のオプションを指定する際に使用します。複数のオプションをビット単位の論理和 (OR) を使って表現できます。利用可能なオプションは次のとおりです::" - -#: ../source/layout.txt:245 -# 5a7385a5175547e3a2ff2cd5046fb08f -msgid ":attr:`Gtk.AttachOptions.EXPAND`: The widget should expand to take up any extra space in its container that has been allocated." -msgstr ":attr:`Gtk.AttachOptions.EXPAND`: ウィジェットは確保されたコンテナの中にある全ての領域を占有するために広がる" - -#: ../source/layout.txt:247 -# a7e7efc4415b4cecb042ab4dc580d25b -msgid ":attr:`Gtk.AttachOptions.FILL`: The widget will expand to use all the room available." -msgstr ":attr:`Gtk.AttachOptions.FILL`: ウィジェットは利用可能なセルを使うために広がる" - -#: ../source/layout.txt:249 -# 052cbd3308d44d7dbdd9b8d266a7ad6f -msgid ":attr:`Gtk.AttachOptions.SHRINK`: Reduce size allocated to the widget to prevent it from moving off screen." -msgstr ":attr:`Gtk.AttachOptions.SHRINK`: ウィジェットが画面から消えてしまわないよう小さくする" - -#: ../source/layout.txt:252 -# e8bf9fc7f85848f4a8fad0dbcecee896 -msgid "If omitted, *xoptions* and *yoptions* defaults to ``Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL``." -msgstr "このオプションを省略すると *xoptions* と *yoptions* はデフォルトの ``Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL`` になります。" - -#: ../source/layout.txt:255 -# 18031e82a2d14264bbcb71693b2f2533 -msgid "Finally, the padding arguments work just as they do for :meth:`Gtk.Box.pack_start`. If omitted, *xpadding* and *ypadding* defaults to ``0``." -msgstr "最後の *xpadding* と *ypadding* は :meth:`Gtk.Box.pack_start` メソッドに渡す *padding* 引数と同じ働きをします。これらを省略すると *xpadding* と *ypadding* はデフォルト値の 0 になります。" - -#: ../source/layout.txt:261 -# 61c0ee71b85b4cc8b684b5a00ae594b3 -msgid "Changes the space between a given table row and the subsequent row." -msgstr "指定した *row* とその下の行との間隔を変更します。" - -#: ../source/layout.txt:265 -# 3584bf1fcd284f6493abd23b194925e8 -msgid "Alters the amount of space between a given table column and the following column." -msgstr "指定した *col* とその隣にある列との間隔を変更します。" - -#: ../source/layout.txt:270 -# 30b8114bca4c4e248b92f5ba5d25fe21 -msgid "Sets the space between every row in this table equal to *spacing*." -msgstr "このテーブルの中にある全ての行の間隔を *spacing* に変更します。" - -#: ../source/layout.txt:274 -# b86d1d80bb1c4a349f3ace1e45291803 -msgid "Sets the space between every column in this table equal to *spacing*." -msgstr "このテーブルの中にある全ての列の間隔を *spacing* に変更します。" - diff --git a/translations/ja/menus.po b/translations/ja/menus.po deleted file mode 100644 index dc1a88f..0000000 --- a/translations/ja/menus.po +++ /dev/null @@ -1,372 +0,0 @@ -# Japanese translation for menus.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-08 08:10\n" -"PO-Revision-Date: 2012-11-22 09:31+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/menus.txt:2 -# 5bb3b3f7925c421f8c1d64a86691fc12 -msgid "Menus" -msgstr "メニュー" - -#: ../source/menus.txt:4 -# bda8174b26d04c36b893b30f4f319e10 -msgid "GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which contains one or more :class:`Gtk.MenuItem` instances or one of its subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to commonly used functions of an application. Examples include creating a new document, printing a page or undoing an operation. It contains one or more instances of :class:`Gtk.ToolItem` or one of its subclasses." -msgstr "GTK+ には :class:`Gtk.MenuBar` (``メニューバー``) と :class:`Gtk.Toolbar` (``ツールバー``) の二種類のメニューが実装されています。 :class:`Gtk.MenuBar` は標準的なメニュー・バーで、一個以上の :class:`Gtk.MenuItem` (``メニュー項目``) クラス、またはそのサブクラスのインスタンスが格納されます。 :class:`Gtk.Toolbar` 型のウィジェットは任意のアプリケーションでよく利用する機能に素早くアクセスしてもらうために使用します。例えば、新しいドキュメントを作成したり、ページを印刷したり、なにか適用した操作を元に戻すなどがあります。このウィジェットには一個以上の :class:`Gtk.ToolItem` クラス、またはそのサブクラスのインスタンスが格納されます。" - -#: ../source/menus.txt:13 -# 8f2d8c8e8ab04f9883aeb5cae5aea2ba -msgid "Actions" -msgstr "いろいろなアクション" - -#: ../source/menus.txt:15 -# 9a8a7f2ab24c4bdbb5229c219cafb2d0 -msgid "Although, there are specific APIs to create menus and toolbars, you should use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map from names to :class:`Gtk.Action` objects. All actions that would make sense to use in a particular context should be in a single group. Multiple action groups may be used for a particular user interface. In fact, it is expected that most non-trivial applications will make use of multiple groups. For example, in an application that can edit multiple documents, one group holding global actions (e.g. quit, about, new), and one group per document holding actions that act on that document (eg. save, cut/copy/paste, etc). Each window's menus would be constructed from a combination of two action groups." -msgstr "メニューとツールバーを生成するための専用の API がいくつかありますが, :class:`Gtk.UIManager` を使って :class:`Gtk.Action` (``アクション``) 型のインスタンスを生成して下さい。それらのウィジェットに対するアクションはいくつかのグループに体系化されています。例えば :class:`Gtk.ActionGroup` クラスは原則的にメニュー・ウィジェットの名前から :class:`Gtk.Action` 型のオブジェクトにマッピングします。特定のコンテキストの中で使用することが分かっているアクションは、すべて単一のグループに登録して下さい。複数のアクションを含むグループは特定のユーザ・インタフェースで利用される場合があります。実際のところ、そのようなグループは複雑なアプリケーションで利用されることが想定されています。例えば複数のドキュメントを編集することができるアプリケーションの中で、あるグループがアプリケーション規模でのアクション (アプリケーションを終了したり、アプリケーションの情報を表示したり、ドキュメントを新規に生成するなど) を持ち、ドキュメント毎にグループを用意してドキュメント規模でのアクション (保存したり、選択範囲の切り取り/コピー/貼り付けを行うなど) を持ちます。各ウィンドウのメニューは二つのアクション・グループを組み合わせて生成されます。" - -#: ../source/menus.txt:27 -# 369ff6bb238b4b6b870b05a28aa6a0b8 -msgid "Different classes representing different types of actions exist:" -msgstr "いろいろな種類のアクションを表すクラスがそれぞれ提供されています::" - -#: ../source/menus.txt:29 -# 96eb2a04643f411e9be1e7dce244130a -msgid ":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar item" -msgstr ":class:`Gtk.Action`: メニューまたはツールバーの項目から実行することが可能なアクション" - -#: ../source/menus.txt:31 -# 901945ded98843749ff70fae6bd1e1cb -msgid ":class:`Gtk.ToggleAction`: An action which can be toggled between two states" -msgstr ":class:`Gtk.ToggleAction`: 二つの状態を切り替えることが可能なアクション" - -#: ../source/menus.txt:32 -# 14a2ed24089c43bfb7851737b93217e6 -msgid ":class:`Gtk.RadioAction`: An action of which only one in a group can be active" -msgstr ":class:`Gtk.RadioAction`: グループの中でどれか一つだけ有効にすることが可能なアクション" - -#: ../source/menus.txt:34 -# aeb7a20785c84b29830d0408f561b6d8 -msgid ":class:`Gtk.RecentAction`: An action of which represents a list of recently used files" -msgstr ":class:`Gtk.RecentAction`: 「最近開いたファイル」の一覧を表示するアクション" - -#: ../source/menus.txt:37 -# a4746e3b7e16487088abf9091184f9d5 -msgid "Actions represent operations that the user can be perform, along with some information how it should be presented in the interface, including its name (not for display), its label (for display), an accelerator, whether a label indicates a :ref:`stock item `, a tooltip, as well as the callback that is called when the action gets activated." -msgstr "これらのアクションはそれぞれユーザが実行できる操作を表すと共に、そのアクションの名前や表示用のラベルを含むユーザ・インタフェースとして表示のされ方、アクセラレータ、ラベルに :ref:`ストック・アイテム ` を表示するかどうか、ツールチップ、さらにはこのアクションが指定された時に呼びされるコールバック関数などの情報が含まれています。" - -#: ../source/menus.txt:43 -# b2b8962f91d74725a92f4bf927279a70 -msgid "You can create actions by either calling one of the constructors directly and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk.ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or by calling one of the convenience functions:" -msgstr "これらのアクションを生成するには、それぞれコンストラクタを直接呼び出してアクションを生成し :meth:`Gtk.ActionGroup.add_action` や :meth:`Gtk.ActionGroup.add_action_with_accel` を使って :class:`Gtk.ActionGroup` に追加するか、もしくは次に示すような簡易メソッドを呼び出します::" - -#: ../source/menus.txt:48 -# 467c5b8985bd49149635c3a832801641 -msgid ":meth:`Gtk.ActionGroup.add_actions`," -msgstr ":meth:`Gtk.ActionGroup.add_actions`" - -#: ../source/menus.txt:49 -# a9baa20b3f1a42718b8e2fe69fd56f29 -msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" -msgstr ":meth:`Gtk.ActionGroup.add_toggle_actions`" - -#: ../source/menus.txt:50 -# a5a6e00d932d41ff8518e2d5872ed9ff -msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." -msgstr ":meth:`Gtk.ActionGroup.add_radio_actions`" - -#: ../source/menus.txt:52 -# 35ba8d62fdc54cf6bbca92afb2274b3a -msgid "Note that you must specify actions for sub menus as well as menu items." -msgstr "なお、メニュー項目の他にサブ・メニューのアクションも指定する必要があるので注意して下さい。" - -#: ../source/menus.txt:55 -# 24c73f1f467d4b8baaae84f9f7dab487 -msgid "Action Objects" -msgstr "アクションのオブジェクト" - -#: ../source/menus.txt:59 -# 12919fc02e5f43a79168feb6b359d8a8 -msgid "*name* must be a unique name of the action." -msgstr "*name* は、このアクションを表す重複しない名前にして下さい。" - -#: ../source/menus.txt:61 -# ef9f26eac51144479a7654445b87015e -msgid "If *label* is not ``None``, it is displayed in menu items and on buttons." -msgstr "*label* が ``None`` でなければ、メニュー項目とボタンに表示されます。" - -#: ../source/menus.txt:63 -# 80f95c4c92cb47658380439609ba69ab -msgid "If *tooltip* is not ``None``, it is used as tooltip for the action." -msgstr "*tooltip* が ``None`` でなければ、アクションのツールチップとして使用します。" - -#: ../source/menus.txt:65 -# 7bc0e219d1c84a62a3c302d5d33b0955 -msgid "If *stock_id* is not ``None``, it is used to lookup the :ref:`stock item ` to display in widgets representing the action." -msgstr "*stock_id* が ``None`` でなければ、アクションを表すウィジェットの中に表示する :ref:`ストック・アイテム ` を検索する際にこのデータを使用します。" - -#: ../source/menus.txt:71 -# 48e7ad3bc11d4c36aad846abbc6b5444 -msgid "The arguments are the same as for the :class:`Gtk.Action` constructor." -msgstr "引数は :class:`Gtk.Action` クラスのコンストラクタと同じです。" - -#: ../source/menus.txt:75 -# 8f65362cd3464d7f91976a333a16e0fa -msgid "The first four arguments are the same as for the :class:`Gtk.Action` constructor." -msgstr "先頭から四つの引数は :class:`Gtk.Action` クラスのコンストラクタと同じです。" - -#: ../source/menus.txt:77 -# e23975427fd9411d8c781e86d21a02ff -msgid "*value* indicates the value which :meth:`get_current_value` should return if this action is selected." -msgstr "最後の引数の *value* は、このアクションが選択された時に :meth:`get_current_value` が返す値を表します。" - -#: ../source/menus.txt:82 -# 7e0172b0067443398478b5374b8b928e -msgid "Obtains the \"value\" property of the currently active member of the group to which this action belongs." -msgstr "このアクションが属している先のグループで現在アクティブなメンバが持つ \"value\" プロパティを返します。" - -#: ../source/menus.txt:87 -# 6ed435a700194df6bf8263f5e62138d1 -msgid "Joins this radio action object to the group of the *group_source* radio action object." -msgstr "このラジオボタン用のアクションを *group_source* が表すアクション・オブジェクトにに追加してグループ化します。" - -#: ../source/menus.txt:90 -# 5d3dad0633ea43a1ac02ddfec751654d -msgid "*group_source* must be a radio action object whose group we are joining, or ``None`` to remove the radio action from its group." -msgstr "*group_source* には追加する先のラジオボタン用のアクション・オブジェクトを指定するか、もしくは ``None`` を指定してそのアクション・グループからラジオボタン用のアクションを削除して下さい。" - -#: ../source/menus.txt:95 -# 3408dbfac9dc4f278781c988b0e9398c -msgid "Creates a new :class:`Gtk.ActionGroup` instance. The name of the action group is used when associating keybindings with the actions." -msgstr "新しい :class:`Gtk.ActionGroup` クラスのインスタンスを生成します。アクション・グループの *name* はこのアクション・グループとキーボードのキーを関連付ける際に使用します。" - -#: ../source/menus.txt:100 -# 84ddb942e1364243b9c3d7adafe401ef -msgid "Adds an :class:`Gtk.Action` object to the action group." -msgstr ":class:`Gtk.Action` 型のオブジェクトをアクション・グループに追加します。" - -#: ../source/menus.txt:102 -# 0e1ac9d7db1b4882906774e799012e72 -msgid "Note that this method does not set up the accelerator path of the action, use :meth:`add_action_with_accel` instead." -msgstr "このメソッドはアクションのアクセラレータ・パスをセットしないので注意して下さい。そのような場合は :meth:`Gtk.ActionGroup.add_action_with_accel` を使って下さい。" - -#: ../source/menus.txt:107 -# c8ea927137bf4a2d90630cb6d5eaeb43 -msgid "Adds an :class:`Gtk.Action` object to the action group and sets up the accelerator." -msgstr ":class:`Gtk.Action` 型のオブジェクトをアクション・グループに追加して、そのアクセラレータをセットします。" - -#: ../source/menus.txt:110 -# f6f571c991024d319503e38ee6c75c32 -msgid "*accelerator* must be in the format understood by :func:`Gtk.accelerator_parse`, or ``\"\"`` for no accelerator, or ``None`` to use the stock accelerator." -msgstr "*accelerator* は :func:`Gtk.accelerator_parse` で解釈できる書式にするか、もしくはアクセラレータを指定しない場合は ``\"\"`` 、もしくはデフォルトのアクセラレータを使用するのであれば ``None`` にして下さい。" - -#: ../source/menus.txt:115 -# d2fee4a2c17d4b2f9e870be358215297 -msgid "This is a convenience function to create a number of :class:`Gtk.Action` objects and add them to this action group." -msgstr "これは :class:`Gtk.Action` 型のオブジェクトをたくさん生成して、このアクション・グループに追加するオールインワンな関数の一つです。" - -#: ../source/menus.txt:118 -#: ../source/menus.txt:164 -# dea87118171c4fa29a1adfd65949b27a -# 4f7ff6adafff48fa9460799baa716432 -msgid "*entries* is a list of tuples which can vary in size from one to six items with the following information:" -msgstr "*entries* は1から6つの範囲内で次の情報を持つアイテムを格納したタプルです::" - -#: ../source/menus.txt:121 -#: ../source/menus.txt:143 -#: ../source/menus.txt:167 -# 53f2c1db29fd4125b9c9a7e6038ecc15 -# d5abd4a87f384f538a99e5c39b137a69 -# 72f1f9b6c0984458a6d2454127e7ce98 -msgid "The name of the action (mandatory)" -msgstr "アクションの名前 (必須)" - -#: ../source/menus.txt:122 -#: ../source/menus.txt:144 -#: ../source/menus.txt:168 -# 378b59ce3be44943a771b60dd6eb95a6 -# 497dfc82c1e14caeac14fd071b0229b1 -# d4f6bf8cdd764f4995d5ce9a6322fd56 -msgid "The :ref:`stock item ` of the action (default: ``None``)" -msgstr "アクションの :ref:`ストック・アイテム ` (デフォルト値: ``None``)" - -#: ../source/menus.txt:123 -#: ../source/menus.txt:145 -#: ../source/menus.txt:169 -# 6369cf31cc4740a8b0eee71bea9781ff -# a3f566d636c54e258ea80f40883ffe16 -# 825f5cf1979e49d7ad6e8b2aedb5a0f4 -msgid "The label for the action (default: ``None``)" -msgstr "アクションのラベル (デフォルト値: ``None``)" - -#: ../source/menus.txt:124 -#: ../source/menus.txt:146 -#: ../source/menus.txt:170 -# cdff68af72e44cc6900c713500a135dc -# 5e0300046a3a4e9baab7a1f83955072f -# c0d3184bc4e74695ab50d0ab60274b1d -msgid "The accelerator for the action, in the format understood by the :func:`Gtk.accelerator_parse` function (default: ``None``)" -msgstr "このアクションのアクセラレータを :func:`Gtk.accelerator_parse` メソッドで解釈できる書式で (デフォルト値: ``None``)" - -#: ../source/menus.txt:126 -#: ../source/menus.txt:148 -#: ../source/menus.txt:172 -# 7b774329412240b788815fc10d1bfa4c -# 90db59aa1411427c9fcb70da91cf90e7 -# e845ee8b92964471bf075e18df57cce8 -msgid "The tooltip of the action (default: ``None``)" -msgstr "アクションに表示するツールチップ (デフォルト値: ``None``)" - -#: ../source/menus.txt:127 -#: ../source/menus.txt:149 -# 21609cde18aa47eb8ca66dd204cff0df -# fd8dec065d184a2aae2d94e26f7fac61 -msgid "The callback function invoked when the action is activated (default: ``None``)" -msgstr "アクションを起動した時に呼び出されるコールバック関数 (デフォルト値: ``None``)" - -#: ../source/menus.txt:130 -#: ../source/menus.txt:154 -# a892aa7295c647d89747888d34b596d5 -# d77afa100150482182f6afd36173fa52 -msgid "The \"activate\" signals of the actions are connected to the callbacks." -msgstr "アクションが発行する \"activate\" というシグナルがいろいろなコールバック関数に接続されます。" - -#: ../source/menus.txt:132 -#: ../source/menus.txt:156 -#: ../source/menus.txt:180 -# caf44ebc1d704ea39726104eb9f38bb9 -# 33919b303fa643ae90ad90aefbeef93b -# d1a44399e1f6409d93ab957defd6893c -msgid "If *user_data* is not ``None``, it is passed to the callback function (if specified)." -msgstr "*user_data* が ``None`` でない場合、この値がコールバック関数の引数として渡されます (指定していた場合)。" - -#: ../source/menus.txt:137 -# d80a26127d954150a52f3f1255cbd075 -msgid "This is a convenience function to create a number of :class:`Gtk.ToggleAction` objects and add them to this action group." -msgstr "これは :class:`Gtk.ToggleAction` 型のオブジェクトをたくさん生成して、このアクション・グループに追加するオールインワンな関数の一つです。" - -#: ../source/menus.txt:140 -# 036c26ebb22d42f1bb05002c092763fb -msgid "*entries* is a list of tuples which can vary in size from one to seven items with the following information:" -msgstr "*entries* は1から7つの範囲内で次の情報を持つアイテムを格納したタプルです::" - -#: ../source/menus.txt:151 -# 94043046922f495ab87d44fba28f306e -msgid "A Boolean indicating whether the toggle action is active (default: ``False``)" -msgstr "論理値はトグルのアクションが有効かどうかを表します (デフォルト値: ``False``)" - -#: ../source/menus.txt:161 -# d82b24d114e644f28178f69b26aa5a8d -msgid "This is a convenience routine to create a group of :class:`Gtk.RadioAction` objects and add them to this action group." -msgstr "これは :class:`Gtk.RadioAction` 型のオブジェクトをたくさん生成して、このアクション・グループに追加するオールインワンな関数の一つです。" - -#: ../source/menus.txt:173 -# a729cb7cc6274edfa9527d74a7009e23 -msgid "The value to set on the radio action (default: 0)" -msgstr "ラジオのアクションにセットする値 (デフォルト値: 0)" - -#: ../source/menus.txt:175 -# 4590bc90069f486b83a128ece503b4fc -msgid "*value* specifies the radio action that should be set active." -msgstr "*value* は有効にすべきラジオのアクションを表します。" - -#: ../source/menus.txt:177 -# a68fd6be0ad24e34a1be9126776f695b -msgid "The \"changed\" signal of the first radio action is connected to the *on_change* callback (if specified)." -msgstr "一番目のラジオ・アクションが発行する \"changed\" というシグナルが *on_change* というコールバック関数に接続されます (必要であれば)。" - -#: ../source/menus.txt:185 -# a8c500c6aa494e39909735c5788930d4 -msgid "Parses a string representing an accelerator. The format looks like \"a\" or \"F1\" or \"z\" (the last one is for key release). The parser is fairly liberal and allows lower or upper case, and also abbreviations such as \"\" and \"\". For character keys the name is not the symbol, but the lowercase name, e.g. one would use \"minus\" instead of \"-\"." -msgstr "アクセラレータを表す文字列を解析します。解析できる書式は \"a\" や \"F1\" や \"z\" (最後の一つはキー押下の解放を表します) といった文字列です。ここで使用するパーサーは「公平中立」なものなので、大文字や小文字はもちろん \"\" とか \"\" といった省略形も解析できるようになっています。文字キーを指定する時は記号ではなく小文字にした名前にして下さい。例えば \"-\" ではなく \"minus\" という文字列にして下さい。" - -#: ../source/menus.txt:192 -# 00db88c011a84892bef4fdc79b820f26 -msgid "Returns a tuple ``(accelerator_key, accelerator_mods)``, where the latter represents the accelerator modifier mask and the first the accelerator keyval. Both values will be set to 0 (zero) if parsing failed." -msgstr "このメソッドは ``(accelerator_key, accelerator_mods)`` といったタプルを返します。後者の要素はアクセラレータ・キーに対する修飾キーのマスクを表し、前者の要素はアクセラレータ・キーの keyval です。解析に失敗した場合、これらの値は共に 0 (ゼロ) になります。" - -#: ../source/menus.txt:197 -# cab5dbd05c5d4d4596d3c56d2402ebd8 -msgid "UI Manager" -msgstr "UI マネージャ" - -#: ../source/menus.txt:199 -# 1a58079baf8b4827820f17318909ba92 -msgid ":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars using an `XML-like description `_." -msgstr ":class:`Gtk.UIManager` を使うと `XML-形式の定義 `_ から簡単にメニューやツールーバーを生成できます。" - -#: ../source/menus.txt:202 -# ec6ac404d2bb4f05aa35b8bf1cebb184 -msgid "First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good idea to tell the parent window to respond to the specified keyboard shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk.Window.add_accel_group`." -msgstr "まず :class:`Gtk.ActionGroup` を :meth:`Gtk.UIManager.insert_action_group` メソッドを使って UI マネージャに追加します。このとき :meth:`Gtk.UIManager.get_accel_group` と :meth:`Gtk.Window.add_accel_group` メソッドを使って特定のキーボード・ショートカットに対する応答を親ウィンドウに指示しておくと便利です。" - -#: ../source/menus.txt:207 -# 298e24d7a86c4d9099442a7b4c4d5cd2 -msgid "Then, you can define the actual visible layout of the menus and toolbars, and add the UI layout. This \"ui string\" uses an XML format, in which you should mention the names of the actions that you have already created. Remember that these names are just the identifiers that we used when creating the actions. They are not the text that the user will see in the menus and toolbars. We provided those human-readable names when we created the actions." -msgstr "それから、実際に表示するメニューとツールバーを定義して、その UI の配置を追加します。この \"UI の定義\" で XML の書式を使用し、その中で既に作成済みのアクションの名前を記述しておきます。それらの名前は単にアクションを生成する際に使用した識別子です。実際にメニューやツールバーの中に表示されるラベル (文字列) ではないという点に注意しておいて下さい。そのような文字列はアクションを生成した時に別途していました。" - -#: ../source/menus.txt:214 -# f1be0e12c3f54ce793ec8034167e2954 -msgid "Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` and add the widget to a container such as :class:`Gtk.Box`." -msgstr "最後に :meth:`Gtk.UIManager.get_widget` メソッドでルートのウィジェットを取得し、それを :class:`Gtk.Box` といったコンテナ・クラスのオブジェクトに追加します。" - -#: ../source/menus.txt:218 -# 841c0e872d494bc7bf5493cb8aca3cc5 -msgid "UIManager Objects" -msgstr "UIManager のオブジェクト" - -#: ../source/menus.txt:224 -# 40fba9aded27494795231c13ff14efd8 -msgid "Inserts an action group into the list of action groups associated with this manager. Actions in earlier groups hide actions with the same name in later groups." -msgstr "この UI マネージャに関連づけられているアクション・グループのリストに *action_group* を挿入します。挿入する前のアクション・グループの中で、挿入するアクションと同名のものがあれば前者のアクションが無効になります。" - -#: ../source/menus.txt:228 -# 09b4ded6c8914b9b8c261f3467a036a2 -msgid "*pos* is the position at which the group will be inserted. If omitted, it will be appended." -msgstr "*pos* はグループを挿入する位置です。省略すると、リストの最後に追加されます。" - -#: ../source/menus.txt:233 -# 3c793c27724c4a0b9ea72ecebe63a933 -msgid "Returns the group of global keyboard accelerators associated with this manager." -msgstr "この UI マネージャに関連づけられているアプリケーション規模で利用するキーボード・アクセラレータのグループを返します。" - -#: ../source/menus.txt:238 -# 371a11b6bea8417aa0815b9d49e493d3 -msgid "Looks up a widget by following a path. The path consists of the names specified in the XML description of the UI. separated by '/'. Elements which don't have a name or action attribute in the XML (e.g. ) can be addressed by their XML element name (e.g. \"popup\"). The root element (\"/ui\") can be omitted in the path." -msgstr "*path* に従ってウィジェットを検索します。この *path* には XML 形式で定義した UI の名前を '/' を句切り文字としてつなげた文字列になります。名前を持たない要素やアクションの属性 (例: ) の場合は、それらの XML 要素名 (例: \"popup\") を使って指定することができます。この *path* では、ルートの要素 (\"/ui\") は省略できます。" - -#: ../source/menus.txt:244 -# 0215e57551eb42fdb24aab94320cbc65 -msgid "Returns the widget found by following the *path*, or ``None`` if no widget was found." -msgstr "*path* が表すウィジェット、またはそのようなウィジェットが存在しなければ ``None`` を返します。" - -#: ../source/menus.txt:249 -# 82c017657b334b2cac6be0562549c021 -msgid "Parses *text* containing a `UI definition `_ and merges it with the current contents of manager. An enclosing element is added if it is missing." -msgstr "*text* に含まれている `UI 定義 `_ を解析し、この UI マネージャの UI 定義とマージします。終端要素の が存在しなければ自動的に追加されます。" - -#: ../source/menus.txt:253 -# 8518fefff3b84d57ab982d04c36bbeaf -msgid "Returns the merge id for the merged UI." -msgstr "マージした UI のマージ ID を返します。" - -#: ../source/menus.txt:255 -# 0a380d5a851e485291c13fea8f164f37 -msgid "Throws an exception if an error occurred." -msgstr "マージでエラーが発生した時は例外を発行します。" - -#: ../source/menus.txt:258 -# 2c742d305e9a41778286bab4debc2abf -msgid "Example" -msgstr "例" - diff --git a/translations/ja/objects.po b/translations/ja/objects.po deleted file mode 100644 index ad22945..0000000 --- a/translations/ja/objects.po +++ /dev/null @@ -1,337 +0,0 @@ -# Japanese translation for objects.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-15 21:36\n" -"PO-Revision-Date: 2012-12-30 22:11+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/objects.txt:4 -# 3db990f591384900970a3004578b0db9 -msgid "Objects" -msgstr "オブジェクト" - -#: ../source/objects.txt:6 -# 658158ec0e0c4be487c2fcc8b9e17163 -msgid "GObject is the fundamental type providing the common attributes and methods for all object types in GTK+, Pango and other libraries based on GObject. The :class:`GObject.GObject` class provides methods for object construction and destruction, property access methods, and signal support." -msgstr "GObject は GTK+ にある全てのオブジェクト型に共通な属性とメソッドを提供する基本型であり、Pango とその他のライブラリはこの GObject が基になっています。 :class:`GObject.GObject` というクラスがオブジェクトを生成したり破棄するメソッドやプロパティにアクセスするメソッド、シグナルのサポートを提供しています。" - -#: ../source/objects.txt:11 -# 26926408a20f41438e596f3dddee6456 -msgid "This section will introduce some important aspects about the GObject implementation in python." -msgstr "このセクションでは Python における GObject の実装について重要な部分をいくつか紹介します。" - -#: ../source/objects.txt:15 -# ec357baef5a743d78244bf31a773b40f -msgid "Inherit from GObject.GObject" -msgstr "GObject.GObject から派生させる" - -#: ../source/objects.txt:17 -# cdad83dad84746bbb9743eba14defd2a -msgid "A native GObject is accessible via :class:`GObject.GObject`. It is rarely intanciated directly, we generally use inherited class. A :class:`Gtk.Widget` is an inherited class of a :class:`GObject.GObject`. It may be interesting to make an inherited class to create a new widget, like a settings dialog." -msgstr "素の GObject には :class:`GObject.GObject` からアクセスできます。但し、この型から直接インスタンスを生成することはめったになく、一般的にはこの型から派生したクラスを使用します。例えば :class:`Gtk.Widget` は :class:`GObject.GObject` から派生したクラスの一つです。どちらかというとアプリを実装するよりも、設定ダイアログといった新しいウィジェットを生成するような派生クラスを作る方が面白いかもしれません。" - -#: ../source/objects.txt:22 -# 8460b87401044b34a25e58b718869807 -msgid "To inherit from :class:`GObject.GObject`, you must call :meth:`GObject.GObject.__init__` in your constructor (if the class inherits from :class:`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like in the example below:" -msgstr ":class:`GObject.GObject` から派生させるには、次の例のように、自分のクラスのコンストラクタで :meth:`GObject.GObject.__init__` を呼び出して下さい (もし自分のクラスが :class:`Gtk.Button` といったクラスから派生しているのであれば, :func:`Gtk.Button.__init__` を呼び出して下さい):" - -#: ../source/objects.txt:37 -# ffceaa73a26946f6aacb84e79e28a96f -msgid "Signals" -msgstr "いろいろなシグナル" - -#: ../source/objects.txt:39 -# 0736eb1ffd9546fcb676c46aee5c8bcb -msgid "Signals connect arbitrary application-specific events with any number of listeners. For example, in GTK+, every user event (keystroke or mouse move) is received from the X server and generates a GTK+ event under the form of a signal emission on a given object instance." -msgstr "シグナルはアプリケーション専用の任意のイベントに、それを受け取る側の番号を使って接続します。GTK+ の場合、ユーザ・イベント (例えばキー押下やマウスを移動するイベントなど) をXサーバから受け取る度に、指定したオブジェクトのインスタンス上でシグナル発行規則に従ったGTK+ のイベントを生成します。" - -#: ../source/objects.txt:44 -# d84f27e6bded41ca989a64181ff6b571 -msgid "Each signal is registered in the type system together with the type on which it can be emitted: users of the type are said to connect to the signal on a given type instance when they register a function to be invoked upon the signal emission. Users can also emit the signal by themselves or stop the emission of the signal from within one of the functions connected to the signal." -msgstr "各シグナルは、それを発行することができる型と共に GObject の型システムに登録されます (その型を利用する側では、シグナルが発行されると呼び出されるコールバック関数を登録する時に、指定した型のインスタンスに対して「シグナルを接続する」といいます)。さらに型を利用する側は自分自身でシグナルを発行したり、そのシグナルに接続している関数の中からシグナルの発行を停止することもできます。" - -#: ../source/objects.txt:51 -# 5798e3d5373d4c5cb8f67857319aaaa9 -msgid "Receive signals" -msgstr "シグナルを受信する" - -#: ../source/objects.txt:53 -# d4d1a5523be5461ea46c4be8d5cd8390 -msgid "See :ref:`signals`" -msgstr ":ref:`signals` を参照して下さい。" - -#: ../source/objects.txt:56 -# f86be5b95fdb4a0dbca1e2114917ee8f -msgid "Create new signals" -msgstr "新しいシグナルを作成する" - -#: ../source/objects.txt:58 -# dd43e6716cd7463fa63a6700f1133277 -msgid "New signals can be created by adding them to :attr:`GObject.GObject.__gsignals__`, a dictionary:" -msgstr "新しいシグナルは、それを :attr:`GObject.GObject.__gsignals__` というディクショナリに追加することで作成できます。" - -#: ../source/objects.txt:61 -# f5412431e3e04d1db2ff0bdea6dadb12 -msgid "When a new signal is created, a method handler can also be defined, it will be called each time the signal is emitted. It is called do_signal_name." -msgstr "新しいシグナルを作成する際は、任意のメソッド・ハンドラも一緒に定義できます (このハンドラはシグナルが発行される度に呼び出されます)。そのハンドラは ``do_シグナル名`` にして下さい:" - -#: ../source/objects.txt:75 -# dd29dd011ae94538a14098df6124b651 -msgid ":const:`GObject.SIGNAL_RUN_FIRST` indicates ths signal will invoke the object method handler (:meth:`do_my_signal` here) in the first emission stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler will be invoked in the third emission stage) and :const:`GObject.SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." -msgstr "ディクショナリの値として最初に渡している :const:`GObject.SIGNAL_RUN_FIRST` は、このシグナル発行の第一ステージにオブジェクトのメソッド・ハンドラ (上の例だと :meth:`do_my_signal`) を呼び出すという意味です。それ以外には, :const:`GObject.SIGNAL_RUN_LAST` (シグナル発行の第三ステージにメソッド・ハンドラを呼び出す) や :const:`GObject.SIGNAL_RUN_CLEANUP` (シグナル発行の最後のステージにメソッド・ハンドラを呼び出す) を指定できます。" - -#: ../source/objects.txt:81 -# c2cdda33e9884ba6b685d7498d2531cc -msgid "The second part, ``None``, indicates the return type of the signal, usually ``None``." -msgstr "同様に二番目に渡している値の ``None`` はシグナルの返り値の型ですが、通常は ``None`` にして下さい。" - -#: ../source/objects.txt:84 -# 110738f539564a00957b85a272baf544 -msgid "``(int,)`` indicates the signal arguments, here, the signal will only take one argument, whose type is int. This argument type list must end with a comma." -msgstr "同様に最後に渡している値の ``(int,)`` はシグナルが受け取る引数を表しており、上の例だとシグナルは一個だけ引数を受け取り、その型は int になります。ここで渡すことができるいろいろな引数の型はタプルに格納し、その終端はカンマ (,) にして下さい。" - -#: ../source/objects.txt:88 -# 7fdb745a3fc442c0803156b91017d365 -msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" -msgstr "シグナルは :meth:`GObject.GObject.emit` を使って発行します:" - -#: ../source/objects.txt:96 -# 858f4df565ff44b09f52be5d204d82db -msgid "Properties" -msgstr "いろいろなプロパティ" - -#: ../source/objects.txt:97 -# d3994a1adbcd4065a62d01ede1a5d768 -msgid "One of GObject's nice features is its generic get/set mechanism for object properties. Each class inherited from :class:`GObject.GObject` can define new properties. Each property as a type which never changes (e.g. str, float, int...). For instance, they are used for :class:`Gtk.Button` where there is a \"label\" property which contains the text of the button." -msgstr "GObject が提供してくれる素晴らしい機能の一つに、オブジェクトが持つプロパティにアクセスするための汎用的な set/get アクセッサのメカニズムがあります。 :class:`GObject.GObject` から派生したクラスはそれぞれ新しいプロパティを定義できます。プロパティの型は変更できません (例: str, float, int...)。 例えば、プロパティの型は (ボタンに表示する文字列を格納した) \"label\" プロパティを持つ :class:`Gtk.Button` で使用されます。" - -#: ../source/objects.txt:104 -# b5af4768c8de42f4916df5fb43c98727 -msgid "Use existing properties" -msgstr "既存のプロパティを使用する" - -#: ../source/objects.txt:106 -# c30b47a18cb94150b827b2bbc9ff70aa -msgid "The class :class:`GObject.GObject` provides several useful functions to manage existing properties, :func:`GObject.GObject.get_property` and :func:`GObject.GObject.set_property`." -msgstr ":class:`GObject.GObject` クラスは既存のプロパティを管理するための便利なメソッドをいくつか提供しています。例えば :func:`GObject.GObject.get_property` と :func:`GObject.GObject.set_property` です。" - -#: ../source/objects.txt:109 -# efeb295dba5249f797cbd75614b23ebe -msgid "Some properties also have functions dedicated to them, called getter and setter. For the property \"label\" of a button, there are two functions to get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button.set_label`." -msgstr "さらにプロパティの中には自分自身にアクセスするためのメソッド、すなわち getter と setter 呼ばれる関数を用意しているものもあります。例えばボタンの \"label\" というプロパティには、このラベルのデータを取得したり指定するための関数として :func:`Gtk.Button.get_label` と :func:`Gtk.Button.set_label` があります。" - -#: ../source/objects.txt:114 -# b1947cd0255e4418820f97502e73caa6 -msgid "Create new properties" -msgstr "新しいプロパティを作成する" - -#: ../source/objects.txt:116 -# f27cd12e834d41749b975ad76c98b825 -msgid "A property is defined with a name and a type. Even is python itself is dynamically typed, you can't change the type of a property once it is defined. A property can be created using :func:`GObject.property`." -msgstr "一個のプロパティは一個の名前と一個の型で定義されます。Python 自身が動的な型づけを行っているため、一度プロパティを定義したらその型は変更できません。プロパティは :func:`GObject.property` を使って作成します。" - -#: ../source/objects.txt:131 -# a2548e3d5e764845a6f97207f7afb4f5 -msgid "Properties can also be readonly, if you want some properties to be readable but not writable. To do so, you can add some flags to the property definition, to control read/write access. Flags are :const:`GObject.PARAM_READABLE` (only read access for external code), :const:`GObject.PARAM_WRITABLE` (only write access), :const:`GObject.PARAM_READWRITE` (public):" -msgstr "さらに読み込みは可能だが書き込みできないプロパティが欲しいといった場合、読み込み専用のプロパティにする機能もあります。そのような場合、いくつかのフラグをプロパティの定義に追加して、読み込みまたは書き込みのアクセスを制御できます。指定できるフラグには :const:`GObject.PARAM_READABLE` (外部からのアクセスは読み込みだけ), :const:`GObject.PARAM_WRITABLE` (書き込みだけ), :const:`GObject.PARAM_READWRITE` (読み書き可) があります:" - -#: ../source/objects.txt:146 -# 5f3179dbcc4d47dc816dfb52d0492de2 -msgid "You can also define new read-only properties with a new method decorated with :func:`GObject.property`:" -msgstr "さらに :func:`GObject.property` で修飾された新しいメソッドを使って読み込み専用のプロパティを定義することも可能です:" - -#: ../source/objects.txt:162 -# 17a55fcf0c024885b9e7feb4c116646a -msgid "You can get this property using:" -msgstr "このプロパティは次のようにして取得します:" - -#: ../source/objects.txt:170 -# 3267268c7cbf4cfdaffd420fa4907b1b -msgid "There is also a way to define minimum and maximum values for numbers, using a more verbose form:" -msgstr "また、もっと冗長な書式でプロパティの数値の最小値と最大値を定義する方法もあります:" - -#: ../source/objects.txt:206 -# 012166283f964d8498670ac626242017 -msgid "Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a dictionary, and handled in do_get_property and do_set_property." -msgstr "プロパティは :attr:`GObject.GObject.__gproperties__` というディクショナリの中に定義し ``do_get_property()`` と ``do_set_property()`` というメソッドの中で処理するようにして下さい。" - -#: ../source/objects.txt:210 -# f518f996bac444dab6c6bd5fce60d3f7 -msgid "Watch properties" -msgstr "プロパティを監視する" - -#: ../source/objects.txt:212 -# 5a85f3cc249f4c55afd1f88ee6a6b0bc -msgid "When a property is modified, a signal is emitted, whose name is \"notify::property_name\":" -msgstr "プロパティが変更されると、\"``notify::property_name``\" というシグナルが自動的に発行されます:" - -#: ../source/objects.txt:227 -# d7c8dfa879d34508809030da3ccab05c -msgid "API" -msgstr "API" - -#: ../source/objects.txt:233 -# d65be065d77e4af6a111cf76e71ce94a -msgid "Retrieves a property value." -msgstr "プロパティの値を取得します。" - -#: ../source/objects.txt:237 -# cff5053caaf348298cfb785b567358a4 -msgid "Set property *property_name* to *value*." -msgstr "*property_name* の名前を持つプロパティの値を *value* にします。" - -#: ../source/objects.txt:241 -# b6b6ce72be674df4952ce6854a109478 -msgid "Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal is of type ``(int,)``, it must be emitted with::" -msgstr "*signal_name* というシグナルを発行します。シグナルの引数は次の規則に従って下さい: 例えば ``(int,)`` 型の引数を受け取る場合、次のような書式で発行する::" - -#: ../source/objects.txt:248 -# 7a8d1b7d0b2a4178b25f4f0f97ef28a3 -msgid "This method freezes all the \"notify::\" signals (which are emitted when any property is changed) until the :meth:`thaw_notify` method is called." -msgstr "このメソッドは (プロパティが変更されると発行される) \"notify::\" 系のシグナルを :meth:`GObject.GObject.thaw_notify` メソッドが呼び出されるまで全て凍結します。" - -#: ../source/objects.txt:252 -# 79f7d3aacb644e42a9294e073ce8665f -msgid "It recommended to use the *with* statement when calling :meth:`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called implicitly at the end of the block::" -msgstr ":meth:`GObject.GObject.freeze_notify` メソッドを呼び出す際に、ブロックの最後で暗黙的に :meth:`GObject.GObject.thaw_notify` を呼び出すようなコードと「一緒に」使用することをお薦めします。" - -#: ../source/objects.txt:262 -# 3ef8fe736270474bb17fd24a82bc7cf8 -msgid "Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." -msgstr ":meth:`GObject.GObject.freeze_notify` によって発行が凍結されていた全ての \"notify::\" シグナルを再び発行できるようにします。" - -#: ../source/objects.txt:264 -# a87e65fb6cc74fe59b5338e5ed2942d9 -msgid "It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:`freeze_notify` together with the *with* statement." -msgstr "明示的な :meth:`GObject.GObject.thaw_notify` の呼び出しは推奨していませんが、使用する時は :meth:`GObject.GObject.freeze_notify` を呼び出した回数と同じだけ呼び出して下さい。" - -#: ../source/objects.txt:269 -# f5676b052cd240a1b4bddfd323ed4d2a -msgid "Blocks a handler of an instance so it will not be called during any signal emissions unless :meth:`handler_unblock` is called for that *handler_id*. Thus \"blocking\" a signal handler means to temporarily deactivate it, a signal handler has to be unblocked exactly the same amount of times it has been blocked before to become active again." -msgstr "インスタンス上でシグナル・ハンドラの呼び出しをブロックするので、 :meth:`GObject.GObject.handler_unblock` がその *handler_id* に対して呼び出されるまで、全てのシグナルのハンドラは呼び出されなくなります。このように「ブロック中」のシグナル・ハンドラは一時的にハンドラの呼び出しを無効にするので、再び有効にするにはブロックした回数と同じ回数だけ実際にブロックを解除する必要があります。" - -#: ../source/objects.txt:275 -# c43c8bf7670b4434a2b3f2e219cfa2b3 -msgid "It is recommended to use :meth:`handler_block` in conjunction with the *with* statement which will call :meth:`handler_unblock` implicitly at the end of the block::" -msgstr "ブロックの最後で明示的に :meth:`GObject.GObject.handler_unblock` を呼び出すようなコードと「一緒に」 :meth:`GObject.GObject.handler_block` を呼び出すことを推奨します。" - -#: ../source/objects.txt:285 -# 60e53f1ded6b4126b81cebf31c1609c2 -msgid "Undoes the effect of :meth:`handler_block`. A blocked handler is skipped during signal emissions and will not be invoked until it has been unblocked exactly the amount of times it has been blocked before." -msgstr ":meth:`handler_block` を呼び出す前の状態に戻します。シグナルが発行されている間、ブロックされていたハンドラの呼び出しはスキップされ、ブロックした回数を同じだけブロックを解除するまで呼び出されません。" - -#: ../source/objects.txt:289 -# 81e50675cec94468b1f9054d2430136b -msgid "It is recommended to not call :meth:`handler_unblock` explicitly but use :meth:`handler_block` together with the *with* statement." -msgstr "明示的な :meth:`GObject.GObject.handler_unblock` の呼び出しは推奨していませんが、使用する時は :meth:`GObject.GObject.handler_block` を呼び出した回数と同じだけ呼び出して下さい。" - -#: ../source/objects.txt:294 -# 81869fa7321145479cc48e23b225b0a1 -msgid "A dictionary where inherited class can define new signals." -msgstr "派生したクラスが新しいシグナルを定義することができるディクショナリです。" - -#: ../source/objects.txt:296 -# 92fe9f9bb39d4e91bda0484e2ed54fa7 -msgid "Each element in the dictionary is a new signal. The key is the signal name. The value is a tuple, with the form::" -msgstr "ディクショナリの要素はそれぞれ新しいシグナルです。ディクショナリのキーがシグナルの名前になります。ディクショナリの値は一個のタプルで、次のような形式になります::" - -#: ../source/objects.txt:301 -# 47db2b95e2c14fa098f557e11ae10af0 -msgid ":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject.SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the return type of the signal. ``(int,)`` is the list of the parameters of the signal, it must end with a comma." -msgstr ":const:`GObject.SIGNAL_RUN_FIRST` は :const:`GObject.SIGNAL_RUN_LAST` または :const:`GObject.SIGNAL_RUN_CLEANUP` で置き換えることが可能です。 ``None`` はシグナルの返り値の型です。 ``(int,)`` はシグナルの引数を要素とするリストで、終端はカンマにして下さい。" - -#: ../source/objects.txt:310 -# 8cdea64534694c9bb52009524d58e0df -msgid "The :attr:`__gproperties__` dictionary is a class property where you define the properties of your object. This is not the recommend way to define new properties, the method written above is much less verbose. The benefits of this method is that a property can be defined with more settings, like the minimum or the maximum for numbers." -msgstr ":attr:`__gproperties__` というディクショナリは、オブジェクトが持ついろいろなプロパティを格納しているクラス・プロパティです。これは新しいプロパティを定義する方法としては推奨していない方法であり、上記の例はそれほど冗長なものではありません。このメソッドの利点は、プロパティをたくさんの設定値と一緒に定義できることです (例えば数値の最大値や最小値も一緒に定義する場合)。" - -#: ../source/objects.txt:316 -# ea680747131e4077a0ef43c69af1091a -msgid "The key is the name of the property" -msgstr "このディクショナリのキーはプロパティの名前です。" - -#: ../source/objects.txt:318 -# 4df02927da114a28897d9db81b150d85 -msgid "The value is a tuple which describe the property. The number of elements of this tuple depends on its first element but the tuple will always contain at least the following items:" -msgstr "このディクショナリの値はプロパティの詳細を記述した一個のタプルです。このタプルの要素の数は一番先頭のプロパティに依存しますが、少なくとも次のようなアイテムが常に含まれています:" - -#: ../source/objects.txt:322 -# dd65a68d42e94dfe9557f1d7633e77bc -msgid "The first element is the property's type (e.g. ``int``, ``float``...)." -msgstr "最初の要素はプロパティの型 (例 ``int``, ``float``...) です。" - -#: ../source/objects.txt:324 -# 936e41c9eebb4cc2b05c4c7d2c2d9d4f -msgid "The second element is the property's nick name, which is a string with a short description of the property. This is generally used by programs with strong introspection capabilities, like the graphical user interface builder `Glade`_." -msgstr "二番目の要素はプロパティのニックネームで、プロパティの内容を短く説明した文字列です。この要素は通常は強力なイントロスペクションの機能を持ったプログラム (例えばグラフィカル・ユーザ・インタフェース・ビルダの `Glade `_) が利用します。" - -#: ../source/objects.txt:329 -# 760d876ac533479bb2765385e5d0bd07 -msgid "The third one is the property's description or blurb, which is another string with a longer description of the property. Also used by `Glade`_ and similar programs." -msgstr "三番目の要素はプロパティの説明または内容紹介で、プロパティの内容を長い文字列で記述したものです。これも `Glade `_ やそれに類するプログラムが使用します。" - -#: ../source/objects.txt:333 -# 6190fa4de2954878bb4b77caaccfec59 -msgid "The last one (which is not necessarily the forth one as we will see later) is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject.PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." -msgstr "最後の要素はプロパティのフラグです (これ以降の要素は後述します): :const:`GObject.PARAM_READABLE`, :const:`GObject.PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`" - -#: ../source/objects.txt:337 -# d1ec787d40a84c298528924ce61f3665 -msgid "The absolute length of the tuple depends on the property type (the first element of the tuple). Thus we have the following situations:" -msgstr "タプルの長さはプロパティの型 (このタプルの先頭の要素) に依存します。そのため次のような状態が考えられます:" - -#: ../source/objects.txt:340 -# d7de597a67914d44a2ce61cb9fcc20b1 -msgid "If the type is ``bool`` or ``str``, the forth element is the default value of the property." -msgstr "プロパティの型が ``bool`` または ``str`` の場合、四番目の要素はプロパティのデフォルト値になります。" - -#: ../source/objects.txt:343 -# 95ee2ced6c72422f95ecc4603e1308f6 -msgid "If the type is ``int`` or ``float``, the forth element is the minimum accepted value, the fifth element is the maximum accepted value and the sixth element is the default value." -msgstr "プロパティの型が ``int`` または ``float`` の場合、四番目の要素は最小値を、五番目の要素は最大値を、そして六番目の要素はデフォルト値をそれぞれ表します。" - -#: ../source/objects.txt:347 -# 1013c4f5be17400bbcda058136a246b6 -msgid "If the type is not one of these, there is no extra element." -msgstr "プロパティの型がそれ以外の場合、追加の要素はありません。" - -#: ../source/objects.txt:352 -# 16957ef9f54a4a74a032c26df4990725 -msgid "Invoke the object method handler in the first emission stage." -msgstr "一番最初のシグナル発行ステージでハンドラを呼び出します。" - -#: ../source/objects.txt:356 -# 332fa8022b4b4b9c969b25428e9e5eca -msgid "Invoke the object method handler in the third emission stage." -msgstr "三番目のシグナル発行ステージでハンドラを呼び出します。" - -#: ../source/objects.txt:360 -# 13c3ce9f908d4d17ac9d3db8a549bd06 -msgid "Invoke the object method handler in the last emission stage." -msgstr "最後のシグナル発行ステージでハンドラを呼び出します。" - -#: ../source/objects.txt:364 -# 7a9bae12c7f14d4c9e7a382d454da395 -msgid "The property is readable." -msgstr "プロパティは読み込み専用です。" - -#: ../source/objects.txt:368 -# 0a8a0de30c974197b232c9bb0604687f -msgid "The property is writable." -msgstr "プロパティは書き込み専用です。" - -#: ../source/objects.txt:372 -# acfdf4463ac5478584ee2144c0f1b2a2 -msgid "The property is readable and writable." -msgstr "プロパティは読み込みと書き込みが可能です。" - diff --git a/translations/ja/progressbar.po b/translations/ja/progressbar.po deleted file mode 100644 index 7a51393..0000000 --- a/translations/ja/progressbar.po +++ /dev/null @@ -1,97 +0,0 @@ -# Japanese translation for progressbar.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 22:27+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/progressbar.txt:2 -# f4ed7b1cdcc84c8886927c0d49cabde8 -msgid "ProgressBar" -msgstr "プログレスバー" - -#: ../source/progressbar.txt:4 -# c0b41dafdd1146a79c71876f06a6ba70 -msgid "The :class:`Gtk.ProgressBar` is typically used to display the progress of a long running operation. It provides a visual clue that processing is underway. The :class:`Gtk.ProgressBar` can be used in two different modes: *percentage mode* and *activity mode*." -msgstr ":class:`Gtk.ProgressBar` は一般的に時間のかかる処理の進行状況を表示する際に使用されます。このクラスは、処理が進行中かどうかに関する視覚的なヒントを提供してくれます。 :class:`Gtk.ProgressBar` には二種類のモードがあります: それは ``百分率モード`` (*percentage mode*) と ``アクティビティ・モード`` (*activity mode*) です。" - -#: ../source/progressbar.txt:9 -# 6ad5ffcc17574d25b83f327ad458f480 -msgid "When an application can determine how much work needs to take place (e.g. read a fixed number of bytes from a file) and can monitor its progress, it can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees a growing bar indicating the percentage of the work that has been completed. In this mode, the application is required to call :meth:`Gtk.ProgressBar.set_fraction` periodically to update the progress bar, passing a float between 0 and 1 to provide the new percentage value." -msgstr "アプリケーションが (例えば、ファイルから任意のバイト数を読み込むなど) 何か行動を起こし、その進行状況を監視できる場合に :class:`Gtk.ProgressBar` を ``百分率モード`` で使用することで、ユーザはその処理が何パーセント完了しているかを示すバー (プログレスバー) が伸びていく様子を確認できます。このモードで、アプリケーションは周期的に :meth:`Gtk.ProgressBar.set_fraction` メソッドを呼び出してプログレスバーを更新する必要があります。このメソッドの引数は、新しい百分率の値を表す 0 から 1 までの実数値です。" - -#: ../source/progressbar.txt:17 -# c798c8b4ce2b4de39f852d8ed3b3f39f -msgid "When an application has no accurate way of knowing the amount of work to do, it can use *activity mode*, which shows activity by a block moving back and forth within the progress area. In this mode, the application is required to call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. You can also choose the step size, with the :meth:`Gtk.ProgressBar.set_pulse_step` method." -msgstr "アプリケーションで処理がどれくらい進んでいるかを知るための妥当な方法を持ち合わせていない場合は ``アクティビティ・モード`` を使います。これは一個のブロックがプログレスバーの中で行ったり来たりすることで、現在処理が進行中であることを示します。このモードで、アプリケーションは周期的に :meth:`Gtk.ProgressBar.pulse` メソッドを呼び出してプログレスバーを更新する必要があります。さらに :meth:`Gtk.ProgressBar.set_pulse_step` メソッドを使ってブロックを移動させる割合を選ぶことができます。" - -#: ../source/progressbar.txt:24 -# 4db123a6d4cd41b8ac51ba130fe9f1d4 -msgid "By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but you can change it to a vertical progress bar by using the :meth:`Gtk.ProgressBar.set_orientation` method. Changing the direction the progress bar grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk.ProgressBar` can also contain text which can be set by calling :meth:`Gtk.ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." -msgstr "デフォルトで :class:`Gtk.ProgressBar` クラスは横向きで左から右へ伸びるプログレスバーを提供しますが :meth:`Gtk.ProgressBar.set_orientation` メソッドを使って縦向きのプログレスバーに変更することも可能です。プログレスバーが伸びていく向きを変更する場合は :meth:`Gtk.ProgressBar.set_inverted` メソッドを使用します。さらに :meth:`Gtk.ProgressBar.set_text` と :meth:`Gtk.ProgressBar.set_show_text` メソッドを呼び出して :class:`Gtk.ProgressBar` の中に文字列を表示することも可能です。" - -#: ../source/progressbar.txt:32 -# 6a43ae17099f4929aa6b45df9be5cf05 -msgid "ProgressBar Objects" -msgstr "プログレスバーのオブジェクト" - -#: ../source/progressbar.txt:38 -# b57c1c7d8bf643bfb73c74e166dab837 -msgid "Causes the progress bar to \"fill in\" the given fraction of the bar. *fraction* should be between 0.0 and 1.0, inclusive." -msgstr "プログレスバー全体に対して *fractoin* 分までバーを伸ばします。 *fraction* は 0.0 から 1.0 内に収めて下さい。" - -#: ../source/progressbar.txt:43 -# c4c8e380109b450b9d2eb247dff5e525 -msgid "Sets the fraction of total progress bar length to move the bouncing block for each call to :meth:`pulse`." -msgstr "プログレスバー全体に対して :meth:`Gtk.ProgressBar.pulse` メソッドを呼び出すたびにブロックを移動する割合を指定します。" - -#: ../source/progressbar.txt:48 -# 831f129b60d9472980ba166e5cdcdbef -msgid "Indicates that some progress is made, but you don't know how much. Causes the progress bar to enter *activity mode*, where a block bounces back and forth. Each call to :meth:`pulse` causes the block to move by a little bit (the amount of movement per pulse is determined by :meth:`set_pulse_step`)." -msgstr "何か処理が進行中であるが、どれくらい進行しているか分からないという旨を宣言します。そして、プログレスバーをアクティブモードにして、ブロックを前後に移動させます。 :meth:`Gtk.ProgressBar.pulse` メソッドを呼び出すたびに、ブロックを少しだけ移動します (ここで移動する量は :meth:`Gtk.ProgressBar.set_pulse_step` メソッドで決定します)。" - -#: ../source/progressbar.txt:56 -# 71a917b38c0b4c09856a347355efb66f -msgid "Sets the orientation. *orientation* can be one of" -msgstr "プログレスバーの向きを指定します。 *orientation* は次のいずれかになります:" - -#: ../source/progressbar.txt:58 -# 51a63f171d5f47fe945847dbee06bb37 -msgid ":attr:`Gtk.Orientation.HORIZONTAL`" -msgstr ":attr:`Gtk.Orientation.HORIZONTAL`" - -#: ../source/progressbar.txt:59 -# 1574396461e74241877632a5db6ea4e4 -msgid ":attr:`Gtk.Orientation.VERTICAL`" -msgstr ":attr:`Gtk.Orientation.VERTICAL`" - -#: ../source/progressbar.txt:63 -# 4f8a007557e749f6aef7d63d56f16310 -msgid "Sets whether the progressbar will show text superimposed over the bar. The shown text is either the value of the \"text\" property or, if that is ``None``, the \"fraction\" value, as a percentage." -msgstr "プログレスバーのバーの上に文字列を重ねて表示するかどうかを指定します。表示する文字列は \"text\" プロパティの値か、もしくはそのプロパティが ``None`` の場合は \"fraction\" プロパティの値 (百分率) になります。" - -#: ../source/progressbar.txt:69 -# 7188bc66d0ce41ebbcb1c3605e33977a -msgid "Causes the given *text* to appear superimposed on the progress bar." -msgstr "プログレスバーのバーの上に *text* を重ねて表示します。" - -#: ../source/progressbar.txt:73 -# d7ac1838a0954ecb84850cc5aa4958bb -msgid "Progress bars normally grow from top to bottom or left to right. Inverted progress bars grow in the opposite direction." -msgstr "デフォルトでプログレスバーは上から下へ、または左から右へ伸びていきます。このメソッドは、これとは逆向きにプログレスバーを伸ばすようにします。" - -#: ../source/progressbar.txt:77 -# c374bf62a5da45b2909d70755ff154e0 -msgid "Example" -msgstr "例" - diff --git a/translations/ja/spinner.po b/translations/ja/spinner.po deleted file mode 100644 index 4b162e0..0000000 --- a/translations/ja/spinner.po +++ /dev/null @@ -1,52 +0,0 @@ -# Japanese translation for spinner.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 16:35+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/spinner.txt:2 -# ab57237b51a042ac98ad3dcd89640a9e -msgid "Spinner" -msgstr "スピナー" - -#: ../source/spinner.txt:4 -# 4fc08ac28a8e491796ff772caa52f93c -msgid "The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is often used as an alternative to a :class:`GtkProgressBar` for displaying indefinite activity, instead of actual progress." -msgstr ":class:`Gtk.Spinner` はアイコンと同じ大きさで回転するアニメーションを表示します。これは、いつ終わるかわからない処理のアクティビティを表す時に :class:`Gtk.ProgressBar` の代替えウィジェットとしてよく使用されます。" - -#: ../source/spinner.txt:8 -# dc0272015b7441ac98728c20c2abe99f -msgid "To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:`Gtk.Spinner.stop`." -msgstr "アニメーションの表示を開始する際は :meth:`Gtk.Spinner.start` メソッドを使い、停止する際は :meth:`Gtk.Spinner.stop` メソッドを使います。" - -#: ../source/spinner.txt:12 -# 5afba8f8fd7c450591a785483fa1f3d9 -msgid "Spinner Objects" -msgstr "スピナーのオブジェクト" - -#: ../source/spinner.txt:18 -# 9274013f79de407f9b17ff4aad0dd24b -msgid "Starts the animation of the spinner." -msgstr "スピナーのアニメーション表示を開始します。" - -#: ../source/spinner.txt:22 -# 9b14c79798b2491696c2b008a636327d -msgid "Stops the animation of the spinner." -msgstr "スピナーのアニメーション表示を停止します。" - -#: ../source/spinner.txt:25 -# dc224e13003149b49bffab5684dbcfb1 -msgid "Example" -msgstr "例" - diff --git a/translations/ja/stock.po b/translations/ja/stock.po deleted file mode 100644 index 82f411b..0000000 --- a/translations/ja/stock.po +++ /dev/null @@ -1,97 +0,0 @@ -# Japanese translation for stock.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-11 18:22+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/stock.txt:4 -# bf3a6dc9beb2451987559f38785f3577 -msgid "Stock Items" -msgstr "ストック・アイテム" - -#: ../source/stock.txt:6 -# ba0ccb4f7f9a446a993309c3ba1f32e2 -msgid "Stock items represent commonly-used menu or toolbar items such as \"Open\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are provided to avoid typing mistakes in the strings." -msgstr "ストック・アイテムは \"開く\" とか \"終了\" といった一般的に使用するメニューやツールバーのアイテムを表します。ストック・アイテムはそれぞれ ``ストック ID`` (*Stock ID*) という識別子を持っています。ストック ID は単なる文字列の集合ですが、文字列の綴り間違いなどを未然に防ぐ目的で :attr:`Gtk.STOCK_OPEN` のような定数として提供されています。" - -#: ../source/stock.txt:141 -#: ../source/stock.txt:151 -#: ../source/stock.txt:165 -#: ../source/stock.txt:179 -#: ../source/stock.txt:209 -#: ../source/stock.txt:227 -#: ../source/stock.txt:261 -#: ../source/stock.txt:271 -#: ../source/stock.txt:285 -#: ../source/stock.txt:295 -#: ../source/stock.txt:309 -#: ../source/stock.txt:403 -#: ../source/stock.txt:421 -#: ../source/stock.txt:471 -#: ../source/stock.txt:485 -#: ../source/stock.txt:495 -# 8f975303397c4d77b020f5794e5e9187 -# 5942e9cbbc0a491e9e966137af0db9d2 -# 8cab4d65a3a246e5a13417c0cf42dd02 -# c399ad167bf04651bcffbb959599e953 -# f5488de0de624cee9df96df4313980c3 -# 9584875fa5e4431da70f74d4326d321d -# bad24de2b65e431bb26c2bfffd29fe52 -# e78628793a7b4edfb9473a060ed74c84 -# cb52290aaf934241bb17c80a9fd9d165 -# 156839a82c5a4e23a77ed0a90ca4c72c -# 4e99f721c3854d04b2ee887ae92f444b -# 85a7ad36c0bb4ae7b554eaecf594a790 -# 3b667533093d4c228b048866f9d4b2e5 -# 8372b28acef0441ba1953c7edb6f3c18 -# 83f98b9b5ff7458ba58502f671d61d6d -# 5c5e4944dfd742ccabc05d449bd6e1b0 -msgid "LTR variant:" -msgstr "LTR (左から右へ描画する) 系:" - -#: ../source/stock.txt:145 -#: ../source/stock.txt:155 -#: ../source/stock.txt:169 -#: ../source/stock.txt:183 -#: ../source/stock.txt:213 -#: ../source/stock.txt:231 -#: ../source/stock.txt:265 -#: ../source/stock.txt:275 -#: ../source/stock.txt:289 -#: ../source/stock.txt:299 -#: ../source/stock.txt:313 -#: ../source/stock.txt:407 -#: ../source/stock.txt:425 -#: ../source/stock.txt:475 -#: ../source/stock.txt:489 -#: ../source/stock.txt:499 -# e631980546014100aab24c5bf447d3e5 -# 2368f205ed264296a301e1c02eef6a88 -# 63886cfdf1f34519a9cba98e74376b35 -# f2565ef43071471d8d21c118d734567c -# e4226a1d665e43cfbebc5ebf8e4ac378 -# ee5a9e8b544b4e38bf8621a29c81089a -# edac34b69d3c46788cfb6aa5a392f869 -# dc0d2b46a6c14a3dad33691cd699a1c4 -# 271fcdf1dcce4b2ab53046105f0a655c -# e59e05096789435081de41a62e562098 -# 69d5036a4709468880490a4efc93fa02 -# bc84390a535c49f4a8020dbcd1b83066 -# bab8c2c466214916854982c2a7156766 -# a4cc966ea1ee447fbaba19f6c1ef152b -# eec4a7989fd74c85a2657ae21bc424fa -# d3960a9a86654d2e879ad0b6c5f55a08 -msgid "RTL variant:" -msgstr "RTL (右から左へ描画する) 系:" - diff --git a/translations/ja/textview.po b/translations/ja/textview.po deleted file mode 100644 index 131fafa..0000000 --- a/translations/ja/textview.po +++ /dev/null @@ -1,674 +0,0 @@ -# Japanese translation for textview.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-15 21:36\n" -"PO-Revision-Date: 2012-12-15 21:40+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Language-Team: Japanese \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -# cea0fc9dcc17484981b47407e7b1f227 -#: ../source/textview.txt:2 -msgid "Multiline Text Editor" -msgstr "複数行のテキスト・エディタ" - -# f895464a6a8741e796803cda72a222cc -#: ../source/textview.txt:4 -msgid "" -"The :class:`Gtk.TextView` widget can be used to display and edit large " -"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" -"view design. In this case the :class:`Gtk.TextBuffer` is the model which " -"represents the text being edited. This allows two or more :class:`Gtk." -"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " -"those text buffers to be displayed slightly differently. Or you could " -"maintain several text buffers and choose to display each one at different " -"times in the same :class:`Gtk.TextView` widget." -msgstr "" -":class:`Gtk.TextView` (``テキスト・ビュー``) ウィジェットは大量の整形された文" -"章を表示したり編集する際に使用することができます。 :class:`Gtk.TreeView` のよ" -"うに、このウィジェットも「モデル/ビュー設計」を採用しています。このウィジェッ" -"トでは :class:`Gtk.TextBuffer` (``テキスト・バッファ``) がモデルに相当し、編" -"集される文章や文字列を表します。これにより、複数の :class:`Gtk.TextView` ウィ" -"ジェットが同じ :class:`Gtk.TextBuffer` を共有することができ、それらのテキス" -"ト・バッファで少しだけ異なる内容を表示できるようになります。あるいは、複数の" -"テキスト・バッファを管理し、同じ :class:`Gtk.TextView` ウィジェットの中にどち" -"らか一つ表示するといったことも可能です。" - -# 4ec8e00496394b4696cadc2de0c099dc -#: ../source/textview.txt:13 -msgid "The View" -msgstr "ビュー" - -# 696645945af04aadb79820acc2022ae6 -#: ../source/textview.txt:15 -msgid "" -"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " -"and delete textual data. They are commonly used to edit multiple lines of " -"text. When creating a :class:`Gtk.TextView` it contains its own default :" -"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." -"get_buffer` method." -msgstr "" -":class:`Gtk.TextView` ウィジェットは、ユーザが文字列からなるデータを追加した" -"り、編集したり、削除することができる機能を持ったフロントエンドです。これらの" -"機能は一般的に複数行からなる文字列 (いわゆる文章) の編集に使用されます。 :" -"class:`Gtk.TextView` ウィジェットを一つ生成すると、その中にデフォルトの :" -"class:`Gtk.TextBuffer` が収容されます。このバッファには :meth:`Gtk.TextView." -"get_buffer` メソッドを使ってアクセスできます。" - -# 186e6cea73b34fff92316340425a9ded -#: ../source/textview.txt:21 -msgid "" -"By default, text can be added, edited and removed from the :class:`Gtk." -"TextView`. You can disable this by calling :meth:`Gtk.TextView." -"set_editable`. If the text is not editable, you usually want to hide the " -"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " -"cases it may be useful to set the justification of the text with :meth:`Gtk." -"TextView.set_justification`. The text can be displayed at the left edge, (:" -"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." -"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " -"the complete width (:attr:`Gtk.Justification.FILL`)." -msgstr "" -"デフォルトで :class:`Gtk.TextView` ウィジェットから文字列を追加したり編集した" -"り削除できるようになっています。これは, :meth:`Gtk.TextView.set_editable` メ" -"ソッドを呼び出して無効にできます。もし文字列を編集できないようにしたいのであ" -"れば、通常は :meth:`Gtk.TextView.set_cursor_visible` メソッドを使ってカーソル" -"自身を隠してしまえます。また、ある時は :meth:`Gtk.TextView." -"set_justification` メソッドで文字列の行端を揃えることもできます。このメソッド" -"を使って文字列を左端に寄せたり (:attr:`Gtk.Justification.LEFT`)、右端に寄せた" -"り (:attr:`Gtk.Justification.RIGHT`)、左右均等に寄せたり (:attr:`Gtk." -"Justification.CENTER`)、表示する幅に対して均等に配置していくことができます (:" -"attr:`Gtk.Justification.FILL`)。" - -# 06da32f28db94e11abfd6957cd42ca81 -#: ../source/textview.txt:31 -msgid "" -"Another default setting of the :class:`Gtk.TextView` widget is long lines of " -"text will continue horizontally until a break is entered. To wrap the text " -"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." -"set_wrap_mode`." -msgstr "" -":class:`Gtk.TextView` ウィジェットにはもう一つ、長い文字列の行は改行文字が出" -"現するまで水平方向に続けていくというデフォルトの設定があります。そうではな" -"く、文字列を画面の端で折り返して表示させたい場合は :meth:`Gtk.TextView." -"set_wrap_mode` メソッドを使用します。" - -# b1bee722c21e4d95ab5de433fce9774d -#: ../source/textview.txt:36 -msgid "TextView Objects" -msgstr "TextView のオブジェクト" - -# aced29f5fa7d42b89bf5c81d953b9e3f -#: ../source/textview.txt:40 -msgid "" -"Creates a new :class:`Gtk.TextView` associated with an empty default :class:" -"`Gtk.TextBuffer`." -msgstr "" -"新しい :class:`Gtk.TextView` を生成し、空の :class:`Gtk.TextBuffer` をデフォ" -"ルトとして関連付けます。" - -# 19e6b77c39754195abc13f1dbb161ca3 -#: ../source/textview.txt:45 -msgid "Returns the :class:`Gtk.TextBuffer` being displayed by this text view." -msgstr "" -"このテキスト・ビューが表示している :class:`Gtk.TextBuffer` を返します。" - -# 6bff581ef74f4b209528fa1cb56c4bca -#: ../source/textview.txt:49 -msgid "Sets the default editability of this :class:`Gtk.TextView`." -msgstr "このテキスト・ビューに対するデフォルトの編集可否を指定します。" - -# a55e1137b7aa4a74af89647175a674d6 -#: ../source/textview.txt:53 -msgid "" -"Toggles whether the insertion point is displayed. A buffer with no editable " -"text probably shouldn't have a visible cursor, so you may want to turn the " -"cursor off." -msgstr "" -"文章の挿入位置をカーソルで表示するかどうかを切り替えます。編集不可の文字列を" -"持つテキスト・バッファの場合はカーソルを表示すべきではないので、このメソッド" -"を使ってカーソルを表示しないようにします。" - -# 2872256d02bc498bb95596e62c021113 -#: ../source/textview.txt:59 -msgid "Sets the default justification of text." -msgstr "文字列のデフォルトの両端揃えを指定します。" - -# fb6c287749c04925b43e9f9084f442b4 -#: ../source/textview.txt:61 -msgid "*justification* can be one of the following values:" -msgstr "*justification* には次のいずれかの値を指定できます::" - -# d9ba5bbd6d764cf9bded47cfe8ad67ed -#: ../source/textview.txt:63 -msgid ":attr:`Gtk.Justification.LEFT`: Text is placed at the left edge." -msgstr ":attr:`Gtk.Justification.LEFT`: 文字列を左詰めで配置する" - -# 21f4c5a685bb4e598c2f625db2790dc4 -#: ../source/textview.txt:64 -msgid ":attr:`Gtk.Justification.RIGHT`: Text is placed at the right edge." -msgstr ":attr:`Gtk.Justification.RIGHT`: 文字列を右詰めで配置する" - -# a5041125cb9841baa24c7f67157cb542 -#: ../source/textview.txt:65 -msgid ":attr:`Gtk.Justification.CENTER`: Text is placed in the center." -msgstr ":attr:`Gtk.Justification.CENTER`: 文字列を中央に配置する" - -# eb333c1afe434113b2f8753af3258a25 -#: ../source/textview.txt:66 -msgid "" -":attr:`Gtk.Justification.FILL`: Text is distributed across the complete " -"width." -msgstr "" -":attr:`Gtk.Justification.FILL`: 文字列をラベルの幅に対して均等に配置する" - -# 752c657945c84044944ab5721a5d2c9b -#: ../source/textview.txt:71 -msgid "Sets the line wrapping for the view." -msgstr "このテキスト・ビューで行を折り返す際のポリシーを指定します。" - -# 03ff023dfbc249a7987e680f83be65c6 -#: ../source/textview.txt:73 -msgid "*wrap_mode* can be one of the following values:" -msgstr "*wrap_mode* には次のいずれかの値を指定できます::" - -# 0e31cd3aae414c53a1edacca6210431a -#: ../source/textview.txt:75 -msgid "" -":attr:`Gtk.WrapMode.NONE`: Do not wrap lines; just make the text area wider." -msgstr "" -":attr:`Gtk.WrapMode.NONE`: 行を折り返さない (単に文字列の範囲を広くするだけ) " - -# 12e03ffb1eb4403bae76f71009153f24 -#: ../source/textview.txt:77 -msgid "" -":attr:`Gtk.WrapMode.CHAR`: Wrap text, breaking lines anywhere the cursor can " -"appear (between characters, usually)." -msgstr "" -":attr:`Gtk.WrapMode.CHAR`: カーソルを表示できる場所ならどこでも行を折り返す " -"(一般的には文字と文字の間で折り返す)" - -# 98b739552c584203b6c3b6ccdda2231d -#: ../source/textview.txt:79 -msgid ":attr:`Gtk.WrapMode.WORD`: Wrap text, breaking lines in between words." -msgstr ":attr:`Gtk.WrapMode.WORD`: 単語と単語の間で行を折り返す" - -# 9242932ef6bd4a82aeb146b15a12fc04 -#: ../source/textview.txt:80 -msgid "" -":attr:`Gtk.WrapMode.WORD_CHAR`: Wrap text, breaking lines in between words, " -"or if that is not enough, also between `graphemes`_." -msgstr "" -":attr:`Gtk.WrapMode.WORD_CHAR`: 単語の境界、または単語の境界が十分でない場合" -"は文字の境界である `graphemes `_ で行を折り返す" - -# 049dcf092b4c4e6184452856f10f3a14 -#: ../source/textview.txt:84 -msgid "The Model" -msgstr "モデル" - -# c90ae655cc7a47e4a44df32c623a0f5c -#: ../source/textview.txt:86 -msgid "" -"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " -"and is used to hold whatever text is being displayed in the :class:`Gtk." -"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." -"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " -"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." -"TextIter`. An iterator represents a position between two characters in the " -"text buffer. Iterators are not valid indefinitely; whenever the buffer is " -"modified in a way that affects the contents of the buffer, all outstanding " -"iterators become invalid." -msgstr "" -":class:`Gtk.TextBuffer` (``テキスト・バッファ``) クラスは :class:`Gtk." -"TextView` ウィジェットの中心となる重要なオブジェクトで、そのテキスト・ビュー" -"の中に表示する全ての文字列データを格納しておくのに使用します。それのデータの" -"セットや取得は、それぞれ :meth:`Gtk.TextBuffer.set_text` と :meth:`Gtk." -"TextBuffer.get_text` メソッドを使います。但し、文字列の操作の大部分は :class:" -"`Gtk.TextIter` 型の *iterators* (``イテレータ``) を使って実現します。一個のイ" -"テレータはテキスト・バッファの中にある二つの文字の間の位置を指すポインタの一" -"種です。数個あるイテレータは「常に」妥当な値を指している訳ではありません。テ" -"キスト・バッファの中にある文字列データの文字数に影響を与えるような操作を行う" -"たびに、全てのイテレータが不正になります。" - -# 2b9d04acf0c241458a0e4f01e352619e -#: ../source/textview.txt:96 -msgid "" -"Because of this, iterators can't be used to preserve positions across buffer " -"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " -"buffer contains two built-in marks; an \"insert\" mark (which is the " -"position of the cursor) and the \"selection_bound\" mark. Both of them can " -"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectively. By default, the location of " -"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" -"`Gtk.TextMark.set_visible`." -msgstr "" -"そのため、複数個の修正箇所に対してそれぞれ文字の位置を保存するために複数個の" -"イテレータを用意することはできません。文字の位置を保存する際は :class:`Gtk." -"TextMark` 型のオブジェクト (``マーク``) を使います。テキスト・バッファにはデ" -"フォルトで二つのマークが用意されています。\"insert\" (カーソルの位置を表す) " -"と \"selection_bound\" というマークです。それぞれ :meth:`Gtk.TextBuffer." -"get_insert` と :meth:`Gtk.TextBuffer.get_selection_bound` メソッドで取得でき" -"ます。デフォルトでは :class:`Gtk.TextMark` が指す場所は表示されません。これ" -"は :meth:`Gtk.TextMark.set_visible` メソッドで変更できます。" - -# b961cbd9656647d49b4f4add85cbc564 -#: ../source/textview.txt:104 -msgid "" -"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" -"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " -"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " -"returns an iterator pointing past the last valid character. Retrieving the " -"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." -"get_selection_bounds`." -msgstr "" -":class:`Gtk.TextIter` を取得するメソッドがたくさん用意されています。例えば :" -"meth:`Gtk.TextBuffer.get_start_iter` はテキスト・バッファの先頭を指すイテレー" -"タを返します。それに対し :meth:`Gtk.TextBuffer.get_end_iter` はテキスト・バッ" -"ファの末尾にある妥当な文字を指すイテレータを返します。選択した文字列のかたま" -"りを取得する際は :meth:`Gtk.TextBuffer.get_selection_bounds` メソッドを使いま" -"す。" - -# 3da97f10f1014e7bb45b4b3ad3655ec7 -#: ../source/textview.txt:111 -msgid "" -"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " -"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " -"inserts text wherever the cursor may be currently positioned. To remove " -"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." -msgstr "" -"特定の場所に文字列を挿入する際は :meth:`Gtk.TextBuffer.insert` メソッドを使用" -"します。もう一つ便利なメソッドとして :meth:`Gtk.TextBuffer.insert_at_cursor` " -"が用意されており、これは現在カーソルが指している場所に文字列を挿入します。テ" -"キスト・バッファから文字列の一部を削除する際は :meth:`Gtk.TextBuffer.delete` " -"メソッドそ使用します。" - -# 2a3753a772eb4ca3bb50d73c1d51c1af -#: ../source/textview.txt:116 -msgid "" -"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " -"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." -"backward_search`. The start and end iters are used as the starting point of " -"the search and move forwards/backwards depending on requirements." -msgstr "" -"さらに :class:`Gtk.TextIter` は :meth:`Gtk.TextIter.forward_search` や :meth:" -"`Gtk.TextIter.backward_search` といったメソッドを使ったバッファ内で文字列を検" -"索する際にも使用できます。先頭と終端のイテレータを使って検索を開始する位置を" -"指定し、条件に応じてバッファの前方または後方に移動させます。" - -# 867645e83f5540378a122170df1b8a88 -#: ../source/textview.txt:123 -msgid "TextBuffer Objects" -msgstr "TextBuffer のオブジェクト" - -# 198bd831150b48cd9520aeae3e4258a2 -#: ../source/textview.txt:129 -msgid "" -"Deletes current contents of this buffer, and inserts *length* characters of " -"*text* instead. If *length* is -1 or omitted, *text* is inserted completely." -msgstr "" -"このテキスト・バッファの現在の内容を削除して、代わりに *text* の *length* 分" -"の文字を挿入します。もし *length* に -1 を指定するか、指定を省略した場合は " -"*text* がそのまま挿入されます。" - -# 515240c160544c869571e1a4b1ac2cf9 -#: ../source/textview.txt:135 -msgid "" -"Returns the text in the range *start_iter* (included) and *end_iter* " -"(excluded). Excludes undisplayed text if *include_hidden_chars* is ``False``." -msgstr "始点の *start_iter* から終点の *end_iter* にある文字列を返します (但し始点の文字は含まれますが、終点の文字は含まれません)。さらに *include_hidden_chars* に ``False`` を指定すると、表示されない文字 (制御文字など) が除かれます。" - -# 5e215e74ce2e40a4a5574fb85b6decfb -#: ../source/textview.txt:140 -msgid "" -"Returns the :class:`Gtk.TextMark` that represents the cursor (insertion " -"point)." -msgstr "" -"現在のカーソル位置 (挿入位置) を表す :class:`Gtk.TextMark` を返します。" - -# 0c78f12fd9de4fdeb3b081a34b6f7e92 -#: ../source/textview.txt:145 -msgid "Returns the :class:`Gtk.TextMark` that represents the selection bound." -msgstr "選択範囲を表す :class:`Gtk.TextMark` を返します。" - -# f9ac7723949a4289af91af8675a2fd4e -#: ../source/textview.txt:149 -msgid "" -"Creates a :class:`Gtk.TextMark` at the position of the :class:`Gtk.TextIter` " -"*where*. If *mark_name* is ``None``, the mark is anonymous; otherwise, the " -"mark can be retrieved by name using :meth:`get_mark`. If a mark has left " -"gravity, and text is inserted at the mark's current location, the mark will " -"be moved to the left of the newly-inserted text. If the mark has right " -"gravity (*left_gravity* is ``False``), the mark will end up on the right of " -"newly-inserted text. The standard left-to-right cursor is a mark with right " -"gravity (when you type, the cursor stays on the right side of the text " -"you're typing)." -msgstr "" -":class:`Gtk.TextIter` 型の *where* が指している場所に :class:`Gtk.TextMark` " -"を生成します。もし *mark_name* に ``None`` を指定した場合、生成したマークは匿" -"名になります。それ以外は :meth:`Gtk.TextBuffer.get_mark` メソッドを使い名前で" -"マークを取得できます。左グラビティを持ったマークの現在位置に文字列を挿入する" -"と、マークは挿入した文字列の左端に移動します。右グラビティを持ったマーク " -"(*left_gravity* が ``False`` の場合) の現在位置に文字列を挿入するとマークは挿" -"入した文字列の右端に移動します。標準的な左から右へ移動するカーソルの場合、" -"マークは右グラビティです (すなわち、文字を入力すると常に入力した文字の右側に" -"カーソルが表示されるようになっているはずです)。" - -# 7feff1f5de464dfc893c1f762001c21b -#: ../source/textview.txt:159 -msgid "If *left_gravity* is omitted, it defaults to ``False``." -msgstr "*left_gravity* を省略した場合、デフォルトは ``False`` です。" - -# 0d5be08705014bc78a50646e44dcbb6d -#: ../source/textview.txt:163 -msgid "" -"Returns the :class:`Gtk.TextMark` named name in this buffer, or ``None`` if " -"no such mark exists in the buffer." -msgstr "" -"このテキスト・バッファの中で *mark_name* という名前を持つマークを返します。ま" -"たは *mark_name* というマークが存在しない場合は ``None`` を返します。 " - -# 5826f70116f44d949dc9389176d62f4b -#: ../source/textview.txt:168 -msgid "" -"Returns a :class:`Gtk.TextIter` pointing to first position in this buffer." -msgstr "" -"このテキスト・バッファの先頭位置を指すよう初期化した :class:`Gtk.TextIter` を" -"返します。" - -# 2dd96c33b5f74442bc892a9e93809411 -#: ../source/textview.txt:172 -msgid "" -"Returns a :class:`Gtk.TextIter` pointing past the last valid character in " -"this buffer." -msgstr "" -"このテキスト・バッファの末尾にある妥当な文字を指す :class:`Gtk.TextIter` を返" -"します。" - -# d9f95f4ba98b44f1af2a2688a803fddc -#: ../source/textview.txt:177 -msgid "" -"Returns a tuple of two :class:`Gtk.TextIter` objects pointing to the first " -"character of the selection and to the first character after the selection, " -"respectively. If no text is selected an empty tuple is returned." -msgstr "" -"選択範囲の先頭文字と選択範囲の後にある最初の文字をそれぞれ指す :class:`Gtk." -"TextIter` のタプルを返します。もし文字列が選択されていなければ、空のタプルを" -"返します。" - -# 16873da1164c4975be908ac556bc690b -#: ../source/textview.txt:183 -msgid "" -"Inserts *length* characters of *text* at position *text_iter*. If *length* " -"is -1 or omitted, *text* is inserted completely." -msgstr "" -"*text* の *length* 分の文字を *text_iter* が指す位置に挿入します。もし " -"*length* に -1 を指定するか、指定を省略した場合は *text* がそのまま挿入されま" -"す。" - -# 9c5c1be0547e491f9d4fe6812df803e5 -#: ../source/textview.txt:188 -msgid "" -"Simply calls :meth:`insert`, using the current cursor position as the " -"insertion point." -msgstr "" -"文字を挿入する位置として現在カーソルがある位置を指定して :meth:`Gtk." -"TextBuffer.insert` メソッドを呼び出すだけです。" - -# a756abb6df8746b2b86dc0de43a58a30 -#: ../source/textview.txt:193 -msgid "Deletes text between *start_iter* and *end_iter*." -msgstr "*start_iter* から *end_iter* の間にある文字列を削除します。" - -# 1693788a86e740f1b04739c499ecc04a -#: ../source/textview.txt:197 -msgid "Creates a tag and adds it to the tag table of this buffer." -msgstr "タグを一つ生成し、このテキスト・バッファのタグ・テーブルに登録します。" - -# ac6d7e2838fe4b62b84a7a0a4c1f7181 -#: ../source/textview.txt:199 -msgid "" -"If *tag_name* is ``None``, the tag is anonymous, otherwise a tag with the " -"same name must not already exist in the tag table of the buffer." -msgstr "" -"もし *tag_name* に ``None`` を指定した場合、タグは匿名になり、それ以外は未だ" -"このテキスト・バッファのタグ・テーブルには登録されていない名前を指定して下さ" -"い。" - -# 4512018a4b06469882b483c726f0ee10 -#: ../source/textview.txt:202 -msgid "" -"*kwargs* is an arbitrary number of key-value pairs that represent a list " -"properties to set on the tag, as with ``tag.set_property(prop_name, value)``." -msgstr "" -"*kwargs* には, ``tag.set_property(prop_name, value)`` のようにタグにセットす" -"るプロパティの並びを表すキーと値のペアの総数を指定します。" - -# 9c943a30c3204bc38974437b26a236e4 -#: ../source/textview.txt:207 -msgid "Applies *tag* to the given range." -msgstr "指定した範囲に *tag* を適用します。" - -# 787859029738449f9be6bac38693351a -#: ../source/textview.txt:211 -msgid "Removes all occurrences of *tag* from the given range." -msgstr "指定した範囲から *tag* が適用されている文字列を全て削除します。" - -# 6e48856bb03f4a79afd78b2413f9b9a2 -#: ../source/textview.txt:215 -msgid "Removes all tags in the given range." -msgstr "指定した範囲から全てのタグを削除します。" - -# 878d215ae57e4c178020c6c93643baca -#: ../source/textview.txt:222 -msgid "" -"Searches forward for *needle*. The search will not continue past the :class:" -"`Gtk.TextIter` *limit*." -msgstr "" -"このイテレータを先に進めながら *needle* を探します。この検索は :class:`Gtk." -"TextIter` が *limit* を越えたら終了します。" - -# fcca9a6da8a64ac5a24fb21295aee05e -#: ../source/textview.txt:225 -msgid "" -"*flags* can be set to one of the following, or any combination of it by " -"concatenating them with the bitwise-OR operator ``|``." -msgstr "" -"*flags* には次のいずれか、もしくはそれらの組み合わせ (ビットの論理和を表す " -"``|`` 演算子を使って連結する) を指定できます::" - -# 21c17577236f4414b0ae18438c70bd10 -#: ../source/textview.txt:228 -msgid "0: The match must be exact." -msgstr "0: 完全に一致するもの" - -# f7af899e12a8405d989cb5749938a243 -#: ../source/textview.txt:229 -msgid "" -":attr:`Gtk.TextSearchFlags.VISIBLE_ONLY`: The match may have invisible text " -"interspersed in *needle*. i.e. *needle* will be a possibly-noncontiguous " -"subsequence of the matched range." -msgstr "" -":attr:`Gtk.TextSearchFlags.VISIBLE_ONLY`: *needle* の中に含まれている文字のう" -"ち表示できる文字だけを対象にする (すなわち文字列が断片的に *needle* の中に存" -"在している可能性があるということ)。" - -# 688a58d738774a4faf6bef36809dcbfd -#: ../source/textview.txt:232 -msgid "" -":attr:`Gtk.TextSearchFlags.TEXT_ONLY`: The match may have pixbufs or child " -"widgets mixed inside the matched range." -msgstr "" -":attr:`Gtk.TextSearchFlags.TEXT_ONLY`: 検索範囲に Pixbuf 画像や子ウィジェット" -"が混ざっている場合でも文字だけを対象にする" - -# d471d6acb3f14f54a5d131a858e515d7 -#: ../source/textview.txt:234 -msgid "" -":attr:`Gtk.TextSearchFlags.CASE_INSENSITIVE`: The text will be matched " -"regardless of what case it is in." -msgstr "" -":attr:`Gtk.TextSearchFlags.CASE_INSENSITIVE`: 大文字/小文字を無視して検索する" - -# 440e5b80b6394a019f685d460d1bb39c -#: ../source/textview.txt:237 -msgid "" -"Returns a tupel containing a :class:`Gtk.TextIter` pointing to the start and " -"to the first character after the match. If no match was found, ``None`` is " -"returned." -msgstr "" -"検索結果の先頭とその結果の後の文字をそれぞれ指す :class:`Gtk.TextIter` のタプ" -"ルを返します。もし一致する文字列が見つからなかった場合は ``None`` を返しま" -"す。" - -# 8dbb1164e1b04b21abc6e425843bdbd0 -#: ../source/textview.txt:243 -msgid "Same as :meth:`forward_search`, but moves backward." -msgstr "" -":meth:`Gtk.TextIter.forward_search` と同じですが、イテレータが移動する向きが" -"後方になります。" - -# f0d1ef5d7dfa411c84e0b315ac7cd9f1 -#: ../source/textview.txt:250 -msgid "" -"Sets the visibility of this mark; the insertion point is normally visible, i." -"e. you can see it as a vertical bar. Also, the text widget uses a visible " -"mark to indicate where a drop will occur when dragging-and-dropping text. " -"Most other marks are not visible. Marks are not visible by default." -msgstr "" -"このマークの表示可否を指定します。基本的に、挿入位置は表示可能として指定され" -"ています (垂直バーのようなカーソルで表現されます)。さらに、テキスト・ウィ" -"ジェットでは、文字列をドラッグ&ドロップする場所をマークを使って指し示すよう" -"になっています。その他のマークのほとんどは表示されません。デフォルトで、マー" -"クは表示されないようになっています。" - -# 4842bf5ce15943b3b905f60511494f95 -#: ../source/textview.txt:256 -msgid "Tags" -msgstr "タグ" - -# 039831345f914aaeaafa5d1473c72cb0 -#: ../source/textview.txt:258 -msgid "" -"Text in a buffer can be marked with tags. A tag is an attribute that can be " -"applied to some range of text. For example, a tag might be called \"bold\" " -"and make the text inside the tag bold. However, the tag concept is more " -"general than that; tags don't have to affect appearance. They can instead " -"affect the behaviour of mouse and key presses, \"lock\" a range of text so " -"the user can't edit it, or countless other things. A tag is represented by " -"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " -"any number of text ranges in any number of buffers." -msgstr "" -"テキスト・バッファの中にある文字列にはタグで印を付けておくことができます。こ" -"のタグは文字列の任意の範囲に適用する属性値です。例えば、\"bold\" というタグで" -"囲まれた文字は太字になります。但し、タグの概念はそのようなことよりもさらに汎" -"用的なことを目指しています。すなわち、タグは文字の見え方に影響するものであっ" -"てはならないということです。その代わり、タグはマウスやキー押下の動きに影響を" -"与えることができるとします。タグを付与すると適当な範囲の文字列を「ロックす" -"る」ことになるので、ユーザはその部分の文字列を編集などができなくなります。タ" -"グは :class:`Gtk.TextTag` 型のオブジェクトを使って表現します。一個の :class:" -"`Gtk.TextTag` でいろいろなバッファの中にある文字列のいろいろな範囲に適用する" -"ことが可能です。" - -# fa5ae48892ae42bbab38b2b77e174886 -#: ../source/textview.txt:267 -msgid "" -"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " -"of tags that can be used together. Each buffer has one tag table associated " -"with it; only tags from that tag table can be used with the buffer. A single " -"tag table can be shared between multiple buffers, however." -msgstr "" -"タグは :class:`Gtk.TextTagTable` 型のオブジェクト (いわゆる、タグ・テーブル) " -"の中に格納されます。このテーブルは一緒に利用できるいろいろなタグの集まりを定" -"義しています。一個のキスト・バッファには一個のタグ・テーブルが割り当てられま" -"す。すなわち、テキスト・バッファは割り当てられたタグ・テーブルの中にあるタグ" -"しか利用できません。但し、一個のタグ・テーブルを複数のバッファで共有すること" -"は可能です。 " - -# 4c9249063eca4ff984f65553d6e1dba4 -#: ../source/textview.txt:272 -msgid "" -"To specify that some text in the buffer should have specific formatting, you " -"must define a tag to hold that formatting information, and then apply that " -"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" -"`Gtk.TextBuffer.apply_tag`::" -msgstr "" -"テキスト・バッファの中にある任意の文字列に適用する書式を指定する際は、その書" -"式の情報を保持するタグを :meth:`Gtk.TextBuffer.create_tag` メソッドを使って一" -"つ定義する必要があります。それから :meth:`Gtk.TextBuffer.apply_tag` メソッド" -"を使って、そのタグを文字列の特定の範囲に適用します::" - -# 7ca8a2c896404f448dd82db6e48439f4 -#: ../source/textview.txt:280 -msgid "The following are some of the common styles applied to text:" -msgstr "次は、文字列に適用できる一般的なスタイルの一部です:" - -# 931034e43eb64985a64a50824ac6e9e3 -#: ../source/textview.txt:282 -msgid "Background colour (\"foreground\" property)" -msgstr "背景色 (\"foreground\" プロパティ)" - -# e6e762c3ef284ef2b2b2d9db14e3ec90 -#: ../source/textview.txt:283 -msgid "Foreground colour (\"background\" property)" -msgstr "前景色 (\"background\" プロパティ)" - -# 577aa3fa3a684c2e92450cccde3fc51a -#: ../source/textview.txt:284 -msgid "Underline (\"underline\" property)" -msgstr "下線 (\"underline\" プロパティ)" - -# 4352355c02e640c2be51e7e922d5c1f8 -#: ../source/textview.txt:285 -msgid "Bold (\"weight\" property)" -msgstr "フォントの太さ (\"weight\" プロパティ)" - -# 9b970a8ad94b42628d866dda58b04463 -#: ../source/textview.txt:286 -msgid "Italics (\"style\" property)" -msgstr "斜体 (\"style\" プロパティ)" - -# 0b630bbad1904dd09d745548ab1c1984 -#: ../source/textview.txt:287 -msgid "Strikethrough (\"strikethrough\" property)" -msgstr "打ち消し線 (\"strikethrough\" プロパティ)" - -# 1edd6a32729247e88fbd12a5ba65a0c1 -#: ../source/textview.txt:288 -msgid "Justification (\"justification\" property)" -msgstr "行端揃え (\"justification\" プロパティ)" - -# 87942a2a92184baba83d416432083e36 -#: ../source/textview.txt:289 -msgid "Size (\"size\" and \"size-points\" properties)" -msgstr "フォントの大きさ (\"size\" や \"size-points\" プロパティ)" - -# f1983f7bea9d46bb9bab5f20702cfef9 -#: ../source/textview.txt:290 -msgid "Text wrapping (\"wrap-mode\" property)" -msgstr "行の折り返し方 (\"wrap-mode\" プロパティ)" - -# 8d4f46479ae44295b888715a08d080df -#: ../source/textview.txt:292 -msgid "" -"You can also delete particular tags later using :meth:`Gtk.TextBuffer." -"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." -"TextBuffer.remove_all_tags`." -msgstr "" -"さらに、あとから :meth:`Gtk.TextBuffer.remove_tag` メソッドを使って特定のタグ" -"を削除したり、もしくは :meth:`Gtk.TextBuffer.remove_all_tags` メソッドを使っ" -"て指定した範囲にある全てのタグを削除することも可能です。" - -# 4b14b39b638b4ee2bdc32b15435f9a63 -#: ../source/textview.txt:296 -msgid "Example" -msgstr "例" diff --git a/translations/ja/treeview.po b/translations/ja/treeview.po deleted file mode 100644 index d289ea2..0000000 --- a/translations/ja/treeview.po +++ /dev/null @@ -1,548 +0,0 @@ -# Japanese translation for treeview.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-16 09:35+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/treeview.txt:2 -# 8446193de2d843cba5544b179a656d67 -msgid "Tree and List Widgets" -msgstr "ツリーとリスト・ウィジェット" - -#: ../source/treeview.txt:4 -# 45a487250d784d2f8ddd79cba16abaf7 -msgid "A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful way of displaying data. They are used in conjunction with a :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and manipulating data in many ways, including:" -msgstr ":class:`Gtk.TreeView` とそれに関連するウィジェットらはデータを表示するのに極めて有効なインタフェースの一つです。これらのウィジェットは :class:`Gtk.ListStore` または :class:`Gtk.TreeStore` クラスと連携して使用し、次に示すようにデータを表示する方法やデータを扱う方法を何通りも提供してくれます:" - -#: ../source/treeview.txt:9 -# 9e0e771a1dab4356baf0dc42b81ae207 -msgid "Automatically updates when data added, removed or edited" -msgstr "データを追加したり、削除したり、編集すると自動的に表示を更新する" - -#: ../source/treeview.txt:10 -# d55ae6326f6c4446aa10519b5e48dd5a -msgid "Drag and drop support" -msgstr "データのドラッグ&ドロップをサポートする" - -#: ../source/treeview.txt:11 -# c2c3787c61c54c479a044b2c37f63b3a -msgid "Sorting of data" -msgstr "データの並び替えをサポートする" - -#: ../source/treeview.txt:12 -# e7ad3477c57946a295d3526653c8a8d9 -msgid "Support embedding widgets such as check boxes, progress bars, etc." -msgstr "チェックボックスやプログレスバーなどのウィジェットの埋め込みをサポートする" - -#: ../source/treeview.txt:13 -# 417fcf350c0d4ba8a53a5e99214338ab -msgid "Reorderable and resizable columns" -msgstr "データを格納するカラムの順番を変えたり大きさを変えることができる" - -#: ../source/treeview.txt:14 -# e13ed4fb4f9d4319808fdb9868eb258b -msgid "Filtering of data" -msgstr "データをフィルタリングできる" - -#: ../source/treeview.txt:16 -# 70edc1d1d1ae4e84b5c01578a0f4de02 -msgid "With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. It is often difficult for beginner developers to be able to utilize correctly due to the number of methods which are required." -msgstr "しかしながら :class:`Gtk.TreeView` クラスが持つ多くの機能と柔軟性は複雑さをもたらします。これらの機能を実現するにはたくさんのメソッドが必要になるため、まれに初心者にとって正しく使いこなすのが難しいものになっています。" - -#: ../source/treeview.txt:21 -# 9efe8b05b6df4540b9810d19c7398079 -msgid "The Model" -msgstr "モデル" - -#: ../source/treeview.txt:22 -# 372a02d749604e908ac12a921bd348a2 -msgid "Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can be used by more than one :class:`Gtk.TreeView`. For instance, this allows the same underlying data to be displayed and edited in 2 different ways at the same time. Or the 2 Views might display different columns from the same Model data, in the same way that 2 SQL queries (or \"views\") might show different fields from the same database table." -msgstr "いろいろな :class:`Gtk.TreeView` (``ビュー``) はそれぞれ関連する :class:`Gtk.TreeModel` (``モデル``) を持ちます。このモデルはツリー・ビューが表示するデータを格納しています。 :class:`Gtk.TreeModel` はそれぞれ一個以上の :class:`Gtk.TreeView` から同時に利用できます。例えば、これを使うと任意のデータを同時に別々の方法で表示したり編集できるようになります。もしくは、二つのビューで同じモデル・データからいろいろな項目 (``カラム``) を選択して表示できます。これは、二つの SQL クエリ (または \"ビュー\") が同じデータベースのテーブルからいろいろな項目を取得して表示するのに似ています。" - -#: ../source/treeview.txt:30 -# 5dafdcec991b48daa8d984a1ba9a4c0f -msgid "Although you can theoretically implement your own Model, you will normally use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model classes. :class:`Gtk.ListStore` contains simple rows of data, and each row has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and each row may have child rows." -msgstr "理論上は自分で独自のモデルを実装することが可能ですが、通常は標準で用意されている :class:`Gtk.ListStore` か :class:`Gtk.TreeStore` クラスのどちらかを使うことになります。 :class:`Gtk.ListStore` にはデータを行方向に並べたもの (``ノード``) が格納されており、各ノードには子に相当する別のノードはありません。それに対し :class:`Gtk.TreeStore` にはデータを行方向に並べたノードに加え、各ノードには子に相当する別のノードを持たせることができます。" - -#: ../source/treeview.txt:36 -# 358878b586bb472abbfddac8fc8b80a3 -msgid "When constructing a model you have to specify the data types for each column the model holds." -msgstr "モデルを作成する際は、ノードに格納するデータの種類を必要に応じて指定する必要があります。" - -#: ../source/treeview.txt:43 -# 610c8077b053426ebdcc6b3dab575091 -msgid "This creates a list store with three columns, two string columns, and a float column." -msgstr "これは一ノードにつき三種類のデータを格納するリスト・ストアを生成しています。すなわち、列方向に並べられる項目は二つの文字列と一つの実数値になります。" - -#: ../source/treeview.txt:46 -# 002bcc678d4d4d09b109bb835939d7d1 -msgid "Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:`Gtk.TreeStore.append`, depending upon which sort of model was created." -msgstr "モデルにデータを追加する際は、作成したモデルの種類に応じて :meth:`Gtk.ListStore.append` か :meth:`Gtk.TreeStore.append` メソッドを使います。" - -#: ../source/treeview.txt:53 -# 42df98a7770740bf931257597585b4f2 -msgid "Both methods return a :class:`Gtk.TreeIter` instance, which points to the location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` by calling :meth:`Gtk.TreeModel.get_iter`." -msgstr "これらのメソッドは共に :class:`Gtk.TreeIter` 型のインスタンスを返します。これは新しくデータを追加したノードを指すポインタ (``イテレータ``) です。 :meth:`Gtk.TreeModel.get_iter` メソッドを呼び出すことで最新の :class:`Gtk.TreeIter` を取得できます。" - -#: ../source/treeview.txt:57 -# fea84ca1a7fd4d6380eab0b5689f990e -msgid "Once, data has been inserted you can retrieve or modify data using the tree iter and column index." -msgstr "ひとたびデータを挿入したら、イテレータと列方向の項目を表すインデックスを使って任意のデータを取得したり編集できるようになります。" - -#: ../source/treeview.txt:65 -# 2a3bd848900a49ddba276780ac31be17 -msgid "As with Python's built-in :class:`list` object you can use :func:`len` to get the number of rows and use slices to retrieve or set values." -msgstr "Python の組込みクラスである :class:`list` 型の :func:`len` メソッドを使って、モデルの中にあるノードの総数を取得したり、スライス (0 からカウントする) を使ってそのノードにあるデータを取得したり指定することができます。" - -#: ../source/treeview.txt:79 -# 6c1a7885ef6c48608c88c23d14ae36f3 -msgid "Iterating over all rows of a tree model is very simple as well." -msgstr "モデルの中にある全てのノードを順番に取得するための簡単な方法があります。" - -#: ../source/treeview.txt:87 -# 544594218f2846f4b6b370a55842f2bc -msgid "Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will only iterate over the rows of the top level, but not the children of the nodes. To iterate over all rows and its children, use the ``print_tree_store`` function." -msgstr "覚えておいてほしい点として :class:`Gtk.TreeStore` を使っている場合、上のコードはトップ・レベルのノードだけを順番に取得し、子ノードは対象外ということです。子ノードを含めモデルにある全てのノードを順番に取得したい場合は、次に示す ``print_tree_store()`` メソッドを使用して下さい。" - -#: ../source/treeview.txt:105 -# 2063c09a89304afea63177059f16a4e6 -msgid "Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-like method mentioned above, it is also possible to either use :class:`Gtk.TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular row in a tree model. One can convert a path to an iterator by calling :meth:`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, i.e. nodes do not have any child nodes, a path is essentially the index of the row you want to access." -msgstr "上記で説明した :class:`Gtk.TreeModel` に格納した値にリストのような方法でアクセスする場合を除き :class:`Gtk.TreeIter` (``イテレータ``) または :class:`Gtk.TreePath` (``パス``) のいずれかを使ってアクセスすることも可能です。共にツリー・モデルの中にある任意のノードを指すポインタの一種です。 :meth:`Gtk.TreeModel.get_iter` メソッドを呼び出してパスをイテレータに変換することができます。ここで :class:`Gtk.ListStore` にはノードが一階層分しか格納されていない (すなわち、全てのノードは子を持たない) ので、一個のパスは本質的にアクセスしたいノードと同じということになります。" - -#: ../source/treeview.txt:122 -# 24bdebdb8c2741d88766974c88693439 -msgid "In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a string. The string form is a list of numbers separated by a colon. Each number refers to the offset at that level. Thus, the path \"0\" refers to the root node and the path \"2:4\" refers to the fifth child of the third node." -msgstr ":class:`Gtk.TreeStore` の場合、パスはインデックスまたは文字列からなるリストになります。文字列の場合は数値をコロンで区切ったリストです。各数値はその階層におけるオフセットです。すなわち、パス \"0\" とは 1 行目にある root ノードを指し、パス \"2:4\" とは (root ノードを 0 として) 3 行目にあるノードから、さらに数えて 5 行目にあるノードを指します。" - -#: ../source/treeview.txt:136 -# 5f009342c40941af920e1f00a20ab531 -msgid "TreeModel Objects" -msgstr "ツリーモデルのオブジェクト" - -#: ../source/treeview.txt:142 -# 2396d377ad5a462b85540d9f27269dd5 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to *path*." -msgstr "*path* を指す :class:`Gtk.TreeIter` 型のイテレータを返します。" - -#: ../source/treeview.txt:144 -# 5cab6139d9484b1ea3ad461436a3759c -msgid "*path* is expected to be a colon separated list of numbers or a tuple. For example, the string \"10:4:0\" or tuple (10, 4, 0) would create a path of depth 3 pointing to the 11th child of the root node, the 5th child of that 11th child, and the 1st child of that 5th child." -msgstr "引数の *path* はコロン (:) で区切った数値のリストまたはタプルを想定しています。例えば \"10:4:0\" とか (10, 4, 0) は root から数えて 11 行目にあるノードから、さらに数えて 5 行目にある子ノードから、さらに数えて 1 行目にあるノードまでの三階層のパスを生成します。" - -#: ../source/treeview.txt:151 -# bfc6be7e73b949609666eb3c0b8da328 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing the node following *treeiter* at the current level or ``None`` if there is no next iter." -msgstr "*treeiter* と同じ階層で *treeiter* が指すノードの次のノードを指す :class:`Gtk.TreeIter` 、または次のノードが存在しなければ ``None`` を返します。" - -#: ../source/treeview.txt:156 -# 54286f6cd26a43cc92245add9ee47dda -msgid "Returns ``True`` if *treeiter* has children, ``False`` otherwise." -msgstr "*treeiter* が指すノードに子ノードがあれば ``True`` を返し、それ以外は ``False`` を返します。" - -#: ../source/treeview.txt:160 -# 67068046aee949c09552304c32b9a628 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to the first child of *treeiter* or ``None`` if *treeiter* has no children." -msgstr "*treeiter* が指すノードが持っている一番先頭の子ノードを指す :class:`Gtk.TreeIter` 、または *treeiter* が子ノードを持たない場合は ``None`` を返します。" - -#: ../source/treeview.txt:165 -# 22e9ce6078474e53a9c021cccc6832fd -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to the first iterator in the tree (the one at the path \"0\") or ``None`` if the tree is empty." -msgstr "ツリーの中で一番先頭にある (パスが \"0\" である) ノードを指す :class:`Gtk.TreeIter` 、またはツリーが空ならば ``None`` を返します。" - -#: ../source/treeview.txt:169 -# 8243007df3cd44698b9552d8997dd4d9 -msgid "ListStore Objects" -msgstr "リストストアのオブジェクト" - -#: ../source/treeview.txt:173 -# bf05472c73f64499b708edab6d739788 -msgid "Creates a new :class:`Gtk.ListStore` with the specified column data types. Each row added to the list store will have an item in each column." -msgstr "指定した型の項目 (カラム) を持つ新しい :class:`Gtk.ListStore` (``リスト・ストア``) を生成します。リスト・ストアに追加した各ノードにはそれぞれの項目にデータが格納されることになります。" - -#: ../source/treeview.txt:176 -# a677bb4dc8704c829e11849fea9617ec -msgid "Supported data types are the standard Python ones and GTK+ types:" -msgstr "サポートしているデータ型は標準的な Python の型と GTK+ の型です:" - -#: ../source/treeview.txt:178 -# 2eb182b0f76b41fca87056066ca27eb3 -msgid "str, int, float, long, bool, object" -msgstr "str、int、float、long、bool、オブジェクト" - -#: ../source/treeview.txt:179 -# 9eabc5205dc64cd69dee64ed792836f7 -msgid "GObject.GObject" -msgstr "GObject.GObject" - -#: ../source/treeview.txt:183 -# 95174fcbee224857b0fd99e1f7e885ed -msgid "Appends a new row to this list store." -msgstr "このリスト・ストアに新しいノードを追加します。" - -#: ../source/treeview.txt:185 -#: ../source/treeview.txt:203 -# 4e749ff7ef354e7b86f8806a17e01367 -# 9232463dd9e74b63914080fc4875ffdf -msgid "*row* is a list of values for each column, i.e. ``len(store) == len(row)``. If *row* is omitted or ``None``, an empty row will be appended." -msgstr "*row* は項目毎にセットする値のリストです。すなわち ``len(store) == len(row)`` です。 *row* を省略するか ``None`` にすると、空の (各項目にデータが格納されていない) ノードが追加されます。" - -#: ../source/treeview.txt:188 -#: ../source/treeview.txt:206 -# 46047e3646424fecac4b6ab3c78e62aa -# c9ebd593e8b24ed1bc4536d263b81b5f -msgid "Returns a :class:`Gtk.TreeIter` pointing to the appended row." -msgstr "そして、追加したノードを指す :class:`Gtk.TreeIter` を返します。" - -#: ../source/treeview.txt:191 -# 34954ba1d5d042488a17d6d62012fb01 -msgid "TreeStore Objects" -msgstr "ツリーストアのオブジェクト" - -#: ../source/treeview.txt:195 -# 5b152bc1268642cda9915846e4d0745e -msgid "Arguments are the same as for the :class:`Gtk.ListStore` constructor." -msgstr "この引数は :class:`Gtk.ListStore` クラスのコンストラクタと同じです。" - -#: ../source/treeview.txt:199 -# 51b27c2b469e4ddb9c0e8d63ec9bdf72 -msgid "Appends a new row to this tree store. *parent* must be a valid :class:`Gtk.TreeIter`. If *parent* is not ``None``, then it will append the new row after the last child of *parent*, otherwise it will append a row to the top level." -msgstr "このツリー・ストアに新しいノードを追加します。 *parent* には妥当な :class:`Gtk.TreeIter` のインスタンスを指定して下さい。 *parent* が ``None`` でなければ *parent* が指す階層で一番最後にある子ノードの次に新しいノードを追加し、それ以外は 1 階層目 (トップレベル) にノードを追加します。" - -#: ../source/treeview.txt:209 -# 8efc1b576e5049b883d2bbd96b28df24 -msgid "TreePath Objects" -msgstr "ツリーパスのオブジェクト" - -#: ../source/treeview.txt:213 -# 41244d1c47ee42e18ed3c05c03a3334a -msgid "Construct a :class:`Gtk.TreePath` pointing to the node specified by *path*." -msgstr "*path* によって表されるノードを指す :class:`Gtk.TreePath` を一つ生成します。" - -#: ../source/treeview.txt:215 -# c6d10d8a25264acd921116a7e7bc449f -msgid "If *path* is a string it is expected to be a colon separated list of numbers. For example, the string \"10:4:0\" would create a path of depth 3 pointing to the 11th child of the root node, the 5th child of that 11th child, and the 1st child of that 5th child." -msgstr "引数の *path* が文字列の場合、それは数値をコロンで区切って並べた文字列として解釈されます。例えば \"10:4:0\" という文字列は root から数えて 11 行目にあるノードから、さらに数えて 5 行目にある子ノードから、さらに数えて 1 行目にあるノードまでの三階層のパスを生成します。" - -#: ../source/treeview.txt:220 -# c235344b0d2849a69ff533e2ed7b4b30 -msgid "If *path* is a list or a tuple it is expected to contain the indexes of the nodes. Referring to the above mentioned example, the expression ``Gtk.TreePath(\"10:4:0\")`` is equivalent to ``Gtk.TreePath([10, 4, 3])``." -msgstr "引数の *path* がリストまたはタプルの場合、それは任意のノードのインデックスを含んだものとして解釈されます。例えば、上記の例だと ``Gtk.TreePath(\"10:4:0\")`` というは ``Gtk.TreePath([10, 4, 3])`` と同じ意味になります。" - -#: ../source/treeview.txt:225 -# 5fa39750c6054c68a1124461d7c04855 -msgid "The View" -msgstr "ビュー" - -#: ../source/treeview.txt:226 -# 9a77504697604366a251a7ec5db415af -msgid "While there are several different models to choose from, there is only one view widget to deal with. It works with either the list or the tree store. Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :class:`Gtk.TreeModel` to know where to retrieve its data from, either by passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:`Gtk.TreeView.set_model`." -msgstr "いろいろな種類のモデルを選択できる一方で、そのモデルを扱うビュー・ウィジットは一つしかありません。このウィジェットはリスト・ストアまたはツリー・ストアのいずれかを使用します。また :class:`Gtk.TreeView` (``ビュー``) 自体を設定することは難しいことではありません。ビューは、モデルのどこからデータを取得するかを知るために Gtk.TreeModel を使うため :class:`Gtk.TreeView` のコンストラクタの引数にするか、あるいは :meth:`Gtk.TreeView.set_model` メソッドを呼び出すかして、ビューが使用するモデルを指定します。" - -#: ../source/treeview.txt:237 -# dbec03e5cdf1438f92174481416c02ca -msgid "Once the :class:`Gtk.TreeView` widget has a model, it will need to know how to display the model. It does this with columns and cell renderers." -msgstr ":class:`Gtk.TreeView` ウィジェットにモデルを指定したら、次はそのモデルを表示する方法を知る必要があります。モデルを表示する際は項目 (``カラム``) と ``セル・レンダラ`` を使います (項目の中にはセルをいくつか描画でき、セルが 1 個の場合は項目と同じです)。" - -#: ../source/treeview.txt:240 -# ebe48e5dae2d44cd8f522c9e6e459cda -msgid "Cell renderers are used to draw the data in the tree model in a way. There are a number of cell renderers that come with GTK+, for instance :class:`Gtk.CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk.CellRendererToggle`. In addition, it is relatively easy to write a custom renderer yourself." -msgstr "別の言い方をすると、ツリー・モデルの項目の中にあるセルにデータを描画する際にセル・レンダラを使用します。GTK+ は、初めからいろいろな種類のセル・レンダラを用意しています。例えば :class:`Gtk.CellRendererText` や :class:`Gtk.CellRendererPixbuf` 、 :class:`Gtk.CellRendererToggle` があります。さらに、独自のレンダラを実装するのは比較的に簡単です。" - -#: ../source/treeview.txt:246 -# 812d25778ae148b1b95e2293e6ed70dc -msgid "A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses to organize the vertical columns in the tree view. It needs to know the name of the column to label for the user, what type of cell renderer to use, and which piece of data to retrieve from the model for a given row." -msgstr ":class:`Gtk.TreeViewColumn` (``カラム``) は :class:`Gtk.TreeView` でデータを列方向に並べていく際に使用するオブジェクトの一つです。このオブジェクトには項目名 (カラムの名前) やそこで使用するセル・レンダラの種類、どのデータをモデルから取得するかを指定する必要があります。" - -#: ../source/treeview.txt:257 -# 4ed104716be8410ea355ce9cd043dc63 -msgid "To render more than one model column in a view column, you need to create a :class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn.pack_start` to add the model columns to it." -msgstr "一個の項目の中に複数のセルを描画したいのであれば :class:`Gtk.TreeViewColumn` (``カラム``) を一個作り :meth:`Gtk.TreeViewColumn.pack_start` メソッドを使って、セル・レンダラをそのカラムの中にそれぞれ追加していきます。" - -#: ../source/treeview.txt:277 -# c76e6ae3c7f54e508f3ff0eb5dcdadb2 -msgid "TreeView Objects" -msgstr "ツリービューのオブジェクト" - -#: ../source/treeview.txt:281 -# 2f4b5849dace470a8525130d04be0fd9 -msgid "Creates a new :class:`Gtk.TreeView` widget with the model initialized to *treemodel*. *treemodel* must be a class implementing :class:`Gtk.TreeModel`, such as :class:`Gtk.ListStore` or :class:`Gtk.TreeStore`. If *treemodel* is omitted or ``None``, the model remains unset and you have to call :meth:`set_model` later." -msgstr "新しい :class:`Gtk.TreeView` ウィジェットを生成します。その際に、このビューが保持するモデルを *treemodel* にします。 *treemodel* は :class:`Gtk.ListStore` とか :class:`Gtk.TreeStore` のような :class:`Gtk.TreeModel` 型のインタフェースを実装したクラスにして下さい。 *treemodel* を省略するか、または ``None`` にした場合、既に保持していたモデルが解除されるので、あとで :meth:`Gtk.TreeView.set_model` メソッドを呼び出す必要があります。" - -#: ../source/treeview.txt:289 -# 0900a0b8d51e4e9fae27005c00d75c36 -msgid "Sets the model for this tree view. If this tree view already has a model set, it will remove it before setting the new model. If *model* is ``None``, then it will unset the old model." -msgstr "このツリービューのモデルを指定します。既にツリービューがモデルを保持している場合、新しいモデルをセットする前にそのモデルを削除します。 *model* を ``None`` にすると、古いモデルを解除します。" - -#: ../source/treeview.txt:295 -# 2ba72326e7734f4882a37ec2afa5a86e -msgid "Returns the model this tree view is based on. Returns ``None`` if the model is unset." -msgstr "このツリービューが保持してるモデルを返します。モデルが解除されていたら ``None`` を返します。" - -#: ../source/treeview.txt:300 -# 4b8569decb084a05b9e23f894ce94acb -msgid "Appends *column* to the list of columns." -msgstr "列方向に表示している項目の並びに *column* を追加します。" - -#: ../source/treeview.txt:304 -# ec479f93f10f457ea933c491f419721d -msgid "Gets the :class:`Gtk.TreeSelection` associated with this tree view." -msgstr "このツリービューに対する :class:`Gtk.TreeSelection` を取得します。" - -#: ../source/treeview.txt:308 -# 4ba04a2772ac4604bae11cc811ecd084 -msgid "Arguments are the same as :meth:`Gtk.Widget.drag_source_set`" -msgstr "引数の並びは :meth:`Gtk.Widget.drag_source_set` 関数と同じです。" - -#: ../source/treeview.txt:312 -# 03c88d66ed3a4ead90227a5de4c6d5d3 -msgid "Arguments are the same as :meth:`Gtk.Widget.drag_dest_set`" -msgstr "引数の並びは :meth:`Gtk.Widget.drag_dest_set` 関数と同じです。" - -#: ../source/treeview.txt:315 -# 7c941c043ef6493bb3e80f2fcdb0ce7e -msgid "TreeViewColumn Objects" -msgstr "ツリービューカラムのオブジェクト" - -#: ../source/treeview.txt:319 -# ac7c752666414e69be7e58b647f89a2f -msgid "Creates a new :class:`Gtk.TreeViewColumn`." -msgstr "新しい :class:`Gtk.TreeViewColumn` を生成します。" - -#: ../source/treeview.txt:321 -# 7872d723bc6a4b33baa6d7fd50d4c40d -msgid "*renderer* is expected to be a :class:`Gtk.CellRenderer` instance, and *kwargs* key-value pairs specifying the default values of *renderer*'s properties. This is equivalent to calling :meth:`pack_start` and :meth:`add_attribute` for each key-value pair in *kwargs*." -msgstr "*renderer* は :class:`Gtk.CellRenderer` のインスタンスにし、 *kwargs* は *renderer* のプロパティを表すキーと値のペアの並びにして下さい。これは *kwargs* のキーと値のペアに対して、それぞれ :meth:`Gtk.TreeViewColumn.pack_start` と :meth:`Gtk.TreeViewColumn.add_attribute` を呼び出すことと等価です。" - -#: ../source/treeview.txt:326 -# c2d55c74321d4ade951183ad6d74c214 -msgid "If *renderer* is omitted, you have to call :meth:`pack_start` or :meth:`pack_end` yourself." -msgstr "*renderer* を省略した場合は、明示的に :meth:`Gtk.TreeViewColumn.pack_start` または :meth:`Gtk.TreeViewColumn.pack_end` を呼び出す必要があります。" - -#: ../source/treeview.txt:331 -# 7969530e41b846f2b2152cc18994ac2a -msgid "Adds an attribute mapping to this column." -msgstr "この項目 (カラム) にマッピングする属性値を追加します。" - -#: ../source/treeview.txt:333 -# 4f0a6f3ccb50451da950db5cff4659da -msgid "*attribute* is the parameter on *renderer* to be set from the value. So for example if column 2 of the model contains strings, you could have the \"text\" attribute of a :class:`Gtk.CellRendererText` get its values from column 2." -msgstr "*attribute* は *value* でセットされる *renderer* のパラメータです。例えばモデルの 2 番目にある項目が文字列の場合は :class:`Gtk.CellRendererText` の \"text\" という属性値を持たせることができます (これにより、セル・レンダラが 2 番目の項目から \"text\" に対する値を取得できます)。" - -#: ../source/treeview.txt:340 -# 65336304e1214a12902fe223d6dbd677 -msgid "Packs the *renderer* into the beginning of this column. If expand is ``False``, then the *renderer* is allocated no more space than it needs. Any unused space is divided evenly between cells for which expand is ``True``." -msgstr "*renderer* をこの項目 (カラム) の先頭にパッキングします。もし *expand* が ``False`` ならば *renderer* で必要とされる以上の余白が付与されることはありません。使用していない余白は *expand* を ``True`` にしたセルの間で均等に分割されます。" - -#: ../source/treeview.txt:346 -# e16739cca3d844df8a03312630126ef6 -msgid "Adds the *renderer* to end of this column. If expand is ``False``, then the *renderer* is allocated no more space than it needs. Any unused space is divided evenly between cells for which expand is ``True``." -msgstr "*renderer* をこの項目 (カラム) の最後にパッキングします。もし *expand* が ``False`` ならば *renderer* で必要とされる以上の余白が付与されることはありません。使用していない余白は *expand* を ``True`` にしたセルの間で均等に分割されます。" - -#: ../source/treeview.txt:352 -# 75db7b35dc014211a3e7150dbe9cc23f -msgid "Sets the column of the model by which this column (of the view) should be sorted. This also makes the columnd header clickable." -msgstr "この項目内のデータを並び替えようとした際に、それに対応するモデルのどのデータが対象になるかを指定します。さらに、この項目のヘッダをクリック可能にします。" - -#: ../source/treeview.txt:357 -# e6dd0e4fd78d435888496ce3760fae9f -msgid "Gets the column id set by :meth:`Gtk.TreeViewColumn.set_sort_column_id`" -msgstr ":meth:`Gtk.TreeViewColumn.set_sort_column_id` で指定した、この項目の並び替えで使用する論理番号を取得します。" - -#: ../source/treeview.txt:361 -# 8fefe41b88184a0782cc3ac6ee9dcf5c -msgid "Sets whether a little arrow is displayed in the column header to in" -msgstr "この項目のヘッダに小さな矢印を表示するかどうかを指定します。" - -#: ../source/treeview.txt:363 -# 542e1fa255c6462bad02a499fef8f36e -msgid "*setting* can either be ``True`` (indicator is shown) or ``False``" -msgstr "*setting* には ``True`` (表示する) かまたは ``False`` のどちらかを指定して下さい。" - -#: ../source/treeview.txt:367 -# f82f796e2067418ca346e41f06433852 -msgid "Gets the value set by :meth:`Gtk.TreeViewColumn.set_sort_indicator`" -msgstr ":meth:`Gtk.TreeViewColumn.set_sort_indicator` で指定した値を取得します。" - -#: ../source/treeview.txt:371 -# 49f5c8bf686f41e78d1840f5901aeedc -msgid "Changes the order by which the column is sorted." -msgstr "この項目を並び替える際の順番を変更します。" - -#: ../source/treeview.txt:373 -#: ../source/treeview.txt:532 -# 6f80529af8fb4886bdd8cadd8b319c1f -# 833bcc4d00f8463b9431b94c36329a28 -msgid "*order* can either be ``Gtk.SortType.ASCENDING`` or ``Gtk.SortType.DESCENDING``." -msgstr "*order* には ``Gtk.SortType.ASCENDING`` または ``Gtk.SortType.DESCENDING`` のいずれかを指定します。" - -#: ../source/treeview.txt:377 -# 0b000d1ab3a147789c8e86f79aff89b8 -msgid "Gets the sort order set by :meth:`Gtk.TreeViewColumn.set_sort_order`" -msgstr ":meth:`Gtk.TreeViewColumn.set_sort_order` で指定した並び替えの順番を取得します。" - -#: ../source/treeview.txt:380 -# 27517c731ad540db8b004ca9707f169f -msgid "The Selection" -msgstr "セレクション" - -#: ../source/treeview.txt:381 -# 1866d04dfeeb4990bb1e63729706b9cd -msgid "Most applications will need to not only deal with displaying data, but also receiving input events from users. To do this, simply get a reference to a selection object and connect to the \"changed\" signal." -msgstr "ほとんどのアプリケーションは、そこに表示しているデータを単に処理するだけではなく、ユーザからの入力などのイベントも受け取れるようにしておく必要があります。そのような時には、(現在選択している範囲を表す) セレクション・オブジェクトへのリファレンスを取得して \"changed\" シグナルを接続しておきます。" - -#: ../source/treeview.txt:390 -# 19784a05f40b41f5aed4092768d073cf -msgid "Then to retrieve data for the row selected:" -msgstr "それから、そこで選択したノードのデータを取得します:" - -#: ../source/treeview.txt:399 -# c98c1539dbad464a818cf69d98d02e24 -msgid "You can control what selections are allowed by calling :meth:`Gtk.TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows` instead." -msgstr ":meth:`Gtk.TreeSelection.set_mode` を使って、どんな種類のセレクションを利用できるか指定できます。 :meth:`Gtk.TreeSelection.get_selected` は、このセレクションのモードが :attr:`Gtk.SelectionMode.MULTIPLE` の時は何もしないので、代わりに :meth:`Gtk.TreeSelection.get_selected_rows` を使って下さい。" - -#: ../source/treeview.txt:407 -# e555b9338a0f4639b5f0d29157a12ecb -msgid "TreeSelection Objects" -msgstr "ツリーセレクションのオブジェクト" - -#: ../source/treeview.txt:413 -# e810959e9760442d918df71d0ba37785 -msgid "Where type is one of" -msgstr "*type* は次のいずれかになります。" - -#: ../source/treeview.txt:415 -# 19918dcdb6a04a26b48580aa1460d7c7 -msgid ":attr:`Gtk.SelectionMode.NONE`: No selection is possible" -msgstr ":attr:`Gtk.SelectionMode.NONE`: 何も選択できない" - -#: ../source/treeview.txt:416 -# c823746b444043a2aef77de2d534f2f4 -msgid ":attr:`Gtk.SelectionMode.SINGLE`: Zero or one element may be selected" -msgstr ":attr:`Gtk.SelectionMode.SINGLE`: 0 個ないし 1 個の要素を選択できる" - -#: ../source/treeview.txt:417 -# ca88cda308e64c0cb23a1aa2723a7105 -msgid ":attr:`Gtk.SelectionMode.BROWSE`: Exactly one element is selected. In some circumstances, such as initially or during a search operation, it's possible for no element to be selected. What is really enforced is that the user can't deselect a currently selected element except by selecting another element." -msgstr ":attr:`Gtk.SelectionMode.BROWSE`: 1 個だけの要素を選択できる (ツリーを生成した直後や検索の操作を行っているといった環境では、何も選択しないという状況がありえます。このような時に実現したい操作は、別の要素を選択するまで、現在選択中の要素を選択解除できないようにするというものです)" - -#: ../source/treeview.txt:422 -# 09bb159810d44ba09b520e6e4d895e30 -msgid ":attr:`Gtk.SelectionMode.MULTIPLE`: Any number of elements may be selected. Clicks toggle the state of an item. Any number of elements may be selected. The Ctrl key may be used to enlarge the selection, and Shift key to select between the focus and the child pointed to. Some widgets may also allow Click-drag to select a range of elements." -msgstr ":attr:`Gtk.SelectionMode.MULTIPLE`: いくつでも要素を選択できる (要素をクリックすると選択または選択解除の状態を切り替えます。それによりたくさんの要素を選択できるようにします。[Ctrl] キーを併用すると選択している範囲を広げることができ、[Shift] キーを併用するとフォーカスした場所から次にクリックした場所まで選択できます。更にウィジェットの中にはクリックしながらドラッグすることで選択範囲を変更できるものがあります)" - -#: ../source/treeview.txt:430 -# 526575ef537d48d4aa4def25a889fdee -msgid "Returns a tuple ``(model, treeiter)``, where *model* is the current model and *treeiter* a :class:`Gtk.TreeIter` pointing to the currently selected row. *treeiter* is ``None`` if no rows are selected." -msgstr "``(model, treeiter)`` 形式のタプルを一つ返します。 *model* は現在使用しているモデル、 *treeiter* は現在選択しているノードを指す :class:`Gtk.TreeIter` (``イテレータ``) です。何も選択していない場合は *treeiter* は ``None`` になります。" - -#: ../source/treeview.txt:434 -# 389e452c5bb0418a805aa8a6f7ecacef -msgid "This function will not work if the mode of this selection is :attr:`Gtk.SelectionMode.MULTIPLE`." -msgstr "このメソッドは、このセレクションのモードが :attr:`Gtk.SelectionMode.MULTIPLE` の時は何もしません" - -#: ../source/treeview.txt:439 -# 0afa4fcffa504eb596f7795ed8805239 -msgid "Returns a list of :class:`Gtk.TreePath` instances of all selected rows." -msgstr "現在選択している全てのノードに対する :class:`Gtk.TreePath` (``パス``) を要素とするリストを返します。" - -#: ../source/treeview.txt:442 -# 4c1c3bd2b9db47ccbef3b8f639f7d630 -msgid "Sorting" -msgstr "並び替え" - -#: ../source/treeview.txt:443 -# f35d99c0c7ed4bc98250a5bdda1cce37 -msgid "Sorting is an important feature for tree views and is supported by the standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), which implement the :class:`Gtk.TreeSortable` interface." -msgstr "並び替えはツリービューにとって重要な機能の一つであり、標準的なツリーモデル (:class:`Gtk.TreeStore` と :class:`Gtk.ListStore` の両方) でサポートされています (実際は :class:`Gtk.TreeSortable` というインタフェースが実装しています)。" - -#: ../source/treeview.txt:446 -# c6493b9b0535408a87149afa6492769b -msgid "Sorting by clicking on columns" -msgstr "項目をクリックして並び替える" - -#: ../source/treeview.txt:447 -# fa39d1da593441bcb550009007f049b5 -msgid "A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be sorted by clicking on its header." -msgstr ":class:`Gtk.TreeView` クラスの項目 (``カラム``) は :meth:`Gtk.TreeViewColumn.set_sort_column_id` メソッドを使うと簡単に並び替え出来るようになっています。この関数を呼び出した後は、各項目のヘッダをクリックすることで、カラムの並び替えができるようになります。" - -#: ../source/treeview.txt:450 -# e01acc3170804564a42ff09c3f34462f -msgid "First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as a model." -msgstr "まず、簡単な :class:`Gtk.TreeView` とそのモデルとして :class:`Gtk.ListStore` を用意します。" - -#: ../source/treeview.txt:469 -# 17d8071367fb4475a473a9adada6bba6 -msgid "The next step is to enable sorting. Note that the *column_id* (``0`` in the example) refers to the column of the model and **not** to the TreeView's column." -msgstr "それから並び替えができるようにします。ここで、次の *column_id* (この例では ``0``) はあくまでもモデルの中の項目を参照しているのであり、ツリービューに表示している項目を参照しているわけでは「ない」という点に注意して下さい。" - -#: ../source/treeview.txt:476 -# 5961a53a67774734abca8f67a1f6cd7d -msgid "Setting a custom sort function" -msgstr "独自に並び替えを実装する" - -#: ../source/treeview.txt:477 -# d506f0544df54ca18e63ef0f9ecc2e0d -msgid "It is also possible to set a custom comparison function in order to change the sorting behaviour. As an example we will create a comparison function that sorts case-sensitive. In the example above the sorted list looked like::" -msgstr "さらに、並び替えの挙動を変更するために、独自に (並び替えで使用する) 比較関数を実装して指定することも可能になっています。一例として、大小文字で並び替えを行うための比較関数を作成してみます::" - -#: ../source/treeview.txt:490 -# f72203f537c44c10b65266a7cc85e58b -msgid "The case-sensitive sorted list will look like::" -msgstr "上記のデータを、次のように大小文字で並び替えたいとします::" - -#: ../source/treeview.txt:501 -# ab6a02d63cd845c1b6a0f83073737dfb -msgid "First of all a comparison function is needed. This function gets two rows and has to return a negative integer if the first one should come before the second one, zero if they are equal and a positive integer if the second one should come before the second one." -msgstr "まず最初に、上記のような並び替えを行うために比較関数が一つ必要です。この関数は二つの項目のデータ (row1 と row2) を受け取り、最初のデータが二番目のデータの前にくる場合は負の整数を、両方とも同じであれば 0 を、そして二番目のデータが最初のデータの前にくる場合は正の整数を返すようにします。" - -#: ../source/treeview.txt:517 -# e644c2950b6e45319482bd874cfc3a59 -msgid "Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`." -msgstr "そして、この比較関数を :meth:`Gtk.TreeSortable.set_sort_func` メソッドを使ってモデルにセットします。" - -#: ../source/treeview.txt:524 -# e81c2e18c5554a48906622dccbe01651 -msgid "TreeSortable objects" -msgstr "ツリーソータブルのオブジェクト" - -#: ../source/treeview.txt:530 -# 9599e6fe7c8945058ab6a5e7a32b43e6 -msgid "Sets the current sort column to *sort_column_id*." -msgstr "現在の並び替えの対象となる項目を *sort_column_id* にします。" - -#: ../source/treeview.txt:536 -# 29391db64c8348b995614d25d63cc257 -msgid "Returns a tuple consisting of the current sort column and order." -msgstr "現在の並び替えの対象となる項目とその *order* を要素とするタプルを返します。" - -#: ../source/treeview.txt:540 -# 264d48f18d6e40dbb6a984584676c98c -msgid "Sets the comparison function used when sorting by the colum *sort_column_id*." -msgstr "*sort_column_id* 番目の項目の並び替えで使用する比較関数を指定します。" - -#: ../source/treeview.txt:542 -# a2f07bbaead548adad2f970207cc6dc2 -msgid "*user_data* gets passed to *sort_func*." -msgstr "*user_data* は *sort_func* に引き渡すユーザ・データです。" - -#: ../source/treeview.txt:544 -# 53bf56958e8b4bcc81f1e90a2d6e7ec2 -msgid "*sort_func* is a function with the signature ``sort_func(model, iter1, iter2, user_data)`` and should return a negative integer if *iter1* sorts before *iter2*, zero if they are equal and a positive integer if *iter2* sorts before *iter1*." -msgstr "*sort_func* は ``sort_func(model, iter1, iter2, user_data)`` というシグネチャを持つ関数で、 *iter1* が *iter2* よりも前にくる場合は負の整数を、双方が同じなら 0 を、 *iter2* が *iter1* よりも前にくるならば正の整数を返すようにして下さい。" - -#: ../source/treeview.txt:550 -# 319e25a4cd044dd382788106e8167c49 -msgid "See :meth:`Gtk.TreeSortable.set_sort_func`. This sets the comparison function that is used when sorting by the default sort column" -msgstr ":meth:`Gtk.TreeSortable.set_sort_func` も参照して下さい。このメソッドを使って、デフォルトの項目を対象とする並び替えで使用する比較関数を指定します。" - diff --git a/translations/ja/unicode.po b/translations/ja/unicode.po deleted file mode 100644 index 6d1f720..0000000 --- a/translations/ja/unicode.po +++ /dev/null @@ -1,154 +0,0 @@ -# Japanese translation for unicode.txt in PyGObject-Tutorial. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# Takeshi AIHANA , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-09-24 13:17\n" -"PO-Revision-Date: 2012-10-07 22:20+0900\n" -"Last-Translator: Takeshi AIHANA \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/unicode.txt:2 -# 8950d56d918f43ba8dfd809d0bbfa0d2 -msgid "How to Deal With Strings" -msgstr "文字列の取り扱い" - -#: ../source/unicode.txt:4 -# 0cb3d5c7c0644f7ebb2e3698ec5a3c2d -msgid "This section explains how strings are represented in Python 2.x, Python 3.x and GTK+ and discusses common errors that arise when working with strings." -msgstr "このセクションでは Python の 2 系と 3 系、そして GTK+ における文字列 (型) の表現方法について説明し、文字列を使った処理で遭遇する一般的なエラーについて考察します。" - -#: ../source/unicode.txt:8 -# 961231ca66be47849eec33e1bef9c525 -msgid "Definitions" -msgstr "定義" - -#: ../source/unicode.txt:9 -# a2867888190d433291c4f7507d63194f -msgid "Conceptionally, a string is a list of characters such as 'A', 'B', 'C' or 'É'. **Characters** are abstract representations and their meaning depends on the language and context they are used in. The Unicode standard describes how characters are represented by **code points**. For example the characters above are represented with the code points U+0041, U+0042, U+0043, and U+00C9, respectively. Basically, code points are numbers in the range from 0 to 0x10FFFF." -msgstr "概念上、一個の文字列は 'A' とか 'B' とか 'C' とか 'É' といった文字の並びです。 ``文字`` は抽象的な表現で、その意味はその文字を使用する言語と文脈によって決まります。Unicode の標準には ``コード・ポイント`` (*code points*) による文字の表し方が記載されています。例えば、先ほどの文字をコード・ポイントで表すとそれぞれ U+0041 とか U+0042 とか U+0043 とか U+00C9 になります。原則的にコード・ポイントは 0 から 0x10FFFF までの数値になります。 " - -#: ../source/unicode.txt:17 -# 6278ba605d0747ba8445f7f66971bfe2 -msgid "As mentioned earlier, the representation of a string as a list of code points is abstract. In order to convert this abstract representation into a sequence of bytes the Unicode string must be **encoded**. The simplest from of encoding is ASCII and is performed as follows:" -msgstr "前述の通り、コード・ポイントの並びによる文字列の表現は難解です。この難解な表現を Unicode 文字列のバイトの並びに変換するには ``エンコーディング`` (*encoding*) する必要があります。一番簡単なエンコーディングは ASCII で、次のようになります:" - -#: ../source/unicode.txt:22 -# cdfc66a4356240999998a5745b103985 -msgid "If the code point is < 128, each byte is the same as the value of the code point." -msgstr "変換するコード・ポイントが 128 より小さい場合、それに対応するバイトはコード・ポイントと同じ値にする" - -#: ../source/unicode.txt:25 -# 3ef43a9937a14d278bbd5845e94e09ab -msgid "If the code point is 128 or greater, the Unicode string can't be represented in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in this case.)" -msgstr "変換するコード・ポイントが 128 かまたはそれより大きい場合、Unicode の文字列では表現できない (この際 Python は :exc:`UnicodeEncodeError` という例外を発生させる)" - -#: ../source/unicode.txt:29 -# d857cd9e8dde402ea90c5a85ad150cc7 -msgid "Although ASCII encoding is simple to apply it can only encode for 128 different characters which is hardly enough. One of the most commonly used encodings that addresses this problem is UTF-8 (it can handle any Unicode code point). UTF stands for \"Unicode Transformation Format\", and the '8' means that 8-bit numbers are used in the encoding." -msgstr "ASCII のエンコーディングは簡単ですが、128 個の文字しかエンコーディングできません。これは十分ではありません。この問題に対処するために、最も一般的に使用されているエンコーディングの一つが UTF-8 です (これは Unicode のコード・ポイントを扱うものです)。UTF は \"Unicode Transformation Format\" の略で、'8' はエンコーディングする際に使用する 8 ビットの数値を表しています。" - -#: ../source/unicode.txt:37 -# 3c4fa19c5a894c11963659d91bbb95ca -msgid "Python 2" -msgstr "Python 2" - -#: ../source/unicode.txt:40 -# bba28f96f88949f3adbb3fa054800456 -msgid "Python 2.x’s Unicode Support" -msgstr "Python 2 系での Unicode のサポート" - -#: ../source/unicode.txt:41 -# ed111287ba0244ba92b4bbbcbb53e37b -msgid "Python 2 comes with two different kinds of objects that can be used to represent strings, :class:`str` and :class:`unicode`. Instances of the latter are used to express Unicode strings, whereas instances of the :class:`str` type are byte representations (the encoded string). Under the hood, Python represents Unicode strings as either 16- or 32-bit integers, depending on how the Python interpreter was compiled. Unicode strings can be converted to 8-bit strings with :meth:`unicode.encode`::" -msgstr "Python の 2 系では、文字列を表現する際に使用するオブジェクトを二つ提供しています。それは :class:`str` と :class:`unicode` です。後者のインスタンスは Unicode の文字列を表す際に使用するのに対し、前者の str 型のインスタンスはバイト形式のデータ (エンコードした文字列) です。詳細にいうと、Python は Unicode の文字列を、Python のインタプリタのコンパイル方式に応じて 16 ビットないし 32 ビットの整数値として表現します。Unicode の文字列は :meth:`unicode.encode` メソッドを使って 8 ビットの文字列に変換することができます::" - -#: ../source/unicode.txt:58 -# c93f0b78edab4287a30d922120530bf9 -msgid "Python’s 8-bit strings have a :meth:`str.decode` method that interprets the string using the given encoding::" -msgstr "Python の 8 ビットの文字列に対しては :meth:`str.decode` というメソッドで、指定したエンコーディングを用いて文字列を解釈します::" - -#: ../source/unicode.txt:68 -# ddedddc9461e417daa2aa8d36b6d712f -msgid "Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" -msgstr "あいにく、Python の 2 系では 8 ビットの文字列に 7 ビットの文字 (ASCII) しか含まれていない場合、 :class:`unicode` と :class:`str` のオブジェクトを混ぜ合わせることが可能ですが、ASCII 以外の文字が含まれていると :exc:`UnicodeDecodeError` の例外を受け取ります::" - -#: ../source/unicode.txt:84 -#: ../source/unicode.txt:146 -# d66c3945fdce4cf990e4f6d2f83e41bd -# cfeb5152f3d14cc3a2e9d956fc905299 -msgid "Unicode in GTK+" -msgstr "GTK+ での Unicode のサポート" - -#: ../source/unicode.txt:85 -# c1e8a89eb0d74c5e8f73ea0caa6e2646 -msgid "GTK+ uses UTF-8 encoded strings for all text. This means that if you call a method that returns a string you will always obtain an instance of the :class:`str` type. The same applies to methods that expect one or more strings as parameter, they must be UTF-8 encoded. However, for convenience PyGObject will automatically convert any :class:`unicode` instance to :class:`str` if supplied as argument::" -msgstr "GTK+ は全ての文字列に対し UTF-8 でエンコーディングした文字の並びを使用します。これは、一個の文字列を返すメソッドを呼び出すと、常に :class:`str` 型のインスタンスが得られるという意味です。同様に、一個以上の文字列を引数として受け取るメソッドの場合も、それらの文字列は UTF-8 でエンコーディングされている必要があります。但し、便宜上 PyGObject は引数として扱う場合、自動的に全ての :class:`unicode` のインスタンスを :class:`str` 型に変換するようになっています: " - -#: ../source/unicode.txt:102 -# b00282cb9b734f05a792460217c447b4 -msgid "Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` will always return a :class:`str` instance. Accordingly, ``txt`` and ``unicode_string`` are *not* equal." -msgstr "上の例の最後に警告が表示されている点に注意して下さい。 :meth:`Gtk.Label.set_text` メソッドに :class:`unicode` 型のインスタンスを引数にして呼び出していますが、 :meth:`Gtk.Label.get_text` メソッドは常に :class:`str` 型のインスタンスを返します。そのため ``txt`` と ``unicode_string`` は同じにはなりません。" - -#: ../source/unicode.txt:107 -# 3cb35c7d7ae2420b9426e9521a183ab4 -msgid "This is especially important if you want to internationalize your program using `gettext `_. You have to make sure that gettext will return UTF-8 encoded 8-bit strings for all languages. In general it is recommended to not use :class:`unicode` objects in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects since GTK+ does not fully integrate with :class:`unicode` objects. Otherwise, you would have to decode the return values to Unicode strings each time you call a GTK+ method::" -msgstr "これは、何かプログラムを作成する際に `gettext `_ を使って国際化するような場合は特に重要になってきます。gettext が全ての言語に対して UTF-8 でエンコーディングした 8 ビットの文字列を返すかどうかを確認しておく必要があります。一般的に、GTK+ のアプリケーションで :class:`unicode` 型のオブジェクトの使用は推奨されていません。GTK+ では :class:`unicode` 型のオブジェクトを完全にサポートしていないため、UTF-8 でエンコーディングされた :class:`str` 型のオブジェクトだけを使用することが推奨されています。さもなくば、GTK+ のメソッドを呼び出すたびに返り値を Unicode の文字列にデコーディングしなければならなくなります::" - -#: ../source/unicode.txt:120 -# 4d95526f7d404652b051e2822ebe3d17 -msgid "Python 3" -msgstr "Python 3" - -#: ../source/unicode.txt:123 -# 4543f63232c0457d958efd3a9ebad7dc -msgid "Python 3.x's Unicode support" -msgstr "Python 3 系での Unicode のサポート" - -#: ../source/unicode.txt:124 -# 429d7eaa0ebd41e3831c8d29d39a058f -msgid "Since Python 3.0, all strings are stored as Unicode in an instance of the :class:`str` type. *Encoded* strings on the other hand are represented as binary data in the form of instances of the :class:`bytes` type. Conceptionally, :class:`str` refers to *text*, whereas :class:`bytes` refers to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." -msgstr "Python 3.0 から、全ての文字列は Unicode として :class:`str` 型のインスタンスの中に格納される用になりました。その一方で、 *エンコーディング* された文字列は :class:`bytes` 型のインスタンスの中にバイナリ・データとして格納されます。概念として :class:`str` 型は *文字列* を参照するのに対し、 :class:`bytes` 型は *データ* を参照します。 :meth:`str.encode` メソッドを使うと、 :class:`str` 型から :class:`bytes` 型に変換できます。またその逆の変換は :meth:`bytes.decode` メソッドを使います。" - -#: ../source/unicode.txt:131 -# 621f141c59eb4dec9dac8ed1bd248d90 -msgid "In addition, it is no longer possible to mix Unicode strings with encoded strings, because it will result in a :exc:`TypeError`::" -msgstr "さらに、エンコーディングした文字列と Unicode の文字列を混在させることができなくなりました。そのような状態になると :exc:`TypeError` という例外が発行されます::" - -#: ../source/unicode.txt:147 -# a616ceaab65d4de1bfc034778787a97a -msgid "As a consequence, things are much cleaner and consistent with Python 3.x, because PyGObject will automatically encode/decode to/from UTF-8 if you pass a string to a method or a method returns a string. Strings, or *text*, will always be represented as instances of :class:`str` only::" -msgstr "結果として、Python 3 系になってサポートの内容はかなり明確で一貫性のあるものになりました。その理由は、PyGObject がメソッドに引き渡される文字列やメソッドから返される文字列を自動的に UTF-8 でエンコーディングまたはデコーディングするようになったからです。文字列または *文章* といったものは、常に :class:`str` 型でのみ表現されるようになります:" - -#: ../source/unicode.txt:163 -# 4abf149be182426b9ee547cb70c69bff -msgid "References" -msgstr "参考情報" - -#: ../source/unicode.txt:164 -# 9a7344ccb6484528babfb2f5703e45fc -msgid "`What's new in Python 3.0 `_ describes the new concepts that clearly distinguish between text and data." -msgstr "`Python 3.0 で新しくなったこと `_ の項には、文字列とデータを明確に区別する旨の概念が説明されています。" - -#: ../source/unicode.txt:167 -# 5a6f3badb01d4ad8a57613994c2342d0 -msgid "The `Unicode HOWTO `_ discusses Python 2.x’s support for Unicode, and explains various problems that people commonly encounter when trying to work with Unicode." -msgstr "`Unicode HOWTO `_ には、Python 2 系での Unicode のサポートに関する情報と、ユーザが Unicode を使って何か処理しようとする際によく遭遇する問題点についていろいろ説明があります。" - -#: ../source/unicode.txt:171 -# 868c9fc5a3194c99ab47278dcd622c84 -msgid "The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." -msgstr "`Unicode HOWTO for Python 3.x `_ には Python 3 系での Unicode のサポートに関する情報があります。" - -#: ../source/unicode.txt:174 -# d89af7fd12a14bcb97b0862ba23bfac9 -msgid "`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 encoding." -msgstr "`UTF-8 encoding table and Unicode characters `_ には Unicode のコード・ポイントとそれらに対応する UTF-8 エンコーディングの一覧があります。" - diff --git a/translations/templates/basics.pot b/translations/templates/basics.pot deleted file mode 100644 index d65b5b1..0000000 --- a/translations/templates/basics.pot +++ /dev/null @@ -1,88 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/basics.txt:4 -# 24b2f9d48b8e45bd859945b0860953ff -msgid "Basics" -msgstr "" - -#: ../source/basics.txt:5 -# 9db7f5bec09a41f384f19c77be527e38 -msgid "This section will introduce some of the most important aspects of GTK+." -msgstr "" - -#: ../source/basics.txt:12 -# 6554ff54acd24984a89a55e5f009b8df -msgid "Main loop and Signals" -msgstr "" - -#: ../source/basics.txt:13 -# 798f7a779c44413caca68c8a81d13ad3 -msgid "Like most GUI toolkits, GTK+ uses an event-driven programming model. When the user is doing nothing, GTK+ sits in the main loop and waits for input. If the user performs some action - say, a mouse click - then the main loop \"wakes up\" and delivers an event to GTK+." -msgstr "" - -#: ../source/basics.txt:18 -# b0cde78dd2054458ba6fb7a48d3d48e6 -msgid "When widgets receive an event, they frequently emit one or more signals. Signals notify your program that \"something interesting happened\" by invoking functions you've connected to the signal. Such functions are commonly known as *callbacks*. When your callbacks are invoked, you would typically take some action - for example, when an Open button is clicked you might display a file chooser dialog. After a callback finishes, GTK+ will return to the main loop and await more user input." -msgstr "" - -#: ../source/basics.txt:28 -# f4cbd7ea24ba48c598d555447174c9fb -msgid "A generic example is:" -msgstr "" - -#: ../source/basics.txt:34 -# 972f44f8e7b8421980087239922b3322 -msgid "Firstly, *widget* is an instance of a widget we created earlier. Next, the event we are interested in. Each widget has its own particular events which can occur. For instance, if you have a button you usually want to connect to the \"clicked\" event. This means that when the button is clicked, the signal is issued. Thirdly, the *callback* argument is the name of the callback function. It contains the code which runs when signals of the specified type are issued. Finally, the *data* argument includes any data which should be passed when the signal is issued. However, this argument is completely optional and can be left out if not required." -msgstr "" - -#: ../source/basics.txt:46 -# 267da506661044239ff7a68a0d6ce2b6 -msgid "The function returns a number that identifies this particular signal-callback pair. It is required to disconnect from a signal such that the callback function will not be called during any future or currently ongoing emissions of the signal it has been connected to." -msgstr "" - -#: ../source/basics.txt:56 -# 70d627ed3a8d4fccb205b1182be57641 -msgid "Almost all applications will connect to the \"delete-event\" signal of the top-level window. It is emitted if a user requests that a toplevel window is closed. The default handler for this signal destroys the window, but does not terminate the application. Connecting the \"delete-event\" signal to the function :func:`Gtk.main_quit` will result in the desired behaviour." -msgstr "" - -#: ../source/basics.txt:66 -# 72755f64dedf4e4abff5358fc148d04c -msgid "Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` return." -msgstr "" - -#: ../source/basics.txt:69 -# 8bd75530e6cc4e7ba47d6035a5a19513 -msgid "Properties" -msgstr "" - -#: ../source/basics.txt:70 -# cd07ae732a92407dbd541935ad23c64c -msgid "Properties describe the configuration and state of widgets. As for signals, each widget has its own particular set of properties. For example, a button has the property \"label\" which contains the text of the label widget inside the button. You can specify the name and value of any number of properties as keyword arguments when creating an instance of a widget. To create a label aligned to the right with the text \"Hello World\" and an angle of 25 degrees, use:" -msgstr "" - -#: ../source/basics.txt:81 -# 388e665c8a7b44678d9b42d0621939a7 -msgid "which is equivalent to" -msgstr "" - -#: ../source/basics.txt:90 -# 4f4a608797b74529bc040cef30c4f00e -msgid "Instead of using getters and setters you can also get and set the properties with ``widget.get_property(\"prop-name\")`` and ``widget.set_property(\"prop-name\", value)``, respectively." -msgstr "" - diff --git a/translations/templates/builder.pot b/translations/templates/builder.pot deleted file mode 100644 index 8cde9fe..0000000 --- a/translations/templates/builder.pot +++ /dev/null @@ -1,183 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/builder.txt:2 -# 28ca3c75cdb340899b12cf47418fc71e -msgid "Glade and Gtk.Builder" -msgstr "" - -#: ../source/builder.txt:3 -# 06669688aeb5443b83473f575003f826 -msgid "The :class:`Gtk.Builder` class offers you the opportunity to design user interfaces without writing a single line of code. This is possible through describing the interface by a XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner" -msgstr "" - -#: ../source/builder.txt:7 -# 2cec3b59c96542f19eb496b1fbc15fa4 -msgid "This method has several advantages:" -msgstr "" - -#: ../source/builder.txt:9 -# 2dac0f84567b48e1afb79bb691ac3cdf -msgid "Less code needs to be written." -msgstr "" - -#: ../source/builder.txt:10 -# 77ad0d8c916c4325a64d2a8bbb6c775e -msgid "UI changes can be seen more quickly, so UIs are able to improve." -msgstr "" - -#: ../source/builder.txt:11 -# 8b1060046ae740dcb49a4401be2959c0 -msgid "Designers without programming skills can create and edit UIs." -msgstr "" - -#: ../source/builder.txt:12 -# 8095890fb54447d4957981358c082f1e -msgid "The description of the user interface is independent from the programming language being used." -msgstr "" - -#: ../source/builder.txt:14 -# aff51f4bc9324ac38bc9922e4f1d8efa -msgid "There is still code required for handling interface changes triggered by the user, but :class:`Gtk.Builder` allows you to focus on implementing that functionality." -msgstr "" - -#: ../source/builder.txt:17 -# bf38dacf70354936a1acb487a9f3ce8f -msgid "Creating and loading the .glade file" -msgstr "" - -#: ../source/builder.txt:18 -# 0ec8abf6b3d34ef7937f96d237f413bd -msgid "First of all you have to download and install Glade. There are `several tutorials `_ about Glade, so this is not explained here in detail. Let's start by creating a window with a button in it and saving it to a file named *example.glade*. The resulting XML file should look like this." -msgstr "" - -#: ../source/builder.txt:42 -# a2b0403ac7624dfa921ee8de8e612d30 -msgid "To load this file in Python we need a :class:`Gtk.Builder` object." -msgstr "" - -#: ../source/builder.txt:49 -# d01b99680c3a45479b03f9bb78413144 -msgid "The second line loads all objects defined in *example.glade* into the Builder object." -msgstr "" - -#: ../source/builder.txt:51 -# 3495170aedf645e4bc9cfac39ce347ac -msgid "It is also possible to load only some of the objects. The following line would add only the objects (and their child objects) given in the tuple." -msgstr "" - -#: ../source/builder.txt:58 -# bb75873dc7e549248fe07849a978725c -msgid "These two methods exist also for loading from a string rather than a file. Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:`Gtk.Builder.add_objects_from_string` and they simply take a XML string instead of a file name." -msgstr "" - -#: ../source/builder.txt:62 -# b3e5ad3b88d446fdaa9ea73edf9b6669 -msgid "Accessing widgets" -msgstr "" - -#: ../source/builder.txt:63 -# 80c841df300f4ab8abcbf0ed26c7e21c -msgid "Now that the window and the button are loaded we also want to show them. Therefore the :meth:`Gtk.Window.show_all` method has to be called on the window. But how do we access the associated object?" -msgstr "" - -#: ../source/builder.txt:72 -# 1a305b730d0a4f6d88f800d8ab8977be -msgid "Every widget can be retrieved from the builder by the :meth:`Gtk.Builder.get_object` method and the widget's *id*. It is really *that* simple." -msgstr "" - -#: ../source/builder.txt:75 -# 54a79d0b126d44d4a1465c4dd6d71deb -msgid "It is also possible to get a list of all objects with" -msgstr "" - -#: ../source/builder.txt:82 -# 65625b20737a41f59db984a84619bea9 -msgid "Connecting Signals" -msgstr "" - -#: ../source/builder.txt:83 -# 7eed47e6ca894168ada4bcbca8cae77a -msgid "Glade also makes it possible to define signals which you can connect to handlers in your code without extracting every object from the builder and connecting to the signals manually. The first thing to do is to declare the signal names in Glade. For this example we will act when the window should be closed and when the button was pressed, so we give the name \"onDeleteWindow\" to the \"delete-event\" signal of the window and \"onButtonPressed\" to the \"pressed\" signal of the button. Now the XML file should look like this." -msgstr "" - -#: ../source/builder.txt:91 -# 9292eb192ff04954b42717db41a59f19 -msgid "Now we have to define the handler functions in our code. The *onDeleteWindow* should simply result in a call to :meth:`Gtk.main_quit`. When the button is pressed we would like to print the string \"Hello World!\", so we define the handler as follows" -msgstr "" - -#: ../source/builder.txt:100 -# aaa14cd878c443ef9febfd0f0296fac2 -msgid "Next, we have to connect the signals and the handler functions. The easiest way to do this is to define a *dict* with a mapping from the names to the handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." -msgstr "" - -#: ../source/builder.txt:111 -# b0dfdd3bbba04ee2be94223d595bd7c3 -msgid "An alternative approach is to create a class which has methods that are called like the signals. In our example the last code snippet could be rewritten as:" -msgstr "" - -#: ../source/builder.txt:119 -# 2d948c1b5bee41cb8140352b5cc584b7 -msgid "Builder Objects" -msgstr "" - -#: ../source/builder.txt:124 -# ed80c5d9620446f9aed172c913f2fc57 -msgid "Loads and parses the given file and merges it with the current contents of builder." -msgstr "" - -#: ../source/builder.txt:128 -# 2cda72ebc85f41dcbcf878778a9833a1 -msgid "Parses the given string and merges it with the current contents of builder.." -msgstr "" - -#: ../source/builder.txt:132 -# 053061f497514ab58661abde222d53b7 -msgid "Same as :meth:`Gtk.Builder.add_from_file`, but loads only the objects with the ids given in the *object_ids* list." -msgstr "" - -#: ../source/builder.txt:136 -# dae942bfeff34bcd9cb423ae922828a0 -msgid "Same as :meth:`Gtk.Builder.add_from_string`, but loads only the objects with the ids given in the *object_ids* list." -msgstr "" - -#: ../source/builder.txt:140 -# 3243bb7f31034ef9bd770607537088ec -msgid "Retrieves the widget with the id *object_id* from the loaded objects in the builder." -msgstr "" - -#: ../source/builder.txt:144 -# ebb26787b6934b34a70d87efff20c5e3 -msgid "Returns all loaded objects." -msgstr "" - -#: ../source/builder.txt:148 -# e9a126ca6c934e2e853cc06e84f6a09d -msgid "Connects the signals to the methods given in the *handler_object*. The *handler_object* can be any object which contains keys or attributes that are called like the signal handler names given in the interface description, e.g. a class or a dict." -msgstr "" - -#: ../source/builder.txt:152 -# 0e4cf26d6bba4ec0bdd4f7caded78cf2 -msgid "Example" -msgstr "" - -#: ../source/builder.txt:153 -# e467a8fa24734891b413c05913455413 -msgid "The final code of the example" -msgstr "" - diff --git a/translations/templates/button_widgets.pot b/translations/templates/button_widgets.pot deleted file mode 100644 index bdd1d4a..0000000 --- a/translations/templates/button_widgets.pot +++ /dev/null @@ -1,316 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/button_widgets.txt:2 -# b9068f50c8e349e09a15a6f084d67732 -msgid "Button Widgets" -msgstr "" - -#: ../source/button_widgets.txt:5 -# b362e4f2c35643a7a247d8050846af50 -msgid "Button" -msgstr "" - -#: ../source/button_widgets.txt:7 -# e14755deca9d4d0e822047e63d631af5 -msgid "The Button widget is another commonly used widget. It is generally used to attach a function that is called when the button is pressed." -msgstr "" - -#: ../source/button_widgets.txt:10 -# 3832f8dd14b643cfb715c4434ac64ae5 -msgid "The :class:`Gtk.Button` widget can hold any valid child widget. That is it can hold most any other standard :class:`Gtk.Widget`. The most commonly used child is the :class:`Gtk.Label`." -msgstr "" - -#: ../source/button_widgets.txt:14 -# 229ac588db53424ebbfdabd27c8975f4 -msgid "Usually, you want to connect to the button's \"clicked\" signal which is emitted when the button has been pressed and released." -msgstr "" - -#: ../source/button_widgets.txt:18 -# 195772e34306453a8b248a553ea869a6 -msgid "Button Objects" -msgstr "" - -#: ../source/button_widgets.txt:21 -# c216281861224d79ac6ba181396655e4 -msgid "If label is not ``None``, creates a new :class:`Gtk.Button` with a :class:`Gtk.Label` child containing the given text." -msgstr "" - -#: ../source/button_widgets.txt:24 -# 39966d01f07c4ad8b145ac07bcb3d312 -msgid "If *stock* is not ``None``, creates a new button containing the image and text from a :ref:`stock item `." -msgstr "" - -#: ../source/button_widgets.txt:27 -# 41aab01bf3a2411b881b7b90fe629ddc -msgid "If *use_underline* is set to ``True``, an underline in the text indicates the next character should be used for the mnemonic accelerator key." -msgstr "" - -#: ../source/button_widgets.txt:32 -# a2d826cf6c484f28bdbc59572561fb2b -msgid "Sets the text of the label of the button to *label*." -msgstr "" - -#: ../source/button_widgets.txt:36 -# 49d9cda83d224b36a414b7a419403a96 -msgid "If *True*, an underline in the text of the button label indicates the next character should be used for the mnemonic accelerator key." -msgstr "" - -#: ../source/button_widgets.txt:40 -#: ../source/button_widgets.txt:79 -#: ../source/button_widgets.txt:150 -#: ../source/button_widgets.txt:186 -#: ../source/button_widgets.txt:279 -# cc582c3d540344fba2336448415922e2 -# 41c0a7f4fe4b49bebb6bb210f1f1a210 -# 97ea05fac45041a5a1ab852710a3102c -# e73ac382a43a48f99983f18180d63fae -# 3ddd2496dcb04739a82d79e834228880 -msgid "Example" -msgstr "" - -#: ../source/button_widgets.txt:48 -# 0a7a7b0a2bd840c58e17ab2bfde988e4 -msgid "ToggleButton" -msgstr "" - -#: ../source/button_widgets.txt:50 -# 5330a691e90348faaa8beea36dd97551 -msgid "A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, but when clicked they remain activated, or pressed, until clicked again. When the state of the button is changed, the \"toggled\" signal is emitted." -msgstr "" - -#: ../source/button_widgets.txt:54 -# fec1feaaca6e4551ab61399d2c44cbc3 -msgid "To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the button is \"down\". You can also set the toggle button's state, with :meth:`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state actually changes, it causes the \"toggled\" signal to be emitted." -msgstr "" - -#: ../source/button_widgets.txt:61 -# d4d74e921c844f4f9bc263ccd394cc8e -msgid "ToggleButton Objects" -msgstr "" - -#: ../source/button_widgets.txt:65 -# a995b1d820734f2794a3ea723640868a -msgid "The arguments are the same as for the :class:`Gtk.Button` constructor." -msgstr "" - -#: ../source/button_widgets.txt:69 -# 965b351d14a745759fe24fcf40982b99 -msgid "Returns the buttons current state. Returns ``True`` if the toggle button is pressed in and ``False`` if it is raised." -msgstr "" - -#: ../source/button_widgets.txt:74 -# 01e4e63de92c4bb1a038e4a1ea843b34 -msgid "Sets the status of the toggle button. Set to ``True`` if you want the button to be pressed in, and ``False`` to raise it. This action causes the \"toggled\" signal to be emitted." -msgstr "" - -#: ../source/button_widgets.txt:87 -# 41f9421cdcb4475c859bdb28a41aa1ac -msgid "CheckButton" -msgstr "" - -#: ../source/button_widgets.txt:88 -# 4d2f2ce48f6f4356bc2bef4bfe85770f -msgid ":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk.ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are inherited." -msgstr "" - -#: ../source/button_widgets.txt:96 -# 25be19751b324a4a9a2ecc50b9757793 -msgid "CheckButton Objects" -msgstr "" - -#: ../source/button_widgets.txt:100 -# e7f4e1fa36dd4ee9a04acd98f4d9e3a3 -msgid "Arguments are the same as for :class:`Gtk.Button`." -msgstr "" - -#: ../source/button_widgets.txt:103 -# 886c77e9ea3244ec8a38d5eed6cba7d0 -msgid "RadioButton" -msgstr "" - -#: ../source/button_widgets.txt:104 -# f4c75c9c439a4ff3ae521d9b5090c53f -msgid "Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, but these work in groups, and only one :class:`Gtk.RadioButton` in a group can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is one way of giving the user a choice from many options." -msgstr "" - -#: ../source/button_widgets.txt:109 -# b57273187df9443799abf1a6414ee19d -msgid "Radio buttons can be created with one of the static methods :meth:`Gtk.RadioButton.new_from_widget`, :meth:`Gtk.RadioButton.new_with_label_from_widget` or :meth:`Gtk.RadioButton.new_with_mnemonic_from_widget`. The first radio button in a group will be created passing ``None`` as the *group* argument. In subsequent calls, the group you wish to add this button to should be passed as an argument." -msgstr "" - -#: ../source/button_widgets.txt:117 -# 451725ffc05e45da9e673016e25cd8e5 -msgid "When first run, the first radio button in the group will be active. This can be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as first argument." -msgstr "" - -#: ../source/button_widgets.txt:121 -# 786ccb42e9dd4f5094cae29228b2a9ac -msgid "Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be achieved by calling :meth:`Gtk.RadioButton.join_group`." -msgstr "" - -#: ../source/button_widgets.txt:125 -# 0be6d71d23e040bdb8e6a26a11619c46 -msgid "RadioButton Objects" -msgstr "" - -#: ../source/button_widgets.txt:131 -# 7606957b5ae6474dad3dd511531c3645 -msgid "Creates a new :class:`Gtk.RadioButton`, adding it to the same group as the *group* widget. If *group* is ``None``, a new group is created." -msgstr "" - -#: ../source/button_widgets.txt:136 -# e837316c14a940cf8dace5cbd5b896db -msgid "Creates a new :class:`Gtk.RadioButton`. The text of the label widget inside the button will be set to *label*. *group* is the same as for :meth:`new_from_widget`." -msgstr "" - -#: ../source/button_widgets.txt:142 -# 7c85626df73646e6bebc9e06d87eda30 -msgid "Same as :meth:`new_with_label_from_widget`, but underscores in *label* indicate the mnemonic for the button." -msgstr "" - -#: ../source/button_widgets.txt:147 -# 6c068fa816c649d5a05facfb4975ba6b -msgid "Joins this radio button to the group of another :class:`Gtk.RadioButton` object." -msgstr "" - -#: ../source/button_widgets.txt:158 -# be59b5aeb51b48c5a610502faef02af3 -msgid "LinkButton" -msgstr "" - -#: ../source/button_widgets.txt:159 -# fd5365d175c34bf3a26df7d8582e9aa8 -msgid "A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar to the one used by web browsers, which triggers an action when clicked. It is useful to show quick links to resources." -msgstr "" - -#: ../source/button_widgets.txt:163 -# 7f19a54b3c4342d7b50376ae138c56b4 -msgid "The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton.get_uri`." -msgstr "" - -#: ../source/button_widgets.txt:168 -# 9cb6aa2a592e4cd59fee2d332827515e -msgid "LinkButton Objects" -msgstr "" - -#: ../source/button_widgets.txt:172 -# b0da3e04f1fc4f61814717b2c0d5a34c -msgid "*uri* is the address of the website which should be loaded. The label is set as the text which should be displayed. If it is set to ``None`` or omitted, the web address will be displayed instead." -msgstr "" - -#: ../source/button_widgets.txt:178 -# fcd74d91de4e44c89a98a62257288a28 -msgid "Retrieves the URI set using :meth:`set_uri`." -msgstr "" - -#: ../source/button_widgets.txt:182 -# 968c8fcd7a294601b060e234417a87b7 -msgid "Sets *uri* as the URI where this button points to. As a side-effect this unsets the 'visited' state of the button." -msgstr "" - -#: ../source/button_widgets.txt:194 -# 476a61b42eb24c0e91099dcfd8bfaa35 -msgid "SpinButton" -msgstr "" - -#: ../source/button_widgets.txt:195 -# 8d3f50e857ce4b10b19c881cdc5a20ba -msgid "A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value of some attribute. Rather than having to directly type a number into a :class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one of two arrows to increment or decrement the displayed value. A value can still be typed in, with the bonus that it can be checked to ensure it is in a given range. The main properties of a :class:`Gtk.SpinButton` are set through :class:`Gtk.Adjustment`." -msgstr "" - -#: ../source/button_widgets.txt:203 -# 6fe360e2dfaa46f8a47860c570fc87c6 -msgid "To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk.SpinButton.set_value`. The value entered can either be an integer or float, depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :meth:`Gtk.SpinButton.get_value_as_int`, respectively." -msgstr "" - -#: ../source/button_widgets.txt:208 -# 5bd9d1d1d53b4e5f85492b59918091ce -msgid "When you allow the displaying of float values in the spin button, you may wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk.SpinButton.set_digits`." -msgstr "" - -#: ../source/button_widgets.txt:212 -# c7ff64c095fe45aa8ed5c69d1621168f -msgid "By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` with ``True`` as argument." -msgstr "" - -#: ../source/button_widgets.txt:216 -# e90e4980ef1841a09bf78793cea63a25 -msgid "We can also adjust the update policy of :class:`Gtk.SpinButton`. There are two options here; by default the spin button updates the value even if the data entered is invalid. Alternatively, we can set the policy to only update when the value entered is valid by calling :meth:`Gtk.SpinButton.set_update_policy`." -msgstr "" - -#: ../source/button_widgets.txt:222 -# fc5dacb50c5c4208aee717b1fa7a5d12 -msgid "SpinButton Objects" -msgstr "" - -#: ../source/button_widgets.txt:228 -# 224260f815704f1798e625b61a5e5f06 -msgid "Replaces the :class:`Gtk.Adjustment` associated with this spin button." -msgstr "" - -#: ../source/button_widgets.txt:232 -# be1b3fc6a8ee4b56bc87134810c6211f -msgid "Set the precision to be displayed by this spin button. Up to 20 digit precision is allowed." -msgstr "" - -#: ../source/button_widgets.txt:237 -# 1c1235a136af49e69c99172070aadea1 -msgid "Sets the step and page increments for this spin button. This affects how quickly the value changes when the spin button's arrows are activated." -msgstr "" - -#: ../source/button_widgets.txt:242 -# ba0ac49914fa4bf8b683e897cabdc878 -msgid "Sets the value of this spin button." -msgstr "" - -#: ../source/button_widgets.txt:246 -# 50dea7dc900143b9acfb4b8d6281e438 -msgid "Get the value of this spin button represented as an float." -msgstr "" - -#: ../source/button_widgets.txt:250 -# dce2dc3528f3427bb468fed2577944db -msgid "Get the value of this spin button represented as an integer." -msgstr "" - -#: ../source/button_widgets.txt:254 -# 55d1a4f888bb46d6a320efb5727ab1be -msgid "If *numeric* is ``False``, non-numeric text can be typed into the spin button, else only numbers can be typed." -msgstr "" - -#: ../source/button_widgets.txt:259 -# dc241bec304749839521cae18138741b -msgid "Sets the update behavior of a spin button. This determines whether the spin button is always updated or only when a valid value is set. The *policy* argument can either be :attr:`Gtk.SpinButtonUpdatePolicy.ALWAYS` or :attr:`Gtk.SpinButtonUpdatePolicy.IF_VALID`." -msgstr "" - -#: ../source/button_widgets.txt:265 -# d0b9b4cb29c643938d44f006eb9dff9c -msgid "Adjustment Objects" -msgstr "" - -#: ../source/button_widgets.txt:269 -# 29084a729b364c0a81a969efea9c6812 -msgid "The :class:`Gtk.Adjustment` object represents a value which has an associated lower and upper bound, together with step and page increments, and a page size. It is used within several GTK+ widgets, including :class:`Gtk.SpinButton`, :class:`Gtk.Viewport`, and :class:`Gtk.Range`." -msgstr "" - -#: ../source/button_widgets.txt:274 -# 570b9495c7d340528cc441f2b7d2df8c -msgid "*value* is the initial value, *lower* the minimum value, *upper* the maximum value, *step_increment* the step increment, *page_increment* the page increment, and *page_size* the page size." -msgstr "" - diff --git a/translations/templates/cellrenderers.pot b/translations/templates/cellrenderers.pot deleted file mode 100644 index 822e2c2..0000000 --- a/translations/templates/cellrenderers.pot +++ /dev/null @@ -1,258 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/cellrenderers.txt:4 -# 55ca59d03aac4f4fa2ec40b51ac9da44 -msgid "CellRenderers" -msgstr "" - -#: ../source/cellrenderers.txt:6 -# 619c6dbdab654f488810ea7b77698e90 -msgid ":class:`Gtk.CellRenderer` widgets are used to display information within widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They work closely with the associated widgets and are very powerful, with lots of configuration options for displaying a large amount of data in different ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used for different purposes:" -msgstr "" - -#: ../source/cellrenderers.txt:12 -# 8d138790affe48c2900a7bc44ea92ab5 -msgid ":class:`Gtk.CellRendererText`" -msgstr "" - -#: ../source/cellrenderers.txt:13 -# 6291fcc81f1d401bb7760597a5f40a48 -msgid ":class:`Gtk.CellRendererToggle`" -msgstr "" - -#: ../source/cellrenderers.txt:14 -# c0ad211b51904d23a00b99d1be2cb14f -msgid ":class:`Gtk.CellRendererPixbuf`" -msgstr "" - -#: ../source/cellrenderers.txt:15 -# dd3ac9afa7a040beba02450e0f9bdfd3 -msgid ":class:`Gtk.CellRendererCombo`" -msgstr "" - -#: ../source/cellrenderers.txt:16 -# 5df311a9b3e84c3a8ebc33b56598ed90 -msgid ":class:`Gtk.CellRendererProgress`" -msgstr "" - -#: ../source/cellrenderers.txt:17 -# 2757303889e54603a9babd5bfafcffd6 -msgid ":class:`Gtk.CellRendererSpinner`" -msgstr "" - -#: ../source/cellrenderers.txt:18 -# ca7d4ce7230d4f4d91b4aa448c848b6b -msgid ":class:`Gtk.CellRendererSpin`" -msgstr "" - -#: ../source/cellrenderers.txt:19 -# f85057407d4f4528b33397ea1dd3d9aa -msgid ":class:`Gtk.CellRendererAccel`" -msgstr "" - -#: ../source/cellrenderers.txt:22 -# 65a9ffa477d941a69b5aafbd1f68ef9d -msgid "CellRendererText" -msgstr "" - -#: ../source/cellrenderers.txt:24 -# c7f9d3ce93844903978b3305a5e29622 -msgid "A :class:`Gtk.CellRendererText` renders a given text in its cell, using the font, color and style information provided by its properties. The text will be ellipsized if it is too long and the \"ellipsize\" property allows it." -msgstr "" - -#: ../source/cellrenderers.txt:28 -# 77384217356a47c9891a4a471e1becaf -msgid "By default, text in :class:`Gtk.CellRendererText` widgets is not editable. This can be changed by setting the value of the \"editable\" property to ``True``:" -msgstr "" - -#: ../source/cellrenderers.txt:35 -# 4827490a95ba462ea135067d3e0d3209 -msgid "You can then connect to the \"edited\" signal and update your :class:`Gtk.TreeModel` accordingly." -msgstr "" - -#: ../source/cellrenderers.txt:39 -# 5cbdb12c342b412493bd1d61ba044ace -msgid "CellRendererText Objects" -msgstr "" - -#: ../source/cellrenderers.txt:43 -# 5119c8eef1ce49d9ae75dcfdd79957ba -msgid "Creates a new :class:`Gtk.CellRendererText` instance. Adjust how text is drawn using object properties. Also, with :class:`Gtk.TreeViewColumn`, you can bind a property to a value in a :class:`GtkTreeModel`. For example, you can bind the \"text\" property on the cell renderer to a string value in the model, thus rendering a different string in each row of the :class:`Gtk.TreeView`." -msgstr "" - -#: ../source/cellrenderers.txt:51 -#: ../source/cellrenderers.txt:96 -#: ../source/cellrenderers.txt:121 -#: ../source/cellrenderers.txt:155 -#: ../source/cellrenderers.txt:180 -#: ../source/cellrenderers.txt:209 -# 3e626a7cda134bf38aae0a4c02cfd7a7 -# 1bc0b5269bf84e66a1730288306827df -# dbde6f999d1b46ec889c6aafc280d991 -# e470c820f15d44ee9a0deb3e6010f097 -# 54b6553c97be4f7fa6fd84299fac3ec7 -# 5880f69e04c54989b970bcfc0c5541f9 -msgid "Example" -msgstr "" - -#: ../source/cellrenderers.txt:59 -# ebb7798ed5ad4eabbf46ac55ee692bd0 -msgid "CellRendererToggle" -msgstr "" - -#: ../source/cellrenderers.txt:61 -# cb79b4e0600b41ab9c202ec67dda63ed -msgid ":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The button is drawn as a radio- or checkbutton, depending on the \"radio\" property. When activated, it emits the \"toggled\" signal." -msgstr "" - -#: ../source/cellrenderers.txt:65 -# b629ffb944de4df29fa7cd20e7ba4aeb -msgid "As a :class:`Gtk.CellRendererToggle` can have two states, active and not active, you most likely want to bind the \"active\" property on the cell renderer to a boolean value in the model, thus causing the check button to reflect the state of the model." -msgstr "" - -#: ../source/cellrenderers.txt:71 -# 33dec95b0b3747a5a078b5e3f408803f -msgid "CellRendererToggle Objects" -msgstr "" - -#: ../source/cellrenderers.txt:75 -# 4ec5aacf1a3a4be08fd077d361b1ee4b -msgid "Creates a new :class:`Gtk.CellRendererToggle` instance." -msgstr "" - -#: ../source/cellrenderers.txt:79 -# 757f7aa64b724c959ecd7b69d8639bb1 -msgid "Activates or deactivates a cell renderer." -msgstr "" - -#: ../source/cellrenderers.txt:83 -# 27e15f3f630345b3883b28cbcf6f59d4 -msgid "Returns whether the cell renderer is active." -msgstr "" - -#: ../source/cellrenderers.txt:87 -# 3ae1544c35d349db9288e4cab88afd98 -msgid "If *radio* is ``True``, the cell renderer renders a radio toggle (i.e. a toggle in a group of mutually-exclusive toggles). If ``False``, it renders a check toggle (a standalone boolean option)." -msgstr "" - -#: ../source/cellrenderers.txt:93 -# 52f67b72604e45f2ae1edb9acb8a0ac3 -msgid "Returns whether we're rendering radio toggles rather than checkboxes." -msgstr "" - -#: ../source/cellrenderers.txt:104 -# 554a9e34c737439281c997e4701aadcf -msgid "CellRendererPixbuf" -msgstr "" - -#: ../source/cellrenderers.txt:106 -# ed479944728f477aa28e34feed686138 -msgid "A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf\" property) or a :ref:`stock item ` (set via the \"stock-id\" property)." -msgstr "" - -#: ../source/cellrenderers.txt:111 -# 65c221797ddd4236a2ba432ace0ca062 -msgid "CellRendererPixbuf Objects" -msgstr "" - -#: ../source/cellrenderers.txt:115 -# 774e04270d7f4e1cb37e6a5efcd745c2 -msgid "Creates a new :class:`Gtk.CellRendererPixbuf`. Adjust rendering parameters using object properties. For example, you can bind the \"pixbuf\" or \"stock-id\" property on the cell renderer to a pixbuf value in the model, thus rendering a different image in each row of the :class:`Gtk.TreeView`." -msgstr "" - -#: ../source/cellrenderers.txt:129 -# c076bcf2b33244e88437a977847eb934 -msgid "CellRendererCombo" -msgstr "" - -#: ../source/cellrenderers.txt:131 -# 9e2e16bdc32e4387a7c27de31d9c6830 -msgid ":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk.CellRendererText` from which it is derived. But while the latter offers a simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :class:`Gtk.ComboBox` widget to edit the text. The values to display in the combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model\" property." -msgstr "" - -#: ../source/cellrenderers.txt:137 -# 95853e29c8e44040b24272818e7329de -msgid "The combo cell renderer takes care of adding a text cell renderer to the combo box and sets it to display the column specified by its \"text-column\" property." -msgstr "" - -#: ../source/cellrenderers.txt:140 -# 04c264c53a2742d5ad055bb9623d9577 -msgid "A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used with and without an associated :class:`Gtk.Entry` widget, depending on the value of the \"has-entry\" property." -msgstr "" - -#: ../source/cellrenderers.txt:145 -# 5d8e0ea476124fd4ac13fedbc7a00d85 -msgid "CellRendererCombo Objects" -msgstr "" - -#: ../source/cellrenderers.txt:149 -# a5f2f6fe5ff94404b346bed58b347250 -msgid "Creates a new :class:`Gtk.CellRendererCombo`. Adjust how text is drawn using object properties. For example, you can bind the \"text\" property on the cell renderer to a string value in the model, thus rendering a different string in each row of the :class:`Gtk.TreeView`." -msgstr "" - -#: ../source/cellrenderers.txt:163 -# 6485a3890d294c2590215fd0bd1e1776 -msgid "CellRendererProgress" -msgstr "" - -#: ../source/cellrenderers.txt:165 -# e123deb1b84b448d8cf7fcc3289450cf -msgid ":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar in a cell. Additionally, it can display a text on top of the progress bar." -msgstr "" - -#: ../source/cellrenderers.txt:168 -# 4442227a502d43bcb303f7a50bc4bbdc -msgid "The percentage value of the progress bar can be modified by changing the \"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the *activity mode* by incrementing the \"pulse\" property instead of the \"value\" property." -msgstr "" - -#: ../source/cellrenderers.txt:173 -# e47da3b3a2fc4fe2911871176b1359e8 -msgid "CellRendererProgress Objects" -msgstr "" - -#: ../source/cellrenderers.txt:177 -# d144b4044a33477f99a02e8bcb0fe983 -msgid "Creates a new :class:`Gtk.CellRendererProgress`." -msgstr "" - -#: ../source/cellrenderers.txt:188 -# 6c7b9449590d4b2d8e783ef7063bb353 -msgid "CellRendererSpin" -msgstr "" - -#: ../source/cellrenderers.txt:190 -# cc7840b9c96c48f4967fadb6de3c6233 -msgid ":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk.CellRendererText` from which it is derived. But while the latter offers a simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:`Gtk.SpinButton` widget. Of course, that means that the text has to be parseable as a floating point number." -msgstr "" - -#: ../source/cellrenderers.txt:196 -# d79dd485fc604b07ac9176ac5929daf5 -msgid "The range of the spinbutton is taken from the adjustment property of the cell renderer, which can be set explicitly or mapped to a column in the tree model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` also has properties for the climb rate and the number of digits to display." -msgstr "" - -#: ../source/cellrenderers.txt:202 -# f12cddc7afbf4d0b98314ff30d51155e -msgid "CellRendererSpin Objects" -msgstr "" - -#: ../source/cellrenderers.txt:206 -# 43abc27d36514e48b157e950852868c4 -msgid "Creates a new :class:`Gtk.CellRendererSpin`." -msgstr "" - diff --git a/translations/templates/clipboard.pot b/translations/templates/clipboard.pot deleted file mode 100644 index 0e8297f..0000000 --- a/translations/templates/clipboard.pot +++ /dev/null @@ -1,108 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/clipboard.txt:2 -# 6f6688529248440cb1fcde0c3e1d04af -msgid "Clipboard" -msgstr "" - -#: ../source/clipboard.txt:4 -# f3e597b3abc34f0c8e5d688d37454ee2 -msgid ":class:`Gtk.Clipboard` provides a storage area for a variety of data, including text and images. Using a clipboard allows this data to be shared between applications through actions such as copying, cutting, and pasting. These actions are usually done in three ways: using keyboard shortcuts, using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk.Button` widgets." -msgstr "" - -#: ../source/clipboard.txt:11 -# 18c1caa6448a4dbc9feb875bfb7af6a1 -msgid "There are multiple clipboard selections for different purposes. In most circumstances, the selection named ``CLIPBOARD`` is used for everyday copying and pasting. ``PRIMARY`` is another common selection which stores text selected by the user with the cursor." -msgstr "" - -#: ../source/clipboard.txt:17 -# 3024ecffac054756a64e6ce7fc156e49 -msgid "Clipboard Objects" -msgstr "" - -#: ../source/clipboard.txt:22 -# e545f37faa194f68a1ffa7d01e1ddbf0 -msgid "Obtains the :class:`Gtk.Clipboard` for the given selection." -msgstr "" - -#: ../source/clipboard.txt:24 -# f6bf3b7a3bde48a09b5619812bbd721b -msgid "*selection* is a :class:`Gdk.Atom` describing which clipboard to use. Predefined values include:" -msgstr "" - -#: ../source/clipboard.txt:27 -# 8aae4e93554544e9ac92680ea44071ae -msgid "``Gdk.SELECTION_CLIPBOARD``" -msgstr "" - -#: ../source/clipboard.txt:28 -# 4ff55f0bbd39432fbaf62cb9f2288441 -msgid "``Gdk.SELECTION_PRIMARY``" -msgstr "" - -#: ../source/clipboard.txt:32 -# 5cc488fd4b254c6a80b866eaaeae704a -msgid "Sets the contents of the clipboard to the given text." -msgstr "" - -#: ../source/clipboard.txt:34 -# 65b5793befb84158bcd1a0b25032e486 -msgid "*text* is the string to put in the clipboard." -msgstr "" - -#: ../source/clipboard.txt:36 -# 02ef0b148cc04934b0a2f7db79ead590 -msgid "*length* is the number of characters to store. It may be omitted to store the entire string." -msgstr "" - -#: ../source/clipboard.txt:41 -# 1a47812a4b46437984e8ea88ff9c8837 -msgid "Sets the contents of the clipboard to the given image." -msgstr "" - -#: ../source/clipboard.txt:43 -# 0374f5a2b4e5446ea1a5235217da2330 -msgid "*image* must be a :class:`Gdk.Pixbuf`. To retrieve one from a :class:`Gdk.Image`, use ``image.get_pixbuf()``." -msgstr "" - -#: ../source/clipboard.txt:48 -# 20ec8dfbf5114b8185fa013aab9faed6 -msgid "Returns the clipboard's content as a string, or returns ``None`` if the clipboard is empty or not currently holding text." -msgstr "" - -#: ../source/clipboard.txt:53 -# 52b777f442eb45a0b58577d358c6b781 -msgid "Returns the clipboard's content as a :class:`Gtk.Pixbuf`, or returns ``None`` if the clipboard is empty or not currently holding an image." -msgstr "" - -#: ../source/clipboard.txt:59 -# f0fd75b8c38141a6a03c011617e5ce33 -msgid "Stores the clipboard's data outside the application. Otherwise, data copied to the clipboard may be lost when the application exits." -msgstr "" - -#: ../source/clipboard.txt:64 -# 8347a78c216a4815a4c9f75658faa357 -msgid "Clears the contents of the clipboard. Use with caution; this may clear data from another application." -msgstr "" - -#: ../source/clipboard.txt:68 -# 3564e2e0fe404c9c8592a030362d26e0 -msgid "Example" -msgstr "" - diff --git a/translations/templates/combobox.pot b/translations/templates/combobox.pot deleted file mode 100644 index 75d833a..0000000 --- a/translations/templates/combobox.pot +++ /dev/null @@ -1,118 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/combobox.txt:2 -# 834681fcccd147d3bbe7cc351b2b89a6 -msgid "ComboBox" -msgstr "" - -#: ../source/combobox.txt:3 -# 64954155d6694c9eb829d14363f205b6 -msgid "A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown menu. They are preferable to having many radio buttons on screen as they take up less room. If appropriate, it can show extra information about each item, such as text, a picture, a checkbox, or a progress bar." -msgstr "" - -#: ../source/combobox.txt:8 -# b2cd9ec13b034b5197f581d2dcf395ca -msgid ":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use the model-view pattern; the list of valid choices is specified in the form of a tree model, and the display of the choices can be adapted to the data in the model by using :ref:`cell renderers `. If the combo box contains a large number of items, it may be better to display them in a grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox.set_wrap_width`." -msgstr "" - -#: ../source/combobox.txt:16 -# 332fe7c2093a4458985ce09edbbe0eff -msgid "The :class:`Gtk.ComboBox` widget usually restricts the user to the available choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user to enter arbitrary text if none of the available choices are suitable. To do this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk.ComboBox` instance." -msgstr "" - -#: ../source/combobox.txt:23 -# 77db86d6e2fc45c1a1a526e2af7b2a94 -msgid "For a simple list of textual choices, the model-view API of :class:`Gtk.ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk.ComboBoxText` can contain an entry." -msgstr "" - -#: ../source/combobox.txt:29 -# dc09e41ac04e4feaba845d49160af18a -msgid "ComboBox objects" -msgstr "" - -#: ../source/combobox.txt:35 -# 981cebce9252494c98cb8564c6be3402 -msgid "Creates a new empty :class:`Gtk.ComboBox` with an entry." -msgstr "" - -#: ../source/combobox.txt:39 -# 18787459ac4548bfa23451b22dfb5fba -msgid "Creates a new :class:`Gtk.ComboBox` with the model initialized to *model*." -msgstr "" - -#: ../source/combobox.txt:43 -# caef6cad55964de0b881d9ab082204be -msgid "Creates a new :class:`Gtk.ComboBox` with an entry and the model initialized to *model*." -msgstr "" - -#: ../source/combobox.txt:48 -# dd8e2f65f38a4ecabb6c707fca50e5f0 -msgid "Returns a :class:`Gtk.TreeIter` pointing to the current active item. If no active item exists, ``None`` is returned." -msgstr "" - -#: ../source/combobox.txt:53 -# 852ff1bdcd16412b801665c16964df17 -msgid "Sets the model used by this combo box to be *model*. Will unset a previously set model (if applicable). If model is ``None``, then it will unset the model. Note that this function does not clear the cell renderers." -msgstr "" - -#: ../source/combobox.txt:59 -# 09f47401707a4232b607c5f0d495a4af -msgid "Returns the :class:`Gtk.TreeModel` which is acting as data source for this combo box." -msgstr "" - -#: ../source/combobox.txt:64 -# da4ca3b88e524a9ab634be7f032e7b79 -msgid "Sets the model column which this combo box should use to get strings from to be *text_column*. The column *text_column* in the model of this combo box must be of type ``str``." -msgstr "" - -#: ../source/combobox.txt:68 -# 9db2ebbfb0b547b6a157a6ef66d9eb7b -msgid "This is only relevant if this combo box has been created with the \"has-entry\" property set to ``True``." -msgstr "" - -#: ../source/combobox.txt:73 -# cdce356e5c394e31a755729d35347f1f -msgid "Sets the wrap width of this combo box to be *width*. The wrap width is basically the preferred number of columns when you want the popup to be layed out in a grid." -msgstr "" - -#: ../source/combobox.txt:78 -# 3996c8e8856c44999516c236ce191a88 -msgid "ComboBoxText objects" -msgstr "" - -#: ../source/combobox.txt:84 -# ef5efa26a2124d3f83965eaac51b8a19 -msgid "Creates a new empty :class:`Gtk.ComboBoxText` with an entry." -msgstr "" - -#: ../source/combobox.txt:88 -# bde61a25a0ae44879c3b7ab704903b1c -msgid "Appends *text* to the list of strings stored in this combo box." -msgstr "" - -#: ../source/combobox.txt:92 -# ad27da16905149ceb50fc1047f17cd13 -msgid "Returns the currently active string in this combo box, or ``None`` if none is selected. If this combo box contains an entry, this function will return its contents (which will not necessarily be an item from the list)." -msgstr "" - -#: ../source/combobox.txt:97 -# 3e7ae94ebdf14bb885be9da268dfab69 -msgid "Example" -msgstr "" - diff --git a/translations/templates/dialogs.pot b/translations/templates/dialogs.pot deleted file mode 100644 index 19eecb2..0000000 --- a/translations/templates/dialogs.pot +++ /dev/null @@ -1,482 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/dialogs.txt:2 -# 1dd5ea16b1404a67bcd28d7af7753c3d -msgid "Dialogs" -msgstr "" - -#: ../source/dialogs.txt:4 -# b9062d1089ff4621bf28e82787f2c47a -msgid "Dialog windows are very similar to standard windows, and are used to provide or retrieve information from the user. They are often used to provide a preferences window, for example. The major difference a dialog has is some prepacked widgets which layout the dialog automatically. From there, we can simply add labels, buttons, check buttons, etc. Another big difference is the handling of responses to control how the application should behave after the dialog has been interacted with." -msgstr "" - -#: ../source/dialogs.txt:12 -# 7bf5f0e53f504d4baaeddaef90730236 -msgid "There are several derived Dialog classes which you might find useful. :class:`Gtk.MessageDialog` is used for most simple notifications. But at other times you might need to derive your own dialog class to provide more complex functionality." -msgstr "" - -#: ../source/dialogs.txt:18 -# 7c42349595a04c80ae3b32123584ffaa -msgid "Custom Dialogs" -msgstr "" - -#: ../source/dialogs.txt:20 -# 79aeb3e99f044622883b727c57998a66 -msgid "To pack widgets into a custom dialog, you should pack them into the :class:`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk.Dialog.add_button` method." -msgstr "" - -#: ../source/dialogs.txt:25 -# 0e6944251bb0499e86b914e24a661c07 -msgid "A 'modal' dialog (that is, one which freezes the rest of the application from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." -msgstr "" - -#: ../source/dialogs.txt:30 -# 46f04f710ca64529b28419f1c74a750a -msgid "Clicking a button will emit a signal called \"response\". If you want to block waiting for a dialog to return before returning control flow to your code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which may be a value from the :class:`Gtk.ResponseType` or it could be the custom response value that you specified in the :class:`Gtk.Dialog` constructor or :meth:`Gtk.Dialog.add_button`." -msgstr "" - -#: ../source/dialogs.txt:36 -# 5a9193d46e084e44985bf546dce39b79 -msgid "Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` method removes the dialog from view, however keeps it stored in memory. This is useful to prevent having to construct the dialog again if it needs to be accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` method can be used to delete the dialog from memory once it is no longer needed. It should be noted that if the dialog needs to be accessed after it has been destroyed, it will need to be constructed again otherwise the dialog window will be empty." -msgstr "" - -#: ../source/dialogs.txt:46 -# 942af61eae774a53a1b3bd2adfc9177a -msgid "Dialog Objects" -msgstr "" - -#: ../source/dialogs.txt:50 -# a8ec8359f9a34d339116eeeabb7d9bad -msgid "Creates a new :class:`Gtk.Dialog` with title *title* and transient parent *parent*. The *flags* argument can be used to make the dialog model (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`)." -msgstr "" - -#: ../source/dialogs.txt:55 -# 7eb85ad9c99c49059f54a15a51b1e927 -msgid "*buttons* is a tuple of buttons which can be set to provide a range of different buttons and responses. See the :meth:`add_button` method for details." -msgstr "" - -#: ../source/dialogs.txt:59 -#: ../source/dialogs.txt:163 -# dc48cbe9d59841c890990db357220c66 -# ecea65580b5c477ba6f64a6717051a45 -msgid "All arguments are optional and can be referred to as key-word arguments as well." -msgstr "" - -#: ../source/dialogs.txt:64 -# de7b9331e8d240bba14374f745d1e661 -msgid "Return the content area of of this dialog." -msgstr "" - -#: ../source/dialogs.txt:68 -# d37defa6e52a4e748fcc0fc7ea69ef21 -msgid "Adds a button with the given text (or a stock button, if *button_text* is a :ref:`stock item `) and sets things up so that clicking the button will emit the \"response\" signal with the given *response_id*. The button is appended to the end of the dialog's action area." -msgstr "" - -#: ../source/dialogs.txt:73 -# 7b6e98b1220245cd903f1475eeef5d03 -msgid "*response_id* can be any positive integer or one of the predefined :class:`Gtk.ResponseType` values:" -msgstr "" - -#: ../source/dialogs.txt:76 -# 6da12ecf1b2742f1b85193995afd9be5 -msgid ":attr:`Gtk.ResponseType.NONE`" -msgstr "" - -#: ../source/dialogs.txt:77 -# 3bbc64b7eaee41309fdbffcacf1f7be9 -msgid ":attr:`Gtk.ResponseType.REJECT`" -msgstr "" - -#: ../source/dialogs.txt:78 -#: ../source/dialogs.txt:209 -# 6abad6c9533c4b2f9a7f09600ac0ea98 -# 405882b092bb4586bbde36c3ad726822 -msgid ":attr:`Gtk.ResponseType.ACCEPT`" -msgstr "" - -#: ../source/dialogs.txt:79 -# 9bb819ca56284c0d8347f063d0e9a747 -msgid ":attr:`Gtk.ResponseType.DELETE_EVENT`" -msgstr "" - -#: ../source/dialogs.txt:80 -#: ../source/dialogs.txt:210 -# 96d5049083ff42fea71f815166d718cc -# e1f618f73fe949d099a1e27e20fe160b -msgid ":attr:`Gtk.ResponseType.OK`" -msgstr "" - -#: ../source/dialogs.txt:81 -# 2bd6bba0a24e4cd087e34a8399dfbaec -msgid ":attr:`Gtk.ResponseType.CANCEL`" -msgstr "" - -#: ../source/dialogs.txt:82 -# 362ff9b6d7e04901ad34efa29c750ddc -msgid ":attr:`Gtk.ResponseType.CLOSE`" -msgstr "" - -#: ../source/dialogs.txt:83 -#: ../source/dialogs.txt:211 -# 4078546696f6490cae891cadb070d8cd -# c37dbd7a8813483caa5488625299c83b -msgid ":attr:`Gtk.ResponseType.YES`" -msgstr "" - -#: ../source/dialogs.txt:84 -# 8ad1fbecebaf4871837f122c85e5a756 -msgid ":attr:`Gtk.ResponseType.NO`" -msgstr "" - -#: ../source/dialogs.txt:85 -#: ../source/dialogs.txt:212 -# 6caf6c34adc34296b929af6cee9b7563 -# b72cfeef84584fbab4f9c77ff6fd1d01 -msgid ":attr:`Gtk.ResponseType.APPLY`" -msgstr "" - -#: ../source/dialogs.txt:86 -# d8ef09af76e1451e86573224cbfbcaeb -msgid ":attr:`Gtk.ResponseType.HELP`" -msgstr "" - -#: ../source/dialogs.txt:88 -# 76992253b75845cc9d54a165b9825746 -msgid "The button widget is returned, but usually you don't need it." -msgstr "" - -#: ../source/dialogs.txt:92 -# acc5c72eab1047e492b021eda58045b7 -msgid "Adds several buttons to this dialog using the button data passed as arguments to the method. This method is the same as calling :meth:`add_button` repeatedly. The button data pairs - button text (or :ref:`stock item `) and a response ID integer are passed individually. For example::" -msgstr "" - -#: ../source/dialogs.txt:102 -# d08eb91272614383934c66ce07cf27a5 -msgid "Sets a dialog modal or non-modal. Modal dialogs prevent interaction with other windows in the same application." -msgstr "" - -#: ../source/dialogs.txt:107 -# abd078ab2a0c4345ba3f3849afc90ef1 -msgid "Blocks in a recursive main loop until the dialog either emits the \"response\" signal, or is destroyed. If the dialog is destroyed during the call to :meth:`run`, :meth:`run` returns :attr:`Gtk.ResponseType.NONE`. Otherwise, it returns the response ID from the \"response\" signal emission." -msgstr "" - -#: ../source/dialogs.txt:113 -#: ../source/dialogs.txt:175 -#: ../source/dialogs.txt:340 -# 6e4acf32aa6845eaa31386cd1573edcd -# 58de7ace08544443a4a18c11d8c21f73 -# ac08ff8b9e434649bfd227bbaf4e7d68 -msgid "Example" -msgstr "" - -#: ../source/dialogs.txt:120 -# 3ad2406451584374a89c15af4628afef -msgid "MessageDialog" -msgstr "" - -#: ../source/dialogs.txt:122 -# 760053b8a6be40d2859e4d7d7899a1dd -msgid ":class:`Gtk.MessageDialog` is a convenience class, used to create simple, standard message dialogs, with a message, an icon, and buttons for user response You can specify the type of message and the text in the :class:`Gtk.MessageDialog` constructor, as well as specifying standard buttons." -msgstr "" - -#: ../source/dialogs.txt:127 -# afee1506a6f54a4ca179869cfe5ce5bc -msgid "In some dialogs which require some further explanation of what has happened, a secondary text can be added. In this case, the primary message entered when creating the message dialog is made bigger and set to bold text. The secondary message can be set by calling :meth:`Gtk.MessageDialog.format_secondary_text`." -msgstr "" - -#: ../source/dialogs.txt:133 -# 6b04c0a0c1c4446a97f799a8817420ce -msgid "MessageDialog Objects" -msgstr "" - -#: ../source/dialogs.txt:137 -# 4a512b3977a048c8a4201077bf434be7 -msgid "Creates a new :class:`Gtk.MessageDialog` with transient parent *parent*. The *flags* argument can be used to make the dialog model (:attr:`Gtk.DialogFlags.MODAL`) and/or to have it destroyed along with its transient parent (:attr:`Gtk.DialogFlags.DESTROY_WITH_PARENT`)." -msgstr "" - -#: ../source/dialogs.txt:142 -# 131b9b5c129040fd90604f159ddd9178 -msgid "*message_type* can be set to one of the following values:" -msgstr "" - -#: ../source/dialogs.txt:144 -# 97818df00f944d839ae8c068a689ef0e -msgid ":attr:`Gtk.MessageType.INFO`: Informational message" -msgstr "" - -#: ../source/dialogs.txt:145 -# 80a4d727e96e4430b15570ca8d029d29 -msgid ":attr:`Gtk.MessageType.WARNING`: Non-fatal warning message" -msgstr "" - -#: ../source/dialogs.txt:146 -# 1f38fff82c20430f88677e5d53a52735 -msgid ":attr:`Gtk.MessageType.QUESTION`: Question requiring a choice" -msgstr "" - -#: ../source/dialogs.txt:147 -# 93591aead3094bb59237984b7efdd89a -msgid ":attr:`Gtk.MessageType.ERROR`: Fatal error message" -msgstr "" - -#: ../source/dialogs.txt:148 -# e816bfe23d7f4e2f8a22c0a0e323c41b -msgid ":attr:`Gtk.MessageType.OTHER`: None of the above, doesn't get an icon" -msgstr "" - -#: ../source/dialogs.txt:150 -# c8ab1d1eebf24cdc9e4466b559300d13 -msgid "It is also possible to set a variety of buttons on the message dialog, to retrieve different responses from the user. One of the following values can be used:" -msgstr "" - -#: ../source/dialogs.txt:154 -# a0d870ccc7dd4078957308ddd8c0ca8a -msgid ":attr:`Gtk.ButtonsType.NONE`: no buttons at all" -msgstr "" - -#: ../source/dialogs.txt:155 -# 3407902610884015bdf3520b605ba016 -msgid ":attr:`Gtk.ButtonsType.OK`: an OK button" -msgstr "" - -#: ../source/dialogs.txt:156 -# ead6f4f401ce40f5a2cac526b04c3a25 -msgid ":attr:`Gtk.ButtonsType.CLOSE`: a Close button" -msgstr "" - -#: ../source/dialogs.txt:157 -# ebcd490fce464a83a67ca7ec8e071ebf -msgid ":attr:`Gtk.ButtonsType.CANCEL`: a Cancel button" -msgstr "" - -#: ../source/dialogs.txt:158 -# aa49f4c9e4bf45f78adb79d9b2e85943 -msgid ":attr:`Gtk.ButtonsType.YES_NO`: Yes and No buttons" -msgstr "" - -#: ../source/dialogs.txt:159 -# 2916d8642fb8444d940282b1d146940c -msgid ":attr:`Gtk.ButtonsType.OK_CANCEL`: OK and Cancel buttons" -msgstr "" - -#: ../source/dialogs.txt:161 -# ed16eb8b9f7c4cc784297f6ea1d96da0 -msgid "Finally, *message_format* is some text that the user may want to see." -msgstr "" - -#: ../source/dialogs.txt:168 -# 5f238278cef146e2967d826600fc89ef -msgid "Sets the secondary text of the message dialog to be *message_format*." -msgstr "" - -#: ../source/dialogs.txt:170 -# 78628273f5f5432cbf3fa3edc5ca0282 -msgid "Note that setting a secondary text makes the primary text (*message_format* argument of :class:`Gtk.MessageDialog` constructor) become bold, unless you have provided explicit markup." -msgstr "" - -#: ../source/dialogs.txt:183 -# 3f1cbeffaf2547c4b36c28507aed65ad -msgid "FileChooserDialog" -msgstr "" - -#: ../source/dialogs.txt:185 -# 1b54f2ef6da24559a9845b5738e80e71 -msgid "The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or \"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." -msgstr "" - -#: ../source/dialogs.txt:189 -# efb5f39184cb4a63a82c1e4abf9e8319 -msgid "When creating a :class:`Gtk.FileChooserDialog` you have to define the dialog's purpose:" -msgstr "" - -#: ../source/dialogs.txt:192 -# 748411dae64840428f21582b157383a3 -msgid "To select a file for opening, as for a File/Open command, use :attr:`Gtk.FileChooserAction.OPEN`" -msgstr "" - -#: ../source/dialogs.txt:194 -# 563f70ff5f7d4843a10cdfb77ec5384a -msgid "To save a file for the first time, as for a File/Save command, use :attr:`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :meth:`Gtk.FileChooser.set_current_name`." -msgstr "" - -#: ../source/dialogs.txt:197 -# bab308797e704551aa893e33852b24b7 -msgid "To save a file under a different name, as for a File/Save As command, use :attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:`Gtk.FileChooser.set_filename`." -msgstr "" - -#: ../source/dialogs.txt:200 -# e4c681be340347d99574d58e72ea4f06 -msgid "To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction.SELECT_FOLDER`." -msgstr "" - -#: ../source/dialogs.txt:202 -# 03173c9188774bb5abb968dce2971d67 -msgid ":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk.ResponseType.CANCEL` which can be specified in the :class:`Gtk.FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can not use custom response codes with :class:`Gtk.FileChooserDialog`. It expects that at least one button will have of the following response IDs:" -msgstr "" - -#: ../source/dialogs.txt:214 -# 6ec6d1a5daf9471f9deb38f9c550c775 -msgid "When the user is finished selecting files, your program can get the selected names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs (:meth:`Gtk.FileChooser.get_uri`)." -msgstr "" - -#: ../source/dialogs.txt:218 -# 40b996c33e8e4d1da1af8e97d1bb8f8b -msgid "By default, :class:`Gtk.FileChooser` only allows a single file to be selected at a time. To enable multiple files to be selected, use :meth:`Gtk.FileChooser.set_select_multiple`. Retrieving a list of selected files is possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk.FileChooser.get_uris`." -msgstr "" - -#: ../source/dialogs.txt:224 -# 918638a13fe845cb8978a2af218b8f7e -msgid ":class:`Gtk.FileChooser` also supports a variety of options which make the files and folders more configurable and accessible." -msgstr "" - -#: ../source/dialogs.txt:227 -# ebde2f9e612d4199ba63060ac2e5369c -msgid ":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." -msgstr "" - -#: ../source/dialogs.txt:228 -# ee2c6b6d778a4d9aba406dd6b274a1f6 -msgid ":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." -msgstr "" - -#: ../source/dialogs.txt:229 -# 00e8780a6a244dd8b38f4d1c570b56df -msgid ":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a confirmation dialog if the user types a file name that already exists." -msgstr "" - -#: ../source/dialogs.txt:233 -# 09c28df190b2471ab8db44079442677e -msgid "Furthermore, you can specify which kind of files are displayed by creating :class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser.add_filter`. The user can then select one of the added filters from a combo box at the bottom of the file chooser." -msgstr "" - -#: ../source/dialogs.txt:239 -# ca7cb4691e0046b98c0838044bf098c7 -msgid "FileChooser Objects" -msgstr "" - -#: ../source/dialogs.txt:243 -# 36017c96af094822b5f714c9983a900a -msgid "Creates a new :class:`Gtk.FileChooserDialog` with title *title and transient parent *parent*." -msgstr "" - -#: ../source/dialogs.txt:246 -# 8cd2faf882a949db926c01813c8302f6 -msgid "*action* can be one of the following:" -msgstr "" - -#: ../source/dialogs.txt:248 -# 6fa75eea73d546818e5bed33897d729c -msgid ":attr:`Gtk.FileChooserAction.OPEN`: The file chooser will only let the user pick an existing file." -msgstr "" - -#: ../source/dialogs.txt:250 -# 0d968286140741bb9501222ac3af15b1 -msgid ":attr:`Gtk.FileChooserAction.SAVE`: The file chooser will let the user pick an existing file, or type in a new filename." -msgstr "" - -#: ../source/dialogs.txt:252 -# 9f3230f7122e486393b8a7b2b4d9acac -msgid ":attr:`Gtk.FileChooserAction.SELECT_FOLDER`: The file chooser will let the user pick an existing folder." -msgstr "" - -#: ../source/dialogs.txt:254 -# e7143d73aeea4598930d2e84e6ad0baf -msgid ":attr:`Gtk.FileChooserAction.CREATE_FOLDER`: The file chooser will let the user name an existing or new folder." -msgstr "" - -#: ../source/dialogs.txt:257 -# 6f4bcb89739647948b252bb1f134e9e7 -msgid "The *buttons* argument has the same format as for the :class:`Gtk.Dialog` constructor." -msgstr "" - -#: ../source/dialogs.txt:264 -# fe743682444642058aaedcb2c8780792 -msgid "Sets the current name in the file selector, as if entered by the user." -msgstr "" - -#: ../source/dialogs.txt:268 -# cff1fc4fe2b44d2e820bbb891037206e -msgid "Sets *filename* as the current filename for the file chooser, by changing to the file's parent folder and actually selecting the file in list; all other files will be unselected. If the chooser is in :attr:`Gtk.FileChooserAction.SAVE` mode, the file's base name will also appear in the dialog's file name entry." -msgstr "" - -#: ../source/dialogs.txt:274 -# 512d0b2ec0d14fe7beb05919598cd4e5 -msgid "Note that the file must exist, or nothing will be done except for the directory change." -msgstr "" - -#: ../source/dialogs.txt:279 -# b46613799bb345f5bb9bba4c818ee637 -msgid "Sets whether multiple files can be selected. This is only relevant if the mode is :attr:`Gtk.FileChooserAction.OPEN` or :attr:`Gtk.FileChooserAction.SELECT_FOLDER`." -msgstr "" - -#: ../source/dialogs.txt:285 -# dac2248392f74da990fa125dcd84769e -msgid "Sets whether only local files can be selected." -msgstr "" - -#: ../source/dialogs.txt:289 -# d6c3f5abd0a44200838bbd5a2273eeba -msgid "Sets whether to display hidden files and folders." -msgstr "" - -#: ../source/dialogs.txt:293 -# 9a738e74bb074dd1ad54a345ed48098e -msgid "Sets whether to confirm overwriting in save mode." -msgstr "" - -#: ../source/dialogs.txt:297 -# 3b546c6d1a864f4fa129791f73479a0d -msgid "Returns the filename for the currently selected file in the file selector. If multiple files are selected, use :meth:`get_filenames` instead." -msgstr "" - -#: ../source/dialogs.txt:302 -# cbdede1881e741bc8a8abc0f3a5888c5 -msgid "Returns a list of all the selected files and subfolders in the current folder. The returned names are full absolute paths. If files in the current folder cannot be represented as local filenames they will be ignored. Use :meth:`get_uris` instead." -msgstr "" - -#: ../source/dialogs.txt:309 -# 42c4f79bff734210810aebb4aa3f3a2a -msgid "Returns the URI for the currently selected file in the file selector. If multiple files are selected, use :meth:`get_uris` instead." -msgstr "" - -#: ../source/dialogs.txt:314 -# cb379c81d8334836b53c609d11e2680c -msgid "Returns a list of all the selected files and subfolders in the current folder. The returned names are full absolute URIs." -msgstr "" - -#: ../source/dialogs.txt:319 -# e245b596e4ce47e2a5a5aad7cda29c19 -msgid "Adds the :class:`Gtk.FileFilter` instance *filter* to the list of filters that the user can choose from. When a filter is selected, only files that are passed by that filter are displayed." -msgstr "" - -#: ../source/dialogs.txt:327 -# 0981376cd7ca436fba567cb9125aedb5 -msgid "Sets the human-readable name of the filter; this is the string that will be displayed in the file selector user interface if there is a selectable list of filters." -msgstr "" - -#: ../source/dialogs.txt:333 -# f0e5296d77c949f0b8b71265cdf9124c -msgid "Adds a rule allowing a given mime type to filter." -msgstr "" - -#: ../source/dialogs.txt:337 -# ad387a1a2a1d4314ab0d366f4f7adbfa -msgid "Adds a rule allowing a shell style glob to a filter." -msgstr "" - diff --git a/translations/templates/drag_and_drop.pot b/translations/templates/drag_and_drop.pot deleted file mode 100644 index df10ff6..0000000 --- a/translations/templates/drag_and_drop.pot +++ /dev/null @@ -1,303 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/drag_and_drop.txt:2 -# 0eb0e59dc379423e813ec35a3e2af963 -msgid "Drag and Drop" -msgstr "" - -#: ../source/drag_and_drop.txt:4 -# 35375cd0e73c415a9f4751cd99baf221 -msgid "Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is required for the following examples to work." -msgstr "" - -#: ../source/drag_and_drop.txt:8 -# d639de0df31647549360facff0766424 -msgid "Setting up drag and drop between widgets consists of selecting a drag source (the widget which the user starts the drag from) with the :meth:`Gtk.Widget.drag_source_set` method, selecting a drag destination (the widget which the user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then handling the relevant signals on both widgets." -msgstr "" - -#: ../source/drag_and_drop.txt:14 -# 73df05c2477744d38c0382195be41280 -msgid "Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget.drag_dest_set` some specialised widgets require the use of specific functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." -msgstr "" - -#: ../source/drag_and_drop.txt:18 -# 0fbec61e952d4c19b0b4b7040c0cf790 -msgid "A basic drag and drop only requires the source to connect to the \"drag-data-get\" signal and the destination to connect to the \"drag-data-received\" signal. More complex things such as specific drop areas and custom drag icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." -msgstr "" - -#: ../source/drag_and_drop.txt:24 -# 0e102a85c2164407a00f72c4235d81cb -msgid "In order to transfer data between the source and destination, you must interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." -msgstr "" - -#: ../source/drag_and_drop.txt:30 -# c60d7d4382dc4e8ab7edf41c158384d5 -msgid "Target Entries" -msgstr "" - -#: ../source/drag_and_drop.txt:31 -# 2343c81413904a96ac08aba236e45e6e -msgid "To allow the drag source and destination to know what data they are receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of data that will be sent by the drag source and received by the drag destination." -msgstr "" - -#: ../source/drag_and_drop.txt:36 -# db53c619d48a49249668ad592d23aff8 -msgid "There are two ways of adding :class:`Gtk.TargetEntry's ` to a source and destination. If the drag and drop is simple and each target entry is of a different type, you can use the group of methods :meth:`mentioned here `." -msgstr "" - -#: ../source/drag_and_drop.txt:41 -# d26ecefd1afc48bfb86fc4ec50f94248 -msgid "If you require more than one type of data or wish to do more complex things with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." -msgstr "" - -#: ../source/drag_and_drop.txt:46 -# 2dd99d8e52dd41ceadc788fd82e5bd22 -msgid "Drag and Drop Methods and Objects" -msgstr "" - -#: ../source/drag_and_drop.txt:51 -# 3f250ff19916476fadbb09c6dd075735 -msgid "Sets the widget to be a drag source." -msgstr "" - -#: ../source/drag_and_drop.txt:53 -# b809fb2db2cb42ebb39927f48ce60b13 -msgid "*start_button_mask* are a combination of :attr:`Gdk.ModifierType` masks which sets which buttons must be pressed for a drag to occur. *targets* is a list of :class:`Gtk.TargetEntry's ` which describe the data to be passed between source and destination. *actions* are a combination :attr:`Gdk.DragAction` masks to show possible drag actions." -msgstr "" - -#: ../source/drag_and_drop.txt:62 -# e8358cb62e894f4c99b733a303868c8c -msgid "Sets the widget to be a drag destination." -msgstr "" - -#: ../source/drag_and_drop.txt:64 -# db9b48ffeb724abe98bc8b4d03622f8f -msgid "*flags* are a combination of :attr:`Gtk.DestDefaults` masks which configures the processes which occur on a drag site. *targets* is a list of :class:`Gtk.TargetEntry's ` which describe the data to be passed between source and destination. *actions* are a combination :attr:`Gdk.DragAction` masks to show possible drag actions." -msgstr "" - -#: ../source/drag_and_drop.txt:74 -# 318ffdc5f32d4291a227a10e80ecc8ab -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a piece of text." -msgstr "" - -#: ../source/drag_and_drop.txt:80 -# a5dad67948db41f99007f66708a58482 -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a :class:`GdkPixbuf.Pixbuf`." -msgstr "" - -#: ../source/drag_and_drop.txt:86 -# 1588279020a147338319d5d13abf0da0 -msgid "Add a :class:`Gtk.TargetEntry` to the drag source/destination which contains a list of URIs." -msgstr "" - -#: ../source/drag_and_drop.txt:93 -# c7ac2577f9ab4bc9992cc261eb5afebb -msgid "Creates a new target entry." -msgstr "" - -#: ../source/drag_and_drop.txt:95 -# ffa7549c9777463cbdc62eb76c03ba14 -msgid "*target* is a string describing the type of data the target entry describes." -msgstr "" - -#: ../source/drag_and_drop.txt:97 -# 27eceeced3a34c0db81cf25992884a2a -msgid "*flags* controls under which conditions will the data be transferred in a drag and drop and is a combination of the :attr:`Gtk.TargetFlags` values:" -msgstr "" - -#: ../source/drag_and_drop.txt:100 -# b762c9177c8a433bbb04c8024457599f -msgid ":attr:`Gtk.TargetFlags.SAME_APP` - Only transferred in the same application" -msgstr "" - -#: ../source/drag_and_drop.txt:101 -# aeb96dc28f1a4ae3be0f9373a0a5fd36 -msgid ":attr:`Gtk.TargetFlags.SAME_WIDGET` - Only transferred within the same widget" -msgstr "" - -#: ../source/drag_and_drop.txt:102 -# e7f3d2219558489782ffac1f5167e380 -msgid ":attr:`Gtk.TargetFlags.OTHER_APP` - Only transferred in a different application" -msgstr "" - -#: ../source/drag_and_drop.txt:103 -# 0b0bb3099301431bbc8c718ba6d05ebe -msgid ":attr:`Gtk.TargetFlags.OTHER_WIDGET` - Only transferred within a different widget" -msgstr "" - -#: ../source/drag_and_drop.txt:105 -# 903629d01d9b4e67a01f798368645a97 -msgid "*info* is an ID which the application can use to determine between different pieces of data contained in a drag and drop operation." -msgstr "" - -#: ../source/drag_and_drop.txt:112 -# 10f2e566cc6c4474b05b3c9aee185b97 -msgid "Returns the contents of the text contained in selection data" -msgstr "" - -#: ../source/drag_and_drop.txt:116 -# 3c244011c192487ea296d34f3f8455c0 -msgid "Sets the contents of the text contained in selection data to *text*" -msgstr "" - -#: ../source/drag_and_drop.txt:120 -# 5e9db5f70e5a47dd8a62c8b16471c9f9 -msgid "Returns the pixbuf contained in selection data" -msgstr "" - -#: ../source/drag_and_drop.txt:124 -# 30b45a431248419eb26f8c1823ae3895 -msgid "Sets the pixbuf contained in selection data to *pixbuf*" -msgstr "" - -#: ../source/drag_and_drop.txt:129 -# 8ccf56999a0444f7820395273174de01 -msgid "Drag Source Signals" -msgstr "" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# c588aefe09354313acc30250e3f96477 -# 11feaee5d4fe4f7c8d440001adaf9b88 -msgid "Name" -msgstr "" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# f67ed99e753f43588397fec637550672 -# 38bb7f49dbc14be893711db324453106 -msgid "When it is emitted" -msgstr "" - -#: ../source/drag_and_drop.txt:131 -#: ../source/drag_and_drop.txt:145 -# 3f1d01328f38466b81aaadd5404517f5 -# e21e096a9bdf426aa0dda49adfab8955 -msgid "Common Purpose" -msgstr "" - -#: ../source/drag_and_drop.txt:133 -# 986b4bbb0b304cb5834a9e8d155a1c5e -msgid "drag-begin" -msgstr "" - -#: ../source/drag_and_drop.txt:133 -# 84cc69f08fa2477abf19ae20efce883d -msgid "User starts a drag" -msgstr "" - -#: ../source/drag_and_drop.txt:133 -# e4dd1b49e1ff4ac99f2b0e29795964f8 -msgid "Set-up drag icon" -msgstr "" - -#: ../source/drag_and_drop.txt:135 -# e3c7499d1d664e4884546943341bd326 -msgid "drag-data-get" -msgstr "" - -#: ../source/drag_and_drop.txt:135 -# e7f2203f560e441684a7d102b353e386 -msgid "When drag data is requested by the destination" -msgstr "" - -#: ../source/drag_and_drop.txt:135 -#: ../source/drag_and_drop.txt:151 -# da73ba7372ce44219e7cfc46b9858d7d -# 17c2903e616b4d36a60ad8ede8f71fe6 -msgid "Transfer drag data from source to destination" -msgstr "" - -#: ../source/drag_and_drop.txt:137 -# ffd2cde73cd449718785e21e8a3768e1 -msgid "drag-data-delete" -msgstr "" - -#: ../source/drag_and_drop.txt:137 -# 1e8c48902c2b4883a41593cb8c1b8b37 -msgid "When a drag with the action Gdk.DragAction.MOVE is completed" -msgstr "" - -#: ../source/drag_and_drop.txt:137 -# bfc8bb164adf4f089f599895a51a9425 -msgid "Delete data from the source to complete the 'move'" -msgstr "" - -#: ../source/drag_and_drop.txt:139 -# f02b62c1be824375be8719ca95dc31be -msgid "drag-data-end" -msgstr "" - -#: ../source/drag_and_drop.txt:139 -# 2c49740c2437425ead0c3a660fb585fa -msgid "When the drag is complete" -msgstr "" - -#: ../source/drag_and_drop.txt:139 -# 3cd47aec75174469a5749ea41f4b3765 -msgid "Undo anything done in drag-begin" -msgstr "" - -#: ../source/drag_and_drop.txt:143 -# 823717cf355e4a329bacf103c38da5aa -msgid "Drag Destination Signals" -msgstr "" - -#: ../source/drag_and_drop.txt:147 -# 7b9c0b13d9da454185471727a4f0a00c -msgid "drag-motion" -msgstr "" - -#: ../source/drag_and_drop.txt:147 -# aaad7b70ae4a4b05bf383b46a7955ac0 -msgid "Drag icon moves over a drop area" -msgstr "" - -#: ../source/drag_and_drop.txt:147 -#: ../source/drag_and_drop.txt:149 -# 9714404bcecd4f55a8aaa1b6cd25dbc7 -# e651552f59674cfab8f9bc71e3d25d29 -msgid "Allow only certain areas to be dropped onto" -msgstr "" - -#: ../source/drag_and_drop.txt:149 -# 78ba06c8175d4b3dbe35be97f2b8e8e4 -msgid "drag-drop" -msgstr "" - -#: ../source/drag_and_drop.txt:149 -# e7706e0210384f498da77cf0855419b1 -msgid "Icon is dropped onto a drag area" -msgstr "" - -#: ../source/drag_and_drop.txt:151 -# 3cd39c106d4a485dad7f38326fa89cbe -msgid "drag-data-received" -msgstr "" - -#: ../source/drag_and_drop.txt:151 -# 1862ed16967343459ab2fb5be5b0a87e -msgid "When drag data is received by the destination" -msgstr "" - -#: ../source/drag_and_drop.txt:155 -# ab0b20518bf1417bb8eb9d9e1cd4a995 -msgid "Example" -msgstr "" - diff --git a/translations/templates/entry.pot b/translations/templates/entry.pot deleted file mode 100644 index 7f06a6a..0000000 --- a/translations/templates/entry.pot +++ /dev/null @@ -1,128 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/entry.txt:2 -# 245ca73c0de64685a6228c2ae954eb8c -msgid "Entry" -msgstr "" - -#: ../source/entry.txt:4 -# d22eb4a136114996a88ddb03c161ccea -msgid "Entry widgets allow the user to enter text. You can change the contents with the :meth:`Gtk.Entry.set_text` method, and read the current contents with the :meth:`Gtk.Entry.get_text` method. You can also limit the number of characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." -msgstr "" - -#: ../source/entry.txt:9 -# 33c32714dc054745b2234723ccb6b638 -msgid "Occasionally you might want to make an Entry widget read-only. This can be done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." -msgstr "" - -#: ../source/entry.txt:12 -# 9269f10cf90b40d79a6fb04b1a8d72d8 -msgid "Entry widgets can also be used to retrieve passwords from the user. It is common practice to hide the characters typed into the entry to prevent revealing the password to a third party. Calling :meth:`Gtk.Entry.set_visibility` with ``False`` will cause the text to be hidden." -msgstr "" - -#: ../source/entry.txt:17 -# 3c39e609fe0c4c989a19d8eeedd75dfd -msgid ":class:`Gtk.Entry` has the ability to display progress or activity information behind the text. This is similar to :class:`Gtk.ProgressBar` widget and is commonly found in web browsers to indicate how much of a page download has been completed. To make an entry display such information, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry.set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." -msgstr "" - -#: ../source/entry.txt:24 -# dad3eed73ee348c4a94492d60c35ba29 -msgid "Additionally, an Entry can show icons at either side of the entry. These icons can be activatable by clicking, can be set up as drag source and can have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_stock` or one of the various other functions that set an icon from an icon name, a pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry.set_icon_tooltip_text` or the corresponding function for markup." -msgstr "" - -#: ../source/entry.txt:32 -# 7384f4e58ebd441ea6165a628f0d4092 -msgid "Entry Objects" -msgstr "" - -#: ../source/entry.txt:38 -# 7c14eb8b94164d52b611e25fac88fdd8 -msgid "Retrieves the contents of the entry widget." -msgstr "" - -#: ../source/entry.txt:42 -# 65f2ebfb848442499d25a7361cdb6655 -msgid "Sets the text in the widget to the given value, replacing the current contents." -msgstr "" - -#: ../source/entry.txt:46 -# 2fc1c451fac24906aae89f237d5def00 -msgid "Sets whether the contents of the entry are visible or not. When *visible* is set to ``False``, characters are displayed as the invisible char, and will also appear that way when the text in the entry widget is copied elsewhere." -msgstr "" - -#: ../source/entry.txt:52 -# ea8f155a7e074afbaaed5e57b48f21a5 -msgid "Sets the maximum allowed length of the contents of the widget. If the current contents are longer than the given length, then they will be truncated to fit." -msgstr "" - -#: ../source/entry.txt:57 -# b8ad7196f0a840ffb2375a8772759628 -msgid "Determines if the user can edit the text in the editable widget or not. If *is_editable* is ``True``, the user is allowed to edit the text in the widget." -msgstr "" - -#: ../source/entry.txt:62 -# 1115d6766c1b4ae29f5227440dd116aa -msgid "Causes the entry's progress indicator to \"fill in\" the given fraction of the bar. The fraction should be between 0.0 and 1.0, inclusive." -msgstr "" - -#: ../source/entry.txt:67 -# 9c65fec5bb1f4061a465d9bf0017c609 -msgid "Sets the fraction of total entry width to move the progress bouncing block for each call to :meth:`progress_pulse`." -msgstr "" - -#: ../source/entry.txt:72 -# c5a68cbdfc2a44ddb590872662565b2a -msgid "Indicates that some progress is made, but you don't know how much. Causes the entry's progress indicator to enter \"activity mode,\" where a block bounces back and forth. Each call to :meth:`progress_pulse` causes the block to move by a little bit (the amount of movement per pulse is determined by :meth:`set_progress_pulse_step`)." -msgstr "" - -#: ../source/entry.txt:80 -# 89023349257b4ebdb6f409feb9de0bdb -msgid "Sets the icon shown in the entry at the specified position from a :ref:`stock item `. If *stock_id* is ``None``, no icon will be shown in the specified position." -msgstr "" - -#: ../source/entry.txt:84 -# 56f06fd6b92c48bba9e1d8c66760546e -msgid "*icon_pos* specifies the side of the entry at which an icon is placed and can be one of" -msgstr "" - -#: ../source/entry.txt:87 -# 95af879f09464c778e7a0eca8eab7172 -msgid ":attr:`Gtk.EntryIconPosition.PRIMARY`: At the beginning of the entry (depending on the text direction)." -msgstr "" - -#: ../source/entry.txt:89 -# ca5b12b829ff4850bb40fc85b900490a -msgid ":attr:`Gtk.EntryIconPosition.SECONDARY`: At the end of the entry (depending on the text direction)." -msgstr "" - -#: ../source/entry.txt:94 -# 2d19b30b132d4c09adf7c0aa9e038b9a -msgid "Sets *tooltip* as the contents of the tooltip for the icon at the specified position. If *tooltip* is ``None``, an existing tooltip is removed." -msgstr "" - -#: ../source/entry.txt:97 -# 7ba7c8c6b2b94bef9ca8e421a68f32e0 -msgid "For allowed values for *icon_pos* see :meth:`set_icon_from_stock`." -msgstr "" - -#: ../source/entry.txt:100 -# 0c0d9bdc15604905af972e7fc3bda60b -msgid "Example" -msgstr "" - diff --git a/translations/templates/iconview.pot b/translations/templates/iconview.pot deleted file mode 100644 index 1fd5e9b..0000000 --- a/translations/templates/iconview.pot +++ /dev/null @@ -1,373 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/iconview.txt:2 -# ec6e731ab6d34aba882ca121fbc397c3 -msgid "IconView" -msgstr "" - -#: ../source/iconview.txt:3 -# ab83135e36bf45e99fcd276678f1de22 -msgid "A :class:`Gtk.IconView` is a widget that displays a collection of icons in a grid view. It supports features such as drag and drop, multiple selections and item reordering." -msgstr "" - -#: ../source/iconview.txt:5 -# 12e1417673eb46ab8d013441c4a01ad6 -msgid "Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk.ListStore` for its model. Instead of using :ref:`cell renderers `, :class:`Gtk.IconView` requires that one of the columns in its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." -msgstr "" - -#: ../source/iconview.txt:7 -# 76adaf981c6b445c91f0521a6db7f64d -msgid ":class:`Gtk.IconView` supports numerous selection modes to allow for either selecting multiple icons at a time, restricting selections to just one item or disallowing selecting items completely. To specify a selection mode, the :meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:`Gtk.SelectionMode` selection modes." -msgstr "" - -#: ../source/iconview.txt:10 -# 7fa5421972a54dcd90672c1f7fb41b9f -msgid "IconView objects" -msgstr "" - -#: ../source/iconview.txt:16 -# 86f20b370de1480396720f52a2316fb2 -msgid "Creates a new :class:`Gtk.IconView` widget using the specified *area* to layout cells inside the icons." -msgstr "" - -#: ../source/iconview.txt:20 -# ebd00b4a8b97492a875c2d6ee61604e8 -msgid "Creates a new :class:`Gtk.IconView` widget with the model *model*." -msgstr "" - -#: ../source/iconview.txt:24 -# e70c05942ad94ef48e9f4f59e41b7ce5 -msgid "Sets the model for a :class:`Gtk.IconView`. If the :class:`Gtk.IconView` already has a model set, it will remove it before setting the new model. If *model* is ``None``, then it will unset the old model." -msgstr "" - -#: ../source/iconview.txt:28 -# 39a7ca087e7d4e6786ff4d47b886806d -msgid "Returns the model the :class:`Gtk.IconView` is based on. Returns ``None`` if the model is unset." -msgstr "" - -#: ../source/iconview.txt:32 -# 71c7a78f1e8642f8a1fecc30f929d842 -msgid "Sets the column with text to be *column*. The text column must be of type ``str``." -msgstr "" - -#: ../source/iconview.txt:36 -# d5cf0bf8efca4776b2bf9788de4e43da -msgid "Return the column with text, or -1 if it's unset." -msgstr "" - -#: ../source/iconview.txt:40 -# 157b8ee0f3c548ba870b9585ba4b06ec -msgid "Sets the column with markup information for the :class:`Gtk.IconView` to be *column*. The markup column must be of type ``str``. If the markup column is set to something, it overrides the text column set by :meth:`set_text_column`." -msgstr "" - -#: ../source/iconview.txt:44 -# f41f734edd4541108afef2ea3a27943e -msgid "Returns the column with markup text, or -1 if it's unset." -msgstr "" - -#: ../source/iconview.txt:48 -# 1b170b90bd954f8c80dc790b87dc562e -msgid "Sets the column with pixbufs to be *column*. The pixbuf column must be of type :class:`GdkPixbuf.Pixbuf`" -msgstr "" - -#: ../source/iconview.txt:52 -# 10c0a82b4afe44068b518cd5e559865e -msgid "Returns the column with pixbufs, or -1 if it's unset." -msgstr "" - -#: ../source/iconview.txt:56 -# b27942e9992e430da86ece6b3ca6de11 -msgid "Finds the path at the point(*x*, *y*), relative to bin_window coordinates. In contrast to :meth:`get_path_at_pos`, this method also obtains the cell at the specified position. See :meth:`convert_widget_to_bin_window_coords` for converting widget coordinates to bin_window coordinates." -msgstr "" - -#: ../source/iconview.txt:60 -# 4afafb4928994f5a9557b89e4b672810 -msgid "Converts widget coordinates to coordinates for the bin_window, as expected by e.g. :meth:`get_path_at_pos`" -msgstr "" - -#: ../source/iconview.txt:64 -# 7a14422bf8a0424999dddb8ae67dce46 -msgid "Sets the current keyboard focus to be at *path*, and selects it. This is useful when you want to focus the user's attention on a particular item. If *cell* is ``None``, then focus is given to the cel specified by it. Additionally, if *start_editing* is True, then editing should be started in the specified cell." -msgstr "" - -#: ../source/iconview.txt:66 -# 85b5d92a86ff41f9be4da05558791b00 -msgid "This function is often followed by :meth:`grab_focus` in order to give keyboard focus to the widget. Please note that editing can only happen when the widget is realized." -msgstr "" - -#: ../source/iconview.txt:70 -# 7e64db9d13854b4b8745f83f4daca293 -msgid "Returns the current cursor path and cell. If the cursor isn't currently set, then path will be ``None``. If no cell currently has focus, then cell will be ``None``." -msgstr "" - -#: ../source/iconview.txt:74 -# 3d53d670c4654a8ab6e79bb9e6e4e1e9 -msgid "Calls a function for each selected icon. Note that the model or selection cannot be modified from within this method." -msgstr "" - -#: ../source/iconview.txt:78 -# eb19b844072a49d1b4e4722e34eca1a7 -msgid "Sets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`." -msgstr "" - -#: ../source/iconview.txt:82 -# 4c092b3d3f494ac287cea7bd88d7ada1 -msgid "Gets the :class:`Gtk.SelectionMode` of the :class:`Gtk.IconView`." -msgstr "" - -#: ../source/iconview.txt:86 -# 0c56051197a34bdcafb288af0c277d3a -msgid "Sets the \"item-orientation\" property which determines whether the labels are drawn beside the icons instead of below." -msgstr "" - -#: ../source/iconview.txt:90 -# a6885fd746504d60a6263298e047860b -msgid "Returns the :class:`Gtk.Orientation` of the \"item-orientation\" property which determines whether the labels are drawn beside the icons instead of below." -msgstr "" - -#: ../source/iconview.txt:94 -# a5d1f98eb7574e5a8e48ee8fce7bef09 -msgid "Sets the \"columns\" property which determines in how many columns the icons are arranged. If *columns* is -1, the number of columns will be chosen automatically to fill the available area." -msgstr "" - -#: ../source/iconview.txt:98 -# 6efdc1d882a74d428bf79f5b0a9474f4 -msgid "Returns the value of the \"columns\" property." -msgstr "" - -#: ../source/iconview.txt:102 -# 4e75be709a824386a4a6fc1f4b9f068e -msgid "Sets the \"item-width\" property which specifies the width to use for each item. If it is set to -1, the icon view will automatically determine a suitable item size." -msgstr "" - -#: ../source/iconview.txt:106 -# d08789aad983463d8b72f8343093be05 -msgid "Returns the value of the \"item-width\" property." -msgstr "" - -#: ../source/iconview.txt:110 -# acbd4867ad5e4fc2b2bf8c71d179688c -msgid "Sets the \"spacing\" property which specifies the space which is inserted between the cells (i.e. the icon and the text) of an item." -msgstr "" - -#: ../source/iconview.txt:114 -# 4f89f40aa0b3472a91ba83b129e12cfc -msgid "Sets the \"row-spacing\" property which specifies the space which is inserted between the rows of the icon view." -msgstr "" - -#: ../source/iconview.txt:118 -# 8945975c2c3b4b4887cfbb78bebdf113 -msgid "Returns the value of the \"row-spacing\" property." -msgstr "" - -#: ../source/iconview.txt:122 -# dd97da6af3dc4096b1727abced327940 -msgid "Sets the \"column-spacing\" property which specifies the space which is inserted between the columns of the icon view." -msgstr "" - -#: ../source/iconview.txt:126 -# d8b8ab3d00f54b7d91ecc7ee1cbc0b73 -msgid "Returns the value of the \"column-spacing\" property." -msgstr "" - -#: ../source/iconview.txt:130 -# e64aaee3904f4a639e2c92aaad282811 -msgid "Sets the \"margin\" property which specifies the space which is inserted at the top, bottom, left and right of the icon view." -msgstr "" - -#: ../source/iconview.txt:134 -# 64ade7c970114596a52f233e30f170ff -msgid "Returns the value of the \"margin\" property." -msgstr "" - -#: ../source/iconview.txt:138 -# da1533a531634e7e90c7a64f099e95d9 -msgid "Sets the \"item-padding\" property which specifies the padding around each of the icon view's items." -msgstr "" - -#: ../source/iconview.txt:142 -# cbaf8af3026d461ab6b63b2700632a04 -msgid "Returns the value of the \"item-padding property." -msgstr "" - -#: ../source/iconview.txt:146 -# a4a6d17051c14bd0aeef0fdd927d0ccc -msgid "Selects the row at *path*." -msgstr "" - -#: ../source/iconview.txt:150 -# 5b525fa9f0094286b341914fcd76dcc1 -msgid "Unselects the row at *path*." -msgstr "" - -#: ../source/iconview.txt:154 -# 2fdb201248a5476489419f122bff4e35 -msgid "Returns ``True`` if the icon pointed to by *path* is currently selected. If *path* does not point to a valid location, ``False`` is returned." -msgstr "" - -#: ../source/iconview.txt:158 -# e1b284a961d645be8e4e9672be3d551e -msgid "Creates a list of paths of all selected items. Additionally, if you are planning on modifying the model after calling this function, you may want to convert the returned list into a list of :class:`Gtk.TreeRowReference `." -msgstr "" - -#: ../source/iconview.txt:162 -# 074a3c8150714ff8ab6a1ce7f7aa5e16 -msgid "Selects all the icons. The :class:`Gtk.IconView` must has its selection mode set to :attr:`Gtk.SelectionMode.MULTIPLE`" -msgstr "" - -#: ../source/iconview.txt:166 -# 965fecf93dad45eea998fd434ccc5c79 -msgid "Unselects all the icons." -msgstr "" - -#: ../source/iconview.txt:170 -# e8a4d3c07378456daec769178a552ef9 -msgid "Moves the alignments of :class:`Gtk.IconView` to the position specified by *path*. *row_align* determines where the row is placed, the *col_align* determines where *column* is placed. Both are expected to be between 0.0 and 1.0. 0.0 means left/top alignment, 1.0 means right/bottom alignment, 0.5 means center." -msgstr "" - -#: ../source/iconview.txt:172 -# f7266dc8b92d415481c55fbe37e2e242 -msgid "If *use_align* is ``False``, the the alignment arguments are ignored, and the tree does the minimum amount of work to scroll the item onto the screen. This means that the item will be scrolled to the edge closest to its current position. If the item is currently visible on the screen, nothing is done." -msgstr "" - -#: ../source/iconview.txt:174 -# d0a8f9cd0c5a42f68d036048e5537321 -msgid "This function only works if the model is set, and *path* is a valid row on the model. If the model changes before the :class:`Gtk.IconView` is realized, the centered path will be modified to reflect this change." -msgstr "" - -#: ../source/iconview.txt:178 -# 29f1e64a52a642c69bfff3e3359cddbe -msgid "Returns the first and last visible :class:`Gtk.TreePath`. Note that there may be invisible paths in between." -msgstr "" - -#: ../source/iconview.txt:182 -# 4d46ea25de854c2a8f33bdcb382a56c6 -msgid "Sets the tip area of *tooltip* to be the area covered by the item at *path*. See also :meth:`set_tooltip_column` for a simpler alternative. See also :meth:`Gtk.Tooltip.set_tip_area`." -msgstr "" - -#: ../source/iconview.txt:186 -# 7a4b3f5436064737b9cf6a2124de3853 -msgid "Sets the tip area of *tooltip* to the area which *cell* occupies in the item pointed to by *path*. See also :meth:`Gtk.Tooltip.set_tip_area`" -msgstr "" - -#: ../source/iconview.txt:188 -# b250ff750c62419d8efbe148d13c91cf -msgid "See also :meth:`set_tooltip_column` for a simpler alternative." -msgstr "" - -#: ../source/iconview.txt:192 -# 2df3bdcd365546d5bc2b3876f0567442 -msgid "This function is supposed to be used in a \"query-tooltip\" signal handler for :class:`Gtk.IconView`. The *x*, *y* and *keyboard_tip* values which are received in the signal handler, should be passed to this method without modification." -msgstr "" - -#: ../source/iconview.txt:194 -# eb5c01256b854f50a2da740e9e36491a -msgid "The return value indicates whether there is an icon view item at the given coordinates (``True``) or not (``False``) for mouse tooltips. For keyboard tooltips the item returned will be the cursor item. When ``True``, then all of the items which have been returned will be set to point to that row and corresponding model. *x* and *y* will always be converted to be relative to the :class:`Gtk.IconView`'s bin_window if *keyboard_tooltip* is ``False``." -msgstr "" - -#: ../source/iconview.txt:198 -# 8a5aa19de93a489a88ba7159f7c4a3c4 -msgid "If you only plan to have simple (text-only) tooltips on full items, you can use this function to have :class:`Gtk.IconView` handle these automatically for you. *column* should be set to the column in the :class:`Gtk.IconView`'s model containing the tooltip texts, or -1 to disable this feature." -msgstr "" - -#: ../source/iconview.txt:200 -# 9b9be8244a4e434b838c19c161535974 -msgid "When enabled, \"has-tooltip\" will be set to ``True`` and :class:`Gtk.IconView` will connect a \"query-tooltip\" signal handler." -msgstr "" - -#: ../source/iconview.txt:202 -# 2fb8239a5569473091df917fbe31ee54 -msgid "Note that the signal handler sets the text with :meth:`Gtk.Tooltip.set_markup`, so &, <, etc have to be escaped in the text." -msgstr "" - -#: ../source/iconview.txt:206 -# f8f1eb326d29491b95c01746687223c7 -msgid "Returns the column of :class:`Gtk.IconView`'s model which is being used for displaying tooltips on :class:`Gtk.IconView`'s rows, or -1 if this is disabled." -msgstr "" - -#: ../source/iconview.txt:210 -# 4e1c00b628af48e3ab4f571e29703a7c -msgid "Gets the row in which the item *path* is currently displayed. Row numbers start at 0." -msgstr "" - -#: ../source/iconview.txt:214 -# 88107413a67543799c62ef9246ba73f8 -msgid "Gets the column in which the item *path* is currently displayed. Column numbers start at 0." -msgstr "" - -#: ../source/iconview.txt:218 -# 6f9bd67c84c046668dd9a0486c62b217 -msgid "Turns :class:`Gtk.IconView` into a drag source for automatic DND. Calling this method sets \"reorderable\" to ``False``." -msgstr "" - -#: ../source/iconview.txt:222 -# ed8476692c89487fb2f96e4498eabecf -msgid "Turns :class:`Gtk.IconView` into a drop destination for automatic DND. Calling this method sets \"reorderable\" to ``False``." -msgstr "" - -#: ../source/iconview.txt:226 -# c3fbf398910145dbb4cf9e4c82547033 -msgid "Undoes the effect of :meth:`enable_model_drag_source`. Calling this method sets \"reorderable\" to ``False``." -msgstr "" - -#: ../source/iconview.txt:230 -# 519aee38aa4847b6a6806269de937ece -msgid "Undoes the effect of :meth:`enable_model_drag_dest`. Calling this method sets \"reorderable\" to ``False``." -msgstr "" - -#: ../source/iconview.txt:234 -# b6cc3fc479534aaba79827983d0b9386 -msgid "This method is a convenience method to allow you to reorder models that support the :class:`Gtk.TreeDragSource` and the :class:`Gtk.TreeDragDest` interfaces. Both :class:`Gtk.TreeStore` and :class:`Gtk.ListStore` support these. If *reorderable* is ``True``, then the user can reorder the model by dragging and dropping rows. The developer can listen to these changes by connecting the model's \"row_inserted\" and \"row_deleted\" signals. The reordering is implemented by setting up the icon view as drag source and destination. Therefore, drag and drop can not be used in a reorderable view for any other purpose." -msgstr "" - -#: ../source/iconview.txt:236 -# 13c7f12ce07040b9883972ba28746165 -msgid "This function does not give you any degree of control over the order -- any reordering is allowed. If more control is needed, you should probably handle drag and drop manually." -msgstr "" - -#: ../source/iconview.txt:240 -# 8ce1e428cd6e486baaa8e2f511e6406b -msgid "Retrieves whether the user can reorder the list via drag-and-drop. See :meth:`set_reorderable`." -msgstr "" - -#: ../source/iconview.txt:244 -# 1234d8bf737747e486f96e2d5475d424 -msgid "Sets the item that is highlighted for feedback." -msgstr "" - -#: ../source/iconview.txt:248 -# e78fc15df773488ea715f85a77420bb9 -msgid "Gets information about the item that is highlighted for feedback." -msgstr "" - -#: ../source/iconview.txt:252 -# 233e937e47b749e79d1b60526fd23e23 -msgid "Determines the destination item for a given position." -msgstr "" - -#: ../source/iconview.txt:256 -# a0bc32b0c52c4980bdbd3e569900d50c -msgid "Creates a :class:`Cairo.Surface` representation of the item at *path*. This image is used for a drag icon." -msgstr "" - -#: ../source/iconview.txt:259 -# b349d35f3ce24befb1e824aae1617e6c -msgid "Example" -msgstr "" - diff --git a/translations/templates/index.pot b/translations/templates/index.pot deleted file mode 100644 index 34cb36d..0000000 --- a/translations/templates/index.pot +++ /dev/null @@ -1,68 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/index.txt:7 -# 102ec7dfdcbc4e42858d40a6e09d47ee -msgid "The Python GTK+ 3 Tutorial" -msgstr "" - -#: ../source/index.txt:9 -# c191ef607b864faba8177009d579c4ea -msgid "|version|" -msgstr "" - -#: ../source/index.txt:10 -# 9f8eb89f140046d985d5f6d893af700a -msgid "|today|" -msgstr "" - -#: ../source/index.txt:11 -# 83bfdc6414f64cb6b4d230a94671c701 -msgid "GNU Free Documentation License 1.3" -msgstr "" - -#: ../source/index.txt:13 -# b11544922e794db3a39e49c7b4e1d44e -msgid "This tutorial gives an introduction to writing GTK+ 3 applications in Python." -msgstr "" - -#: ../source/index.txt:15 -# adac4f9c0d0a402487cc040ec2a3db1a -msgid "Prior to working through this tutorial, it is recommended that you have a reasonable grasp of the Python programming language. GUI programming introduces new problems compared to interacting with the standard output (console / terminal). It is necessary for you to know how to create and run Python files, understand basic interpreter errors, and work with strings, integers, floats and Boolean values. For the more advanced widgets in this tutorial, good knowledge of lists and tuples will be needed." -msgstr "" - -#: ../source/index.txt:25 -# 30c23c6e13954f668db985bb30dfbb98 -msgid "Although this tutorial describes the most important classes and methods within GTK+ 3, it is not supposed to serve as an API reference. Please refer to the `GTK+ 3 Reference Manual `_ for a detailed description of the API." -msgstr "" - -#: ../source/index.txt:30 -# 52320d81403046fdb8e7fcbb05c34ef0 -msgid "Contents:" -msgstr "" - -#: ../source/index.txt:60 -# bfb291b0e5aa45c6818a4411d80038cc -msgid "Indices and tables" -msgstr "" - -#: ../source/index.txt:62 -# bcd17d3d6a984e99aef1ffc26b515154 -msgid ":ref:`search`" -msgstr "" - diff --git a/translations/templates/install.pot b/translations/templates/install.pot deleted file mode 100644 index 79238c7..0000000 --- a/translations/templates/install.pot +++ /dev/null @@ -1,103 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/install.txt:4 -# 42349200504541559303a3d689e92cef -msgid "Installation" -msgstr "" - -#: ../source/install.txt:5 -# fd46bac47b5c4bad96c4c8dfa579fbf9 -msgid "The fist step before we start with actual coding consists of setting up `PyGObject`_ and its dependencies. PyGObject is a Python module that enables developers to access GObject-based libraries such as GTK+ within Python. It exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in your application, use `PyGTK`_, instead." -msgstr "" - -#: ../source/install.txt:13 -# 3556f01b901e4215a0ceaeb25209f1b3 -msgid "Dependencies" -msgstr "" - -#: ../source/install.txt:15 -# 4bad6344ef014728876fda448d14b286 -msgid "GTK+3" -msgstr "" - -#: ../source/install.txt:17 -# 2a02b9f6c9b84896af027d941b52e9f6 -msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" -msgstr "" - -#: ../source/install.txt:19 -# fbaf66cd52434df8adbd67b4b05fcaa2 -msgid "gobject-introspection" -msgstr "" - -#: ../source/install.txt:22 -# cfdbc75060d24502baca45db5e291f67 -msgid "Prebuilt Packages" -msgstr "" - -#: ../source/install.txt:23 -# 98151f71dd85475c8ceee0060f2d6af4 -msgid "Recent versions of PyGObject and its dependencies are packaged by nearly all major Linux distributions. So, if you use Linux, you can probably get started by installing the package from the official repository for your distribution." -msgstr "" - -#: ../source/install.txt:29 -# 4c5beba55fc74c55a048efe890d252fc -msgid "Installing From Source" -msgstr "" - -#: ../source/install.txt:30 -# 9c1e44e0fca241d78b228854e755ae5b -msgid "The easiest way to install PyGObject from source is using `JHBuild`_. It is designed to easily build source packages and discover what dependencies need to be build and in what order. To setup JHBuild, please follow the `JHBuild manual`_." -msgstr "" - -#: ../source/install.txt:34 -# dfbfb8078be44e2a9e5109e4957c958a -msgid "Once you have installed JHBuild successfully, download the latest configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." -msgstr "" - -#: ../source/install.txt:38 -# 7c661d4553e1441ab9cdf923475eda51 -msgid "If you have not done it before, verify that your build environment is setup correctly by running::" -msgstr "" - -#: ../source/install.txt:43 -# c44ee32f03b04c3fa6d2f2cebe8447c5 -msgid "It will print any applications and libraries that are currently missing on your system but required for building. You should install those using your distribution's package repository. A list of `package names `_ for different distributions is maintained on the GNOME wiki. Run the command above again to ensure the required tools are present." -msgstr "" - -#: ../source/install.txt:49 -# 7c2bef39af1e4578b73637d894e67e26 -msgid "Executing the following command will build PyGObject and all its dependencies::" -msgstr "" - -#: ../source/install.txt:53 -# 953c8b38bbde4583921cc2efc3be93e4 -msgid "Finally, you might want to install GTK+ from source as well::" -msgstr "" - -#: ../source/install.txt:57 -# c8713c1bb79e436e8e8b91f593664876 -msgid "To start a shell with the same environment as used by JHBuild, run::" -msgstr "" - -#: ../source/install.txt:66 -# 3a0c2c285a944a88b5084a40f71a77c7 -msgid "http://download.gnome.org/teams/releng/" -msgstr "" - diff --git a/translations/templates/introduction.pot b/translations/templates/introduction.pot deleted file mode 100644 index 41baae3..0000000 --- a/translations/templates/introduction.pot +++ /dev/null @@ -1,103 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/introduction.txt:4 -# 7d104ef9e2454c7999e343c934e96935 -msgid "Getting Started" -msgstr "" - -#: ../source/introduction.txt:7 -# 3c147524eccc4b27ab1b8e0ab499e635 -msgid "Simple Example" -msgstr "" - -#: ../source/introduction.txt:9 -# cf6f21d0952646fb93ea888158790732 -msgid "To start with our tutorial we create the simplest program possible. This program will create an emtpy 200 x 200 pixel window." -msgstr "" - -#: ../source/introduction.txt:17 -# 53566cc73f914db18de42dfa02a8e448 -msgid "We will now explain each line of the example." -msgstr "" - -#: ../source/introduction.txt:22 -# 2885ce0cec3647339703531244d97519 -msgid "The first line of all Python programs should start with ``#!`` followed by the path to the Python interpreter you want to invoke." -msgstr "" - -#: ../source/introduction.txt:28 -# a2216f5f230a4e84bced8b88d29e2e37 -msgid "In order to access GTK+ classes and functions we first must import the Gtk module. The next line creates an empty window." -msgstr "" - -#: ../source/introduction.txt:34 -# e79a3c7e52f740068af0948687433a42 -msgid "Followed by connecting to the window's delete event to ensure that the application is terminated if we click on the *x* to close the window." -msgstr "" - -#: ../source/introduction.txt:40 -# 800d62762c8e4468a186d14f869ab785 -msgid "In the next step we display the window." -msgstr "" - -#: ../source/introduction.txt:45 -# 4b8c1486ef174ec495db5f7ca06e4715 -msgid "Finally, we start the GTK+ processing loop which we quit when the window is closed (see line 5)." -msgstr "" - -#: ../source/introduction.txt:51 -# e1c7f481f9ce4216938639f0359c90a3 -msgid "To run the program, open a terminal, change to the directory of the file, and enter::" -msgstr "" - -#: ../source/introduction.txt:57 -# d08e173e53584a2f9b7723b378f17267 -msgid "Extended Example" -msgstr "" - -#: ../source/introduction.txt:58 -# 860d13fc74a2417b85f79ce47aa886b4 -msgid "For something a little more useful, here's the PyGObject version of the classic \"Hello World\" program." -msgstr "" - -#: ../source/introduction.txt:66 -# 63655a3250244be99a3a8572ff54bfa5 -msgid "This example differs from the simple example as we sub-class :class:`Gtk.Window` to define our own :class:`MyWindow` class." -msgstr "" - -#: ../source/introduction.txt:72 -# c3a50147787848d5bc04022bae15ebca -msgid "In the class's constructor we have to call the constructor of the super class. In addition, we tell it to set the value of the property `title` to `Hello World`." -msgstr "" - -#: ../source/introduction.txt:78 -# 5232713f5dcb43dcb34ac2b73c59c120 -msgid "The next three lines are used to create a button widget, connect to its `clicked` signal and add it as child to the top-level window." -msgstr "" - -#: ../source/introduction.txt:84 -# 8f517e234d5f4c99b32d1a84b5251a3a -msgid "Accordingly, the method :meth:`on_button_clicked` will be called if you click on the button." -msgstr "" - -#: ../source/introduction.txt:89 -# 6765a0c9a85242d8a6948b477c48de45 -msgid "The last block, outside of the class, is very similar to the simple example above, but instead of creating an instance of the generic :class:`Gtk.Window` class, we create an instance of :class:`MyWindow`." -msgstr "" - diff --git a/translations/templates/label.pot b/translations/templates/label.pot deleted file mode 100644 index 068a3c5..0000000 --- a/translations/templates/label.pot +++ /dev/null @@ -1,123 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/label.txt:2 -# f7e4365740e24cbcb20e04b1b0cd2b9b -msgid "Label" -msgstr "" - -#: ../source/label.txt:4 -# e8c4aa3a51ea4906963046de1c257996 -msgid "Labels are the main method of placing non-editable text in windows, for instance to place a title next to a :class:`Gtk.Entry` widget. You can specify the text in the constructor, or later with the :meth:`Gtk.Label.set_text` or :meth:`Gtk.Label.set_markup` methods." -msgstr "" - -#: ../source/label.txt:9 -# 3f49dc82cfa44fecb9b45cd7ffc8bd9c -msgid "The width of the label will be adjusted automatically. You can produce multi-line labels by putting line breaks (\"\\\\n\") in the label string." -msgstr "" - -#: ../source/label.txt:12 -# e8ba196d2de345e695353bae17a350eb -msgid "Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. Selectable labels allow the user to copy the label contents to the clipboard. Only labels that contain useful-to-copy information — such as error messages — should be made selectable." -msgstr "" - -#: ../source/label.txt:17 -# e7320b1c825444e18854d66afde2a0b0 -msgid "The label text can be justified using the :meth:`Gtk.Label.set_justify` method. The widget is also capable of word-wrapping, which can be activated with :meth:`Gtk.Label.set_line_wrap`." -msgstr "" - -#: ../source/label.txt:21 -# 369dd877f81e4cb7b2cf4ae2e700c75c -msgid ":class:`Gtk.Label` support some simple formatting, for instance allowing you to make some text bold, colored, or larger. You can do this by providing a string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax [#pango]_. For instance, ``bold text and strikethrough text``. In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup for links is borrowed from HTML, using the a with href and title attributes. GTK+ renders links similar to the way they appear in web browsers, with colored, underlined text. The title attribute is displayed as a tooltip on the link." -msgstr "" - -#: ../source/label.txt:36 -# db8272b9842242d69534bb098111643f -msgid "Labels may contain *mnemonics*. Mnemonics are underlined characters in the label, used for keyboard navigation. Mnemonics are created by providing a string with an underscore before the mnemonic character, such as \"_File\", to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label.set_text_with_mnemonic`. Mnemonics automatically activate any activatable widget the label is inside, such as a :class:`Gtk.Button`; if the label is not inside the mnemonic's target widget, you have to tell the label about the target using :meth:`Gtk.Label.set_mnemonic_widget`." -msgstr "" - -#: ../source/label.txt:47 -# 836b73e3032f43e48fdc18a413110509 -msgid "Label Objects" -msgstr "" - -#: ../source/label.txt:51 -# 93b5d558752a43b88588ec05a23466f0 -msgid "Creates a new label with the given *text* inside it. If *text* is omitted, an empty label is created." -msgstr "" - -#: ../source/label.txt:56 -# bcaaf3effb1d4d27bcabeabbdb5ca7be -msgid "Creates a new label with *text* inside it." -msgstr "" - -#: ../source/label.txt:58 -# 84e386dd8fe24f1bba75a213d27f3239 -msgid "If characters in *text* are preceded by an underscore, they are underlined. If you need a literal underscore character in a label, use '__' (two underscores). The first underlined character represents a keyboard accelerator called a mnemonic. The mnemonic key can be used to activate another widget, chosen automatically, or explicitly using :meth:`Gtk.Label.set_mnemonic_widget`." -msgstr "" - -#: ../source/label.txt:65 -# eb57a91d49724f099286fbcb82c3e199 -msgid "If :meth:`Gtk.Label.set_mnemonic_widget` is not called, then the first activatable ancestor of the :class:`Gtk.Label` will be chosen as the mnemonic widget. For instance, if the label is inside a button or menu item, the button or menu item will automatically become the mnemonic widget and be activated by the mnemonic." -msgstr "" - -#: ../source/label.txt:73 -# 09f54012dd8c4a09a2598ff45badda88 -msgid "Sets the alignment of the lines in the text of the label relative to each other. *justification* can be one of :attr:`Gtk.Justification.LEFT`, :attr:`Gtk.Justification.RIGHT`, :attr:`Gtk.Justification.CENTER`, :attr:`Gtk.Justification.FILL`. This method has no effect on labels containing only a single line." -msgstr "" - -#: ../source/label.txt:81 -# 7f83df46ec89435ea259f619b5d6521a -msgid "If *wrap* is ``True``, lines will be broken if text exceeds the widget's size. If *wrap* is ``False``, text will be cut off by the edge of the widget if it exceeds the widget size." -msgstr "" - -#: ../source/label.txt:87 -# 2d03999a750f45d190a180d83152bd05 -msgid "Parses *markup* which is marked up with the Pango text markup language [#pango]_, setting the label's text accordingly. The markup passed must be valid; for example literal <, >, & characters must be escaped as < > and &." -msgstr "" - -#: ../source/label.txt:94 -# 538a240b87f440169f7347a2d928c9e9 -msgid "If the label has been set so that it has an mnemonic key, the label can be associated with a widget that is the target of the mnemonic." -msgstr "" - -#: ../source/label.txt:99 -# e7fa3823420241618d0fc0585409a7de -msgid "Selectable labels allow the user to select text from the label, for copy-and-paste." -msgstr "" - -#: ../source/label.txt:103 -# 3fe286453114411d99a70eee98d2776a -msgid "Sets the text within this widget. It overwrites any text that was there before." -msgstr "" - -#: ../source/label.txt:107 -# 1acbaec9184349dcad602f4d5946d0e0 -msgid "See :meth:`new_with_mnemonic`." -msgstr "" - -#: ../source/label.txt:110 -# ec1a254e1b324d7e82589e26ea19d126 -msgid "Example" -msgstr "" - -#: ../source/label.txt:117 -# 663400048fad4ef5b9d78bf45d553115 -msgid "Pango Markup Syntax, http://developer.gnome.org/pango/stable/PangoMarkupFormat.html" -msgstr "" - diff --git a/translations/templates/layout.pot b/translations/templates/layout.pot deleted file mode 100644 index 959416c..0000000 --- a/translations/templates/layout.pot +++ /dev/null @@ -1,312 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/layout.txt:4 -# 6790b36b41b64bd2b442f11b820f4b6b -msgid "Layout Containers" -msgstr "" - -#: ../source/layout.txt:5 -# 4e4f761594f04552adbde68b9baa9e4e -msgid "While many GUI toolkits require you to precisely place widgets in a window, using absolute positioning, GTK+ uses a different approach. Rather than specifying the position and size of each widget in the window, you can arrange your widgets in rows, columns, and/or tables. The size of your window can be determined automatically, based on the sizes of the widgets it contains. And the sizes of the widgets are, in turn, determined by the amount of text they contain, or the minimum and maximum sizes that you specify, and/or how you have requested that the available space should be shared between sets of widgets. You can perfect your layout by specifying padding distance and centering values for each of your widgets. GTK+ then uses all this information to resize and reposition everything sensibly and smoothly when the user manipulates the window." -msgstr "" - -#: ../source/layout.txt:19 -# 1c55fa9e0fa5447d91018be2baf7fc09 -msgid "GTK+ arranges widgets hierarchically, using *containers*. They are invisible to the end user and are inserted into a window, or placed within each other to layout components. There are two flavours of containers: single-child containers, which are all descendants of :class:`Gtk.Bin`, and multiple-child containers, which are descendants of :class:`Gtk.Container`. The most commonly used are vertical or horizontal boxes (:class:`Gtk.Box`), tables (:class:`Gtk.Table`) and grids (:class:`Gtk.Grid`)." -msgstr "" - -#: ../source/layout.txt:29 -# 4e670dcedb5f4de69e0c3ab79f6693b9 -msgid "Boxes" -msgstr "" - -#: ../source/layout.txt:31 -# d8670206ab2f447d86339170607f723e -msgid "Boxes are invisible containers into which we can pack our widgets. When packing widgets into a horizontal box, the objects are inserted horizontally from left to right or right to left depending on whether :meth:`Gtk.Box.pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets are packed from top to bottom or vice versa. You may use any combination of boxes inside or beside other boxes to create the desired effect." -msgstr "" - -#: ../source/layout.txt:40 -# 48383107e67947fcbfe6699e05a97540 -msgid "Box Objects" -msgstr "" - -#: ../source/layout.txt:44 -# cbfb025ed5b240cf867d5ec95dab7e44 -msgid "The rectangular area of a :class:`Gtk.Box` is organized into either a single row or a single column of child widgets depending upon whether the \"orientation\" property is set to :attr:`Gtk.Orientation.HORIZONTAL` or :attr:`Gtk.Orientation.VERTICAL`." -msgstr "" - -#: ../source/layout.txt:49 -# 5013aa93f43d45febaf6b5038c6efa59 -msgid "If *homogeneous* is ``True``, all widgets in the box will be the same size, of which the size is determined by the largest child widget. If it is omitted, *homogeneous* defaults to ``False``." -msgstr "" - -#: ../source/layout.txt:53 -# 195c65b6d5cf44ea8cbe5f972a2a158b -msgid "*spacing* is the number of pixels to place by default between children. If omitted, no spacing is used, i.e. *spacing* is set to 0." -msgstr "" - -#: ../source/layout.txt:56 -# f362271f3bca40299be27b2bcd3fc23e -msgid "By default, child widgets are organized into a single row, i.e. the \"orientation\" property is set to :attr:`Gtk.Orientation.HORIZONTAL`." -msgstr "" - -#: ../source/layout.txt:59 -# 65f1146f3b614c289f56484fb591960e -msgid ":class:`Gtk.Box` uses a notion of *packing*. Packing refers to adding widgets with reference to a particular position in a :class:`Gtk.Container`. For a :class:`Gtk.Box`, there are two reference positions: the start and the end of the box. If \"orientation\" is :attr:`Gtk.Orientation.VERTICAL`, the start is defined as the top of the box and the end is defined as the bottom. If \"orientation\" is :attr:`Gtk.Orientation.HORIZONTAL`, the start is defined as the left side and the end is defined as the right side." -msgstr "" - -#: ../source/layout.txt:70 -# 66e32d0c381c469b85130237fcd65718 -msgid "Adds *child* to box, packed with reference to the start of box. The *child* is packed after any other child packed with reference to the start of box." -msgstr "" - -#: ../source/layout.txt:74 -# 556f493d20b64a6bbb181225d9f75e28 -msgid "*child* should be a :class:`Gtk.Widget` to be added to this box. The *expand* argument when set to ``True`` allows the *child* widget to take all available space it can. Alternately, if the value is set to ``False``, the box will be shrunken to the same size as the child widget." -msgstr "" - -#: ../source/layout.txt:79 -# 6ed586da5e724bb0bd54b33e0f9fb9ac -msgid "If the *fill* argument is set to ``True``, the *child* widget takes all available space and is equal to the size of the box. This only has an effect when *expand* is set to ``True``. A child is always allocated the full height of a horizontally oriented and the full width of a vertically oriented box. This option affects the other dimension." -msgstr "" - -#: ../source/layout.txt:86 -# 2c26291eb6a045dfa99f90f036d391f7 -msgid "*padding* defines extra space in pixels to put between this child and its neighbours, over and above the global amount specified by \"spacing\" property. If *child* is a widget at one of the reference ends of box, then padding pixels are also put between *child* and the reference edge of this box." -msgstr "" - -#: ../source/layout.txt:94 -# 0b20e58d96d743519269309f4abc1f35 -msgid "Adds *child* to box, packed with reference to the end of box. The *child* is packed after (away from end of) any other child packed with reference to the end of box." -msgstr "" - -#: ../source/layout.txt:98 -# 7de0ec7503664eac80fab9cc84591052 -msgid "Arguments are the same as for :meth:`pack_start`." -msgstr "" - -#: ../source/layout.txt:102 -# 93b359db6dfe4e2ea2887fb0c5155c21 -msgid "If *homogeneous* is ``True``, all widgets in the box will be the same size, of which the size is determined by the largest child widget." -msgstr "" - -#: ../source/layout.txt:107 -#: ../source/layout.txt:177 -#: ../source/layout.txt:277 -# 87841fa5f8ca4be99599743cd9e67876 -# af00381669114b23ba9cfebe430784d2 -# 4a2c2058555d4ec78725011a8ff9de30 -msgid "Example" -msgstr "" - -#: ../source/layout.txt:109 -# aef48da607954200964c4cedbd36dbe5 -msgid "Let's take a look at a slightly modified version of the extended example with two buttons." -msgstr "" - -#: ../source/layout.txt:117 -# cfb9b4747a3d4e86bf2a0b04ff87c304 -msgid "First, we create a horizontally orientated box container where 6 pixels are placed between children. This box becomes the child of the top-level window." -msgstr "" - -#: ../source/layout.txt:123 -# 031b3c910e1548d984e02c4c38265b61 -msgid "Subsequently, we add two different buttons to the box container." -msgstr "" - -#: ../source/layout.txt:128 -# a875eb8334b6436d97721a4f903f88e1 -msgid "While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to right, :meth:`Gtk.Box.pack_end` positions them from right to left." -msgstr "" - -#: ../source/layout.txt:132 -# 6a93f4e2a37542c5be4f9b3f9c9ebf72 -msgid "Grid" -msgstr "" - -#: ../source/layout.txt:133 -# 935d1744d90f4dcaa262d409ed094373 -msgid ":class:`Gtk.Grid` is a container which arranges its child widgets in rows and columns, but you do not need to specify the dimensions in the constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span multiple rows or columns. It is also possible to add a child next to an existing child, using :meth:`Gtk.Grid.attach_next_to`." -msgstr "" - -#: ../source/layout.txt:139 -# 5b6f1f126f674ffeabcc28909319b91d -msgid ":class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just using :meth:`Gtk.Grid.add`, which will place children next to each other in the direction determined by the \"orientation\" property (defaults to :attr:`Gtk.Orientation.HORIZONTAL`)." -msgstr "" - -#: ../source/layout.txt:145 -# d7fd9d2581f24f629f4259d5b079aabe -msgid "Grid Objects" -msgstr "" - -#: ../source/layout.txt:148 -# 4d4b0460ff7540358aa36975ff569de6 -msgid "Creates a new grid widget." -msgstr "" - -#: ../source/layout.txt:152 -# 8cc213c8a55947aab4215f6ad1076308 -msgid "Adds *child* to this grid." -msgstr "" - -#: ../source/layout.txt:154 -# 7e2f34009fa74fdd8232cf245d71beaa -msgid "The position of *child* is determined by the index of the cell left to it (*left*) and above of it (*top*). The number of 'cells' that *child* will occupy is determined by *width* and *height*." -msgstr "" - -#: ../source/layout.txt:160 -# ae8e6c5258874fc19cb3cc2f5bb9812f -msgid "Adds *child* to this grid, next to *sibling*. *side* is the side of *sibling* that *child* is positioned next to. It can be one of" -msgstr "" - -#: ../source/layout.txt:163 -# f7ac482ed70b4c4cb0992ea8ab463fb3 -msgid ":attr:`Gtk.PositionType.LEFT`" -msgstr "" - -#: ../source/layout.txt:164 -# d37cd2f28aa746038119308374e83066 -msgid ":attr:`Gtk.PositionType.RIGHT`" -msgstr "" - -#: ../source/layout.txt:165 -# 782d0dc8b99f4641ba4dda4f5166ec38 -msgid ":attr:`Gtk.PositionType.TOP`" -msgstr "" - -#: ../source/layout.txt:166 -# 9de0135ec6094e5fb1320586f13b37de -msgid ":attr:`Gtk.PositionType.BOTTOM`" -msgstr "" - -#: ../source/layout.txt:168 -# d4bc9b2584fe462fa067dc8ddb71a529 -msgid "*width* and *height* determine the number of 'cells' that *child* will occupy." -msgstr "" - -#: ../source/layout.txt:173 -# 12284968c06b4b33ba703dc00cbfa3de -msgid "Adds *widget* to this grid in the direction determined by the \"orientation\" property." -msgstr "" - -#: ../source/layout.txt:185 -# 3a18778c641f47e39d5365664bcbfe63 -msgid "Table" -msgstr "" - -#: ../source/layout.txt:187 -# 5cccf8c102124a3e9dda44c9c786aa98 -msgid "Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." -msgstr "" - -#: ../source/layout.txt:189 -# 03e14219e7d24b1ead304274d1d01f9a -msgid "The grid's dimensions need to be specified in the :class:`Gtk.Table` constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." -msgstr "" - -#: ../source/layout.txt:192 -# cbca24007e4a46ca9c77a6ef85e47941 -msgid ":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set the spacing between the rows at the specified row or column. Note that for columns, the space goes to the right of the column, and for rows, the space goes below the row." -msgstr "" - -#: ../source/layout.txt:197 -# 8b8b3a4b0cff4151ad2c861a29ca981c -msgid "You can also set a consistent spacing for all rows and/or columns with :meth:`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note that with these calls, the last row and last column do not get any spacing." -msgstr "" - -#: ../source/layout.txt:202 -# d8892e83b2364cdd9ac67827dec291e6 -msgid "Table Objects" -msgstr "" - -#: ../source/layout.txt:209 -# 1d8131f57d304dc88b29f58368dfa4f0 -msgid "The first argument is the number of rows to make in the table, while the second, obviously, is the number of columns. If *homogeneous* is ``True``, the table cells will all be the same size (the size of the largest widget in the table)." -msgstr "" - -#: ../source/layout.txt:216 -# 3f216b56f7584884bec0ff6756aa1620 -msgid "Adds a widget to a table." -msgstr "" - -#: ../source/layout.txt:218 -# b1df8502e48340b39644c28a114dee6c -msgid "*child* is the widget that should be added to the table. The number of 'cells' that a widget will occupy is specified by *left_attach*, *right_attach*, *top_attach* and *bottom_attach*. These each represent the leftmost, rightmost, uppermost and lowest column and row numbers of the table. (Columns and rows are indexed from zero)." -msgstr "" - -#: ../source/layout.txt:225 -# 1fe303ddcf674880b46aea00cf9e0c2a -msgid "For example, if you want a button in the lower-right cell of a 2 x 2 table, and want it to occupy that cell only, then the code looks like the following." -msgstr "" - -#: ../source/layout.txt:235 -# 539ed20ce8d7490d888f05d54a0f312b -msgid "If, on the other hand, you wanted a widget to take up the entire top row of our 2 x 2 table, you'd use" -msgstr "" - -#: ../source/layout.txt:242 -# f121f3e3b86c4a0589cd2fcc5ac7e297 -msgid "*xoptions* and *yoptions* are used to specify packing options and may be bitwise ORed together to allow multiple options. These options are:" -msgstr "" - -#: ../source/layout.txt:245 -# fc925e253ce24224a190e053aff655e5 -msgid ":attr:`Gtk.AttachOptions.EXPAND`: The widget should expand to take up any extra space in its container that has been allocated." -msgstr "" - -#: ../source/layout.txt:247 -# e6d0d50750b84eb1865825c6483acb51 -msgid ":attr:`Gtk.AttachOptions.FILL`: The widget will expand to use all the room available." -msgstr "" - -#: ../source/layout.txt:249 -# ae20ccf085ff45d3a27a63dbe061ca1f -msgid ":attr:`Gtk.AttachOptions.SHRINK`: Reduce size allocated to the widget to prevent it from moving off screen." -msgstr "" - -#: ../source/layout.txt:252 -# d421cebca1134a939cd9c6751b04ad42 -msgid "If omitted, *xoptions* and *yoptions* defaults to ``Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL``." -msgstr "" - -#: ../source/layout.txt:255 -# c7322048b4404964b32638107cefbfa9 -msgid "Finally, the padding arguments work just as they do for :meth:`Gtk.Box.pack_start`. If omitted, *xpadding* and *ypadding* defaults to ``0``." -msgstr "" - -#: ../source/layout.txt:261 -# e324aa368d9a44b482b9c66258e41b00 -msgid "Changes the space between a given table row and the subsequent row." -msgstr "" - -#: ../source/layout.txt:265 -# 275fa4472caf4f91911f4cccae1c11f1 -msgid "Alters the amount of space between a given table column and the following column." -msgstr "" - -#: ../source/layout.txt:270 -# 4da632e21dda4248a646518a3d21f298 -msgid "Sets the space between every row in this table equal to *spacing*." -msgstr "" - -#: ../source/layout.txt:274 -# 3dfaffce7cdd4f36acc6e4f029631884 -msgid "Sets the space between every column in this table equal to *spacing*." -msgstr "" - diff --git a/translations/templates/menus.pot b/translations/templates/menus.pot deleted file mode 100644 index 369f0a8..0000000 --- a/translations/templates/menus.pot +++ /dev/null @@ -1,373 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/menus.txt:2 -# dd4281ad55f14a32b881945c4bc2f984 -msgid "Menus" -msgstr "" - -#: ../source/menus.txt:4 -# bad49849b2634f21b312e1e91c5e00ff -msgid "GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which contains one or more :class:`Gtk.MenuItem` instances or one of its subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to commonly used functions of an application. Examples include creating a new document, printing a page or undoing an operation. It contains one or more instances of :class:`Gtk.ToolItem` or one of its subclasses." -msgstr "" - -#: ../source/menus.txt:13 -# b52d47e3b3334fe6a857e440c94dc3e5 -msgid "Actions" -msgstr "" - -#: ../source/menus.txt:15 -# 7ec9f7724080493eace56d4b8ff4b01f -msgid "Although, there are specific APIs to create menus and toolbars, you should use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map from names to :class:`Gtk.Action` objects. All actions that would make sense to use in a particular context should be in a single group. Multiple action groups may be used for a particular user interface. In fact, it is expected that most non-trivial applications will make use of multiple groups. For example, in an application that can edit multiple documents, one group holding global actions (e.g. quit, about, new), and one group per document holding actions that act on that document (eg. save, cut/copy/paste, etc). Each window's menus would be constructed from a combination of two action groups." -msgstr "" - -#: ../source/menus.txt:27 -# d3cae5b0b5c04f769034d37d8959de3e -msgid "Different classes representing different types of actions exist:" -msgstr "" - -#: ../source/menus.txt:29 -# 8cd8b2ab683d4e43994fa016f58bc7e3 -msgid ":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar item" -msgstr "" - -#: ../source/menus.txt:31 -# cd1f3c83f01442739ede1fadd2f79691 -msgid ":class:`Gtk.ToggleAction`: An action which can be toggled between two states" -msgstr "" - -#: ../source/menus.txt:32 -# e1de19ef93414c68ae60c92c62a79d3b -msgid ":class:`Gtk.RadioAction`: An action of which only one in a group can be active" -msgstr "" - -#: ../source/menus.txt:34 -# b095907da2034ba3ac1c8769cb3998e5 -msgid ":class:`Gtk.RecentAction`: An action of which represents a list of recently used files" -msgstr "" - -#: ../source/menus.txt:37 -# db1fe5bf9b6e4d9fb02a6e4b05ab73d2 -msgid "Actions represent operations that the user can be perform, along with some information how it should be presented in the interface, including its name (not for display), its label (for display), an accelerator, whether a label indicates a :ref:`stock item `, a tooltip, as well as the callback that is called when the action gets activated." -msgstr "" - -#: ../source/menus.txt:43 -# fbaaff8720e74aa5b9b50659a8979827 -msgid "You can create actions by either calling one of the constructors directly and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk.ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or by calling one of the convenience functions:" -msgstr "" - -#: ../source/menus.txt:48 -# d61ca47d55c2487e98968c31b181d6f4 -msgid ":meth:`Gtk.ActionGroup.add_actions`," -msgstr "" - -#: ../source/menus.txt:49 -# 64a8f61728a449408b43917eec85a8c9 -msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" -msgstr "" - -#: ../source/menus.txt:50 -# 1211c50566754f97a2a53e7f92370ee1 -msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." -msgstr "" - -#: ../source/menus.txt:52 -# 039d1106249944918190e4dae917785b -msgid "Note that you must specify actions for sub menus as well as menu items." -msgstr "" - -#: ../source/menus.txt:55 -# 830e95cebc934ee0b89eeb5ceaaaa652 -msgid "Action Objects" -msgstr "" - -#: ../source/menus.txt:59 -# 4d9ee62df1d04e1ba4badc5d5a9cea52 -msgid "*name* must be a unique name of the action." -msgstr "" - -#: ../source/menus.txt:61 -# 407f4403b3e84715b90090c6e3c925fa -msgid "If *label* is not ``None``, it is displayed in menu items and on buttons." -msgstr "" - -#: ../source/menus.txt:63 -# ad1066c6c4854327a126339d2822ac8c -msgid "If *tooltip* is not ``None``, it is used as tooltip for the action." -msgstr "" - -#: ../source/menus.txt:65 -# 8784897e83b54da4a66653295914e976 -msgid "If *stock_id* is not ``None``, it is used to lookup the :ref:`stock item ` to display in widgets representing the action." -msgstr "" - -#: ../source/menus.txt:71 -# 8059dc91fbd84d41983c205f7389f639 -msgid "The arguments are the same as for the :class:`Gtk.Action` constructor." -msgstr "" - -#: ../source/menus.txt:75 -# 171dfca2f4c24b459dc1d678c6923448 -msgid "The first four arguments are the same as for the :class:`Gtk.Action` constructor." -msgstr "" - -#: ../source/menus.txt:77 -# c8b0026374384a4699e0395b4624a8e6 -msgid "*value* indicates the value which :meth:`get_current_value` should return if this action is selected." -msgstr "" - -#: ../source/menus.txt:82 -# 20e78f2508c64cb2aefc5d4653d5250a -msgid "Obtains the \"value\" property of the currently active member of the group to which this action belongs." -msgstr "" - -#: ../source/menus.txt:87 -# 77fa2b37b0e64b01b51bd8dd9b8d52d2 -msgid "Joins this radio action object to the group of the *group_source* radio action object." -msgstr "" - -#: ../source/menus.txt:90 -# 607d7c494a564248954ef8b5d6a71115 -msgid "*group_source* must be a radio action object whose group we are joining, or ``None`` to remove the radio action from its group." -msgstr "" - -#: ../source/menus.txt:95 -# 6dd4b9d0b706487abd0f425f162ca901 -msgid "Creates a new :class:`Gtk.ActionGroup` instance. The name of the action group is used when associating keybindings with the actions." -msgstr "" - -#: ../source/menus.txt:100 -# 55eab286f1ee43edb88c9f6dc6b99d76 -msgid "Adds an :class:`Gtk.Action` object to the action group." -msgstr "" - -#: ../source/menus.txt:102 -# df18f751e4cd4c55814754bb53a47e77 -msgid "Note that this method does not set up the accelerator path of the action, use :meth:`add_action_with_accel` instead." -msgstr "" - -#: ../source/menus.txt:107 -# 064c1349e9204c2ab62aef8d9391848e -msgid "Adds an :class:`Gtk.Action` object to the action group and sets up the accelerator." -msgstr "" - -#: ../source/menus.txt:110 -# b58e0101512148ceaffb62381b6035ce -msgid "*accelerator* must be in the format understood by :func:`Gtk.accelerator_parse`, or ``\"\"`` for no accelerator, or ``None`` to use the stock accelerator." -msgstr "" - -#: ../source/menus.txt:115 -# 1e507ae126564c909138c38730b5b206 -msgid "This is a convenience function to create a number of :class:`Gtk.Action` objects and add them to this action group." -msgstr "" - -#: ../source/menus.txt:118 -#: ../source/menus.txt:164 -# 6acf66caf6c747a1a96f9795245a0199 -# 9cd0f954a881414488fe9483dc558f1f -msgid "*entries* is a list of tuples which can vary in size from one to six items with the following information:" -msgstr "" - -#: ../source/menus.txt:121 -#: ../source/menus.txt:143 -#: ../source/menus.txt:167 -# a3545632a55c4d3b9c402fa4aaeab7ac -# 5896138913af4d798d828d3096987489 -# 0868d68d497e46d5bcb553c3b163ad34 -msgid "The name of the action (mandatory)" -msgstr "" - -#: ../source/menus.txt:122 -#: ../source/menus.txt:144 -#: ../source/menus.txt:168 -# bc635457d9884fe287f830946d8971fb -# fc45c1b182b946b6a3ec203275a15ba7 -# c80783e4bb724e6287781e1a9d8e04ed -msgid "The :ref:`stock item ` of the action (default: ``None``)" -msgstr "" - -#: ../source/menus.txt:123 -#: ../source/menus.txt:145 -#: ../source/menus.txt:169 -# 841cb5ae1cf347c2b193550c2098ecae -# 75eccc09715745abb05aa538b16f1029 -# 215451f1601744e5aa54bc42d702c9ca -msgid "The label for the action (default: ``None``)" -msgstr "" - -#: ../source/menus.txt:124 -#: ../source/menus.txt:146 -#: ../source/menus.txt:170 -# 545dddad0fab4cbbb87d8b4e496e3287 -# c7900d5a17be4b169d4b2bb7db13dd15 -# 040cb67c339e4fa78fa7a6a2d4baf9e1 -msgid "The accelerator for the action, in the format understood by the :func:`Gtk.accelerator_parse` function (default: ``None``)" -msgstr "" - -#: ../source/menus.txt:126 -#: ../source/menus.txt:148 -#: ../source/menus.txt:172 -# d91fa9486fc64e91af90457944db1bb2 -# 4c8c400a4c7947659afe2b4cb5a7021f -# cde97b5d4dc645ac8ec9abe07acd6cf4 -msgid "The tooltip of the action (default: ``None``)" -msgstr "" - -#: ../source/menus.txt:127 -#: ../source/menus.txt:149 -# e7031114f57b4885bbc5e4ccd30f30a3 -# 0593b38a452d4639b366f9b51b196343 -msgid "The callback function invoked when the action is activated (default: ``None``)" -msgstr "" - -#: ../source/menus.txt:130 -#: ../source/menus.txt:154 -# a9897d3eea8c4dc0851dba44f37186fc -# ed84fa94d0ce4bbcaa20281ca0cd6be0 -msgid "The \"activate\" signals of the actions are connected to the callbacks." -msgstr "" - -#: ../source/menus.txt:132 -#: ../source/menus.txt:156 -#: ../source/menus.txt:180 -# 576f2e1da92748be809616e776e1daa3 -# b47d37f7e3cd42a5a793b34c256c1208 -# 98d99232ab2a4ea68043f9a2c32f762e -msgid "If *user_data* is not ``None``, it is passed to the callback function (if specified)." -msgstr "" - -#: ../source/menus.txt:137 -# 824dd01bcf3e48e5954e6b3a84ec20ed -msgid "This is a convenience function to create a number of :class:`Gtk.ToggleAction` objects and add them to this action group." -msgstr "" - -#: ../source/menus.txt:140 -# c5be60a9e88c41c3bb143bf92a5d4a7d -msgid "*entries* is a list of tuples which can vary in size from one to seven items with the following information:" -msgstr "" - -#: ../source/menus.txt:151 -# be7ac49bc442413eaebb06a4c1682851 -msgid "A Boolean indicating whether the toggle action is active (default: ``False``)" -msgstr "" - -#: ../source/menus.txt:161 -# 75b2920758b84bb39673d8f86180ece1 -msgid "This is a convenience routine to create a group of :class:`Gtk.RadioAction` objects and add them to this action group." -msgstr "" - -#: ../source/menus.txt:173 -# aadce477b2b74e9395a395a8e8f26395 -msgid "The value to set on the radio action (default: 0)" -msgstr "" - -#: ../source/menus.txt:175 -# fc863d6d3f3741459ae9c24ef87c6570 -msgid "*value* specifies the radio action that should be set active." -msgstr "" - -#: ../source/menus.txt:177 -# 1c71eb073a5c48bab0044b2c34598b15 -msgid "The \"changed\" signal of the first radio action is connected to the *on_change* callback (if specified)." -msgstr "" - -#: ../source/menus.txt:185 -# 4abbc6fe00d04a88bca9cef39fbaa1e9 -msgid "Parses a string representing an accelerator. The format looks like \"a\" or \"F1\" or \"z\" (the last one is for key release). The parser is fairly liberal and allows lower or upper case, and also abbreviations such as \"\" and \"\". For character keys the name is not the symbol, but the lowercase name, e.g. one would use \"minus\" instead of \"-\"." -msgstr "" - -#: ../source/menus.txt:192 -# 4ec467e4ac714dd799fc87d0b8743aa3 -msgid "Returns a tuple ``(accelerator_key, accelerator_mods)``, where the latter represents the accelerator modifier mask and the first the accelerator keyval. Both values will be set to 0 (zero) if parsing failed." -msgstr "" - -#: ../source/menus.txt:197 -# 37bc5658814f44e285d118c81fcddc41 -msgid "UI Manager" -msgstr "" - -#: ../source/menus.txt:199 -# 7f18a1ad3c104860a8e3b8593906a921 -msgid ":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars using an `XML-like description `_." -msgstr "" - -#: ../source/menus.txt:202 -# 61d9624f4a2c4d38b62066efd152b9e6 -msgid "First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good idea to tell the parent window to respond to the specified keyboard shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk.Window.add_accel_group`." -msgstr "" - -#: ../source/menus.txt:207 -# 852148e946c54ea49d3d438e0d59db48 -msgid "Then, you can define the actual visible layout of the menus and toolbars, and add the UI layout. This \"ui string\" uses an XML format, in which you should mention the names of the actions that you have already created. Remember that these names are just the identifiers that we used when creating the actions. They are not the text that the user will see in the menus and toolbars. We provided those human-readable names when we created the actions." -msgstr "" - -#: ../source/menus.txt:214 -# 2be3f15dbad3424098e49eaa4c34dfc4 -msgid "Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` and add the widget to a container such as :class:`Gtk.Box`." -msgstr "" - -#: ../source/menus.txt:218 -# e96cab0011c840fab1f19a9546cbbafc -msgid "UIManager Objects" -msgstr "" - -#: ../source/menus.txt:224 -# 85966c2b87f54f169e4a6884354818b2 -msgid "Inserts an action group into the list of action groups associated with this manager. Actions in earlier groups hide actions with the same name in later groups." -msgstr "" - -#: ../source/menus.txt:228 -# d4ab7bc0284d424f9357c8dd06804467 -msgid "*pos* is the position at which the group will be inserted. If omitted, it will be appended." -msgstr "" - -#: ../source/menus.txt:233 -# d4242044d2da4af08a29ac9a15e7b150 -msgid "Returns the group of global keyboard accelerators associated with this manager." -msgstr "" - -#: ../source/menus.txt:238 -# d9f446a24b804719b6e914a65469869b -msgid "Looks up a widget by following a path. The path consists of the names specified in the XML description of the UI. separated by '/'. Elements which don't have a name or action attribute in the XML (e.g. ) can be addressed by their XML element name (e.g. \"popup\"). The root element (\"/ui\") can be omitted in the path." -msgstr "" - -#: ../source/menus.txt:244 -# 67cc01cdf5f146779167903b9b54bceb -msgid "Returns the widget found by following the *path*, or ``None`` if no widget was found." -msgstr "" - -#: ../source/menus.txt:249 -# f9afbf8d038d456fa37dca57bdfbfa24 -msgid "Parses *text* containing a `UI definition `_ and merges it with the current contents of manager. An enclosing element is added if it is missing." -msgstr "" - -#: ../source/menus.txt:253 -# 73508c1767ea4e508662eff95226c730 -msgid "Returns the merge id for the merged UI." -msgstr "" - -#: ../source/menus.txt:255 -# e53b877aea19440a850df00f3149e76c -msgid "Throws an exception if an error occurred." -msgstr "" - -#: ../source/menus.txt:258 -# 43e2be5a49e24951a74b8baef1ce1199 -msgid "Example" -msgstr "" - diff --git a/translations/templates/objects.pot b/translations/templates/objects.pot deleted file mode 100644 index 2ee83d9..0000000 --- a/translations/templates/objects.pot +++ /dev/null @@ -1,308 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/objects.txt:4 -# c33e314c5589485cb99c1fd9ee5a0a2f -msgid "Objects" -msgstr "" - -#: ../source/objects.txt:6 -# c6e01f8d0a634b5eaad87f6125994cc3 -msgid "GObject is the fundamental type providing the common attributes and methods for all object types in GTK+, Pango and other libraries based on GObject. The :class:`GObject.GObject` class provides methods for object construction and destruction, property access methods, and signal support." -msgstr "" - -#: ../source/objects.txt:11 -# acfaea8b3da34228b790e7f7221aab70 -msgid "This section will introduce some important aspects about the GObject implementation in python." -msgstr "" - -#: ../source/objects.txt:15 -# ce95a43d71224fc2be23140a71bf3268 -msgid "Inherit from GObject.GObject" -msgstr "" - -#: ../source/objects.txt:17 -# d871b799d7da461badbee1387a1df448 -msgid "A native GObject is accessible via :class:`GObject.GObject`. It is rarely intanciated directly, we generally use inherited class. A :class:`Gtk.Widget` is an inherited class of a :class:`GObject.GObject`. It may be interesting to make an inherited class to create a new widget, like a settings dialog." -msgstr "" - -#: ../source/objects.txt:22 -# fbc71e67bb1e458eb08ddb9abf6792d4 -msgid "To inherit from :class:`GObject.GObject`, you must call :meth:`GObject.GObject.__init__` in your constructor (if the class inherits from :class:`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like in the example below:" -msgstr "" - -#: ../source/objects.txt:37 -# 699a2798533340e0b1a7af5d8944f8c0 -msgid "Signals" -msgstr "" - -#: ../source/objects.txt:39 -# 755c891c03874ece880e1304019843af -msgid "Signals connect arbitrary application-specific events with any number of listeners. For example, in GTK+, every user event (keystroke or mouse move) is received from the X server and generates a GTK+ event under the form of a signal emission on a given object instance." -msgstr "" - -#: ../source/objects.txt:44 -# 2a79b656408b4bba80ce0d5e57069e58 -msgid "Each signal is registered in the type system together with the type on which it can be emitted: users of the type are said to connect to the signal on a given type instance when they register a function to be invoked upon the signal emission. Users can also emit the signal by themselves or stop the emission of the signal from within one of the functions connected to the signal." -msgstr "" - -#: ../source/objects.txt:51 -# 2a7230c27527480f9fe15a7e6f9d8494 -msgid "Receive signals" -msgstr "" - -#: ../source/objects.txt:53 -# 0e83856aff9f46c296c7fa817ff7f5e6 -msgid "See :ref:`signals`" -msgstr "" - -#: ../source/objects.txt:56 -# ccea105dc73b4f0eaaeb13dc2d107e70 -msgid "Create new signals" -msgstr "" - -#: ../source/objects.txt:58 -# 93b183efe5dc45c8888269b74ada9aca -msgid "New signals can be created by adding them to :attr:`GObject.GObject.__gsignals__`, a dictionary:" -msgstr "" - -#: ../source/objects.txt:61 -# d101f4599add4b52a7e45fb5080bdff0 -msgid "When a new signal is created, a method handler can also be defined, it will be called each time the signal is emitted. It is called do_signal_name." -msgstr "" - -#: ../source/objects.txt:75 -# e7766028e9dd4980afe758bd09055dcb -msgid ":const:`GObject.SIGNAL_RUN_FIRST` indicates ths signal will invoke the object method handler (:meth:`do_my_signal` here) in the first emission stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler will be invoked in the third emission stage) and :const:`GObject.SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." -msgstr "" - -#: ../source/objects.txt:81 -# 4d01d2d6604a40e6bdc9dbeea1c030d8 -msgid "The second part, ``None``, indicates the return type of the signal, usually ``None``." -msgstr "" - -#: ../source/objects.txt:84 -# fac872a2e57548b08b6188148bd65159 -msgid "``(int,)`` indicates the signal arguments, here, the signal will only take one argument, whose type is int. This argument type list must end with a comma." -msgstr "" - -#: ../source/objects.txt:88 -# 891e08857e73406795d89d9635709b41 -msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" -msgstr "" - -#: ../source/objects.txt:96 -# 8d49e5bef3d849f797e30f8571be8484 -msgid "Properties" -msgstr "" - -#: ../source/objects.txt:97 -# 79fc74093c0c486cbd58542a98b5b924 -msgid "One of GObject's nice features is its generic get/set mechanism for object properties. Each class inherited from :class:`GObject.GObject` can define new properties. Each property as a type which never changes (e.g. str, float, int...). For instance, they are used for :class:`Gtk.Button` where there is a \"label\" property which contains the text of the button." -msgstr "" - -#: ../source/objects.txt:104 -# 3868bb9d3f9c4c5dbd9c1388e9632b23 -msgid "Use existing properties" -msgstr "" - -#: ../source/objects.txt:106 -# 74a085bdbe3d49ac9f5ffb348cbe4363 -msgid "The class :class:`GObject.GObject` provides several useful functions to manage existing properties, :func:`GObject.GObject.get_property` and :func:`GObject.GObject.set_property`." -msgstr "" - -#: ../source/objects.txt:109 -# 5c369137a9a14ac4b27069bad039945e -msgid "Some properties also have functions dedicated to them, called getter and setter. For the property \"label\" of a button, there are two functions to get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button.set_label`." -msgstr "" - -#: ../source/objects.txt:114 -# 76d61761fae34eb3abddd999d7544161 -msgid "Create new properties" -msgstr "" - -#: ../source/objects.txt:116 -# 37782769ad0348238d8f1f6b03b82e76 -msgid "A property is defined with a name and a type. Even is python itself is dynamically typed, you can't change the type of a property once it is defined. A property can be created using :func:`GObject.property`." -msgstr "" - -#: ../source/objects.txt:131 -# 1f65a07ba001442895588aec464f46f9 -msgid "Properties can also be readonly, if you want some properties to be readable but not writable. To do so, you can add some flags to the property definition, to control read/write access. Flags are :const:`GObject.PARAM_READABLE` (only read access for external code), :const:`GObject.PARAM_WRITABLE` (only write access), :const:`GObject.PARAM_READWRITE` (public):" -msgstr "" - -#: ../source/objects.txt:146 -# 1c3cc41512cf47f7872b8caa037b424a -msgid "You can also define new read-only properties with a new method decorated with :func:`GObject.property`:" -msgstr "" - -#: ../source/objects.txt:162 -# 965229a40097422f99e17a9685b4de5a -msgid "You can get this property using:" -msgstr "" - -#: ../source/objects.txt:170 -# a0cf1fba2b6f4b88a684256ec031f5f9 -msgid "There is also a way to define minimum and maximum values for numbers, using a more verbose form:" -msgstr "" - -#: ../source/objects.txt:206 -# 06424e87e44940a7ae7d70dab3575e74 -msgid "Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a dictionary, and handled in do_get_property and do_set_property." -msgstr "" - -#: ../source/objects.txt:210 -# ffad6a737582450abd7cda05ff9ab1c6 -msgid "Watch properties" -msgstr "" - -#: ../source/objects.txt:212 -# ea1d7e813fce4057a2d28bed9390b9a4 -msgid "When a property is modified, a signal is emitted, whose name is \"notify::property_name\":" -msgstr "" - -#: ../source/objects.txt:227 -# 0868cbc612cc41379124b693904c11ea -msgid "API" -msgstr "" - -#: ../source/objects.txt:233 -# ac20e76df1314c75a7281989f62e4566 -msgid "Retrieves a property value." -msgstr "" - -#: ../source/objects.txt:237 -# d1513ef24a9142b88e13837e03de4793 -msgid "Set property *property_name* to *value*." -msgstr "" - -#: ../source/objects.txt:241 -# 21f54462dbff4fe19d1d7dbfdcc3edfa -msgid "Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal is of type ``(int,)``, it must be emitted with::" -msgstr "" - -#: ../source/objects.txt:248 -# e5ec3cdba7004fa593ba458a9dd45049 -msgid "This method freezes all the \"notify::\" signals (which are emitted when any property is changed) until the :meth:`thaw_notify` method is called." -msgstr "" - -#: ../source/objects.txt:254 -# 2ec9f637fbf74be98a9c09e48b6b18ce -msgid "Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." -msgstr "" - -#: ../source/objects.txt:258 -# 3f72e522977943d086539d861daf3e1f -msgid "A dictionary where inherited class can define new signals." -msgstr "" - -#: ../source/objects.txt:260 -# 91b17aa521f345c6ae424c3380edc5e2 -msgid "Each element in the dictionary is a new signal. The key is the signal name. The value is a tuple, with the form::" -msgstr "" - -#: ../source/objects.txt:265 -# 0da90038663c4054b0ab4069f29e102a -msgid ":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject.SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the return type of the signal. ``(int,)`` is the list of the parameters of the signal, it must end with a comma." -msgstr "" - -#: ../source/objects.txt:274 -# 1b2421552b474926a922337e052fd6b6 -msgid "The :attr:`__gproperties__` dictionary is a class property where you define the properties of your object. This is not the recommend way to define new properties, the method written above is much less verbose. The benefits of this method is that a property can be defined with more settings, like the minimum or the maximum for numbers." -msgstr "" - -#: ../source/objects.txt:280 -# 327e328112ff43faaf652e562ce88794 -msgid "The key is the name of the property" -msgstr "" - -#: ../source/objects.txt:282 -# 2365322375fb4ce09a1a51293dbb9031 -msgid "The value is a tuple which describe the property. The number of elements of this tuple depends on its first element but the tuple will always contain at least the following items:" -msgstr "" - -#: ../source/objects.txt:286 -# 204c582c83c447af85e90f18cbccdc7f -msgid "The first element is the property's type (e.g. ``int``, ``float``...)." -msgstr "" - -#: ../source/objects.txt:288 -# 30ec7eeb1b494225acc3d502d932a8ca -msgid "The second element is the property's nick name, which is a string with a short description of the property. This is generally used by programs with strong introspection capabilities, like the graphical user interface builder `Glade`_." -msgstr "" - -#: ../source/objects.txt:293 -# 5d29f0bf6fc64e1890828fa67daf9152 -msgid "The third one is the property's description or blurb, which is another string with a longer description of the property. Also used by `Glade`_ and similar programs." -msgstr "" - -#: ../source/objects.txt:297 -# 4df0d0df15754a12aaded79253e8d7d7 -msgid "The last one (which is not necessarily the forth one as we will see later) is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject.PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." -msgstr "" - -#: ../source/objects.txt:301 -# 669ac8ec3bb94cfd88f306ed31cdc266 -msgid "The absolute length of the tuple depends on the property type (the first element of the tuple). Thus we have the following situations:" -msgstr "" - -#: ../source/objects.txt:304 -# fe4f215a3e4c4b0f9daadf929ced3464 -msgid "If the type is ``bool`` or ``str``, the forth element is the default value of the property." -msgstr "" - -#: ../source/objects.txt:307 -# eb4bf97c53c7483ea2098ae5b2ec838b -msgid "If the type is ``int`` or ``float``, the forth element is the minimum accepted value, the fifth element is the maximum accepted value and the sixth element is the default value." -msgstr "" - -#: ../source/objects.txt:311 -# 4ccbe177c7d746bfabab3a5280634d72 -msgid "If the type is not one of these, there is no extra element." -msgstr "" - -#: ../source/objects.txt:316 -# 50e1ae84ecfd4619b3ce19db0a9d7916 -msgid "Invoke the object method handler in the first emission stage." -msgstr "" - -#: ../source/objects.txt:320 -# 4c799a13f01940fa8e97367fde3abb07 -msgid "Invoke the object method handler in the third emission stage." -msgstr "" - -#: ../source/objects.txt:324 -# cf5cbf25387448319a90acb1f9523de3 -msgid "Invoke the object method handler in the last emission stage." -msgstr "" - -#: ../source/objects.txt:328 -# aa7d38dcdd1844ad93dc0dbafb9d3088 -msgid "The property is readable." -msgstr "" - -#: ../source/objects.txt:332 -# e6068e485b5042c8822972db935127fa -msgid "The property is writable." -msgstr "" - -#: ../source/objects.txt:336 -# 99af7d5acc51492fa4ec0df041bda9b3 -msgid "The property is readable and writable." -msgstr "" - diff --git a/translations/templates/progressbar.pot b/translations/templates/progressbar.pot deleted file mode 100644 index 3bb74e1..0000000 --- a/translations/templates/progressbar.pot +++ /dev/null @@ -1,98 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/progressbar.txt:2 -# 80fadf9868a8470d8b50710c662374fc -msgid "ProgressBar" -msgstr "" - -#: ../source/progressbar.txt:4 -# fac482ba66854edf817a0c031fd81d7c -msgid "The :class:`Gtk.ProgressBar` is typically used to display the progress of a long running operation. It provides a visual clue that processing is underway. The :class:`Gtk.ProgressBar` can be used in two different modes: *percentage mode* and *activity mode*." -msgstr "" - -#: ../source/progressbar.txt:9 -# 8329931af0a84e2cae29afde9ea40f52 -msgid "When an application can determine how much work needs to take place (e.g. read a fixed number of bytes from a file) and can monitor its progress, it can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees a growing bar indicating the percentage of the work that has been completed. In this mode, the application is required to call :meth:`Gtk.ProgressBar.set_fraction` periodically to update the progress bar, passing a float between 0 and 1 to provide the new percentage value." -msgstr "" - -#: ../source/progressbar.txt:17 -# b76ca925d0ea44099a4951c5e5f08bb1 -msgid "When an application has no accurate way of knowing the amount of work to do, it can use *activity mode*, which shows activity by a block moving back and forth within the progress area. In this mode, the application is required to call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. You can also choose the step size, with the :meth:`Gtk.ProgressBar.set_pulse_step` method." -msgstr "" - -#: ../source/progressbar.txt:24 -# 1ddb8c54c62645559b9df555bb93c392 -msgid "By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but you can change it to a vertical progress bar by using the :meth:`Gtk.ProgressBar.set_orientation` method. Changing the direction the progress bar grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk.ProgressBar` can also contain text which can be set by calling :meth:`Gtk.ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." -msgstr "" - -#: ../source/progressbar.txt:32 -# 191a572bb6794333be5371c41dd681ad -msgid "ProgressBar Objects" -msgstr "" - -#: ../source/progressbar.txt:38 -# 5f0d0dec9c1c47f590125e84aa5498fb -msgid "Causes the progress bar to \"fill in\" the given fraction of the bar. *fraction* should be between 0.0 and 1.0, inclusive." -msgstr "" - -#: ../source/progressbar.txt:43 -# 3e152863c37446a397f9cfa7f5b133db -msgid "Sets the fraction of total progress bar length to move the bouncing block for each call to :meth:`pulse`." -msgstr "" - -#: ../source/progressbar.txt:48 -# 1350ef2941af4a8fad39895c491d3a4c -msgid "Indicates that some progress is made, but you don't know how much. Causes the progress bar to enter *activity mode*, where a block bounces back and forth. Each call to :meth:`pulse` causes the block to move by a little bit (the amount of movement per pulse is determined by :meth:`set_pulse_step`)." -msgstr "" - -#: ../source/progressbar.txt:56 -# e438da9e405c49df905b3deff50d344c -msgid "Sets the orientation. *orientation* can be one of" -msgstr "" - -#: ../source/progressbar.txt:58 -# 2ead028ecd014ebcb99ab15ce75b6c9c -msgid ":attr:`Gtk.Orientation.HORIZONTAL`" -msgstr "" - -#: ../source/progressbar.txt:59 -# 434b37a9576b466499faf74ad054e560 -msgid ":attr:`Gtk.Orientation.VERTICAL`" -msgstr "" - -#: ../source/progressbar.txt:63 -# 56c25b2364e14731bae57c208ad2f72c -msgid "Sets whether the progressbar will show text superimposed over the bar. The shown text is either the value of the \"text\" property or, if that is ``None``, the \"fraction\" value, as a percentage." -msgstr "" - -#: ../source/progressbar.txt:69 -# c9e849d45e5c44728f287c272f644c67 -msgid "Causes the given *text* to appear superimposed on the progress bar." -msgstr "" - -#: ../source/progressbar.txt:73 -# 328839fb098b445384d7f6b7dddd76dd -msgid "Progress bars normally grow from top to bottom or left to right. Inverted progress bars grow in the opposite direction." -msgstr "" - -#: ../source/progressbar.txt:77 -# 9fb5edda725e4662a1adb0ed9e9173ac -msgid "Example" -msgstr "" - diff --git a/translations/templates/spinner.pot b/translations/templates/spinner.pot deleted file mode 100644 index 0e7fc56..0000000 --- a/translations/templates/spinner.pot +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/spinner.txt:2 -# 2ea1a5ce63324d13b960905b21d11794 -msgid "Spinner" -msgstr "" - -#: ../source/spinner.txt:4 -# e12b744752944f3983f6743167a49e13 -msgid "The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is often used as an alternative to a :class:`GtkProgressBar` for displaying indefinite activity, instead of actual progress." -msgstr "" - -#: ../source/spinner.txt:8 -# b11aa90df1a74ed1a2997297bc1e5a35 -msgid "To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:`Gtk.Spinner.stop`." -msgstr "" - -#: ../source/spinner.txt:12 -# 97f8069daeec46a0b4fb7d9fec0ad245 -msgid "Spinner Objects" -msgstr "" - -#: ../source/spinner.txt:18 -# 99f335c2ea124b06af02f7083f05d31a -msgid "Starts the animation of the spinner." -msgstr "" - -#: ../source/spinner.txt:22 -# 15db3084c7f542418bfcc3bac2e14a3a -msgid "Stops the animation of the spinner." -msgstr "" - -#: ../source/spinner.txt:25 -# b225f6219c7c4cbbb174b821a067ec4d -msgid "Example" -msgstr "" - diff --git a/translations/templates/stock.pot b/translations/templates/stock.pot deleted file mode 100644 index 2069350..0000000 --- a/translations/templates/stock.pot +++ /dev/null @@ -1,98 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/stock.txt:4 -# e121e6594e0e4da9a1621a2377ef4958 -msgid "Stock Items" -msgstr "" - -#: ../source/stock.txt:6 -# 606b231d71674442a3f5d52d748963fa -msgid "Stock items represent commonly-used menu or toolbar items such as \"Open\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are provided to avoid typing mistakes in the strings." -msgstr "" - -#: ../source/stock.txt:141 -#: ../source/stock.txt:151 -#: ../source/stock.txt:165 -#: ../source/stock.txt:179 -#: ../source/stock.txt:209 -#: ../source/stock.txt:227 -#: ../source/stock.txt:261 -#: ../source/stock.txt:271 -#: ../source/stock.txt:285 -#: ../source/stock.txt:295 -#: ../source/stock.txt:309 -#: ../source/stock.txt:403 -#: ../source/stock.txt:421 -#: ../source/stock.txt:471 -#: ../source/stock.txt:485 -#: ../source/stock.txt:495 -# 414f2abe421e4978b47ca5427fb3f106 -# ddb9102f827b473eae086c933a8988da -# f116631764a1416e8d65f881b21f294d -# d6cefcc39cf64f0490a9ac6344093a1f -# 68e79a9579a9477ab9cc07c8831ac586 -# e7154d34aab04729a7c0b6ec84d8997f -# a4ad7d8ce49541d5aef4ca38acda2f75 -# 7205f6fbc7614699813f09ad4ad41b0d -# c7c278f8e45f4a0e90dd8e9f4efba75a -# f731da1a0b0d4a4f90f214d0e3068fad -# 3dcc064472ce433493951bdc676a1de1 -# 401ce8dc69d64ed2979b2c2bbabca805 -# e381d63cbcbb477bb7f54fc8fdedded0 -# a82fab50ef9a490aafffe735117b1b0e -# 4311fbff8eb04d1ababc0ea72a17877b -# 32791b18cb8048b598a5372d03433b5a -msgid "LTR variant:" -msgstr "" - -#: ../source/stock.txt:145 -#: ../source/stock.txt:155 -#: ../source/stock.txt:169 -#: ../source/stock.txt:183 -#: ../source/stock.txt:213 -#: ../source/stock.txt:231 -#: ../source/stock.txt:265 -#: ../source/stock.txt:275 -#: ../source/stock.txt:289 -#: ../source/stock.txt:299 -#: ../source/stock.txt:313 -#: ../source/stock.txt:407 -#: ../source/stock.txt:425 -#: ../source/stock.txt:475 -#: ../source/stock.txt:489 -#: ../source/stock.txt:499 -# 856d301cc54844699657d94b81c62f38 -# c828bd161d3947f48d164903af1c15b1 -# fcd887eb429b406d87b598cee2af6456 -# 540c4c3bfb5549b2965d263b6adee0ff -# 8d3280e44d664904a253934d4a763ca8 -# dd41de5058984509aada4b41e5d15292 -# 2752da4a0eee46f49d1c1a8b212cb842 -# 7c3f745178dc46f5b49ef867c7d54c1c -# 7488f736d91c4f109c0b7f17ef0bc955 -# f592f6173a1e4362a78439441cf06a98 -# 3da43acde56548a190140395393f3f7a -# be82f292d16a4b86812d45ff60b39cc1 -# dc857a9abef7449db73e5eefb7bc51ac -# 75afb699f83c480e92f2398247b3bee9 -# b0643da317004916aabc5e5768a55df7 -# 5d2580d604fa4db980345d496d6d95d1 -msgid "RTL variant:" -msgstr "" - diff --git a/translations/templates/textview.pot b/translations/templates/textview.pot deleted file mode 100644 index 7efaac5..0000000 --- a/translations/templates/textview.pot +++ /dev/null @@ -1,388 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/textview.txt:2 -# e8f7160efb414800bd9cc3fb4a5cd017 -msgid "Multiline Text Editor" -msgstr "" - -#: ../source/textview.txt:4 -# 5bde12b40e5f4fb6bed1c7ff3c07366d -msgid "The :class:`Gtk.TextView` widget can be used to display and edit large amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/view design. In this case the :class:`Gtk.TextBuffer` is the model which represents the text being edited. This allows two or more :class:`Gtk.TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows those text buffers to be displayed slightly differently. Or you could maintain several text buffers and choose to display each one at different times in the same :class:`Gtk.TextView` widget." -msgstr "" - -#: ../source/textview.txt:13 -# 0655fb0ae4634597937fba1dd63ab83a -msgid "The View" -msgstr "" - -#: ../source/textview.txt:15 -# 0c2513ef79ae4e2f965b37f22181cdfb -msgid "The :class:`Gtk.TextView` is the frontend with which the user can add, edit and delete textual data. They are commonly used to edit multiple lines of text. When creating a :class:`Gtk.TextView` it contains its own default :class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView.get_buffer` method." -msgstr "" - -#: ../source/textview.txt:21 -# 58145642733e4c4088270ce097f12b4c -msgid "By default, text can be added, edited and removed from the :class:`Gtk.TextView`. You can disable this by calling :meth:`Gtk.TextView.set_editable`. If the text is not editable, you usually want to hide the text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some cases it may be useful to set the justification of the text with :meth:`Gtk.TextView.set_justification`. The text can be displayed at the left edge, (:attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification.RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across the complete width (:attr:`Gtk.Justification.FILL`)." -msgstr "" - -#: ../source/textview.txt:31 -# a88d1dc8f5014aafa1240db268350dbb -msgid "Another default setting of the :class:`Gtk.TextView` widget is long lines of text will continue horizontally until a break is entered. To wrap the text and prevent it going off the edges of the screen call :meth:`Gtk.TextView.set_wrap_mode`." -msgstr "" - -#: ../source/textview.txt:36 -# 3d3f797c5cae4337a5fa286369c2e1e2 -msgid "TextView Objects" -msgstr "" - -#: ../source/textview.txt:40 -# 384b87ce9a19472b96584b6968b26ed6 -msgid "Creates a new :class:`Gtk.TextView` associated with an empty default :class:`Gtk.TextBuffer`." -msgstr "" - -#: ../source/textview.txt:45 -# 3b0dca7a37624c5cabcd6db6ab5ec9ef -msgid "Returns the :class:`Gtk.TextBuffer` being displayed by this text view." -msgstr "" - -#: ../source/textview.txt:49 -# 31796eead80c49368e6a7a110a15b446 -msgid "Sets the default editability of this :class:`Gtk.TextView`." -msgstr "" - -#: ../source/textview.txt:53 -# 61d53785115e481c8f3993c845098840 -msgid "Toggles whether the insertion point is displayed. A buffer with no editable text probably shouldn't have a visible cursor, so you may want to turn the cursor off." -msgstr "" - -#: ../source/textview.txt:59 -# 344eeeed95144a6a8b9245699986c13a -msgid "Sets the default justification of text." -msgstr "" - -#: ../source/textview.txt:61 -# 9f9442be837d45609b68de3253425e19 -msgid "*justification* can be one of the following values:" -msgstr "" - -#: ../source/textview.txt:63 -# 05f00d60883444a79a0b6e0d7463a74e -msgid ":attr:`Gtk.Justification.LEFT`: Text is placed at the left edge." -msgstr "" - -#: ../source/textview.txt:64 -# c4d4b73bc5084a059e87f23daaa4eb32 -msgid ":attr:`Gtk.Justification.RIGHT`: Text is placed at the right edge." -msgstr "" - -#: ../source/textview.txt:65 -# babd50d640ea4127884a3b7feb297ac0 -msgid ":attr:`Gtk.Justification.CENTER`: Text is placed in the center." -msgstr "" - -#: ../source/textview.txt:66 -# 4cbf1898567d49ee9221a45cdfc60dc1 -msgid ":attr:`Gtk.Justification.FILL`: Text is distributed across the complete width." -msgstr "" - -#: ../source/textview.txt:71 -# 2f129002c92844cea0f22d6a7df8acfa -msgid "Sets the line wrapping for the view." -msgstr "" - -#: ../source/textview.txt:73 -# 5fffbd6afc1c4497b4e3710d7b868afb -msgid "*wrap_mode* can be one of the following values:" -msgstr "" - -#: ../source/textview.txt:75 -# 951e8bb4824345d696c7bd178752a284 -msgid ":attr:`Gtk.WrapMode.NONE`: Do not wrap lines; just make the text area wider." -msgstr "" - -#: ../source/textview.txt:77 -# 40f7b3ce28af45f6a6fc8c7e76577dd6 -msgid ":attr:`Gtk.WrapMode.CHAR`: Wrap text, breaking lines anywhere the cursor can appear (between characters, usually)." -msgstr "" - -#: ../source/textview.txt:79 -# d1f903727f584cf5b3515a7abba5d62e -msgid ":attr:`Gtk.WrapMode.WORD`: Wrap text, breaking lines in between words." -msgstr "" - -#: ../source/textview.txt:80 -# 2cdd020b5cc0427caafb166f21316c0b -msgid ":attr:`Gtk.WrapMode.WORD_CHAR`: Wrap text, breaking lines in between words, or if that is not enough, also between `graphemes`_." -msgstr "" - -#: ../source/textview.txt:84 -# ff8e7cc0c69b4765b7bfcff25a4fecc8 -msgid "The Model" -msgstr "" - -#: ../source/textview.txt:86 -# a0599ca5eac94346926797e2d2f32aa9 -msgid "The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, and is used to hold whatever text is being displayed in the :class:`Gtk.TextView`. Setting and retrieving the contents is possible with :meth:`Gtk.TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text manipulation is accomplished with *iterators*, represented by a :class:`Gtk.TextIter`. An iterator represents a position between two characters in the text buffer. Iterators are not valid indefinitely; whenever the buffer is modified in a way that affects the contents of the buffer, all outstanding iterators become invalid." -msgstr "" - -#: ../source/textview.txt:96 -# c5d62f599d0949f1b9e2e279c394901c -msgid "Because of this, iterators can't be used to preserve positions across buffer modifications. To preserve a position, use :class:`Gtk.TextMark`. A text buffer contains two built-in marks; an \"insert\" mark (which is the position of the cursor) and the \"selection_bound\" mark. Both of them can be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk.TextBuffer.get_selection_bound`, respectively. By default, the location of a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:`Gtk.TextMark.set_visible`." -msgstr "" - -#: ../source/textview.txt:104 -# db78bf314c154058b3f18f141844ace5 -msgid "Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` returns an iterator pointing past the last valid character. Retrieving the bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer.get_selection_bounds`." -msgstr "" - -#: ../source/textview.txt:111 -# 080f52b8ea674c32a3dbea799570fb2e -msgid "To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which inserts text wherever the cursor may be currently positioned. To remove portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." -msgstr "" - -#: ../source/textview.txt:116 -# eade4584e8014a909ddde719a653d5ef -msgid "In addition, :class:`Gtk.TextIter` can be used to locate textual matches in the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter.backward_search`. The start and end iters are used as the starting point of the search and move forwards/backwards depending on requirements." -msgstr "" - -#: ../source/textview.txt:123 -# 964b43f1ad7d438a9ed5ab643fe3a038 -msgid "TextBuffer Objects" -msgstr "" - -#: ../source/textview.txt:129 -# 4e26cd4de40c4798b0a80a8996d0b31e -msgid "Deletes current contents of this buffer, and inserts *length* characters of *text* instead. If *length* is -1 or omitted, *text* is inserted completely." -msgstr "" - -#: ../source/textview.txt:135 -# 6f71bc7c451a462aa67ebd058f548343 -msgid "Returns the text in the range *start_iter* (included) and *end_iter* (excluded). Excludes undisplayed text." -msgstr "" - -#: ../source/textview.txt:140 -# e977ab463b234eb88dcd6ce775250410 -msgid "Returns the :class:`Gtk.TextMark` that represents the cursor (insertion point)." -msgstr "" - -#: ../source/textview.txt:145 -# 8586018b368d46068fa2b802465e1929 -msgid "Returns the :class:`Gtk.TextMark` that represents the selection bound." -msgstr "" - -#: ../source/textview.txt:149 -# 0258e5fcb43f48fe96f76090dd1d6891 -msgid "Creates a :class:`Gtk.TextMark` at the position of the :class:`Gtk.TextIter` *where*. If *mark_name* is ``None``, the mark is anonymous; otherwise, the mark can be retrieved by name using :meth:`get_mark`. If a mark has left gravity, and text is inserted at the mark's current location, the mark will be moved to the left of the newly-inserted text. If the mark has right gravity (*left_gravity* is ``False``), the mark will end up on the right of newly-inserted text. The standard left-to-right cursor is a mark with right gravity (when you type, the cursor stays on the right side of the text you're typing)." -msgstr "" - -#: ../source/textview.txt:159 -# 3845152af22b4c02afb121cb7d658c16 -msgid "If *left_gravity* is omitted, it defaults to ``False``." -msgstr "" - -#: ../source/textview.txt:163 -# 02a06026c6b44ef182e8513f216bff92 -msgid "Returns the :class:`Gtk.TextMark` named name in this buffer, or ``None`` if no such mark exists in the buffer." -msgstr "" - -#: ../source/textview.txt:168 -# e55880da84644c0a8bdcbe87031e9b85 -msgid "Returns a :class:`Gtk.TextIter` pointing to first position in this buffer." -msgstr "" - -#: ../source/textview.txt:172 -# 90346ebda8ad4de3823cdb32b5f8c26f -msgid "Returns a :class:`Gtk.TextIter` pointing past the last valid character in this buffer." -msgstr "" - -#: ../source/textview.txt:177 -# 17895600d5e74971a3639153b2b1bdb5 -msgid "Returns a tuple of two :class:`Gtk.TextIter` objects pointing to the first character of the selection and to the first character after the selection, respectively. If no text is selected an empty tuple is returned." -msgstr "" - -#: ../source/textview.txt:183 -# b7785ea9f7d64279a4a28940be5fdb8f -msgid "Inserts *length* characters of *text* at position *text_iter*. If *length* is -1 or omitted, *text* is inserted completely." -msgstr "" - -#: ../source/textview.txt:188 -# 0854619e3bc14e07a3500221300fb030 -msgid "Simply calls :meth:`insert`, using the current cursor position as the insertion point." -msgstr "" - -#: ../source/textview.txt:193 -# 30cb808d12a840c6b380b072013b0864 -msgid "Deletes text between *start_iter* and *end_iter*." -msgstr "" - -#: ../source/textview.txt:197 -# 5991559cec58448786fb69919062e148 -msgid "Creates a tag and adds it to the tag table of this buffer." -msgstr "" - -#: ../source/textview.txt:199 -# 08f117f394394fcdb6a5e56ade78e178 -msgid "If *tag_name* is ``None``, the tag is anonymous, otherwise a tag with the same name must not already exist in the tag table of the buffer." -msgstr "" - -#: ../source/textview.txt:202 -# fcc63756be434c5082d811c1319ea097 -msgid "*kwargs* is an arbitrary number of key-value pairs that represent a list properties to set on the tag, as with ``tag.set_property(prop_name, value)``." -msgstr "" - -#: ../source/textview.txt:207 -# 2aa73dddd0d048c7a6006a00aa3d8c43 -msgid "Applies *tag* to the given range." -msgstr "" - -#: ../source/textview.txt:211 -# 844f1a9e62804fb5bcfc46defc5d2ef4 -msgid "Removes all occurrences of *tag* from the given range." -msgstr "" - -#: ../source/textview.txt:215 -# 2277e113a19e4fe087a77dd0bfa2442f -msgid "Removes all tags in the given range." -msgstr "" - -#: ../source/textview.txt:222 -# e6c2b30d0fac4c178a14ca7bdc7b25ab -msgid "Searches forward for *needle*. The search will not continue past the :class:`Gtk.TextIter` *limit*." -msgstr "" - -#: ../source/textview.txt:225 -# aa8269e42ecb4f4ea83e78cdb34e9285 -msgid "*flags* can be set to one of the following, or any combination of it by concatenating them with the bitwise-OR operator ``|``." -msgstr "" - -#: ../source/textview.txt:228 -# 6334d579a55e429bb08ca7e310e0fbb0 -msgid "0: The match must be exact." -msgstr "" - -#: ../source/textview.txt:229 -# 306d2dd358ba46cd946a356709c94d5d -msgid ":attr:`Gtk.TextSearchFlags.VISIBLE_ONLY`: The match may have invisible text interspersed in *needle*. i.e. *needle* will be a possibly-noncontiguous subsequence of the matched range." -msgstr "" - -#: ../source/textview.txt:232 -# c09fa46bdc2547ca8fb27baa1416976f -msgid ":attr:`Gtk.TextSearchFlags.TEXT_ONLY`: The match may have pixbufs or child widgets mixed inside the matched range." -msgstr "" - -#: ../source/textview.txt:234 -# bc3d1e085a574c099e6581733d394d5a -msgid ":attr:`Gtk.TextSearchFlags.CASE_INSENSITIVE`: The text will be matched regardless of what case it is in." -msgstr "" - -#: ../source/textview.txt:237 -# 71b5d80ce7ad4ba9bff1792759f6be2f -msgid "Returns a tupel containing a :class:`Gtk.TextIter` pointing to the start and to the first character after the match. If no match was found, ``None`` is returned." -msgstr "" - -#: ../source/textview.txt:243 -# 41bfa4a9bc224bf78316905854faa05e -msgid "Same as :meth:`forward_search`, but moves backward." -msgstr "" - -#: ../source/textview.txt:250 -# c2184fa23b9e4b7ea037d4df5d101c4a -msgid "Sets the visibility of this mark; the insertion point is normally visible, i.e. you can see it as a vertical bar. Also, the text widget uses a visible mark to indicate where a drop will occur when dragging-and-dropping text. Most other marks are not visible. Marks are not visible by default." -msgstr "" - -#: ../source/textview.txt:256 -# e6d346014a1b4c81b346b33548024031 -msgid "Tags" -msgstr "" - -#: ../source/textview.txt:258 -# 2d6db17c03904804b0d3f5e81a07714e -msgid "Text in a buffer can be marked with tags. A tag is an attribute that can be applied to some range of text. For example, a tag might be called \"bold\" and make the text inside the tag bold. However, the tag concept is more general than that; tags don't have to affect appearance. They can instead affect the behaviour of mouse and key presses, \"lock\" a range of text so the user can't edit it, or countless other things. A tag is represented by a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to any number of text ranges in any number of buffers." -msgstr "" - -#: ../source/textview.txt:267 -# 551e286f9e294c5ea4b6248c74bc3c12 -msgid "Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set of tags that can be used together. Each buffer has one tag table associated with it; only tags from that tag table can be used with the buffer. A single tag table can be shared between multiple buffers, however." -msgstr "" - -#: ../source/textview.txt:272 -# 5e04f294c83a41d7b358321e4a61c1cd -msgid "To specify that some text in the buffer should have specific formatting, you must define a tag to hold that formatting information, and then apply that tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:`Gtk.TextBuffer.apply_tag`::" -msgstr "" - -#: ../source/textview.txt:280 -# 245f3f6cd3f2406c8bea3ae99b5ea9ed -msgid "The following are some of the common styles applied to text:" -msgstr "" - -#: ../source/textview.txt:282 -# 34de08c5dd54474295f6702c72befe66 -msgid "Background colour (\"foreground\" property)" -msgstr "" - -#: ../source/textview.txt:283 -# 870abd259d284ad39f52ea3b9504fc9a -msgid "Foreground colour (\"background\" property)" -msgstr "" - -#: ../source/textview.txt:284 -# 20463f72b3654974b448d356c71f69c6 -msgid "Underline (\"underline\" property)" -msgstr "" - -#: ../source/textview.txt:285 -# 2f0eaa513e854ab4864332897a8340c4 -msgid "Bold (\"weight\" property)" -msgstr "" - -#: ../source/textview.txt:286 -# 5b25726fb5924dc4a63b57de56e1654b -msgid "Italics (\"style\" property)" -msgstr "" - -#: ../source/textview.txt:287 -# a3fa36bb4aaf4c69a30a01b12d1ff0f9 -msgid "Strikethrough (\"strikethrough\" property)" -msgstr "" - -#: ../source/textview.txt:288 -# 95ca6399c1794c45891e6fc1e692d68f -msgid "Justification (\"justification\" property)" -msgstr "" - -#: ../source/textview.txt:289 -# 948f21967d6540409448b4ba856b6998 -msgid "Size (\"size\" and \"size-points\" properties)" -msgstr "" - -#: ../source/textview.txt:290 -# 72040cf89f7e4b1196e2610772398856 -msgid "Text wrapping (\"wrap-mode\" property)" -msgstr "" - -#: ../source/textview.txt:292 -# 23972a4a896a4346b73deffea88021b2 -msgid "You can also delete particular tags later using :meth:`Gtk.TextBuffer.remove_tag` or delete all tags in a given region by calling :meth:`Gtk.TextBuffer.remove_all_tags`." -msgstr "" - -#: ../source/textview.txt:296 -# c8884a58103e466b9c071d144f8c8295 -msgid "Example" -msgstr "" - diff --git a/translations/templates/treeview.pot b/translations/templates/treeview.pot deleted file mode 100644 index 959cc4e..0000000 --- a/translations/templates/treeview.pot +++ /dev/null @@ -1,549 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/treeview.txt:2 -# a46b8650e162436c94c75848caf72a5d -msgid "Tree and List Widgets" -msgstr "" - -#: ../source/treeview.txt:4 -# 6b8173b779a54a41a335143e02095101 -msgid "A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful way of displaying data. They are used in conjunction with a :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and manipulating data in many ways, including:" -msgstr "" - -#: ../source/treeview.txt:9 -# 9a5ca90129854f9b98473aa3e121e2a8 -msgid "Automatically updates when data added, removed or edited" -msgstr "" - -#: ../source/treeview.txt:10 -# 00e7005257dd48be84d2c1875ffaffb3 -msgid "Drag and drop support" -msgstr "" - -#: ../source/treeview.txt:11 -# bf215bf056db475aa60f3d9941effc15 -msgid "Sorting of data" -msgstr "" - -#: ../source/treeview.txt:12 -# 6abb35258eb24a47aba3a59287489939 -msgid "Support embedding widgets such as check boxes, progress bars, etc." -msgstr "" - -#: ../source/treeview.txt:13 -# 37711cd4aed14766b47c845fb77e5537 -msgid "Reorderable and resizable columns" -msgstr "" - -#: ../source/treeview.txt:14 -# e8cd4e8a713a4675b45de52fb0b55fe6 -msgid "Filtering of data" -msgstr "" - -#: ../source/treeview.txt:16 -# 9378892d1b77427c984608579b50a1cd -msgid "With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. It is often difficult for beginner developers to be able to utilize correctly due to the number of methods which are required." -msgstr "" - -#: ../source/treeview.txt:21 -# c3fb4248134547c0a03fa759c1914dbd -msgid "The Model" -msgstr "" - -#: ../source/treeview.txt:22 -# c2ce5b404b934d5b8c26145a442e5cb5 -msgid "Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can be used by more than one :class:`Gtk.TreeView`. For instance, this allows the same underlying data to be displayed and edited in 2 different ways at the same time. Or the 2 Views might display different columns from the same Model data, in the same way that 2 SQL queries (or \"views\") might show different fields from the same database table." -msgstr "" - -#: ../source/treeview.txt:30 -# a3da50154438467d9ee080635483a30b -msgid "Although you can theoretically implement your own Model, you will normally use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model classes. :class:`Gtk.ListStore` contains simple rows of data, and each row has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and each row may have child rows." -msgstr "" - -#: ../source/treeview.txt:36 -# 9c94b8a3040e4e109004f5e6a0827082 -msgid "When constructing a model you have to specify the data types for each column the model holds." -msgstr "" - -#: ../source/treeview.txt:43 -# b1b2b224db0747809218e36dcaec41dc -msgid "This creates a list store with three columns, two string columns, and a float column." -msgstr "" - -#: ../source/treeview.txt:46 -# ed011f43a24e428f8e6d87df3145af75 -msgid "Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:`Gtk.TreeStore.append`, depending upon which sort of model was created." -msgstr "" - -#: ../source/treeview.txt:53 -# b8d97b140ad54f4e87d38435fd200fc1 -msgid "Both methods return a :class:`Gtk.TreeIter` instance, which points to the location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` by calling :meth:`Gtk.TreeModel.get_iter`." -msgstr "" - -#: ../source/treeview.txt:57 -# e6ecf593f4104efa9cde44a113f6bbb8 -msgid "Once, data has been inserted you can retrieve or modify data using the tree iter and column index." -msgstr "" - -#: ../source/treeview.txt:65 -# 7af71b5aea0747299438bb4073b850ee -msgid "As with Python's built-in :class:`list` object you can use :func:`len` to get the number of rows and use slices to retrieve or set values." -msgstr "" - -#: ../source/treeview.txt:79 -# 1cb5f476403c47ca8633babc1fc833e2 -msgid "Iterating over all rows of a tree model is very simple as well." -msgstr "" - -#: ../source/treeview.txt:87 -# a6df3e9156fa4f7ba8771c5d5a0706e7 -msgid "Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will only iterate over the rows of the top level, but not the children of the nodes. To iterate over all rows and its children, use the ``print_tree_store`` function." -msgstr "" - -#: ../source/treeview.txt:105 -# 582f5bb9df594e77b443754966d1a331 -msgid "Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-like method mentioned above, it is also possible to either use :class:`Gtk.TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular row in a tree model. One can convert a path to an iterator by calling :meth:`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, i.e. nodes do not have any child nodes, a path is essentially the index of the row you want to access." -msgstr "" - -#: ../source/treeview.txt:122 -# 535448455eb743eb926dd86450b63c0f -msgid "In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a string. The string form is a list of numbers separated by a colon. Each number refers to the offset at that level. Thus, the path \"0\" refers to the root node and the path \"2:4\" refers to the fifth child of the third node." -msgstr "" - -#: ../source/treeview.txt:136 -# 34524d91de51499381413bd7c20c9395 -msgid "TreeModel Objects" -msgstr "" - -#: ../source/treeview.txt:142 -# cf936ca6232a4000bf1ac049e6658729 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to *path*." -msgstr "" - -#: ../source/treeview.txt:144 -# 56a03bf2a2394505a9676ff3f3c4f249 -msgid "*path* is expected to be a colon separated list of numbers or a tuple. For example, the string \"10:4:0\" or tuple (10, 4, 0) would create a path of depth 3 pointing to the 11th child of the root node, the 5th child of that 11th child, and the 1st child of that 5th child." -msgstr "" - -#: ../source/treeview.txt:151 -# cd99155b430f4eaf9ffe9393de1a9cf9 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing the node following *treeiter* at the current level or ``None`` if there is no next iter." -msgstr "" - -#: ../source/treeview.txt:156 -# eab522d699744871a795d457dca41a4b -msgid "Returns ``True`` if *treeiter* has children, ``False`` otherwise." -msgstr "" - -#: ../source/treeview.txt:160 -# feb7e01d9a1040689c8035ebcca5267b -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to the first child of *treeiter* or ``None`` if *treeiter* has no children." -msgstr "" - -#: ../source/treeview.txt:165 -# 5bbad59d6ecc4cb6bbb37878fbabe128 -msgid "Returns a :class:`Gtk.TreeIter` instance pointing to the first iterator in the tree (the one at the path \"0\") or ``None`` if the tree is empty." -msgstr "" - -#: ../source/treeview.txt:169 -# e710b6a30a20458a89dd3b46e125a27b -msgid "ListStore Objects" -msgstr "" - -#: ../source/treeview.txt:173 -# 227895727dbb4f7a978abe780a01cea3 -msgid "Creates a new :class:`Gtk.ListStore` with the specified column data types. Each row added to the list store will have an item in each column." -msgstr "" - -#: ../source/treeview.txt:176 -# 5b14f8a849344d2389d28cff0b22cecb -msgid "Supported data types are the standard Python ones and GTK+ types:" -msgstr "" - -#: ../source/treeview.txt:178 -# 5da245f1fca84356ab7cb7c9aa9aa5de -msgid "str, int, float, long, bool, object" -msgstr "" - -#: ../source/treeview.txt:179 -# 6d2f99eca4e74a30aec3e7ceb25d00ce -msgid "GObject.GObject" -msgstr "" - -#: ../source/treeview.txt:183 -# 007c0fe9797d4d11970bc0cd21d23ecb -msgid "Appends a new row to this list store." -msgstr "" - -#: ../source/treeview.txt:185 -#: ../source/treeview.txt:203 -# abab504d3c9445959c8a97d45ca24b64 -# 9df7a775fae7468ab96ddd06ce82f4c9 -msgid "*row* is a list of values for each column, i.e. ``len(store) == len(row)``. If *row* is omitted or ``None``, an empty row will be appended." -msgstr "" - -#: ../source/treeview.txt:188 -#: ../source/treeview.txt:206 -# 3c8978029d05420d8ed87a65802430a2 -# 6508afc8a605468ba2c0d77c434fb2aa -msgid "Returns a :class:`Gtk.TreeIter` pointing to the appended row." -msgstr "" - -#: ../source/treeview.txt:191 -# 91cad346773747d7be619c9130b38854 -msgid "TreeStore Objects" -msgstr "" - -#: ../source/treeview.txt:195 -# 11db3516355e43419d268f0c0bf744b0 -msgid "Arguments are the same as for the :class:`Gtk.ListStore` constructor." -msgstr "" - -#: ../source/treeview.txt:199 -# eb9704c518844f6b84fb3750a218a383 -msgid "Appends a new row to this tree store. *parent* must be a valid :class:`Gtk.TreeIter`. If *parent* is not ``None``, then it will append the new row after the last child of *parent*, otherwise it will append a row to the top level." -msgstr "" - -#: ../source/treeview.txt:209 -# 50906427654e4eada0d55357c8bc6d5c -msgid "TreePath Objects" -msgstr "" - -#: ../source/treeview.txt:213 -# 4f5d00154f2d4c1ea7e6f2668e33426b -msgid "Construct a :class:`Gtk.TreePath` pointing to the node specified by *path*." -msgstr "" - -#: ../source/treeview.txt:215 -# 09fa218237f94be7bf2f15d3e1acbac7 -msgid "If *path* is a string it is expected to be a colon separated list of numbers. For example, the string \"10:4:0\" would create a path of depth 3 pointing to the 11th child of the root node, the 5th child of that 11th child, and the 1st child of that 5th child." -msgstr "" - -#: ../source/treeview.txt:220 -# 41de95a054844382a24c8a3354d089d1 -msgid "If *path* is a list or a tuple it is expected to contain the indexes of the nodes. Referring to the above mentioned example, the expression ``Gtk.TreePath(\"10:4:0\")`` is equivalent to ``Gtk.TreePath([10, 4, 3])``." -msgstr "" - -#: ../source/treeview.txt:225 -# 14b79a4f7fd345559bd8e18e9ba77888 -msgid "The View" -msgstr "" - -#: ../source/treeview.txt:226 -# 3f858d0d36934738b58bd74d7ccb14d2 -msgid "While there are several different models to choose from, there is only one view widget to deal with. It works with either the list or the tree store. Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :class:`Gtk.TreeModel` to know where to retrieve its data from, either by passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:`Gtk.TreeView.set_model`." -msgstr "" - -#: ../source/treeview.txt:237 -# 16d04097f65d430abac4e44198f1e3b3 -msgid "Once the :class:`Gtk.TreeView` widget has a model, it will need to know how to display the model. It does this with columns and cell renderers." -msgstr "" - -#: ../source/treeview.txt:240 -# 6a3eccaf479b4134b7deffefcdf927fa -msgid "Cell renderers are used to draw the data in the tree model in a way. There are a number of cell renderers that come with GTK+, for instance :class:`Gtk.CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk.CellRendererToggle`. In addition, it is relatively easy to write a custom renderer yourself." -msgstr "" - -#: ../source/treeview.txt:246 -# a3e3b816e5314f8fa429f8e97fea0820 -msgid "A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses to organize the vertical columns in the tree view. It needs to know the name of the column to label for the user, what type of cell renderer to use, and which piece of data to retrieve from the model for a given row." -msgstr "" - -#: ../source/treeview.txt:257 -# 2f8d4100ee8f4f20a3b20b3c93e514de -msgid "To render more than one model column in a view column, you need to create a :class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn.pack_start` to add the model columns to it." -msgstr "" - -#: ../source/treeview.txt:277 -# 37054c7899bc4207a89ff1e7c1d92ae1 -msgid "TreeView Objects" -msgstr "" - -#: ../source/treeview.txt:281 -# eb950476e567441a8fa242bed6dae00b -msgid "Creates a new :class:`Gtk.TreeView` widget with the model initialized to *treemodel*. *treemodel* must be a class implementing :class:`Gtk.TreeModel`, such as :class:`Gtk.ListStore` or :class:`Gtk.TreeStore`. If *treemodel* is omitted or ``None``, the model remains unset and you have to call :meth:`set_model` later." -msgstr "" - -#: ../source/treeview.txt:289 -# 38efb20f14464f43b1f297bdc96d5e40 -msgid "Sets the model for this tree view. If this tree view already has a model set, it will remove it before setting the new model. If *model* is ``None``, then it will unset the old model." -msgstr "" - -#: ../source/treeview.txt:295 -# 08f0b79e2c0f4b2ba3847051ffc28e66 -msgid "Returns the model this tree view is based on. Returns ``None`` if the model is unset." -msgstr "" - -#: ../source/treeview.txt:300 -# 87eb9e4c130d4a38bd13392e5ef87d13 -msgid "Appends *column* to the list of columns." -msgstr "" - -#: ../source/treeview.txt:304 -# 694ed4e544ea43bf9f403510a40475e3 -msgid "Gets the :class:`Gtk.TreeSelection` associated with this tree view." -msgstr "" - -#: ../source/treeview.txt:308 -# ec59ecf5c2a74586b00fcf48ca608565 -msgid "Arguments are the same as :meth:`Gtk.Widget.drag_source_set`" -msgstr "" - -#: ../source/treeview.txt:312 -# 9c96edef430b41519cd1b2c1e74fbbb2 -msgid "Arguments are the same as :meth:`Gtk.Widget.drag_dest_set`" -msgstr "" - -#: ../source/treeview.txt:315 -# 575ef93ea23442b5b2806dc3dd99bfbe -msgid "TreeViewColumn Objects" -msgstr "" - -#: ../source/treeview.txt:319 -# 8242e16163434d58911d41ae166ff543 -msgid "Creates a new :class:`Gtk.TreeViewColumn`." -msgstr "" - -#: ../source/treeview.txt:321 -# 6d355bf21be64d0bb1400895381c9c27 -msgid "*renderer* is expected to be a :class:`Gtk.CellRenderer` instance, and *kwargs* key-value pairs specifying the default values of *renderer*'s properties. This is equivalent to calling :meth:`pack_start` and :meth:`add_attribute` for each key-value pair in *kwargs*." -msgstr "" - -#: ../source/treeview.txt:326 -# 0796ee97ae924674b8ecd77694058dc8 -msgid "If *renderer* is omitted, you have to call :meth:`pack_start` or :meth:`pack_end` yourself." -msgstr "" - -#: ../source/treeview.txt:331 -# 907196d46e314e72b8ad8ea74b2934b9 -msgid "Adds an attribute mapping to this column." -msgstr "" - -#: ../source/treeview.txt:333 -# 77eaec5425f94cf09d5bc784e6f13259 -msgid "*attribute* is the parameter on *renderer* to be set from the value. So for example if column 2 of the model contains strings, you could have the \"text\" attribute of a :class:`Gtk.CellRendererText` get its values from column 2." -msgstr "" - -#: ../source/treeview.txt:340 -# 001c83c8b3334681a345034853af34c7 -msgid "Packs the *renderer* into the beginning of this column. If expand is ``False``, then the *renderer* is allocated no more space than it needs. Any unused space is divided evenly between cells for which expand is ``True``." -msgstr "" - -#: ../source/treeview.txt:346 -# e1d6e138b6c44cc29eecfda38c0b607d -msgid "Adds the *renderer* to end of this column. If expand is ``False``, then the *renderer* is allocated no more space than it needs. Any unused space is divided evenly between cells for which expand is ``True``." -msgstr "" - -#: ../source/treeview.txt:352 -# 7bb972b5534c4a749099301743782beb -msgid "Sets the column of the model by which this column (of the view) should be sorted. This also makes the columnd header clickable." -msgstr "" - -#: ../source/treeview.txt:357 -# c9841ad014af49389cefdec31efe7672 -msgid "Gets the column id set by :meth:`Gtk.TreeViewColumn.set_sort_column_id`" -msgstr "" - -#: ../source/treeview.txt:361 -# 3a5b415fee094f2dae71ee95584bf607 -msgid "Sets whether a little arrow is displayed in the column header to in" -msgstr "" - -#: ../source/treeview.txt:363 -# 1582329c29af4714b3ec2404cdc628a1 -msgid "*setting* can either be ``True`` (indicator is shown) or ``False``" -msgstr "" - -#: ../source/treeview.txt:367 -# eaaabb2b3d8d44cbb552049895d6b6c7 -msgid "Gets the value set by :meth:`Gtk.TreeViewColumn.set_sort_indicator`" -msgstr "" - -#: ../source/treeview.txt:371 -# 6f132974d51649a38518dcbe6a60a760 -msgid "Changes the order by which the column is sorted." -msgstr "" - -#: ../source/treeview.txt:373 -#: ../source/treeview.txt:532 -# 07300d77592441eba63b0d6e6d61d879 -# ce2e2d27b71046978d0df7541508898f -msgid "*order* can either be ``Gtk.SortType.ASCENDING`` or ``Gtk.SortType.DESCENDING``." -msgstr "" - -#: ../source/treeview.txt:377 -# 64036e767e614f8fa79d1a8bca0d3900 -msgid "Gets the sort order set by :meth:`Gtk.TreeViewColumn.set_sort_order`" -msgstr "" - -#: ../source/treeview.txt:380 -# 1dc1f10b5a434225b0e3fa6ebaa067ca -msgid "The Selection" -msgstr "" - -#: ../source/treeview.txt:381 -# 4e8b33bff5584efaacf6f9bea786701e -msgid "Most applications will need to not only deal with displaying data, but also receiving input events from users. To do this, simply get a reference to a selection object and connect to the \"changed\" signal." -msgstr "" - -#: ../source/treeview.txt:390 -# cd008e88b2934bb5b044dd8cfb971313 -msgid "Then to retrieve data for the row selected:" -msgstr "" - -#: ../source/treeview.txt:399 -# 9c2c060c2e684bd0aae12d9629b3e9f8 -msgid "You can control what selections are allowed by calling :meth:`Gtk.TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows` instead." -msgstr "" - -#: ../source/treeview.txt:407 -# 77a2b454b25a440f86b90f05dde27eec -msgid "TreeSelection Objects" -msgstr "" - -#: ../source/treeview.txt:413 -# 240fac4ea68249dcad2ce5f1a2141fb7 -msgid "Where type is one of" -msgstr "" - -#: ../source/treeview.txt:415 -# 92fdd7f16d9d4ee2b1b5b3719c351f24 -msgid ":attr:`Gtk.SelectionMode.NONE`: No selection is possible" -msgstr "" - -#: ../source/treeview.txt:416 -# e299c2b4abff45bf87c0074118f41cb5 -msgid ":attr:`Gtk.SelectionMode.SINGLE`: Zero or one element may be selected" -msgstr "" - -#: ../source/treeview.txt:417 -# 7000bf5770224d0884bf15c8eb89bd36 -msgid ":attr:`Gtk.SelectionMode.BROWSE`: Exactly one element is selected. In some circumstances, such as initially or during a search operation, it's possible for no element to be selected. What is really enforced is that the user can't deselect a currently selected element except by selecting another element." -msgstr "" - -#: ../source/treeview.txt:422 -# ce6a6caf4c044b0f9664e10427b1c90c -msgid ":attr:`Gtk.SelectionMode.MULTIPLE`: Any number of elements may be selected. Clicks toggle the state of an item. Any number of elements may be selected. The Ctrl key may be used to enlarge the selection, and Shift key to select between the focus and the child pointed to. Some widgets may also allow Click-drag to select a range of elements." -msgstr "" - -#: ../source/treeview.txt:430 -# e0700e9a95e24c28ac0582c9bfb28c5f -msgid "Returns a tuple ``(model, treeiter)``, where *model* is the current model and *treeiter* a :class:`Gtk.TreeIter` pointing to the currently selected row. *treeiter* is ``None`` if no rows are selected." -msgstr "" - -#: ../source/treeview.txt:434 -# 61504d9e4aa94b79af5a81a63f9d9598 -msgid "This function will not work if the mode of this selection is :attr:`Gtk.SelectionMode.MULTIPLE`." -msgstr "" - -#: ../source/treeview.txt:439 -# 4cc49c7d4a44428f9db030ee50d880db -msgid "Returns a list of :class:`Gtk.TreePath` instances of all selected rows." -msgstr "" - -#: ../source/treeview.txt:442 -# 9d665f1ae7b04b858ee0546fd9c5787b -msgid "Sorting" -msgstr "" - -#: ../source/treeview.txt:443 -# 2f74d49e07214bc1976912947b552fb9 -msgid "Sorting is an important feature for tree views and is supported by the standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), which implement the :class:`Gtk.TreeSortable` interface." -msgstr "" - -#: ../source/treeview.txt:446 -# 850cf2b8760949b780fc9f1116a8870a -msgid "Sorting by clicking on columns" -msgstr "" - -#: ../source/treeview.txt:447 -# 8860bab21c8544c5a3de5c182fd55136 -msgid "A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be sorted by clicking on its header." -msgstr "" - -#: ../source/treeview.txt:450 -# af6d6e35759d4dd18648ec7171c16a8a -msgid "First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as a model." -msgstr "" - -#: ../source/treeview.txt:469 -# 659a444f58904f23acec1d73cfac327a -msgid "The next step is to enable sorting. Note that the *column_id* (``0`` in the example) refers to the column of the model and **not** to the TreeView's column." -msgstr "" - -#: ../source/treeview.txt:476 -# 30826f51aa5248f594ea8fe90d774469 -msgid "Setting a custom sort function" -msgstr "" - -#: ../source/treeview.txt:477 -# 0589d23f2d134e04acb41c522c02b50d -msgid "It is also possible to set a custom comparison function in order to change the sorting behaviour. As an example we will create a comparison function that sorts case-sensitive. In the example above the sorted list looked like::" -msgstr "" - -#: ../source/treeview.txt:490 -# 28864ec91b994a7c9f87268beb400c8e -msgid "The case-sensitive sorted list will look like::" -msgstr "" - -#: ../source/treeview.txt:501 -# a2b7c178389b4bf495059d7a5fd79b2f -msgid "First of all a comparison function is needed. This function gets two rows and has to return a negative integer if the first one should come before the second one, zero if they are equal and a positive integer if the second one should come before the second one." -msgstr "" - -#: ../source/treeview.txt:517 -# cb7c18bc12754968898b88ccaeea770b -msgid "Then the sort function has to be set by :meth:`Gtk.TreeSortable.set_sort_func`." -msgstr "" - -#: ../source/treeview.txt:524 -# abf6690dbeb64e9f86865db4d807f9a3 -msgid "TreeSortable objects" -msgstr "" - -#: ../source/treeview.txt:530 -# 92e2370f748746559c82e88289858046 -msgid "Sets the current sort column to *sort_column_id*." -msgstr "" - -#: ../source/treeview.txt:536 -# 3a8c8cd311b24f2dbe3556c69d27b952 -msgid "Returns a tuple consisting of the current sort column and order." -msgstr "" - -#: ../source/treeview.txt:540 -# 0dcd759f1d5d4af297ce69ae54b95762 -msgid "Sets the comparison function used when sorting by the colum *sort_column_id*." -msgstr "" - -#: ../source/treeview.txt:542 -# 2273ece60bbc4cbba0aeabc030e2ea30 -msgid "*user_data* gets passed to *sort_func*." -msgstr "" - -#: ../source/treeview.txt:544 -# 177fa357a2bf4df5a815b6d63495d784 -msgid "*sort_func* is a function with the signature ``sort_func(model, iter1, iter2, user_data)`` and should return a negative integer if *iter1* sorts before *iter2*, zero if they are equal and a positive integer if *iter2* sorts before *iter1*." -msgstr "" - -#: ../source/treeview.txt:550 -# 8d4235c376ab41cfb5171c3e7716a69c -msgid "See :meth:`Gtk.TreeSortable.set_sort_func`. This sets the comparison function that is used when sorting by the default sort column" -msgstr "" - diff --git a/translations/templates/unicode.pot b/translations/templates/unicode.pot deleted file mode 100644 index f5227ad..0000000 --- a/translations/templates/unicode.pot +++ /dev/null @@ -1,155 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../source/unicode.txt:2 -# 9809cf7615bd45c0bb645aa9106a56d7 -msgid "How to Deal With Strings" -msgstr "" - -#: ../source/unicode.txt:4 -# f2d16386846a46e98ffa00253553da47 -msgid "This section explains how strings are represented in Python 2.x, Python 3.x and GTK+ and discusses common errors that arise when working with strings." -msgstr "" - -#: ../source/unicode.txt:8 -# e2dede016a10489193f6d69bd4c25699 -msgid "Definitions" -msgstr "" - -#: ../source/unicode.txt:9 -# 2691478223384e71a5aaec49e652d766 -msgid "Conceptionally, a string is a list of characters such as 'A', 'B', 'C' or 'É'. **Characters** are abstract representations and their meaning depends on the language and context they are used in. The Unicode standard describes how characters are represented by **code points**. For example the characters above are represented with the code points U+0041, U+0042, U+0043, and U+00C9, respectively. Basically, code points are numbers in the range from 0 to 0x10FFFF." -msgstr "" - -#: ../source/unicode.txt:17 -# 2d23c5309caf4de082b848a5789af984 -msgid "As mentioned earlier, the representation of a string as a list of code points is abstract. In order to convert this abstract representation into a sequence of bytes the Unicode string must be **encoded**. The simplest from of encoding is ASCII and is performed as follows:" -msgstr "" - -#: ../source/unicode.txt:22 -# 0a8f2e94bc5a4dd78ad456a93281a3b2 -msgid "If the code point is < 128, each byte is the same as the value of the code point." -msgstr "" - -#: ../source/unicode.txt:25 -# 16334e13413d45e7a7c93a1bab90f208 -msgid "If the code point is 128 or greater, the Unicode string can't be represented in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in this case.)" -msgstr "" - -#: ../source/unicode.txt:29 -# 7bfc5ae72ce44caba7c1bfe75b1b9d01 -msgid "Although ASCII encoding is simple to apply it can only encode for 128 different characters which is hardly enough. One of the most commonly used encodings that addresses this problem is UTF-8 (it can handle any Unicode code point). UTF stands for \"Unicode Transformation Format\", and the '8' means that 8-bit numbers are used in the encoding." -msgstr "" - -#: ../source/unicode.txt:37 -# cdc5123217114ec781dd2410678b1c34 -msgid "Python 2" -msgstr "" - -#: ../source/unicode.txt:40 -# e03bd35515c94783b753502860d60aa7 -msgid "Python 2.x’s Unicode Support" -msgstr "" - -#: ../source/unicode.txt:41 -# b124d2e0ad814b1fbaab543f33a7bbfe -msgid "Python 2 comes with two different kinds of objects that can be used to represent strings, :class:`str` and :class:`unicode`. Instances of the latter are used to express Unicode strings, whereas instances of the :class:`str` type are byte representations (the encoded string). Under the hood, Python represents Unicode strings as either 16- or 32-bit integers, depending on how the Python interpreter was compiled. Unicode strings can be converted to 8-bit strings with :meth:`unicode.encode`::" -msgstr "" - -#: ../source/unicode.txt:58 -# bd13eea2fa0741e9876db7711ffe7431 -msgid "Python’s 8-bit strings have a :meth:`str.decode` method that interprets the string using the given encoding::" -msgstr "" - -#: ../source/unicode.txt:68 -# 57feae3870084f8d9c5e8486dcc7204d -msgid "Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" -msgstr "" - -#: ../source/unicode.txt:84 -#: ../source/unicode.txt:146 -# 8d01bbc1bda34388a8aa32ae4841087c -# aa539bf22ae04daeaf1e7ed3dfdcb2ef -msgid "Unicode in GTK+" -msgstr "" - -#: ../source/unicode.txt:85 -# 61c4e37a1e054280b39513c0141f6466 -msgid "GTK+ uses UTF-8 encoded strings for all text. This means that if you call a method that returns a string you will always obtain an instance of the :class:`str` type. The same applies to methods that expect one or more strings as parameter, they must be UTF-8 encoded. However, for convenience PyGObject will automatically convert any :class:`unicode` instance to :class:`str` if supplied as argument::" -msgstr "" - -#: ../source/unicode.txt:102 -# 8da4c72b23904e3f9a0681d1fcb4cf42 -msgid "Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` will always return a :class:`str` instance. Accordingly, ``txt`` and ``unicode_string`` are *not* equal." -msgstr "" - -#: ../source/unicode.txt:107 -# e5cf7d82ce0a4694b7e79dcc11570f25 -msgid "This is especially important if you want to internationalize your program using `gettext `_. You have to make sure that gettext will return UTF-8 encoded 8-bit strings for all languages. In general it is recommended to not use :class:`unicode` objects in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects since GTK+ does not fully integrate with :class:`unicode` objects. Otherwise, you would have to decode the return values to Unicode strings each time you call a GTK+ method::" -msgstr "" - -#: ../source/unicode.txt:120 -# f699228e4f724d468ba137aa95cce2ac -msgid "Python 3" -msgstr "" - -#: ../source/unicode.txt:123 -# 36dea2d034ba47739fcbc70159e1f507 -msgid "Python 3.x's Unicode support" -msgstr "" - -#: ../source/unicode.txt:124 -# 0089b245210d4def97f7a89941d64378 -msgid "Since Python 3.0, all strings are stored as Unicode in an instance of the :class:`str` type. *Encoded* strings on the other hand are represented as binary data in the form of instances of the :class:`bytes` type. Conceptionally, :class:`str` refers to *text*, whereas :class:`bytes` refers to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." -msgstr "" - -#: ../source/unicode.txt:131 -# b6602283d69145acb1362b240f1f2af8 -msgid "In addition, it is no longer possible to mix Unicode strings with encoded strings, because it will result in a :exc:`TypeError`::" -msgstr "" - -#: ../source/unicode.txt:147 -# 3cddec65eec74c06939f42f7c2e98c40 -msgid "As a consequence, things are much cleaner and consistent with Python 3.x, because PyGObject will automatically encode/decode to/from UTF-8 if you pass a string to a method or a method returns a string. Strings, or *text*, will always be represented as instances of :class:`str` only::" -msgstr "" - -#: ../source/unicode.txt:163 -# 2645c75cc87e4a26a04073f8e94e647d -msgid "References" -msgstr "" - -#: ../source/unicode.txt:164 -# d5aa2e7b68b744b98226b7f57d0b52cf -msgid "`What's new in Python 3.0 `_ describes the new concepts that clearly distinguish between text and data." -msgstr "" - -#: ../source/unicode.txt:167 -# b5f5c4fad9f8498e9a48a844d936684c -msgid "The `Unicode HOWTO `_ discusses Python 2.x’s support for Unicode, and explains various problems that people commonly encounter when trying to work with Unicode." -msgstr "" - -#: ../source/unicode.txt:171 -# 8de0ed991ab2410f8941b1bd2753fa72 -msgid "The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." -msgstr "" - -#: ../source/unicode.txt:174 -# 9ac015d7fa8543e4967271f447b3606d -msgid "`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 encoding." -msgstr "" - From 38341e72bac266fe6f58c65491d0b9a59e1a2471 Mon Sep 17 00:00:00 2001 From: Luis Menina Date: Fri, 17 Nov 2017 16:00:48 +0100 Subject: [PATCH 072/209] Use destroy signal instead of delete-event The "delete-event" is meant to intercept the user trying to close the window, for example to show a save popup. The real signal called when the window is destroyed, is, well, "destroy". Fixes #113 --- examples/builder_example.glade | 2 +- examples/builder_example.py | 4 ++-- examples/button_example.py | 2 +- examples/cellrendereraccel_example.py | 2 +- examples/cellrenderercombo_example.py | 2 +- examples/cellrendererpixbuf_example.py | 2 +- examples/cellrendererprogress_example.py | 2 +- examples/cellrendererspin_example.py | 2 +- examples/cellrenderertext_example.py | 2 +- examples/cellrenderertoggle_example.py | 2 +- examples/checkbutton_example.py | 2 +- examples/clipboard_example.py | 2 +- examples/combobox_example.py | 2 +- examples/dialog_example.py | 2 +- examples/drag_and_drop_example.py | 2 +- examples/entry_example.py | 2 +- examples/extended_example.py | 2 +- examples/filechooserdialog_example.py | 2 +- examples/iconview_example.py | 2 +- examples/label_example.py | 2 +- examples/layout_box_example.py | 2 +- examples/layout_flowbox_example.py | 2 +- examples/layout_grid_example.py | 2 +- examples/layout_headerbar_example.py | 2 +- examples/layout_listbox_example.py | 2 +- examples/layout_stack_example.py | 2 +- examples/layout_table_example.py | 2 +- examples/linkbutton_example.py | 2 +- examples/menu_example.py | 2 +- examples/messagedialog_example.py | 2 +- examples/notebook_plain_example.py | 2 +- examples/progressbar_example.py | 2 +- examples/radiobutton_example.py | 2 +- examples/simple_example.py | 2 +- examples/spinbutton_example.py | 2 +- examples/spinner_example.py | 2 +- examples/switch_example.py | 2 +- examples/textview_example.py | 2 +- examples/togglebutton_example.py | 2 +- examples/treeview_filter_example.py | 2 +- source/basics.txt | 10 +++++----- source/builder.txt | 6 +++--- 42 files changed, 49 insertions(+), 49 deletions(-) diff --git a/examples/builder_example.glade b/examples/builder_example.glade index 94c2e73..0c977f7 100644 --- a/examples/builder_example.glade +++ b/examples/builder_example.glade @@ -3,7 +3,7 @@ False - + button diff --git a/examples/builder_example.py b/examples/builder_example.py index 893320e..1102822 100644 --- a/examples/builder_example.py +++ b/examples/builder_example.py @@ -3,8 +3,8 @@ from gi.repository import Gtk class Handler: - def onDeleteWindow(self, *args): - Gtk.main_quit(*args) + def onDestroy(self, *args): + Gtk.main_quit() def onButtonPressed(self, button): print("Hello World!") diff --git a/examples/button_example.py b/examples/button_example.py index 37abf22..1b26e5b 100644 --- a/examples/button_example.py +++ b/examples/button_example.py @@ -34,6 +34,6 @@ def on_close_clicked(self, button): Gtk.main_quit() win = ButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrendereraccel_example.py b/examples/cellrendereraccel_example.py index 250ea86..dcd8c30 100644 --- a/examples/cellrendereraccel_example.py +++ b/examples/cellrendereraccel_example.py @@ -41,6 +41,6 @@ def on_accel_cleared(self, widget, path): self.liststore[path][1] = None win = CellRendererAccelWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrenderercombo_example.py b/examples/cellrenderercombo_example.py index 2abd421..f617258 100644 --- a/examples/cellrenderercombo_example.py +++ b/examples/cellrenderercombo_example.py @@ -42,6 +42,6 @@ def on_combo_changed(self, widget, path, text): self.liststore_hardware[path][1] = text win = CellRendererComboWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrendererpixbuf_example.py b/examples/cellrendererpixbuf_example.py index 49afa84..bafc9a1 100644 --- a/examples/cellrendererpixbuf_example.py +++ b/examples/cellrendererpixbuf_example.py @@ -28,6 +28,6 @@ def __init__(self): self.add(treeview) win = CellRendererPixbufWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrendererprogress_example.py b/examples/cellrendererprogress_example.py index 3efe8cb..12cb244 100644 --- a/examples/cellrendererprogress_example.py +++ b/examples/cellrendererprogress_example.py @@ -55,6 +55,6 @@ def reset_model(self): self.current_iter = self.liststore.get_iter_first() win = CellRendererProgressWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrendererspin_example.py b/examples/cellrendererspin_example.py index e8be729..e1cf52b 100644 --- a/examples/cellrendererspin_example.py +++ b/examples/cellrendererspin_example.py @@ -36,6 +36,6 @@ def on_amount_edited(self, widget, path, value): self.liststore[path][1] = int(value) win = CellRendererSpinWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrenderertext_example.py b/examples/cellrenderertext_example.py index 72c27c0..910c193 100644 --- a/examples/cellrenderertext_example.py +++ b/examples/cellrenderertext_example.py @@ -35,6 +35,6 @@ def text_edited(self, widget, path, text): self.liststore[path][1] = text win = CellRendererTextWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/cellrenderertoggle_example.py b/examples/cellrenderertoggle_example.py index e89c386..acf46e6 100644 --- a/examples/cellrenderertoggle_example.py +++ b/examples/cellrenderertoggle_example.py @@ -44,6 +44,6 @@ def on_cell_radio_toggled(self, widget, path): row[2] = (row.path == selected_path) win = CellRendererToggleWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/checkbutton_example.py b/examples/checkbutton_example.py index dedcb1a..413f874 100644 --- a/examples/checkbutton_example.py +++ b/examples/checkbutton_example.py @@ -28,6 +28,6 @@ def on_button_toggled(self, button, name): print("Button", name, "was turned", state) win = CheckButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index 4d6bde5..1873442 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -55,6 +55,6 @@ def paste_image(self, widget): win = ClipboardWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/combobox_example.py b/examples/combobox_example.py index e338b0a..0cf7bc4 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -73,6 +73,6 @@ def on_currency_combo_changed(self, combo): print("Selected: currency=%s" % text) win = ComboBoxWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/dialog_example.py b/examples/dialog_example.py index 7a449e1..970dd39 100644 --- a/examples/dialog_example.py +++ b/examples/dialog_example.py @@ -41,6 +41,6 @@ def on_button_clicked(self, widget): dialog.destroy() win = DialogWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index fd350fd..8cd5155 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -108,6 +108,6 @@ def on_drag_data_received(self, widget, drag_context, x,y, data,info, time): height)) win = DragDropWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/entry_example.py b/examples/entry_example.py index 9c6f520..4bc22c7 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -72,6 +72,6 @@ def on_icon_toggled(self, button): icon_name) win = EntryWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/extended_example.py b/examples/extended_example.py index 2657cd0..528b93f 100644 --- a/examples/extended_example.py +++ b/examples/extended_example.py @@ -15,6 +15,6 @@ def on_button_clicked(self, widget): print("Hello World") win = MyWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/filechooserdialog_example.py b/examples/filechooserdialog_example.py index a6e1a86..951a8f1 100644 --- a/examples/filechooserdialog_example.py +++ b/examples/filechooserdialog_example.py @@ -68,6 +68,6 @@ def on_folder_clicked(self, widget): dialog.destroy() win = FileChooserWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/iconview_example.py b/examples/iconview_example.py index 8744011..cf1c17e 100644 --- a/examples/iconview_example.py +++ b/examples/iconview_example.py @@ -24,6 +24,6 @@ def __init__(self): self.add(iconview) win = IconViewWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/label_example.py b/examples/label_example.py index a0dd87c..1170ecd 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -74,6 +74,6 @@ def __init__(self): self.add(hbox) window = LabelWindow() -window.connect("delete-event", Gtk.main_quit) +window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main() diff --git a/examples/layout_box_example.py b/examples/layout_box_example.py index 1d0236e..fa55de8 100644 --- a/examples/layout_box_example.py +++ b/examples/layout_box_example.py @@ -25,6 +25,6 @@ def on_button2_clicked(self, widget): print("Goodbye") win = MyWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 1e81899..da81108 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -115,6 +115,6 @@ def create_flowbox(self, flowbox): win = FlowBoxWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_grid_example.py b/examples/layout_grid_example.py index 6ce31ac..655bd95 100644 --- a/examples/layout_grid_example.py +++ b/examples/layout_grid_example.py @@ -25,6 +25,6 @@ def __init__(self): grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1) win = GridWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 05731c8..167187b 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -36,6 +36,6 @@ def __init__(self): self.add(Gtk.TextView()) win = HeaderBarWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index 37bf926..8a107b6 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -81,6 +81,6 @@ def filter_func(row, data, notify_destroy): listbox_2.show_all() win = ListBoxWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_stack_example.py b/examples/layout_stack_example.py index f64643b..a1ba0c1 100644 --- a/examples/layout_stack_example.py +++ b/examples/layout_stack_example.py @@ -28,6 +28,6 @@ def __init__(self): vbox.pack_start(stack, True, True, 0) win = StackWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/layout_table_example.py b/examples/layout_table_example.py index 05642e4..b4d11b7 100644 --- a/examples/layout_table_example.py +++ b/examples/layout_table_example.py @@ -25,6 +25,6 @@ def __init__(self): table.attach(button6, 2, 3, 2, 3) win = TableWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/linkbutton_example.py b/examples/linkbutton_example.py index 8132145..b64708e 100644 --- a/examples/linkbutton_example.py +++ b/examples/linkbutton_example.py @@ -12,6 +12,6 @@ def __init__(self): self.add(button) win = LinkButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/menu_example.py b/examples/menu_example.py index 03be355..e621759 100644 --- a/examples/menu_example.py +++ b/examples/menu_example.py @@ -156,6 +156,6 @@ def on_button_press_event(self, widget, event): return True # event has been handled window = MenuExampleWindow() -window.connect("delete-event", Gtk.main_quit) +window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main() diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index 3339905..f1aa86a 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -73,6 +73,6 @@ def on_question_clicked(self, widget): dialog.destroy() win = MessageDialogWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/notebook_plain_example.py b/examples/notebook_plain_example.py index 959d42c..0586cac 100644 --- a/examples/notebook_plain_example.py +++ b/examples/notebook_plain_example.py @@ -28,6 +28,6 @@ def __init__(self): ) win = MyWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/progressbar_example.py b/examples/progressbar_example.py index b3f7d0e..6e30eb1 100644 --- a/examples/progressbar_example.py +++ b/examples/progressbar_example.py @@ -68,6 +68,6 @@ def on_timeout(self, user_data): return True win = ProgressBarWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/radiobutton_example.py b/examples/radiobutton_example.py index 1cc1256..6b077cc 100644 --- a/examples/radiobutton_example.py +++ b/examples/radiobutton_example.py @@ -33,6 +33,6 @@ def on_button_toggled(self, button, name): print("Button", name, "was turned", state) win = RadioButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/simple_example.py b/examples/simple_example.py index 8f0c4eb..0f71021 100644 --- a/examples/simple_example.py +++ b/examples/simple_example.py @@ -3,6 +3,6 @@ from gi.repository import Gtk win = Gtk.Window() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/spinbutton_example.py b/examples/spinbutton_example.py index 499fab6..90297e1 100644 --- a/examples/spinbutton_example.py +++ b/examples/spinbutton_example.py @@ -35,6 +35,6 @@ def on_ifvalid_toggled(self, button): self.spinbutton.set_update_policy(policy) win = SpinButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/spinner_example.py b/examples/spinner_example.py index bd1be0a..06ac746 100644 --- a/examples/spinner_example.py +++ b/examples/spinner_example.py @@ -8,7 +8,7 @@ def __init__(self): Gtk.Window.__init__(self, title="Spinner") self.set_border_width(3) - self.connect("delete-event", Gtk.main_quit) + self.connect("destroy", Gtk.main_quit) self.button = Gtk.ToggleButton("Start Spinning") self.button.connect("toggled", self.on_button_toggled) diff --git a/examples/switch_example.py b/examples/switch_example.py index debdc26..7d88aad 100644 --- a/examples/switch_example.py +++ b/examples/switch_example.py @@ -29,7 +29,7 @@ def on_switch_activated(self, switch, gparam): print("Switch was turned", state) win = SwitcherWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/textview_example.py b/examples/textview_example.py index 4cd28b2..6f42f2a 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -198,6 +198,6 @@ def search_and_mark(self, text, start): self.search_and_mark(text, match_end) win = TextViewWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/togglebutton_example.py b/examples/togglebutton_example.py index db23918..1713609 100644 --- a/examples/togglebutton_example.py +++ b/examples/togglebutton_example.py @@ -28,6 +28,6 @@ def on_button_toggled(self, button, name): print("Button", name, "was turned", state) win = ToggleButtonWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index 4008615..9d63c42 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -80,6 +80,6 @@ def on_selection_button_clicked(self, widget): win = TreeViewFilterWindow() -win.connect("delete-event", Gtk.main_quit) +win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() diff --git a/source/basics.txt b/source/basics.txt index 386ce79..f802764 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -61,15 +61,15 @@ disconnect a specific callback using the function :func:`disconnect_by_func`: widget.disconnect_by_func(callback) -Almost all applications will connect to the "delete-event" signal of the -top-level window. It is emitted if a user requests that a toplevel window is -closed. The default handler for this signal destroys the window, but does -not terminate the application. Connecting the "delete-event" signal +Applications should connect to the "destroy" signal of the top-level window. +It is emitted an object is destroyed, so when a user requests that a toplevel +window is closed, the default handler for this signal destroys the window, but does +not terminate the application. Connecting the "destroy" signal of the top-level window to the function :func:`Gtk.main_quit` will result in the desired behaviour. .. code-block:: python - window.connect("delete-event", Gtk.main_quit) + window.connect("destroy", Gtk.main_quit) Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` return. diff --git a/source/builder.txt b/source/builder.txt index 4d6ff0f..ad10966 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -82,14 +82,14 @@ Connecting Signals ------------------ Glade also makes it possible to define signals which you can connect to handlers in your code without extracting every object from the builder and connecting to the signals manually. The first thing to do is to declare the signal names in Glade. -For this example we will act when the window should be closed and when the button was pressed, so we give the name "onDeleteWindow" to the "delete-event" signal of the window and "onButtonPressed" to the "pressed" signal of the button. +For this example we will act when the window is closed and when the button was pressed, so we give the name "onDestroy" to the callback handling the "destroy" signal of the window and "onButtonPressed" to the callback handling the "pressed" signal of the button. Now the XML file should look like this. .. literalinclude:: ../examples/builder_example.glade :language: xml Now we have to define the handler functions in our code. -The *onDeleteWindow* should simply result in a call to :meth:`Gtk.main_quit`. +The *onDestroy* should simply result in a call to :meth:`Gtk.main_quit`. When the button is pressed we would like to print the string "Hello World!", so we define the handler as follows .. code-block:: python @@ -103,7 +103,7 @@ The easiest way to do this is to define a *dict* with a mapping from the names t .. code-block:: python handlers = { - "onDeleteWindow": Gtk.main_quit, + "onDestroy": Gtk.main_quit, "onButtonPressed": hello } builder.connect_signals(handlers) From ce5f6a620cb48a74b07b5343bb510af07e652aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Fri, 30 Mar 2018 13:28:06 +0100 Subject: [PATCH 073/209] Updated sphinx theme, so lines of code are displayed correctly See https://github.com/rtfd/sphinx_rtd_theme/issues/417 Closes #120 --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..185477f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +Sphinx==1.6.6 +sphinx-autobuild==0.7.1 +sphinx-rtd-theme==0.2.5b2 From 1bb7502cce019778042c9ac5258475d8a4cf4456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Fri, 30 Mar 2018 13:43:33 +0100 Subject: [PATCH 074/209] Revert "FIX unecessary trailing newlines in literalinclude" This reverts commit 097487aba2ff09f3e7bc6f28d09d388b3fc6cc14. --- source/conf.py | 7 ++----- static/css/custom.css | 5 ----- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 static/css/custom.css diff --git a/source/conf.py b/source/conf.py index 7bcac6a..2749819 100644 --- a/source/conf.py +++ b/source/conf.py @@ -101,7 +101,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx_rtd_theme' +html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -130,7 +130,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['../static'] +html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -224,6 +224,3 @@ ('index', 'pygobjecttutorial', u'PyGObject Tutorial Documentation', [u'Sebastian Pölsterl'], 1) ] - -def setup(app): - app.add_stylesheet('css/custom.css') diff --git a/static/css/custom.css b/static/css/custom.css deleted file mode 100644 index cf4e8da..0000000 --- a/static/css/custom.css +++ /dev/null @@ -1,5 +0,0 @@ -/* Temporary fix for https://github.com/rtfd/sphinx_rtd_theme/issues/417 */ - -.rst-content .highlight>pre { - line-height: 18px; -} From da88d20a2d5baf13360be0ee6d12830930b10282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Fri, 30 Mar 2018 13:47:06 +0100 Subject: [PATCH 075/209] Use sphinx_rtd_theme --- source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 2749819..e506e46 100644 --- a/source/conf.py +++ b/source/conf.py @@ -101,7 +101,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'default' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the From 3ab0c6175cefed091f5f29b8062ab5742090e623 Mon Sep 17 00:00:00 2001 From: "Carsten Csiky (csicar)" Date: Wed, 7 Mar 2018 11:43:17 +0100 Subject: [PATCH 076/209] Add basic documentation for Gtk.Popover Fixes #119 --- examples/popover_advanced_example.py | 82 +++++++++++++++++++++++++++ examples/popover_example.py | 37 ++++++++++++ images/popover_advanced_example.png | Bin 0 -> 8241 bytes images/popover_example.png | Bin 0 -> 7668 bytes source/index.txt | 1 + source/popover.txt | 43 ++++++++++++++ 6 files changed, 163 insertions(+) create mode 100644 examples/popover_advanced_example.py create mode 100644 examples/popover_example.py create mode 100644 images/popover_advanced_example.png create mode 100644 images/popover_example.png create mode 100644 source/popover.txt diff --git a/examples/popover_advanced_example.py b/examples/popover_advanced_example.py new file mode 100644 index 0000000..4fdbc54 --- /dev/null +++ b/examples/popover_advanced_example.py @@ -0,0 +1,82 @@ +import sys + +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gio, Gtk + +# This would typically be its own file +MENU_XML = """ + + + +
+ + About + app.about + + + Quit + app.quit + +
+
+
+""" + + +class AppWindow(Gtk.ApplicationWindow): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + outerbox = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL) + self.add(outerbox) + outerbox.show() + + builder = Gtk.Builder.new_from_string(MENU_XML, -1) + menu = builder.get_object("app-menu") + + button = Gtk.MenuButton.new() + popover = Gtk.Popover.new_from_model(button, menu) + button.set_popover(popover) + + outerbox.pack_start(button, False, True, 0) + button.show() + self.set_border_width(50) + + +class Application(Gtk.Application): + def __init__(self, *args, **kwargs): + super().__init__(*args, application_id="org.example.myapp", **kwargs) + self.window = None + + def do_startup(self): + Gtk.Application.do_startup(self) + + action = Gio.SimpleAction.new("about", None) + action.connect("activate", self.on_about) + self.add_action(action) + + action = Gio.SimpleAction.new("quit", None) + action.connect("activate", self.on_quit) + self.add_action(action) + + def do_activate(self): + # We only allow a single window and raise any existing ones + if not self.window: + # Windows are associated with the application + # when the last one is closed the application shuts down + self.window = AppWindow(application=self, title="Main Window") + + self.window.present() + + def on_about(self, action, param): + about_dialog = Gtk.AboutDialog(transient_for=self.window, modal=True) + about_dialog.present() + + def on_quit(self, action, param): + self.quit() + + +if __name__ == "__main__": + app = Application() + app.run(sys.argv) diff --git a/examples/popover_example.py b/examples/popover_example.py new file mode 100644 index 0000000..8391a95 --- /dev/null +++ b/examples/popover_example.py @@ -0,0 +1,37 @@ +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +class PopoverWindow(Gtk.Window): + + def __init__(self): + Gtk.Window.__init__(self, title="Popover Demo") + self.set_border_width(10) + + outerbox = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL) + self.add(outerbox) + + button = Gtk.Button.new_with_label("Click Me") + button.connect("clicked", self.on_click_me_clicked) + outerbox.pack_start(button, False, True, 0) + + self.popover = Gtk.Popover() + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + vbox.pack_start(Gtk.ModelButton("Item 1"), False, True, 10) + vbox.pack_start(Gtk.Label("Item 2"), False, True, 10) + self.popover.add(vbox) + self.popover.set_position(Gtk.PositionType.BOTTOM) + + def on_click_me_clicked(self, button): + self.popover.set_relative_to(button) + self.popover.show_all() + self.popover.popup() + + def on_open_clicked(self, button): + print("\"Open\" button was clicked") + + +win = PopoverWindow() +win.connect("destroy", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/popover_advanced_example.png b/images/popover_advanced_example.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f20c6d66860e8fda1dd5def47a87ea39438833 GIT binary patch literal 8241 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 literal 0 HcmV?d00001 diff --git a/images/popover_example.png b/images/popover_example.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b74eeea93240e7e7932dad427691d878a18bf6 GIT binary patch literal 7668 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 literal 0 HcmV?d00001 diff --git a/source/index.txt b/source/index.txt index 1270ba7..cbcb543 100644 --- a/source/index.txt +++ b/source/index.txt @@ -50,6 +50,7 @@ Contents: iconview textview dialogs + popover clipboard drag_and_drop builder diff --git a/source/popover.txt b/source/popover.txt new file mode 100644 index 0000000..b045c3b --- /dev/null +++ b/source/popover.txt @@ -0,0 +1,43 @@ +Popovers +======== + +The :class:`Gtk.Popover` is a seperate window used for displaying additional +information and are often used as a part of button menus and context menus. +Their uses are similar to those of dialog windows with the advantage of being less +disruptive and having a connection with the widget the popover is pointing to. +Popovers have are visually connected to a related widget with a small triangle. + +ApPopover can be created with :class:`Gtk.Popover`; for opening the popover use +:meth:`Gtk.Widget.show_all`. + +Custom Popover +-------------- + +A widget can be added to a popover using the :meth:`Gtk.Container.add`. + +Example +^^^^^^^ + +.. image:: ../images/popover_example.png + +.. literalinclude:: ../examples/popover_example.py + :linenos: + +Menu Popover +------------ + +A popover can be created from a :class:`Gio.MenuModel` using +:meth:`Gtk.Popover.new_from_model` and can be changed after creation with +:meth:`Gtk.Popover.bind_model`. + +Example +^^^^^^^ + +.. image:: ../images/popover_advanced_example.png + +.. literalinclude:: ../examples/popover_advanced_example.py + +See Also +-------- + +- https://developer.gnome.org/hig/stable/popovers.html.en From 5fc53afed69a8e20cd743614ff39a2b9bdeb0a0d Mon Sep 17 00:00:00 2001 From: DevJac Date: Sun, 1 Apr 2018 15:45:55 -0600 Subject: [PATCH 077/209] Fix typo --- source/basics.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/basics.txt b/source/basics.txt index f802764..4f7d328 100644 --- a/source/basics.txt +++ b/source/basics.txt @@ -62,7 +62,7 @@ disconnect a specific callback using the function :func:`disconnect_by_func`: widget.disconnect_by_func(callback) Applications should connect to the "destroy" signal of the top-level window. -It is emitted an object is destroyed, so when a user requests that a toplevel +It is emitted when an object is destroyed, so when a user requests that a toplevel window is closed, the default handler for this signal destroys the window, but does not terminate the application. Connecting the "destroy" signal of the top-level window to the function :func:`Gtk.main_quit` will result in the desired behaviour. From b5f293665f47593133b33d51c3adf29f38e6c379 Mon Sep 17 00:00:00 2001 From: DevJac Date: Sun, 1 Apr 2018 23:28:06 -0600 Subject: [PATCH 078/209] Fix grammar --- source/treeview.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index 3841ff6..8a9c941 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -6,12 +6,12 @@ of displaying data. They are used in conjunction with a :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and manipulating data in many ways, including: - * Automatically updates when data added, removed or edited + * Automatic updates when data is added, removed or edited * Drag and drop support - * Sorting of data - * Support embedding widgets such as check boxes, progress bars, etc. + * Sorting data + * Embedding widgets such as check boxes, progress bars, etc. * Reorderable and resizable columns - * Filtering of data + * Filtering data With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. It is often difficult for beginner developers to be able to utilize it correctly due From 52593fc04cd7171aabf73ca70b3ef1f4b0067e5a Mon Sep 17 00:00:00 2001 From: tomazcunha Date: Thu, 19 Apr 2018 23:54:04 -0300 Subject: [PATCH 079/209] Translation into Portuguese language of Brazil Closes #125 --- .../locale/pt_BR/LC_MESSAGES/application.po | 186 ++++++ .../locale/pt_BR/LC_MESSAGES/basics.po | 190 ++++++ .../locale/pt_BR/LC_MESSAGES/builder.po | 223 +++++++ .../pt_BR/LC_MESSAGES/button_widgets.po | 279 +++++++++ .../locale/pt_BR/LC_MESSAGES/cellrenderers.po | 248 ++++++++ .../locale/pt_BR/LC_MESSAGES/clipboard.po | 55 ++ .../locale/pt_BR/LC_MESSAGES/combobox.po | 85 +++ .../locale/pt_BR/LC_MESSAGES/dialogs.po | 313 ++++++++++ .../locale/pt_BR/LC_MESSAGES/drag_and_drop.po | 223 +++++++ .../locale/pt_BR/LC_MESSAGES/entry.po | 94 +++ .../locale/pt_BR/LC_MESSAGES/iconview.po | 63 ++ .../locale/pt_BR/LC_MESSAGES/index.po | 107 ++++ .../locale/pt_BR/LC_MESSAGES/install.po | 142 +++++ .../locale/pt_BR/LC_MESSAGES/introduction.po | 142 +++++ .../locale/pt_BR/LC_MESSAGES/label.po | 120 ++++ .../locale/pt_BR/LC_MESSAGES/layout-table.po | 76 +++ .../locale/pt_BR/LC_MESSAGES/layout.po | 449 ++++++++++++++ .../locale/pt_BR/LC_MESSAGES/menus.po | 218 +++++++ .../locale/pt_BR/LC_MESSAGES/objects.po | 556 ++++++++++++++++++ .../locale/pt_BR/LC_MESSAGES/popover.po | 83 +++ .../locale/pt_BR/LC_MESSAGES/progressbar.po | 92 +++ .../locale/pt_BR/LC_MESSAGES/spinner.po | 45 ++ .../locale/pt_BR/LC_MESSAGES/stock.po | 84 +++ .../locale/pt_BR/LC_MESSAGES/textview.po | 288 +++++++++ .../locale/pt_BR/LC_MESSAGES/treeview.po | 466 +++++++++++++++ .../locale/pt_BR/LC_MESSAGES/unicode.po | 284 +++++++++ 26 files changed, 5111 insertions(+) create mode 100644 translations/locale/pt_BR/LC_MESSAGES/application.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/basics.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/builder.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/button_widgets.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/clipboard.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/combobox.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/dialogs.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/entry.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/iconview.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/index.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/install.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/introduction.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/label.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/layout-table.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/layout.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/menus.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/objects.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/popover.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/progressbar.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/spinner.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/stock.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/textview.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/treeview.po create mode 100644 translations/locale/pt_BR/LC_MESSAGES/unicode.po diff --git a/translations/locale/pt_BR/LC_MESSAGES/application.po b/translations/locale/pt_BR/LC_MESSAGES/application.po new file mode 100644 index 0000000..4db9b70 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/application.po @@ -0,0 +1,186 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 05:32-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "Aplicação" + +#: ../../source/application.txt:6 +msgid "" +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." +msgstr "" +":class:`Gtk.Application` abrange muitas tarefas repetitivas que um " +"aplicativo moderno precisa, como manipular várias instâncias, ativação do D-" +"Bus, abertura de arquivos, análise de linha de comando, inicialização/" +"desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." + +#: ../../source/application.txt:12 +msgid "Actions" +msgstr "Ações" + +#: ../../source/application.txt:14 +msgid "" +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." +msgstr "" +":class:`Gio.Action` é uma maneira de expor qualquer tarefa que seu " +"aplicativo ou widget fizer por um nome. Essas ações podem ser desabilitadas/" +"habilitadas no tempo de execução e podem ser ativadas ou ter um estado " +"alterado (se elas contiverem estado)." + +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be showed off " +"later." +msgstr "" +"O motivo para usar ações é separar a lógica da interface do usuário. Por " +"exemplo, isso permite usar uma barra de menu no OSX e um menu de engrenagem " +"no GNOME, simplesmente referenciando o nome de uma ação. A principal " +"implementação que você estará usando é :class:`Gio.SimpleAction` que será " +"mostrado mais tarde." + +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." +msgstr "" +"Muitas classes, como :class:`Gio.MenuItem` e :class:`Gtk.ModelButton` " +"suportam propriedades para definir um nome de ação." + +#: ../../source/application.txt:26 +msgid "" +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." +msgstr "" +"Estas ações podem ser agrupadas em um :class:`Gio.ActionGroup` e quando " +"esses grupos são adicionados a um widget com :meth:`Gtk.Widget." +"insert_action_group()`, eles ganharão um prefixo. Tal como \"win\" quando " +"adicionado a um :class:`Gtk.ApplicationWindow`. Você usará o nome completo " +"da ação ao fazer referência a ele, como \"app.about\", mas ao criar a ação, " +"ela ficará \"about\" até ser adicionada ao aplicativo." + +#: ../../source/application.txt:32 +msgid "" +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"add_accelerator()`." +msgstr "" +"Você também pode facilmente criar keybindings para ações definindo a " +"propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." +"Application.add_accelerator()`." + +#: ../../source/application.txt:36 +msgid "Menus" +msgstr "" + +#: ../../source/application.txt:38 +msgid "" +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." +msgstr "" +"Seus menus devem ser definidos em XML usando :class:`Gio.Menu` e referenciam " +"as ações mencionadas anteriormente que você definiu. :class:`Gtk." +"Application` permite que você defina um menu via :meth:`Gtk.Application." +"set_app_menu()` ou :meth:`Gtk.Application.set_menubar()`. Se você faz uso " +"de :class:`Gio.Resource` isto pode usar automaticamente o menu correto " +"baseado na plataforma, caso contrário você pode configurá-los manualmente. " +"Um exemplo detalhado é mostrado abaixo." + +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "Linha de Comando" + +#: ../../source/application.txt:48 +msgid "" +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." +msgstr "" +"Ao criar seu aplicativo, ele recebe uma propriedade de flag de :class:`Gio." +"ApplicationFlags`. Usando isso, você pode permitir que ele manipule tudo " +"sozinho ou tenha um comportamento mais personalizado." + +#: ../../source/application.txt:51 +msgid "" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." +msgstr "" +"Você pode usar o `HANDLES_COMMAND_LINE` para permitir um comportamento " +"customizado em :meth:`Gio.Application.do_command_line()`. Em combinação com :" +"meth:`Gio.Application.add_main_option()` para adicionar opções " +"personalizadas." + +#: ../../source/application.txt:54 +msgid "" +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." +msgstr "" +"Usar `HANDLES_OPEN` fará o trabalho de simplesmente pegar argumentos de " +"arquivo para você e permitir que você os manipule em :meth:`Gio.Application." +"do_open()`." + +#: ../../source/application.txt:57 +msgid "" +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." +msgstr "" +"Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " +"existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." + +#: ../../source/application.txt:61 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/application.txt:69 +msgid "See Also" +msgstr "Veja também" + +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "" + +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "" + +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "" + +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/basics.po b/translations/locale/pt_BR/LC_MESSAGES/basics.po new file mode 100644 index 0000000..47c0420 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/basics.po @@ -0,0 +1,190 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 22:29-0300\n" +"PO-Revision-Date: 2018-04-11 22:41-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "Noções básicas" + +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "Esta seção apresentará alguns dos aspectos mais importantes do GTK+." + +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "Loop principal e sinais" + +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." +msgstr "" +"Como a maioria dos toolkits GUI, o GTK+ usa um modelo de programação " +"orientada a eventos. Quando o usuário não está fazendo nada, o GTK+ fica no " +"loop principal e aguarda a entrada. Se o usuário executar alguma ação - " +"digamos, um clique do mouse - o loop principal \"acorda\" e entrega um " +"evento para o GTK+." + +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." +msgstr "" +"Quando widgets recebem um evento, eles frequentemente emitem um ou mais " +"sinais. Sinais notificam seu programa que \"algo interessante aconteceu\" " +"invocando funções que você conectou ao sinal. Tais funções são comumente " +"conhecidas como *callbacks*. Quando seus retornos de chamada são invocados, " +"você normalmente toma algumas ações - por exemplo, quando um botão Abrir é " +"clicado, você pode exibir uma caixa de diálogo de seleção de arquivos. " +"Depois que um retorno de chamada terminar, o GTK+ retornará ao loop " +"principal e aguardará mais entrada do usuário." + +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "Um exemplo genérico é:" + +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." +msgstr "" +"Em primeiro lugar, *widget* é uma instância de um widget que criamos " +"anteriormente. Em seguida, o evento em que estamos interessados. Cada widget " +"tem seus próprios eventos específicos que podem ocorrer. Por exemplo, se " +"você tem um botão, geralmente deseja se conectar ao evento \"clicado\". Isso " +"significa que quando o botão é clicado, o sinal é emitido. Em terceiro " +"lugar, o argumento *callback* é o nome da função de retorno de chamada. Ele " +"contém o código que é executado quando os sinais do tipo especificado são " +"emitidos. Finalmente, o argumento *data* inclui todos os dados que devem ser " +"passados quando o sinal é emitido. No entanto, esse argumento é " +"completamente opcional e pode ser deixado de fora se não for necessário." + +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." +msgstr "" +"A função retorna um número que identifica esse par de retorno de chamada " +"específico. É necessário desconectar de um sinal de modo que a função de " +"retorno de chamada não seja chamada durante qualquer emissão futura ou atual " +"do sinal ao qual está conectada." + +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" +msgstr "" +"Se você perdeu o \"handler_id\" por algum motivo (por exemplo, os " +"manipuladores foram instalados usando :func:`Gtk.Builder.connect_signals`), " +"você ainda pode desconectar um callback específico usando a função :func:" +"`disconnect_by_func`:" + +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted an object is destroyed, so when a user requests that a " +"toplevel window is closed, the default handler for this signal destroys the " +"window, but does not terminate the application. Connecting the \"destroy\" " +"signal of the top-level window to the function :func:`Gtk.main_quit` will " +"result in the desired behaviour." +msgstr "" +"Os aplicativos devem se conectar ao sinal \"destroy\" da janela de nível " +"superior. É emitido um objeto é destruído, portanto, quando um usuário " +"solicita que uma janela de nível superior é fechada, o manipulador padrão " +"para este sinal destrói a janela, mas não finaliza o aplicativo. Conectar o " +"sinal \"destroy\" da janela de nível superior à função :func:`Gtk.main_quit` " +"resultará no comportamento desejado." + +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." +msgstr "" +"Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" +"`Gtk.main`." + +#: ../../source/basics.txt:77 +msgid "Properties" +msgstr "Propriedades" + +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" +msgstr "" +"Propriedades descrevem a configuração e o estado dos widgets. Quanto aos " +"sinais, cada widget tem seu próprio conjunto particular de propriedades. Por " +"exemplo, um botão tem a propriedade \"label\", que contém o texto do widget " +"de etiqueta dentro do botão. Você pode especificar o nome e o valor de " +"qualquer número de propriedades como argumentos de palavras-chave ao criar " +"uma instância de um widget. Para criar um rótulo alinhado à direita com o " +"texto \"Hello World\" e um ângulo de 25 graus, use:" + +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "que é equivalente a" + +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." +msgstr "" +"Em vez de usar getters e setters, você também pode obter e definir as " +"propriedades do gobject através da propriedade \"props\", como ``widget." +"props.prop_name = value``. Isto é equivalente ao mais detalhado ``widget." +"get_property(\"prop-name\")`` e ``widget.set_property(\"prop-name\", " +"value)``." + +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" +msgstr "" +"Para ver quais propriedades estão disponíveis para um widget na versão em " +"execução do GTK, você pode usar \"dir\" com a propriedade \"props\":" + +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." +msgstr "" +"Isto irá imprimir no console a lista de propriedades que um Gtk.Box possui." diff --git a/translations/locale/pt_BR/LC_MESSAGES/builder.po b/translations/locale/pt_BR/LC_MESSAGES/builder.po new file mode 100644 index 0000000..48c8aa0 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/builder.po @@ -0,0 +1,223 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 22:50-0300\n" +"PO-Revision-Date: 2018-04-11 22:57-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "Glade e Gtk.Builder" + +#: ../../source/builder.txt:3 +msgid "" +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by a XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" +msgstr "" +"A classe :class:`Gtk.Builder` oferece a você a oportunidade de projetar " +"interfaces de usuário sem escrever uma única linha de código. Isso é " +"possível descrevendo a interface por um arquivo XML e, em seguida, " +"carregando a descrição XML em tempo de execução e criando os objetos " +"automaticamente, o que a classe Builder faz por você. Para o propósito de " +"não precisar escrever o XML manualmente, o aplicativo `Glade `_ permite criar a interface do usuário de uma maneira WYSIWYG (o " +"que você vê é o que obtém)" + +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "Esse método possui várias vantagens:" + +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "Menos código precisa ser escrito." + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." +msgstr "" +"As mudanças da interface do usuário podem ser vistas mais rapidamente, para " +"que as interfaces de usuário possam melhorar." + +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." +msgstr "" +"Designers sem habilidades de programação podem criar e editar interfaces de " +"usuário." + +#: ../../source/builder.txt:12 +msgid "" +"The description of the user interface is independent from the programming " +"language being used." +msgstr "" +"A descrição da interface do usuário é independente da linguagem de " +"programação utilizada." + +#: ../../source/builder.txt:14 +msgid "" +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." +msgstr "" +"Ainda existe código necessário para lidar com mudanças de interface " +"acionadas pelo usuário, mas :class:`Gtk.Builder` permite que você se " +"concentre em implementar essa funcionalidade." + +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "Criando e carregando o arquivo .glade" + +#: ../../source/builder.txt:18 +msgid "" +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." +msgstr "" +"Primeiro de tudo você tem que baixar e instalar o Glade. Existem `vários " +"tutoriais `_ sobre " +"o Glade, então isso não é explicado aqui em detalhes. Vamos começar criando " +"uma janela com um botão e salvando-a em um arquivo chamado *example.glade*. " +"O arquivo XML resultante deve se parecer com isso." + +#: ../../source/builder.txt:42 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" +"Para carregar este arquivo em Python, precisamos de um objeto :class:`Gtk." +"Builder`." + +#: ../../source/builder.txt:49 +msgid "" +"The second line loads all objects defined in *example.glade* into the " +"Builder object." +msgstr "" +"A segunda linha carrega todos os objetos definidos em *example.glade* no " +"objeto Builder." + +#: ../../source/builder.txt:51 +msgid "" +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." +msgstr "" +"Também é possível carregar apenas alguns dos objetos. A linha a seguir " +"adicionaria apenas os objetos (e seus objetos filhos) fornecidos na tupla." + +#: ../../source/builder.txt:58 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." +msgstr "" +"Esses dois métodos também existem para o carregamento de uma string, em vez " +"de um arquivo. Seus nomes correspondentes são :meth:`Gtk.Builder." +"add_from_string` e :meth:`Gtk.Builder.add_objects_from_string` e eles " +"simplesmente pegam uma string XML em vez de um nome de arquivo." + +#: ../../source/builder.txt:62 +msgid "Accessing widgets" +msgstr "Acessando Widgets" + +#: ../../source/builder.txt:63 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" +msgstr "" +"Agora que a janela e o botão estão carregados, também queremos mostrá-los. " +"Portanto, o método :meth:`Gtk.Window.show_all` deve ser chamado na janela. " +"Mas como acessamos o objeto associado?" + +#: ../../source/builder.txt:72 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." +msgstr "" +"Cada widget pode ser recuperado do construtor pelo método :meth:`Gtk.Builder." +"get_object` e pelo *id* do widget. É realmente *isso* simples." + +#: ../../source/builder.txt:75 +msgid "It is also possible to get a list of all objects with" +msgstr "Também é possível obter uma lista de todos os objetos com" + +#: ../../source/builder.txt:82 +msgid "Connecting Signals" +msgstr "Conectando Sinais" + +#: ../../source/builder.txt:83 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." +msgstr "" +"O Glade também permite definir sinais que você pode conectar a manipuladores " +"em seu código sem extrair todos os objetos do construtor e conectar-se aos " +"sinais manualmente. A primeira coisa a fazer é declarar os nomes dos sinais " +"no Glade. Para este exemplo, vamos agir quando a janela é fechada e quando o " +"botão foi pressionado, então damos o nome \"onDestroy\" para o retorno de " +"chamada manipulando o sinal \"destroy\" da janela e \"onButtonPressed\" para " +"o retorno de chamada manipulando o \"pressionado\" sinal do botão. Agora o " +"arquivo XML deve ficar assim." + +#: ../../source/builder.txt:91 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" +msgstr "" +"Agora temos que definir as funções do manipulador em nosso código. O " +"*onDestroy* deve simplesmente resultar em uma chamada para :meth:`Gtk." +"main_quit`. Quando o botão é pressionado, gostaríamos de imprimir a string " +"\"Hello World!\", Então definimos o manipulador da seguinte maneira" + +#: ../../source/builder.txt:100 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +msgstr "" +"Em seguida, temos que conectar os sinais e as funções do manipulador. A " +"maneira mais fácil de fazer isso é definir um *dict* com um mapeamento dos " +"nomes para os manipuladores e então passá-lo para o método :meth:`Gtk." +"Builder.connect_signals`." + +#: ../../source/builder.txt:111 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" +msgstr "" +"Uma abordagem alternativa é criar uma classe que tenha métodos que sejam " +"chamados como os sinais. Em nosso exemplo, o último snippet de código pode " +"ser reescrito como:" + +#: ../../source/builder.txt:119 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/builder.txt:120 +msgid "The final code of the example" +msgstr "O código final do exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po new file mode 100644 index 0000000..90279be --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po @@ -0,0 +1,279 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 06:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "Widgets de Botão" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "Botão" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" +"O widget Button é outro widget comumente usado. Geralmente é usado para " +"anexar uma função que é chamada quando o botão é pressionado." + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" +"O widget :class:`Gtk.Button` pode conter qualquer widget filho válido. Isto " +"é, ele pode conter praticamente qualquer outro padrão :class:`Gtk.Widget`. " +"Um filho mais comumente usado é a :class:`Gtk.Label`." + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" +"Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " +"emitido quando o botão foi pressionado e liberado." + +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "Botão de Alternância" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" +"A :class:`Gtk.ToggleButton` é muito semelhante a um normal :class:`Gtk." +"Button`, mas quando clicados eles permanecem ativados, ou pressionados, até " +"serem clicados novamente. Quando o estado do botão é alterado, o sinal " +"\"toggled\" (alternado) é emitido." + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" +"Para recuperar o estado da :class:`Gtk.ToggleButton`, você pode usar o " +"método :meth:`Gtk.ToggleButton.get_active`. Isso retorna ``True`` se o botão " +"estiver \"inativo\". Você também pode definir o estado do botão de " +"alternância, com :meth:`Gtk.ToggleButton.set_active`. Observe que, se você " +"fizer isso e o estado realmente mudar, isso fará com que o sinal \"alternado" +"\" seja emitido." + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "Botão de Seleção" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" +":class:`Gtk.CheckButton` herda de :class:`Gtk.ToggleButton`. A única " +"diferença real entre os dois é como :class:`Gtk.CheckButton` é apresentado. " +"A :class:`Gtk.CheckButton` coloca um discreto :class:`Gtk.ToggleButton` ao " +"lado de um widget, (geralmente um :class:`Gtk.Label`). O sinal \"toggled\", :" +"meth:`Gtk.ToggleButton.set_active` e :meth:`Gtk.ToggleButton.get_active` são " +"herdados." + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "Botão de Radio" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" +"Como os checkboxes, os radio buttons também herdam de :class:`Gtk." +"ToggleButton`, mas estes funcionam em grupos, e apenas um :class:`Gtk." +"RadioButton` em um grupo pode ser selecionado a qualquer momento. Portanto, " +"um :class:`Gtk.RadioButton` é uma maneira de dar ao usuário uma escolha " +"entre várias opções." + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" +"Botões de rádio podem ser criados com um dos métodos estáticos :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` ou :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. O primeiro botão de rádio de um grupo será " +"criado passando o ``None`` como o argumento *group*. Nas chamadas " +"subsequentes, o grupo ao qual você deseja adicionar esse botão deve ser " +"passado como um argumento." + +#: ../../source/button_widgets.txt:70 +msgid "" +"When first run, the first radio button in the group will be active. This can " +"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " +"first argument." +msgstr "" +"Quando executado pela primeira vez, o primeiro botão de rádio do grupo " +"estará ativo. Isto pode ser alterado chamando :meth:`Gtk.ToggleButton." +"set_active` com ``True`` como primeiro argumento." + +#: ../../source/button_widgets.txt:74 +msgid "" +"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " +"achieved by calling :meth:`Gtk.RadioButton.join_group`." +msgstr "" +"Alterar o grupo de widgets :class:`Gtk.RadioButton` após sua criação pode " +"ser feito chamando :meth:`Gtk.RadioButton.join_group`." + +#: ../../source/button_widgets.txt:86 +msgid "LinkButton" +msgstr "Botão Link" + +#: ../../source/button_widgets.txt:87 +msgid "" +"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " +"to the one used by web browsers, which triggers an action when clicked. It " +"is useful to show quick links to resources." +msgstr "" +"A :class:`Gtk.LinkButton` é um :class:`Gtk.Button` com um hiperlink, similar " +"ao usado pelos navegadores da web, que aciona uma ação quando clicado. É " +"útil mostrar links rápidos para recursos." + +#: ../../source/button_widgets.txt:91 +msgid "" +"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" +"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." +"get_uri`." +msgstr "" +"O URI ligado a um :class:`Gtk.LinkButton` pode ser configurado " +"especificamente usando :meth:`Gtk.LinkButton.set_uri` e recuperado usando :" +"meth:`Gtk.LinkButton.get_uri`." + +#: ../../source/button_widgets.txt:103 +msgid "SpinButton" +msgstr "Botão Giratório" + +#: ../../source/button_widgets.txt:104 +msgid "" +"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " +"of some attribute. Rather than having to directly type a number into a :" +"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " +"of two arrows to increment or decrement the displayed value. A value can " +"still be typed in, with the bonus that it can be checked to ensure it is in " +"a given range. The main properties of a :class:`Gtk.SpinButton` are set " +"through :class:`Gtk.Adjustment`." +msgstr "" +"A :class:`Gtk.SpinButton` é uma maneira ideal de permitir que o usuário " +"defina o valor de algum atributo. Em vez de digitar diretamente um número " +"em :class:`Gtk.Entry`, :class:`Gtk.SpinButton` permite que o usuário clique " +"em uma das duas setas para incrementar ou decrementar o valor exibido. Um " +"valor ainda pode ser digitado, com o bônus que pode ser verificado para " +"garantir que esteja em um determinado intervalo. As propriedades principais " +"de um :class:`Gtk.SpinButton` são definidas através de :class:`Gtk." +"Adjustment`." + +#: ../../source/button_widgets.txt:112 +msgid "" +"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." +"SpinButton.set_value`. The value entered can either be an integer or float, " +"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" +"meth:`Gtk.SpinButton.get_value_as_int`, respectively." +msgstr "" +"Para alterar o valor que :class:`Gtk.SpinButton` está mostrando, use :meth:" +"`Gtk.SpinButton.set_value`. O valor digitado pode ser um número inteiro ou " +"float, dependendo de seus requisitos, use :meth:`Gtk.SpinButton.get_value` " +"ou :meth:`Gtk.SpinButton.get_value_as_int`, respectivamente." + +#: ../../source/button_widgets.txt:117 +msgid "" +"When you allow the displaying of float values in the spin button, you may " +"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." +"SpinButton.set_digits`." +msgstr "" +"Quando você permite a exibição de valores flutuantes no botão de rotação, " +"você pode querer ajustar o número de espaços decimais exibidos chamando :" +"meth:`Gtk.SpinButton.set_digits`." + +#: ../../source/button_widgets.txt:121 +msgid "" +"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " +"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " +"with ``True`` as argument." +msgstr "" +"Por padrão, :class:`Gtk.SpinButton` aceita dados textuais. Se você deseja " +"limitar isso apenas a valores numéricos, chame :meth:`Gtk.SpinButton." +"set_numeric` com ``True`` como argumento." + +#: ../../source/button_widgets.txt:125 +msgid "" +"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " +"two options here; by default the spin button updates the value even if the " +"data entered is invalid. Alternatively, we can set the policy to only update " +"when the value entered is valid by calling :meth:`Gtk.SpinButton." +"set_update_policy`." +msgstr "" +"Também podemos ajustar a política de atualização de :class:`Gtk.SpinButton`. " +"Existem duas opções aqui; por padrão, o botão de rotação atualiza o valor " +"mesmo se os dados inseridos forem inválidos. Alternativamente, podemos " +"definir a política para apenas atualizar quando o valor inserido é válido " +"chamando :meth:`Gtk.SpinButton.set_update_policy`." + +#: ../../source/button_widgets.txt:139 +msgid "Switch" +msgstr "Interruptor" + +#: ../../source/button_widgets.txt:140 +msgid "" +"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " +"can control which state should be active by clicking the empty area, or by " +"dragging the handle." +msgstr "" +"A :class:`Gtk.Switch` é um widget que possui dois estados: ligado ou " +"desligado. O usuário pode controlar qual estado deve estar ativo clicando na " +"área vazia ou arrastando a alça." + +#: ../../source/button_widgets.txt:144 +msgid "" +"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " +"action signal and emitting it causes the switch to animate. Applications " +"should never connect to this signal, but use the \"notify::active\" signal, " +"see the example here below." +msgstr "" +"Você não deve usar o sinal \"activate\" no Gtk.Switch que é um sinal de ação " +"e emiti-lo faz com que o switch anime. As aplicações nunca devem se conectar " +"a este sinal, mas use o sinal \"notify::active\", veja o exemplo abaixo." diff --git a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po new file mode 100644 index 0000000..9bf9fab --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po @@ -0,0 +1,248 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 06:37-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "" + +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" +msgstr "" +"Os widgets :class:`Gtk.CellRenderer` são usados para exibir informações " +"dentro de widgets como :class:`Gtk.TreeView` ou :class:`Gtk.ComboBox`. Eles " +"trabalham de perto com os widgets associados e são muito poderosos, com " +"muitas opções de configuração para exibir uma grande quantidade de dados de " +"diferentes maneiras. Há sete widgets :class:`Gtk.CellRenderer` que podem ser " +"usados para diferentes propósitos:" + +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr "" + +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr "" + +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr "" + +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr "" + +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr "" + +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr "" + +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr "" + +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr "" + +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "" + +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." +msgstr "" +"A :class:`Gtk.CellRendererText` processa um dado texto em sua célula, usando " +"as informações de fonte, cor e estilo fornecidas por suas propriedades. O " +"texto será reticulado se for muito longo e a propriedade \"ellipsize\" " +"permitir." + +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" +msgstr "" +"Por padrão, o texto em :class:`Gtk.CellRendererText` widgets não é editável. " +"Isso pode ser alterado, definindo o valor da propriedade \"editable\" como " +"``True``:" + +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." +msgstr "" +"Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." +"TreeModel` de acordo." + +#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 +#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 +#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "" + +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." +msgstr "" +":class:`Gtk.CellRendererToggle` renderiza um botão de alternância em uma " +"célula. O botão é desenhado como um botão de rádio ou de verificação, " +"dependendo da propriedade \"radio\". Quando ativado, emite o sinal " +"\"alternado\"." + +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." +msgstr "" +"Como um :class:`Gtk.CellRendererToggle` pode ter dois estados, ativos e não " +"ativos, você provavelmente deseja vincular a propriedade \"active\" no " +"renderizador de célula a um valor booleano no modelo, fazendo com que o " +"botão de verificação reflita o estado do modelo." + +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "" + +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." +msgstr "" +"A :class:`Gtk.CellRendererPixbuf` pode ser usado para renderizar uma imagem " +"em uma célula. Ele permite renderizar um dado :class:`Gdk.Pixbuf` (definido " +"através da propriedade \"pixbuf\") ou um ícone nomeado (configurado através " +"da propriedade \"icon-name\")." + +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "" + +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." +msgstr "" +":class:`Gtk.CellRendererCombo` processa texto em uma célula como :class:`Gtk." +"CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererCombo` oferece " +"um widget :class:`Gtk.ComboBox` para editar o texto. Os valores a serem " +"exibidos na caixa de combinação são obtidos de :class:`Gtk.TreeModel` " +"especificado na propriedade \"model\"." + +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." +msgstr "" +"O renderizador de célula de combinação toma o cuidado de adicionar um " +"renderizador de célula de texto à caixa de combinação e o configura para " +"exibir a coluna especificada por sua propriedade \"text-column\"." + +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." +msgstr "" +"A :class:`Gtk.CellRendererCombo` pode operar em dois modos. Ele pode ser " +"usado com e sem um widget associado :class:`Gtk.Entry`, dependendo do valor " +"da propriedade \"has-entry\"." + +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "" + +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." +msgstr "" +":class:`Gtk.CellRendererProgress` renderiza um valor numérico como uma barra " +"de progresso em uma célula. Além disso, pode exibir um texto na parte " +"superior da barra de progresso." + +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." +msgstr "" +"O valor percentual da barra de progresso pode ser modificado alterando a " +"propriedade \"value\". Semelhante a :class:`Gtk.ProgressBar`, você pode " +"ativar o *modo de atividade* incrementando a propriedade \"pulse\" em vez da " +"propriedade \"value\"." + +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" +":class:`Gtk.CellRendererSpin` processa o texto em uma célula como :class:" +"`Gtk.CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererSpin` oferece " +"um widget :class:`Gtk.SpinButton`. Claro, isso significa que o texto deve " +"ser analisado como um número de ponto flutuante." + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" +"O intervalo do botão de rotação é obtido da propriedade de ajuste do " +"renderizador de célula, que pode ser definido explicitamente ou mapeado para " +"uma coluna no modelo de árvore, como todas as propriedades dos " +"renderizadores de célula. :class:`Gtk.CellRendererSpin` também possui " +"propriedades para a taxa de subida e o número de dígitos a serem exibidos." diff --git a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po new file mode 100644 index 0000000..187a1db --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po @@ -0,0 +1,55 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 03:57-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" +":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " +"de dados, incluindo texto e imagens. O uso de uma área de transferência " +"permite que esses dados sejam compartilhados entre aplicativos por meio de " +"ações como copiar, cortar e colar. Essas ações geralmente são feitas de " +"três maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " +"conectando as funções aos widgets :class:`Gtk.Button`." + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." +msgstr "" +"Existem várias seleções da área de transferência para finalidades " +"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` " +"é usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção " +"comum que armazena texto selecionado pelo usuário com o cursor." + +#: ../../source/clipboard.txt:17 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/combobox.po b/translations/locale/pt_BR/LC_MESSAGES/combobox.po new file mode 100644 index 0000000..eb3babe --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/combobox.po @@ -0,0 +1,85 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:07-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/combobox.txt:2 +msgid "ComboBox" +msgstr "" + +#: ../../source/combobox.txt:3 +msgid "" +"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " +"menu. They are preferable to having many radio buttons on screen as they " +"take up less room. If appropriate, it can show extra information about each " +"item, such as text, a picture, a checkbox, or a progress bar." +msgstr "" +"A :class:`Gtk.ComboBox` permite a seleção de um item em um menu suspenso. " +"Eles são preferíveis a ter muitos botões de rádio na tela, pois ocupam menos " +"espaço. Se apropriado, ele pode mostrar informações extras sobre cada item, " +"como texto, uma imagem, uma caixa de seleção ou uma barra de progresso." + +#: ../../source/combobox.txt:8 +msgid "" +":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " +"the model-view pattern; the list of valid choices is specified in the form " +"of a tree model, and the display of the choices can be adapted to the data " +"in the model by using :ref:`cell renderers `. If the combo " +"box contains a large number of items, it may be better to display them in a " +"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." +"set_wrap_width`." +msgstr "" +":class:`Gtk.ComboBox` é muito similar a :class:`Gtk.TreeView`, já que ambos " +"usam o padrão model-view; A lista de opções válidas é especificada na forma " +"de um modelo de árvore, e a exibição das opções pode ser adaptada aos dados " +"no modelo usando :ref:`renderizadores de célula `. Se a caixa " +"de combinação contiver um grande número de itens, talvez seja melhor exibi-" +"los em uma grade em vez de em uma lista. Isso pode ser feito chamando :meth:" +"`Gtk.ComboBox.set_wrap_width`." + +#: ../../source/combobox.txt:16 +msgid "" +"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " +"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " +"to enter arbitrary text if none of the available choices are suitable. To do " +"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" +"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." +"ComboBox` instance." +msgstr "" +"O widget :class:`Gtk.ComboBox` geralmente restringe o usuário às opções " +"disponíveis, mas ele pode opcionalmente ter um :class:`Gtk.Entry`, " +"permitindo que o usuário insira texto arbitrário se nenhuma das opções " +"disponíveis for adequada. Para fazer isso, use um dos métodos estáticos :" +"meth:`Gtk.ComboBox.new_with_entry` ou :meth:`Gtk.ComboBox." +"new_with_model_and_entry` para criar uma instância :class:`Gtk.ComboBox`." + +#: ../../source/combobox.txt:23 +msgid "" +"For a simple list of textual choices, the model-view API of :class:`Gtk." +"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " +"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." +"ComboBoxText` can contain an entry." +msgstr "" +"Para uma lista simples de escolhas textuais, a API de visão de modelo de :" +"class:`Gtk.ComboBox` pode ser um pouco avassaladora. Neste caso, :class:`Gtk." +"ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " +"e :class:`Gtk.ComboBoxText` podem conter uma entrada." + +#: ../../source/combobox.txt:29 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po new file mode 100644 index 0000000..78f7c14 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po @@ -0,0 +1,313 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 14:26-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "" + +#: ../../source/dialogs.txt:4 +msgid "" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." +msgstr "" +"As janelas de caixa de diálogo são muito semelhantes às janelas padrão e são " +"usadas para fornecer ou recuperar informações do usuário. Eles são " +"frequentemente usados para fornecer uma janela de preferências, por exemplo. " +"A principal diferença que uma caixa de diálogo tem é alguns widgets pré-" +"empacotados que organizam a caixa de diálogo automaticamente. A partir daí, " +"podemos simplesmente adicionar rótulos, botões, botões de verificação, etc. " +"Outra grande diferença é o tratamento de respostas para controlar como o " +"aplicativo deve se comportar após a interação com a caixa de diálogo." + +#: ../../source/dialogs.txt:12 +msgid "" +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." +msgstr "" +"Existem várias classes de diálogo derivadas que você pode achar útil. :class:" +"`Gtk.MessageDialog` é usado para notificações mais simples. Porém, em outras " +"ocasiões, você pode precisar derivar sua própria classe de diálogo para " +"fornecer uma funcionalidade mais complexa." + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "Dialogs Personalizados" + +#: ../../source/dialogs.txt:20 +msgid "" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." +msgstr "" +"Para empacotar widgets em um diálogo customizado, você deve empacotá-los no :" +"class:`Gtk.Box`, disponível via :meth:`Gtk.Dialog.get_content_area`. Para " +"adicionar apenas um :class:`Gtk.Button` ao final do diálogo, você poderia " +"usar o método :meth:`Gtk.Dialog.add_button`." + +#: ../../source/dialogs.txt:25 +msgid "" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +msgstr "" +"Um diálogo 'modal' (isto é, um que congela o resto do aplicativo da entrada " +"do usuário), pode ser criado chamando :class:`Gtk.Dialog.set_modal` no " +"diálogo ou setando o argumento ``flags`` do o construtor :class:`Gtk.Dialog` " +"para incluir o sinalizador :attr:`Gtk.DialogFlags.MODAL`." + +#: ../../source/dialogs.txt:30 +msgid "" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." +msgstr "" +"Clicar em um botão irá emitir um sinal chamado \"response\". Se você quiser " +"bloquear a espera de um diálogo para retornar antes do retorno do fluxo de " +"controle para o seu código, você pode chamar :meth:`Gtk.Dialog.run`. Este " +"método retorna um int que pode ser um valor de :class:`Gtk.ResponseType` ou " +"pode ser o valor de resposta customizado que você especificou no construtor :" +"class:`Gtk.Dialog` ou :meth:`Gtk.Dialog .add_button`." + +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." +msgstr "" +"Finalmente, existem duas maneiras de remover um diálogo. O método :meth:`Gtk." +"Widget.hide` remove a caixa de diálogo da visualização, mas mantém " +"armazenada na memória. Isso é útil para evitar a necessidade de construir a " +"caixa de diálogo novamente se precisar ser acessada posteriormente. " +"Alternativamente, o método :meth:`Gtk.Widget.destroy` pode ser usado para " +"excluir o diálogo da memória, uma vez que não é mais necessário. Deve ser " +"notado que se o diálogo precisar ser acessado depois de ter sido destruído, " +"ele precisará ser construído novamente, caso contrário a janela de diálogo " +"estará vazia." + +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "" + +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." +msgstr "" +":class:`Gtk.MessageDialog` é uma classe de conveniência, usada para criar " +"diálogos de mensagem simples e padrão, com uma mensagem, um ícone e botões " +"para resposta do usuário. Você pode especificar o tipo de mensagem e o texto " +"no construtor :class:`Gtk.MessageDialog`, além de especificar botões padrão." + +#: ../../source/dialogs.txt:60 +msgid "" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." +msgstr "" +"Em alguns diálogos que requerem alguma explicação adicional do que " +"aconteceu, um texto secundário pode ser adicionado. Nesse caso, a mensagem " +"principal inserida ao criar a caixa de diálogo da mensagem é maior e " +"definida como texto em negrito. A mensagem secundária pode ser definida " +"chamando :meth:`Gtk.MessageDialog.format_secondary_text`." + +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "" + +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +msgstr "" +"O :class:`Gtk.FileChooserDialog` é adequado para uso com itens de menu " +"\"Arquivo/Abrir\" ou \"Arquivo/Salvar\". Você pode usar todos os métodos :" +"class:`Gtk.FileChooser` no diálogo do seletor de arquivos, assim como " +"aqueles para :class:`Gtk.Dialog`." + +#: ../../source/dialogs.txt:80 +msgid "" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" +msgstr "" +"Ao criar um :class:`Gtk.FileChooserDialog` você precisa definir o propósito " +"do diálogo:" + +#: ../../source/dialogs.txt:83 +msgid "" +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" +msgstr "" +"Para selecionar um arquivo para abertura, como para um comando Arquivo/" +"Abrir, use :attr:`Gtk.FileChooserAction.OPEN`" + +#: ../../source/dialogs.txt:85 +msgid "" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." +msgstr "" +"Para salvar um arquivo pela primeira vez, como para um comando Arquivo/" +"Salvar, use :attr:`Gtk.FileChooserAction.SAVE` e sugira um nome como " +"\"Untitled\"com :meth:`Gtk.FileChooser.set_current_name`." + +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." +msgstr "" +"Para salvar um arquivo com um nome diferente, como para um comando Arquivo/" +"Salvar como, use :attr:`Gtk.FileChooserAction.SAVE` e defina o nome do " +"arquivo existente como :meth:`Gtk.FileChooser.set_filename`." + +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." +msgstr "" +"Para escolher uma pasta em vez de um arquivo, use :attr:`Gtk." +"FileChooserAction.SELECT_FOLDER`." + +#: ../../source/dialogs.txt:93 +msgid "" +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" +msgstr "" +":class:`Gtk.FileChooserDialog` herda de :class:`Gtk.Dialog`, então os botões " +"possuem IDs de resposta como :attr:`Gtk.ResponseType.ACCEPT` e :attr:`Gtk." +"ResponseType.CANCEL`, que pode ser especificado no construtor :class:`Gtk." +"FileChooserDialog`. Em contraste com :class:`Gtk.Dialog`, você não pode usar " +"códigos de resposta customizados com :class:`Gtk.FileChooserDialog`. Espera " +"que pelo menos um botão tenha os seguintes IDs de resposta:" + +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr "" + +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr "" + +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr "" + +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr "" + +#: ../../source/dialogs.txt:105 +msgid "" +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." +msgstr "" +"Quando o usuário terminar de selecionar arquivos, seu programa pode obter os " +"nomes selecionados como nomes de arquivos (:meth:`Gtk.FileChooser." +"get_filename`) ou como URIs (:meth:`Gtk.FileChooser.get_uri`)." + +#: ../../source/dialogs.txt:109 +msgid "" +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." +msgstr "" +"Por padrão, :class:`Gtk.FileChooser` permite apenas que um único arquivo " +"seja selecionado por vez. Para permitir que vários arquivos sejam " +"selecionados, use :meth:`Gtk.FileChooser.set_select_multiple`. Recuperar uma " +"lista de arquivos selecionados é possível com :meth:`Gtk.FileChooser." +"get_filenames` ou :meth:`Gtk.FileChooser.get_uris`." + +#: ../../source/dialogs.txt:115 +msgid "" +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." +msgstr "" +":class:`Gtk.FileChooser` também suporta uma variedade de opções que tornam " +"os arquivos e pastas mais configuráveis e acessíveis." + +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +msgstr "" +":meth:`Gtk.FileChooser.set_local_only`: Somente arquivos locais podem ser " +"selecionados." + +#: ../../source/dialogs.txt:119 +msgid "" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +msgstr "" +":meth:`Gtk.FileChooser.show_hidden`: arquivos e pastas ocultos são exibidos." + +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." +msgstr "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Se o seletor de " +"arquivos foi configurado no modo :attr:`Gtk.FileChooserAction.SAVE`, ele " +"apresentará um diálogo de confirmação se o usuário digitar um nome de " +"arquivo que já existe." + +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." +msgstr "" +"Além disso, você pode especificar quais tipos de arquivos são exibidos " +"criando objetos :class:`Gtk.FileFilter` e chamando :meth:`Gtk.FileChooser." +"add_filter`. O usuário pode selecionar um dos filtros adicionados em uma " +"caixa de combinação na parte inferior do seletor de arquivos." diff --git a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po new file mode 100644 index 0000000..00f9d84 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po @@ -0,0 +1,223 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 04:04-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "Arraste e solte" + +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." +msgstr "" +"As versões do PyGObject < 3.0.3 contêm um bug que não permite arrastar e " +"soltar para funcionar corretamente. Portanto, uma versão do PyGObject >= " +"3.0.3 é necessária para os exemplos a seguir funcionarem." + +#: ../../source/drag_and_drop.txt:8 +msgid "" +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." +msgstr "" +"Configurar arrastar e soltar entre widgets consiste em selecionar uma fonte " +"de arrasto (o widget do qual o usuário começa a arrastar) com o método :meth:" +"`Gtk.Widget.drag_source_set`, selecionando um destino de arrasto (o widget " +"que o usuário coloca em) com o método :meth:`Gtk.Widget.drag_dest_set` e " +"depois manipular os sinais relevantes em ambos os widgets." + +#: ../../source/drag_and_drop.txt:14 +msgid "" +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +msgstr "" +"Em vez de usar :meth:`Gtk.Widget.drag_source_set` e :meth:`Gtk.Widget." +"drag_dest_set` alguns widgets especializados requerem o uso de funções " +"específicas (como :class:`Gtk.TreeView` e :class:`Gtk.IconView`)." + +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +msgstr "" +"Um arrastar e soltar básico requer apenas que a fonte se conecte ao sinal " +"\"drag-data-get\" e que o destino se conecte ao sinal \"drag-data-received" +"\". Coisas mais complexas, como áreas de queda específicas e ícones de " +"arrastar personalizados, exigirão que você se conecte a :ref:`sinais " +"adicionais ` e interaja com o objeto :class:`Gdk.DragContext` " +"que fornece." + +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +msgstr "" +"Para transferir dados entre a origem e o destino, você deve interagir com a " +"variável :class:`Gtk.SelectionData` fornecida no :ref:`\"drag-data-get\" " +"` e sinais de :ref:`\"drag-data-received\" ` " +"usando os métodos get e set :class:`Gtk.SelectionData`." + +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "Alvos de Entrada" + +#: ../../source/drag_and_drop.txt:31 +msgid "" +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." +msgstr "" +"Para permitir que a fonte de arrastar e o destino saibam quais dados estão " +"recebendo e enviando, uma lista comum de :class:`Gtk.TargetEntry's ` é necessária. A :class:`Gtk.TargetEntry` descreve um dado que " +"será enviado pela fonte de arrasto e recebido pelo destino do arrasto." + +#: ../../source/drag_and_drop.txt:36 +msgid "" +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." +msgstr "" +"Existem duas maneiras de adicionar :class:`Gtk.TargetEntry's ` a uma origem e destino. Se o arrastar e soltar for simples e " +"cada entrada de destino for de um tipo diferente, você pode usar o grupo de " +"métodos mencionado aqui :meth:``." + +#: ../../source/drag_and_drop.txt:41 +msgid "" +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +msgstr "" +"Se você precisar de mais de um tipo de dados ou quiser fazer coisas mais " +"complexas com os dados, você precisará criar o :class:`Gtk.TargetEntry's " +"` usando o método :meth:`Gtk.TargetEntry.new`." + +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "Sinais de Origem do Arrasto" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "Nome" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "Quando é emitido" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "Propósito comum" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "Usuário inicia um arrasto" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "Configurar ícone de arrastar" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "Quando dados arrastados são solicitados pelo destino" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "Transferir dados de arrastar da origem para o destino" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "Quando um arrasto com a ação Gdk.DragAction.MOVE é concluído" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "Excluir dados da fonte para completar o 'movimento'" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "Quando o arrasto estiver completo" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "Desfazer qualquer coisa feita no drag-begin" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "Sinais de Destino do Arrasto" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "O ícone de arrasto se move sobre uma área de soltar" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "Permitir que apenas algumas áreas sejam soltas" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "O ícone é solto em uma área de arrasto" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "Quando dados arrastados são recebidos pelo destino" + +#: ../../source/drag_and_drop.txt:74 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/entry.po b/translations/locale/pt_BR/LC_MESSAGES/entry.po new file mode 100644 index 0000000..377ee7a --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/entry.po @@ -0,0 +1,94 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 06:03-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/entry.txt:2 +msgid "Entry" +msgstr "" + +#: ../../source/entry.txt:4 +msgid "" +"Entry widgets allow the user to enter text. You can change the contents with " +"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " +"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " +"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." +msgstr "" +"Widgets de entrada permitem que o usuário insira texto. Você pode alterar o " +"conteúdo com o método :meth:`Gtk.Entry.set_text` e ler o conteúdo atual com " +"o método :meth:`Gtk.Entry.get_text`. Você também pode limitar o número de " +"caracteres que a Entrada pode receber chamando :meth:`Gtk.Entry." +"set_max_length`." + +#: ../../source/entry.txt:9 +msgid "" +"Occasionally you might want to make an Entry widget read-only. This can be " +"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." +msgstr "" +"Ocasionalmente, você pode querer tornar um widget de Entrada somente " +"leitura. Isto pode ser feito passando ``False`` para o método :meth:`Gtk." +"Entry.set_editable`." + +#: ../../source/entry.txt:12 +msgid "" +"Entry widgets can also be used to retrieve passwords from the user. It is " +"common practice to hide the characters typed into the entry to prevent " +"revealing the password to a third party. Calling :meth:`Gtk.Entry." +"set_visibility` with ``False`` will cause the text to be hidden." +msgstr "" +"Os widgets de entrada também podem ser usados para recuperar senhas do " +"usuário. É uma prática comum ocultar os caracteres digitados na entrada para " +"evitar revelar a senha a terceiros. Chamando :meth:`Gtk.Entry." +"set_visibility` com ``False`` fará com que o texto fique oculto." + +#: ../../source/entry.txt:17 +msgid "" +":class:`Gtk.Entry` has the ability to display progress or activity " +"information behind the text. This is similar to :class:`Gtk.ProgressBar` " +"widget and is commonly found in web browsers to indicate how much of a page " +"download has been completed. To make an entry display such information, use :" +"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." +msgstr "" +":class:`Gtk.Entry` tem a capacidade de exibir informações de progresso ou " +"atividade por trás do texto. Isso é semelhante ao widget :class:`Gtk." +"ProgressBar` e é comumente encontrado em navegadores da Web para indicar " +"quanto de um download de página foi concluído. Para fazer uma entrada exibir " +"tais informações, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk." +"Entry.set_progress_pulse_step` ou :meth:`Gtk.Entry.progress_pulse`." + +#: ../../source/entry.txt:24 +msgid "" +"Additionally, an Entry can show icons at either side of the entry. These " +"icons can be activatable by clicking, can be set up as drag source and can " +"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " +"or one of the various other functions that set an icon from an icon name, a " +"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` or the corresponding function for markup." +msgstr "" +"Além disso, uma entrada pode mostrar ícones em ambos os lados da entrada. " +"Esses ícones podem ser ativados clicando, podem ser configurados como fonte " +"de arrastar e podem ter dicas de ferramentas. Para adicionar um ícone, use :" +"meth:`Gtk.Entry.set_icon_from_icon_name` ou uma das várias outras funções " +"que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de " +"ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` ou a função correspondente para marcação." + +#: ../../source/entry.txt:32 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/iconview.po b/translations/locale/pt_BR/LC_MESSAGES/iconview.po new file mode 100644 index 0000000..7f1714b --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/iconview.po @@ -0,0 +1,63 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:19-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "" + +#: ../../source/iconview.txt:3 +msgid "" +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." +msgstr "" +"A :class:`Gtk.IconView` é um widget que exibe uma coleção de ícones em uma " +"visualização de grade. Ele suporta recursos como arrastar e soltar, seleções " +"múltiplas e reordenação de itens." + +#: ../../source/iconview.txt:5 +msgid "" +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +msgstr "" +"Similarmente a :class:`Gtk.TreeView`, :class:`Gtk.IconView` usa um :class:" +"`Gtk.ListStore` para seu modelo. Em vez de usar :ref:`renderizadores de " +"célula `, :class:`Gtk.IconView` requer que uma das colunas em " +"seu :class:`Gtk.ListStore` contenha objetos :class:`GdkPixbuf.Pixbuf`." + +#: ../../source/iconview.txt:7 +msgid "" +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." +msgstr "" +":class:`Gtk.IconView` suporta vários modos de seleção para permitir a " +"seleção de vários ícones por vez, restringindo seleções para apenas um item " +"ou desaprovando a seleção de itens completamente. Para especificar um modo " +"de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " +"dos modos de seleção :class:`Gtk.SelectionMode`." + +#: ../../source/iconview.txt:10 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/index.po b/translations/locale/pt_BR/LC_MESSAGES/index.po new file mode 100644 index 0000000..9b11d14 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/index.po @@ -0,0 +1,107 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-27 18:50-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "O tutorial do Python GTK+ 3" + +#: ../../source/index.txt:0 +msgid "Release" +msgstr "" + +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Date" +msgstr "" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "" + +#: ../../source/index.txt:11 +msgid "" +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" +msgstr "" +"GNU Free Documentation License 1.3 sem Seções Invariantes, Textos de Capa " +"Frontal e Textos de Contra-capa" + +#: ../../source/index.txt:13 +msgid "" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +msgstr "" +"Este tutorial fornece uma introdução à criação de aplicativos GTK + 3 no " +"Python." + +#: ../../source/index.txt:15 +msgid "" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." +msgstr "" +"Antes de trabalhar com este tutorial, é recomendável que você tenha uma " +"compreensão razoável da linguagem de programação Python. A programação GUI " +"introduz novos problemas em comparação com a interação com a saída padrão " +"(console / terminal). É necessário que você saiba como criar e executar " +"arquivos Python, entender os erros básicos do interpretador e trabalhar com " +"strings, inteiros, floats e valores booleanos. Para os widgets mais " +"avançados neste tutorial, serão necessários bons conhecimentos de listas e " +"tuplas." + +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." +msgstr "" +"Embora este tutorial descreva as classes e métodos mais importantes dentro " +"do GTK + 3, ele não deve servir como uma referência da API. Por favor, " +"consulte o `Manual de Referência do GTK+ 3 `_ para uma descrição detalhada da API. Também há uma referência " +"específica ao Python `_ disponível." + +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "Conteúdo:" + +#: ../../source/index.txt:59 +msgid "Deprecated" +msgstr "Descontinuada" + +#: ../../source/index.txt:67 +msgid "Indices and tables" +msgstr "Índices e tabelas" + +#: ../../source/index.txt:69 +msgid ":ref:`search`" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/install.po b/translations/locale/pt_BR/LC_MESSAGES/install.po new file mode 100644 index 0000000..ea642d0 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/install.po @@ -0,0 +1,142 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "Instalação" + +#: ../../source/install.txt:5 +msgid "" +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in " +"your application, use `PyGTK`_, instead." +msgstr "" +"O primeiro passo antes de começarmos com a codificação atual consiste em " +"configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " +"que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " +"como o GTK+, dentro do Python. Ele suporta exclusivamente o GTK+ versão 3 ou " +"posterior. Se você quiser usar o GTK+ 2 em sua aplicação, use `PyGTK`_." + +#: ../../source/install.txt:13 +msgid "Dependencies" +msgstr "Dependências" + +#: ../../source/install.txt:15 +msgid "GTK+3" +msgstr "" + +#: ../../source/install.txt:17 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "Python 2 (2.6 ou posterior) ou Python 3 (3.1 ou posterior)" + +#: ../../source/install.txt:19 +msgid "gobject-introspection" +msgstr "" + +#: ../../source/install.txt:22 +msgid "Prebuilt Packages" +msgstr "Pacotes pré-construídos" + +#: ../../source/install.txt:23 +msgid "" +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." +msgstr "" +"Versões recentes do PyGObject e suas dependências são empacotadas por quase " +"todas as principais distribuições do Linux. Então, se você usa o Linux, você " +"provavelmente pode começar instalando o pacote a partir do repositório " +"oficial da sua distribuição." + +#: ../../source/install.txt:29 +msgid "Installing From Source" +msgstr "Instalando a partir da origem" + +#: ../../source/install.txt:30 +msgid "" +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." +msgstr "" +"A maneira mais fácil de instalar o PyGObject a partir do código-fonte é " +"usando o `JHBuild`_. Ele é projetado para criar facilmente pacotes de código-" +"fonte e descobrir quais dependências precisam ser construídas e em que " +"ordem. Para configurar o JHBuild, por favor, siga o `manual do JHBuild`_." + +#: ../../source/install.txt:34 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +msgstr "" +"Depois de ter instalado o JHBuild com sucesso, baixe a configuração mais " +"recente de [#]_. Copie os arquivos com o sufixo `.modules` para o diretório " +"de módulos do JHBuild e o arquivo `sample-tarball.jhbuildrc` para `~/." +"jhbuildrc`." + +#: ../../source/install.txt:38 +msgid "" +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" +msgstr "" +"Se você não tiver feito isso antes, verifique se o seu ambiente de " +"compilação está configurado corretamente executando:" + +#: ../../source/install.txt:43 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." +msgstr "" +"Ele imprimirá todos os aplicativos e bibliotecas que estiverem ausentes no " +"seu sistema, mas necessários para construção. Você deve instalá-los usando o " +"repositório de pacotes da sua distribuição. Uma lista de `nomes de pacotes " +"` _ para " +"diferentes distribuições é mantida no wiki GNOME. Execute o comando acima " +"novamente para garantir que as ferramentas necessárias estejam presentes." + +#: ../../source/install.txt:49 +msgid "" +"Executing the following command will build PyGObject and all its " +"dependencies::" +msgstr "" +"Executando o seguinte comando irá construir o PyGObject e todas as suas " +"dependências::" + +#: ../../source/install.txt:53 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "" +"Finalmente, você pode querer instalar o GTK+ a partir do código fonte::" + +#: ../../source/install.txt:57 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "" +"Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, execute::" + +#: ../../source/install.txt:66 +msgid "https://download.gnome.org/teams/releng/" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/introduction.po b/translations/locale/pt_BR/LC_MESSAGES/introduction.po new file mode 100644 index 0000000..3d3b666 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/introduction.po @@ -0,0 +1,142 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-29 00:54-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "Começando" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "Exemplo Simples" + +#: ../../source/introduction.txt:9 +msgid "" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." +msgstr "" +"Para começar com o nosso tutorial, criamos o programa mais simples " +"possível. Este programa irá criar uma janela vazia de 200 x 200 pixels." + +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "Vamos agora explicar cada linha do exemplo." + +#: ../../source/introduction.txt:22 +msgid "" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +msgstr "" +"No começo, temos que importar o módulo Gtk para poder acessar as classes e " +"funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK" +"+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos " +"o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, " +"que é o propósito da declaração ``gi.require_version('Gtk', '3.0')``." + +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "A próxima linha cria uma janela vazia." + +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" +"Seguido conectando-se ao evento de exclusão da janela para garantir que o " +"aplicativo seja encerrado se clicarmos no *x* para fechar a janela." + +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "Na próxima etapa, exibimos a janela." + +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 5)." +msgstr "" +"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos " +"quando a janela é fechada (veja a linha 5)." + +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" +"Para executar o programa, abra um terminal, mude para o diretório do " +"arquivo e digite::" + +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "Exemplo Estendido" + +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." +msgstr "" +"Para algo um pouco mais útil, aqui está a versão PyGObject do programa " +"clássico \"Hello World\"." + +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." +msgstr "" +"Este exemplo difere do exemplo simples, pois subclassificamos :class:`Gtk." +"Window` para definir nossa própria classe :class:`MyWindow`." + +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" +"No construtor da classe, temos que chamar o construtor da superclasse. Além " +"disso, dizemos para definir o valor da propriedade `title` como `Hello " +"World`." + +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" +"As próximas três linhas são usadas para criar um widget de botão, conectar " +"ao seu sinal de 'clicado' e adicioná-lo como filho à janela de nível " +"superior." + +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" +"Assim, o método :meth:`on_button_clicked` será chamado se você clicar no " +"botão." + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" +"O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " +"invés de criar uma instância da classe genérica :class:`Gtk.Window`, " +"criamos uma instância de :class:`MyWindow`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/label.po b/translations/locale/pt_BR/LC_MESSAGES/label.po new file mode 100644 index 0000000..60dbb68 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/label.po @@ -0,0 +1,120 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 04:29-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/label.txt:2 +msgid "Label" +msgstr "" + +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" +"Os rótulos são o principal método de colocar texto não editável nas janelas, " +"por exemplo, para colocar um título ao lado de um widget :class:`Gtk.Entry`. " +"Você pode especificar o texto no construtor, ou mais tarde com os métodos :" +"meth:`Gtk.Label.set_text` ou :meth:`Gtk.Label.set_markup`." + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" +"A largura da etiqueta será ajustada automaticamente. Você pode produzir " +"rótulos de várias linhas colocando as quebras de linha (\"\\\\n\") na " +"sequência de rótulos." + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" +"Os rótulos podem ser feitos selecionáveis com :meth:`Gtk.Label." +"set_selectable`. Rótulos selecionáveis permitem que o usuário copie o " +"conteúdo do rótulo para a área de transferência. Somente os rótulos que " +"contêm informações úteis para copiar, como mensagens de erro, devem ser " +"selecionáveis." + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" +"O texto do rótulo pode ser justificado usando o método :meth:`Gtk.Label." +"set_justify`. O widget também é capaz de quebra automática de palavras, que " +"pode ser ativado com :meth:`Gtk.Label.set_line_wrap`." + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" +":class:`Gtk.Label` suporta algumas formatações simples, por exemplo, " +"permitindo que você crie algum texto em negrito, colorido ou maior. Você " +"pode fazer isso fornecendo uma string para :meth:`Gtk.Label.set_markup`, " +"usando a sintaxe de marcação do Pango [#pango]_. Por exemplo, ``texto em " +"negrito e texto tachado``. Além disso, :class:`Gtk.Label` suporta " +"hiperlinks clicáveis. A marcação para links é emprestada do HTML, usando os " +"atributos a com href e title. O GTK+ renderiza links semelhantes ao modo " +"como aparecem nos navegadores da web, com texto colorido e sublinhado. O " +"atributo de título é exibido como uma dica de ferramenta no link." + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" +"Os rótulos podem conter *mnemônicos*. Os mnemônicos são caracteres " +"sublinhados no rótulo, usados para navegação pelo teclado. Os mnemônicos são " +"criados fornecendo uma string com um sublinhado antes do caractere " +"mnemônico, como \"_File\", para as funções :meth:`Gtk.Label." +"new_with_mnemonic` ou :meth:`Gtk.Label.set_text_with_mnemonic`. Os " +"mnemônicos ativam automaticamente qualquer widget ativável em que o rótulo " +"esteja dentro, como um :class:`Gtk.Button`; se o rótulo não estiver dentro " +"do widget de destino do mnemônico, você deve informar o rótulo sobre o " +"destino usando :meth:`Gtk.Label.set_mnemonic_widget`." + +#: ../../source/label.txt:48 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, http://developer.gnome.org/pango/stable/" +"PangoMarkupFormat.html" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po new file mode 100644 index 0000000..3168501 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po @@ -0,0 +1,76 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 06:33-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "Tabela" + +#: ../../source/layout-table.txt:4 +msgid "" +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." +msgstr "" +":class:`Gtk.Table` foi descontinuado desde o GTK+ versão 3.4 e não deve ser " +"usado em código recém-escrito. Use a classe :ref:`layout-grid`." + +#: ../../source/layout-table.txt:8 +msgid "" +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +msgstr "" +"Tabelas nos permite colocar widgets em uma grade similar a :class:`Gtk.Grid`." + +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +msgstr "" +"As dimensões da grade precisam ser especificadas no construtor :class:`Gtk." +"Table`. Para colocar um widget em uma caixa, use :meth:`Gtk.Table.attach`." + +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." +msgstr "" +":meth:`Gtk.Table.set_row_spacing` e :meth:`Gtk.Table.set_col_spacing` " +"definem o espaçamento entre as linhas na linha ou coluna especificada. " +"Observe que, para colunas, o espaço vai para a direita da coluna e, para " +"linhas, o espaço fica abaixo da linha." + +#: ../../source/layout-table.txt:18 +msgid "" +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." +msgstr "" +"Você também pode definir um espaçamento consistente para todas as linhas e/" +"ou colunas com :meth:`Gtk.Table.set_row_spacings` e :meth:`Gtk.Table." +"set_col_spacings`. Observe que, com essas chamadas, a última linha e a " +"última coluna não recebem espaçamento." + +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." + +#: ../../source/layout-table.txt:26 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout.po b/translations/locale/pt_BR/LC_MESSAGES/layout.po new file mode 100644 index 0000000..1beaad3 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/layout.po @@ -0,0 +1,449 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-30 02:36-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "Containers de Layout" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" +"Enquanto muitos toolkits GUI exigem que você coloque precisamente widgets em " +"uma janela, usando posicionamento absoluto, o GTK+ usa uma abordagem " +"diferente. Em vez de especificar a posição e o tamanho de cada widget na " +"janela, você pode organizar seus widgets em linhas, colunas e/ou tabelas. O " +"tamanho da sua janela pode ser determinado automaticamente, com base nos " +"tamanhos dos widgets que ela contém. E os tamanhos dos widgets, por sua vez, " +"são determinados pela quantidade de texto que eles contêm, ou os tamanhos " +"mínimo e máximo que você especifica, e/ou como você solicitou que o espaço " +"disponível seja compartilhado entre conjuntos de widgets. Você pode " +"aperfeiçoar seu layout especificando a distância de preenchimento e os " +"valores de centralização para cada um de seus widgets. O GTK+ usa todas " +"essas informações para redimensionar e reposicionar tudo de maneira sensata " +"e suave quando o usuário manipula a janela." + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" +"O GTK+ organiza widgets hierarquicamente, usando *containers*. Eles são " +"invisíveis para o usuário final e são inseridos em uma janela ou colocados " +"entre si para os componentes do layout. Existem dois tipos de contêineres: " +"contêineres filho único, todos descendentes de :class:`Gtk.Bin` e " +"contêineres com vários filhos, que são descendentes de :class:`Gtk." +"Container`. Os mais usados são caixas verticais ou horizontais (:class:`Gtk." +"Box`) e grades (:class:`Gtk.Grid`)." + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" +"Caixas são contêineres invisíveis nos quais podemos empacotar nossos " +"widgets. Ao agrupar widgets em uma caixa horizontal, os objetos são " +"inseridos horizontalmente da esquerda para a direita ou da direita para a " +"esquerda, dependendo se :meth:`Gtk.Box.pack_start` ou :meth:`Gtk.Box." +"pack_end` for usado. Em uma caixa vertical, os widgets são empacotados de " +"cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " +"dentro ou ao lado de outras caixas para criar o efeito desejado." + +#: ../../source/layout.txt:40 ../../source/layout.txt:97 +#: ../../source/layout.txt:123 ../../source/layout.txt:156 +#: ../../source/layout.txt:180 ../../source/layout.txt:210 +#: ../../source/layout.txt:230 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" +"Vamos dar uma olhada em uma versão ligeiramente modificada do exemplo " +"estendido com dois botões." + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" +"Primeiro, criamos um contêiner de caixa orientado horizontalmente, onde 6 " +"pixels são colocados entre os filhos. Esta caixa se torna o filho da janela " +"de nível superior." + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "" +"Posteriormente, adicionamos dois botões diferentes ao contêiner da caixa." + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" +"Enquanto com os widgets :meth:`Gtk.Box.pack_start` estão posicionados da " +"esquerda para a direita, :meth:`Gtk.Box.pack_end` os posiciona da direita " +"para a esquerda." + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" +":class:`Gtk.Grid` é um contêiner que organiza seus widgets filhos em linhas " +"e colunas, mas você não precisa especificar as dimensões no construtor. As " +"crianças são adicionadas usando :meth:`Gtk.Grid.attach`. Eles podem abranger " +"várias linhas ou colunas. O método :meth:`Gtk.Grid.attach` usa cinco " +"parâmetros:" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "O parâmetro ``child`` é o :class:`Gtk.Widget` para adicionar." + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "" +"`` left`` é o número da coluna para anexar o lado esquerdo de ``child`` em." + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "" +"`` top`` indica o número da linha para anexar o lado superior do ``child``." + +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." +msgstr "" +"`` width`` e ``height`` indicam o número de colunas que o ``child`` irá " +"abranger, e o número de linhas que o ``child`` irá abranger, respectivamente." + +#: ../../source/layout.txt:79 +msgid "" +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +msgstr "" +"Também é possível adicionar um child ao lado de um child existente, usando :" +"meth:`Gtk.Grid.attach_next_to`, que também usa cinco parâmetros:" + +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "``child`` é o :class:`Gtk.Widget` para adicionar, como acima." + +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" +"``sibling`` é um widget filho existente de ``self`` (uma instância :class:" +"`Gtk.Grid`) ou ``None``. O widget ``child`` será colocado próximo ao " +"``sibling``, ou se ``sibling`` for ``None``, no início ou no final da grade." + +#: ../../source/layout.txt:86 +msgid "" +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." +msgstr "" +"``side`` é um :class:`Gtk.PositionType` indicando o lado do ``sibling`` que " +"``child`` é posicionado ao lado de." + +#: ../../source/layout.txt:88 +msgid "" +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." +msgstr "" +"``width`` e ``height`` indicam o número de colunas e linhas que o widget " +"``child`` abrangerá, respectivamente." + +#: ../../source/layout.txt:91 +msgid "" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." +msgstr "" +"Finalmente, :class:`Gtk.Grid` pode ser usado como :class:`Gtk.Box` usando " +"apenas :meth:`Gtk.Grid.add`, que colocará as crianças uma ao lado da outra " +"na direção determinada por a propriedade \"orientação\" (o padrão é :attr:" +"`Gtk.Orientation.HORIZONTAL`)." + +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "" + +#: ../../source/layout.txt:107 +msgid "" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" +"A :class:`Gtk.ListBox` é um contêiner vertical que contém :class:`Gtk." +"ListBoxRow` filhos. Essas linhas podem ser classificadas e filtradas " +"dinamicamente e os cabeçalhos podem ser adicionados dinamicamente, " +"dependendo do conteúdo da linha. Também permite navegação e seleção de " +"teclado e mouse como uma lista típica." + +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." +msgstr "" +"Usar :class:`Gtk.ListBox` é muitas vezes uma alternativa para :class:`Gtk." +"TreeView`, especialmente quando o conteúdo da lista tem um layout mais " +"complicado do que o permitido por um :class:`Gtk.CellRenderer`, ou quando o " +"conteúdo é interativo (ou seja, tem um botão)." + +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." +msgstr "" +"Embora um :class:`Gtk.ListBox` deva ter apenas :class:`Gtk.ListBoxRow` " +"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." +"Container.add` e um :class:`Gtk.ListBoxRow` widget será automaticamente " +"inserido entre a lista e o widget." + +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "" + +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." +msgstr "" +"A :class:`Gtk.Stack` é um contêiner que mostra apenas um de seus filhos por " +"vez. Em contraste com :class:`Gtk.Notebook`, :class:`Gtk.Stack` não fornece " +"um meio para os usuários alterarem o filho visível. Em vez disso, o widget :" +"class:`Gtk.StackSwitcher` pode ser usado com :class:`Gtk.Stack` para " +"fornecer essa funcionalidade." + +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." +msgstr "" +"Transições entre páginas podem ser animadas como slides ou fades. Isso pode " +"ser controlado com :meth:`Gtk.Stack.set_transition_type`. Essas animações " +"respeitam a configuração \"gtk-enable-animations\"." + +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" +msgstr "" +"A velocidade de transição pode ser ajustada com :meth:`Gtk.Stack." +"set_transition_duration`" + +#: ../../source/layout.txt:145 +msgid "" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." +msgstr "" +"O widget :class:`Gtk.StackSwitcher` atua como um controlador para um :class:" +"`Gtk.Stack`; Ele mostra uma linha de botões para alternar entre as várias " +"páginas do widget de pilha associado." + +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." +msgstr "" +"Todo o conteúdo para os botões vem das propriedades filho do :class:`Gtk." +"Stack`." + +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." +msgstr "" +"É possível associar múltiplos widgets :class:`Gtk.StackSwitcher` com o mesmo " +"widget :class:`Gtk.Stack`." + +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "" + +#: ../../source/layout.txt:166 +msgid "" +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." +msgstr "" +"A :class:`Gtk.HeaderBar` é semelhante a uma horizontal :class:`Gtk.Box`, " +"permite colocar filhos no início ou no final. Além disso, permite que um " +"título seja exibido. O título será centrado em relação à largura da caixa, " +"mesmo que os filhos de ambos os lados ocupem diferentes quantidades de " +"espaço." + +#: ../../source/layout.txt:171 +msgid "" +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." +msgstr "" +"Como o GTK+ agora suporta o Client Side Decoration, um :class:`Gtk." +"HeaderBar` pode ser usado no lugar da barra de título (que é renderizada " +"pelo Gerenciador de Janelas)." + +#: ../../source/layout.txt:174 +msgid "" +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." +msgstr "" +"A :class:`Gtk.HeaderBar` geralmente está localizado na parte superior de uma " +"janela e deve conter controles comumente usados que afetam o conteúdo " +"abaixo. Eles também fornecem acesso a controles de janela, incluindo o botão " +"de fechar janela e o menu de janela." + +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "" + +#: ../../source/layout.txt:190 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." +msgstr "" +"A :class:`Gtk.FlowBox` é um contêiner que posiciona widgets filhos em " +"sequência de acordo com sua orientação." + +#: ../../source/layout.txt:193 +msgid "" +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." +msgstr "" +"Por exemplo, com a orientação horizontal, os widgets serão organizados da " +"esquerda para a direita, iniciando uma nova linha na linha anterior, quando " +"necessário. Reduzir a largura neste caso exigirá mais linhas, portanto, uma " +"altura maior será solicitada." + +#: ../../source/layout.txt:198 +msgid "" +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." +msgstr "" +"Da mesma forma, com a orientação vertical, os widgets serão organizados de " +"cima para baixo, iniciando uma nova coluna à direita quando necessário. " +"Reduzir a altura exigirá mais colunas, portanto será solicitada uma largura " +"maior." + +#: ../../source/layout.txt:202 +msgid "" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." +msgstr "" +"Os filhos de uma :class:`Gtk.FlowBox` podem ser classificados e filtrados " +"dinamicamente." + +#: ../../source/layout.txt:204 +msgid "" +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" +"Embora um :class:`Gtk.FlowBox` deva ter apenas :class:`Gtk.FlowBoxChild` " +"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." +"Container.add`, e a :class:`Gtk.FlowBoxChild`, o widget será " +"automaticamente inserido entre a caixa e o widget." + +#: ../../source/layout.txt:218 +msgid "Notebook" +msgstr "" + +#: ../../source/layout.txt:220 +msgid "" +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." +msgstr "" +"O widget :class:`Gtk.Notebook` é um :class:`Gtk.Container` cujos filhos são " +"páginas que podem ser alternadas usando rótulos de guias ao longo de uma " +"borda." + +#: ../../source/layout.txt:222 +msgid "" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." +msgstr "" +"Existem muitas opções de configuração para o GtkNotebook. Entre outras " +"coisas, você pode escolher em qual borda as abas aparecem (veja :meth:`Gtk." +"Notebook.set_tab_pos`), se houver muitas abas para caber no notebook, elas " +"devem ser maiores ou setas de rolagem serão adicionadas (veja :meth:`Gtk." +"Notebook.set_scrollable`, e se haverá um menu pop-up que permita aos " +"usuários trocar de página (veja :meth:`Gtk.Notebook.popup_enable`, :meth:" +"`Gtk.Notebook.popup_disable`)." diff --git a/translations/locale/pt_BR/LC_MESSAGES/menus.po b/translations/locale/pt_BR/LC_MESSAGES/menus.po new file mode 100644 index 0000000..883ae3f --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/menus.po @@ -0,0 +1,218 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 06:03-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/menus.txt:2 +msgid "Menus" +msgstr "" + +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." +msgstr "" +":class:`Gtk.UIManager`, :class:`Gtk.Action` e :class:`Gtk.ActionGroup` foram " +"descontinuados desde o GTK+ versão 3.10 e não devem ser usados em código " +"recém-escrito. Use o framework :ref:`application`." + +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." +msgstr "" +"O GTK+ vem com dois tipos diferentes de menus :class:`Gtk.MenuBar` e :class:" +"`Gtk.Toolbar`. :class:`Gtk.MenuBar` é uma barra de menus padrão que contém " +"uma ou mais instâncias :class:`Gtk.MenuItem` ou uma de suas subclasses. Os " +"widgets :class:`Gtk.Toolbar` são usados para acessibilidade rápida às " +"funções comumente usadas de um aplicativo. Exemplos incluem criar um novo " +"documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " +"mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." + +#: ../../source/menus.txt:17 +msgid "Actions" +msgstr "Ações" + +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." +msgstr "" +"Embora existam APIs específicas para criar menus e barras de ferramentas, " +"você deve usar :class:`Gtk.UIManager` e criar instâncias :class:`Gtk." +"Action`. As ações são organizadas em grupos. A :class:`Gtk.ActionGroup` é " +"essencialmente um mapa de nomes para objetos :class:`Gtk.Action`. Todas as " +"ações que fazem sentido usar em um contexto particular devem estar em um " +"único grupo. Vários grupos de ação podem ser usados para uma interface de " +"usuário específica. Na verdade, espera-se que a maioria dos aplicativos não " +"triviais faça uso de vários grupos. Por exemplo, em um aplicativo que pode " +"editar vários documentos, um grupo mantém ações globais (por exemplo, sair, " +"sobre, novo) e um grupo por documento que contém ações que atuam nesse " +"documento (por exemplo, salvar, recortar/copiar/colar etc. ). Os menus de " +"cada janela seriam construídos a partir de uma combinação de dois grupos de " +"ação." + +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "Existem classes diferentes representando diferentes tipos de ações:" + +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" +msgstr "" +":class:`Gtk.Action`: Uma ação que pode ser acionada por um item de menu ou " +"barra de ferramentas" + +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +msgstr "" +":class:`Gtk.ToggleAction`: Uma ação que pode ser alternada entre dois estados" + +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" +msgstr "" +":class:`Gtk.RadioAction`: Uma ação da qual apenas um em um grupo pode estar " +"ativo" + +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" +msgstr "" +":class:`Gtk.RecentAction`: Uma ação que representa uma lista de arquivos " +"usados recentemente" + +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." +msgstr "" +"Ações representam operações que o usuário pode executar, juntamente com " +"algumas informações sobre como ele deve ser apresentado na interface, " +"incluindo seu nome (não para exibição), seu rótulo (para exibição), um " +"acelerador, se um rótulo também indica uma dica de ferramenta como o retorno " +"que é chamado quando a ação é ativada." + +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" +msgstr "" +"Você pode criar ações chamando um dos construtores diretamente e adicionando-" +"os a um :class:`Gtk.ActionGroup` chamando :meth:`Gtk.ActionGroup.add_action` " +"ou :meth:`Gtk.ActionGroup.add_action_with_accel`, ou chamando uma das " +"funções de conveniência:" + +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr "" + +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr "" + +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr "" + +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "Observe que você deve especificar ações para submenus e itens de menu." + +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "Gerenciador de IU" + +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." +msgstr "" +":class:`Gtk.UIManager` fornece uma maneira fácil de criar menus e barras de " +"ferramentas usando uma descrição `XML-like `_." + +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." +msgstr "" +"Primeiro de tudo, você deve adicionar o :class:`Gtk.ActionGroup` ao UI " +"Manager com :meth:`Gtk.UIManager.insert_action_group`. Neste ponto também é " +"uma boa idéia dizer à janela pai para responder aos atalhos de teclado " +"especificados, usando :meth:`Gtk.UIManager.get_accel_group` e :meth:`Gtk." +"Window.add_accel_group`." + +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." +msgstr "" +"Em seguida, você pode definir o layout visível real dos menus e barras de " +"ferramentas e adicionar o layout da interface do usuário. Essa \"string ui\" " +"usa um formato XML, no qual você deve mencionar os nomes das ações que você " +"já criou. Lembre-se de que esses nomes são apenas os identificadores que " +"usamos ao criar as ações. Eles não são o texto que o usuário verá nos menus " +"e nas barras de ferramentas. Fornecemos esses nomes legíveis quando criamos " +"as ações." + +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." +msgstr "" +"Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " +"e adiciona o widget a um container como :class:`Gtk.Box`." + +#: ../../source/menus.txt:80 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/objects.po b/translations/locale/pt_BR/LC_MESSAGES/objects.po new file mode 100644 index 0000000..70c39d1 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/objects.po @@ -0,0 +1,556 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 18:20-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "" + +#: ../../source/objects.txt:6 +msgid "" +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." +msgstr "" +"O GObject é o tipo fundamental que fornece os atributos e métodos comuns " +"para todos os tipos de objeto no GTK+, no Pango e em outras bibliotecas " +"baseadas no GObject. A classe :class:`GObject.GObject` fornece métodos para " +"construção e destruição de objetos, métodos de acesso a propriedades e " +"suporte a sinais." + +#: ../../source/objects.txt:11 +msgid "" +"This section will introduce some important aspects about the GObject " +"implementation in Python." +msgstr "" +"Esta seção apresentará alguns aspectos importantes sobre a implementação do " +"GObject no Python." + +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "Herdar de GObject.GObject" + +#: ../../source/objects.txt:17 +msgid "" +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." +msgstr "" +"Um GObject nativo é acessível via :class:`GObject.GObject`. É raramente " +"instanciado diretamente, geralmente usamos classes herdadas. A :class:`Gtk." +"Widget` é uma classe herdada de um :class:`GObject.GObject`. Pode ser " +"interessante criar uma classe herdada para criar um novo widget, como uma " +"caixa de diálogo de configurações." + +#: ../../source/objects.txt:22 +msgid "" +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" +msgstr "" +"Para herdar de :class:`GObject.GObject`, você deve chamar :meth:`GObject." +"GObject.__init__` em seu construtor (se a classe herdar de :class:`Gtk." +"Button`, deve chamar :func:`Gtk.Button.__init__` por exemplo), como no " +"exemplo abaixo:" + +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "Sinais" + +#: ../../source/objects.txt:39 +msgid "" +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." +msgstr "" +"Os sinais conectam eventos específicos de aplicativos arbitrários com " +"qualquer número de ouvintes. Por exemplo, no GTK+, cada evento de usuário " +"(pressionamento de tecla ou mouse) é recebido do servidor X e gera um evento " +"GTK+ sob a forma de uma emissão de sinal em uma determinada instância de " +"objeto." + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" +"Cada sinal é registrado no sistema de tipos junto com o tipo no qual ele " +"pode ser emitido: os usuários do tipo são conectados ao sinal em uma " +"determinada instância de tipo quando registram uma função a ser invocada na " +"emissão do sinal. Os usuários também podem emitir o sinal sozinhos ou " +"interromper a emissão do sinal de dentro de uma das funções conectadas ao " +"sinal." + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "Receba sinais" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "Veja :ref:`signals`" + +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "Crie novos sinais" + +#: ../../source/objects.txt:58 +msgid "" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" +msgstr "" +"Novos sinais podem ser criados adicionando-os a :attr:`GObject.GObject." +"__gsignals__`, um dicionário:" + +#: ../../source/objects.txt:61 +msgid "" +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." +msgstr "" +"Quando um novo sinal é criado, um manipulador de método também pode ser " +"definido, ele será chamado toda vez que o sinal for emitido. É chamado " +"do_signal_name." + +#: ../../source/objects.txt:75 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` indica que este sinal invocará o " +"manipulador do método de objeto (:meth:`do_my_signal` aqui) no primeiro " +"estágio de emissão. As alternativas são :const:`GObject.SIGNAL_RUN_LAST` (o " +"manipulador de método será invocado no terceiro estágio de emissão) e :const:" +"`GObject.SIGNAL_RUN_CLEANUP` (invoca o manipulador de método no último " +"estágio de emissão)." + +#: ../../source/objects.txt:81 +msgid "" +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." +msgstr "" +"A segunda parte, ``None``, indica o tipo de retorno do sinal, geralmente " +"``None``." + +#: ../../source/objects.txt:84 +msgid "" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. This argument type list must end with a " +"comma." +msgstr "" +"``(int,)`` indica os argumentos do sinal, aqui, o sinal só receberá um " +"argumento, cujo tipo é int. Essa lista de tipos de argumentos deve terminar " +"com uma vírgula." + +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" + +#: ../../source/objects.txt:96 +msgid "Properties" +msgstr "Propriedades" + +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." +msgstr "" +"Um dos ótimos recursos do GObject é seu mecanismo get/set genérico para " +"propriedades de objetos. Cada classe herdada de :class:`GObject.GObject` " +"pode definir novas propriedades. Cada propriedade tem um tipo que nunca muda " +"(por exemplo, str, float, int ...). Por exemplo, eles são usados para :class:" +"`Gtk.Button` onde existe uma propriedade \"label\" que contém o texto do " +"botão." + +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "Use propriedades existentes" + +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." +msgstr "" +"A classe :class:`GObject.GObject` fornece várias funções úteis para " +"gerenciar propriedades existentes, :func:`GObject.GObject.get_property` e :" +"func:`GObject.GObject.set_property`." + +#: ../../source/objects.txt:109 +msgid "" +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." +msgstr "" +"Algumas propriedades também possuem funções dedicadas a elas, chamadas de " +"getter e setter. Para a propriedade \"label\" de um botão, existem duas " +"funções para obter e configurá-las, :func:`Gtk.Button.get_label` e :func:" +"`Gtk.Button.set_label`." + +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "Crie novas propriedades" + +#: ../../source/objects.txt:116 +msgid "" +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." +msgstr "" +"Uma propriedade é definida com um nome e um tipo. Mesmo se o próprio Python " +"for digitado dinamicamente, você não poderá alterar o tipo de uma " +"propriedade depois que ela for definida. Uma propriedade pode ser criada " +"usando :class:`GObject.Property`." + +#: ../../source/objects.txt:131 +msgid "" +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" +msgstr "" +"As propriedades também podem ser somente leitura, se você quiser que algumas " +"propriedades sejam legíveis, mas não graváveis. Para fazer isso, você pode " +"adicionar alguns sinalizadores à definição da propriedade, para controlar o " +"acesso de leitura/gravação. Sinalizadores são :const:`GObject.ParamFlags." +"READABLE` (somente acesso de leitura para código externo), :const:`GObject." +"ParamFlags.WRITABLE` (somente acesso de gravação), :const:`GObject." +"ParamFlags.READWRITE` (publico):" + +#: ../../source/objects.txt:146 +msgid "" +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" +msgstr "" +"Você também pode definir novas propriedades somente leitura com um novo " +"método decorado com :class:`GObject.Property`:" + +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "Você pode obter essa propriedade usando:" + +#: ../../source/objects.txt:170 +msgid "" +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" +msgstr "" +"A API de :class:`GObject.Property` é semelhante ao construído em :py:func:" +"`property`. Você pode criar o setter de propriedades de maneira semelhante à " +"propriedade Python:" + +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" +msgstr "" +"Há também uma maneira de definir valores mínimos e máximos para números, " +"usando um formulário mais detalhado:" + +#: ../../source/objects.txt:227 +msgid "" +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." +msgstr "" +"As propriedades devem ser definidas em :attr:`GObject.GObject." +"__gproperties__`, um dicionário e manipulado em do_get_property e " +"do_set_property." + +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "Veja as propriedades" + +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" +msgstr "" +"Quando uma propriedade é modificada, um sinal é emitido, cujo nome é " +"\"notify::property-name\":" + +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" +msgstr "" +"Note que você tem que usar o nome da propriedade canônica ao se conectar aos " +"sinais de notificação, como explicado em :func:`GObject.Object.signals." +"notify`. Por exemplo, para uma propriedade Python `foo_bar_baz` você " +"conectaria ao sinal `notify::foo-bar-baz` usando" + +#: ../../source/objects.txt:263 +msgid "API" +msgstr "" + +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "Recupera um valor de propriedade." + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "Configure a propriedade *property_name* para *valor*." + +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" +msgstr "" +"Emitir sinal *signal_name*. Argumentos de sinal devem seguir, por ex. se o " +"seu sinal é do tipo ``(int,)``, deve ser emitido com::" + +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." +msgstr "" +"Este método congela todos os sinais \"notify::\" (que são emitidos quando " +"qualquer propriedade é alterada) até que o método :meth:`thaw_notify` seja " +"chamado." + +#: ../../source/objects.txt:288 +msgid "" +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" +msgstr "" +"Recomenda-se usar a instrução *with* ao chamar :meth:`freeze_notify`, dessa " +"forma é assegurado que :meth:`thaw_notify` é chamado implicitamente no final " +"do bloco::" + +#: ../../source/objects.txt:298 +msgid "" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +msgstr "" +"Descongele todos os sinais \"notify::\" que foram descongelados por :meth:" +"`freeze_notify`." + +#: ../../source/objects.txt:300 +msgid "" +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." +msgstr "" +"Recomenda-se não chamar :meth:`thaw_notify` explicitamente mas use :meth:" +"`freeze_notify` juntamente com a instrução *with*." + +#: ../../source/objects.txt:305 +msgid "" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." +msgstr "" +"Bloqueia um manipulador de uma instância para que ele não seja chamado " +"durante qualquer emissão de sinal, a menos que :meth:`handler_unblock` seja " +"chamado para aquele *handler_id*. Assim, \"bloqueando\" um manipulador de " +"sinal significa desativá-lo temporariamente, um manipulador de sinal precisa " +"ser desbloqueado exatamente na mesma quantidade de vezes que foi bloqueado " +"antes de se tornar ativo novamente." + +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" +msgstr "" +"Recomenda-se usar :meth:`handler_block` em conjunto com a instrução *with* " +"que irá chamar :meth:`handler_unblock` implicitamente no final do bloco::" + +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." +msgstr "" +"Desfaz o efeito de :meth:`handler_block`. Um manipulador bloqueado é " +"ignorado durante as emissões do sinal e não será chamado até que tenha sido " +"desbloqueado exatamente a quantidade de vezes que foi bloqueado antes." + +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." +msgstr "" +"É recomendado não chamar explicitamente :meth:`handler_unblock` mas use :" +"meth:`handler_block` junto com a instrução *with*." + +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "Um dicionário onde a classe herdada pode definir novos sinais." + +#: ../../source/objects.txt:332 +msgid "" +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" +msgstr "" +"Cada elemento no dicionário é um novo sinal. A chave é o nome do sinal. O " +"valor é uma tupla, com o formato:" + +#: ../../source/objects.txt:337 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the list of the parameters of the " +"signal, it must end with a comma." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` pode ser substituído por :const:`GObject." +"SIGNAL_RUN_LAST` ou :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` é o tipo " +"de retorno do sinal. ``(int,)`` é a lista dos parâmetros do sinal, deve " +"terminar com uma vírgula." + +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." +msgstr "" +"O dicionário :attr:`__gproperties__` é uma propriedade de classe onde você " +"define as propriedades do seu objeto. Esta não é a maneira recomendada de " +"definir novas propriedades, o método escrito acima é muito menos detalhado. " +"Os benefícios desse método é que uma propriedade pode ser definida com mais " +"configurações, como o mínimo ou o máximo para números." + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "A chave é o nome da propriedade" + +#: ../../source/objects.txt:354 +msgid "" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" +msgstr "" +"O valor é uma tupla que descreve a propriedade. O número de elementos dessa " +"tupla depende de seu primeiro elemento, mas a tupla sempre conterá pelo " +"menos os seguintes itens:" + +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +msgstr "" +"O primeiro elemento é o tipo da propriedade (por exemplo, ``int``, " +"``float``...)." + +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." +msgstr "" +"O segundo elemento é o apelido da propriedade, que é uma string com uma " +"breve descrição da propriedade. Isso geralmente é usado por programas com " +"fortes recursos de introspecção, como o construtor de interface gráfica de " +"usuário `Glade`_." + +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." +msgstr "" +"A terceira é a descrição da propriedade ou sinopse, que é outra string com " +"uma descrição mais longa da propriedade. Também usado pelo `Glade`_ e " +"programas similares." + +#: ../../source/objects.txt:369 +msgid "" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +msgstr "" +"O último (que não é necessariamente o último, como veremos mais adiante) é o " +"sinalizador da propriedade :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." + +#: ../../source/objects.txt:373 +msgid "" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" +msgstr "" +"O comprimento absoluto da tupla depende do tipo de propriedade (o primeiro " +"elemento da tupla). Assim, temos as seguintes situações:" + +#: ../../source/objects.txt:376 +msgid "" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." +msgstr "" +"Se o tipo for ``bool`` ou ``str``, o quarto elemento é o valor padrão da " +"propriedade." + +#: ../../source/objects.txt:379 +msgid "" +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." +msgstr "" +"Se o tipo for ``int`` ou ``float``, o quarto elemento é o valor mínimo " +"aceito, o quinto elemento é o valor máximo aceito e o sexto elemento é o " +"valor padrão." + +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "Se o tipo não for um desses, não há elemento extra." + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." +msgstr "" +"Invoque o manipulador de método de objeto no primeiro estágio de emissão." + +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." +msgstr "" +"Invoque o manipulador de método de objeto no terceiro estágio de emissão." + +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "" +"Invoque o manipulador do método de objeto no último estágio de emissão." + +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "A propriedade é legível." + +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "A propriedade é gravável." + +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "A propriedade é legível e gravável." diff --git a/translations/locale/pt_BR/LC_MESSAGES/popover.po b/translations/locale/pt_BR/LC_MESSAGES/popover.po new file mode 100644 index 0000000..a4ce2f0 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/popover.po @@ -0,0 +1,83 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 23:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:29-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "" + +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a seperate window used for displaying additional " +"information and are often used as a part of button menus and context menus. " +"Their uses are similar to those of dialog windows with the advantage of " +"being less disruptive and having a connection with the widget the popover is " +"pointing to. Popovers have are visually connected to a related widget with a " +"small triangle." +msgstr "" +"O :class:`Gtk.Popover` é uma janela separada usada para exibir informações " +"adicionais e é frequentemente usada como parte de menus de botão e menus de " +"contexto. Seus usos são semelhantes aos das janelas de diálogo, com a " +"vantagem de ser menos prejudicial e ter uma conexão com o widget para o qual " +"o popover está apontando. Os popovers estão visualmente conectados a um " +"widget relacionado com um pequeno triângulo." + +#: ../../source/popover.txt:10 +msgid "" +"ApPopover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Widget.show_all`." +msgstr "" +"O ApPopover pode ser criado com :class:`Gtk.Popover`; para abrir o popover " +"use :meth:`Gtk.Widget.show_all`." + +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "Popover Personalizado" + +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." +msgstr "" +"Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." +"add`." + +#: ../../source/popover.txt:19 ../../source/popover.txt:34 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "" + +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." +msgstr "" +"Um popover pode ser criado a partir de :class:`Gio.MenuModel` usando :meth:" +"`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" +"`Gtk.Popover.bind_model`." + +#: ../../source/popover.txt:41 +msgid "See Also" +msgstr "Veja também" + +#: ../../source/popover.txt:43 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po new file mode 100644 index 0000000..afbb7df --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po @@ -0,0 +1,92 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:19-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "Barra de Progresso" + +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." +msgstr "" +"O :class:`Gtk.ProgressBar` é normalmente usado para exibir o progresso de " +"uma operação longa. Ele fornece uma pista visual de que o processamento está " +"em andamento. O :class:`Gtk.ProgressBar` pode ser usado em dois modos " +"diferentes: *modo de porcentagem* e *modo de atividade*." + +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." +msgstr "" +"Quando uma aplicação pode determinar quanto trabalho precisa ocorrer (por " +"exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu " +"progresso, ela pode usar :class:`Gtk.ProgressBar` no modo *percentage* e o " +"usuário vê uma barra crescente indicando a porcentagem do trabalho que foi " +"concluído. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.set_fraction` periodicamente para atualizar a barra de " +"progresso, passando um float entre 0 e 1 para fornecer o novo valor " +"percentual." + +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." +msgstr "" +"Quando um aplicativo não tem uma maneira precisa de saber a quantidade de " +"trabalho a ser feito, ele pode usar o *modo de atividade*, que mostra a " +"atividade de um bloco se movendo para frente e para trás na área de " +"progresso. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.pulse` periodicamente para atualizar a barra de progresso. Você " +"também pode escolher o tamanho do passo, com o método :meth:`Gtk.ProgressBar." +"set_pulse_step`." + +#: ../../source/progressbar.txt:24 +msgid "" +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." +msgstr "" +"Por padrão, :class:`Gtk.ProgressBar` é horizontal e da esquerda para a " +"direita, mas você pode alterá-lo para uma barra de progresso vertical usando " +"o método :meth:`Gtk.ProgressBar.set_orientation`. Mudar a direção da barra " +"de progresso pode ser feito usando :meth:`Gtk.ProgressBar.set_inverted`. :" +"class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " +"chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." +"set_show_text`." + +#: ../../source/progressbar.txt:32 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/spinner.po b/translations/locale/pt_BR/LC_MESSAGES/spinner.po new file mode 100644 index 0000000..e3bbfb5 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/spinner.po @@ -0,0 +1,45 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:35-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "" + +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." +msgstr "" +"O :class:`Gtk.Spinner` exibe uma animação giratória do tamanho de um ícone. " +"É frequentemente usado como uma alternativa a :class:`GtkProgressBar` para " +"exibir atividade indefinida, em vez de progresso real." + +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." +msgstr "" +"Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" +"meth:`Gtk.Spinner.stop`." + +#: ../../source/spinner.txt:12 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/stock.po b/translations/locale/pt_BR/LC_MESSAGES/stock.po new file mode 100644 index 0000000..5ac7c97 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/stock.po @@ -0,0 +1,84 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 +# Tutorial package. +# FIRST AUTHOR , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-10 09:47+0000\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.3\n" +"Last-Translator: Tomaz Cunha \n" +"Language-Team: \n" +"Language: pt_BR\n" +"X-Generator: Poedit 1.8.11\n" + +# e121e6594e0e4da9a1621a2377ef4958 +#: ../source/stock.txt:4 +msgid "Stock Items" +msgstr "" + +# 606b231d71674442a3f5d52d748963fa +#: ../source/stock.txt:6 +msgid "" +"Stock items represent commonly-used menu or toolbar items such as \"Open" +"\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs " +"are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are " +"provided to avoid typing mistakes in the strings." +msgstr "" + +# 414f2abe421e4978b47ca5427fb3f106 +# ddb9102f827b473eae086c933a8988da +# f116631764a1416e8d65f881b21f294d +# d6cefcc39cf64f0490a9ac6344093a1f +# 68e79a9579a9477ab9cc07c8831ac586 +# e7154d34aab04729a7c0b6ec84d8997f +# a4ad7d8ce49541d5aef4ca38acda2f75 +# 7205f6fbc7614699813f09ad4ad41b0d +# c7c278f8e45f4a0e90dd8e9f4efba75a +# f731da1a0b0d4a4f90f214d0e3068fad +# 3dcc064472ce433493951bdc676a1de1 +# 401ce8dc69d64ed2979b2c2bbabca805 +# e381d63cbcbb477bb7f54fc8fdedded0 +# a82fab50ef9a490aafffe735117b1b0e +# 4311fbff8eb04d1ababc0ea72a17877b +# 32791b18cb8048b598a5372d03433b5a +#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 +#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 +#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 +#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 +#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 +#: ../source/stock.txt:495 +msgid "LTR variant:" +msgstr "" + +# 856d301cc54844699657d94b81c62f38 +# c828bd161d3947f48d164903af1c15b1 +# fcd887eb429b406d87b598cee2af6456 +# 540c4c3bfb5549b2965d263b6adee0ff +# 8d3280e44d664904a253934d4a763ca8 +# dd41de5058984509aada4b41e5d15292 +# 2752da4a0eee46f49d1c1a8b212cb842 +# 7c3f745178dc46f5b49ef867c7d54c1c +# 7488f736d91c4f109c0b7f17ef0bc955 +# f592f6173a1e4362a78439441cf06a98 +# 3da43acde56548a190140395393f3f7a +# be82f292d16a4b86812d45ff60b39cc1 +# dc857a9abef7449db73e5eefb7bc51ac +# 75afb699f83c480e92f2398247b3bee9 +# b0643da317004916aabc5e5768a55df7 +# 5d2580d604fa4db980345d496d6d95d1 +#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 +#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 +#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 +#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 +#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 +#: ../source/stock.txt:499 +msgid "RTL variant:" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/textview.po b/translations/locale/pt_BR/LC_MESSAGES/textview.po new file mode 100644 index 0000000..55d9d37 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/textview.po @@ -0,0 +1,288 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:32-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "Editor de Texto Multilinha" + +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." +msgstr "" +"O widget :class:`Gtk.TextView` pode ser usado para exibir e editar grandes " +"quantidades de texto formatado. Como o :class:`Gtk.TreeView`, ele possui um " +"design de modelo/visualização. Neste caso, o :class:`Gtk.TextBuffer` é o " +"modelo que representa o texto que está sendo editado. Isto permite que dois " +"ou mais widgets :class:`Gtk.TextView` compartilhem o mesmo :class:`Gtk." +"TextBuffer`, e permite que os buffers de texto sejam exibidos de forma " +"ligeiramente diferente. Ou você pode manter vários buffers de texto e optar " +"por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." +"TextView`." + +#: ../../source/textview.txt:13 +msgid "The View" +msgstr "A Visualização" + +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." +msgstr "" +"O :class:`Gtk.TextView` é o frontend com o qual o usuário pode adicionar, " +"editar e excluir dados textuais. Eles são comumente usados para editar " +"várias linhas de texto. Ao criar um :class:`Gtk.TextView` ele contém seu " +"próprio padrão :class:`Gtk.TextBuffer`, que você pode acessar através do " +"método :meth:`Gtk.TextView.get_buffer`." + +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." +msgstr "" +"Por padrão, o texto pode ser adicionado, editado e removido da :class:`Gtk." +"TextView`. Você pode desabilitar isso chamando :meth:`Gtk.TextView." +"set_editable`. Se o texto não for editável, você geralmente deseja ocultar o " +"cursor de texto com :meth:`Gtk.TextView.set_cursor_visible` também. Em " +"alguns casos, pode ser útil definir a justificação do texto com :meth:`Gtk." +"TextView.set_justification`. O texto pode ser exibido na borda esquerda, (:" +"attr:`Gtk.Justification.LEFT`), na extremidade direita (:attr:`Gtk." +"Justification.RIGHT`), centralizado (:attr:`Gtk.Justification.CENTER`), ou " +"distribuído em toda a largura (:attr:`Gtk.Justification.FILL`)." + +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." +msgstr "" +"Outra configuração padrão do widget :class:`Gtk.TextView` é que linhas " +"longas de texto continuarão horizontalmente até que uma quebra seja " +"inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " +"chame :meth:`Gtk.TextView.set_wrap_mode`." + +#: ../../source/textview.txt:36 +msgid "The Model" +msgstr "O Modelo" + +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." +msgstr "" +"O :class:`Gtk.TextBuffer` é o núcleo do widget :class:`Gtk.TextView` e é " +"usado para armazenar qualquer texto que esteja sendo exibido na :class:`Gtk." +"TextView`. Definir e recuperar o conteúdo é possível com :meth:`Gtk." +"TextBuffer.set_text` e :meth:`Gtk.TextBuffer.get_text`. No entanto, a maior " +"parte da manipulação de texto é realizada com *iteradores*, representados " +"por um :class:`Gtk.TextIter`. Um iterador representa uma posição entre dois " +"caracteres no buffer de texto. Iteradores não são válidos indefinidamente; " +"sempre que o buffer é modificado de uma maneira que afeta o conteúdo do " +"buffer, todos os iteradores pendentes se tornam inválidos." + +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." +msgstr "" +"Por causa disso, os iteradores não podem ser usados para preservar posições " +"nas modificações do buffer. Para preservar uma posição, use :class:`Gtk." +"TextMark`. Um buffer de texto contém duas marcas internas; uma marca \"insert" +"\" (que é a posição do cursor) e a marca \"selection_bound\". Ambos podem " +"ser recuperados usando :meth:`Gtk.TextBuffer.get_insert` e :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectivamente. Por padrão, a localização " +"de um :class:`Gtk.TextMark` não é mostrada. Isso pode ser alterado chamando :" +"meth:`Gtk.TextMark.set_visible`." + +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." +msgstr "" +"Existem muitos métodos para recuperar um :class:`Gtk.TextIter`. Por " +"exemplo, :meth:`Gtk.TextBuffer.get_start_iter` retorna um iterador apontando " +"para a primeira posição no buffer de texto, enquanto :meth:`Gtk.TextBuffer." +"get_end_iter` retorna um iterador apontando após o último caractere válido. " +"A recuperação dos limites do texto selecionado pode ser obtida chamando :" +"meth:`Gtk.TextBuffer.get_selection_bounds`." + +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +msgstr "" +"Para inserir texto em uma posição específica use :meth:`Gtk.TextBuffer." +"insert`. Outro método útil é :meth:`Gtk.TextBuffer.insert_at_cursor` que " +"insere texto onde quer que o cursor esteja posicionado no momento. Para " +"remover partes do buffer de texto, use :meth:`Gtk.TextBuffer.delete`." + +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." +msgstr "" +"Além disso, :class:`Gtk.TextIter` pode ser usado para localizar " +"correspondências textuais no buffer usando :meth:`Gtk.TextIter." +"forward_search` e :meth:`Gtk.TextIter.backward_search`. Os iters inicial e " +"final são usados como ponto de partida da pesquisa e avançam/retrocedem " +"dependendo dos requisitos." + +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "" + +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." +msgstr "" +"O texto em um buffer pode ser marcado com tags. Uma tag é um atributo que " +"pode ser aplicado a um intervalo de texto. Por exemplo, uma tag pode ser " +"chamada de \"negrito\" e tornar o texto dentro da tag em negrito. No " +"entanto, o conceito de tag é mais geral do que isso; as tags não precisam " +"afetar a aparência. Eles podem afetar o comportamento de pressionamentos de " +"mouse e de tecla, \"bloquear\" um intervalo de texto para que o usuário não " +"possa editá-lo ou inúmeras outras coisas. Uma tag é representada por um " +"objeto :class:`Gtk.TextTag`. Um :class:`Gtk.TextTag` pode ser aplicado a " +"qualquer número de intervalos de texto em qualquer número de buffers." + +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." +msgstr "" +"Cada tag é armazenada em :class:`Gtk.TextTagTable`. Uma tabela de tags " +"define um conjunto de tags que podem ser usadas juntas. Cada buffer tem uma " +"tabela de tags associada a ele; somente tags dessa tabela de tags podem ser " +"usadas com o buffer. No entanto, uma única tabela de tags pode ser " +"compartilhada entre vários buffers." + +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" +msgstr "" +"Para especificar que algum texto no buffer deve ter uma formatação " +"específica, você deve definir uma tag para manter as informações de " +"formatação e, em seguida, aplicar essa tag à região do texto usando :meth:" +"`Gtk.TextBuffer.create_tag` e :meth:`Gtk.TextBuffer.apply_tag`::" + +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "A seguir estão alguns dos estilos comuns aplicados ao texto:" + +# nome da propriedade trocado +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "Cor de fundo (propriedade \"background\")" + +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "Cor de primeiro plano (propriedade \"foreground\")" + +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "Sublinhado (propriedade \"underline\")" + +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "Negrito (propriedade \"weight\")" + +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "Itálico (propriedade \"style\")" + +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "Tachado (propriedade \"strikethrough\")" + +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "Justificação (propriedade de \"justification\")" + +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "Tamanho (propriedades \"size\" e \"size-points\")" + +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "Quebra automática de texto (propriedade \"wrap-mode\")" + +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." +msgstr "" +"Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." +"TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " +"chamando :meth:`Gtk.TextBuffer.remove_all_tags`." + +#: ../../source/textview.txt:115 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/treeview.po b/translations/locale/pt_BR/LC_MESSAGES/treeview.po new file mode 100644 index 0000000..10e95a4 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/treeview.po @@ -0,0 +1,466 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:43-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "Widgets de Árvore e Lista" + +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" +msgstr "" +"A :class:`Gtk.TreeView` e seus widgets associados são uma maneira " +"extremamente poderosa de exibir dados. Eles são usados em conjunto com um :" +"class:`Gtk.ListStore` ou :class:`Gtk.TreeStore` e fornecem uma maneira de " +"exibir e manipular dados de várias maneiras, incluindo:" + +#: ../../source/treeview.txt:9 +msgid "Automatically updates when data added, removed or edited" +msgstr "" +"Atualiza automaticamente quando os dados são adicionados, removidos ou " +"editados" + +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "Suporte a Arrastar e Soltar" + +#: ../../source/treeview.txt:11 +msgid "Sorting of data" +msgstr "Classificação de dados" + +#: ../../source/treeview.txt:12 +msgid "Support embedding widgets such as check boxes, progress bars, etc." +msgstr "" +"Suporte a incorporação de widgets, como caixas de seleção, barras de " +"progresso, etc." + +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "Colunas reordenáveis e redimensionáveis" + +#: ../../source/treeview.txt:14 +msgid "Filtering of data" +msgstr "Filtragem de dados" + +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." +msgstr "" +"Com o poder e a flexibilidade de um :class:`Gtk.TreeView` vem a " +"complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " +"capazes de utilizá-lo corretamente devido ao número de métodos necessários." + +#: ../../source/treeview.txt:21 +msgid "The Model" +msgstr "O Modelo" + +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." +msgstr "" +"Cada :class:`Gtk.TreeView` possui um :class:`Gtk.TreeModel`, que contém os " +"dados exibidos pelo TreeView. Cada :class:`Gtk.TreeModel` pode ser usado por " +"mais de um :class:`Gtk.TreeView`. Por exemplo, isso permite que os mesmos " +"dados subjacentes sejam exibidos e editados de duas maneiras diferentes ao " +"mesmo tempo. Ou os 2 modos de exibição podem exibir colunas diferentes dos " +"mesmos dados do modelo, da mesma forma que duas consultas SQL (ou " +"\"visualizações\") podem mostrar campos diferentes da mesma tabela de banco " +"de dados." + +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." +msgstr "" +"Embora você possa teoricamente implementar seu próprio Modelo, você " +"normalmente usará as classes de modelo :class:`Gtk.ListStore` ou :class:`Gtk." +"TreeStore`. :class:`Gtk.ListStore` contém linhas simples de dados, e cada " +"linha não tem filhos, enquanto :class:`Gtk.TreeStore` contém linhas de " +"dados, e cada linha pode ter linhas filhas." + +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." +msgstr "" +"Ao construir um modelo, você deve especificar os tipos de dados para cada " +"coluna que o modelo contém." + +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." +msgstr "" +"Isso cria um armazenamento de lista com três colunas, duas colunas de string " +"e uma coluna flutuante." + +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." +msgstr "" +"A adição de dados ao modelo é feita usando :meth:`Gtk.ListStore.append` ou :" +"meth:`Gtk.TreeStore.append`, dependendo de qual tipo de modelo foi criado." + +#: ../../source/treeview.txt:54 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." +msgstr "" +"Ambos os métodos retornam uma instância :class:`Gtk.TreeIter`, que aponta " +"para a localização da linha recém-inserida. Você pode recuperar um :class:" +"`Gtk.TreeIter` chamando :meth:`Gtk.TreeModel.get_iter`." + +#: ../../source/treeview.txt:58 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." +msgstr "" +"Depois que os dados foram inseridos, você pode recuperar ou modificar dados " +"usando o iterador de árvore e o índice de coluna." + +#: ../../source/treeview.txt:66 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." +msgstr "" +"Assim como no objeto built-in :class:`list` do Python, você pode usar :func:" +"`len` para obter o número de linhas e usar fatias para recuperar ou definir " +"valores." + +#: ../../source/treeview.txt:80 +msgid "Iterating over all rows of a tree model is very simple as well." +msgstr "" +"Iterar sobre todas as linhas de um modelo de árvore é muito simples também." + +#: ../../source/treeview.txt:88 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows and its children, use the " +"``print_tree_store`` function." +msgstr "" +"Tenha em mente que, se você usar :class:`Gtk.TreeStore`, o código acima irá " +"apenas iterar sobre as linhas do nível superior, mas não os filhos dos nós. " +"Para iterar sobre todas as linhas e seus filhos, use a função " +"``print_tree_store``." + +#: ../../source/treeview.txt:106 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." +msgstr "" +"Além de acessar valores armazenados em um :class:`Gtk.TreeModel` com o " +"método list-like mencionado acima, também é possível usar as instâncias :" +"class:`Gtk.TreeIter` ou :class:`Gtk.TreePath`. Ambos fazem referência a uma " +"linha específica em um modelo de árvore. Pode-se converter um caminho para " +"um iterador chamando :meth:`Gtk.TreeModel.get_iter`. Como :class:`Gtk." +"ListStore` contém apenas um nível, ou seja, nós não têm nenhum nó filho, um " +"caminho é essencialmente o índice da linha que você deseja acessar." + +#: ../../source/treeview.txt:123 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." +msgstr "" +"No caso de :class:`Gtk.TreeStore`, um caminho é uma lista de índices ou uma " +"string. O formulário de string é uma lista de números separados por dois " +"pontos. Cada número refere-se ao deslocamento nesse nível. Assim, o caminho " +"\"0\" refere-se ao nó raiz e o caminho \"2: 4\" refere-se ao quinto filho do " +"terceiro nó." + +#: ../../source/treeview.txt:136 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." +msgstr "" +"Instâncias de :class:`Gtk.TreePath` podem ser acessadas como listas, " +"``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " +"para, e ``treepath[i]`` retorna o índice do filho no nível *i*." + +#: ../../source/treeview.txt:141 +msgid "The View" +msgstr "A View" + +#: ../../source/treeview.txt:142 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." +msgstr "" +"Embora existam vários modelos diferentes para escolher, há apenas um widget " +"de visualização para lidar. Funciona com a lista ou com o armazenamento em " +"árvore. Configurar um :class:`Gtk.TreeView` não é uma tarefa difícil. Ele " +"precisa de um :class:`Gtk.TreeModel` para saber de onde recuperar seus " +"dados, seja passando-o para o construtor :class:`Gtk.TreeView`, ou chamando :" +"meth:`Gtk.TreeView.set_model`." + +#: ../../source/treeview.txt:153 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." +msgstr "" +"Uma vez que o widget :class:`Gtk.TreeView` possua um modelo, ele precisará " +"saber como exibir o modelo. Ele faz isso com colunas e renderizadores de " +"célula." + +#: ../../source/treeview.txt:156 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." +msgstr "" +"Os renderizadores de célula são usados para desenhar os dados no modelo de " +"árvore de uma maneira. Existem vários renderizadores de célula que vêm com o " +"GTK+, por exemplo :class:`Gtk.CellRendererText`, :class:`Gtk." +"CellRendererPixbuf` e :class:`Gtk.CellRendererToggle`. Além disso, é " +"relativamente fácil escrever um renderizador personalizado por conta própria." + +#: ../../source/treeview.txt:162 +msgid "" +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." +msgstr "" +"A :class:`Gtk.TreeViewColumn` é o objeto que :class:`Gtk.TreeView` usa para " +"organizar as colunas verticais na visualização em árvore. Ele precisa saber " +"o nome da coluna para rotular o usuário, que tipo de renderizador de célula " +"deve ser usado e qual parte dos dados deve ser recuperada do modelo para uma " +"determinada linha." + +#: ../../source/treeview.txt:173 +msgid "" +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." +msgstr "" +"Para renderizar mais de uma coluna de modelo em uma coluna de visão, você " +"precisa criar uma instância :class:`Gtk.TreeViewColumn` e usar :meth:`Gtk." +"TreeViewColumn.pack_start` para adicionar as colunas de modelo a ela." + +#: ../../source/treeview.txt:193 +msgid "The Selection" +msgstr "A Seleção" + +#: ../../source/treeview.txt:194 +msgid "" +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." +msgstr "" +"A maioria dos aplicativos precisará não apenas lidar com a exibição de " +"dados, mas também receber eventos de entrada dos usuários. Para fazer isso, " +"basta obter uma referência a um objeto de seleção e conectar-se ao sinal " +"\"changed\"." + +#: ../../source/treeview.txt:203 +msgid "Then to retrieve data for the row selected:" +msgstr "Em seguida, para recuperar dados para a linha selecionada:" + +#: ../../source/treeview.txt:212 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +msgstr "" +"Você pode controlar quais seleções são permitidas chamando :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` não funciona " +"se o modo de seleção estiver definido como :attr:`Gtk.SelectionMode." +"MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows`." + +#: ../../source/treeview.txt:219 +msgid "Sorting" +msgstr "Classificação" + +#: ../../source/treeview.txt:220 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." +msgstr "" +"A classificação é um recurso importante para as visualizações em árvore e é " +"suportada pelos modelos de árvore padrão (:class:`Gtk.TreeStore` e :class:" +"`Gtk.ListStore`), que implementam a interface :class:`Gtk.TreeSortable`." + +#: ../../source/treeview.txt:223 +msgid "Sorting by clicking on columns" +msgstr "Classificando clicando em colunas" + +#: ../../source/treeview.txt:224 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." +msgstr "" +"Uma coluna de um :class:`Gtk.TreeView` pode ser facilmente ordenada com uma " +"chamada para :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Depois, a coluna " +"pode ser ordenada clicando no cabeçalho." + +#: ../../source/treeview.txt:227 +msgid "" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." +msgstr "" +"Primeiro precisamos de um simples :class:`Gtk.TreeView` e um :class:`Gtk." +"ListStore` como modelo." + +#: ../../source/treeview.txt:246 +msgid "" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." +msgstr "" +"O próximo passo é ativar a classificação. Note que o *column_id* (``0`` no " +"exemplo) refere-se à coluna do modelo e **não** à coluna do TreeView." + +#: ../../source/treeview.txt:253 +msgid "Setting a custom sort function" +msgstr "Definindo uma função de classificação personalizada" + +#: ../../source/treeview.txt:254 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" +msgstr "" +"Também é possível definir uma função de comparação personalizada para " +"alterar o comportamento de classificação. Como exemplo, criaremos uma função " +"de comparação que classifica maiúsculas e minúsculas. No exemplo acima, a " +"lista classificada parecia com::" + +#: ../../source/treeview.txt:267 +msgid "The case-sensitive sorted list will look like::" +msgstr "" +"A lista classificada com distinção entre maiúsculas e minúsculas será " +"semelhante a::" + +# Alterar o original para corrigir a explicação +#: ../../source/treeview.txt:278 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." +msgstr "" +"Em primeiro lugar, é necessária uma função de comparação. Esta função obtém " +"duas linhas e tem que retornar um inteiro negativo se o primeiro deve vir " +"antes do segundo, zero se eles forem iguais e um inteiro positivo se o " +"segundo vier antes do primeiro." + +#: ../../source/treeview.txt:294 +msgid "" +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" +"Então a função sort deve ser definida por :meth:`Gtk.TreeSortable." +"set_sort_func`." + +#: ../../source/treeview.txt:301 +msgid "Filtering" +msgstr "Filtrando" + +#: ../../source/treeview.txt:302 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." +msgstr "" +"Ao contrário da classificação, a filtragem não é tratada pelos dois modelos " +"que vimos anteriormente, mas pela classe :class:`Gtk.TreeModelFilter`. Esta " +"classe, como :class:`Gtk.TreeStore` e :class:`Gtk.ListStore`, é uma :class:" +"`Gtk.TreeModel`. Ele age como uma camada entre o modelo \"real\" (a :class:" +"`Gtk.TreeStore` ou a :class:`Gtk.ListStore`), ocultando alguns elementos " +"para a view. Na prática, ele fornece o :class:`Gtk.TreeView` com um " +"subconjunto do modelo subjacente. Instâncias de :class:`Gtk.TreeModelFilter` " +"podem ser empilhadas umas sobre as outras, para usar múltiplos filtros no " +"mesmo modelo (da mesma forma que você usaria cláusulas \"AND\" em uma " +"requisição SQL). Eles também podem ser encadeados com instâncias :class:`Gtk." +"TreeModelSort`." + +#: ../../source/treeview.txt:304 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +msgstr "" +"Você pode criar uma nova instância de :class:`Gtk.TreeModelFilter` e dar a " +"ela um modelo para filtrar, mas a maneira mais fácil é gerá-lo diretamente " +"do modelo filtrado, usando o método :meth:`Gtk.TreeModel.filter_new` método." + +#: ../../source/treeview.txt:310 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"needs a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" +"Da mesma forma que funciona a função de classificação, o :class:`Gtk." +"TreeModelFilter` precisa de uma função de \"visibilidade\", que, dada uma " +"linha do modelo subjacente, retornará um booleano indicando se essa linha " +"deve ser filtrada ou não. É definido por :meth:`Gtk.TreeModelFilter." +"set_visible_func`:" + +#: ../../source/treeview.txt:316 +msgid "" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." +msgstr "" +"Vejamos um exemplo completo que usa a pilha inteira :class:`Gtk.ListStore` " +"- :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/unicode.po b/translations/locale/pt_BR/LC_MESSAGES/unicode.po new file mode 100644 index 0000000..9eb9250 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/unicode.po @@ -0,0 +1,284 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-30 01:06-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "Como Lidar com Sequências de Caracteres" + +#: ../../source/unicode.txt:4 +msgid "" +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." +msgstr "" +"Esta seção explica como as cadeias de caracteres são representadas no Python " +"2.x, no Python 3.x e no GTK+ e discute erros comuns que surgem ao trabalhar " +"com strings." + +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "Definições" + +#: ../../source/unicode.txt:9 +msgid "" +"Conceptional, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." +msgstr "" +"Conceitual, uma string é uma lista de caracteres como 'A', 'B', 'C' ou 'É'. " +"**Caracteres** são representações abstratas e seu significado depende do " +"idioma e do contexto em que são usados. O padrão Unicode descreve como os " +"caracteres são representados por **pontos de código**. Por exemplo, os " +"caracteres acima são representados com os pontos de código U+0041, U+0042, U" +"+0043 e U+00C9, respectivamente. Basicamente, os pontos de código são " +"números no intervalo de 0 a 0x10FFFF." + +#: ../../source/unicode.txt:17 +msgid "" +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" +msgstr "" +"Como mencionado anteriormente, a representação de uma string como uma lista " +"de pontos de código é abstrata. Para converter essa representação abstrata " +"em uma sequência de bytes, a cadeia Unicode deve ser **codificada**. A forma " +"mais simples de codificação é ASCII e é executada da seguinte maneira:" + +#: ../../source/unicode.txt:22 +msgid "" +"If the code point is < 128, each byte is the same as the value of the code " +"point." +msgstr "" +"Se o ponto de código for < 128, cada byte é o mesmo que o valor do ponto de " +"código." + +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" +msgstr "" +"Se o ponto de código for 128 ou maior, a string Unicode não poderá ser " +"representada nessa codificação. (Python dispara uma exceção :exc:" +"`UnicodeEncodeError` neste caso.)" + +#: ../../source/unicode.txt:29 +msgid "" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." +msgstr "" +"Embora a codificação ASCII seja simples de aplicar, ela só pode codificar " +"128 caracteres diferentes, o que não é suficiente. Uma das codificações mais " +"usadas para resolver esse problema é o UTF-8 (ele pode manipular qualquer " +"ponto de código Unicode). UTF significa \"Formato de Transformação Unicode\" " +"e \"8\" significa que números de 8 bits são usados na codificação." + +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "" + +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "Suporte Unicode do Python 2.x" + +#: ../../source/unicode.txt:41 +msgid "" +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" +msgstr "" +"O Python 2 vem com dois tipos diferentes de objetos que podem ser usados " +"para representar strings :class:`str` e :class:`unicode`. Instâncias do " +"último são usadas para expressar cadeias Unicode, enquanto instâncias do " +"tipo :class:`str` são representações de byte (a string codificada). Sob o " +"capô, Python representa strings Unicode como números inteiros de 16 ou 32 " +"bits, dependendo de como o interpretador Python foi compilado. Strings " +"Unicode podem ser convertidas em strings de 8 bits com :meth:`unicode." +"encode`::" + +#: ../../source/unicode.txt:58 +msgid "" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" +msgstr "" +"As strings de 8 bits do Python têm um método :meth:`str.decode` que " +"interpreta a string usando a codificação fornecida::" + +#: ../../source/unicode.txt:68 +msgid "" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +msgstr "" +"Infelizmente, o Python 2.x permite que você misture :class:`unicode` e :" +"class:`str` se a string de 8 bits contivesse apenas bytes de 7 bits (ASCII), " +"mas obteria :exc:`UnicodeDecodeError` se contivesse valores não-ASCII:" + +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "Unicode no GTK+" + +#: ../../source/unicode.txt:86 +msgid "" +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" +msgstr "" +"O GTK+ usa strings codificadas em UTF-8 para todo o texto. Isto significa " +"que se você chamar um método que retorna uma string, você sempre obterá uma " +"instância do tipo :class:`str`. O mesmo se aplica aos métodos que esperam um " +"ou mais strings como parâmetro, eles devem ser codificados em UTF-8. No " +"entanto, por conveniência, o PyGObject converterá automaticamente qualquer " +"instância :class:`unicode` para :class:`str` se fornecido como argumento::" + +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." +msgstr "" +"Observe o aviso no final. Apesar de chamarmos :meth:`Gtk.Label.set_text` com " +"uma instância de :class:`unicode` como argumento, :meth:`Gtk.Label.get_text` " +"sempre retornará uma instância :class:`str`. Assim, ``txt`` e " +"``unicode_string`` *não* são iguais." + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have to " +"make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" +"Isto é especialmente importante se você quiser internacionalizar seu " +"programa usando `gettext `_. " +"Você precisa ter certeza de que gettext retornará sequências de 8 bits " +"codificadas em UTF-8 para todos os idiomas. Em geral, recomenda-se não usar " +"objetos :class:`unicode` em aplicações GTK+ e usar somente objetos " +"codificados em UTF-8 :class:`str`, já que o GTK+ não se integra totalmente a " +"objetos :class:`unicode`. Caso contrário, você teria que decodificar os " +"valores de retorno para cadeias de caracteres Unicode cada vez que você " +"chamar um método GTK+::" + +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "" + +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "Suporte Unicode do Python 3.x" + +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +msgstr "" +"Desde o Python 3.0, todas as strings são armazenadas como Unicode em uma " +"instância do tipo :class:`str`. *Codificado* strings, por outro lado, são " +"representados como dados binários na forma de instâncias do tipo :class:" +"`bytes`. Conceitualmente, :class:`str` refere-se a *texto*, enquanto :class:" +"`bytes` refere-se a *dados*. Use :meth:`str.encode` para ir de :class:`str` " +"para :class:`bytes` e :meth:`bytes.decode` para ir de :class:`bytes` para :" +"class:`str`." + +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" +msgstr "" +"Além disso, não é mais possível misturar strings Unicode com strings " +"codificadas, porque resultará em um :exc:`TypeError`::" + +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" +msgstr "" +"Como consequência, as coisas são muito mais limpas e consistentes com o " +"Python 3.x, porque o PyGObject irá automaticamente codificar/decodificar " +"para/de UTF-8 se você passar uma string para um método ou um método retornar " +"uma string. Strings, ou *text*, sempre serão representados como instâncias " +"de :class:`str` apenas::" + +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "Referências" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts " +"that clearly distinguish between text and data." +msgstr "" +"`O que há de novo no Python 3.0 `_ descreve os novos conceitos " +"que distinguir claramente entre texto e dados." + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ discusses " +"Python 2.x’s support for Unicode, and explains various problems that people " +"commonly encounter when trying to work with Unicode." +msgstr "" +"O `Unicode HOWTO `_ aborda o " +"suporte do Python 2.x para Unicode e explica vários problemas que as pessoas " +"comumente encontram ao tentar trabalhar com o Unicode." + +#: ../../source/unicode.txt:173 +msgid "" +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +msgstr "" +"O `Unicode HOWTO for Python 3.x `_ discute o suporte a Unicode no Python 3.x." + +#: ../../source/unicode.txt:176 +msgid "" +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." +msgstr "" +"`A tabela de codificação UTF-8 e os caracteres Unicode `_ contém uma lista de pontos de código Unicode e sua " +"respectiva codificação UTF-8." From 9e50f5b907999ef0c46beb3ddc8ced0d611f612c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 21 Apr 2018 10:02:15 +0100 Subject: [PATCH 080/209] Add support for internationalization --- .gitignore | 1 + Makefile | 144 ++++------------------------------------------- requirements.txt | 1 + source/conf.py | 2 +- 4 files changed, 13 insertions(+), 135 deletions(-) diff --git a/.gitignore b/.gitignore index 74e097f..1a25069 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build *~ *.py[co] source/locale +translations/**/*.mo diff --git a/Makefile b/Makefile index bf9e7c3..35d5900 100644 --- a/Makefile +++ b/Makefile @@ -1,144 +1,20 @@ -# Makefile for Sphinx documentation +# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build -PAPER = +SPHINXPROJ = PythonGTK3Tutorial +SOURCEDIR = source BUILDDIR = build -DOCNAME = PythonGTK3Tutorial -PODIR = translations -LOCALEDIR = translations/locale - -LANGUAGES = ja - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest updatepo install +# Put it first so that "make" without argument is like "make help". help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -rm -rf $(LOCALEDIR) - -getmo = $(LOCALEDIR)/$(2)/LC_MESSAGES/$(patsubst %.po,%.mo,$(notdir $(1))) -genmo = $(shell msgfmt $(1) -o $(call getmo,$(1),$(2))) -genlang = $(foreach po, $(wildcard $(1)/*.po), $(call genmo,$(po),$(2))) -updatepo: - $(foreach lang, $(LANGUAGES), @mkdir -p $(LOCALEDIR)/$(lang)/LC_MESSAGES) - $(foreach lang, $(LANGUAGES), $(call genlang,$(PODIR)/$(lang),$(lang))) - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyGObjectTutorial.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyGObjectTutorial.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/books" - @echo "# gunzip $(BUILDDIR)/devhelp/$(DOCNAME).devhelp.gz" - @echo "# ln -s `pwd`/$(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/books/$(DOCNAME)" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." +.PHONY: help Makefile -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/requirements.txt b/requirements.txt index 185477f..3c6c40f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Sphinx==1.6.6 sphinx-autobuild==0.7.1 sphinx-rtd-theme==0.2.5b2 +sphinx-intl diff --git a/source/conf.py b/source/conf.py index e506e46..5f387b4 100644 --- a/source/conf.py +++ b/source/conf.py @@ -50,7 +50,7 @@ project = u'Python GTK+ 3 Tutorial' copyright = u'GNU Free Documentation License 1.3' -# locale_dirs = ["../translations/locale",] +locale_dirs = ["../translations/locale",] # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From 2597ab8de4b3fffd53c8fc9d1d120baf6b14d31c Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Fri, 20 Apr 2018 13:27:47 +0200 Subject: [PATCH 081/209] Add a widget gallery page This came up in https://gitlab.gnome.org/GNOME/pygobject/issues/208 Add a list of all non-abstract Gtk.Widget subclasses and show an example image for each of them. The images are taken from the gtk+ documentation. The goal is that users can quickly get an overview of the available widgets and to make it possible to find a widget type without knowing the name. --- source/gallery.txt | 63 +++++++++++++++++++++++++ source/index.txt | 1 + source/widgets/aboutdialog.png | Bin 0 -> 20896 bytes source/widgets/accel-label.png | Bin 0 -> 3063 bytes source/widgets/action-bar.png | Bin 0 -> 1905 bytes source/widgets/appchooserbutton.png | Bin 0 -> 4877 bytes source/widgets/appchooserdialog.png | Bin 0 -> 32889 bytes source/widgets/assistant.png | Bin 0 -> 11280 bytes source/widgets/button.png | Bin 0 -> 2389 bytes source/widgets/check-button.png | Bin 0 -> 3355 bytes source/widgets/color-button.png | Bin 0 -> 2632 bytes source/widgets/colorchooser.png | Bin 0 -> 18719 bytes source/widgets/combo-box-text.png | Bin 0 -> 3368 bytes source/widgets/combo-box.png | Bin 0 -> 2949 bytes source/widgets/entry.png | Bin 0 -> 1987 bytes source/widgets/file-button.png | Bin 0 -> 10086 bytes source/widgets/filechooser.png | Bin 0 -> 64106 bytes source/widgets/flow-box.png | Bin 0 -> 7060 bytes source/widgets/font-button.png | Bin 0 -> 4284 bytes source/widgets/fontchooser.png | Bin 0 -> 54845 bytes source/widgets/frame.png | Bin 0 -> 2038 bytes source/widgets/glarea.png | Bin 0 -> 5338 bytes source/widgets/grid-packing.png | Bin 0 -> 4318 bytes source/widgets/headerbar.png | Bin 0 -> 5538 bytes source/widgets/icon-view.png | Bin 0 -> 3813 bytes source/widgets/image.png | Bin 0 -> 6123 bytes source/widgets/info-bar.png | Bin 0 -> 2316 bytes source/widgets/label.png | Bin 0 -> 1671 bytes source/widgets/levelbar.png | Bin 0 -> 2401 bytes source/widgets/link-button.png | Bin 0 -> 1980 bytes source/widgets/list-and-tree.png | Bin 0 -> 6134 bytes source/widgets/list-box.png | Bin 0 -> 6647 bytes source/widgets/lockbutton.png | Bin 0 -> 2387 bytes source/widgets/menu-button.png | Bin 0 -> 3082 bytes source/widgets/menubar.png | Bin 0 -> 3103 bytes source/widgets/messagedialog.png | Bin 0 -> 5462 bytes source/widgets/multiline-text.png | Bin 0 -> 2671 bytes source/widgets/notebook.png | Bin 0 -> 4893 bytes source/widgets/panes.png | Bin 0 -> 4218 bytes source/widgets/placessidebar.png | Bin 0 -> 14305 bytes source/widgets/progressbar.png | Bin 0 -> 3242 bytes source/widgets/radio-group.png | Bin 0 -> 5729 bytes source/widgets/recentchooserdialog.png | Bin 0 -> 33249 bytes source/widgets/scales.png | Bin 0 -> 5482 bytes source/widgets/scrollbar.png | Bin 0 -> 2423 bytes source/widgets/scrolledwindow.png | Bin 0 -> 3568 bytes source/widgets/search-bar.png | Bin 0 -> 3699 bytes source/widgets/search-entry.png | Bin 0 -> 2676 bytes source/widgets/separator.png | Bin 0 -> 4263 bytes source/widgets/spinbutton.png | Bin 0 -> 3181 bytes source/widgets/spinner.png | Bin 0 -> 2418 bytes source/widgets/stack.png | Bin 0 -> 5321 bytes source/widgets/stackswitcher.png | Bin 0 -> 6119 bytes source/widgets/statusbar.png | Bin 0 -> 3034 bytes source/widgets/switch.png | Bin 0 -> 3134 bytes source/widgets/toggle-button.png | Bin 0 -> 3210 bytes source/widgets/toolbar.png | Bin 0 -> 3786 bytes source/widgets/toolpalette.png | Bin 0 -> 8015 bytes source/widgets/volumebutton.png | Bin 0 -> 3441 bytes source/widgets/window.png | Bin 0 -> 1093 bytes 60 files changed, 64 insertions(+) create mode 100644 source/gallery.txt create mode 100644 source/widgets/aboutdialog.png create mode 100644 source/widgets/accel-label.png create mode 100644 source/widgets/action-bar.png create mode 100644 source/widgets/appchooserbutton.png create mode 100644 source/widgets/appchooserdialog.png create mode 100644 source/widgets/assistant.png create mode 100644 source/widgets/button.png create mode 100644 source/widgets/check-button.png create mode 100644 source/widgets/color-button.png create mode 100644 source/widgets/colorchooser.png create mode 100644 source/widgets/combo-box-text.png create mode 100644 source/widgets/combo-box.png create mode 100644 source/widgets/entry.png create mode 100644 source/widgets/file-button.png create mode 100644 source/widgets/filechooser.png create mode 100644 source/widgets/flow-box.png create mode 100644 source/widgets/font-button.png create mode 100644 source/widgets/fontchooser.png create mode 100644 source/widgets/frame.png create mode 100644 source/widgets/glarea.png create mode 100644 source/widgets/grid-packing.png create mode 100644 source/widgets/headerbar.png create mode 100644 source/widgets/icon-view.png create mode 100644 source/widgets/image.png create mode 100644 source/widgets/info-bar.png create mode 100644 source/widgets/label.png create mode 100644 source/widgets/levelbar.png create mode 100644 source/widgets/link-button.png create mode 100644 source/widgets/list-and-tree.png create mode 100644 source/widgets/list-box.png create mode 100644 source/widgets/lockbutton.png create mode 100644 source/widgets/menu-button.png create mode 100644 source/widgets/menubar.png create mode 100644 source/widgets/messagedialog.png create mode 100644 source/widgets/multiline-text.png create mode 100644 source/widgets/notebook.png create mode 100644 source/widgets/panes.png create mode 100644 source/widgets/placessidebar.png create mode 100644 source/widgets/progressbar.png create mode 100644 source/widgets/radio-group.png create mode 100644 source/widgets/recentchooserdialog.png create mode 100644 source/widgets/scales.png create mode 100644 source/widgets/scrollbar.png create mode 100644 source/widgets/scrolledwindow.png create mode 100644 source/widgets/search-bar.png create mode 100644 source/widgets/search-entry.png create mode 100644 source/widgets/separator.png create mode 100644 source/widgets/spinbutton.png create mode 100644 source/widgets/spinner.png create mode 100644 source/widgets/stack.png create mode 100644 source/widgets/stackswitcher.png create mode 100644 source/widgets/statusbar.png create mode 100644 source/widgets/switch.png create mode 100644 source/widgets/toggle-button.png create mode 100644 source/widgets/toolbar.png create mode 100644 source/widgets/toolpalette.png create mode 100644 source/widgets/volumebutton.png create mode 100644 source/widgets/window.png diff --git a/source/gallery.txt b/source/gallery.txt new file mode 100644 index 0000000..d8a9183 --- /dev/null +++ b/source/gallery.txt @@ -0,0 +1,63 @@ +Widget Gallery +============== + +=================================== ====== +:class:`Gtk.AboutDialog` .. image:: widgets/aboutdialog.png +:class:`Gtk.AccelLabel` .. image:: widgets/accel-label.png +:class:`Gtk.ActionBar` .. image:: widgets/action-bar.png +:class:`Gtk.AppChooserButton` .. image:: widgets/appchooserbutton.png +:class:`Gtk.AppChooserDialog` .. image:: widgets/appchooserdialog.png +:class:`Gtk.Assistant` .. image:: widgets/assistant.png +:class:`Gtk.Button` .. image:: widgets/button.png +:class:`Gtk.CheckButton` .. image:: widgets/check-button.png +:class:`Gtk.ColorButton` .. image:: widgets/color-button.png +:class:`Gtk.ColorChooserDialog` .. image:: widgets/colorchooser.png +:class:`Gtk.ComboBox` .. image:: widgets/combo-box.png +:class:`Gtk.ComboBoxText` .. image:: widgets/combo-box-text.png +:class:`Gtk.Entry` .. image:: widgets/entry.png +:class:`Gtk.FileChooserButton` .. image:: widgets/file-button.png +:class:`Gtk.FileChooserDialog` .. image:: widgets/filechooser.png +:class:`Gtk.FlowBox` .. image:: widgets/flow-box.png +:class:`Gtk.FontButton` .. image:: widgets/font-button.png +:class:`Gtk.FontChooserDialog` .. image:: widgets/fontchooser.png +:class:`Gtk.Frame` .. image:: widgets/frame.png +:class:`Gtk.GLArea` .. image:: widgets/glarea.png +:class:`Gtk.Grid` .. image:: widgets/grid-packing.png +:class:`Gtk.HeaderBar` .. image:: widgets/headerbar.png +:class:`Gtk.IconView` .. image:: widgets/icon-view.png +:class:`Gtk.Image` .. image:: widgets/image.png +:class:`Gtk.InfoBar` .. image:: widgets/info-bar.png +:class:`Gtk.Label` .. image:: widgets/label.png +:class:`Gtk.LevelBar` .. image:: widgets/levelbar.png +:class:`Gtk.LinkButton` .. image:: widgets/link-button.png +:class:`Gtk.ListBox` .. image:: widgets/list-box.png +:class:`Gtk.LockButton` .. image:: widgets/lockbutton.png +:class:`Gtk.MenuBar` .. image:: widgets/menubar.png +:class:`Gtk.MenuButton` .. image:: widgets/menu-button.png +:class:`Gtk.MessageDialog` .. image:: widgets/messagedialog.png +:class:`Gtk.Notebook` .. image:: widgets/notebook.png +:class:`Gtk.Paned` .. image:: widgets/panes.png +:class:`Gtk.PlacesSidebar` .. image:: widgets/placessidebar.png +:class:`Gtk.ProgressBar` .. image:: widgets/progressbar.png +:class:`Gtk.RadioButton` .. image:: widgets/radio-group.png +:class:`Gtk.RecentChooserDialog` .. image:: widgets/recentchooserdialog.png +:class:`Gtk.Scale` .. image:: widgets/scales.png +:class:`Gtk.Scrollbar` .. image:: widgets/scrollbar.png +:class:`Gtk.ScrolledWindow` .. image:: widgets/scrolledwindow.png +:class:`Gtk.SearchBar` .. image:: widgets/search-bar.png +:class:`Gtk.SearchEntry` .. image:: widgets/search-entry.png +:class:`Gtk.Separator` .. image:: widgets/separator.png +:class:`Gtk.SpinButton` .. image:: widgets/spinbutton.png +:class:`Gtk.Spinner` .. image:: widgets/spinner.png +:class:`Gtk.Stack` .. image:: widgets/stack.png +:class:`Gtk.StackSwitcher` .. image:: widgets/stackswitcher.png +:class:`Gtk.Statusbar` .. image:: widgets/statusbar.png +:class:`Gtk.Switch` .. image:: widgets/switch.png +:class:`Gtk.TextView` .. image:: widgets/multiline-text.png +:class:`Gtk.ToggleButton` .. image:: widgets/toggle-button.png +:class:`Gtk.ToolPalette` .. image:: widgets/toolpalette.png +:class:`Gtk.Toolbar` .. image:: widgets/toolbar.png +:class:`Gtk.TreeView` .. image:: widgets/list-and-tree.png +:class:`Gtk.VolumeButton` .. image:: widgets/volumebutton.png +:class:`Gtk.Window` .. image:: widgets/window.png +=================================== ====== diff --git a/source/index.txt b/source/index.txt index cbcb543..9194303 100644 --- a/source/index.txt +++ b/source/index.txt @@ -38,6 +38,7 @@ Contents: introduction basics unicode + gallery layout label entry diff --git a/source/widgets/aboutdialog.png b/source/widgets/aboutdialog.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e497e8d9eeb821593e29443dbb499bd51ad898 GIT binary patch literal 20896 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%0Abib*({fRZ1* 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 Nu{5|h0`~sfkmCn+??RC-> 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 literal 0 HcmV?d00001 diff --git a/source/widgets/action-bar.png b/source/widgets/action-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b36eae7e4af0a1094e6f77b27820b4fabce9dd GIT binary patch literal 1905 zcmcIl`8V5%7XKzfltx6gh_zwJptdS0v9(b=MMjMvw!u(UV{eHq(@y)OMNV{3wNCYE zseKC`!mB+cY?_vWdHzx zxj5rI0RSXU0iv{&*q2--u80F9;gXA&wAj+5!?FMXigv*{cqNx?EwEzLBGiZfEUnR1=kI$P6D{F+an6*X-UbyJkjJ`kdUA2 zX@G_Q#N3u5fI4#x$nv=g z(h4z^Bxeo&-+-v24;A#E7Un0daAD9^VbbE%bB`E;I!b{?p-|4*dAkCLhu;D?!zw_& z=`q-TAVfwCv>rDiQtKCT-td61ZD_%v;@sTI& zd6S|e4|ebk5|SLm*fFxp*z?p$qUg-!2Ao(E*b*9Yc8YJa-&ZT#sHzeXqcX@;yW_$F ziI98hzTksi)s;I^sN+)!4Mjk+b*&}RX1+A0-+}@ z*`L3!I|Mx#L~-IfD}lAJ6TG_T?xyK{qemj4GC9Zz4?XT$$^2>AHxP5a{RbHhg3Ux4X;m(>=)eFN&dn%_u}jjAE050_INJ`G z3@xtgv~5us>0WeECoLj{<77;O+fM+g7F@~MQqZLur zPCBp1Gw#-I3YHbh?oBUIP0w(h&`h$K2;A8S66hBOrRM0hq}SHg;sOhu^BmhD z*Da1MhInglw0lK8N+v^%t*x#9pbD%4z_kq#!c{`b_A$J}<|3t-wUZy}bjTf%e%^Zs z^Ph=6oMgM(pd#fzDpdG}dZ}i%3}3J^sv*fpQVTO;e-(s zQN1UZ1-7!XvWA9+H?KLOMwOTf71Lg6Ego`Ddc5bqFnP8Bs4I|)GsnOE%IgX|`t|hm z=^xLzaduLg=Wf>g1%rdHU(f37yeOw>>n|AcuWVUf+7?*O&#ZOq@tGX6goFe&t3>n# zu{s^a>cnElcX!SCmzCZPM2h=P>A9Qt+{8qFtuA&My?XVk1e;>EPC|adHgJ^ge^HTN zYr0%t(gN;+!1Iv(J0ArU?sLDV*_7euL68M2u}CBZ}SesQL8qYb;~H0{=D-{L{S-HJXx zz}yCkug6x*3-2E#fCJC~F0Wn@IX%>nTLqF21bfk6PO#lxAE+cEXwGl*XL4e-eg!e! zBmr^`351weuyS9z2QIIgv_#cJa+2P|j3IX_`d?N~w`b{GI~Zf^5y0=-Mewd7-;2`J SH)q8^6mW5L$JJj7zVlx=oNy%o literal 0 HcmV?d00001 diff --git a/source/widgets/appchooserbutton.png b/source/widgets/appchooserbutton.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e475e13298105174bff287de427018f2576e22 GIT binary patch literal 4877 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\AlNHl7Q#>=W zh{5T9t~-Ma@KRf4P*z?A(#kjxu0?k@BB7iE)lN&1%pAC&LA-|VHE$Sw<*&{=;WxYJ zac!l)cGAMx!R89W->jzfTv9!qq~)Bg<#^ii=v5iV3x*x~m&}>ALtL*y)Sr@iWN}lN zmT`Cy$FME#I9*l^#3LM4n1`3<5Z9(De5y~>OVfHYk~uT!G%3tgjb=Ic61pEz@3A4* S?*R6<06pzTS|u9x5&r|Va$%kT literal 0 HcmV?d00001 diff --git a/source/widgets/appchooserdialog.png b/source/widgets/appchooserdialog.png new file mode 100644 index 0000000000000000000000000000000000000000..077dcccbf6520133b8b677bbd60681195b6203cc GIT binary patch literal 32889 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

AhIB&CbH5%QE&*Be_Y-m5 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%0AmNeP1jT&H9SuRN)bZRvR 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 literal 0 HcmV?d00001 diff --git a/source/widgets/assistant.png b/source/widgets/assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7480b9c8f7314f70cc0f71ef20e225011563ba GIT binary patch literal 11280 zcmdUVWmuF^*ybPtDkY$FNC*l@cS|D;(n!OIbayCHQqqW&f}(UtcS(a%L&MNHLk~5u z2fuH3|LmW=zTLg9egD9`apF18bDsOY&l9PkrhtEs@*V^N!Bx1uGV(MnotwIgfi{6%Z@o z`!J2m$;#%HMD&yq-Hq{O8hd{8E9ys%=I0o{oORvB`$R-P4RfT3h@R(GQ@Smz>rDQ; z;~^tg93DOWx>a@jRCv-73`UK=?N&%3rDXW4S}Mn&w+#9{8f7=H-Y?2;f4I_Ih6}|+ zP%-&q%6s_ns##GH5yjX4C@{Ovu3vkrh_KL^f26HFw51Gw;Z}A4THDIq8mQUBe@H~a z!*1?P5Cmt?=nA}H@fW=Wc|L1jL}$z>Fv8v{Auslaf?>X` zy;7*rQPsL;KJNH^R2g{xHeS$|)*4v*J5l{pqk@@4IMVB;(bgJNyP%nO_`P9^?+h;& zt1>@*n2#+B#mmJEYk@3s8hdm8rKS@q*y{aZTc*JUzR=+Lx_<(*gU`5`chj)$NZC#m zdo|pB*uf${UT7#SEW0F%WcctwgD6B)U)B#j3sJ--emhyQdx?dQ9}m_zkJmM#)5`_& zxRra6OCv&5UmwG0s(4DBrg7c+eIr>%PcR%=PulFpAtp}BT`MDtcOQo@Tg=Bb{}V6N z{C`&)_E%}Y_N*^tFCorQ})%fv$Fxnmg_6Q(eJ7k#FMxW-~_aPrMMBElVR7& z5f>M88uHakZ`I_E@%+4fIV@bjWJf%^K0HjkKp}(Tm3~Tt1(<%JtUUG0XSBK8^0$Q7 z-eQ|-tsn0PXO!cEWdds5*$$R0rJQ+aj#R|EFire=CuFG8u-pTLGkmjL@kxV2mGALZ z;rYp~Xm5^hL_|b}>qLo>-!FBf1R>;8ZHL_Rsa@_{;dl%EQB-~QQWS4F&S;9r7_k-8 z`E0dPB?8Wkt)ysfoYerD;UYgGDS5eGEJgX}4$A*GwzV?eLl*7R&%@*ie?v4fzi%PG z8aBIeY1s^CiBoXZ8CRVrA2Tp8co_bAoPLGA@PdrEpk8`sx4-$eWKV+gu!)pjyt4C0 zFwqmDv+cIM_tAMPD=T;*S*EhGD@iG{Lc*kq7_k~Ix{;{jm=AUqr&-S}PAMMqu)h8TF+65m;3@fR)qd|GbKP;6B7T_;L6ZBRb?ePl$2 zSVKo|!LH9`*)bQ+f%2OM5f3fjTp?^I6K{@;CA(%f9c+1dSyhS{0VkqDC}rughAFbw z`U#3{4cHcFpm81KF#f(Bq6FQ1UDU_GydY%a5Exoy&7yo!^w@r`Ik{+uUCqhE*FjG~ zR?Vfbdc9n-<^9a>YDR8}`szY$mWK~g4_2qqMblZ`AJv|A7stiMVn=WqQECuzS@fq6 zvzi*Q=9#WK%C_#2vA#RD@D93;Fg5V2Aphe9(Oi2{q+5ugBX%tNDYxf!c3S~|;R7z& zya_azN=>Y-at0O+OkFFZYhW^Kv+-nHtpy`jg&h&B8GT`|I=o6RMpk+Rvk7Nl=gOMzDQl!H#2W9iHVnUJ&a2+@<){{ z{PDtL^+RZ2;;A7K`Cr%D50k0iO3N$0KiHl|2gF4nYrbQzxYmtvO?)(wB#LAbDS;XD zo3uP(y(Pz&tX{U~;I(~3jkj;1!|P86>l9lLD~ zM~)DgBYW?xQ%5g*76^nZ-owRp5z6GVpSUanW!w%Q`ZT6QOUlVK(bFJC^$ zMz33HB_!GzuZ5Wkx-L7^jJ7zL+6;Ps>DyISR(7c~)@LW}XuiYw!1@K6BsSQ*{r%|X zN-s2f{dkHuGBWa~K9t8?U~dd9?6$zjYez^Z>D)rUs?&X!7G~%173x5Jw_yC$vJWF= zRpaRadyy`iQ_Be}%-G{G`r_o96VfEZZ%DtS(cbl&1L&={zn@L=^*IMYcnBsAA-1up zq2UXYz~%*y(9qCH`|4!`;dr33)hE>1Iz)(?fYg8g8@+Y?k~(Hz!$ZnkIb*w6cVAzZeN1Gk7aYK_M$SVTY1efnfRRZ1dMqM%aa zAxjV+T&`4;lM_s*Te1>nSNg>zS3W5v1$*`cae-J*J*ILN$pnVrNOPvucB=c7F>B0` z?fQ%{j1byYpp%r8^zq}zR#OC;Hw1^^_9H**Yg>hgyK>&0uGZ6 zPIT(xD6!81PHpxAyuO`x5U1#uOG`_QC!>=ZIl)8*_5xJ6&BhU37Hy6-hYQ2&ZsQMA zFKB+d*4-j>IxE?puVUNQE$!TNr$vbqUiEQ*p3P<(u({6f!0|&!6|f%4W~$Icdl$Xe zt(7=+f4z`JAA+;Lmf=M%^7_$Sy{C8yt<<08gZx7Y%eBHF=(!A`>)OY*$z4xGmZzkT z!ok@^KPUHbtZ0Auv_cFOVe4$oe2(1V8vR^Ny}NPgcrejUD9=I6=}c@Up_mRr_3_Kn-mS0sOS%bmeb{z=WnXM|kj1zY6F*`rrR0S(UE@E|GSh(&1DQN{97GpnEpX`S? zCu#C^&zC#2$q=^U($v%}y08}atEi+9cfG9;N81H=|M>R{CYx??$*c$2RSDnS+~Kuh zoW&hYMhaeEKFIYmDjp2|W{bz1gXyY)ffC|=?)l~&VfLpUmdV=#t1?V$tTi+O?oS3k z^JC^XA?Gs$9jQCQ2)b5X%Uwp9eciYFrgG)YE2q5OhD803_FMYz>4%_BGj{jSZNhRR8QsS3ie%{Uhd|N|9qm>TP_*u?0NcF{w zdk!ac-Z1Ua)>KGZTH4;OC5`ioBeP$&ZX(Qyk>ipj@B#Xe5XT1RzZUaphXlgH!c3jr zn23E>^;a1LES?QC!INqFr~nQ{<_VdfL5flWbPB6(?k+T z1(wHgb{pflI1up$uXSXl3HD-Sel~nrU1D{;YWr5ors#vspU^nRIqzj1ua4`@#^JQ9 z&P4yqUY4WXQBgA*HRTr!en=Df81lA5b;-M}e%GfgoXuh+!J$!Pm7=_f@lgDALT#sR zgtK$Uvzqo0fE~=I>MUp?KWpgJ+SjQHf>_tG@Vn*U=x=7Dk)gzk#cwE ztC@FaB$PZ6qM#Awu^Ibuu-wuCe{xa41#{`X)F`-#hKvyNBin*NB=7n0 z?%*exu+urmi&z@56?~G9m-@) z{+ynEuT^qBQ>HNG8C$Zpv9Ym9^{B0X>mPl0t5f@{Ye-LTulb$ zU)dpA{sftDg8i#-y8Q;pIVFE%>h&1ORLR*uqdy+a1=ACUv~EH>t8M}xqN2_Y15lOz zU41XClR*-?-f7pl@^hV<;*^tiqFSV0VI3OX1P!PSeF}SheaO5hd^Uha|P@bsQO7Z@(>Yt~+ry$tDSZIC3B6 zZuqdwgFww^)VV1sDcNjSJFpx7N&|~g>P@V@N|*zmF0E%^z{DoMmT%mwx0|XC5RDT* z#sjJTi{5aStb);Gm1rXRf^hGYG3c=*CtYx7r|ik@%&gdnf5nW9=dM(aS!w&__zSC}}hR$l>x=uA3(Uv#lbW?^Bm zF>#Eyw7m4DaoA%sMn7AanqZCd^j0v4zdjjLTid6ha&iL~mu?(c-t=GtGv&uV^rN|Js*-C^mqfBV5h zHepmoxv|^04)u`e01{DKxplT-eX&$Jur>M12N&WnlR^87;F-}ch}rV@XMz3ucz>g* zM8n*ENB{g)Vmo?7QjqvwP3V@qLH;|v4G*qeL_;mSdgkfVr(XgZJd*~UNwyX4fR;ys2xa|aXXR4kNG7YBlTW+HI^=rMk0Uf|TLMn7%<4ZRLd2G}MzQBtQ zzJQ#L91e2_wUPPP*i&4ikk@8ahDvrL@86;?G_|y(7bKd5p#xK5=*tDjM$+GMfB7=6 zSB>3gVl77Oq*;MGnptNvQDS>N?vQjryFNxj2}R((-sk1r-tcd!KF;-i?Iv0l3}ji7 zZzY<1N6O4G<>RQ^8qcnm3rkb?PV7pFp;D=iueM$k4yT~Y-T|mo@3q|rzyv!XITjXH zbb}egO!f8e?}JAAE#{cKHiOK?N+jugN&pF{K&Go5I+h+Q-zqr_aMG=E0H6uteG*D` zw$gG~Hf@h5IVuii04Q^T)6`^s&yVhh_^O`P33ANzQ|WM)!B3pQ!%6%W$Ca#$>vz3Y zHXy;KsW6wc*xUn&hd@8v#j<;E$Pang)gHPt*O2<_7juzO%a_JkZfM-van1Z%12WaT zTwhULnUPbHuCli?2LpZV^ho-BK2FE#)$q1YLLwFK@r2Qh8TRqy6cmi!(WbVXIX*RI zzx=@RT~ZoY#cN?-!4Zw7^I7_|p0+>B3lh95{QcpnHTvH^1oBrdG!DV1sCZ|0e*DX_ zuk49gnhFB<8#(%xVX^M-7@Cgv`|Bw|AUn)1L%)6dCX}g$XxdhDY}jPZ;9!ZN;%~R& zNiMxUDda3SEMB#AzF7rj&MaAwanHOLb|^SCw6xw8|4ITLUuIYgzE1z1&%JyG1>yDJ zA(@+@7O`hTQ={M6mEYCCuHeFeZH!t6Vtmz@L@i%ihKXqL@VYKs!Lb>Beo&$ZiRx-k zPE`ebW1Y+C%72JXGAl6PqReAkz;kC-?(?XT+g#Gqqn&x0%3f;cxpVv$UEgNMR}I*+ z6L4qeUOAGfayOR#ApJH(5j#NP183_o(A|2E%QDx8EsnE_`O$d9#7l)uaaVop930GT z!)*c_0x5H!45)|tbNy-@FRxB!Zqhdh|F!ihJM;uSV5MI3{+SfK(EVj~$@nU$`nL)a zDuI=815RG_KFir<5N;om&P0GtmO~^!nRX5J$ZgTjRF$Wm{f`g$XLmiGasf3kS zq8xFw!teH%hrZG!3OKO%_0A$}`wUGoa}-o5V^Z0=`$t4Ett`6H)JLOztMi2=DUkG-{n z*?O_+udTYey7mt_C3(H2_9Bak4P9JZ0Fij{;zeJ_PX!efJZ^4oKr}3BW^TyTgFpuX zDgYXO{P>Zxy|ldSB1HXwj0|UvbQW1TIjR5k>nyCuS%_M{SQoH{Cr_S05+n0EI}dW4 zDyLYJk*}Nz$6wgm+P3mEEer#a0slUe&r=o@bS1I9`eId-nm~nFyHx}k4$ifpiE1WiHbJHR_I}?jw>R8eP(6`;L5JR%~<-R8(`wx%BHLW~dkj!Haj#%g# z^l-0h7hR&RqGEh|2ZI1pxb^uXGNG5ArX0?A&XA#su29&I7EO zPo=hF<`?Ss;#ObY-wA#L#v3qlfPn9<&DCBQdF@P=zj44#3K}`k0ZB6Og%|MWZyxij z7lmFqJZK5YlI1>B5>XLBzh2QJfVifogHk`~Gw*}H3ScdDOxQZ~fFA%jYrbO8(Z6o(tv-=h|GfJ+y->N-R2Dm0 zBU8?`;I9D_v65IKzk14?qoiX((b%&aZRM3n)Jjqv!SA0xI5Ih(F&t;dZi5NLZWCQt zLxI?45n;I57u!P{jeQsY2`g*6Mfq4{5^1CgbK-@x!v0-fe7U@dZ<(aZo>|Gv_*=h^ znHl1Htt_0HW5)8*MD{7=tqA2SzYq3^Cgk5W<~OUH0{>}XHt_cs8yxu@pOB%I&x{qR zh#o8SzyxurT(j!3u@RXm$K=igE0d674G~oJ^cj`OZz#!*jawN zQD)oBMJdWU3va*#;-Aw{ZPx}SY)!j}Gx%{y<>y64j0uXAWE%oI1EpGaOW;^L5@?)o zppVJQb~;yy$Sz$x`~%FQB{}w{_4G1o*zRx>XwgivZ}`nrGPueGvP~HNAev@+Ue6R) z7t%9mv8Xm#zj4s}lCfq68u}kC-6OxTtq>NF(}}n*q2Zd!amCq%D0V>25d-bcOpkd4VN;+*2w)NvALe4lIVzbsC2kBp9x z^DnV;Wcxpzsc~9YN2yp2Y-sNE4%q;xke>J56(ku7zmtt%>mh%*Q}W4z_ApULSh*!k zjeuHAwxQag_WYoKb0%N#KbW_s=8mLu@C`W`RF@fAF|sXMsGp5l8fKuko0IaWwdJiOOq&=JOcIlzmdU*>Fnc0O)5 zv3G9dlo-U6&0FuzOi%w-^>fY3x*@$XhYQrMg0CSZWUj%}dMu)H16IQcvdc50nvptf zY$yRm^tjFPjlKc&7&cB6z#c%jwuODiH}E^zTN*I1f+F$tZ65XOmE@U+g#B_D4I4D7 zKKPRxw|`jg@qF8PXObHcv{CBcaO6kH|3(%-w5j?4QO|HpXB5HQVJgm9;F&9ri2Eau zHRB|%1cQPOixba{B7x+p>m=cem}$wbYPpmK^w3>A7gses?_fd{S>ZnA`hDJ&7oSQ1 zsFmcw0>$d<6;Yhuw<%r$ff(yf{mr~eTh`tXtWqzvwuKnG!?Exv`0hKSvM!hBghA%E zRQD9vw6(olXu0kfwu6oAMsq;iH)kXB>HHo9r$SrWuYqT9QVHB<=l!TgLF0qyWr28Y zqyubwC~-~Kn|t{iW|d;IfF6v#nt26Wk}w2DeiNjW&KS#WLhS?9Lj z&;Y_rPkwg55N4bT3&?2Yxe9Kh$1vui(NZz-n}5{R?>5k5eb`Mn-kxUid;n27O& zomJ!~tRvS5#tWHD%%u56(7?+(H{-Rrqm!9HlUdan!%6)uJCT+i$SFgV%KYD&q&QTkr@(AE)Wgx7%KY3!OwsEev65L;n=k4 z4tXK0=q49t^744^*FpQJmMud=jop?9f#ehAFjI55{e7_UWX&k=`}dFO8PaQ6;*ei& zrV^0Nrlii9r3KXvbA17#7gaEWGG}@LqoRlgPgP61SJL%%V(-h*_)mn z$ZV%BKtVIjd$RMlXkm{{viMa$7&S=rH2W?t92c; zM4(pAyW@I)g&9LejjEP_NPIa#4|V{utbp{IwZ?wn=4DVPfqj>U*4dth#Oi9rx=`EmO_OR0E_9f7&@RyId-$^q8ohmvrucvxB( zODlelnM5fvGAwo1PsBlWn+uBYyOFu-mc6uZi0CScj*Xp(lQZsj4Ap4abIgt{!ZJUk z0ME21?=KZ_ZXpNICc`5tA-oj`&RgR}jj4dTR_;~|p?*@msdw2kiMpJ=Tw4iwd3n<% z(ybyzS1$Of>3m;oeJLAwcnvNG1;Lv6x);ta3fli^-7^Cj?l|gJ7z7bnNGN&L>9XMA zdi*eT^sC&VVL@_4#F)-K@?%8{3kE2@Xrcg%OW*5|_qP!(>y8t}3sOMadzLPk?^T+0 zwDp(qHvdBqBWf7Aw6=d6g;5KK>xp(L`m_)TZo^G2fUo_3;3DhEKVPt6FTlB@-0_wc z93)s`ivLXN|Bq7f|JS{Z8S$F>B*(93^yAP4S}FPfaj5Zd{=)v+A)J0SatsP=sKp7S zlIE)uQ3z>3)9uuLon;=}s1M#KG~wjcjFXO|C~!EHprxOblF%Rh5AHq$(C26B#N{RL z+1Z&f_nDUG?)+eErYPDGT4jhCM!4VsBG%ww^%fws+SU{xqm|jA99veWcRddd4*?eq zgo$RV0maaL_T0?+gDj=8gPxQu(*w}?`-x&h7vN5Z`z+ZN8{3b6Il)T&(RxuWHbb+h z$(kU^^78Tw$t&YPubJZKFq*zz_`y?{D^RmthteuB9lZu)1QV;Egb>DIVX|Pg1Q5qCIS%GZ!Yx5#j?0U0DUjF{V; zeTo@8GNMHrxEKh4&*@Bbs*lT>3J{~nf2qVP<^f=NJXAra3kd$rm@&CrPn}b)%ieix z!$u1g2!TiqY^9K# zva^w(1Dp*0>sI*22<+#+cOkF^S1MrDRF*8C z>JhYqnq($4+dl*B+OFHk>mG0@xf-6#R%pClTt9PW2#myR${%_+kpn*D_Z{PQMidbp z9ZvA5!QtHk2Ke`z$@IlDDi|Cu$3;_!e+Wmkl=^S}Ev8!Fcm){jQwaL}2tNLabAMvN z^vm;*+gIls%fP(4bwfsFyTI~5hT{Ynl@6n=OBc|G=nNFkQi`s_n8h9BqUzMf4- z7(Slws%-SPe^UbzmQb$p`V06iGvG~pum1#>k_HW8k^DZ~+IG^?(11uuOW*QB?-OQ# z#4r;$L+d>EB_reDAeKgy)LArGiOi&xa~pODU?4a?jGhc!@!xkro?4SbUK29fQq*QLjOo<-~5wK###&JCQKM74f1RUXm zv*1Z(W!sUwyUd9{4Yv!7SbPRReiM1=mo-hKb?aKryJNlK!3bm0dNmWmsCTCVo% z*@mmk9GS^trnxjG|U+%I%3KNklMSM)6@)_|H{}vWg3@%%THA} zs7qqv^PibAv~}ws;=0_;lLnkv@%8wdo;&|4%>IowdUfXagkjH}fAwTfZkX}=Sf`#J zWEdTSpmMLl2jX0<&yn-i21ZcMQp{499Q_UFDLWXYct_x^5v zEb~qI5`Hs%>w-r3x=bVfliNksl145#1juSZdl@GA+jwNjA))JDNHe&Bn5h0eD-4CV zvaHf!UVkE<8Z~bJa0ZsmPd8&x^;Q=zyCr9>tTd(dLT+&{E9?G2WVZaVnKv$9Tj$$` z&)<_i&~Q90lu3eFiqm)g-WMlt#$eQ6)F20?X^QS&W9pGf@1z`xVm<_G-g%Jv?Ayy< zEm=eAeQlXh`w4MjPpFcz!ZB8j7WS$MgAT$lK9Y0k(b3NLT2i>V0` z_97|vhw%1xFea9fC@>){*jd9-4f1|uK29zBPdiLT3k%);q6eNEz ziEgj>mbVkg){P2$StG$R&{L_Xa*Ax*>lQUj(jwv#i}GsSyN$)0j2Y4%0+9W^%TWCM z;bAq_=`jn|cVWlxwu>kJnz{u_}F{EKb})>xp7$;>b(XeE2hw`?zB3|m5L`!N{tT?S^wn;qo8ekrD* aCFP3@%;gv`FhPkgL`hCfwnWaR94uc002;SK|6W^ z0Fk)BUtU%+mb>|nNhax7dzYi~5=)g2&jw(fl8fVkqe|@B_!ErrklH(5P_9l68(+C$0Frm z|1mY0V`cc7A+QyI5w6du2YY+Nw<+q9dkAQz z0qo#$_*KY6bs*on{_yz$GvGL)httNk`)oO0dOqKBDXNoVaO>je>AdQGu$k7HMTmYbF{e74Q`kBj}0u(^oF$3 zHc7Zs3PADlmmQBnhhL7n8x{9IkF+ERhAZdh=cnrqnQ$i}Yy^B>wJ%F zKIm|Ps6NJEAhro}AIp=MCW*+iNt}Gkq$y4l(&XWO9+m!xO{q?6@g`Jj(L)gAi0EKq zMa6>nnmQP|3*>!wK-^7=g}nC6JQ8V!R)(AY8Cf6uI=*Z-ZMU@r?LslWOy@+3a*)lG zB3PN6-qDx(T|-;M#t8@ZmL(ppU0VOPM@tk=WC=hFDwR)rmk z>Tm@_P)puU6H4BZ)D>T6I!!>^UL3P@rh1w++vA1MaH;NPC5hr|?SvzZ%Z5XhzjwqR z@nR;=Jm5TMC~6`G`@%>MjK{4oQ2~P_wUri~z^0tK^)_z?PLQT70~ArGq931ZjbgHr zW{pQ?%@iZAyq@imt7_ zQ|(n?75`e+qD18-+>C(S^kmv5u_3za;(U3-l4G7} z`O}cC{*AV60)f?J+^bQ%t3X2J&+oheu|2&~@Oei;jqx))+xoqD#;3m}Om6&UY~%8_ zUia|TOw+zb4t1d-<@h|0T_zPg`Dy#n8gHPMBdw@u5{@(R(TVTFa76pw?ZXC@rG4}! zMt?GHhmOgiYGkoDzcuDZF(vTa3((CDM&7MC=qJAAE#+cXOfk8U3l|-_{^C1>Fn%-O zdCTid>&>mLyFMN&ws%NxT1w_DICVJb5sCXqUdSLEEjWoMS`;q#9tl&@vX0Ac{U!J_ zCp_cXd#g<0?06xjXS8&@BJ4}o#WVj=B98*KV9AhyIIj4cH~^;j>6zI(wq3OIA*85u^cFAXPOGsv?S%T^6phB ziL@)f`R_w|yTbf594>22PY#7(Uk#lnS)a9~ZGJ@kX@qT^HED_MEYeq7XG=NtoN_C1 zMD&R^+b`t#tWowl;(bg<#IY-wYX61r3%&mRF=DATj^^G|+j;TQ%SA3_g2#(MkQa}! zNA3@dp?Ov$48;C^zqnA{{q6Yd;emhYO?DP)`cY%znaI(*y^}5%hRF;cqoQvf&#SBH z6#bGN$cAiRgtO$Jp`mvYxHnzzWp{>JNvec!^A47}AuUeRuDz!zmg$%0l(-|rjHe#|ffcy+si%v~VrOh8T z+JxwanOl9B8_1w-hQq7A$G-?5)VR-#OK&Oa9{mFsS+$QC?YYKjFCr$3+7_pvicugE zolah~QCJpuNDAJ)`YMr)@`3#B8wUA6g0Njf7y|uNNvr#Lc+t$%)Ps`8s6%w$aW}Y9 z!CXm!s%eRgqKQu({8Y4TK71i)D6zV;yxC@rkPTiS6h5uyzSJ$({h<69L9=bz)_qz7@ncmv-3ptI{490r z$)K@16c+MvGgw96%J5lfkO#w5zmqZG4RtY!N6lJ1E>StmNfs~w8$V~Z>8y)W2ixH~ z!YEwlx}O&Y1bx3=W~aVT!iqGgV{+|xJx~s5l0;B)pavca zj4W3?jg%YIqy)89-L8K#A_NjG6$tiD^{f<^rtZB}=|!Y%@_wL+&s*ZDHdrgWPhXa< z{!5=net#sb!C!_LG`H#+I$)0<@^=$&hiw%(b-b<*vy-l}klS6C+u&zv8F{M9EWZGz jrq#>u>no=*#B!`Hmm|_ne7`UGCjl2HjN>Ew;EaC*CI@Vz literal 0 HcmV?d00001 diff --git a/source/widgets/check-button.png b/source/widgets/check-button.png new file mode 100644 index 0000000000000000000000000000000000000000..65f964487db16b8779c74f7a5b56e39f2fb697d8 GIT binary patch literal 3355 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 literal 0 HcmV?d00001 diff --git a/source/widgets/color-button.png b/source/widgets/color-button.png new file mode 100644 index 0000000000000000000000000000000000000000..82d4992ff029b21c4adab8544cdc7ad8ba71b6db GIT binary patch literal 2632 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 bbA|XwlrIsh3gN5#{ZTYGMVnL_yFK^|#}@Vp literal 0 HcmV?d00001 diff --git a/source/widgets/colorchooser.png b/source/widgets/colorchooser.png new file mode 100644 index 0000000000000000000000000000000000000000..a281f541584caf2de7d3eeaa7556c85f014f3355 GIT binary patch literal 18719 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 EFK)Y`5C8xG literal 0 HcmV?d00001 diff --git a/source/widgets/file-button.png b/source/widgets/file-button.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5e8772089a0fcbb6ab02679a9a2932a3ef20e5 GIT binary patch literal 10086 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 K{9D-v0sjL}ARs~j literal 0 HcmV?d00001 diff --git a/source/widgets/flow-box.png b/source/widgets/flow-box.png new file mode 100644 index 0000000000000000000000000000000000000000..b9788e493a47eae48aa7da1ce65cdbf3fe06816b GIT binary patch literal 7060 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 U9pGsVd}c!dDT9@&6)eL42Qv84lmGw# literal 0 HcmV?d00001 diff --git a/source/widgets/font-button.png b/source/widgets/font-button.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d6cfc9e405a34c9593e521e693b86dfc67d134 GIT binary patch literal 4284 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 literal 0 HcmV?d00001 diff --git a/source/widgets/fontchooser.png b/source/widgets/fontchooser.png new file mode 100644 index 0000000000000000000000000000000000000000..34fd2909d1d0ff21ef8af6bdb7f37210f84149bb GIT binary patch literal 54845 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 SS#)sVpY&4&$pZ1$Z~qrrm9uvM literal 0 HcmV?d00001 diff --git a/source/widgets/frame.png b/source/widgets/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..6ece323898add26fcd09359a166c00f985c2867d GIT binary patch literal 2038 zcmeH|e>~H99LGQNYfk7oL>*Zb$&$1 zhWk#%to(?hOZ3S6m~~_m6={B~yT;6HxBLGd_xJsA??2wp_v7_?KOXP*4+jE((3F6yucyiPw6>XOpmW(9BIs)(S^wJ~06@af;X?#U>AWcHyD+3> z&&P60+k~UVE(yM^i9?v?qHM=`>g4wDEoPbagNbj_pu4ajBZf{#KJn50#lHAKc=Knq zAG&cPwZ{^#^U`YOw{2t~3EVf)1n+m4jO?huGNNPl<;H6iw=2n|ZfE`H`(=x(c{y|E zdis02)g^B>p|DziZwQPd{l={_$2)$<&=sa8Mek(~WH=v-n*|MP%?S4Wg04e+e%K|( zbL+1s4>?2TTer3zd8J=57Fb)b1I9TtK>LvvgdPtVY=p9FhOFue>qDklQKfsw9-d7PUwuI;{JE4sBH^%1 zrmU7G#N~@omLqqn(C^Vd?Y6VZl?(m ztlaq;MOL?@eoH43i8AHnj9^gAK`p5B0?JejV~^FKcbE3hr%uxqCnjo#ZI54w++Kx3 z9boV6P;i$#xICfPSMg!&P~h92Qvk0wHpGQe3@h5(+vg-!Tel1}|JpMxTuwg6+7TTY z>HU#%x}o%Hu$nqk_6Q_jl$?MgcmeqWkq9O)i|Uam%EA1mJL+xUC?pd*Ad-5eQcPR) z8f(1Fs;Q|N5eTZu%VO5$8T5sTAll~d(0Klje-h$?McVA9JXfmW>!c2KdP>TNsBZ#T zvW(`hph@R6+*m%Odk7y&iVgBasgB=V#$s(CW(4K_oU=$I%Dm`+&y87mUdQp=IJc;l zvu@;Cj3nI_vutnN5DX1f{yOhoBs<;SK8fgxc$|z&5^-yaOFnbSYBA_6{Fnd@^%Xjh zWn=rw+*8jEPN>xUr>YbK!fig$24-)yj$w}1O=OLc5M z=kucVU%XU@ouq*y9t>^r$k5nWrBGN@=V?2j?`Ed&Q?>nF&F@f>|Nniu0~ zNjI+#1$s!mdKm#++z_q>p6Y`$S>Ruh?ZCcQAc~khO+T0)SWAd=H983UL&ZfdK_SF- zekTG0{B$a?fy`=C#`FGXGGk~yKQy-OBPc@S-ISa1_t^htZBAE4p4XmU7vWTY&mzcx zZ;^#vDCdk6X+Mlk>l%IWWmac3j;8IWXN`AzeX0;?jZvP0UhEsE09V!)x*ek%C0ciD z&`9S@=sISqZ?MW~0|+){yL1fOGb-kyIs*~U>?}ToOfJ2b@{Y#TO+M9rc=fmRl)W04 z;^b6slY@9`5P`Q)9emfLQ+ycEsXt}!8tl;8Wk!GRN1vi5$Tt}vy>^RzfS`4}&Bpxu z((2@2y3!*Jn5`5uOS!yl6$n^UTT}nYvvDPPuuXuSg>>qHK=TkyuFXs+leGF_^?I7| WP(f*5-GRS001~mjP-2*0K{~G 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 PK|!Rc22`yCSbz8ryzh8> literal 0 HcmV?d00001 diff --git a/source/widgets/headerbar.png b/source/widgets/headerbar.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd964a0a0cd757f0f11d888045d3ad7a67f3334 GIT binary patch literal 5538 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 literal 0 HcmV?d00001 diff --git a/source/widgets/icon-view.png b/source/widgets/icon-view.png new file mode 100644 index 0000000000000000000000000000000000000000..274af1e415e9ecd41aca8901045f1019d0aa9ee6 GIT binary patch literal 3813 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 PR=~u_9Qp3jov42SqCC~% literal 0 HcmV?d00001 diff --git a/source/widgets/image.png b/source/widgets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..5059a07df07dfad85f4bc18b74849762def83357 GIT binary patch literal 6123 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 literal 0 HcmV?d00001 diff --git a/source/widgets/info-bar.png b/source/widgets/info-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b8401e3f2e866ab3f1a3e1e719141a9d29e4ed GIT binary patch literal 2316 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 N*j&6~Nwjc}`zK~RS-1cI literal 0 HcmV?d00001 diff --git a/source/widgets/label.png b/source/widgets/label.png new file mode 100644 index 0000000000000000000000000000000000000000..51f5a805abce89dc2cd595279c100492acd7866c GIT binary patch literal 1671 zcmcJQ`#TeQ9LK+#`%scwC^elKDH9TNZ!XK_XjE9?pmq?eTv}>2a+%9W?w9DO6H?7B zOVQAgnM#-EiDDtgaOSpzWz)`{=llcbhjZRPd_JG&^L&2zJfG)zzdl*MKJKb8T^ImB z73+b)0RWMf0Iw)7ja6QFo;1nExnTVjrMjvZK?6YE0gG|=Csi$QqtE%B(eD>5&2c`M z57QIaF`tP#bZZYwHz+NPM&0NoIfr1Et4Ue4m_B6~O}9_`R7+2-I$i15?WH2pku;ry zDSu38hD^A%B>JGDpC---YiI7)MWeUvSlAFd3>3yCRXcDaOC(EnGm(X5n z%{N;Mz;H^Z4oQ+!0Jn95KTTUD7C zC*gX^i}2RW*54kfQs4X7r~jVs!1?YsBy+2^F{ktdV={A7q$CS{S#F<`X>gV5i}b&- z4mb3)pu*zke$rlf*o8X6nJS6-~%C$DNIlGk@Gb&7(O#_73x<(%Z6tgMZe*-V-EL`F_>_8m}| zV9F>+cMA$Cvx`(GR9~>ow->8*b#+~Rw5hi?&+YHIMnMtQOx3gY9zTA(D(=I_`H_xB z%o4_}A{JuurhSMNdL&v;dWP`mXb9|~9KgW6bCu+6Mn2j+-qm#R)jpe{9oDg9?CPeX zT~Uw z5%wib$uvX&UpIZ0gWYcQE@4)!QV7MaCngu4R2A^TF}LZcbGy1Kf|zV*+UQ-|BU%6mE5)p}JtMv%ac z(Ir55)+FinUr@|^KGt>~^1kl08<}i>a;Rd!-GI_tR}&NNDMH9~BMF*^wV+>`1LiR` zIr{GQlpk5)qn1`yzXX1l@Gx*^3dM2q{No8>L`w~+Ge09Eqe_rBrAF`586NRK)$`pu zvN3SbNM)rw?+%IOuPzw8r8K!%Z4UOHMr!D;wQg2aL`6m2Tgk(h^a*)92{{?J>znzl z|HC@}){n)5#&0feC~w+5mbu0l;ud0Ib0+tXX$m-&u`B8?#UsSO{ zzQSM(92c~u{7ZhJ64VU5i;(F)paDR;D6I&Mg2<+r9F&VKR0WhCJW>|JNp}RD|!ycn>=YAq0D9NZ!?1% zl^nU7ygha$bvHo^bqbKu7d2ZhO|MINm0Ym(CPa#~qtEx?8Cd4`VQ9u_ndNNmzR>De8=aT&P+qU)V_{qYau=Oj}UAiDU4 U?h)8vEB!10>*|Af=n|UxH|w|JMF0Q* literal 0 HcmV?d00001 diff --git a/source/widgets/levelbar.png b/source/widgets/levelbar.png new file mode 100644 index 0000000000000000000000000000000000000000..a7941cb863d5e87488b9fc6828b5ded61798392b GIT binary patch literal 2401 zcma)8eK^y58~=?nm01*c+U=V!j$b$M_$t*+EHh+kx7bq$uKf)MRnphUZcYa zhtq^O80F;%p)r<~ysQ;l?8wY!JnMP>c%JL&pXdJL{(i6P`?;?Bx<8-$xWATJ0kH_?Vgk8esOt4uvdd++Wlj@&4kJMUqZZZ z?G1UA0t+xD2A*k;q#r_lZ#s8pL5qHj5hA1&za8%$pdxs1jixiJCkY&I;Q%>|_3?;pBF z5Rd-KH~94~Xqd~5PwO!;j)i=s0wiCDIOm4%tIgg882c_gcZVk-tFee$u}>3#!Cy8x z6u9)k4s%+px-Ak!^T6@<)03^o21Z5jJ_}VpkkR4zd$-M#?4Na)6l>E|e84Gx&H48T z=;&{m($|bfU?bzZ)RG}xN`iAoM!O2lBizq7kK4Vt*MB|bKA@G~+PWV?*=l0k%w0T> z0z6`b?Z$_>rT|9Y17tK4q7LlX;s?-BKdZQOb?N}d+baOAXlrl^jrtif&`42Zn$s@@ z{k)WFtx#3O{(ida(TSu3>EXxHJ-3}hG;>|28iB1%8N`UFa^4S~e;g)^hhz24cHY!- z)=~=z9~>=o%!~wGDir}^{$pQJj|N-jovnsNoA)!{3x)f6@E4l^0)a5nQJ-F3BQKPb z?2wHk@hH;xJmhr9jlPzQ&?E(<_^y+Vsa6Hi_sp3Sw<5f(I?BMe`U!iyylF!NyJ_)1^f^wXOB_wc%^}foeG7o3&$|-A5 zj%UrhukQU5Rweq3i3VBP)iWKgL2;NM;PAN-f=<)q*?=IRf_OnKLGb(oPd*=ZC1PjJ zY1_`<>1H2>A9C<%!IrwoEVQ3jg%1z|_?@U2X0u(fSnx^=b#!Q~9Wd^#uCAuvxpSxR z_s_JBr4zW5PZ_osyaNM?pLzZKn%icfWZxli`=m-~6;s`Oq9IY2N~QiwnO2;YUqpqk ze<0SexS)>R2zGHaIE2vHsh)wHK5(9jF+OSz-=}x;ozUT;ldU&WZ}3A1whJfw4gMd+ z|Bs>g5^~YWAVt5Rzb<$XEGX)=SRgr`8{)nh>4be>J1tmP#80QS*z}H#*d$rAU5q-O zg0BY04UUl=zhRHyOM#r|q9YV%v-W0&`~Ihg(lj~vE7WXl77H*ml#*N-ALF0wM# zBtnd`MNyI9x9wXD^`aA7ax|WW@Ne+fC2_kQuDsW}8PsGmJ7Amd6mc+UgNGtbWvQR? zw~6}bkk4;{Sd~s6$y-if+tqG#uEx&}vXRa-*{ANGX zyd^P#zm?52vhkI&IKFU`S4;cz7-)kj%5F7D&p>!KrWyhh@zACEF* zB^@izj*-j${KK5iWFBsBtJ!;_{ z$jC&hZt~{9Z=f85JR)Lrbo7!WFigyzB=LWm4^K-4`g2EPrd0dtcEwy6x*&T@bV$0_ zMJg{M^B@{m=C5$#LkT8NJ6zCwKHu$HyY!LlOfJ?f?9e?JtanAO=&ZG@!K77HRTUQZ z;|^NptatO1OEuqvTKq)boE2OoNQX9aUbDNqw^1$%xCVVz`VD!#GP>@iFuC*PP|E)p z%9p$23(xs)hzE{i64|9F-=o=)HUI)+9$bQ|xVr2gD|-l6ondGL{w}6(z0T%_p0xs3 z0NoA-tu*~3biCM5O}1-0RS38C%1^DR#f}zUoBwch_=$2#p?u=OY7Aiiv(yAWv#&O1ZN1xY+ zJ(Qh+7Rg=AuQ|kEMvdJYCT*@#=(Kr@r)^!oj^^xLu}rVYIq~@ibsX!7sXZ2w_D@N1 Bf1dyV literal 0 HcmV?d00001 diff --git a/source/widgets/link-button.png b/source/widgets/link-button.png new file mode 100644 index 0000000000000000000000000000000000000000..719753f186c732743c07238331ada180579a6d98 GIT binary patch literal 1980 zcmcIlX*Ao37XL?OL5OaQEsTz8pS9J8s#Z!;Jc^+QMM&)`s!tGOi&iZiN>O2m#5Ohd zWl%xUvBXl_Ls4o;ETc*+B?;2J%z5A6r}yrMyZ-LE=iU#$``pgPTvA+K8~^}GOAE9; z0Dy!p;0l8XHO1O>O=v_3rk3|$LWzcXCj$VKV2QqcFM_i5DHyLnRATIM3S!a(JFA5G)gdI;#W|x@2{Xd&yX%k7sHD{%=^$Yo)#FUoNaF6Ju%5fNu)}4 z5I*mfx=+`jw33fQ?$510YCXJlt}T9XcWL`G!Lv-vg)-SWYIU>`-MK${OM@4?P4u&Z zs{ThjMFL;MYBao^Xidg@xQ`X5yMCBEUk`4{?+jLL7}(<`Y}fd|z-{!-!5aWyU*Fco zbk)7^q4j;>ejeBZ;WETZ1F5JQw1ZBb)?z+h9hMKiaY{O4K{wfB=RxI}%duTka8xN# zk|`Ub<{v)BULJ+x!EqLB`7WIk!(k?(R%|jZPvkE|T`PB!+pApG4M(9P&B#-|%I=8d zA_pLYN){uJGi{~Mncyx1=t!qCoja9r@g`g8<8WYZ+t?8uSs;Sy!HEN>M*z^W(C02V{3OLd{7_CuI_yhQ z>Gv*X)o~}=CN|{-lS66?l;FpoBf_!#5HDeKeNp4^>~WIQK^yWt*)8O9{*1i(!zxo>+UGBh?y_vZ%m^oM+W~kp z^F#F(0*!=LRNi7u%aSim8&?$$>d1aR*=GAlz3AZ`)q|LU)D`Jo_|l>+t-Mj%K>I-8uIa=3?bUm`tTMtK|9LQfjzOXR z5xQ6I$INjKJ{OZ*>U6GlTilQ_3&j z#j)tg=RB!(Uw5Hy*3^=IP&l$P&KP+Zv5#fH)io93^^ zI_dY(1Xv%>hJUr_`_A8+uu zVMXs7p>u~C8ynlvZ`N6$hWy>Ioe>}>ST?g1ZoQi#o09sK(Gv8=OujOP^apcJS$<_V zhs<5|AUoGY&9_c0e>D$TvDZ(qPbzF=N0B{f=rSB|-M*2O0zx3Dp zATC5`Av(E3+}qL+RDmzhvLym^NmA`3AdYc{(%m|bb9@1`#DeMfDh*ilDHV#?B*KIxz_@J1gl2U9S}@G00P-6b(`*xZQJFeY>!xo6Mmc|7 zPMLXEShu6)C`h(2CuMA1sAB1gI_k^r7@ZGj^L#Yje%`Ct>h!FUySH4>qfkD{@^5** T;U@Oke?4bQj19WR6!-Msn)IGQ literal 0 HcmV?d00001 diff --git a/source/widgets/list-and-tree.png b/source/widgets/list-and-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..1c81e68b1a0c41e3d27995ed7cd1905ecc52560a GIT binary patch literal 6134 zcmd5=XIN9wmc4WkA}CU%Bh5mu5<-#dHK3gjBYH2?r0k5v_Q0RRuY1*%Dj z!D|^l`z`Q|&{N^DJ}LMLB(;eE0J`GGit_p|(>G^)18;d>cJE?bQ*9&?4hUD}U*ACO#M0)*g4jd1E5x)0 z+-mFQCfN+}439C~q3)G;Hwb3@yKEfK9m!pnAKwr8z@zQ|Rhc~$rKF^Ur|9nAmd2P* zTRTMou!qjA#{{*drD{UbSr&_3@krV6A5m@)v^W;#Pt21PRS>Z$&ab@+8e(MR@m^dM z-!LPFlL74bM!p*avdJUJ*45+?GQr0H>5aMu&!c$>Yu5Ajs&XQ>P*RE;>Cz`@F(icS zjer87sOI9}AEazTS3BibP9T)j9Q%y*XjD094XNUfJ&j= z{OF#Xg+(UHLXFhpO?o<0ZBvQ5EOEM&Z^;8ot(U4wN<{JT@w5CL?U=RQn(1lt+UA-K ze9~;In}EXIWWo@tYutEjp|8Qb{`(`p4S%4t`IHs{flP}YOQieG`tkkwxa!4=3zWnj zZw(ZsOfa`3qT!u(mDz@?@K8c9Wx(a<_C|o} z_~|l{{1~G0)fF@J`+=k0?V;Az+P)hsw-^{A3wJpUD<|He;aqp`Mr38N0k4r4dwiQ> zGP|WTbc}tQwKHp*!lA6mxOGcOS45=;2kwZKjUx#5=);F*^%})ssI$?+ zFWqnEsKk6Z|4x<|)RMkL&YxA$kQy0zt;&=yiGo#YFOD1-T0acL&G<4&`!H3TYQ~Z9 z%MTv}t1*a1fXm?88J`iY!5S$rvSy3HKYV8Q?(%Z-^1k~bkEEBf6J6_SfTprK1l|FD zdTpF|)Hu&58ynN_?t0Kelz;sA0jyy1DZz~%9UFU}92cUTlO1qODqzG^=Pb@>3uX2w z7a}Af(bF~UI=-5bS5+k?+ua42pn=IfJr;^eO1g%5i?WR3RIIGw+^}>3!=f)074N_H zsERT`cwplmYeR#wIcWG0TvQ*UZ!Ml?l9{C9?G1TLMz#VW4j!+k)_X*7oBEejI%`Cr zFrdLr4LpgDf7h^d^Y`K+nd@}7I&+%BW`Q1+a{}rl;po0uz;Ptd5Jik_Y<>K3J09yF{PPqlqC*sxB^kjflxdvp)<% z2}wk3dZ@Z$)xDWEZe%_aPBE@@W$uops|uWUhI^mx?6?CA3=Bi-kPvCMKzSuwB0wdE zWwB@2n(q&Kbj;_WY=x1);H@=zncILr@>O`GChr;&@R9 zt0+Iy=)8{8S3Qe(JG0@e)h8P=uqH-o5fL-q{r$o4-nj;vVr3+FwiSifLNcWT@P|-I z7udXWzKxky)~JbZ8xKl%hTO6=&|+e@Xlb5USj?_sDYVp{cmK>d-yULzYomWv22kF= z|6s=07We-B`;)C!sfRx258K=29mGs2lnL(ZgFD*#?-}S=TF(6rc1k-a7ZT#+=62t+ zA)=w7IoO!^psq~eyWwf!wGgJSudl0PtZHB&CNw;ptii3Ipa9#Gy4%}H2g&*RCHdR8 zJ6;VhKIh~>FSeN&7=9QeS+)e5fZGf6g$e`&jM6W`n`{LN|xDEX)WWEWK<< zCm$Q2>*`uEf+2ht8HsNUq~pUw*18G`CpJw#!HC%cV|j>Mc*4To)JT;{rLx||-=Bgg zL}0i+^#Y7jvhk(yxBx;;~&!hwcbekpEA#;~^l+ zr=g?soNvR6jEpQZEq3A0H$*+w(6Ct<%I4(cd|9S2Y;qI$c8`mTYh$uH>fpeOTQhZZ zVNXm=n>h6qjFO77AIaBd{n6KFa&-D) zti){aJ(kvUxa=9fWvM`=F|QWiwi|NpdHD|7GyqdTgEI8ohjrc(g#Uf21aq07rd4_#y!(%ZtOw7Y~S^z_aG?; zJFEn&PAAj$Y6V3Cl%v`ykLK(5kLI2j>wiDmZt*>B2ukUE?%}`3^T05uGvxB3emRek z3<9yW<-xI?aI{haWmjS4&pf9kQW#$Dl_U07Nw(uf-PvM)BACirJrIav)?s)xFK#Dj z*8J=m7^UpsP{K55rXxHS5PW{JV~CAq@FTO@j>fKe{RmuG*_VXhR0<)=$EM+9Vhyo(a-3HB;nkW+`@8GNf z=GC!r)K7S|u8xB&{A#{q-;|dc-R0O%Kzu-Ab-cw||6*(cV>?&xBmp3aDcr$b$q+%H zFA6>_Mxu`fE+$&*wu-vD-?1!5zn{K8Pmon#mrM_U2WWkExH+}32crI${M`6jI1T1! zisoJ%dyF5CR{H!Ym%xYQIJvd)gzHllQjM;bxw-{lcM%d1WuTV}#GXBSW?XDI3ZI)B zF9K-<(PwD)Gg;oQ(r2DEc#q5pQ;cnCz3gO{7t9`lA&mFUQTN-`~ zLm&o&3-jI64vse5Zpb#nYlQrTusMoJt)%skpy)@3&96?M|B22i8C50?9qT**`uJnm9M>MID4o z->w0(T3WKHahZD4YqK_L>5W3GIXd2RbaZ6-x;0&NzV_gaW#ALAklh{ah)s(Vn?9ll z_<>tfjAbn?nGI0sX8*&3lO$MEy{i!jEOy(o%?Sw!RRQkWxw`Sm$vt6o7I*ClG6_~8 zE5zUdgocIPbDb%POHN*)OFQ^%-GZ=DCS4H!U&Y~n)r)!Ko_LBF5JD>vSHY1{QB%$O ziE6o@wLi&l^6;qZQL%F2v897R_-$*Z@wRL*Y^Kq7+x>KH4bF0o?N~xIGNU@b{oI^_ z>Ey2Pk^u|1?9GtPdz0(V{d4$oRTsAm79N4B!(B~Y9*-e9Pp`P01#xzJ*6)e{5KVPY zY#BX`swExVN#hGCn2@xw)0of3ZMp2eeEO8Re!Hc6>1|R&lgLm+!cpny{_n~t)nnv? znL1rPr?QwtKmXmzz?yS%;7-8d?;q*T#Mf80FYyP5M>m+fmX~92LPA0s&CbHd)80JK z@O-4@c5(oRC@C|f^yRh+bFHjJ&AUgktbhJi>8^2>Pt>YvK(q{4LE8N0ilAHp{<19{ zt-w+^vlPr=R#N@8NGgi|lTuI+fl3VX;svGb=Kw{*+BqLot-7aVElJz4luy~_)Hc-I z)f|4!T3He?Ve4B%oF?N^xOh~vId$(ozw2(Yu9yp+MrI~N?&yH`GVqwSY{D5PS~@HqWhv5cT|4Wh9_XSB;!gMGR&d!;$WrRhtbMB zRp=G?$!GPj&kLG2*znqqQd)Iw{8rvTy3*Kaf%A0JZDc#BMxR}B?AM8M5R}zo{pVRJ zD{=XsbWms;?ZMx#TCbvAXBs4%x5EEiM7h->y4M7fatu-B6VCmq(&2G&Rx-GiM{To? zcDiF;C5=a>mpeGAuf@f-yW|2Dk_d9|Gblfc&kaNaj{iL|WbN1XHbm15SXfwCIrKLy zxx7}b7F|BugIT{KkUQR*@e3Xn;pF~qEu7M1QZk|e;Rc2NJ-!Fl+m{y`6OFOqtbuJ) zw)J6Cl=y}E_e)yV)PzO2tDv$X*7!!2-pi6tnMR%#w?n}_@%rHf^|?CX00NG;^Rvq0 zI#gm_ob)^a#FyRVOC{nyWJIIk%Rd7y6)zKu&liq;cgCCijEiai%m$L%LZ2of5ZX@A zp4y$aM4=Mmvb|>2KZH&=s!TJ@PDDYu1r8KA11G_dWj{X~bMY{zk}I04a}0-~Lp6og z-lq_sH!3njItBXuj$DLbeu7vg5`+^Bo$0iZETpKSA|>u;RBF;!MlQe!y&qYMDRv5U zhR|Ktw3`pPJooLU+?Z}o3*Tx?+E_IKX#!h7v|nyq9C*;1UvhRhQ&KQvbQOGIeDZxU zh6(@`KX34#d%vGQcW`jnX&kcxKr#B#bM-+}%@P+a?2Po{>~PsgVzz(xwSrsHpBF4R z`k@>6(ac7|JYO1ZcRm#qADLqYo8#B9vpr*OwR$Ed6S){e6dEL=uGCV@GjNosJaV$L z9kg0Y=re8%miG3SP7}vU9r47{(E@^BO+=`R4b{P7%n?U`i-qVZ(&wb&^XdBY2T!ph zrEZqA(ubTLLPGS>%H4^tTc4i6pwQI#q<2>RD^LE$*eCzg4ubD;B+V@Uz%uOYUWi)m z^Pd~2l@V;9uAVOJvddj1pd@7^fB&d)d-u$&e&t7B3Upcc8acV&RYz=35ca8torp+9 z9^O!XZS&in1r8Nvk}go6+#OkE8n_!YlTzH?Zzs}BP5lxZjR9~HSE;qI>YRkBut>?$X|78XADo4uy+NTH`Ub9nc|#XHL&$}IGll|bw0Dz-64I!P_}4o?8_ zVDrh%k;)1HS0X=FRj|~u?;0f$ZCd;%tdrd2V0s_c>>$+T&%yDA61$19w?6)PQf^Ow1nDe}}YfZq)chZvfg zPOgqwy%4v;Ja!V4*f~BjpXDrW#}B_^Nx7krF7jWc_dnHm|0151D1&sf8oMGRj0Ny- zo*hBmQmB&m!TZm0U2mfv_`D7>hNSyE06H$4HN<)-G&rvad#&hz69&vU`yY&u@c#Wx zpUp`ne}Cu)Zp}6K)6`Ukz5V?s1^O?PvnbyKR9YT2V#&%m>|9)7(g8=RzzLfqF-SQ& zIw6LrO?@Xp&|2uVQOFtAF*o1X{FULeHhQnn2|hV9u8DYaNy8|5{=$ILXpN zq}$^{&Jvw6W@TSt%o{8cao|rN(0X=%&UyO#uyr?ptLFGM^6TZ9J1kOD?UUZdi7xIUh0!+Jpu z?6QQu1*yZ=7%2r09f_7tPYHbLtqEb2aQV~VRQjZUo4FHi>escdGr@X3 zT?GqJcg6CE*;24)XEU9h+Jn>O%iW1i8CIL0x;8-7x(y#rc9i;a!!2c$wROJ1?i*tWP%}tkuH!w z_gjXZ7v(URKeYyR4QLH$)e?WG#B2Q9#)6g(LSs)LB_&Txkwh_Vli4>E9xDBFRQ_kb z{%d;vfAgr!%BaN{bOpdUo^-*EpF9L~H;tMTsJ=b2q5BW_^Z%SIsdpab^+SVLU5P0z_V(X z88V2Dm0&&3mWyMIqEkq3%tHo4(yzbHL%y<`lq9xtG|zI}nR4*cU?T;AH!!1qV)R@u z#0LzLHJ-E4-wZpPf<=29LkC{$nLA#S#Up*Z&3} C%$Lpp literal 0 HcmV?d00001 diff --git a/source/widgets/list-box.png b/source/widgets/list-box.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d96f0e7573e133cd088baece89267a2c0ed386 GIT binary patch literal 6647 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 B0Hgo_ literal 0 HcmV?d00001 diff --git a/source/widgets/lockbutton.png b/source/widgets/lockbutton.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc008f06ea8c43f6f1a94329ec9bc60068c611a GIT binary patch literal 2387 zcma)8XH*l|626qsLRE}(ScF9sDM}WpK{k}E7^?J^fDpt6p-M=CiXw;zt_y+*3Rn;X z0~nCLx_}A<5EU_C0#c#k@=87UPh0Duh2 z3F!`ikU$0g5@Le&p0od?U=zjLp*$r7LXZec2S8E^g*@h&cyE3r>VoHldgmhN+%7x2 zg+gE?#lXqq$TtrS#>d)L+;mrZjJ|5&{KCB;rvH^DKT|-67^oW=-KpPu9q|0gB7Bxf>DROSO*BjOT7!_Sz)> z0a5t3&_o=K>MUP@PI6IrfLh3LA^3xVL9|)<(_q{C4QUfwF zGG=Aj+E{pA7vvV|3A;HJ7Tw$lh_gX>`!FC1dI+dgOX)M{&5ZTS!5)ksh&@x>+cUq9+mq$RJW&$Cn zXXyjv8D}9aY^W4aQ1t-mpYw%n|LXWpmu*dQnjh0o|B%tcvX_#tjn6fuuDlt&aO*bZ z*ZwQo?*|6N8!RP{3xzy*zvLc}WEk#Tbj;oTy=_8-)A9zv)6>&6{?U!H1ZVZ>1swwj zIjx|eFyH2^1^ThaJ~A=Jf}#k6#jG@!h>YC1@(4V?g;6>{gwDLYfq;BV^JgbM%nTU#({eMmPqsI)kQ=wx-%GS%X*U7=JS(g7+fQ)#9r3+9a>bkh z@bfcVW;Bu>HaAn|E#ntoap>(Ojaa-CC~r^fJAlB8kvEnXA|l`BrpEYgaJI9AT#V7^RWrDqclND}PANEhX zoAg!sSrT`%dva>1IUzWYSzaEMpUkqV40w6*b&98_*Ajnos+0HG`o+t&o^NwQ_!J`X zuZt=|J_eum&bw$PE0R(6tlC7;5XOVGT9?bJd-E~*Q{(===?CWiv=>171P?TqMB?Ji-_E96|=k_7=*9(S66MqFFnHpc`0({-q!Gsw_CB?z=Wkm zy~p*jWwPEu8rfTk3ixo=o@mzn$w^ocaRL+(xtfF^&9t;Sx9TvH&`yGgu^v3wGB%$? zJ$meT*Qt&@UppEeQ+3Sr9)|{B#a!4Tz*VV3-37swVeiIKG#fZpK~UJSxY*e)e=^Pi zWM!SWp<2}+s;Fo#BslFc5bl89ZlxzimNj+-W}-3 zK3H16e$8#=wN=g&JgG@T4iH-r*mTXNU_U<V zkgahdFi<@%ZgrhcTv`sawvp3J;Yps$E~M4n=+7a^_jQs5a3zQ8I!C7Xb;-kS)((R3 zh+YaOW^?1aio1sg%Eg7V6t9KF_8D9JJa_33g4KTKpm*fCb2Iflv#T+SWA;nS%Wu0) zT>`$(l-Q6V%bIL|kDqIjy1a%LRJZ+gT6QkW6)#@}`_xDV-~P zqNnHHI{R1dLULO2Bx7c}JPDOo4858@I6JZ2+j_sUh3emN6Z2}FIn;tT^R5akX&&h* zC-HXc>+2Jym)ERnF$8*M@1VLA=*I>kWASPEp? zd)(tEv6vfAhCNgfL^US;+=Hjz4P2fj7wGC9Jj&}Rw5kuW(LJt_DN($T!7!F~fGPfH z<}kv(J(^1T_QoGn1UFv&@Bw4s-;&#o@PFqW{IUAffP=foHH?y2lvmXlH#+SMfol%4 zuFgN(nvzPV)BA`fPH1#E{|o&0J1K8-%vfGPTFcR_PDb2MRYj%2SGUDeUST!1+@g!<>KSNaVs0|0CER;lbbI&K1Sr`RAUa7Ez*FUT(n0pkOS(hv)iN0vKCV((ZQ! zKF$&Jx2^)G{F{u!zYBhO*lNO5I{~dr6cp-R&)bKz2RT;W)Jyk^)MUj4Of^1<+-}#q zP7!Xiv)`S$|B%r{z^XaK7GbU?8-tJ0FYqz#3q;|h0Q8}Z%Yf0)yIaK^;r~h${|A@+ zFBhk=!wr!NvyGdAjK@t`#`r9?+*eA z5>!4w7DhT8K5E%-E~=@owP#}Y rf)H5Z^HsWF+VEJvOQQ6O&iQO1G`P+hOB3SFJ2Ml?9*wND3%T?!{@h|t literal 0 HcmV?d00001 diff --git a/source/widgets/menu-button.png b/source/widgets/menu-button.png new file mode 100644 index 0000000000000000000000000000000000000000..0f642cd07478f25f40e812338ebbc85651fae209 GIT binary patch literal 3082 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 M8Ce_FqrDRT1;@ddegFUf literal 0 HcmV?d00001 diff --git a/source/widgets/menubar.png b/source/widgets/menubar.png new file mode 100644 index 0000000000000000000000000000000000000000..26304f23c08ffdd24bc22401116b2aeeaa0d11b3 GIT binary patch literal 3103 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 literal 0 HcmV?d00001 diff --git a/source/widgets/multiline-text.png b/source/widgets/multiline-text.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca895eaac053b390942b67fcd554484148460de GIT binary patch literal 2671 zcmeHJX;jkb8vlce)}&_HW@^;rHl{VD6{(0zV`$=(sO186Y%KL^U6)isAnjUdE-6T< zh!tv!xr`zOxZM`F6jHE;#ogQjWP~i&Va~nh+ze!t&&mfJt0 zy!6+btOo!4r`&kx7YH z`qgIb%Am#c)v`2xnw?rgbG<1J)2RuHw(=m4ItyY(bEP&XdGm%u(}Qo6K2|8tPYHK? z3Bpc8X_Xf2mtk#`_9?fDzs>J@U95NF+9R6WYaLST@Y}ATy}m^bD|Z>Mo9Ve6g=6QD zZ=XWsaKGjuhi{(XKjQj-8xjqYu~%-hB{2Yim+2QA8Ww+FcsMaf`N9hT zAU8+iAoxp>0k4OtAW^@;0^#}lsf|jHMFOhT|YE6Ez#~J5?Zh<$>FdqlmOgi#h^JW z@!=Ds<{?rJ^xjyA=SYL=*r=QE6^Bnh-kk+JeZ)qseM8HEaQgn4M%N}~1{{`P{X}Mu zWd_$z_U5u>4DoYHB5$_fXu9+JW3B84?Xs!{v{#O~u;K&8aOjgVx#9E6Ehhefg@VRh zQYk9s zC>}=<`CEMpdN6PIG@ebcvED}>H?_e3o$Hq0FkJVKQwuicu(;NR@3!kj>LUn*=7B0q zdClqy#opZMa70u0#7X$LGI?{X)y64jeA3Gj4|S<0yn@wh;^>{<@J*<{_!c&)`lf9C z;48Ayv9qV~pHgdy#Nclk{B z)5XPST00aC&6^L{+WO2-I#=ZyEC=`#uRM~|)#n6jl2aMrhxMVp#r3te# zRamT+T@I@{?n8LsI6Kfi8!~j#;)%FvO)@PtG_5*UJmYemCnhE=nEKFu<#}l9fqxecz5l8SMnG#Vxp{N#!-GoQ zh{F9LPm5+|&~OXVUWNnUv(?3@nR~w9a%HUkRgu%ugSnV(VOQMxcy)MTR4QToaVdst zJskrYD0cup2v7#tK^C#a#AN5A*sSrZ97=KV&iN5~>FZ)+W5n8quhGD5ODXu0`h-HV`+u<)8Q_4f8om@DwW zjrGK^zZBVwsGDe-=y?#8F*L5PXJJ9!|7Y5)4yKAYiuAeELg)FaqBUU^bzm7)P*cQc zr-xSYa!uFOxN^9m`q|kc?k~?8o4-X!E^h?$o&JSwdA?C5Qi*19%kRAc0)wBnZ+#b} z?6`}&)a#tm)GHWq(F9$#fD$vxPO{gjddo_T$;czu`*RJoKp7gf{!+^SfBsJxiaY(X zZZTW^L}E&E@Hq=aSqUpNtrntJ`JZ0;SANoipuL-z@WG29a6URTv}7<$D=!vaKaCw4G<1O-^hlkxD>v{{&!b{%o>$Qi85(9ARdfIN=!tad+__6PI)yPW_4 literal 0 HcmV?d00001 diff --git a/source/widgets/notebook.png b/source/widgets/notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..188fd588664701918a7ebf13ddf3e73d001100b0 GIT binary patch literal 4893 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 HuRi|^!_1bI literal 0 HcmV?d00001 diff --git a/source/widgets/progressbar.png b/source/widgets/progressbar.png new file mode 100644 index 0000000000000000000000000000000000000000..1d502a822548502f7a9fd1dc465c15b4b494c644 GIT binary patch literal 3242 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 aUGR_99O5Fg*69BEiWuB6)v4BUiuo7WD-WFj literal 0 HcmV?d00001 diff --git a/source/widgets/radio-group.png b/source/widgets/radio-group.png new file mode 100644 index 0000000000000000000000000000000000000000..d89d08968adb14b11c9ba7e476f8202f014627ef GIT binary patch literal 5729 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∓O;GySl#JYeF0!x-gbWM3?(8yw0$KePcW= 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 literal 0 HcmV?d00001 diff --git a/source/widgets/scales.png b/source/widgets/scales.png new file mode 100644 index 0000000000000000000000000000000000000000..f731825f6af7a8250a670f46dc6fc6465efa3676 GIT binary patch literal 5482 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 literal 0 HcmV?d00001 diff --git a/source/widgets/scrollbar.png b/source/widgets/scrollbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fb321691472ef9245a4d1793d9c5484d07b15c71 GIT binary patch literal 2423 zcmbtWX*d*W8-B;$*pjhiKhh!xV~fI&?A7pvIA@47_GM_8sKG?m>5z!XR=!3eBO^=J zV(g4$7bDv!VJt)Tqw9Qszwgg?|9IZ_x!(J_-s`!a=eplF-WqAf50!ud0QfD;jjsU! zIotvi57%MLx`LWJTsW{s7PdTx!1JKv063yzVSLdxBx`XzBH%Mix^=~)&z9Zdav#ic z3{ZdL=nyPes|f8lT96W-V#DYu)b)p|e-VsbYc)=V#_7*ARhi{-O zI3E@I2d4w1r^D?Br?=)zn(O%}ZuBLs+@d%q!}rWE;bb=6WX1KM+(ADizg1$iBlzSQ z6t{gwK1vw|g{1b{Fcm4R_u1OOc;}&PIzEJR0ON zM9)ZEBF(3`W1nqGqD{H{ISFlTc9tZj{yMB7_(~q{{525w(DCKE>OL%EYV(l?hn)P0 zOGoyI^b0c94{#7;Q_bA--75PjaH4F0A}}^pQO)?c%#qN}w?mvi0xES6%H-Ai4iBWR zK;))eqHv;!!Lg84`IH%CqS#$7ELhJR>B7GIycVgT)OaYvV zY5K*;(D{G}6MFkBlEV-#?qaGCNndWAmDr|_c)JI3B-{{#aar&q&=G2jZ!sJ(nMqIo>e);YRw&5*dXks`A zi%2#Pn203)?8eeWW>{32pg?O$IA4@qu+RL`lDpHmcZb&8>EK#~@(a3#;R{I+H~sn&#^<+e|0+ z$LJO>ui4t$1#V^+ol#uDQtgIH=TTymuvUT5QP*AX=_cDmGI~weYIRU|`O*Bm%Uy+! zWhaN!t4Z#SVMP(Qm7aaC1aPk@4*$Aur$}ZbNaB$JDJJvpuEOEB< z(afY66d*HJt0U~yt6<>V@2Mibx&|e1=UlW@y@ZrQ^+HiWtWhUKSgqfcd&nbA2snZ#p$Kl}Y_P7tl`SEfm*ItDFdrEyxK? zJ5O;J$~gDVIilmz^A88qb_NNQ#*b)ttS)%uxbGxN*D|Lr7vHE!44iIxyHR47b-@jK za2KP^e{X|1+!7mqr5olzSKiuMV_?5>GT50(*}9>aP5&iSWtv7q5Er0$`&9qvC>q}A z>vSw*zJRclqy%j2{y5UuZBUntaSqlZVq)1;S)~?1Pp2KhT`@vtriIz^ z+7|wyG^*!5J9lDH#B=N8R2jkUxm9xQw%DN>&kqOm(_A{4bggju&q_YQY_9UcZ^>Q{ zii&iklGx#cQbyX#vctgwue;xD)VH+cZw3bi_4f5yR=wYz4+~TMa=Vzfy1cx+_lc#N zzwdcj{7)gDSEeUc8XU zEsaul?ja^gxx3S*%=9E?Du+M(KqBF?*x~Gq?-84`*Cha@2t(k9@ zYKkR<|Aya)wfiLIZs(dghzW+B0l-l@4q#Jc>4HEznA^J70&l@V4&F9#tbe#)1`rA zM3Qq`w|ADf<Q=&#QDR?T{tkI9%WavdmxEUFt~V%rx=)j5(eKKA>h%u++H`8ryP2Q zLK(8~t5yJg(5M1qlgA}XgF*8=UdqpQVGy(Bk}v_WMk6Nt5Z8Tslz{P%Z#)^m97wNo z+}AoLZViI^?sd}rN~)gb7}0X(-Ycs=c4*qiAJB7IKds?y{g^)A>qplmIHi<8u~8*- zWONlpU49;syeSPi1B_#0FIv^%GL?568r6~@4pe`U(&S+0({)MQXF#(TGF6BWEJYiA zLPJQx^PC7jL|)D-;T{=lxm?#7IGAAGH2bNbMe2$B82P?I z=PU*K^$7t~#C+i`C64V1O_!Mkbct)vz(YhQ+R7xWv1ggRlr*B8t$z^V@MtAJIf;28Ma*6yK7V?A@ literal 0 HcmV?d00001 diff --git a/source/widgets/scrolledwindow.png b/source/widgets/scrolledwindow.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2cf2181c3deb92a8d05c266c7774eef604ff6b GIT binary patch literal 3568 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 Hx|IAcd^3$J literal 0 HcmV?d00001 diff --git a/source/widgets/search-bar.png b/source/widgets/search-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..084ba89225b53b89a0cba2ab4df6845902c48c79 GIT binary patch literal 3699 zcmc&%=Re%d*Ip$o5;lo0%7$R|-0q0zJxD@?MfB(_K?s6f(N|s3>*{Uw9(8rmiRdkQ z?=5P6-}}w;FFf<&%$%9|eCEtK=Q?vu@LRQ)_sAK^K_JjQ6=j8YAP@mDFxCf?05Uf3 zDh23>o#j-tz(Df?o1;M>N*)yjSuOXJ-8oNp&Cl5G!*i9sA(phWZJWBo}WsrtEdeM<}F08cpZu3ou_>va$u-v zHqJAdPVNuY*o(Ra2a$c7JZ+HY#001RK{@>+@#dSrp0!5!DGN3m6cZbJk*@?*&TnpNgV-ld~@%60D(z7i!WsEC3OTO z-%U+yeVHc$>!(I2i{4{@@Dj3NLryf2Ajdw;?Zc*UeqW_esB8&LBx&RUM&)H^`!6k- zz7T%w^_Y`0u%knP`rIcj^YuYK1XlE*kOk7VsY)vbDKF8*#YJLL z(pU6ofeajumR!3qHZl?t5*m8L50P^smL-COEek=>xia7|`9Py4kNb>_Ax5R~LJ-4V z8n8zb)_Hw!Zs(Jjp$xH{vND*&&nG>djf{9C$4-PvEVX1e5XHkr*h)k40G!EN*YyxE zuapXHm>2MMl1EV^DV$lE4PBBsy7?CV%*2z7;67NUQYcaeVhD?rHU_lkXOw!L?Y6eI zf3|+X$lqAnY4gf@NWyxQlyY((u(0g4;{x!XPL+u?fYUu`;$sdL%Q4nK^C-*kDIH4X z!l!>tIh^9)yd1OP7?Hi2M`D;Ac5N%?ByDVVW^2YsY3B6m->_-v=s2IKcbDn%aWF+I zGbO5OX;H_<#->Oh$)oGgS=|wbD`DNiVQA}f4}`5PH?JU9iG#76ynKTrMF-W`yb$Qm z(Mpd%$=Wz|!VL?R8dj`0pcTWV#sP(5%gR_dI697(gCDAhFqZ4`rAU0PH{2GcqdDAh zrf_$>W`FIy1Y>b`mpG;q%*g+q9a@{6b9w23O%%tNb*oohy?Dr}{$zLlsv2hXlUk(d zkdrnvhl021i|hW>%%0Feb=b}$T4{VrNQmlgd2g?3T#2rVl52!If(*^l7QRf1?Sk}o zc7kSwZDYDuv-TMRdhEIkw0^Cnf5YMUygxh(57#zAIX#oU%$tG1_*Xl)(jJV8Pp|u_ z@f_6R|N4cIvTO_wsl8(ES(!E9qooM26vp4&u%g4lOa_ar>Pse*O%@vV%RPtYEitK= z*TRD-H%z?727ZR{sWKF^O#!B6ifE!oiQW5e_XOYjX5Z&V3uxcAir7N# ze-o8Y4r3#MQ15E!>r=?=Z&+jc3^5JU)wzw0DZBxksB-iB(Vw^oh1`ePSWp|#Qfcu? zlNQLMS<}QZ+ZpSzRU6SPk%UC2q`T0dB-y1VC+eS*5S$6;!nwpx5 zp4@&oq9AXq;f3*AtnIuA>+4;+4SQ{5bWT1|I)Uh0=hOX>;KX45=ErJt*lQ7cA5`=h;x^vrPJclliU3*c$|Q7E0Q5mB1QNc3^S1a`^dr`iI;Yd4BL5` za5$Rw?HM$_ofS2?<*LibuLakMHh$Z36@+oTZBwkMtY~&a)+W_1Of5gX3&N)2zw!nI z0M`?5Pmg&q#DC%xK>6+d{hhg{(3yAdgy?9@1b8@|WW49UAh?<`Grja))ow!R!<7b8 zrH2Ye^Lly)KbBvwYzl(_j7%HEtL2%s^KR=_Tk@+*+&Bl$eIdoXNmgAsO;tLuQmhT!G10Q+`ERS7*CX$X{h_HQE5QQxKw+03kd{M! z5vy@w|14QvO<#9E%q*C6*7WDH1GkD4Ljfr9r*RgRiNo zE%uC`)4v+;lGplWIaH}vJiR?RqKD#cm{T*fXBIOY71=!X021DHoi4GISb?f_l)f!| zRMMsZsFcyhj)`X780X?lLO8rmTcfpnnd{NQNl06ncu+M0S-`I3crr{Na_b=(XhMXT zD7N~Ug>i-nQYmVPBG>rVGEG?+(iG+8iGbSKD$UrDCVll{kjm} zJ{@Hhk*FxU>|t}uo@3tcYddw9szA0VC@Dn=qaPhZq&SNISVZ?Q^F&NxC=Q-_^c!n>yd{^j1*h@+A1fpE)) zYeQdZ)4m|ANcI9%~l)HjUujd}#Lw2xX| zdqPY{?!D5e#6@s2P_8F$yDU*ni_d8J-iP3D3W|z{9cGw+EKjVvvN4=)a+C;E9pzW? zKuVj_6lV;uy~g4p-eVPx)o&#JN^i+Mnz@<~#4nW^qXN|O*r8I`hQPU= z%W4Dw!7K+myP&OOQfI57Hq-JdQLh6I{?FM|Jf9A#+6!^hC7Qoe2Q>Qw2q$hW!v=Q^gN>6cSJvi*!Eb@S>MUA}?0(tu^{H&!ShBn06YKH}CP)FRp7H zfKlmSA3Ru6^0{W9KyO3*A*u3&vfzww@+43(?nr4ff)RPg@LTdl3ZLsQ6lfOTG217i zqM{}X98L&FDqkFqC)4XX8QuK*+{ff!Mi@7@$#A-Cu@MDZ2h}P$acHL;3MGY{cIus4 z_=9B2&dWRQq%$t_{(GBj7_y-hro^756rNd9vS%6pv*20^Vv9hisHP6chWbg6wuvntl9r_u#?)w5%hHfk!S3{Lr*XzOB!`Tj#_+B~GsN z;k~Psgn)-5IF#zYC%acqr^4>iW^_2-SX#a0zPN=lzBAB~tHZbH~>LAh)eIy&X)Y08RbN+7d+_^{VIf5b%ox NsVJ%`l*pO*{tqQ~02BZK literal 0 HcmV?d00001 diff --git a/source/widgets/search-entry.png b/source/widgets/search-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..c86feee90907f1b5a218ccc3ab0d704ea3b3e7d2 GIT binary patch literal 2676 zcma)8XHb*d7X1iCE}Qb>8KQ`p+rDBp(rJRD;kM_h*T-kr3fN& zBOT?^l^{qHVh{+(1qmUPQ1iY!@7J4oGwQ?S1xoY;9@G$0NZ5005t< z3DOn-*uW#;#LWe+dFD=w;KmVVV0x1qv>0wLJOJ=0m?E#*EFwC&Jd|*E4_~OhueC%jwBY`_cKv$%k{pep#~&;n3X+Mf){=^ag-;$c7;P`X~&* zVPKegRZbi}Q64}lnzNnuK>deH(zfOs-&}JGtBWGp9x`vOYsg6sb{P#kZs`JUB?4XN zKdaw2g5oNd<mEM<-T*lno*iZZ@g$WUkf>^tEz121mVXh zv2#HdqT#d)acNm*Uv2{rQRe~V^_S1X%c{fSFuSjJ0ZG#;ld~V&_II*#3*b5C9>i(- z?|VL!>6FoB#YNQPK8d7noaevJ&wAEUS}k=>kcJ4o^Ey#XoUu@<=1gq%DOa-DX-L^G zi2r@4I|>zl_i|mD$ypzNpM}QliQp#ZPb5;<&UcscJLS9cJ<@qP5znfss`#W06=9xn zaRs@#5(9&StRY{#Lr*yoIM_Lyn$r(unnbjheEg8sWz0PMM&m$3n8t^#_hvsQP_PjZ znT6P+ocj9u)z36X^!hOcQ>>sEGm+*trTWwXa71ruBNR$*w@FcoVAh|qkU0N&(hfVQM-8B z()I|3jpqcR8+a9QYssY`r_izPID^69_~Yu{-kwiT(6N_AMe##JL#-<+%E};Y_0wP_ zmf6Y|e>tC#k-ZK0i^s=}(!ROL|fmeKUQuD1r zbt^%w3nw|{3J0mh&CR*`tb=sj=VqhHV8R(~cI#Uc zZt5Bu4}Ehd{WY3fT9#?FJAr{ID(%dKwY9*5IQ<{N+3I(OW<#6aN73OsG>TltbsIM~ z(lO~6L_mNNKn$WR4rC}y1zq_bP1D_`QQU^FJobNR5yZxni2aA$mYubY@gky~k~BTF zbmH!YNUK$sY82~mM_fW;ZcwG8w5%+#pg>AXOY3dnT;U1#gmt6@`n?2!x{1N%(Td8tx}~{p!okL%%IY-HO2Di?vwm3#H=>Nl5+@iU--@~lr99U`c5|#wUgG!ExW4?r1ky7nbv#hAm=lImqE^%F?u~c zJ=yvB)Sq8UrmPmq%Vn<_8(#^T;{e*)+7QkAsD>#qDJe7>{V-oU67mMiisL`233Qei zr)KBnEquyRpThb0`*Vz-*p~@U0|Ej73;||1d&CO%v>=-pN@8~6{p7aTm z31nsKQ*E}$y@(NPu{7&dVSi=+su2{rY)#Cyjkc0Iufz7S0ke|ac0|Nuh0|v=H-yW^Qkk`}J zHUsTD_E8MU_-D>D;*LK)YDW>t_0>bG^ZEwm)4i zW^2qIj7P}Kg!yYo3P|gDg@!&Gt*~NWUW@{3k`lXfO3tdFw6-?I`uqcwSnI}s!h@Ul1O3b|@9 zH$zu{UW}7GN)FciG)Acd;lO_0@~jtgt;3eG z-aGbSTY<6vY@~1g*~Eav15hY*YL}D?Te(1G#m7X~a=<^h2ODZP$E|3^_UO~G&Pry6h+$p#+QW170&18XG z*vDwb>-eMIF-w0 zvO3XaPU_CzCJS2BQAf zb^n;pnvs!6hTSE?GjBOMnugs_FSt)?CYI@^7IPxha=dy|PJx}LOH;Px0DlZ59Bgvz z_5k*VjS8e^p8ia#1}~hYS7r2HhUxz?Z~v!@*S;EqS0Qt0|CYNDNPXt^FtYS(F@o2@ zSz^x25MuJy5{Sb2y+kjM<*U2$y$6gR3%DYW^wKeO5<67!(bYhpbbPM`s4NqiD@{Lh zeJ_Z6GBmUIdiVl-W5#@>u?3;U0aqk)jq?HNn0Pq{aiFQY5Ew9vT8D4MsIeVC=W@{W z8fT<&9JpvF%7PmmRU5!6E&!d+pqmdAF a1xsK;&C^*q8pR39NWj#{5?O2Dp71YDq!G~o literal 0 HcmV?d00001 diff --git a/source/widgets/separator.png b/source/widgets/separator.png new file mode 100644 index 0000000000000000000000000000000000000000..81da65d23e380444549a7953db7eacd47c12e3fd GIT binary patch literal 4263 zcmdT|XHZk^w%(yPDJn&(0@9>+sgWX}f*hhWDW4!JASKk$dsm7GC|v;oDG})%M2fU1 zd=eoLsiB5YO(2Baa6CWmoHKXs@AJ;=GHcH}YrU&H&ssal+|1}46E7100Ow4M4J-fv zM0o`o8R#hYk5pGKQXVwEdM5W6C@YlVQ6d1aJD3>UxChI}&IS41b159y^|~(=!eA3c z!_)UJ5=@mSEyZxt{J}rUwdcw`{7Y#wxHxX`aR)F&S5!+$T@KkC^=roJ6j~}2vwR+X zLwAwGJewvu791%mR%)RVaqs*GKugb?= z{aAlTgyHhUigeMeP>2>@HBlzAWEUkS{6bm~2@bSV&dQ4LpXsQ61R5F{aet?pY^ zmPY@yHxA?_SEMCKWC1u@w+xqfcgj2`gJhpW;YNV)c^=zE-W^T|qi2ke_ZkCO)VuME z%38{ZxcgD4c&!L^6%|E9*+Wp3WjRfDrz!(i{!;?+-$6moh4bm80tTY;4aFPt@D@S# zSTm3TmF=S=D}1kz-qAe0G!u}~!x`^Bp9A!^uo7ch*a6EboWG&yH%Y*NZ6r?H+6Xg>{X$OtK56 zQUuUPBaVb%RFl;H$nY@C9jg%#M)W9Xw!e4pOYR|``p(kbLszGgA?=`-Z<}XtVzS}6 zk0MY_UgD%CRMkP;CY%R@lyF1DG`t>bc@1CW`Fe00` zw0Oe8y4sJRZuD`PWQ1�m%Gz5+mcYbP3zw3>KS<{bDsFuMOg)7Z~GED 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 literal 0 HcmV?d00001 diff --git a/source/widgets/spinner.png b/source/widgets/spinner.png new file mode 100644 index 0000000000000000000000000000000000000000..afd6d4b5b92f3f51525e878da78c8b0c4684f500 GIT binary patch literal 2418 zcmb7GX*d*m7yr)~ktIu(ku2Ae##%%djhV8JWvFDV5eb7-l6}U$glsoaBoQe@s);UU zB106nafR$lgKT3P!)RW;_rv?)eV+Gu-t*y{^Wi+__ndQn=Q$_U4r?yRcZd%FAc(Or zIR^k_&jl{L`}TC9wafQC0}DQbvFF{BDBjB{0PII#OitT}6)uiMUlZGqp)#0m4>31> zo8GT1EdTr8r+L3Pgliu;R^<0%*0+LYP>n6Zo0m&CD+tY0rX=!lKk4Yh%PpWw@IC<{ z+mC+EI3hH(1w_TpR>4Gb$;!f-oim!9i<_D6Y?eCQcu!1gl8V1}2W>8GPTb025tc}i zkuBUJ|41DdRsMzH`|s2UO@-7hf!8Zkk)BfVI<8|iyUnQ`x(?{t-V7^e`4hV5ORJ`V zZ(yKINwiq@goB+O$g(0*m`ToUQ~3~ih0=#<9u#K6>#N)Tr|?2(lN@7NN*w8aaqT3J zzy>hM!O2n{GZXLYtT$q6ea7uUijtNj<-P5bmaXbwC=#6sMJt6jz#Z95ur$T&;w%_pC^rKMDQjpgB|JXvjfq2Y@!h^@3y>|hy2 zy{a+(CFY?1&8=g=JNF25<^2+}ubE?HYMNN}tnxPv4ULEIG!!i$S#1V}hKyGvuHL?3 z0dzRaUe=Ax3-t9VRv%DC;i7=_E|EVlP)t(%!=)f)*_*ssZLXSN z(5Ejm#ZlzP^LT9?odVt9Bc_RojDZWOxxOfNC#> zA!C$g7-3s0ZRT%BG>k9OJ0i^on?mI(=I3ih?qJTG1xl5z=A)%c>wX91^y6CI?Y!(F zx&7JEQ#?vRjfUkewuD`QZQ6;(Lgg{~HJ1y(d$laG+ znV-76Oh0MgiC%$RxJ$|;%UUY*V$j)2Ww|j>az#kUVdSm!@AW=jn)S<1?y-hWE_>1P zs-tlNw~wgM))_T^sVtG110cQ&yH1a_{#WW1@_aJdc7PIfb;j1vNrURh4y=k^Ag*32-1e z9&=Eo-J7G-EC%#)^YYBD*EO<4%YuIq2?*C6=Z;Cq_#a&RPl%}N9{Pr$U^Hr6L<+lo z+%E1}kneb9QO~tkn{Z+FhtaCr1%2vHXZ+?8x@wj;B3Lvv;uXrD;nr%!5!InMGXysp zs%?|IAx*TD7xq|dr%Jh>dta~}F-q`3u~=TouQISN?u|q;k2jZ@K;(}jfM{>x8$E2X zersu(+@;aNZy?{mdsRH6-^Jds!zHNMXgs9#n6F=;w=2P@vXYCld+)&>D#pr+CTNnI z0F{T#WXf1k-d<<#Zk)_VK98$BUoPNSzQGR9>sPPv{4Q{yIg+=yNAi@3V`D;G9CTPi zW0*+}b#$svA0%~8N{?t}dWcsH3}k!G-hi-LfYqma7m&jHTaNoKEtinQhyu;4D-i2eVoy##Q`r zQ;e`MUk1}@d*H^e;$zW|f~59J3BbRf@}rwu$$B%Gvfu4T{2Z#B%yBr}nD#^|dvkrg z_R=E$V%SfdHA2mcTH_|NEbUL&>*U{!8<%~2)^^-cR2|zu`gn=)LNwz^%0^G$*R}Co zX8n~JKE8P4bC|gEKL+1Z&9(R8nfxHon|!Q#57jeNyDww9KB zC;zaWA`=go1#qnRC2!Di&E1dZRae*6k~x_Qt=MF+UtL%C?z4}U&s5b|dz)P4SfA%p z%n>wv6PVG+7NmWIY%Nz*nKpd{Fo+-_=T^$g*XQuwGZ`eB0oJU4RW`R9ZFD5CeL+{u6BGvzzL%h(PPua>5 z)e9Kvo=ldTY-CLN;jgw&Tw6)(>5+ZI%+9U=7U;#rMQc@!nIfXhcr}TWN}KSQY&)k{ z<8Cz*$1T#e6wOfHT-Z?rGv_N-rw>X?>0Ifq-G_E?kZ{pMQfP*ub@-78Yg*gPjqA%J zp$K56KLS^Zl}e%{@=JDfb}B0>t|rO!$S9a6%{9L;{hCFxEnbVPf_yDz5ZcXTjqGB`}-Z}f^1;q59BVqu9Kk;;#K zkL&+g`v1N`O5p`(o!i*HQ;>YJck*M=>;yU&8y)&|Bf(iq*dq(Td8R=_Nu}Dtbt6OptXD2V*{2X1_%l$7FUU2 z#b55T6Exq3K${u*bw;B?0_JF(3B3LhCo0-dY5J>qDT>?6N>Z} zLg-2j5CWn15_;f`@16VYow+mj?)m-p345Za!Okkk3IG7uwKN|+ zquC9bF0wGuo`R7zO*F#@f1ve(g(gTA%TNG-$6xEw{TE(os}tT{FJ`l_o9n5mQkJ4P zaZ$D^|8PueaVT%{GpSeKrE)~pUKW`qk9{}TtP!<6PZuE8k@)?E^UtB%`bQ&euYAjs zUK>3+>ll>INQa{rPn80}d#D!iq5)bw=+rLB2F_j;BkQ>|&y;!P_0$AKkcim7#nrO7 zX1{K5?YPH}H*Ue@wf<_u`UX6k~pxOeDJ$1=T%mhcDS6CR`&#z84 z8yy`5ECN~N`w&YTzPWS}nla0|*9}p>p0hCvMkz2vXd*jAcm4EX(QU_*RCAFqmY0ooI;@t?cE!iYd9 zXxy#DcQ?*3mBJ|D`fhxqt}FPMB0Xw-}XV_?&Uj+Ckd|GD^-l+a$jy4;TwN^fdR zZl4)%84D@!Z#bxtGsBniI0K8Nv_Z~kp}W3)4s?}m1^zx6^wHA&_78m0>YI3+dqLJr zOb!pQY~78UEiS+x*Dss){Y3X&fb!7Rzyv3h87fZ_GOV%$s-jjE{tOQ%WF!q;Nr;q1 z_a#}i?W|5Z{hD#KwcDeg@~GZG)bV7hghohzdIW>P?3w!YM9xo9<%GB9jGdmF*2l#W zRTJzAPh7gNbV2KZhD=D3Rr2$f7ZH-MN`h|YxJf;H$=R{?L@7QY9wr|xzg~3U&u5BA zje$@3=CAQe8HI@Hq~X>M_qt$4_KQklZVl5CcezB>iNj_^}RB0{3}z`wl1>% zF>Rl*l*p{Qoc3!Oz9;G*c=)!}tuLO<2)axVTnrN!X@>0=n@0-!sNFi@m3JI(EkGSe zx>G3Qo_lX(g*1dvBKK@ik(5 zn+8PqB1O)BuCLE1FE0;0&8=^LEcMx-$dqfCw0)qdsVO2VnuRZkR9Jn{qvFemahOry zut|4ODi}sKD&tSvMz;O-Gbj35%w9FhS}SvO-|7b3{f(Tuo;ReMGzy<9t4A`>)_D99 zpi-Zjc;GCh@G#;DRi$o6v2(~b$jS%^@9MXosEHEzy`BptKB(V^aq8bT>dfgjb~fU@ z@;I&iC8S>JxY2pR&|Xk*X=cvbMqh>51DM;gTqK14R4moZrCWV;`R`s11TU4#*CK`R zy2H>AE2BR{YgUu*&-^f~5X6@%koIS85Q_t@MhNGgmS8sydeXZ-DaYtTjAQV#u${c8 z%Z5pA=CG0*Tv-YM3#z@y*XvL-a1wd=aV!jY{y*kSe@*KnjQ&3 z_8Xk|(Bh`ezfvmTdGEFVEvg3Q0$>-~-S!eeD;^_DqY06{?iaQV3YZ^DlZhIFWlt&?VEqw zG?q6u=~HLs>7n2<9v{&6!?(AbdBNDQV_O@g^)N6-Id>AvCSBK6VF0Bhw(p{e)Qs;- zwzv5qdUT#Qlh9GT$YWgYU)|Bumry3)gEnVUR7!$!=B^b_XxlB6Td1Ktc$LcS&vKQ;hm#Z2?KM+dDAtUW&CKh9XLTkKl^(QE54Lp<}-v=_9;kn zJ~|D4iQeYY@XYRR zpO7~Uc@?Wi0rq3H!A))IAtn%I3AdHG=M9FBh|SF#M$t1*epT)k zaBi@m101kxJAKtrXfVibO~ntqh`0fIMJWC-ZYiG_L+7(@s0He3qg<6JH7h40!l*N|FRCpEnixzoquGmKZ zqM@^E|L4%E-9b*JsBH zio_w(F*KC5FqgGohz(sn+6zzYN&|(M;_CKK_Uf_9_+*CIloTGn*wEm&MCQj%4?HWr zzU`QTJe#2W%L@hVplH#^2b!<}1cAU+|W zy@l$(J}CU-8U%uHnshJjiqtvwgRs|s(34L1^eMb3i;GaQn4S@hpZ(HCd|+X5<#uvJ z`JcO=&}f(Hi617_;Tm(Qoy{8av8$A6k6&84T5T8yWK$ryP5_3PJS zg_4Sjiqk~uC2ZJ|vgIQ|EVGrcb7yP|nqmx@@{xbSxx&0#k+F+8s_z*Q@FLdxW>Gv! z)S!W!$@pM4Foi-P5seKMFc06nd9y%=UAOT)U{Y}ej~a~{`d=zc|WKGlzw>&UA>OeWaUO3t3PatI%7d6*FY}Zhv?1}-33~Uz1^&I zLzG9i#s+{kz;RYawDUz=)lj=zs_bUmI4LD9S0QI;sJa!+KhXJ3RV&8M))oexP;)JX zf5AjMvQ-s-jwNSXdaO-q>FTbSR*A&DeEE{Hb3WRORw_K?i&GSYG7vqUUUO^8Oh!{r zkK^FrpvvTM#GH$OIm<}@R5kRAu_x?+dU9ED`XO2KTmG~EqTl~b!~c_=@RWJD{EH>L zBkPMh(x1li18@Al{-4Z&ca7bBIXStBitAhl;ddD#_;u+1H;OI!@PX;(P04q*wo8jy znrTaznSgIcFJ8Rb+76B>!Ps8{Bw5K?I?GlPks#_JWp$S#Cog};aXNT>gE;KmpRF}f zj|{tf251Asn!jFrNW0xG-}a3?u2sPpyx53A-IkD)1R<-fdR2RO!~eOQg3z!0F^q8l z<{I-}mCg2_(OI3WvnSN2XHI%C*hKDg02mI1@igYY>RcV(`47gC!0RFqaL@nn5J8)J zHoQ3MA{YVy6n1t?YfCq!=qG&~j+IBtME)=(ng^wKK)7AR!8R0XF%sK!Zh?3ji#PFJ zb*BYG@4TC`4e&A_{Y|@($h*qx)~hw{BbX@c4C(#m%>E+#u!Rxt;NV~v%AQNoph2HD zVmO(L{$9^~eBaMBWY%D9r0L_YHPXV@7+6mWs8~w!5NuMqOtxGKM+70Ft zKyKmE+}jt&_om$Fn*bnfVQ~owv;#p>;X4#cA8^l$O29bH|8;rlti%%~hwsx-a8?D5 zi+mS1m-#X*4t}j~g&3T+27)f<=x3^Rd6@}H08uJ!>gtw0Wg`tJNG`kZB&h~czw%6^ zoS87|y1Bw8UFwbJy#u)oa+maV|ML^C~Jkt-8aa!kjGa}QZ`72y_aSP#8Pm$L@*?PD8;$_@G0pEF6 zH)HiPfHU3)>85*MV<6_ldTN?1ENEIT=!C=G-znWqjC#oX%m6BUl5S;0n_oDR3B@kl zAZti-Ft_$Tp#VkhMeVDeJ$n{Fwzgq-QvJ2`H^oH84@iRt&wcKsRCT zev`gV>R#Jk&YL*${H&}~lf}3j)g9=wB5PliXQt`m;+2|YwOJ_sinHy=@9;hrn?@uOMTC2Y3Ogo5io&R$LxGr_wZ0O-P z@*FuRdD-JvHEOAD97*6=t8o&H;JdxB)vG&DCbkOGVG=ATD6mlFeTT(3*xK1?X=_W| zxUpGWX#Ctb!h+ycHyP>^CnPAiaYUs>`?w0z8o1K;JY)2pYO(OhFk+0bcBItZ=+Zgs zS}_q8(v40WoIS|T&xhJoUqF>}YyZy(^Pf1ZI2B-Dsf4@|okH zPA9RQ6Qe?pd9a2ZS?vA8JXPVWP$5MbAy0wghu8Z6mlzy{odBAl(^KlvZVq%{uJB5# z)OfQw<9JurCg!teIZxQN5C*CoT!hSl?tgOzD9&R`AP8b&z+8RUp|D2=1ib=Yj-YW2 zNb(+EZ$RKrzPAy>Su=1Lm=?tt{i@#T-UCko=Of((OeSHPa-MZK_~e7s1&5|Uz12Vt zdXH?dMxyT%7WLZU=M2nGpW(SnFRM2RGX6cMBMMDKmHh>RA3Fc{@kqP!BL_g-c& zYN8J@3?Uh93^Tg3-~ai1zMPL|ooB6km$lp4&%W>L{#`rvnSt&VCLSgb2z2G~BkdQ! zdIyN#7a4#hPeOASu)5%*`Pk?pFklz$V?ZFT+{fAvi~_Sa7lHzfR`W5W?aTp&$NdJJ zozYLl1tng@zfIPu8oUz|7g8rxS7(VJGL#C?(&~IFf5pz$>+H1Y6GC)zn=E+LcJpDu=Yi_PPP-%zK}cjaDh-_}VKeBmvJ zY0<0rilYX{R(7L4W)mipqWw4_Hg|e91M8aE;iU+Rie?XSp>H{~oH7|em=tbC`}4xv zj;YlFi5r&~3c`6;COpVtoCG_Mx#m6U-9u(4>^Py3NXoa^2nk=j}*rpC0l-S>C`7%GkoP1B&v2DHOl&Jx33{S-~BzVo8`tk*$M%VkB^`H%C$<#$moAfoF)%03-_YYvde?wz;X0Yr$)_r zS6b}^C3~?!!NilK!*vx5#t=PP2Sz>GlKcO86WXz8=u`$@U$1Xm*ecvAY;EP0C?A0q zeEpievvaq*`_K9FzP>)vkxP7K#ChOOa{4JjPVz1to$vamuD>JI>G8XI(!zp}Tm+Zo zudd@TEh8iRDG8F7l#+7Q*49?@Okd5x!9)Xj-%V4hhd^TE=Qjup3~aOe9p07HwBCI- zQ~!~mXs(LagqTt3%Z<;GORrBhR*d%)Gp>8e)$qaN2AM#2N)=((j3z~}Lr|aDMkhHS z_xxM9mF?N4trYmN)rx`ZZ1J4ZcBdauRTA-XqpDGSD*m!=e>i+MK6Ra)G6n`M+19(` z60z0mi|4fNO}~%u96jT9RbrBoPVy)fvt{{8f@0mza0_G0Lr{LTx({ubbIIQo1B5%R#nHL+@63%kKR>p z8Q(F1t>b;QF3}IS4o|~?8rW%_Ca&VUqI{K(Hylr!Zd~{D+3p?0;`IC}Z)WOyeuf?& z;9Ab{)%j6Q9Nf_a#l7DP@iK)Eze9vG>+(e6H?wW6jN8Zn&@G~6=MEtB=ZoV6? z{)Bu=oox?gw2@M%-@F^}llJ?MA3>zUpg>jrVtwR@)nX8WL_kld3Bd73j3W3SZ#Z}a zL=_Ne;BVdarz=}Od*amFhOZ;641ljjTAyx^CZH1pf;W#9!g(XHqv6+-PZQD0ZoNMOqITP|{&(-(Rq@8fN$IDl9Hj%siaNX3h>M zc>~gaS?~3;Gc_6vH_g87QdkVb0HND5V*(@xx4icS0wyuPwSZTm(Rt|6Ntn8@@Rz;8 z!4=?btphCi-3oElemMVMswz1N3HNw0`5{#IuH(}%g2*mq%kJc$YK7~U9h5UiC2ttW zd%3ee!L%$gXwGp>Cq~vn0T|Ig|oyNwPP4IpVX&^ zs0zif*xD8x0=KjbvZ1k14geHOHYA%d{PO(vYofxZmJkJnMNc(23m+}EAY{4%merPy zb8kA#Aehz#%QGWd(H}V~2=hM8cDP|`!*Rl;nd+~Od6D7%hYlx4h=8S;NUil&OX*x$ zL(j|N>gIiB;RhViIy$vwa}(aKaJpkMO-!PD{36%PP<0g2j5C@(8l>8R52#D$0)qq0 zi2=>SorND**Yc0InWb8eWXdR`RCVj6lv<1jVAgPFz1?)s`h2<@E<+}SrK6c>fKKFo8W^akg}T9_@#F~;2uPM+@50vTo~ij_ zydD`CFyN_rh_Ny|3_esjQ40!%<`AGY{*o_CMvE2?LxWbj7@gHJ?{V2V;-`um8!ucO zs#a=J`g**K#n*T^CXpXKbsH^@M|iJoHl$>y^cD}By=zdTW^WbMdyLlpu4&xL@+vC2 z?St2Vn2gEQ==QI!a$T!*!?6fdmiR87(b=O;c@fwG;7Led3$3zT8l+p0;=WW(>0dj& zTpTxhfI^u+z;34Qr8+4KIGDvNC;`H&er6 zupF?tvCzQE9N!)q3^)II{%yeV=qt1~*16}Co|MhxpGgn^8w`23v$S5SGd%RroNg#A z4M0hJVBzn5$7M_3Co@)(;_7iEL3(wGn3N zwxNwCvKKFWCgX+_*k25qnJI{92qGI>!klb&U||nvZnmF&03PJuXzc#DKTx5OotF~+?rz2wE zWiC(#bA4!8=U&gFy{+rsLEG(Aen?*4a!QIR^5?+g#}a0>cURo9-nrqPHecfVlUo>3 zO*o}n%nK!PJ2^e2E?MZtCB&Jn{Q1UeaxWvfF=$SEpaH^z`(7TNFj6!M8 zzjxr>g&m99|EMPyk~4F}q@>*ISL@wyoIpM3=;-83$0j7KjOE+9VnhTX{0MCH=vrZQ z^;K+jOk7+yfrR&OIqZ<1)z5)M38PxIk3U~Cm*PrJP7Z8?s5`fk`lbQ{KiJbo%e+OYOf!T-Sh4#S5qoMI1fhYhRVbyRgW)-g26FV z5;EkCvEESUmoI+m$;RT+(xS4mJNKt=S+y9$9iW``Zsb$+$M@0E$)7WBz+U{rA}yqP zlEFSjooiIe+~;W&UJNy2#FYhK@$PM$@;Jy!NqGTuf|>eI#_$koo_SE;s);V_Mg7Zt zD;G0VaNU@}*AJyG`o#8=l;!2C%J%k^4n*U#-RXcE@+X7%{NyW5NmHd|3i%(yZea%c zhi8Z3<;FE3qx?Wha?3ei0Gb5a<2WglU_8=Wm|VX-Gr%bRIwiFQ+57$i+EV_*B?9Wc zGoPl6Bg6g8K)jb7#`Dx~nqkoq`W(t0XtgKST^oUF3+7cYXp}ktSilm1rjMrZX9=^+ zS84~Jt~Y;v{h9G+mEUbGv=z#@^^yf5E-o%OAR=?HRKYu=_EP8_IWLYQBZnaoUu5Zh zqhN8Os;O>Pa-`f&S%0;JDnF}RfhL$|_6Cn6zW2R0Q#?~urRfTXOi|oRzZA~bmX;%3 z%Tc#Qg%xIHfin{JE*A(D_Tvz`Ha6rouLqjg(NT}zg4vXUf`UhePeo;9s-~(2J_5i@ zIX=BDDw>*}{sH?%T}8qccOR06ddynzb|S~b64juSc)+G);q=e7|4{h9B>q2z34w3u z*}m92A@AB^Wr&7cWlYz#|BwHZbI{F0Ok`qazDcamE{eQI7k@*a=6@4lEhi^2rKYCO z2t>o)Gfn4BLTd5kTMS*Ev$wa;;pWNOq4OyN2%u7+t?)NeEtUN@#@4ao;^KC_Gv!T0 zt_H8+Mz3KABni_K*Kj`6N5?Q$r?*CE57p73XH}yp+C5CPU&lYdgoY@|FezTZcx9-r zIsrg7svi_rJ7MI%y0SBlDS!MZhSkzzpn7^XEft%}0e1PkItS4Ey`Kk(x@DN2@2ei4 z(zBjSOXVbmEV$x+5k1;hmuct>-X40}Uh}-DqkhskV$pIixey@p_qicx9Y%p(<~jIb zI*lC|cEF6}2yXYRk)H$3O<(`Ajg9VkMkoX<{N+n8rf*UyQDcn7z2W#hIzaVBN-Fd) zse^HJy1^a86CM<#6tYVJKsh=iW4%y{8mRgn4(H(K59=nRf#`WPHDRicV`ERY7Z<;H zY+L$5jyDP`e8`&tpHh*`op>w?WPO;Tn$>K|JjBQ3O>cq+}cUHpA~EX zoG#r{Ey0UfLgy_4hUW%K5=MW~m160)c>$fs-?yH8t8uH?Ebt)mIEe5~eWD3?m2<0~ zL2w;C%N`<`ou3n}MLlN(+#*vaKqSTLDoBrxbD)*=jdevep8vGsxPHAa@&s1Vv?PK~ z;2HR12+6Okj6rY?l>o*>bl)WR4>0BF4y4{*OoptRa>HUMtD0QMUH73IQv9Aap7&wv zXU8UcbF!2z943moz^noET~KH+)fV9OqI$!n9~*TN7H14?!IYI{8ZO!2Wn~8^kYdB2 zxRsUL{#%3jFEK0!uy*`zz}8$J9jp2is{2BQY>@4@z?;hL*bgjA;O(~2e_0;@wwc-> z=8)apf40=&a--|LC9^JK;^Ktr{K(FK-kdZ~4SQwVC7yqk8(CRm+$sU=gwL9^_0RA& zHrUgX{-OcY#xiD1ZeNqcOS*al;05k$2N<>(L%WACeSHSRwqrT<>PM;QEziS1XU!(@WB8D$h^gCFkIp72khpGIykRCURrvkX?Aofq=nTutRIV#TGj}I zxZ!GPXwRdzhX!Z_)a1X7;KELa8+cU%V`xr~r@1|}&}-gJH)I3Zw$ELJsq=n};0n{e zIs(d(y0rk?BRN;_hg{EdeB*<0Q}@^zEfgf6#AIc!f^c5%YR(g8eVi>s1qJiFu!ur2 zJj2m=)7n^-7DJz~aMw08J$i8)<<~ZBRxj)JtL9{P#Oki&$|E5mp&R#YuYtr~A>TK( z_{7GmNUwN51nR8)^!Q&1du*sz_}X}sgMZOMi-C**WC|&M_9!e262)-#SuJGufNXUJ zzaAcZGjAF@_5ks|wc{Ca>Jw>NSV_qfH_g>Hce~?*iiH@SjRIEeY-3f`P6FrXIVSNp zF1WXwcI19U-Y4TjJ1$vDtEuHAy*@{Vw^AVhX`XSJYuG$z2a!l5URB>1Lx{yo7qYCR ze3}wDcP&?C8~?Rt#QwE`foCcQ?b6B7R!ct?Yq$Hkto81>lCs}MpeBJh_l5b5@1Ne~ zFW7$_bnK-|w|g$e;QK%%2`AHxdU?+T`9k>)R|U`I6iaAf4_o zzJ1buCET-!6A&veFPS&K8~vE`v-kg6bO)&KpNV9#R8iTT<@l)Sn<~NAhzhRwCi-(7 zc!KZI-rzE3jp{J-MJrQAys|9Now@}G8A#yHoj7hoLz}7jwZOpT+aTHRKQc*s*8ts& zq7waEf^3%w^C9O^sZ#o(v2j>r&1MR=t1E$=f#ot`sxri2W$v9?PhsFU&Qqb|Ke2W9hnWWc7MlXzi z2}(&xt&Bbt5Zm!~5P3$+OUq)M6IM#{t8&B#H=0-c0k3%JsiH?R*VhXd@t&;)jxbT8 zJsQl-J-%V6SaOGNNWk_ky~O_}z6UD_8q`U#`l(jZ)y{Yo3tcs0F#@H%67`rIU_2-j z#cK;N#C$tyu=t3wi+C$g9m^=~t?YBL*NiDpk=JK9VzU{N+*8r~4xw?ldI6%2eMQ)f zE9Pm6!Lz*`)e=~iWf?{9GiD!vN z&LOFjmD00xc1Mxd``hsP5iNz|V%?D)oeTOVO{3Plu{Mw4zCrmD7Pxtv99CBi6?yvV zb!p;sKE=gW0r)XocIce#ycJ!cfX_mXO|F#_uH0g)U_NDm0!NY*Coj*j&g4U0;e^=U z?03jV`SE#W#@ze(N5OqY-r(%kh>BmRMEfg((P9w06Oa62kl%_*)w{KGaH)*avrYe= S>%gCT&|@6~?FvoncmD;k7GMVe literal 0 HcmV?d00001 diff --git a/source/widgets/statusbar.png b/source/widgets/statusbar.png new file mode 100644 index 0000000000000000000000000000000000000000..06ca6097000edaafbe11d1302c9645f73ce3919f GIT binary patch literal 3034 zcmd5;_dna+`+mnLHQG=@YqUzWwbe>(v1d`UHf`uY?Y*ATCt|c})d)qA+DeQ@snsYI zyCHcHv3JyHjq*u<{{92s^TU14>pDN2`i9*$Oftx%n)K+qhBJD5?&+%}8Js!HnLJ`A!yrKOw+af@Z;BYzULg_)7Df7;)G z&xq8xX8=EVCE^WBH_08 zu>abvmMN!`9wY~jb)a+&CmN4-hw~@YI5tnBo=%WU(=L2*uV;9i3`1zjvRJ5J=8MhxG{lud+(=Nw?Lux)jk?no0E2v{@ zemVNj41XbID9fy7*bcVldS7!TZ+u?D5II;Y_jF)DNk&)3~yqr(TQbi0YTcT&Px{l0)tU6+OVs7CnOo5z$ zR#w2inCB2`KIi=W>I{YzFwGMgtz7;rh~OtH#F+`__wm+hqy=0h@t z;ttc+9$7s(<1sKml)DtpJR;%7#tb#WK3aNkX>q?Sp(cTZQy<4LFM_U>1Dz13T0wYv z;-HI9kv5hqSMjms+}oR9)pTjk0{ptj%kbrBLOjuT9PvTAy{EHLo=dmWRYoST&$Zz4 znS4oMB=Kq9@UXccpF%EAxjHU3ItnyNof6HGipWkmJGyCMk@jr*l)aJ=^`+N18*N<) z(T-L@c#0Okc0>d$Rgb?UT`B6s5!R2 z>BbuK1cWre;|>>*d7>cjLuFK|y-cBMPx_Ial{aMn*_t5~sVW7#w{ky#P8@r~>r^$wrx%AJa zgkQ)C>vKXNddc&t3Kpg!K!q0RNA)4@C}@M&@GpCw`f}zt;e$(u`UmNug)R7?7wMA% z{JwlxSXkiJ`Ex?jJSBB0$YSt27`vKfN`nia+_1%9^n+8O}<89gLfx>c*n=b4`Tv6YZev&^IB&$|J|RH z4Zl=gh1mFdo0NH7@9LiV93qWU30k0(8b_XWT>W|G@?l90qJ3zyIDGMJQ1Z%-vMPE^L z=n7=h|DemNeK0ul z=eX6z&S2oZh^VSUs%T=O^Q$4%n1V20Ns&z|2f%jjO#6TkV-u|SDwVhQ&#(Q3j@iu; zG@4co%&nWx-lPt<-ds!v`fPO6(z!qu)pE3NU*~n6HCrkZ z0OxYm0bYbAN&2Jx{YlRT5^cwC>VVbgTry^o6kywdZ(Q*rurJG+By0w=Nh z$Bn}J(5NLgV@R8!WfBCC_a^o%^NNwqd_M)1JYB{Ee-&)8(&oOMoq>){kMxNovqb}g z1aL*k%+>WQTJV_G8CB`XG&TStqBGV_(s%B>nVjU6a%?d#8roeJIKCo}s2u0@X^M%Z zQe^k@o24o!Z~Ex-LwIGfr@QYZC%~#s;Xz4l=*>!4|wq?Sy?!MKfX2Nu<61) z2Odv~z3okUJzmV{D{0@K?(r3TnWOV2pGLQr{NLUNOVI_+z^?-#vaepdP{{vy7R_BtnWsS)Twa`{7Gv_@&R8m3B>$cYAev zMVg=Vl9C|qiaEf_^t!sD&ryCgscCmE*ZR95YB2wh_3goEAn@R3Gpu%O+VaePYD$TJ zerNB}!qTF3xC0{hyTgqH5J3WBT!*8BmYq#OSV#8P!Xg)J&CLNQel-DnN;4+0cVoHx z=>1Ux*3Gy>t&WRiJ(`cHmzCu{FrH)O2vt}z(-hJn8v@KlZkzzj>n+VDT@eLci+}ll zpdOU*{>M<&?M*XH?tY&eT(EIRT}@eYilY%KiM?+ACSan;Wln0XnLlVz1fP!&e_Yvp z{EIan+&LfKEPal}k0DMRc$UEwOIgPP$lX{=&+hB|v;1tG7G#!15ZRfkEW!|vHme|g z;%(9E1=r1^-D*MalnWc@E(1dNbo30}m!Qt=qkAB+C>Am?n7gBrx}Pzt zO2pI`B{j&ZEzw}+PXgL`E$9_@|I;b% zbHUBt6SisL;&9)ja3{WB7;tfTD0X)UQ{AF*7DH)`;fkkMl=^Gk4Ry_QYGAJa{14dp Bu-5

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 m|B Date: Tue, 29 May 2018 00:45:16 +0200 Subject: [PATCH 084/209] Add one space --- source/popover.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/popover.txt b/source/popover.txt index b045c3b..008a925 100644 --- a/source/popover.txt +++ b/source/popover.txt @@ -7,7 +7,7 @@ Their uses are similar to those of dialog windows with the advantage of being le disruptive and having a connection with the widget the popover is pointing to. Popovers have are visually connected to a related widget with a small triangle. -ApPopover can be created with :class:`Gtk.Popover`; for opening the popover use +A Popover can be created with :class:`Gtk.Popover`; for opening the popover use :meth:`Gtk.Widget.show_all`. Custom Popover From b8c088b5e695c461cddef52124930892deb26d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Wed, 11 Jul 2018 09:31:46 +0200 Subject: [PATCH 085/209] Update URL of PyGObject website --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39fc903..10910a8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ The PyGObject Tutorial ====================== -An introduction to deveolping GTK+ 3 applications in Python with [PyGObject](http://live.gnome.org/PyGObject). +An introduction to deveolping GTK+ 3 applications in Python with [PyGObject](https://pygobject.readthedocs.io). The tutorial's web site is https://python-gtk-3-tutorial.readthedocs.io From 4e26177ff5f660ec939031f828dc094ea7ba57e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=B8=EB=B2=8C?= Date: Thu, 12 Jul 2018 13:34:30 +0900 Subject: [PATCH 086/209] a XML to an XML --- source/builder.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/builder.txt b/source/builder.txt index ad10966..0315d65 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -1,7 +1,7 @@ Glade and Gtk.Builder ===================== The :class:`Gtk.Builder` class offers you the opportunity to design user interfaces without writing a single line of code. -This is possible through describing the interface by a XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. +This is possible through describing the interface by an XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner This method has several advantages: From b0c64d4c1b92ce07987df8bcb318b40c5579c973 Mon Sep 17 00:00:00 2001 From: ha shao Date: Fri, 13 Jul 2018 19:01:38 +0800 Subject: [PATCH 087/209] Handle command_line.get_options_dict() cleaner Convert the get_options_dict() result to native `dict`. --- examples/application_example.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/application_example.py b/examples/application_example.py index f717af4..e57ae13 100644 --- a/examples/application_example.py +++ b/examples/application_example.py @@ -122,10 +122,12 @@ def do_activate(self): def do_command_line(self, command_line): options = command_line.get_options_dict() + # convert GVariantDict -> GVariant -> dict + options = options.end().unpack() - if options.contains("test"): + if "test" in options: # This is printed on the main instance - print("Test argument recieved") + print("Test argument recieved: %s" % options["test"]) self.activate() return 0 From eb3e86aaf9e5232cf78e2688fbb141349a798c8e Mon Sep 17 00:00:00 2001 From: Ankur Jyoti Phukan Date: Mon, 16 Jul 2018 00:02:36 +0530 Subject: [PATCH 088/209] Gtk.Widget.override_background_color is deprecated FlexBox example is not working properly due to deprecated function override_background_color, use draw signal instead. --- examples/layout_flowbox_example.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index da81108..0316ac0 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -30,6 +30,12 @@ def __init__(self): self.add(scrolled) self.show_all() + def on_draw(self, widget, cr, data): + r,g,b,a = data['color'] + cr.set_source_rgba(r,g,b,a) + cr.rectangle(0, 0, data['width'], data['heigth']) + cr.fill() + def color_swatch_new(self, str_color): color = Gdk.color_parse(str_color) @@ -38,7 +44,7 @@ def color_swatch_new(self, str_color): area = Gtk.DrawingArea() area.set_size_request(24, 24) - area.override_background_color(0, rgba) + area.connect("draw", self.on_draw, {'color':rgba, 'width':24, 'heigth':24}) button.add(area) From 196e804660e43934632d60337350bb9fd1224102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:06:44 +0200 Subject: [PATCH 089/209] Render background in draw method Close #137, #138 --- examples/layout_flowbox_example.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 0316ac0..1afe645 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -31,9 +31,15 @@ def __init__(self): self.show_all() def on_draw(self, widget, cr, data): + context = widget.get_style_context() + + width = widget.get_allocated_width() + height = widget.get_allocated_height() + Gtk.render_background(context, cr, 0, 0, width, height) + r,g,b,a = data['color'] cr.set_source_rgba(r,g,b,a) - cr.rectangle(0, 0, data['width'], data['heigth']) + cr.rectangle(0, 0, width, height) cr.fill() def color_swatch_new(self, str_color): @@ -44,7 +50,7 @@ def color_swatch_new(self, str_color): area = Gtk.DrawingArea() area.set_size_request(24, 24) - area.connect("draw", self.on_draw, {'color':rgba, 'width':24, 'heigth':24}) + area.connect("draw", self.on_draw, {'color': rgba}) button.add(area) From 546b2987e42ff5ca52416288d466d491e1b1900f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:19:46 +0200 Subject: [PATCH 090/209] Flow Box Example requires GTK+ 3.12 or higher Add a note about requirement. Fixes #141 --- source/layout.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/layout.txt b/source/layout.txt index 0cb82aa..f6ed332 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -187,6 +187,8 @@ Example FlowBox ------- +.. note:: This example requires at least GTK+ 3.12. + A :class:`Gtk.FlowBox` is a container that positions child widgets in sequence according to its orientation. @@ -233,4 +235,3 @@ Example .. literalinclude:: ../examples/notebook_plain_example.py :linenos: - From a6b3d875b930e9bb96a2106e982a67632d590b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:23:35 +0200 Subject: [PATCH 091/209] Fix SyntaxError in ListBox example Fixes #140 --- examples/layout_listbox_example.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index 8a107b6..f058ea5 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -75,8 +75,11 @@ def filter_func(row, data, notify_destroy): listbox_2.set_sort_func(sort_func, None, False) listbox_2.set_filter_func(filter_func, None, False) - listbox_2.connect('row-activated', lambda widget, row: print(row.data)) - + def on_row_activated(listbox_widget, row): + print(row.data) + + listbox_2.connect('row-activated', on_row_activated) + box_outer.pack_start(listbox_2, True, True, 0) listbox_2.show_all() From c0720b8b94ffe72d39ee8e35b608b0304811fd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:32:07 +0200 Subject: [PATCH 092/209] GObject.timeout_add is deprecated --- examples/cellrendererprogress_example.py | 4 ++-- examples/entry_example.py | 6 +++--- examples/progressbar_example.py | 4 ++-- examples/spinner_ext_example.py | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/cellrendererprogress_example.py b/examples/cellrendererprogress_example.py index 12cb244..af17255 100644 --- a/examples/cellrendererprogress_example.py +++ b/examples/cellrendererprogress_example.py @@ -1,6 +1,6 @@ import gi gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject +from gi.repository import Gtk, GLib class CellRendererProgressWindow(Gtk.Window): @@ -33,7 +33,7 @@ def __init__(self): self.add(treeview) - self.timeout_id = GObject.timeout_add(100, self.on_timeout, None) + self.timeout_id = GLib.timeout_add(100, self.on_timeout, None) def on_inverted_toggled(self, widget, path): self.liststore[path][2] = not self.liststore[path][2] diff --git a/examples/entry_example.py b/examples/entry_example.py index 4bc22c7..47d0271 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -1,6 +1,6 @@ import gi gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject +from gi.repository import Gtk, GLib class EntryWindow(Gtk.Window): @@ -52,10 +52,10 @@ def on_pulse_toggled(self, button): if button.get_active(): self.entry.set_progress_pulse_step(0.2) # Call self.do_pulse every 100 ms - self.timeout_id = GObject.timeout_add(100, self.do_pulse, None) + self.timeout_id = GLib.timeout_add(100, self.do_pulse, None) else: # Don't call self.do_pulse anymore - GObject.source_remove(self.timeout_id) + GLib.source_remove(self.timeout_id) self.timeout_id = None self.entry.set_progress_pulse_step(0) diff --git a/examples/progressbar_example.py b/examples/progressbar_example.py index 6e30eb1..3f9c67c 100644 --- a/examples/progressbar_example.py +++ b/examples/progressbar_example.py @@ -1,6 +1,6 @@ import gi gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject +from gi.repository import Gtk, GLib class ProgressBarWindow(Gtk.Window): @@ -26,7 +26,7 @@ def __init__(self): button.connect("toggled", self.on_right_to_left_toggled) vbox.pack_start(button, True, True, 0) - self.timeout_id = GObject.timeout_add(50, self.on_timeout, None) + self.timeout_id = GLib.timeout_add(50, self.on_timeout, None) self.activity_mode = False def on_show_text_toggled(self, button): diff --git a/examples/spinner_ext_example.py b/examples/spinner_ext_example.py index 0e06932..d67d43a 100644 --- a/examples/spinner_ext_example.py +++ b/examples/spinner_ext_example.py @@ -1,6 +1,6 @@ import gi gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, GObject +from gi.repository import Gtk, GLib class SpinnerWindow(Gtk.Window): @@ -45,7 +45,7 @@ def on_SpinnerWindow_destroy(self, widget, *args): """ Handles destroy event of main window. """ # ensure the timeout function is stopped if self.timeout_id: - GObject.source_remove(self.timeout_id) + GLib.source_remove(self.timeout_id) self.timeout_id = None Gtk.main_quit() @@ -70,12 +70,12 @@ def start_timer(self): self.counter = 4 * int(self.entry.get_text()) self.label.set_label('Remaining: ' + str(int(self.counter / 4))) self.spinner.start() - self.timeout_id = GObject.timeout_add(250, self.on_timeout, None) + self.timeout_id = GLib.timeout_add(250, self.on_timeout, None) def stop_timer(self, alabeltext): """ Stop the timer. """ if self.timeout_id: - GObject.source_remove(self.timeout_id) + GLib.source_remove(self.timeout_id) self.timeout_id = None self.spinner.stop() self.buttonStart.set_sensitive(True) From e178804745b63c91616f4d38d7fc6b376c4e0e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:46:33 +0200 Subject: [PATCH 093/209] Update sphinx dependencies --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3c6c40f..fe830eb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Sphinx==1.6.6 +Sphinx==1.7.6 sphinx-autobuild==0.7.1 -sphinx-rtd-theme==0.2.5b2 +sphinx-rtd-theme>=0.3.1 sphinx-intl From 868ddd9e267f5de2aa750f9c5cde608617aadcd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 30 Jul 2018 21:49:57 +0200 Subject: [PATCH 094/209] Use default pygments style --- source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 5f387b4..f804df4 100644 --- a/source/conf.py +++ b/source/conf.py @@ -90,7 +90,7 @@ #show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = 'default' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] From 0d62d1ee6f07d0479320bfdec48de559136d5af2 Mon Sep 17 00:00:00 2001 From: Dan Yeaw Date: Sat, 25 Aug 2018 21:50:14 -0400 Subject: [PATCH 095/209] Fix Initializer Deprecation Warning Fixes Gtk.PyGTKDeprecationWarning caused by setting the label value in the initializer. --- examples/drag_and_drop_example.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index 8cd5155..a37fbef 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -89,7 +89,8 @@ def add_item(self, text, icon_name): class DropArea(Gtk.Label): def __init__(self): - Gtk.Label.__init__(self, "Drop something on me!") + Gtk.Label.__init__(self) + self.set_label("Drop something on me!") self.drag_dest_set(Gtk.DestDefaults.ALL, [], DRAG_ACTION) self.connect("drag-data-received", self.on_drag_data_received) From 0f23aed846eaf7600855cf8661a2fdc4e512cf17 Mon Sep 17 00:00:00 2001 From: Laxminarayan G Kamath A Date: Wed, 19 Sep 2018 11:46:36 +0530 Subject: [PATCH 096/209] Fixed erronous print message for method handler It is not a class method. --- source/objects.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/objects.txt b/source/objects.txt index 3bcaf65..0a0ee64 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -70,7 +70,7 @@ called each time the signal is emitted. It is called do_signal_name. } def do_my_signal(self, arg): - print("class method for `my_signal' called with argument", arg) + print("method handler for `my_signal' called with argument", arg) :const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the object method handler (:meth:`do_my_signal` here) in the first emission stage. Alternatives are From f5de9dc2dccb76c43bdeb1de50d860c966114351 Mon Sep 17 00:00:00 2001 From: Fornost461 Date: Fri, 28 Dec 2018 21:35:23 +0100 Subject: [PATCH 097/209] Update introduction.txt fixed line number --- source/introduction.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/introduction.txt b/source/introduction.txt index 7eb813d..336ad1a 100644 --- a/source/introduction.txt +++ b/source/introduction.txt @@ -43,7 +43,7 @@ In the next step we display the window. :lines: 7 Finally, we start the GTK+ processing loop which we quit when the window is -closed (see line 5). +closed (see line 6). .. literalinclude:: ../examples/simple_example.py :lines: 8 From 3b352ebd4e034d3bac80442fb71a6e8696c1c18d Mon Sep 17 00:00:00 2001 From: Wouter Date: Mon, 7 Jan 2019 16:30:12 +0100 Subject: [PATCH 098/209] Removed PyGTK link The PyGTK website doesn't exist anymore. PyGTK has not been updated for over 5 years and does not accept patches anymore, so recommending users to use it seems out of place. --- source/install.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/install.txt b/source/install.txt index f902410..1cde610 100644 --- a/source/install.txt +++ b/source/install.txt @@ -6,8 +6,7 @@ The first step before we start with actual coding consists of setting up `PyGObject`_ and its dependencies. PyGObject is a Python module that enables developers to access GObject-based libraries such as GTK+ within Python. -It exclusively supports GTK+ version 3 or later. If you want to use -GTK+ 2 in your application, use `PyGTK`_, instead. +It exclusively supports GTK+ version 3 or later. Dependencies ------------ @@ -59,7 +58,6 @@ To start a shell with the same environment as used by JHBuild, run:: $ jhbuild shell .. _PyGObject: https://wiki.gnome.org/action/show/Projects/PyGObject -.. _PyGTK: http://www.pygtk.org .. _JHBuild: https://wiki.gnome.org/action/show/Projects/Jhbuild .. _JHBuild manual: https://developer.gnome.org/jhbuild/unstable/ From f8d443caa1efa9416fc829501ecec67bd56842bf Mon Sep 17 00:00:00 2001 From: Khushraj Rathod Date: Sat, 6 Apr 2019 17:51:16 +0530 Subject: [PATCH 099/209] Remove Duplicate Property in Builder.txt The Property False was included twice Closes #151 --- source/builder.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/source/builder.txt b/source/builder.txt index 0315d65..633d257 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -33,7 +33,6 @@ The resulting XML file should look like this. True True True - False

Gc6yCI2W8T-D= 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 Y)XFlarC7lm{`?+js_Cc}DO-pA2l}L(9{>OV literal 0 HcmV?d00001 diff --git a/source/widgets/toggle-button.png b/source/widgets/toggle-button.png new file mode 100644 index 0000000000000000000000000000000000000000..423e14345cb63f5a0ccef59f0d0caec9572ca1b9 GIT binary patch literal 3210 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 literal 0 HcmV?d00001 diff --git a/source/widgets/toolpalette.png b/source/widgets/toolpalette.png new file mode 100644 index 0000000000000000000000000000000000000000..7361ad7f3b192e733fdf1052f6ae80090f25ebd5 GIT binary patch literal 8015 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 aeefw;5T53%7`1=(@>hzQ3RQCEAO8nI>5$+6 literal 0 HcmV?d00001 diff --git a/source/widgets/volumebutton.png b/source/widgets/volumebutton.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3ed7f21d9c569baa48db28ed529b9d588103bd GIT binary patch literal 3441 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 NxPJRug^|m%e*#TJuW$eW literal 0 HcmV?d00001 diff --git a/source/widgets/window.png b/source/widgets/window.png new file mode 100644 index 0000000000000000000000000000000000000000..aa58204dc176145e0e3cd6f9f48b50aa71ffac58 GIT binary patch literal 1093 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5wsNom$qh`3B0!3z*vT`50|;t3QaTtInE!aX zIEGZrd3!51|5lmAv4_%5yFGJ*GHd?#&p5ob@?k3bwsudBpzDT)?_N*($Hd%M^XX5D zwI9%+2DWbF`TA-1>$mX6tpB^?+57%&{=6TRPQLqeoGs>t)!_y2@2z?JV^{p#8<`VT z`uqF;Uo>R;zwK+)T$S&ZJb%(++~3>tFnrkmeL~`c`1IGR?UMGDYz%kW@+H~oqR!9c zt)Dd4m|;ikeIuT~mv>Bi{QNghI-56R!|ksV5W^cWv3tCfs@e)zxT;}7bQ91M5X-8bg>S3JpI((m{CB8~$^ zKR@m}uvVBsLyaN8hhf1C1_wjNh9oA2qbv+voD3qP62m1(9+bWHU$gjqxcr+bU#n_w zIy39N)jU}|X?o$_zU;{^`5Xs|feF*Q&6w$d)!X73_n*r+6_iL8=rP>pY2GJc zKcD~qbCq&&n~De5ea-*I6>%IaF)o;F{GDOjWBz3i??3-B??5aI!@9d^+n)VrwUBQ3 zsd`|GE$@G=!w>WyOET>!yKSB=*OEKw?xQ1q-8_eF_nu>~`}xfJft4@+zc*>wztgJg vwHQtsJh*JNoi}Fr&&l=q^I85>|JL6(^{hk7cPC9?c4qK&^>bP0l+XkKGJk^- literal 0 HcmV?d00001 From e9a0be6de7d594ff9300731fc87c438c1bc32e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=97=CE=BB=CE=B9=CE=AC=CE=B4=CE=B7=CF=82=20=CE=97=CE=BB?= =?UTF-8?q?=CE=AF=CE=B1=CF=82?= Date: Sun, 6 May 2018 16:37:26 +0300 Subject: [PATCH 082/209] Add a more practical example of Gtk.Spinner Uses a timeout function. --- examples/spinner_ext_example.py | 87 ++++++++++++++++++++++++++++++++ images/spinner_ext_example.png | Bin 0 -> 10669 bytes source/spinner.txt | 13 +++++ 3 files changed, 100 insertions(+) create mode 100644 examples/spinner_ext_example.py create mode 100644 images/spinner_ext_example.png diff --git a/examples/spinner_ext_example.py b/examples/spinner_ext_example.py new file mode 100644 index 0000000..cac85fd --- /dev/null +++ b/examples/spinner_ext_example.py @@ -0,0 +1,87 @@ +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, GObject + +class SpinnerWindow(Gtk.Window): + + def __init__(self, *args, **kwargs): + Gtk.Window.__init__(self, title="Spinner Demo") + self.set_border_width(10) + + mainBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) + self.add(mainBox) + + self.spinner = Gtk.Spinner() + mainBox.pack_start(self.spinner, True, True, 0) + + self.label = Gtk.Label() + mainBox.pack_start(self.label, True, True, 0) + + self.entry = Gtk.Entry() + self.entry.set_text('10') + mainBox.pack_start(self.entry, True, True, 0) + + self.buttonStart = Gtk.Button("Start timer") + self.buttonStart.connect("clicked", self.on_buttonStart_clicked) + mainBox.pack_start(self.buttonStart, True, True, 0) + + self.buttonStop = Gtk.Button("Stop timer") + self.buttonStop.set_sensitive(False) + self.buttonStop.connect("clicked", self.on_buttonStop_clicked) + mainBox.pack_start(self.buttonStop, True, True, 0) + + self.timeout_id = None + self.connect("delete-event", self.on_SpinnerWindow_destroy) + + def on_buttonStart_clicked(self, widget, *args): + """ Handles «clicked» event of buttonStart. """ + self.start_timer() + + def on_buttonStop_clicked(self, widget, *args): + """ Handles «clicked» event of buttonStop. """ + self.stop_timer('Stopped from button') + + def on_SpinnerWindow_destroy(self, widget, *args): + """ Handles destroy event of main window. """ + # ensure the timeout function is stopped + if self.timeout_id: + GObject.source_remove(self.timeout_id) + self.timeout_id = None + Gtk.main_quit() + + def on_timeout(self, *args, **kwargs): + """ A timeout function. + + Return True to stop it. + This is not a precise timer since next timeout + is recalculated based on the current time.""" + self.counter -= 1 + if self.counter <= 0: + self.stop_timer('Reached time out') + return False + self.label.set_label('Remaining: ' + str(int(self.counter / 4))) + return True + + def start_timer(self): + """ Start the timer. """ + self.buttonStart.set_sensitive(False) + self.buttonStop.set_sensitive(True) + # time out will check every 250 miliseconds (1/4 of a second) + self.counter = 4 * int(self.entry.get_text()) + self.label.set_label('Remaining: ' + str(int(self.counter / 4))) + self.spinner.start() + self.timeout_id = GObject.timeout_add(250, self.on_timeout, None) + + def stop_timer(self, alabeltext): + """ Stop the timer. """ + if self.timeout_id: + GObject.source_remove(self.timeout_id) + self.timeout_id = None + self.spinner.stop() + self.buttonStart.set_sensitive(True) + self.buttonStop.set_sensitive(False) + self.label.set_label(alabeltext) + +win = SpinnerWindow() +win.show_all() +Gtk.main() diff --git a/images/spinner_ext_example.png b/images/spinner_ext_example.png new file mode 100644 index 0000000000000000000000000000000000000000..f9febb7e7c2147ec61bda0a4e534bac5cc5834f1 GIT binary patch literal 10669 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 m|B Date: Sat, 19 May 2018 10:33:30 +0100 Subject: [PATCH 083/209] Update extended Gtk.Spinner example Closes #128 --- examples/spinner_ext_example.py | 6 +++--- images/spinner_ext_example.png | Bin 10669 -> 9420 bytes source/spinner.txt | 8 ++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/examples/spinner_ext_example.py b/examples/spinner_ext_example.py index cac85fd..0e06932 100644 --- a/examples/spinner_ext_example.py +++ b/examples/spinner_ext_example.py @@ -31,14 +31,14 @@ def __init__(self, *args, **kwargs): mainBox.pack_start(self.buttonStop, True, True, 0) self.timeout_id = None - self.connect("delete-event", self.on_SpinnerWindow_destroy) + self.connect("destroy", self.on_SpinnerWindow_destroy) def on_buttonStart_clicked(self, widget, *args): - """ Handles «clicked» event of buttonStart. """ + """ Handles "clicked" event of buttonStart. """ self.start_timer() def on_buttonStop_clicked(self, widget, *args): - """ Handles «clicked» event of buttonStop. """ + """ Handles "clicked" event of buttonStop. """ self.stop_timer('Stopped from button') def on_SpinnerWindow_destroy(self, widget, *args): diff --git a/images/spinner_ext_example.png b/images/spinner_ext_example.png index f9febb7e7c2147ec61bda0a4e534bac5cc5834f1..5e1de805f7853e7c742a49878255794d272c439f 100644 GIT binary patch literal 9420 zcmb7q1ymftwk_`NE+M!lI1KI(2<{RjxVsH5K||2sk^mvNyK8WVATziH2Dd@}27W9>|yKT2|?@@hl8Vo zQ<9a^_RTq2_X#BOdLBMs8c%ohXI_smMMD0z^0~Zhgw>y>G|yi^j2Kf_Y-~z&%HLZ% zb{Fq@zMiHjr9KBcIb>E8osqtidG+HS6v}{?fQ0@rMRD&kP|R1XZ_=mxa^+8#PuFGc zC>9!h1fKLizi^a(18Js^a(X^Auepzn7}S59h>3|&T;iK3w1Wo3;uRIMe1EU}RXo2M zJShqZ+}ez$eI{9kC+n#~1Ox}OPQpLz?e4DUq^0pM@?dd{_0?5O>u^Qb5}GW{cu|+m zjozHBN}R6L?}zuu)4haDtxs*Q`1$z>+E`h|U*8A*!S2G_TI#Rk!0PYWzf6W*1$ewz zDTuIA>E|5R+kIG)EpH9$iH?Lo?zBaRRXXJBBkUDdjmgAym>dFfcF)vC+vb4&vSZR@y8buL!{U{mfVFu+nbT;w(+GYC8RO!~vQz ztB=F)MzX-Mx}D5iyy$|(k3PZm57IGQs$tv_*h*)SHT38}W~{{WKlWza?rz;iVy!@h@?GHXs}o-xQnf6K$8pN2nWgDSpvm&uiVL|0VdGF^`l> z@HVf}tP;Uy6h1%T8|8-IriioOHABMz?}^zTDOZQ-x9so=?l}3C>^4JYc{X!nO9)+) zT<;=6kh&9eo%n0)^*l!5NVz*6Ib1p}QI^E-G5oibII#O7SZ~k%ut3W({xlC@h z)embuPdN5i*x{*(9-E$KioqYf%*{Wi84Y{Pb-eH#Hq_s5r`A>kJCT${A#$PW>sY%D znweS5j+S0RwT91ruV)mM>%sE@UW(h9-1jL#9!EPMt+OLfieb(PM!U0}3FeC0UL@o6$y%q91x|j27Ba z;#F1A&~kB_k?DD)Jt^$P@d7j#DF+6%cLnF#tz}xa_z&%B>*(+UbhWf5yp~KyTX-cT z3?13gfs}*8qLN8AmOqpVY_XF?zTJ*E3cP;a_eXR%@87|q9{E+rv$y_&QGOctbR+!Y zz`ba5JL9t>>CHF56Y#vRFA5R@U%bL}Zr=y}dAPDuBPUlGm>wO6zRp*tX(QM6o4d?6 zKH42Cbz#zPrXJ%9zPUc^X$`kTr}d&aeth5h2Q!vqq5N9xIw7M6)o0pc8Lnwb*0q0a z%HXC)j*4ICi@lzJI@gBmwT%ayTp@Dv%L%mr@R6^RkfJQ^xPP0rVs{SJ*>TZEZ?-c4 zcd^2B@cOOIdmSA)FE4(<@s6xCP_TlU8Z?iWyVs?dRanG;*{rYhI~P~iT{VY^D<%>~ zcH^jLk4gRH*3GKRpx51fppg^4@#O*#syefom#w~CB>@U`I2ha^#~WYu?b*%$(@3anKiTz1nd^S8)z&WMF3|@Yz+na5rmOUIQj7C~H<{QHD5C=hme7IcKHP@RNk_WP#c$yyfyQe0P#q)WPYEv&NLZmwPAo~@ z@1vz3H;)EQRfm

From 007305217c090484bab9a36fb0e7da8bea59ca6b Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Fri, 24 May 2019 15:34:25 +0100 Subject: [PATCH 100/209] Format all Python files with Black To keep code consistency use Black code formatter with default settings. Closes #155 --- examples/application_example.py | 51 ++++++--- examples/builder_example.py | 5 +- examples/button_example.py | 10 +- examples/cellrendereraccel_example.py | 6 +- examples/cellrenderercombo_example.py | 9 +- examples/cellrendererpixbuf_example.py | 6 +- examples/cellrendererprogress_example.py | 14 ++- examples/cellrendererspin_example.py | 6 +- examples/cellrenderertext_example.py | 11 +- examples/cellrenderertoggle_example.py | 8 +- examples/checkbutton_example.py | 6 +- examples/clipboard_example.py | 5 +- examples/combobox_example.py | 31 ++++-- examples/dialog_example.py | 23 +++- examples/drag_and_drop_example.py | 23 ++-- examples/entry_example.py | 9 +- examples/extended_example.py | 6 +- examples/filechooserdialog_example.py | 27 +++-- examples/iconview_example.py | 28 ++--- examples/label_example.py | 76 +++++++------ examples/layout_box_example.py | 6 +- examples/layout_flowbox_example.py | 135 ++++++++++++----------- examples/layout_grid_example.py | 6 +- examples/layout_headerbar_example.py | 10 +- examples/layout_listbox_example.py | 13 ++- examples/layout_stack_example.py | 10 +- examples/layout_table_example.py | 6 +- examples/linkbutton_example.py | 6 +- examples/menu_example.py | 80 +++++++++----- examples/messagedialog_example.py | 54 ++++++--- examples/notebook_plain_example.py | 18 ++- examples/popover_advanced_example.py | 3 +- examples/popover_example.py | 7 +- examples/progressbar_example.py | 6 +- examples/radiobutton_example.py | 9 +- examples/simple_example.py | 3 +- examples/spinbutton_example.py | 6 +- examples/spinner_example.py | 6 +- examples/spinner_ext_example.py | 16 +-- examples/switch_example.py | 7 +- examples/textview_example.py | 103 +++++++++-------- examples/togglebutton_example.py | 6 +- examples/treeview_filter_example.py | 66 ++++++----- source/builder.txt | 2 +- source/conf.py | 126 +++++++++++---------- source/introduction.txt | 18 +-- source/layout.txt | 4 +- 47 files changed, 646 insertions(+), 446 deletions(-) diff --git a/examples/application_example.py b/examples/application_example.py index e57ae13..4a0673e 100644 --- a/examples/application_example.py +++ b/examples/application_example.py @@ -1,11 +1,12 @@ import sys import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import GLib, Gio, Gtk # This would typically be its own file -MENU_XML=""" +MENU_XML = """
@@ -48,30 +49,34 @@ """ -class AppWindow(Gtk.ApplicationWindow): +class AppWindow(Gtk.ApplicationWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # This will be in the windows group and have the "win" prefix - max_action = Gio.SimpleAction.new_stateful("maximize", None, - GLib.Variant.new_boolean(False)) + max_action = Gio.SimpleAction.new_stateful( + "maximize", None, GLib.Variant.new_boolean(False) + ) max_action.connect("change-state", self.on_maximize_toggle) self.add_action(max_action) # Keep it in sync with the actual state - self.connect("notify::is-maximized", - lambda obj, pspec: max_action.set_state( - GLib.Variant.new_boolean(obj.props.is_maximized))) + self.connect( + "notify::is-maximized", + lambda obj, pspec: max_action.set_state( + GLib.Variant.new_boolean(obj.props.is_maximized) + ), + ) lbl_variant = GLib.Variant.new_string("String 1") - lbl_action = Gio.SimpleAction.new_stateful("change_label", lbl_variant.get_type(), - lbl_variant) + lbl_action = Gio.SimpleAction.new_stateful( + "change_label", lbl_variant.get_type(), lbl_variant + ) lbl_action.connect("change-state", self.on_change_label_state) self.add_action(lbl_action) - self.label = Gtk.Label(label=lbl_variant.get_string(), - margin=30) + self.label = Gtk.Label(label=lbl_variant.get_string(), margin=30) self.add(self.label) self.label.show() @@ -86,16 +91,25 @@ def on_maximize_toggle(self, action, value): else: self.unmaximize() -class Application(Gtk.Application): +class Application(Gtk.Application): def __init__(self, *args, **kwargs): - super().__init__(*args, application_id="org.example.myapp", - flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, - **kwargs) + super().__init__( + *args, + application_id="org.example.myapp", + flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, + **kwargs + ) self.window = None - self.add_main_option("test", ord("t"), GLib.OptionFlags.NONE, - GLib.OptionArg.NONE, "Command line test", None) + self.add_main_option( + "test", + ord("t"), + GLib.OptionFlags.NONE, + GLib.OptionArg.NONE, + "Command line test", + None, + ) def do_startup(self): Gtk.Application.do_startup(self) @@ -139,6 +153,7 @@ def on_about(self, action, param): def on_quit(self, action, param): self.quit() + if __name__ == "__main__": app = Application() app.run(sys.argv) diff --git a/examples/builder_example.py b/examples/builder_example.py index 1102822..e78e80f 100644 --- a/examples/builder_example.py +++ b/examples/builder_example.py @@ -1,7 +1,9 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk + class Handler: def onDestroy(self, *args): Gtk.main_quit() @@ -9,6 +11,7 @@ def onDestroy(self, *args): def onButtonPressed(self, button): print("Hello World!") + builder = Gtk.Builder() builder.add_from_file("builder_example.glade") builder.connect_signals(Handler()) diff --git a/examples/button_example.py b/examples/button_example.py index 1b26e5b..d97060c 100644 --- a/examples/button_example.py +++ b/examples/button_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class ButtonWindow(Gtk.Window): +class ButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Button Demo") self.set_border_width(10) @@ -24,15 +25,16 @@ def __init__(self): hbox.pack_start(button, True, True, 0) def on_click_me_clicked(self, button): - print("\"Click me\" button was clicked") + print('"Click me" button was clicked') def on_open_clicked(self, button): - print("\"Open\" button was clicked") + print('"Open" button was clicked') def on_close_clicked(self, button): print("Closing application") Gtk.main_quit() + win = ButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrendereraccel_example.py b/examples/cellrendereraccel_example.py index dcd8c30..62200c8 100644 --- a/examples/cellrendereraccel_example.py +++ b/examples/cellrendereraccel_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererAccelWindow(Gtk.Window): +class CellRendererAccelWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererAccel Example") @@ -40,6 +41,7 @@ def on_accel_edited(self, widget, path, key, mods, hwcod): def on_accel_cleared(self, widget, path): self.liststore[path][1] = None + win = CellRendererAccelWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrenderercombo_example.py b/examples/cellrenderercombo_example.py index f617258..fdc711e 100644 --- a/examples/cellrenderercombo_example.py +++ b/examples/cellrenderercombo_example.py @@ -1,17 +1,17 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererComboWindow(Gtk.Window): +class CellRendererComboWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererCombo Example") self.set_default_size(200, 200) liststore_manufacturers = Gtk.ListStore(str) - manufacturers = ["Sony", "LG", - "Panasonic", "Toshiba", "Nokia", "Samsung"] + manufacturers = ["Sony", "LG", "Panasonic", "Toshiba", "Nokia", "Samsung"] for item in manufacturers: liststore_manufacturers.append([item]) @@ -41,6 +41,7 @@ def __init__(self): def on_combo_changed(self, widget, path, text): self.liststore_hardware[path][1] = text + win = CellRendererComboWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrendererpixbuf_example.py b/examples/cellrendererpixbuf_example.py index bafc9a1..38108a2 100644 --- a/examples/cellrendererpixbuf_example.py +++ b/examples/cellrendererpixbuf_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererPixbufWindow(Gtk.Window): +class CellRendererPixbufWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererPixbuf Example") @@ -27,6 +28,7 @@ def __init__(self): self.add(treeview) + win = CellRendererPixbufWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrendererprogress_example.py b/examples/cellrendererprogress_example.py index af17255..4d536ab 100644 --- a/examples/cellrendererprogress_example.py +++ b/examples/cellrendererprogress_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib -class CellRendererProgressWindow(Gtk.Window): +class CellRendererProgressWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererProgress Example") @@ -21,14 +22,14 @@ def __init__(self): treeview.append_column(column_text) renderer_progress = Gtk.CellRendererProgress() - column_progress = Gtk.TreeViewColumn("Progress", renderer_progress, - value=1, inverted=2) + column_progress = Gtk.TreeViewColumn( + "Progress", renderer_progress, value=1, inverted=2 + ) treeview.append_column(column_progress) renderer_toggle = Gtk.CellRendererToggle() renderer_toggle.connect("toggled", self.on_inverted_toggled) - column_toggle = Gtk.TreeViewColumn("Inverted", renderer_toggle, - active=2) + column_toggle = Gtk.TreeViewColumn("Inverted", renderer_toggle, active=2) treeview.append_column(column_toggle) self.add(treeview) @@ -54,6 +55,7 @@ def reset_model(self): row[1] = 0 self.current_iter = self.liststore.get_iter_first() + win = CellRendererProgressWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrendererspin_example.py b/examples/cellrendererspin_example.py index e1cf52b..d6b3bdc 100644 --- a/examples/cellrendererspin_example.py +++ b/examples/cellrendererspin_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererSpinWindow(Gtk.Window): +class CellRendererSpinWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererSpin Example") @@ -35,6 +36,7 @@ def __init__(self): def on_amount_edited(self, widget, path, value): self.liststore[path][1] = int(value) + win = CellRendererSpinWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrenderertext_example.py b/examples/cellrenderertext_example.py index 910c193..361d2c6 100644 --- a/examples/cellrenderertext_example.py +++ b/examples/cellrenderertext_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererTextWindow(Gtk.Window): +class CellRendererTextWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererText Example") @@ -23,8 +24,9 @@ def __init__(self): renderer_editabletext = Gtk.CellRendererText() renderer_editabletext.set_property("editable", True) - column_editabletext = Gtk.TreeViewColumn("Editable Text", - renderer_editabletext, text=1) + column_editabletext = Gtk.TreeViewColumn( + "Editable Text", renderer_editabletext, text=1 + ) treeview.append_column(column_editabletext) renderer_editabletext.connect("edited", self.text_edited) @@ -34,6 +36,7 @@ def __init__(self): def text_edited(self, widget, path, text): self.liststore[path][1] = text + win = CellRendererTextWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/cellrenderertoggle_example.py b/examples/cellrenderertoggle_example.py index acf46e6..9110f93 100644 --- a/examples/cellrenderertoggle_example.py +++ b/examples/cellrenderertoggle_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CellRendererToggleWindow(Gtk.Window): +class CellRendererToggleWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererToggle Example") @@ -41,7 +42,8 @@ def on_cell_toggled(self, widget, path): def on_cell_radio_toggled(self, widget, path): selected_path = Gtk.TreePath(path) for row in self.liststore: - row[2] = (row.path == selected_path) + row[2] = row.path == selected_path + win = CellRendererToggleWindow() win.connect("destroy", Gtk.main_quit) diff --git a/examples/checkbutton_example.py b/examples/checkbutton_example.py index 413f874..202c570 100644 --- a/examples/checkbutton_example.py +++ b/examples/checkbutton_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class CheckButtonWindow(Gtk.Window): +class CheckButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CheckButton Demo") self.set_border_width(10) @@ -27,6 +28,7 @@ def on_button_toggled(self, button, name): state = "off" print("Button", name, "was turned", state) + win = CheckButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index 1873442..6bddb2c 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk -class ClipboardWindow(Gtk.Window): +class ClipboardWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Clipboard Example") diff --git a/examples/combobox_example.py b/examples/combobox_example.py index 0cf7bc4..b4eace8 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class ComboBoxWindow(Gtk.Window): +class ComboBoxWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ComboBox Example") @@ -25,9 +26,17 @@ def __init__(self): vbox.pack_start(name_combo, False, False, 0) country_store = Gtk.ListStore(str) - countries = ["Austria", "Brazil", "Belgium", "France", "Germany", - "Switzerland", "United Kingdom", "United States of America", - "Uruguay"] + countries = [ + "Austria", + "Brazil", + "Belgium", + "France", + "Germany", + "Switzerland", + "United Kingdom", + "United States of America", + "Uruguay", + ] for country in countries: country_store.append([country]) @@ -38,8 +47,15 @@ def __init__(self): country_combo.add_attribute(renderer_text, "text", 0) vbox.pack_start(country_combo, False, False, True) - currencies = ["Euro", "US Dollars", "British Pound", "Japanese Yen", - "Russian Ruble", "Mexican peso", "Swiss franc"] + currencies = [ + "Euro", + "US Dollars", + "British Pound", + "Japanese Yen", + "Russian Ruble", + "Mexican peso", + "Swiss franc", + ] currency_combo = Gtk.ComboBoxText() currency_combo.set_entry_text_column(0) currency_combo.connect("changed", self.on_currency_combo_changed) @@ -72,6 +88,7 @@ def on_currency_combo_changed(self, combo): if text is not None: print("Selected: currency=%s" % text) + win = ComboBoxWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/dialog_example.py b/examples/dialog_example.py index 970dd39..980b60f 100644 --- a/examples/dialog_example.py +++ b/examples/dialog_example.py @@ -1,13 +1,23 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class DialogExample(Gtk.Dialog): +class DialogExample(Gtk.Dialog): def __init__(self, parent): - Gtk.Dialog.__init__(self, "My Dialog", parent, 0, - (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, - Gtk.STOCK_OK, Gtk.ResponseType.OK)) + Gtk.Dialog.__init__( + self, + "My Dialog", + parent, + 0, + ( + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OK, + Gtk.ResponseType.OK, + ), + ) self.set_default_size(150, 100) @@ -17,8 +27,8 @@ def __init__(self, parent): box.add(label) self.show_all() -class DialogWindow(Gtk.Window): +class DialogWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Dialog Example") @@ -40,6 +50,7 @@ def on_button_clicked(self, widget): dialog.destroy() + win = DialogWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/drag_and_drop_example.py b/examples/drag_and_drop_example.py index a37fbef..c1fb6e2 100644 --- a/examples/drag_and_drop_example.py +++ b/examples/drag_and_drop_example.py @@ -1,5 +1,6 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk, GdkPixbuf (TARGET_ENTRY_TEXT, TARGET_ENTRY_PIXBUF) = range(2) @@ -7,8 +8,8 @@ DRAG_ACTION = Gdk.DragAction.COPY -class DragDropWindow(Gtk.Window): +class DragDropWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Drag and Drop Demo") @@ -27,13 +28,11 @@ def __init__(self): button_box = Gtk.Box(spacing=6) vbox.pack_start(button_box, True, False, 0) - image_button = Gtk.RadioButton.new_with_label_from_widget(None, - "Images") + image_button = Gtk.RadioButton.new_with_label_from_widget(None, "Images") image_button.connect("toggled", self.add_image_targets) button_box.pack_start(image_button, True, False, 0) - text_button = Gtk.RadioButton.new_with_label_from_widget(image_button, - "Text") + text_button = Gtk.RadioButton.new_with_label_from_widget(image_button, "Text") text_button.connect("toggled", self.add_text_targets) button_box.pack_start(text_button, True, False, 0) @@ -53,8 +52,8 @@ def add_text_targets(self, button=None): self.drop_area.drag_dest_add_text_targets() self.iconview.drag_source_add_text_targets() -class DragSourceIconView(Gtk.IconView): +class DragSourceIconView(Gtk.IconView): def __init__(self): Gtk.IconView.__init__(self) self.set_text_column(COLUMN_TEXT) @@ -66,8 +65,7 @@ def __init__(self): self.add_item("Item 2", "help-about") self.add_item("Item 3", "edit-copy") - self.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], - DRAG_ACTION) + self.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], DRAG_ACTION) self.connect("drag-data-get", self.on_drag_data_get) def on_drag_data_get(self, widget, drag_context, data, info, time): @@ -87,7 +85,6 @@ def add_item(self, text, icon_name): class DropArea(Gtk.Label): - def __init__(self): Gtk.Label.__init__(self) self.set_label("Drop something on me!") @@ -95,7 +92,7 @@ def __init__(self): self.connect("drag-data-received", self.on_drag_data_received) - def on_drag_data_received(self, widget, drag_context, x,y, data,info, time): + def on_drag_data_received(self, widget, drag_context, x, y, data, info, time): if info == TARGET_ENTRY_TEXT: text = data.get_text() print("Received text: %s" % text) @@ -105,8 +102,8 @@ def on_drag_data_received(self, widget, drag_context, x,y, data,info, time): width = pixbuf.get_width() height = pixbuf.get_height() - print("Received pixbuf with width %spx and height %spx" % (width, - height)) + print("Received pixbuf with width %spx and height %spx" % (width, height)) + win = DragDropWindow() win.connect("destroy", Gtk.main_quit) diff --git a/examples/entry_example.py b/examples/entry_example.py index 47d0271..8145d20 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib -class EntryWindow(Gtk.Window): +class EntryWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Entry Demo") self.set_size_request(200, 100) @@ -68,8 +69,8 @@ def on_icon_toggled(self, button): icon_name = "system-search-symbolic" else: icon_name = None - self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, - icon_name) + self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, icon_name) + win = EntryWindow() win.connect("destroy", Gtk.main_quit) diff --git a/examples/extended_example.py b/examples/extended_example.py index 528b93f..0c40e50 100644 --- a/examples/extended_example.py +++ b/examples/extended_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class MyWindow(Gtk.Window): +class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Hello World") @@ -14,6 +15,7 @@ def __init__(self): def on_button_clicked(self, widget): print("Hello World") + win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/filechooserdialog_example.py b/examples/filechooserdialog_example.py index 951a8f1..f710f5f 100644 --- a/examples/filechooserdialog_example.py +++ b/examples/filechooserdialog_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class FileChooserWindow(Gtk.Window): +class FileChooserWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="FileChooser Example") @@ -19,10 +20,17 @@ def __init__(self): box.add(button2) def on_file_clicked(self, widget): - dialog = Gtk.FileChooserDialog("Please choose a file", self, + dialog = Gtk.FileChooserDialog( + "Please choose a file", + self, Gtk.FileChooserAction.OPEN, - (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, - Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) + ( + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK, + ), + ) self.add_filters(dialog) @@ -52,10 +60,12 @@ def add_filters(self, dialog): dialog.add_filter(filter_any) def on_folder_clicked(self, widget): - dialog = Gtk.FileChooserDialog("Please choose a folder", self, + dialog = Gtk.FileChooserDialog( + "Please choose a folder", + self, Gtk.FileChooserAction.SELECT_FOLDER, - (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, - "Select", Gtk.ResponseType.OK)) + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, "Select", Gtk.ResponseType.OK), + ) dialog.set_default_size(800, 400) response = dialog.run() @@ -67,6 +77,7 @@ def on_folder_clicked(self, widget): dialog.destroy() + win = FileChooserWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/iconview_example.py b/examples/iconview_example.py index cf1c17e..87d315d 100644 --- a/examples/iconview_example.py +++ b/examples/iconview_example.py @@ -1,27 +1,29 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk from gi.repository.GdkPixbuf import Pixbuf icons = ["edit-cut", "edit-paste", "edit-copy"] + class IconViewWindow(Gtk.Window): + def __init__(self): + Gtk.Window.__init__(self) + self.set_default_size(200, 200) - def __init__(self): - Gtk.Window.__init__(self) - self.set_default_size(200, 200) + liststore = Gtk.ListStore(Pixbuf, str) + iconview = Gtk.IconView.new() + iconview.set_model(liststore) + iconview.set_pixbuf_column(0) + iconview.set_text_column(1) - liststore = Gtk.ListStore(Pixbuf, str) - iconview = Gtk.IconView.new() - iconview.set_model(liststore) - iconview.set_pixbuf_column(0) - iconview.set_text_column(1) + for icon in icons: + pixbuf = Gtk.IconTheme.get_default().load_icon(icon, 64, 0) + liststore.append([pixbuf, "Label"]) - for icon in icons: - pixbuf = Gtk.IconTheme.get_default().load_icon(icon, 64, 0) - liststore.append([pixbuf, "Label"]) + self.add(iconview) - self.add(iconview) win = IconViewWindow() win.connect("destroy", Gtk.main_quit) diff --git a/examples/label_example.py b/examples/label_example.py index 1170ecd..b093fdd 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -1,69 +1,76 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class LabelWindow(Gtk.Window): +class LabelWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Label Example") - + hbox = Gtk.Box(spacing=10) hbox.set_homogeneous(False) vbox_left = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) vbox_left.set_homogeneous(False) vbox_right = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) vbox_right.set_homogeneous(False) - + hbox.pack_start(vbox_left, True, True, 0) hbox.pack_start(vbox_right, True, True, 0) - + label = Gtk.Label("This is a normal label") vbox_left.pack_start(label, True, True, 0) - + label = Gtk.Label() label.set_text("This is a left-justified label.\nWith multiple lines.") label.set_justify(Gtk.Justification.LEFT) vbox_left.pack_start(label, True, True, 0) - - label = Gtk.Label( - "This is a right-justified label.\nWith multiple lines.") + + label = Gtk.Label("This is a right-justified label.\nWith multiple lines.") label.set_justify(Gtk.Justification.RIGHT) vbox_left.pack_start(label, True, True, 0) - - label = Gtk.Label("This is an example of a line-wrapped label. It " - "should not be taking up the entire " - "width allocated to it, but automatically " - "wraps the words to fit.\n" - " It supports multiple paragraphs correctly, " - "and correctly adds " - "many extra spaces. ") + + label = Gtk.Label( + "This is an example of a line-wrapped label. It " + "should not be taking up the entire " + "width allocated to it, but automatically " + "wraps the words to fit.\n" + " It supports multiple paragraphs correctly, " + "and correctly adds " + "many extra spaces. " + ) label.set_line_wrap(True) vbox_right.pack_start(label, True, True, 0) - - label = Gtk.Label("This is an example of a line-wrapped, filled label. " - "It should be taking " - "up the entire width allocated to it. " - "Here is a sentence to prove " - "my point. Here is another sentence. " - "Here comes the sun, do de do de do.\n" - " This is a new paragraph.\n" - " This is another newer, longer, better " - "paragraph. It is coming to an end, " - "unfortunately.") + + label = Gtk.Label( + "This is an example of a line-wrapped, filled label. " + "It should be taking " + "up the entire width allocated to it. " + "Here is a sentence to prove " + "my point. Here is another sentence. " + "Here comes the sun, do de do de do.\n" + " This is a new paragraph.\n" + " This is another newer, longer, better " + "paragraph. It is coming to an end, " + "unfortunately." + ) label.set_line_wrap(True) label.set_justify(Gtk.Justification.FILL) vbox_right.pack_start(label, True, True, 0) label = Gtk.Label() - label.set_markup("Text can be small, big, " - "bold, italic and even point to " - "somewhere in the internets.") + label.set_markup( + "Text can be small, big, " + "bold, italic and even point to " + 'somewhere in the internets.' + ) label.set_line_wrap(True) vbox_left.pack_start(label, True, True, 0) label = Gtk.Label.new_with_mnemonic( - "_Press Alt + P to select button to the right") + "_Press Alt + P to select button to the right" + ) vbox_left.pack_start(label, True, True, 0) label.set_selectable(True) @@ -73,7 +80,8 @@ def __init__(self): self.add(hbox) -window = LabelWindow() + +window = LabelWindow() window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main() diff --git a/examples/layout_box_example.py b/examples/layout_box_example.py index fa55de8..0b3b459 100644 --- a/examples/layout_box_example.py +++ b/examples/layout_box_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class MyWindow(Gtk.Window): +class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Hello World") @@ -24,6 +25,7 @@ def on_button1_clicked(self, widget): def on_button2_clicked(self, widget): print("Goodbye") + win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 1afe645..1a819e9 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk -class FlowBoxWindow(Gtk.Window): +class FlowBoxWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="FlowBox Demo") self.set_border_width(10) @@ -37,10 +38,10 @@ def on_draw(self, widget, cr, data): height = widget.get_allocated_height() Gtk.render_background(context, cr, 0, 0, width, height) - r,g,b,a = data['color'] - cr.set_source_rgba(r,g,b,a) + r, g, b, a = data["color"] + cr.set_source_rgba(r, g, b, a) cr.rectangle(0, 0, width, height) - cr.fill() + cr.fill() def color_swatch_new(self, str_color): color = Gdk.color_parse(str_color) @@ -50,7 +51,7 @@ def color_swatch_new(self, str_color): area = Gtk.DrawingArea() area.set_size_request(24, 24) - area.connect("draw", self.on_draw, {'color': rgba}) + area.connect("draw", self.on_draw, {"color": rgba}) button.add(area) @@ -58,67 +59,67 @@ def color_swatch_new(self, str_color): def create_flowbox(self, flowbox): colors = [ - 'AliceBlue', - 'AntiqueWhite', - 'AntiqueWhite1', - 'AntiqueWhite2', - 'AntiqueWhite3', - 'AntiqueWhite4', - 'aqua', - 'aquamarine', - 'aquamarine1', - 'aquamarine2', - 'aquamarine3', - 'aquamarine4', - 'azure', - 'azure1', - 'azure2', - 'azure3', - 'azure4', - 'beige', - 'bisque', - 'bisque1', - 'bisque2', - 'bisque3', - 'bisque4', - 'black', - 'BlanchedAlmond', - 'blue', - 'blue1', - 'blue2', - 'blue3', - 'blue4', - 'BlueViolet', - 'brown', - 'brown1', - 'brown2', - 'brown3', - 'brown4', - 'burlywood', - 'burlywood1', - 'burlywood2', - 'burlywood3', - 'burlywood4', - 'CadetBlue', - 'CadetBlue1', - 'CadetBlue2', - 'CadetBlue3', - 'CadetBlue4', - 'chartreuse', - 'chartreuse1', - 'chartreuse2', - 'chartreuse3', - 'chartreuse4', - 'chocolate', - 'chocolate1', - 'chocolate2', - 'chocolate3', - 'chocolate4', - 'coral', - 'coral1', - 'coral2', - 'coral3', - 'coral4' + "AliceBlue", + "AntiqueWhite", + "AntiqueWhite1", + "AntiqueWhite2", + "AntiqueWhite3", + "AntiqueWhite4", + "aqua", + "aquamarine", + "aquamarine1", + "aquamarine2", + "aquamarine3", + "aquamarine4", + "azure", + "azure1", + "azure2", + "azure3", + "azure4", + "beige", + "bisque", + "bisque1", + "bisque2", + "bisque3", + "bisque4", + "black", + "BlanchedAlmond", + "blue", + "blue1", + "blue2", + "blue3", + "blue4", + "BlueViolet", + "brown", + "brown1", + "brown2", + "brown3", + "brown4", + "burlywood", + "burlywood1", + "burlywood2", + "burlywood3", + "burlywood4", + "CadetBlue", + "CadetBlue1", + "CadetBlue2", + "CadetBlue3", + "CadetBlue4", + "chartreuse", + "chartreuse1", + "chartreuse2", + "chartreuse3", + "chartreuse4", + "chocolate", + "chocolate1", + "chocolate2", + "chocolate3", + "chocolate4", + "coral", + "coral1", + "coral2", + "coral3", + "coral4", ] for color in colors: diff --git a/examples/layout_grid_example.py b/examples/layout_grid_example.py index 655bd95..5268f9d 100644 --- a/examples/layout_grid_example.py +++ b/examples/layout_grid_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class GridWindow(Gtk.Window): +class GridWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Grid Example") @@ -24,6 +25,7 @@ def __init__(self): grid.attach(button5, 1, 2, 1, 1) grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1) + win = GridWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 167187b..0174189 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gio -class HeaderBarWindow(Gtk.Window): +class HeaderBarWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="HeaderBar Demo") self.set_border_width(10) @@ -19,7 +20,7 @@ def __init__(self): image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) button.add(image) hb.pack_end(button) - + box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) Gtk.StyleContext.add_class(box.get_style_context(), "linked") @@ -32,9 +33,10 @@ def __init__(self): box.add(button) hb.pack_start(box) - + self.add(Gtk.TextView()) + win = HeaderBarWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index f058ea5..f7ba1c2 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -1,15 +1,17 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk + class ListBoxRowWithData(Gtk.ListBoxRow): def __init__(self, data): super(Gtk.ListBoxRow, self).__init__() self.data = data self.add(Gtk.Label(data)) -class ListBoxWindow(Gtk.Window): +class ListBoxWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ListBox Demo") self.set_border_width(10) @@ -61,7 +63,7 @@ def __init__(self): listbox.add(row) listbox_2 = Gtk.ListBox() - items = 'This is a sorted ListBox Fail'.split() + items = "This is a sorted ListBox Fail".split() for item in items: listbox_2.add(ListBoxRowWithData(item)) @@ -70,7 +72,7 @@ def sort_func(row_1, row_2, data, notify_destroy): return row_1.data.lower() > row_2.data.lower() def filter_func(row, data, notify_destroy): - return False if row.data == 'Fail' else True + return False if row.data == "Fail" else True listbox_2.set_sort_func(sort_func, None, False) listbox_2.set_filter_func(filter_func, None, False) @@ -78,11 +80,12 @@ def filter_func(row, data, notify_destroy): def on_row_activated(listbox_widget, row): print(row.data) - listbox_2.connect('row-activated', on_row_activated) + listbox_2.connect("row-activated", on_row_activated) box_outer.pack_start(listbox_2, True, True, 0) listbox_2.show_all() + win = ListBoxWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/layout_stack_example.py b/examples/layout_stack_example.py index a1ba0c1..9967f89 100644 --- a/examples/layout_stack_example.py +++ b/examples/layout_stack_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class StackWindow(Gtk.Window): +class StackWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Stack Demo") self.set_border_width(10) @@ -14,10 +15,10 @@ def __init__(self): stack = Gtk.Stack() stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) stack.set_transition_duration(1000) - + checkbutton = Gtk.CheckButton("Click me!") stack.add_titled(checkbutton, "check", "Check Button") - + label = Gtk.Label() label.set_markup("A fancy label") stack.add_titled(label, "label", "A label") @@ -27,6 +28,7 @@ def __init__(self): vbox.pack_start(stack_switcher, True, True, 0) vbox.pack_start(stack, True, True, 0) + win = StackWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/layout_table_example.py b/examples/layout_table_example.py index b4d11b7..40144b9 100644 --- a/examples/layout_table_example.py +++ b/examples/layout_table_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class TableWindow(Gtk.Window): +class TableWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Table Example") @@ -24,6 +25,7 @@ def __init__(self): table.attach(button5, 1, 2, 2, 3) table.attach(button6, 2, 3, 2, 3) + win = TableWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/linkbutton_example.py b/examples/linkbutton_example.py index b64708e..c0be0c7 100644 --- a/examples/linkbutton_example.py +++ b/examples/linkbutton_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class LinkButtonWindow(Gtk.Window): +class LinkButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="LinkButton Demo") self.set_border_width(10) @@ -11,6 +12,7 @@ def __init__(self): button = Gtk.LinkButton("http://www.gtk.org", "Visit GTK+ Homepage") self.add(button) + win = LinkButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/menu_example.py b/examples/menu_example.py index e621759..d46fc47 100644 --- a/examples/menu_example.py +++ b/examples/menu_example.py @@ -1,5 +1,6 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk UI_INFO = """ @@ -38,8 +39,8 @@ """ -class MenuExampleWindow(Gtk.Window): +class MenuExampleWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Menu Example") @@ -80,41 +81,65 @@ def add_file_menu_actions(self, action_group): action_filenewmenu = Gtk.Action("FileNew", None, None, Gtk.STOCK_NEW) action_group.add_action(action_filenewmenu) - action_new = Gtk.Action("FileNewStandard", "_New", - "Create a new file", Gtk.STOCK_NEW) + action_new = Gtk.Action( + "FileNewStandard", "_New", "Create a new file", Gtk.STOCK_NEW + ) action_new.connect("activate", self.on_menu_file_new_generic) action_group.add_action_with_accel(action_new, None) - action_group.add_actions([ - ("FileNewFoo", None, "New Foo", None, "Create new foo", - self.on_menu_file_new_generic), - ("FileNewGoo", None, "_New Goo", None, "Create new goo", - self.on_menu_file_new_generic), - ]) + action_group.add_actions( + [ + ( + "FileNewFoo", + None, + "New Foo", + None, + "Create new foo", + self.on_menu_file_new_generic, + ), + ( + "FileNewGoo", + None, + "_New Goo", + None, + "Create new goo", + self.on_menu_file_new_generic, + ), + ] + ) action_filequit = Gtk.Action("FileQuit", None, None, Gtk.STOCK_QUIT) action_filequit.connect("activate", self.on_menu_file_quit) action_group.add_action(action_filequit) def add_edit_menu_actions(self, action_group): - action_group.add_actions([ - ("EditMenu", None, "Edit"), - ("EditCopy", Gtk.STOCK_COPY, None, None, None, - self.on_menu_others), - ("EditPaste", Gtk.STOCK_PASTE, None, None, None, - self.on_menu_others), - ("EditSomething", None, "Something", "S", None, - self.on_menu_others) - ]) + action_group.add_actions( + [ + ("EditMenu", None, "Edit"), + ("EditCopy", Gtk.STOCK_COPY, None, None, None, self.on_menu_others), + ("EditPaste", Gtk.STOCK_PASTE, None, None, None, self.on_menu_others), + ( + "EditSomething", + None, + "Something", + "S", + None, + self.on_menu_others, + ), + ] + ) def add_choices_menu_actions(self, action_group): - action_group.add_action(Gtk.Action("ChoicesMenu", "Choices", None, - None)) + action_group.add_action(Gtk.Action("ChoicesMenu", "Choices", None, None)) - action_group.add_radio_actions([ - ("ChoiceOne", None, "One", None, None, 1), - ("ChoiceTwo", None, "Two", None, None, 2) - ], 1, self.on_menu_choices_changed) + action_group.add_radio_actions( + [ + ("ChoiceOne", None, "One", None, None, 1), + ("ChoiceTwo", None, "Two", None, None, 2), + ], + 1, + self.on_menu_choices_changed, + ) three = Gtk.ToggleAction("ChoiceThree", "Three", None, None) three.connect("toggled", self.on_menu_choices_toggled) @@ -153,9 +178,10 @@ def on_button_press_event(self, widget, event): # Check if right mouse button was preseed if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 3: self.popup.popup(None, None, None, None, event.button, event.time) - return True # event has been handled + return True # event has been handled + -window = MenuExampleWindow() +window = MenuExampleWindow() window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main() diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index f1aa86a..3a65d91 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class MessageDialogWindow(Gtk.Window): +class MessageDialogWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="MessageDialog Example") @@ -27,30 +28,48 @@ def __init__(self): box.add(button4) def on_info_clicked(self, widget): - dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO, - Gtk.ButtonsType.OK, "This is an INFO MessageDialog") + dialog = Gtk.MessageDialog( + self, + 0, + Gtk.MessageType.INFO, + Gtk.ButtonsType.OK, + "This is an INFO MessageDialog", + ) dialog.format_secondary_text( - "And this is the secondary text that explains things.") + "And this is the secondary text that explains things." + ) dialog.run() print("INFO dialog closed") dialog.destroy() def on_error_clicked(self, widget): - dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.ERROR, - Gtk.ButtonsType.CANCEL, "This is an ERROR MessageDialog") + dialog = Gtk.MessageDialog( + self, + 0, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CANCEL, + "This is an ERROR MessageDialog", + ) dialog.format_secondary_text( - "And this is the secondary text that explains things.") + "And this is the secondary text that explains things." + ) dialog.run() print("ERROR dialog closed") dialog.destroy() def on_warn_clicked(self, widget): - dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, - Gtk.ButtonsType.OK_CANCEL, "This is an WARNING MessageDialog") + dialog = Gtk.MessageDialog( + self, + 0, + Gtk.MessageType.WARNING, + Gtk.ButtonsType.OK_CANCEL, + "This is an WARNING MessageDialog", + ) dialog.format_secondary_text( - "And this is the secondary text that explains things.") + "And this is the secondary text that explains things." + ) response = dialog.run() if response == Gtk.ResponseType.OK: print("WARN dialog closed by clicking OK button") @@ -60,10 +79,16 @@ def on_warn_clicked(self, widget): dialog.destroy() def on_question_clicked(self, widget): - dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION, - Gtk.ButtonsType.YES_NO, "This is an QUESTION MessageDialog") + dialog = Gtk.MessageDialog( + self, + 0, + Gtk.MessageType.QUESTION, + Gtk.ButtonsType.YES_NO, + "This is an QUESTION MessageDialog", + ) dialog.format_secondary_text( - "And this is the secondary text that explains things.") + "And this is the secondary text that explains things." + ) response = dialog.run() if response == Gtk.ResponseType.YES: print("QUESTION dialog closed by clicking YES button") @@ -72,6 +97,7 @@ def on_question_clicked(self, widget): dialog.destroy() + win = MessageDialogWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/notebook_plain_example.py b/examples/notebook_plain_example.py index 0586cac..03e8a48 100644 --- a/examples/notebook_plain_example.py +++ b/examples/notebook_plain_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class MyWindow(Gtk.Window): +class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Simple Notebook Example") self.set_border_width(3) @@ -13,20 +14,17 @@ def __init__(self): self.page1 = Gtk.Box() self.page1.set_border_width(10) - self.page1.add(Gtk.Label('Default Page!')) - self.notebook.append_page(self.page1, Gtk.Label('Plain Title')) + self.page1.add(Gtk.Label("Default Page!")) + self.notebook.append_page(self.page1, Gtk.Label("Plain Title")) self.page2 = Gtk.Box() self.page2.set_border_width(10) - self.page2.add(Gtk.Label('A page with an image for a Title.')) + self.page2.add(Gtk.Label("A page with an image for a Title.")) self.notebook.append_page( - self.page2, - Gtk.Image.new_from_icon_name( - "help-about", - Gtk.IconSize.MENU - ) + self.page2, Gtk.Image.new_from_icon_name("help-about", Gtk.IconSize.MENU) ) + win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/popover_advanced_example.py b/examples/popover_advanced_example.py index 4fdbc54..ac18ca6 100644 --- a/examples/popover_advanced_example.py +++ b/examples/popover_advanced_example.py @@ -1,7 +1,8 @@ import sys import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gio, Gtk # This would typically be its own file diff --git a/examples/popover_example.py b/examples/popover_example.py index 8391a95..39159a3 100644 --- a/examples/popover_example.py +++ b/examples/popover_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class PopoverWindow(Gtk.Window): +class PopoverWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Popover Demo") self.set_border_width(10) @@ -28,7 +29,7 @@ def on_click_me_clicked(self, button): self.popover.popup() def on_open_clicked(self, button): - print("\"Open\" button was clicked") + print('"Open" button was clicked') win = PopoverWindow() diff --git a/examples/progressbar_example.py b/examples/progressbar_example.py index 3f9c67c..566e8f1 100644 --- a/examples/progressbar_example.py +++ b/examples/progressbar_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib -class ProgressBarWindow(Gtk.Window): +class ProgressBarWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ProgressBar Demo") self.set_border_width(10) @@ -67,6 +68,7 @@ def on_timeout(self, user_data): # continues to get called return True + win = ProgressBarWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/radiobutton_example.py b/examples/radiobutton_example.py index 6b077cc..9de5b63 100644 --- a/examples/radiobutton_example.py +++ b/examples/radiobutton_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class RadioButtonWindow(Gtk.Window): +class RadioButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="RadioButton Demo") self.set_border_width(10) @@ -20,8 +21,7 @@ def __init__(self): button2.connect("toggled", self.on_button_toggled, "2") hbox.pack_start(button2, False, False, 0) - button3 = Gtk.RadioButton.new_with_mnemonic_from_widget(button1, - "B_utton 3") + button3 = Gtk.RadioButton.new_with_mnemonic_from_widget(button1, "B_utton 3") button3.connect("toggled", self.on_button_toggled, "3") hbox.pack_start(button3, False, False, 0) @@ -32,6 +32,7 @@ def on_button_toggled(self, button, name): state = "off" print("Button", name, "was turned", state) + win = RadioButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/simple_example.py b/examples/simple_example.py index 0f71021..ea1e297 100644 --- a/examples/simple_example.py +++ b/examples/simple_example.py @@ -1,5 +1,6 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk win = Gtk.Window() diff --git a/examples/spinbutton_example.py b/examples/spinbutton_example.py index 90297e1..ac5e8bc 100644 --- a/examples/spinbutton_example.py +++ b/examples/spinbutton_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class SpinButtonWindow(Gtk.Window): +class SpinButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="SpinButton Demo") self.set_border_width(10) @@ -34,6 +35,7 @@ def on_ifvalid_toggled(self, button): policy = Gtk.SpinButtonUpdatePolicy.ALWAYS self.spinbutton.set_update_policy(policy) + win = SpinButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/spinner_example.py b/examples/spinner_example.py index 06ac746..331e385 100644 --- a/examples/spinner_example.py +++ b/examples/spinner_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class SpinnerAnimation(Gtk.Window): +class SpinnerAnimation(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Spinner") @@ -37,4 +38,3 @@ def on_button_toggled(self, button): myspinner = SpinnerAnimation() Gtk.main() - diff --git a/examples/spinner_ext_example.py b/examples/spinner_ext_example.py index d67d43a..23b6102 100644 --- a/examples/spinner_ext_example.py +++ b/examples/spinner_ext_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib -class SpinnerWindow(Gtk.Window): +class SpinnerWindow(Gtk.Window): def __init__(self, *args, **kwargs): Gtk.Window.__init__(self, title="Spinner Demo") self.set_border_width(10) @@ -18,7 +19,7 @@ def __init__(self, *args, **kwargs): mainBox.pack_start(self.label, True, True, 0) self.entry = Gtk.Entry() - self.entry.set_text('10') + self.entry.set_text("10") mainBox.pack_start(self.entry, True, True, 0) self.buttonStart = Gtk.Button("Start timer") @@ -39,7 +40,7 @@ def on_buttonStart_clicked(self, widget, *args): def on_buttonStop_clicked(self, widget, *args): """ Handles "clicked" event of buttonStop. """ - self.stop_timer('Stopped from button') + self.stop_timer("Stopped from button") def on_SpinnerWindow_destroy(self, widget, *args): """ Handles destroy event of main window. """ @@ -57,9 +58,9 @@ def on_timeout(self, *args, **kwargs): is recalculated based on the current time.""" self.counter -= 1 if self.counter <= 0: - self.stop_timer('Reached time out') + self.stop_timer("Reached time out") return False - self.label.set_label('Remaining: ' + str(int(self.counter / 4))) + self.label.set_label("Remaining: " + str(int(self.counter / 4))) return True def start_timer(self): @@ -68,7 +69,7 @@ def start_timer(self): self.buttonStop.set_sensitive(True) # time out will check every 250 miliseconds (1/4 of a second) self.counter = 4 * int(self.entry.get_text()) - self.label.set_label('Remaining: ' + str(int(self.counter / 4))) + self.label.set_label("Remaining: " + str(int(self.counter / 4))) self.spinner.start() self.timeout_id = GLib.timeout_add(250, self.on_timeout, None) @@ -82,6 +83,7 @@ def stop_timer(self, alabeltext): self.buttonStop.set_sensitive(False) self.label.set_label(alabeltext) + win = SpinnerWindow() win.show_all() Gtk.main() diff --git a/examples/switch_example.py b/examples/switch_example.py index 7d88aad..071674a 100644 --- a/examples/switch_example.py +++ b/examples/switch_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class SwitcherWindow(Gtk.Window): +class SwitcherWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Switch Demo") self.set_border_width(10) @@ -28,8 +29,8 @@ def on_switch_activated(self, switch, gparam): state = "off" print("Switch was turned", state) + win = SwitcherWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() - diff --git a/examples/textview_example.py b/examples/textview_example.py index 6f42f2a..e3df2b2 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -1,14 +1,23 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Pango -class SearchDialog(Gtk.Dialog): +class SearchDialog(Gtk.Dialog): def __init__(self, parent): - Gtk.Dialog.__init__(self, "Search", parent, - Gtk.DialogFlags.MODAL, buttons=( - Gtk.STOCK_FIND, Gtk.ResponseType.OK, - Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) + Gtk.Dialog.__init__( + self, + "Search", + parent, + Gtk.DialogFlags.MODAL, + buttons=( + Gtk.STOCK_FIND, + Gtk.ResponseType.OK, + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + ), + ) box = self.get_content_area() @@ -20,8 +29,8 @@ def __init__(self, parent): self.show_all() -class TextViewWindow(Gtk.Window): +class TextViewWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="TextView Example") @@ -51,10 +60,8 @@ def create_toolbar(self): toolbar.insert(button_underline, 2) button_bold.connect("clicked", self.on_button_clicked, self.tag_bold) - button_italic.connect("clicked", self.on_button_clicked, - self.tag_italic) - button_underline.connect("clicked", self.on_button_clicked, - self.tag_underline) + button_italic.connect("clicked", self.on_button_clicked, self.tag_italic) + button_underline.connect("clicked", self.on_button_clicked, self.tag_underline) toolbar.insert(Gtk.SeparatorToolItem(), 3) @@ -74,14 +81,18 @@ def create_toolbar(self): radio_justifyfill.set_icon_name("format-justify-fill-symbolic") toolbar.insert(radio_justifyfill, 7) - radio_justifyleft.connect("toggled", self.on_justify_toggled, - Gtk.Justification.LEFT) - radio_justifycenter.connect("toggled", self.on_justify_toggled, - Gtk.Justification.CENTER) - radio_justifyright.connect("toggled", self.on_justify_toggled, - Gtk.Justification.RIGHT) - radio_justifyfill.connect("toggled", self.on_justify_toggled, - Gtk.Justification.FILL) + radio_justifyleft.connect( + "toggled", self.on_justify_toggled, Gtk.Justification.LEFT + ) + radio_justifycenter.connect( + "toggled", self.on_justify_toggled, Gtk.Justification.CENTER + ) + radio_justifyright.connect( + "toggled", self.on_justify_toggled, Gtk.Justification.RIGHT + ) + radio_justifyfill.connect( + "toggled", self.on_justify_toggled, Gtk.Justification.FILL + ) toolbar.insert(Gtk.SeparatorToolItem(), 8) @@ -105,19 +116,19 @@ def create_textview(self): self.textview = Gtk.TextView() self.textbuffer = self.textview.get_buffer() - self.textbuffer.set_text("This is some text inside of a Gtk.TextView. " + self.textbuffer.set_text( + "This is some text inside of a Gtk.TextView. " + "Select text and click one of the buttons 'bold', 'italic', " - + "or 'underline' to modify the text accordingly.") + + "or 'underline' to modify the text accordingly." + ) scrolledwindow.add(self.textview) - self.tag_bold = self.textbuffer.create_tag("bold", - weight=Pango.Weight.BOLD) - self.tag_italic = self.textbuffer.create_tag("italic", - style=Pango.Style.ITALIC) - self.tag_underline = self.textbuffer.create_tag("underline", - underline=Pango.Underline.SINGLE) - self.tag_found = self.textbuffer.create_tag("found", - background="yellow") + self.tag_bold = self.textbuffer.create_tag("bold", weight=Pango.Weight.BOLD) + self.tag_italic = self.textbuffer.create_tag("italic", style=Pango.Style.ITALIC) + self.tag_underline = self.textbuffer.create_tag( + "underline", underline=Pango.Underline.SINGLE + ) + self.tag_found = self.textbuffer.create_tag("found", background="yellow") def create_buttons(self): check_editable = Gtk.CheckButton("Editable") @@ -128,29 +139,30 @@ def create_buttons(self): check_cursor = Gtk.CheckButton("Cursor Visible") check_cursor.set_active(True) check_editable.connect("toggled", self.on_cursor_toggled) - self.grid.attach_next_to(check_cursor, check_editable, - Gtk.PositionType.RIGHT, 1, 1) + self.grid.attach_next_to( + check_cursor, check_editable, Gtk.PositionType.RIGHT, 1, 1 + ) - radio_wrapnone = Gtk.RadioButton.new_with_label_from_widget(None, - "No Wrapping") + radio_wrapnone = Gtk.RadioButton.new_with_label_from_widget(None, "No Wrapping") self.grid.attach(radio_wrapnone, 0, 3, 1, 1) radio_wrapchar = Gtk.RadioButton.new_with_label_from_widget( - radio_wrapnone, "Character Wrapping") - self.grid.attach_next_to(radio_wrapchar, radio_wrapnone, - Gtk.PositionType.RIGHT, 1, 1) + radio_wrapnone, "Character Wrapping" + ) + self.grid.attach_next_to( + radio_wrapchar, radio_wrapnone, Gtk.PositionType.RIGHT, 1, 1 + ) radio_wrapword = Gtk.RadioButton.new_with_label_from_widget( - radio_wrapnone, "Word Wrapping") - self.grid.attach_next_to(radio_wrapword, radio_wrapchar, - Gtk.PositionType.RIGHT, 1, 1) + radio_wrapnone, "Word Wrapping" + ) + self.grid.attach_next_to( + radio_wrapword, radio_wrapchar, Gtk.PositionType.RIGHT, 1, 1 + ) - radio_wrapnone.connect("toggled", self.on_wrap_toggled, - Gtk.WrapMode.NONE) - radio_wrapchar.connect("toggled", self.on_wrap_toggled, - Gtk.WrapMode.CHAR) - radio_wrapword.connect("toggled", self.on_wrap_toggled, - Gtk.WrapMode.WORD) + radio_wrapnone.connect("toggled", self.on_wrap_toggled, Gtk.WrapMode.NONE) + radio_wrapchar.connect("toggled", self.on_wrap_toggled, Gtk.WrapMode.CHAR) + radio_wrapword.connect("toggled", self.on_wrap_toggled, Gtk.WrapMode.WORD) def on_button_clicked(self, widget, tag): bounds = self.textbuffer.get_selection_bounds() @@ -197,6 +209,7 @@ def search_and_mark(self, text, start): self.textbuffer.apply_tag(self.tag_found, match_start, match_end) self.search_and_mark(text, match_end) + win = TextViewWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/togglebutton_example.py b/examples/togglebutton_example.py index 1713609..34d1952 100644 --- a/examples/togglebutton_example.py +++ b/examples/togglebutton_example.py @@ -1,9 +1,10 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -class ToggleButtonWindow(Gtk.Window): +class ToggleButtonWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="ToggleButton Demo") self.set_border_width(10) @@ -27,6 +28,7 @@ def on_button_toggled(self, button, name): state = "off" print("Button", name, "was turned", state) + win = ToggleButtonWindow() win.connect("destroy", Gtk.main_quit) win.show_all() diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index 9d63c42..c9193b6 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -1,81 +1,93 @@ import gi -gi.require_version('Gtk', '3.0') + +gi.require_version("Gtk", "3.0") from gi.repository import Gtk -#list of tuples for each software, containing the software name, initial release, and main programming languages used -software_list = [("Firefox", 2002, "C++"), - ("Eclipse", 2004, "Java" ), - ("Pitivi", 2004, "Python"), - ("Netbeans", 1996, "Java"), - ("Chrome", 2008, "C++"), - ("Filezilla", 2001, "C++"), - ("Bazaar", 2005, "Python"), - ("Git", 2005, "C"), - ("Linux Kernel", 1991, "C"), - ("GCC", 1987, "C"), - ("Frostwire", 2004, "Java")] +# list of tuples for each software, containing the software name, initial release, and main programming languages used +software_list = [ + ("Firefox", 2002, "C++"), + ("Eclipse", 2004, "Java"), + ("Pitivi", 2004, "Python"), + ("Netbeans", 1996, "Java"), + ("Chrome", 2008, "C++"), + ("Filezilla", 2001, "C++"), + ("Bazaar", 2005, "Python"), + ("Git", 2005, "C"), + ("Linux Kernel", 1991, "C"), + ("GCC", 1987, "C"), + ("Frostwire", 2004, "Java"), +] -class TreeViewFilterWindow(Gtk.Window): +class TreeViewFilterWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Treeview Filter Demo") self.set_border_width(10) - #Setting up the self.grid in which the elements are to be positionned + # Setting up the self.grid in which the elements are to be positionned self.grid = Gtk.Grid() self.grid.set_column_homogeneous(True) self.grid.set_row_homogeneous(True) self.add(self.grid) - #Creating the ListStore model + # Creating the ListStore model self.software_liststore = Gtk.ListStore(str, int, str) for software_ref in software_list: self.software_liststore.append(list(software_ref)) self.current_filter_language = None - #Creating the filter, feeding it with the liststore model + # Creating the filter, feeding it with the liststore model self.language_filter = self.software_liststore.filter_new() - #setting the filter function, note that we're not using the + # setting the filter function, note that we're not using the self.language_filter.set_visible_func(self.language_filter_func) - #creating the treeview, making it use the filter as a model, and adding the columns + # creating the treeview, making it use the filter as a model, and adding the columns self.treeview = Gtk.TreeView.new_with_model(self.language_filter) - for i, column_title in enumerate(["Software", "Release Year", "Programming Language"]): + for i, column_title in enumerate( + ["Software", "Release Year", "Programming Language"] + ): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) self.treeview.append_column(column) - #creating buttons to filter by programming language, and setting up their events + # creating buttons to filter by programming language, and setting up their events self.buttons = list() for prog_language in ["Java", "C", "C++", "Python", "None"]: button = Gtk.Button(prog_language) self.buttons.append(button) button.connect("clicked", self.on_selection_button_clicked) - #setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row + # setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row self.scrollable_treelist = Gtk.ScrolledWindow() self.scrollable_treelist.set_vexpand(True) self.grid.attach(self.scrollable_treelist, 0, 0, 8, 10) - self.grid.attach_next_to(self.buttons[0], self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1) + self.grid.attach_next_to( + self.buttons[0], self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1 + ) for i, button in enumerate(self.buttons[1:]): - self.grid.attach_next_to(button, self.buttons[i], Gtk.PositionType.RIGHT, 1, 1) + self.grid.attach_next_to( + button, self.buttons[i], Gtk.PositionType.RIGHT, 1, 1 + ) self.scrollable_treelist.add(self.treeview) self.show_all() def language_filter_func(self, model, iter, data): """Tests if the language in the row is the one in the filter""" - if self.current_filter_language is None or self.current_filter_language == "None": + if ( + self.current_filter_language is None + or self.current_filter_language == "None" + ): return True else: return model[iter][2] == self.current_filter_language def on_selection_button_clicked(self, widget): """Called on any of the button clicks""" - #we set the current language filter to the button's label + # we set the current language filter to the button's label self.current_filter_language = widget.get_label() print("%s language selected!" % self.current_filter_language) - #we update the filter, which updates in turn the view + # we update the filter, which updates in turn the view self.language_filter.refilter() diff --git a/source/builder.txt b/source/builder.txt index 633d257..4d4c9a2 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -112,7 +112,7 @@ In our example the last code snippet could be rewritten as: .. literalinclude:: ../examples/builder_example.py :linenos: - :lines: 3-11,14 + :lines: 4-12,17 Example ------- diff --git a/source/conf.py b/source/conf.py index f804df4..6fcb64c 100644 --- a/source/conf.py +++ b/source/conf.py @@ -16,84 +16,84 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) +# sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +# needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx'] +extensions = ["sphinx.ext.todo", "sphinx.ext.intersphinx"] intersphinx_mapping = { - 'glib': ('https://lazka.github.io/pgi-docs/GLib-2.0', None), - 'gobject': ('https://lazka.github.io/pgi-docs/GObject-2.0', None), - 'gio': ('https://lazka.github.io/pgi-docs/Gio-2.0', None), - 'gtk': ('https://lazka.github.io/pgi-docs/Gtk-3.0', None), + "glib": ("https://lazka.github.io/pgi-docs/GLib-2.0", None), + "gobject": ("https://lazka.github.io/pgi-docs/GObject-2.0", None), + "gio": ("https://lazka.github.io/pgi-docs/Gio-2.0", None), + "gtk": ("https://lazka.github.io/pgi-docs/Gtk-3.0", None), } # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix of source filenames. -source_suffix = '.txt' +source_suffix = ".txt" # The encoding of source files. -#source_encoding = 'utf-8-sig' +# source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = u'Python GTK+ 3 Tutorial' -copyright = u'GNU Free Documentation License 1.3' +project = u"Python GTK+ 3 Tutorial" +copyright = u"GNU Free Documentation License 1.3" -locale_dirs = ["../translations/locale",] +locale_dirs = ["../translations/locale"] # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '3.4' +version = "3.4" # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -#language = None +# language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: -#today = '' +# today = '' # Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None +# default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True +# add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). -#add_module_names = True +# add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. -#show_authors = False +# show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'default' +pygments_style = "default" # A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] +# modindex_common_prefix = [] primary_domain = "py" @@ -101,119 +101,124 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx_rtd_theme' +html_theme = "sphinx_rtd_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} +# html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] +# html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -#html_title = None +# html_title = None # A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +# html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = None +# html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' +# html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. -#html_use_smartypants = True +# html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. -#html_additional_pages = {} +# html_additional_pages = {} # If false, no module index is generated. -#html_domain_indices = True +# html_domain_indices = True # If false, no index is generated. -#html_use_index = True +# html_use_index = True # If true, the index is split into individual pages for each letter. -#html_split_index = False +# html_split_index = False # If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True +# html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True +# html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True +# html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. -#html_use_opensearch = '' +# html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None +# html_file_suffix = None # Output file base name for HTML help builder. -htmlhelp_basename = 'PyGObjectTutorialdoc' +htmlhelp_basename = "PyGObjectTutorialdoc" # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' +# latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' +# latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'PyGObjectTutorial.tex', u'The Python GTK+ 3 Tutorial', - u'Sebastian Pölsterl', 'manual'), + ( + "index", + "PyGObjectTutorial.tex", + u"The Python GTK+ 3 Tutorial", + u"Sebastian Pölsterl", + "manual", + ) ] # The name of an image file (relative to this directory) to place at the top of # the title page. -#latex_logo = None +# latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. -#latex_use_parts = False +# latex_use_parts = False # If true, show page references after internal links. -#latex_show_pagerefs = False +# latex_show_pagerefs = False # If true, show URL addresses after external links. -#latex_show_urls = False +# latex_show_urls = False # Additional stuff for the LaTeX preamble. -#latex_preamble = '' +# latex_preamble = '' # Documents to append as an appendix to all manuals. -#latex_appendices = [] +# latex_appendices = [] # If false, no module index is generated. -#latex_domain_indices = True +# latex_domain_indices = True # -- Options for manual page output -------------------------------------------- @@ -221,6 +226,11 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'pygobjecttutorial', u'PyGObject Tutorial Documentation', - [u'Sebastian Pölsterl'], 1) + ( + "index", + "pygobjecttutorial", + u"PyGObject Tutorial Documentation", + [u"Sebastian Pölsterl"], + 1, + ) ] diff --git a/source/introduction.txt b/source/introduction.txt index 336ad1a..0d68c32 100644 --- a/source/introduction.txt +++ b/source/introduction.txt @@ -17,7 +17,7 @@ This program will create an empty 200 x 200 pixel window. We will now explain each line of the example. .. literalinclude:: ../examples/simple_example.py - :lines: 1-3 + :lines: 1-4 In the beginning, we have to import the Gtk module to be able to access GTK+'s classes and functions. @@ -29,24 +29,24 @@ of the statement ``gi.require_version('Gtk', '3.0')``. The next line creates an empty window. .. literalinclude:: ../examples/simple_example.py - :lines: 5 + :lines: 6 Followed by connecting to the window's delete event to ensure that the application is terminated if we click on the *x* to close the window. .. literalinclude:: ../examples/simple_example.py - :lines: 6 + :lines: 7 In the next step we display the window. .. literalinclude:: ../examples/simple_example.py - :lines: 7 + :lines: 8 Finally, we start the GTK+ processing loop which we quit when the window is closed (see line 6). .. literalinclude:: ../examples/simple_example.py - :lines: 8 + :lines: 9 To run the program, open a terminal, change to the directory of the file, and enter:: @@ -67,24 +67,24 @@ This example differs from the simple example as we sub-class :class:`Gtk.Window` :class:`MyWindow` class. .. literalinclude:: ../examples/extended_example.py - :lines: 5 + :lines: 7 In the class's constructor we have to call the constructor of the super class. In addition, we tell it to set the value of the property `title` to `Hello World`. .. literalinclude:: ../examples/extended_example.py - :lines: 8 + :lines: 9 The next three lines are used to create a button widget, connect to its `clicked` signal and add it as child to the top-level window. .. literalinclude:: ../examples/extended_example.py - :lines: 10-12 + :lines: 11-13 Accordingly, the method :meth:`on_button_clicked` will be called if you click on the button. .. literalinclude:: ../examples/extended_example.py - :lines: 14-15 + :lines: 15-16 The last block, outside of the class, is very similar to the simple example above, but instead of creating an instance of the generic :class:`Gtk.Window` class, we create diff --git a/source/layout.txt b/source/layout.txt index f6ed332..f89352b 100644 --- a/source/layout.txt +++ b/source/layout.txt @@ -51,12 +51,12 @@ First, we create a horizontally orientated box container where 6 pixels are placed between children. This box becomes the child of the top-level window. .. literalinclude:: ../examples/layout_box_example.py - :lines: 10-11 + :lines: 11-12 Subsequently, we add two different buttons to the box container. .. literalinclude:: ../examples/layout_box_example.py - :lines: 13-19 + :lines: 14-20 While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to right, :meth:`Gtk.Box.pack_end` positions them from right to left. From db51eb661d5991f54f3b1dd0e8d7c934d32f9c06 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Fri, 23 Aug 2019 19:30:53 +0100 Subject: [PATCH 101/209] Replace showed off in text --- source/application.txt | 2 +- translations/locale/pt_BR/LC_MESSAGES/application.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/application.txt b/source/application.txt index ea15499..eca57b3 100644 --- a/source/application.txt +++ b/source/application.txt @@ -18,7 +18,7 @@ either be activated or have a state changed (if they contain state). The reason to use actions is to separate out the logic from the UI. For example this allows using a menubar on OSX and a gear menu on GNOME both simply referencing the name of an action. The main implementation of this you will -be using is :class:`Gio.SimpleAction` which will be showed off later. +be using is :class:`Gio.SimpleAction` which will be demonstrated later. Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` support properties to set an action name. diff --git a/translations/locale/pt_BR/LC_MESSAGES/application.po b/translations/locale/pt_BR/LC_MESSAGES/application.po index 4db9b70..2adfd51 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/application.po +++ b/translations/locale/pt_BR/LC_MESSAGES/application.po @@ -54,7 +54,7 @@ msgid "" "The reason to use actions is to separate out the logic from the UI. For " "example this allows using a menubar on OSX and a gear menu on GNOME both " "simply referencing the name of an action. The main implementation of this " -"you will be using is :class:`Gio.SimpleAction` which will be showed off " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " "later." msgstr "" "O motivo para usar ações é separar a lógica da interface do usuário. Por " From 14110958b9b7f2cc0d68f533792c825a2aa70360 Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Tue, 26 Nov 2019 14:38:39 -0300 Subject: [PATCH 102/209] Update URLs Use https instead http, update page in Pango docs, and update Sphinx website --- README.md | 2 +- examples/cellrenderertext_example.py | 2 +- examples/label_example.py | 2 +- examples/linkbutton_example.py | 2 +- source/label.txt | 4 ++-- source/menus.txt | 2 +- source/objects.txt | 2 +- source/textview.txt | 2 +- source/unicode.txt | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 10910a8..a854df6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The tutorial's web site is https://python-gtk-3-tutorial.readthedocs.io Dependencies ------------ -- Sphinx: http://sphinx.pocoo.org +- Sphinx: https://www.sphinx-doc.org Compile diff --git a/examples/cellrenderertext_example.py b/examples/cellrenderertext_example.py index 361d2c6..bdf3ce3 100644 --- a/examples/cellrenderertext_example.py +++ b/examples/cellrenderertext_example.py @@ -11,7 +11,7 @@ def __init__(self): self.set_default_size(200, 200) self.liststore = Gtk.ListStore(str, str) - self.liststore.append(["Fedora", "http://fedoraproject.org/"]) + self.liststore.append(["Fedora", "https://fedoraproject.org/"]) self.liststore.append(["Slackware", "http://www.slackware.com/"]) self.liststore.append(["Sidux", "http://sidux.com/"]) diff --git a/examples/label_example.py b/examples/label_example.py index b093fdd..701d58a 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -62,7 +62,7 @@ def __init__(self): label.set_markup( "Text can be small, big, " "bold, italic and even point to " - 'somewhere in the internets.' ) label.set_line_wrap(True) diff --git a/examples/linkbutton_example.py b/examples/linkbutton_example.py index c0be0c7..6414891 100644 --- a/examples/linkbutton_example.py +++ b/examples/linkbutton_example.py @@ -9,7 +9,7 @@ def __init__(self): Gtk.Window.__init__(self, title="LinkButton Demo") self.set_border_width(10) - button = Gtk.LinkButton("http://www.gtk.org", "Visit GTK+ Homepage") + button = Gtk.LinkButton("https://www.gtk.org", "Visit GTK+ Homepage") self.add(button) diff --git a/source/label.txt b/source/label.txt index 51ca8a3..f06d317 100644 --- a/source/label.txt +++ b/source/label.txt @@ -31,7 +31,7 @@ on the link. .. code-block:: python - label.set_markup("Go to GTK+ website for more") Labels may contain *mnemonics*. Mnemonics are underlined characters in the @@ -52,4 +52,4 @@ Example .. literalinclude:: ../examples/label_example.py :linenos: -.. [#pango] Pango Markup Syntax, http://developer.gnome.org/pango/stable/PangoMarkupFormat.html +.. [#pango] Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup.html diff --git a/source/menus.txt b/source/menus.txt index 897f8c7..7b890d2 100644 --- a/source/menus.txt +++ b/source/menus.txt @@ -59,7 +59,7 @@ UI Manager ---------- :class:`Gtk.UIManager` provides an easy way of creating menus and toolbars using -an `XML-like description `_. +an `XML-like description `_. First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good idea to diff --git a/source/objects.txt b/source/objects.txt index 0a0ee64..730caca 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -407,4 +407,4 @@ API The property is readable and writable. -.. _Glade: http://glade.gnome.org/ +.. _Glade: https://glade.gnome.org/ diff --git a/source/textview.txt b/source/textview.txt index d9bd961..28ab6f2 100644 --- a/source/textview.txt +++ b/source/textview.txt @@ -120,4 +120,4 @@ Example :linenos: -.. _graphemes: http://developer.gnome.org/pango/stable/pango-Text-Processing.html#pango-get-log-attrs +.. _graphemes: https://developer.gnome.org/pango/stable/pango-Text-Processing.html#pango-get-log-attrs diff --git a/source/unicode.txt b/source/unicode.txt index a8bbc6d..b829e68 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -173,5 +173,5 @@ when trying to work with Unicode. The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x. -`UTF-8 encoding table and Unicode characters `_ contains +`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 encoding. From 68daeeee9b4a307fce474c9183ae00063b5d0274 Mon Sep 17 00:00:00 2001 From: Matheus <27972099+MatheusNtg@users.noreply.github.com> Date: Fri, 24 Jan 2020 03:00:11 +0000 Subject: [PATCH 103/209] Fixed some translation errors --- translations/locale/pt_BR/LC_MESSAGES/install.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/locale/pt_BR/LC_MESSAGES/install.po b/translations/locale/pt_BR/LC_MESSAGES/install.po index ea642d0..9a51df5 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/install.po +++ b/translations/locale/pt_BR/LC_MESSAGES/install.po @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -30,7 +30,7 @@ msgid "" "exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in " "your application, use `PyGTK`_, instead." msgstr "" -"O primeiro passo antes de começarmos com a codificação atual consiste em " +"O primeiro passo antes de começarmos com a codificação de fato consiste em " "configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " "que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " "como o GTK+, dentro do Python. Ele suporta exclusivamente o GTK+ versão 3 ou " From 5042fea77a64a52328cefafb5489ca3fe7043986 Mon Sep 17 00:00:00 2001 From: Fornost461 Date: Sun, 30 Dec 2018 12:29:23 +0100 Subject: [PATCH 104/209] Minor fixes (consistency, punctuation, grammar) Closes #154 --- source/unicode.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/unicode.txt b/source/unicode.txt index b829e68..c8d05e9 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -6,7 +6,7 @@ and GTK+ and discusses common errors that arise when working with strings. Definitions ----------- -Conceptional, a string is a list of characters such as +Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. **Characters** are abstract representations and their meaning depends on the language and context they are used in. The Unicode standard describes how characters are represented by **code points**. @@ -16,7 +16,7 @@ numbers in the range from 0 to 0x10FFFF. As mentioned earlier, the representation of a string as a list of code points is abstract. In order to convert this abstract representation into a sequence -of bytes the Unicode string must be **encoded**. The simplest form of encoding +of bytes, the Unicode string must be **encoded**. The simplest form of encoding is ASCII and is performed as follows: 1. If the code point is < 128, each byte is the same as the value of the code @@ -126,7 +126,7 @@ Python 3.x's Unicode support Since Python 3.0, all strings are stored as Unicode in an instance of the :class:`str` type. *Encoded* strings on the other hand are represented as binary data in the form of instances of the :class:`bytes` type. -Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers to +Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`. From e8b63beb46cdcdffe9be6a07bb6d57cea79c5406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 13 Apr 2020 16:21:31 +0200 Subject: [PATCH 105/209] Update URL to Python documentation --- source/unicode.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/unicode.txt b/source/unicode.txt index c8d05e9..00cf64c 100644 --- a/source/unicode.txt +++ b/source/unicode.txt @@ -107,7 +107,7 @@ return a :class:`str` instance. Accordingly, ``txt`` and ``unicode_string`` are *not* equal. This is especially important if you want to internationalize your -program using `gettext `_. You +program using `gettext `_. You have to make sure that gettext will return UTF-8 encoded 8-bit strings for all languages. In general it is recommended to not use :class:`unicode` objects in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects since @@ -163,10 +163,10 @@ as instances of :class:`str` only:: References ---------- -`What's new in Python 3.0 `_ +`What's new in Python 3.0 `_ describes the new concepts that clearly distinguish between text and data. -The `Unicode HOWTO `_ discusses Python 2.x’s +The `Unicode HOWTO `_ discusses Python 2.x’s support for Unicode, and explains various problems that people commonly encounter when trying to work with Unicode. From 03264ebad9869021625009784fb68d3054492425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 13 Apr 2020 18:14:04 +0200 Subject: [PATCH 106/209] Add a single POT file and script to combine/split translations --- translations/LINGUAS | 2 + translations/Makefile | 28 + translations/PythonGTK3Tutorial.pot | 330 ++ translations/README.md | 10 + translations/po/pt_BR.po | 5528 +++++++++++++++++++++++++++ 5 files changed, 5898 insertions(+) create mode 100644 translations/LINGUAS create mode 100644 translations/Makefile create mode 100644 translations/PythonGTK3Tutorial.pot create mode 100644 translations/README.md create mode 100644 translations/po/pt_BR.po diff --git a/translations/LINGUAS b/translations/LINGUAS new file mode 100644 index 0000000..d193efc --- /dev/null +++ b/translations/LINGUAS @@ -0,0 +1,2 @@ +# please keep this list sorted alphabetically +pt_BR diff --git a/translations/Makefile b/translations/Makefile new file mode 100644 index 0000000..2080721 --- /dev/null +++ b/translations/Makefile @@ -0,0 +1,28 @@ +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = PythonGTK3Tutorial +SOURCEDIR = ../source +BUILDDIR = ../build +MERGEDDIR = po +LOCALEDIR = locale + +PO_LINGUAS=$(shell grep -v "^\#" ./LINGUAS) +SOURCE_FILES=$(basename $(notdir $(wildcard $(SOURCEDIR)/*.txt))) + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +gettext: + @$(SPHINXBUILD) -M "gettext" "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +$(SPHINXPROJ).pot: gettext + msgcat -u $(wildcard $(BUILDDIR)/gettext/*.pot) > $(SPHINXPROJ).pot + +split-po: + for lang in "$(PO_LINGUAS)"; do \ + echo "$$lang:"; \ + mkdir -p "$(LOCALEDIR)/$$lang/LC_MESSAGES"; \ + for src in $(SOURCE_FILES); do \ + msggrep -N "../$(SOURCEDIR)/$$src.txt" "$(MERGEDDIR)/$$lang.po" > "$(LOCALEDIR)/$$lang/LC_MESSAGES/$$src.po"; \ + done; \ + done diff --git a/translations/PythonGTK3Tutorial.pot b/translations/PythonGTK3Tutorial.pot new file mode 100644 index 0000000..febc19a --- /dev/null +++ b/translations/PythonGTK3Tutorial.pot @@ -0,0 +1,330 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# iconview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# layout.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# gallery.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# button_widgets.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# index.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# spinner.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# layout-table.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# combobox.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# unicode.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# builder.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# entry.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# basics.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# clipboard.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# cellrenderers.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# menus.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# textview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# label.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# treeview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# dialogs.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# install.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# popover.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# drag_and_drop.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# all.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# introduction.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# objects.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# progressbar.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# application.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." +msgstr "" + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." +msgstr "" + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have to " +"make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts " +"that clearly distinguish between text and data." +msgstr "" + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ discusses " +"Python 2.x’s support for Unicode, and explains various problems that people " +"commonly encounter when trying to work with Unicode." +msgstr "" diff --git a/translations/README.md b/translations/README.md new file mode 100644 index 0000000..e12e007 --- /dev/null +++ b/translations/README.md @@ -0,0 +1,10 @@ +Translations +============ + +- sphinx expects one PO file per document, but [Damned Lies](https://l10n.gnome.org/) +expects a single file. +- The file `PythonGTK3Tutorial.pot` contains all messages from all documents. +- Translations are listed in `LINGUAS` and the corresponding translations + reside in the `po` directory (one PO file per language). +- Executing `make split-po` will take the single-file PO and split it into individual + documents for sphinx to process. diff --git a/translations/po/pt_BR.po b/translations/po/pt_BR.po new file mode 100644 index 0000000..376947c --- /dev/null +++ b/translations/po/pt_BR.po @@ -0,0 +1,5528 @@ +# #-#-#-#-# application.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# basics.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# builder.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# button_widgets.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# cellrenderers.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# clipboard.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# combobox.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# dialogs.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# drag_and_drop.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# entry.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# gallery.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# iconview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# index.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# install.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# introduction.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# label.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# layout-table.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# layout.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# menus.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# objects.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# popover.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# progressbar.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# spinner.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# stock.po (Python GTK+ 3 Tutorial 3.0) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 +# Tutorial package. +# FIRST AUTHOR , 2018. +# +# #-#-#-#-# textview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# treeview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# unicode.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# application.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 05:32-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# basics.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 22:29-0300\n" +"PO-Revision-Date: 2018-04-11 22:41-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# builder.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 22:50-0300\n" +"PO-Revision-Date: 2018-04-11 22:57-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# button_widgets.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 06:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# cellrenderers.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 06:37-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# clipboard.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 03:57-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# combobox.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:07-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# dialogs.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 14:26-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# drag_and_drop.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 04:04-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# entry.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 06:03-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# gallery.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 18:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/pygobject-" +"tutorial/teams/85788/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"#-#-#-#-# iconview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:19-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# index.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-27 18:50-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# install.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Matheus Rodrigues \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# introduction.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-29 00:54-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# label.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-01 04:29-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# layout-table.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 06:33-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# layout.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-30 02:36-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# menus.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-06 06:03-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# objects.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-05 18:20-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# popover.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-11 23:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:29-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# progressbar.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:19-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# spinner.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:35-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# stock.po (Python GTK+ 3 Tutorial 3.0) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-10 09:47+0000\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.3\n" +"Last-Translator: Tomaz Cunha \n" +"Language-Team: \n" +"Language: pt_BR\n" +"X-Generator: Poedit 1.8.11\n" +"#-#-#-#-# textview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 11:32-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# treeview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-04 04:43-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"#-#-#-#-# unicode.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-30 01:06-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Tomaz Cunha \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "Aplicação" + +#: ../../source/application.txt:6 +msgid "" +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." +msgstr "" +":class:`Gtk.Application` abrange muitas tarefas repetitivas que um " +"aplicativo moderno precisa, como manipular várias instâncias, ativação do D-" +"Bus, abertura de arquivos, análise de linha de comando, inicialização/" +"desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." + +#: ../../source/application.txt:14 +msgid "" +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." +msgstr "" +":class:`Gio.Action` é uma maneira de expor qualquer tarefa que seu " +"aplicativo ou widget fizer por um nome. Essas ações podem ser desabilitadas/" +"habilitadas no tempo de execução e podem ser ativadas ou ter um estado " +"alterado (se elas contiverem estado)." + +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." +msgstr "" +"O motivo para usar ações é separar a lógica da interface do usuário. Por " +"exemplo, isso permite usar uma barra de menu no OSX e um menu de engrenagem " +"no GNOME, simplesmente referenciando o nome de uma ação. A principal " +"implementação que você estará usando é :class:`Gio.SimpleAction` que será " +"mostrado mais tarde." + +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." +msgstr "" +"Muitas classes, como :class:`Gio.MenuItem` e :class:`Gtk.ModelButton` " +"suportam propriedades para definir um nome de ação." + +#: ../../source/application.txt:26 +msgid "" +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." +msgstr "" +"Estas ações podem ser agrupadas em um :class:`Gio.ActionGroup` e quando " +"esses grupos são adicionados a um widget com :meth:`Gtk.Widget." +"insert_action_group()`, eles ganharão um prefixo. Tal como \"win\" quando " +"adicionado a um :class:`Gtk.ApplicationWindow`. Você usará o nome completo " +"da ação ao fazer referência a ele, como \"app.about\", mas ao criar a ação, " +"ela ficará \"about\" até ser adicionada ao aplicativo." + +#: ../../source/application.txt:32 +msgid "" +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"add_accelerator()`." +msgstr "" +"Você também pode facilmente criar keybindings para ações definindo a " +"propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." +"Application.add_accelerator()`." + +#: ../../source/application.txt:38 +msgid "" +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." +msgstr "" +"Seus menus devem ser definidos em XML usando :class:`Gio.Menu` e referenciam " +"as ações mencionadas anteriormente que você definiu. :class:`Gtk." +"Application` permite que você defina um menu via :meth:`Gtk.Application." +"set_app_menu()` ou :meth:`Gtk.Application.set_menubar()`. Se você faz uso " +"de :class:`Gio.Resource` isto pode usar automaticamente o menu correto " +"baseado na plataforma, caso contrário você pode configurá-los manualmente. " +"Um exemplo detalhado é mostrado abaixo." + +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "Linha de Comando" + +#: ../../source/application.txt:48 +msgid "" +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." +msgstr "" +"Ao criar seu aplicativo, ele recebe uma propriedade de flag de :class:`Gio." +"ApplicationFlags`. Usando isso, você pode permitir que ele manipule tudo " +"sozinho ou tenha um comportamento mais personalizado." + +#: ../../source/application.txt:51 +msgid "" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." +msgstr "" +"Você pode usar o `HANDLES_COMMAND_LINE` para permitir um comportamento " +"customizado em :meth:`Gio.Application.do_command_line()`. Em combinação com :" +"meth:`Gio.Application.add_main_option()` para adicionar opções " +"personalizadas." + +#: ../../source/application.txt:54 +msgid "" +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." +msgstr "" +"Usar `HANDLES_OPEN` fará o trabalho de simplesmente pegar argumentos de " +"arquivo para você e permitir que você os manipule em :meth:`Gio.Application." +"do_open()`." + +#: ../../source/application.txt:57 +msgid "" +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." +msgstr "" +"Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " +"existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." + +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "" + +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "" + +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "" + +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "" + +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "Noções básicas" + +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "Esta seção apresentará alguns dos aspectos mais importantes do GTK+." + +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "Loop principal e sinais" + +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." +msgstr "" +"Como a maioria dos toolkits GUI, o GTK+ usa um modelo de programação " +"orientada a eventos. Quando o usuário não está fazendo nada, o GTK+ fica no " +"loop principal e aguarda a entrada. Se o usuário executar alguma ação - " +"digamos, um clique do mouse - o loop principal \"acorda\" e entrega um " +"evento para o GTK+." + +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." +msgstr "" +"Quando widgets recebem um evento, eles frequentemente emitem um ou mais " +"sinais. Sinais notificam seu programa que \"algo interessante aconteceu\" " +"invocando funções que você conectou ao sinal. Tais funções são comumente " +"conhecidas como *callbacks*. Quando seus retornos de chamada são invocados, " +"você normalmente toma algumas ações - por exemplo, quando um botão Abrir é " +"clicado, você pode exibir uma caixa de diálogo de seleção de arquivos. " +"Depois que um retorno de chamada terminar, o GTK+ retornará ao loop " +"principal e aguardará mais entrada do usuário." + +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "Um exemplo genérico é:" + +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." +msgstr "" +"Em primeiro lugar, *widget* é uma instância de um widget que criamos " +"anteriormente. Em seguida, o evento em que estamos interessados. Cada widget " +"tem seus próprios eventos específicos que podem ocorrer. Por exemplo, se " +"você tem um botão, geralmente deseja se conectar ao evento \"clicado\". Isso " +"significa que quando o botão é clicado, o sinal é emitido. Em terceiro " +"lugar, o argumento *callback* é o nome da função de retorno de chamada. Ele " +"contém o código que é executado quando os sinais do tipo especificado são " +"emitidos. Finalmente, o argumento *data* inclui todos os dados que devem ser " +"passados quando o sinal é emitido. No entanto, esse argumento é " +"completamente opcional e pode ser deixado de fora se não for necessário." + +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." +msgstr "" +"A função retorna um número que identifica esse par de retorno de chamada " +"específico. É necessário desconectar de um sinal de modo que a função de " +"retorno de chamada não seja chamada durante qualquer emissão futura ou atual " +"do sinal ao qual está conectada." + +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" +msgstr "" +"Se você perdeu o \"handler_id\" por algum motivo (por exemplo, os " +"manipuladores foram instalados usando :func:`Gtk.Builder.connect_signals`), " +"você ainda pode desconectar um callback específico usando a função :func:" +"`disconnect_by_func`:" + +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted an object is destroyed, so when a user requests that a " +"toplevel window is closed, the default handler for this signal destroys the " +"window, but does not terminate the application. Connecting the \"destroy\" " +"signal of the top-level window to the function :func:`Gtk.main_quit` will " +"result in the desired behaviour." +msgstr "" +"Os aplicativos devem se conectar ao sinal \"destroy\" da janela de nível " +"superior. É emitido um objeto é destruído, portanto, quando um usuário " +"solicita que uma janela de nível superior é fechada, o manipulador padrão " +"para este sinal destrói a janela, mas não finaliza o aplicativo. Conectar o " +"sinal \"destroy\" da janela de nível superior à função :func:`Gtk.main_quit` " +"resultará no comportamento desejado." + +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." +msgstr "" +"Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" +"`Gtk.main`." + +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" +msgstr "" +"Propriedades descrevem a configuração e o estado dos widgets. Quanto aos " +"sinais, cada widget tem seu próprio conjunto particular de propriedades. Por " +"exemplo, um botão tem a propriedade \"label\", que contém o texto do widget " +"de etiqueta dentro do botão. Você pode especificar o nome e o valor de " +"qualquer número de propriedades como argumentos de palavras-chave ao criar " +"uma instância de um widget. Para criar um rótulo alinhado à direita com o " +"texto \"Hello World\" e um ângulo de 25 graus, use:" + +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "que é equivalente a" + +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." +msgstr "" +"Em vez de usar getters e setters, você também pode obter e definir as " +"propriedades do gobject através da propriedade \"props\", como ``widget." +"props.prop_name = value``. Isto é equivalente ao mais detalhado ``widget." +"get_property(\"prop-name\")`` e ``widget.set_property(\"prop-name\", " +"value)``." + +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" +msgstr "" +"Para ver quais propriedades estão disponíveis para um widget na versão em " +"execução do GTK, você pode usar \"dir\" com a propriedade \"props\":" + +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." +msgstr "" +"Isto irá imprimir no console a lista de propriedades que um Gtk.Box possui." + +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "Glade e Gtk.Builder" + +#: ../../source/builder.txt:3 +msgid "" +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by a XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" +msgstr "" +"A classe :class:`Gtk.Builder` oferece a você a oportunidade de projetar " +"interfaces de usuário sem escrever uma única linha de código. Isso é " +"possível descrevendo a interface por um arquivo XML e, em seguida, " +"carregando a descrição XML em tempo de execução e criando os objetos " +"automaticamente, o que a classe Builder faz por você. Para o propósito de " +"não precisar escrever o XML manualmente, o aplicativo `Glade `_ permite criar a interface do usuário de uma maneira WYSIWYG (o " +"que você vê é o que obtém)" + +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "Esse método possui várias vantagens:" + +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "Menos código precisa ser escrito." + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." +msgstr "" +"As mudanças da interface do usuário podem ser vistas mais rapidamente, para " +"que as interfaces de usuário possam melhorar." + +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." +msgstr "" +"Designers sem habilidades de programação podem criar e editar interfaces de " +"usuário." + +#: ../../source/builder.txt:12 +msgid "" +"The description of the user interface is independent from the programming " +"language being used." +msgstr "" +"A descrição da interface do usuário é independente da linguagem de " +"programação utilizada." + +#: ../../source/builder.txt:14 +msgid "" +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." +msgstr "" +"Ainda existe código necessário para lidar com mudanças de interface " +"acionadas pelo usuário, mas :class:`Gtk.Builder` permite que você se " +"concentre em implementar essa funcionalidade." + +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "Criando e carregando o arquivo .glade" + +#: ../../source/builder.txt:18 +msgid "" +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." +msgstr "" +"Primeiro de tudo você tem que baixar e instalar o Glade. Existem `vários " +"tutoriais `_ sobre " +"o Glade, então isso não é explicado aqui em detalhes. Vamos começar criando " +"uma janela com um botão e salvando-a em um arquivo chamado *example.glade*. " +"O arquivo XML resultante deve se parecer com isso." + +#: ../../source/builder.txt:42 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" +"Para carregar este arquivo em Python, precisamos de um objeto :class:`Gtk." +"Builder`." + +#: ../../source/builder.txt:49 +msgid "" +"The second line loads all objects defined in *example.glade* into the " +"Builder object." +msgstr "" +"A segunda linha carrega todos os objetos definidos em *example.glade* no " +"objeto Builder." + +#: ../../source/builder.txt:51 +msgid "" +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." +msgstr "" +"Também é possível carregar apenas alguns dos objetos. A linha a seguir " +"adicionaria apenas os objetos (e seus objetos filhos) fornecidos na tupla." + +#: ../../source/builder.txt:58 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." +msgstr "" +"Esses dois métodos também existem para o carregamento de uma string, em vez " +"de um arquivo. Seus nomes correspondentes são :meth:`Gtk.Builder." +"add_from_string` e :meth:`Gtk.Builder.add_objects_from_string` e eles " +"simplesmente pegam uma string XML em vez de um nome de arquivo." + +#: ../../source/builder.txt:62 +msgid "Accessing widgets" +msgstr "Acessando Widgets" + +#: ../../source/builder.txt:63 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" +msgstr "" +"Agora que a janela e o botão estão carregados, também queremos mostrá-los. " +"Portanto, o método :meth:`Gtk.Window.show_all` deve ser chamado na janela. " +"Mas como acessamos o objeto associado?" + +#: ../../source/builder.txt:72 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." +msgstr "" +"Cada widget pode ser recuperado do construtor pelo método :meth:`Gtk.Builder." +"get_object` e pelo *id* do widget. É realmente *isso* simples." + +#: ../../source/builder.txt:75 +msgid "It is also possible to get a list of all objects with" +msgstr "Também é possível obter uma lista de todos os objetos com" + +#: ../../source/builder.txt:82 +msgid "Connecting Signals" +msgstr "Conectando Sinais" + +#: ../../source/builder.txt:83 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." +msgstr "" +"O Glade também permite definir sinais que você pode conectar a manipuladores " +"em seu código sem extrair todos os objetos do construtor e conectar-se aos " +"sinais manualmente. A primeira coisa a fazer é declarar os nomes dos sinais " +"no Glade. Para este exemplo, vamos agir quando a janela é fechada e quando o " +"botão foi pressionado, então damos o nome \"onDestroy\" para o retorno de " +"chamada manipulando o sinal \"destroy\" da janela e \"onButtonPressed\" para " +"o retorno de chamada manipulando o \"pressionado\" sinal do botão. Agora o " +"arquivo XML deve ficar assim." + +#: ../../source/builder.txt:91 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" +msgstr "" +"Agora temos que definir as funções do manipulador em nosso código. O " +"*onDestroy* deve simplesmente resultar em uma chamada para :meth:`Gtk." +"main_quit`. Quando o botão é pressionado, gostaríamos de imprimir a string " +"\"Hello World!\", Então definimos o manipulador da seguinte maneira" + +#: ../../source/builder.txt:100 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +msgstr "" +"Em seguida, temos que conectar os sinais e as funções do manipulador. A " +"maneira mais fácil de fazer isso é definir um *dict* com um mapeamento dos " +"nomes para os manipuladores e então passá-lo para o método :meth:`Gtk." +"Builder.connect_signals`." + +#: ../../source/builder.txt:111 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" +msgstr "" +"Uma abordagem alternativa é criar uma classe que tenha métodos que sejam " +"chamados como os sinais. Em nosso exemplo, o último snippet de código pode " +"ser reescrito como:" + +#: ../../source/builder.txt:120 +msgid "The final code of the example" +msgstr "O código final do exemplo" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "Widgets de Botão" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "Botão" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" +"O widget Button é outro widget comumente usado. Geralmente é usado para " +"anexar uma função que é chamada quando o botão é pressionado." + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" +"O widget :class:`Gtk.Button` pode conter qualquer widget filho válido. Isto " +"é, ele pode conter praticamente qualquer outro padrão :class:`Gtk.Widget`. " +"Um filho mais comumente usado é a :class:`Gtk.Label`." + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" +"Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " +"emitido quando o botão foi pressionado e liberado." + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "Botão de Alternância" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" +"A :class:`Gtk.ToggleButton` é muito semelhante a um normal :class:`Gtk." +"Button`, mas quando clicados eles permanecem ativados, ou pressionados, até " +"serem clicados novamente. Quando o estado do botão é alterado, o sinal " +"\"toggled\" (alternado) é emitido." + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" +"Para recuperar o estado da :class:`Gtk.ToggleButton`, você pode usar o " +"método :meth:`Gtk.ToggleButton.get_active`. Isso retorna ``True`` se o botão " +"estiver \"inativo\". Você também pode definir o estado do botão de " +"alternância, com :meth:`Gtk.ToggleButton.set_active`. Observe que, se você " +"fizer isso e o estado realmente mudar, isso fará com que o sinal \"alternado" +"\" seja emitido." + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "Botão de Seleção" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" +":class:`Gtk.CheckButton` herda de :class:`Gtk.ToggleButton`. A única " +"diferença real entre os dois é como :class:`Gtk.CheckButton` é apresentado. " +"A :class:`Gtk.CheckButton` coloca um discreto :class:`Gtk.ToggleButton` ao " +"lado de um widget, (geralmente um :class:`Gtk.Label`). O sinal \"toggled\", :" +"meth:`Gtk.ToggleButton.set_active` e :meth:`Gtk.ToggleButton.get_active` são " +"herdados." + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "Botão de Radio" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" +"Como os checkboxes, os radio buttons também herdam de :class:`Gtk." +"ToggleButton`, mas estes funcionam em grupos, e apenas um :class:`Gtk." +"RadioButton` em um grupo pode ser selecionado a qualquer momento. Portanto, " +"um :class:`Gtk.RadioButton` é uma maneira de dar ao usuário uma escolha " +"entre várias opções." + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" +"Botões de rádio podem ser criados com um dos métodos estáticos :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` ou :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. O primeiro botão de rádio de um grupo será " +"criado passando o ``None`` como o argumento *group*. Nas chamadas " +"subsequentes, o grupo ao qual você deseja adicionar esse botão deve ser " +"passado como um argumento." + +#: ../../source/button_widgets.txt:70 +msgid "" +"When first run, the first radio button in the group will be active. This can " +"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " +"first argument." +msgstr "" +"Quando executado pela primeira vez, o primeiro botão de rádio do grupo " +"estará ativo. Isto pode ser alterado chamando :meth:`Gtk.ToggleButton." +"set_active` com ``True`` como primeiro argumento." + +#: ../../source/button_widgets.txt:74 +msgid "" +"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " +"achieved by calling :meth:`Gtk.RadioButton.join_group`." +msgstr "" +"Alterar o grupo de widgets :class:`Gtk.RadioButton` após sua criação pode " +"ser feito chamando :meth:`Gtk.RadioButton.join_group`." + +#: ../../source/button_widgets.txt:86 +msgid "LinkButton" +msgstr "Botão Link" + +#: ../../source/button_widgets.txt:87 +msgid "" +"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " +"to the one used by web browsers, which triggers an action when clicked. It " +"is useful to show quick links to resources." +msgstr "" +"A :class:`Gtk.LinkButton` é um :class:`Gtk.Button` com um hiperlink, similar " +"ao usado pelos navegadores da web, que aciona uma ação quando clicado. É " +"útil mostrar links rápidos para recursos." + +#: ../../source/button_widgets.txt:91 +msgid "" +"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" +"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." +"get_uri`." +msgstr "" +"O URI ligado a um :class:`Gtk.LinkButton` pode ser configurado " +"especificamente usando :meth:`Gtk.LinkButton.set_uri` e recuperado usando :" +"meth:`Gtk.LinkButton.get_uri`." + +#: ../../source/button_widgets.txt:103 +msgid "SpinButton" +msgstr "Botão Giratório" + +#: ../../source/button_widgets.txt:104 +msgid "" +"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " +"of some attribute. Rather than having to directly type a number into a :" +"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " +"of two arrows to increment or decrement the displayed value. A value can " +"still be typed in, with the bonus that it can be checked to ensure it is in " +"a given range. The main properties of a :class:`Gtk.SpinButton` are set " +"through :class:`Gtk.Adjustment`." +msgstr "" +"A :class:`Gtk.SpinButton` é uma maneira ideal de permitir que o usuário " +"defina o valor de algum atributo. Em vez de digitar diretamente um número " +"em :class:`Gtk.Entry`, :class:`Gtk.SpinButton` permite que o usuário clique " +"em uma das duas setas para incrementar ou decrementar o valor exibido. Um " +"valor ainda pode ser digitado, com o bônus que pode ser verificado para " +"garantir que esteja em um determinado intervalo. As propriedades principais " +"de um :class:`Gtk.SpinButton` são definidas através de :class:`Gtk." +"Adjustment`." + +#: ../../source/button_widgets.txt:112 +msgid "" +"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." +"SpinButton.set_value`. The value entered can either be an integer or float, " +"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" +"meth:`Gtk.SpinButton.get_value_as_int`, respectively." +msgstr "" +"Para alterar o valor que :class:`Gtk.SpinButton` está mostrando, use :meth:" +"`Gtk.SpinButton.set_value`. O valor digitado pode ser um número inteiro ou " +"float, dependendo de seus requisitos, use :meth:`Gtk.SpinButton.get_value` " +"ou :meth:`Gtk.SpinButton.get_value_as_int`, respectivamente." + +#: ../../source/button_widgets.txt:117 +msgid "" +"When you allow the displaying of float values in the spin button, you may " +"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." +"SpinButton.set_digits`." +msgstr "" +"Quando você permite a exibição de valores flutuantes no botão de rotação, " +"você pode querer ajustar o número de espaços decimais exibidos chamando :" +"meth:`Gtk.SpinButton.set_digits`." + +#: ../../source/button_widgets.txt:121 +msgid "" +"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " +"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " +"with ``True`` as argument." +msgstr "" +"Por padrão, :class:`Gtk.SpinButton` aceita dados textuais. Se você deseja " +"limitar isso apenas a valores numéricos, chame :meth:`Gtk.SpinButton." +"set_numeric` com ``True`` como argumento." + +#: ../../source/button_widgets.txt:125 +msgid "" +"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " +"two options here; by default the spin button updates the value even if the " +"data entered is invalid. Alternatively, we can set the policy to only update " +"when the value entered is valid by calling :meth:`Gtk.SpinButton." +"set_update_policy`." +msgstr "" +"Também podemos ajustar a política de atualização de :class:`Gtk.SpinButton`. " +"Existem duas opções aqui; por padrão, o botão de rotação atualiza o valor " +"mesmo se os dados inseridos forem inválidos. Alternativamente, podemos " +"definir a política para apenas atualizar quando o valor inserido é válido " +"chamando :meth:`Gtk.SpinButton.set_update_policy`." + +#: ../../source/button_widgets.txt:139 +msgid "Switch" +msgstr "Interruptor" + +#: ../../source/button_widgets.txt:140 +msgid "" +"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " +"can control which state should be active by clicking the empty area, or by " +"dragging the handle." +msgstr "" +"A :class:`Gtk.Switch` é um widget que possui dois estados: ligado ou " +"desligado. O usuário pode controlar qual estado deve estar ativo clicando na " +"área vazia ou arrastando a alça." + +#: ../../source/button_widgets.txt:144 +msgid "" +"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " +"action signal and emitting it causes the switch to animate. Applications " +"should never connect to this signal, but use the \"notify::active\" signal, " +"see the example here below." +msgstr "" +"Você não deve usar o sinal \"activate\" no Gtk.Switch que é um sinal de ação " +"e emiti-lo faz com que o switch anime. As aplicações nunca devem se conectar " +"a este sinal, mas use o sinal \"notify::active\", veja o exemplo abaixo." + +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "" + +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" +msgstr "" +"Os widgets :class:`Gtk.CellRenderer` são usados para exibir informações " +"dentro de widgets como :class:`Gtk.TreeView` ou :class:`Gtk.ComboBox`. Eles " +"trabalham de perto com os widgets associados e são muito poderosos, com " +"muitas opções de configuração para exibir uma grande quantidade de dados de " +"diferentes maneiras. Há sete widgets :class:`Gtk.CellRenderer` que podem ser " +"usados para diferentes propósitos:" + +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr "" + +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr "" + +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr "" + +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr "" + +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr "" + +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr "" + +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr "" + +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr "" + +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "" + +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." +msgstr "" +"A :class:`Gtk.CellRendererText` processa um dado texto em sua célula, usando " +"as informações de fonte, cor e estilo fornecidas por suas propriedades. O " +"texto será reticulado se for muito longo e a propriedade \"ellipsize\" " +"permitir." + +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" +msgstr "" +"Por padrão, o texto em :class:`Gtk.CellRendererText` widgets não é editável. " +"Isso pode ser alterado, definindo o valor da propriedade \"editable\" como " +"``True``:" + +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." +msgstr "" +"Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." +"TreeModel` de acordo." + +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "" + +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." +msgstr "" +":class:`Gtk.CellRendererToggle` renderiza um botão de alternância em uma " +"célula. O botão é desenhado como um botão de rádio ou de verificação, " +"dependendo da propriedade \"radio\". Quando ativado, emite o sinal " +"\"alternado\"." + +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." +msgstr "" +"Como um :class:`Gtk.CellRendererToggle` pode ter dois estados, ativos e não " +"ativos, você provavelmente deseja vincular a propriedade \"active\" no " +"renderizador de célula a um valor booleano no modelo, fazendo com que o " +"botão de verificação reflita o estado do modelo." + +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "" + +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." +msgstr "" +"A :class:`Gtk.CellRendererPixbuf` pode ser usado para renderizar uma imagem " +"em uma célula. Ele permite renderizar um dado :class:`Gdk.Pixbuf` (definido " +"através da propriedade \"pixbuf\") ou um ícone nomeado (configurado através " +"da propriedade \"icon-name\")." + +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "" + +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." +msgstr "" +":class:`Gtk.CellRendererCombo` processa texto em uma célula como :class:`Gtk." +"CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererCombo` oferece " +"um widget :class:`Gtk.ComboBox` para editar o texto. Os valores a serem " +"exibidos na caixa de combinação são obtidos de :class:`Gtk.TreeModel` " +"especificado na propriedade \"model\"." + +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." +msgstr "" +"O renderizador de célula de combinação toma o cuidado de adicionar um " +"renderizador de célula de texto à caixa de combinação e o configura para " +"exibir a coluna especificada por sua propriedade \"text-column\"." + +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." +msgstr "" +"A :class:`Gtk.CellRendererCombo` pode operar em dois modos. Ele pode ser " +"usado com e sem um widget associado :class:`Gtk.Entry`, dependendo do valor " +"da propriedade \"has-entry\"." + +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "" + +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." +msgstr "" +":class:`Gtk.CellRendererProgress` renderiza um valor numérico como uma barra " +"de progresso em uma célula. Além disso, pode exibir um texto na parte " +"superior da barra de progresso." + +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." +msgstr "" +"O valor percentual da barra de progresso pode ser modificado alterando a " +"propriedade \"value\". Semelhante a :class:`Gtk.ProgressBar`, você pode " +"ativar o *modo de atividade* incrementando a propriedade \"pulse\" em vez da " +"propriedade \"value\"." + +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" +":class:`Gtk.CellRendererSpin` processa o texto em uma célula como :class:" +"`Gtk.CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererSpin` oferece " +"um widget :class:`Gtk.SpinButton`. Claro, isso significa que o texto deve " +"ser analisado como um número de ponto flutuante." + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" +"O intervalo do botão de rotação é obtido da propriedade de ajuste do " +"renderizador de célula, que pode ser definido explicitamente ou mapeado para " +"uma coluna no modelo de árvore, como todas as propriedades dos " +"renderizadores de célula. :class:`Gtk.CellRendererSpin` também possui " +"propriedades para a taxa de subida e o número de dígitos a serem exibidos." + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" +":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " +"de dados, incluindo texto e imagens. O uso de uma área de transferência " +"permite que esses dados sejam compartilhados entre aplicativos por meio de " +"ações como copiar, cortar e colar. Essas ações geralmente são feitas de três " +"maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " +"conectando as funções aos widgets :class:`Gtk.Button`." + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." +msgstr "" +"Existem várias seleções da área de transferência para finalidades " +"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` é " +"usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção comum " +"que armazena texto selecionado pelo usuário com o cursor." + +#: ../../source/combobox.txt:2 +msgid "ComboBox" +msgstr "" + +#: ../../source/combobox.txt:3 +msgid "" +"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " +"menu. They are preferable to having many radio buttons on screen as they " +"take up less room. If appropriate, it can show extra information about each " +"item, such as text, a picture, a checkbox, or a progress bar." +msgstr "" +"A :class:`Gtk.ComboBox` permite a seleção de um item em um menu suspenso. " +"Eles são preferíveis a ter muitos botões de rádio na tela, pois ocupam menos " +"espaço. Se apropriado, ele pode mostrar informações extras sobre cada item, " +"como texto, uma imagem, uma caixa de seleção ou uma barra de progresso." + +#: ../../source/combobox.txt:8 +msgid "" +":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " +"the model-view pattern; the list of valid choices is specified in the form " +"of a tree model, and the display of the choices can be adapted to the data " +"in the model by using :ref:`cell renderers `. If the combo " +"box contains a large number of items, it may be better to display them in a " +"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." +"set_wrap_width`." +msgstr "" +":class:`Gtk.ComboBox` é muito similar a :class:`Gtk.TreeView`, já que ambos " +"usam o padrão model-view; A lista de opções válidas é especificada na forma " +"de um modelo de árvore, e a exibição das opções pode ser adaptada aos dados " +"no modelo usando :ref:`renderizadores de célula `. Se a caixa " +"de combinação contiver um grande número de itens, talvez seja melhor exibi-" +"los em uma grade em vez de em uma lista. Isso pode ser feito chamando :meth:" +"`Gtk.ComboBox.set_wrap_width`." + +#: ../../source/combobox.txt:16 +msgid "" +"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " +"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " +"to enter arbitrary text if none of the available choices are suitable. To do " +"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" +"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." +"ComboBox` instance." +msgstr "" +"O widget :class:`Gtk.ComboBox` geralmente restringe o usuário às opções " +"disponíveis, mas ele pode opcionalmente ter um :class:`Gtk.Entry`, " +"permitindo que o usuário insira texto arbitrário se nenhuma das opções " +"disponíveis for adequada. Para fazer isso, use um dos métodos estáticos :" +"meth:`Gtk.ComboBox.new_with_entry` ou :meth:`Gtk.ComboBox." +"new_with_model_and_entry` para criar uma instância :class:`Gtk.ComboBox`." + +#: ../../source/combobox.txt:23 +msgid "" +"For a simple list of textual choices, the model-view API of :class:`Gtk." +"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " +"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." +"ComboBoxText` can contain an entry." +msgstr "" +"Para uma lista simples de escolhas textuais, a API de visão de modelo de :" +"class:`Gtk.ComboBox` pode ser um pouco avassaladora. Neste caso, :class:`Gtk." +"ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " +"e :class:`Gtk.ComboBoxText` podem conter uma entrada." + +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "" + +#: ../../source/dialogs.txt:4 +msgid "" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." +msgstr "" +"As janelas de caixa de diálogo são muito semelhantes às janelas padrão e são " +"usadas para fornecer ou recuperar informações do usuário. Eles são " +"frequentemente usados para fornecer uma janela de preferências, por exemplo. " +"A principal diferença que uma caixa de diálogo tem é alguns widgets pré-" +"empacotados que organizam a caixa de diálogo automaticamente. A partir daí, " +"podemos simplesmente adicionar rótulos, botões, botões de verificação, etc. " +"Outra grande diferença é o tratamento de respostas para controlar como o " +"aplicativo deve se comportar após a interação com a caixa de diálogo." + +#: ../../source/dialogs.txt:12 +msgid "" +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." +msgstr "" +"Existem várias classes de diálogo derivadas que você pode achar útil. :class:" +"`Gtk.MessageDialog` é usado para notificações mais simples. Porém, em outras " +"ocasiões, você pode precisar derivar sua própria classe de diálogo para " +"fornecer uma funcionalidade mais complexa." + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "Dialogs Personalizados" + +#: ../../source/dialogs.txt:20 +msgid "" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." +msgstr "" +"Para empacotar widgets em um diálogo customizado, você deve empacotá-los no :" +"class:`Gtk.Box`, disponível via :meth:`Gtk.Dialog.get_content_area`. Para " +"adicionar apenas um :class:`Gtk.Button` ao final do diálogo, você poderia " +"usar o método :meth:`Gtk.Dialog.add_button`." + +#: ../../source/dialogs.txt:25 +msgid "" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +msgstr "" +"Um diálogo 'modal' (isto é, um que congela o resto do aplicativo da entrada " +"do usuário), pode ser criado chamando :class:`Gtk.Dialog.set_modal` no " +"diálogo ou setando o argumento ``flags`` do o construtor :class:`Gtk.Dialog` " +"para incluir o sinalizador :attr:`Gtk.DialogFlags.MODAL`." + +#: ../../source/dialogs.txt:30 +msgid "" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." +msgstr "" +"Clicar em um botão irá emitir um sinal chamado \"response\". Se você quiser " +"bloquear a espera de um diálogo para retornar antes do retorno do fluxo de " +"controle para o seu código, você pode chamar :meth:`Gtk.Dialog.run`. Este " +"método retorna um int que pode ser um valor de :class:`Gtk.ResponseType` ou " +"pode ser o valor de resposta customizado que você especificou no construtor :" +"class:`Gtk.Dialog` ou :meth:`Gtk.Dialog .add_button`." + +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." +msgstr "" +"Finalmente, existem duas maneiras de remover um diálogo. O método :meth:`Gtk." +"Widget.hide` remove a caixa de diálogo da visualização, mas mantém " +"armazenada na memória. Isso é útil para evitar a necessidade de construir a " +"caixa de diálogo novamente se precisar ser acessada posteriormente. " +"Alternativamente, o método :meth:`Gtk.Widget.destroy` pode ser usado para " +"excluir o diálogo da memória, uma vez que não é mais necessário. Deve ser " +"notado que se o diálogo precisar ser acessado depois de ter sido destruído, " +"ele precisará ser construído novamente, caso contrário a janela de diálogo " +"estará vazia." + +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "" + +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." +msgstr "" +":class:`Gtk.MessageDialog` é uma classe de conveniência, usada para criar " +"diálogos de mensagem simples e padrão, com uma mensagem, um ícone e botões " +"para resposta do usuário. Você pode especificar o tipo de mensagem e o texto " +"no construtor :class:`Gtk.MessageDialog`, além de especificar botões padrão." + +#: ../../source/dialogs.txt:60 +msgid "" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." +msgstr "" +"Em alguns diálogos que requerem alguma explicação adicional do que " +"aconteceu, um texto secundário pode ser adicionado. Nesse caso, a mensagem " +"principal inserida ao criar a caixa de diálogo da mensagem é maior e " +"definida como texto em negrito. A mensagem secundária pode ser definida " +"chamando :meth:`Gtk.MessageDialog.format_secondary_text`." + +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "" + +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +msgstr "" +"O :class:`Gtk.FileChooserDialog` é adequado para uso com itens de menu " +"\"Arquivo/Abrir\" ou \"Arquivo/Salvar\". Você pode usar todos os métodos :" +"class:`Gtk.FileChooser` no diálogo do seletor de arquivos, assim como " +"aqueles para :class:`Gtk.Dialog`." + +#: ../../source/dialogs.txt:80 +msgid "" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" +msgstr "" +"Ao criar um :class:`Gtk.FileChooserDialog` você precisa definir o propósito " +"do diálogo:" + +#: ../../source/dialogs.txt:83 +msgid "" +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" +msgstr "" +"Para selecionar um arquivo para abertura, como para um comando Arquivo/" +"Abrir, use :attr:`Gtk.FileChooserAction.OPEN`" + +#: ../../source/dialogs.txt:85 +msgid "" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." +msgstr "" +"Para salvar um arquivo pela primeira vez, como para um comando Arquivo/" +"Salvar, use :attr:`Gtk.FileChooserAction.SAVE` e sugira um nome como " +"\"Untitled\"com :meth:`Gtk.FileChooser.set_current_name`." + +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." +msgstr "" +"Para salvar um arquivo com um nome diferente, como para um comando Arquivo/" +"Salvar como, use :attr:`Gtk.FileChooserAction.SAVE` e defina o nome do " +"arquivo existente como :meth:`Gtk.FileChooser.set_filename`." + +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." +msgstr "" +"Para escolher uma pasta em vez de um arquivo, use :attr:`Gtk." +"FileChooserAction.SELECT_FOLDER`." + +#: ../../source/dialogs.txt:93 +msgid "" +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" +msgstr "" +":class:`Gtk.FileChooserDialog` herda de :class:`Gtk.Dialog`, então os botões " +"possuem IDs de resposta como :attr:`Gtk.ResponseType.ACCEPT` e :attr:`Gtk." +"ResponseType.CANCEL`, que pode ser especificado no construtor :class:`Gtk." +"FileChooserDialog`. Em contraste com :class:`Gtk.Dialog`, você não pode usar " +"códigos de resposta customizados com :class:`Gtk.FileChooserDialog`. Espera " +"que pelo menos um botão tenha os seguintes IDs de resposta:" + +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr "" + +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr "" + +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr "" + +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr "" + +#: ../../source/dialogs.txt:105 +msgid "" +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." +msgstr "" +"Quando o usuário terminar de selecionar arquivos, seu programa pode obter os " +"nomes selecionados como nomes de arquivos (:meth:`Gtk.FileChooser." +"get_filename`) ou como URIs (:meth:`Gtk.FileChooser.get_uri`)." + +#: ../../source/dialogs.txt:109 +msgid "" +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." +msgstr "" +"Por padrão, :class:`Gtk.FileChooser` permite apenas que um único arquivo " +"seja selecionado por vez. Para permitir que vários arquivos sejam " +"selecionados, use :meth:`Gtk.FileChooser.set_select_multiple`. Recuperar uma " +"lista de arquivos selecionados é possível com :meth:`Gtk.FileChooser." +"get_filenames` ou :meth:`Gtk.FileChooser.get_uris`." + +#: ../../source/dialogs.txt:115 +msgid "" +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." +msgstr "" +":class:`Gtk.FileChooser` também suporta uma variedade de opções que tornam " +"os arquivos e pastas mais configuráveis e acessíveis." + +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +msgstr "" +":meth:`Gtk.FileChooser.set_local_only`: Somente arquivos locais podem ser " +"selecionados." + +#: ../../source/dialogs.txt:119 +msgid "" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +msgstr "" +":meth:`Gtk.FileChooser.show_hidden`: arquivos e pastas ocultos são exibidos." + +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." +msgstr "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Se o seletor de " +"arquivos foi configurado no modo :attr:`Gtk.FileChooserAction.SAVE`, ele " +"apresentará um diálogo de confirmação se o usuário digitar um nome de " +"arquivo que já existe." + +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." +msgstr "" +"Além disso, você pode especificar quais tipos de arquivos são exibidos " +"criando objetos :class:`Gtk.FileFilter` e chamando :meth:`Gtk.FileChooser." +"add_filter`. O usuário pode selecionar um dos filtros adicionados em uma " +"caixa de combinação na parte inferior do seletor de arquivos." + +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "Arraste e solte" + +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." +msgstr "" +"As versões do PyGObject < 3.0.3 contêm um bug que não permite arrastar e " +"soltar para funcionar corretamente. Portanto, uma versão do PyGObject >= " +"3.0.3 é necessária para os exemplos a seguir funcionarem." + +#: ../../source/drag_and_drop.txt:8 +msgid "" +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." +msgstr "" +"Configurar arrastar e soltar entre widgets consiste em selecionar uma fonte " +"de arrasto (o widget do qual o usuário começa a arrastar) com o método :meth:" +"`Gtk.Widget.drag_source_set`, selecionando um destino de arrasto (o widget " +"que o usuário coloca em) com o método :meth:`Gtk.Widget.drag_dest_set` e " +"depois manipular os sinais relevantes em ambos os widgets." + +#: ../../source/drag_and_drop.txt:14 +msgid "" +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +msgstr "" +"Em vez de usar :meth:`Gtk.Widget.drag_source_set` e :meth:`Gtk.Widget." +"drag_dest_set` alguns widgets especializados requerem o uso de funções " +"específicas (como :class:`Gtk.TreeView` e :class:`Gtk.IconView`)." + +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +msgstr "" +"Um arrastar e soltar básico requer apenas que a fonte se conecte ao sinal " +"\"drag-data-get\" e que o destino se conecte ao sinal \"drag-data-received" +"\". Coisas mais complexas, como áreas de queda específicas e ícones de " +"arrastar personalizados, exigirão que você se conecte a :ref:`sinais " +"adicionais ` e interaja com o objeto :class:`Gdk.DragContext` " +"que fornece." + +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +msgstr "" +"Para transferir dados entre a origem e o destino, você deve interagir com a " +"variável :class:`Gtk.SelectionData` fornecida no :ref:`\"drag-data-get\" " +"` e sinais de :ref:`\"drag-data-received\" ` " +"usando os métodos get e set :class:`Gtk.SelectionData`." + +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "Alvos de Entrada" + +#: ../../source/drag_and_drop.txt:31 +msgid "" +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." +msgstr "" +"Para permitir que a fonte de arrastar e o destino saibam quais dados estão " +"recebendo e enviando, uma lista comum de :class:`Gtk.TargetEntry's ` é necessária. A :class:`Gtk.TargetEntry` descreve um dado que " +"será enviado pela fonte de arrasto e recebido pelo destino do arrasto." + +#: ../../source/drag_and_drop.txt:36 +msgid "" +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." +msgstr "" +"Existem duas maneiras de adicionar :class:`Gtk.TargetEntry's ` a uma origem e destino. Se o arrastar e soltar for simples e " +"cada entrada de destino for de um tipo diferente, você pode usar o grupo de " +"métodos mencionado aqui :meth:``." + +#: ../../source/drag_and_drop.txt:41 +msgid "" +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +msgstr "" +"Se você precisar de mais de um tipo de dados ou quiser fazer coisas mais " +"complexas com os dados, você precisará criar o :class:`Gtk.TargetEntry's " +"` usando o método :meth:`Gtk.TargetEntry.new`." + +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "Sinais de Origem do Arrasto" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "Nome" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "Quando é emitido" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "Propósito comum" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "Usuário inicia um arrasto" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "Configurar ícone de arrastar" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "Quando dados arrastados são solicitados pelo destino" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "Transferir dados de arrastar da origem para o destino" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "Quando um arrasto com a ação Gdk.DragAction.MOVE é concluído" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "Excluir dados da fonte para completar o 'movimento'" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "Quando o arrasto estiver completo" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "Desfazer qualquer coisa feita no drag-begin" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "Sinais de Destino do Arrasto" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "O ícone de arrasto se move sobre uma área de soltar" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "Permitir que apenas algumas áreas sejam soltas" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "O ícone é solto em uma área de arrasto" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "Quando dados arrastados são recebidos pelo destino" + +#: ../../source/entry.txt:2 +msgid "Entry" +msgstr "" + +#: ../../source/entry.txt:4 +msgid "" +"Entry widgets allow the user to enter text. You can change the contents with " +"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " +"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " +"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." +msgstr "" +"Widgets de entrada permitem que o usuário insira texto. Você pode alterar o " +"conteúdo com o método :meth:`Gtk.Entry.set_text` e ler o conteúdo atual com " +"o método :meth:`Gtk.Entry.get_text`. Você também pode limitar o número de " +"caracteres que a Entrada pode receber chamando :meth:`Gtk.Entry." +"set_max_length`." + +#: ../../source/entry.txt:9 +msgid "" +"Occasionally you might want to make an Entry widget read-only. This can be " +"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." +msgstr "" +"Ocasionalmente, você pode querer tornar um widget de Entrada somente " +"leitura. Isto pode ser feito passando ``False`` para o método :meth:`Gtk." +"Entry.set_editable`." + +#: ../../source/entry.txt:12 +msgid "" +"Entry widgets can also be used to retrieve passwords from the user. It is " +"common practice to hide the characters typed into the entry to prevent " +"revealing the password to a third party. Calling :meth:`Gtk.Entry." +"set_visibility` with ``False`` will cause the text to be hidden." +msgstr "" +"Os widgets de entrada também podem ser usados para recuperar senhas do " +"usuário. É uma prática comum ocultar os caracteres digitados na entrada para " +"evitar revelar a senha a terceiros. Chamando :meth:`Gtk.Entry." +"set_visibility` com ``False`` fará com que o texto fique oculto." + +#: ../../source/entry.txt:17 +msgid "" +":class:`Gtk.Entry` has the ability to display progress or activity " +"information behind the text. This is similar to :class:`Gtk.ProgressBar` " +"widget and is commonly found in web browsers to indicate how much of a page " +"download has been completed. To make an entry display such information, use :" +"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." +msgstr "" +":class:`Gtk.Entry` tem a capacidade de exibir informações de progresso ou " +"atividade por trás do texto. Isso é semelhante ao widget :class:`Gtk." +"ProgressBar` e é comumente encontrado em navegadores da Web para indicar " +"quanto de um download de página foi concluído. Para fazer uma entrada exibir " +"tais informações, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk." +"Entry.set_progress_pulse_step` ou :meth:`Gtk.Entry.progress_pulse`." + +#: ../../source/entry.txt:24 +msgid "" +"Additionally, an Entry can show icons at either side of the entry. These " +"icons can be activatable by clicking, can be set up as drag source and can " +"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " +"or one of the various other functions that set an icon from an icon name, a " +"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` or the corresponding function for markup." +msgstr "" +"Além disso, uma entrada pode mostrar ícones em ambos os lados da entrada. " +"Esses ícones podem ser ativados clicando, podem ser configurados como fonte " +"de arrastar e podem ter dicas de ferramentas. Para adicionar um ícone, use :" +"meth:`Gtk.Entry.set_icon_from_icon_name` ou uma das várias outras funções " +"que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de " +"ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` ou a função correspondente para marcação." + +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" +msgstr "" + +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" +msgstr "" + +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" +msgstr "" + +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" +msgstr "" + +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.Alignment`" +msgstr "" + +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.AppChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.AppChooserWidget`" +msgstr "" + +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.ApplicationWindow`" +msgstr "" + +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.Arrow`" +msgstr "" + +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.AspectFrame`" +msgstr "" + +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.Assistant`" +msgstr "" + +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.Box`" +msgstr "" + +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Button`" +msgstr "" + +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.ButtonBox`" +msgstr "" + +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.Calendar`" +msgstr "" + +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.CellView`" +msgstr "" + +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.CheckButton`" +msgstr "" + +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.CheckMenuItem`" +msgstr "" + +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.ColorButton`" +msgstr "" + +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.ColorChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.ColorChooserWidget`" +msgstr "" + +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.ColorSelection`" +msgstr "" + +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.ColorSelectionDialog`" +msgstr "" + +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.ComboBox`" +msgstr "" + +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.ComboBoxText`" +msgstr "" + +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Dialog`" +msgstr "" + +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.DrawingArea`" +msgstr "" + +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.Entry`" +msgstr "" + +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.EventBox`" +msgstr "" + +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.Expander`" +msgstr "" + +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.FileChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.FileChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.FileChooserWidget`" +msgstr "" + +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Fixed`" +msgstr "" + +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.FlowBox`" +msgstr "" + +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.FlowBoxChild`" +msgstr "" + +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.FontButton`" +msgstr "" + +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.FontChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.FontChooserWidget`" +msgstr "" + +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.FontSelection`" +msgstr "" + +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.FontSelectionDialog`" +msgstr "" + +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.Frame`" +msgstr "" + +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.GLArea`" +msgstr "" + +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.Grid`" +msgstr "" + +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.HBox`" +msgstr "" + +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.HButtonBox`" +msgstr "" + +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.HPaned`" +msgstr "" + +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.HSV`" +msgstr "" + +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.HScale`" +msgstr "" + +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.HScrollbar`" +msgstr "" + +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.HSeparator`" +msgstr "" + +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.HandleBox`" +msgstr "" + +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.HeaderBar`" +msgstr "" + +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.IconView`" +msgstr "" + +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Image`" +msgstr "" + +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.ImageMenuItem`" +msgstr "" + +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.InfoBar`" +msgstr "" + +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Invisible`" +msgstr "" + +#: ../../source/gallery.txt:63 +msgid ":class:`Gtk.Label`" +msgstr "" + +#: ../../source/gallery.txt:64 +msgid ":class:`Gtk.Layout`" +msgstr "" + +#: ../../source/gallery.txt:65 +msgid ":class:`Gtk.LevelBar`" +msgstr "" + +#: ../../source/gallery.txt:66 +msgid ":class:`Gtk.LinkButton`" +msgstr "" + +#: ../../source/gallery.txt:67 +msgid ":class:`Gtk.ListBox`" +msgstr "" + +#: ../../source/gallery.txt:68 +msgid ":class:`Gtk.ListBoxRow`" +msgstr "" + +#: ../../source/gallery.txt:69 +msgid ":class:`Gtk.LockButton`" +msgstr "" + +#: ../../source/gallery.txt:70 +msgid ":class:`Gtk.Menu`" +msgstr "" + +#: ../../source/gallery.txt:71 +msgid ":class:`Gtk.MenuBar`" +msgstr "" + +#: ../../source/gallery.txt:72 +msgid ":class:`Gtk.MenuButton`" +msgstr "" + +#: ../../source/gallery.txt:73 +msgid ":class:`Gtk.MenuItem`" +msgstr "" + +#: ../../source/gallery.txt:74 +msgid ":class:`Gtk.MenuToolButton`" +msgstr "" + +#: ../../source/gallery.txt:75 +msgid ":class:`Gtk.MessageDialog`" +msgstr "" + +#: ../../source/gallery.txt:76 +msgid ":class:`Gtk.ModelButton`" +msgstr "" + +#: ../../source/gallery.txt:77 +msgid ":class:`Gtk.Notebook`" +msgstr "" + +#: ../../source/gallery.txt:78 +msgid ":class:`Gtk.OffscreenWindow`" +msgstr "" + +#: ../../source/gallery.txt:79 +msgid ":class:`Gtk.Overlay`" +msgstr "" + +#: ../../source/gallery.txt:80 +msgid ":class:`Gtk.Paned`" +msgstr "" + +#: ../../source/gallery.txt:81 +msgid ":class:`Gtk.PlacesSidebar`" +msgstr "" + +#: ../../source/gallery.txt:82 +msgid ":class:`Gtk.Plug`" +msgstr "" + +#: ../../source/gallery.txt:83 +msgid ":class:`Gtk.Popover`" +msgstr "" + +#: ../../source/gallery.txt:84 +msgid ":class:`Gtk.PopoverMenu`" +msgstr "" + +#: ../../source/gallery.txt:85 +msgid ":class:`Gtk.ProgressBar`" +msgstr "" + +#: ../../source/gallery.txt:86 +msgid ":class:`Gtk.RadioButton`" +msgstr "" + +#: ../../source/gallery.txt:87 +msgid ":class:`Gtk.RadioMenuItem`" +msgstr "" + +#: ../../source/gallery.txt:88 +msgid ":class:`Gtk.RadioToolButton`" +msgstr "" + +#: ../../source/gallery.txt:89 +msgid ":class:`Gtk.RecentChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:90 +msgid ":class:`Gtk.RecentChooserMenu`" +msgstr "" + +#: ../../source/gallery.txt:91 +msgid ":class:`Gtk.RecentChooserWidget`" +msgstr "" + +#: ../../source/gallery.txt:92 +msgid ":class:`Gtk.Revealer`" +msgstr "" + +#: ../../source/gallery.txt:93 +msgid ":class:`Gtk.Scale`" +msgstr "" + +#: ../../source/gallery.txt:94 +msgid ":class:`Gtk.ScaleButton`" +msgstr "" + +#: ../../source/gallery.txt:95 +msgid ":class:`Gtk.Scrollbar`" +msgstr "" + +#: ../../source/gallery.txt:96 +msgid ":class:`Gtk.ScrolledWindow`" +msgstr "" + +#: ../../source/gallery.txt:97 +msgid ":class:`Gtk.SearchBar`" +msgstr "" + +#: ../../source/gallery.txt:98 +msgid ":class:`Gtk.SearchEntry`" +msgstr "" + +#: ../../source/gallery.txt:99 +msgid ":class:`Gtk.Separator`" +msgstr "" + +#: ../../source/gallery.txt:100 +msgid ":class:`Gtk.SeparatorMenuItem`" +msgstr "" + +#: ../../source/gallery.txt:101 +msgid ":class:`Gtk.SeparatorToolItem`" +msgstr "" + +#: ../../source/gallery.txt:102 +msgid ":class:`Gtk.ShortcutLabel`" +msgstr "" + +#: ../../source/gallery.txt:103 +msgid ":class:`Gtk.ShortcutsGroup`" +msgstr "" + +#: ../../source/gallery.txt:104 +msgid ":class:`Gtk.ShortcutsSection`" +msgstr "" + +#: ../../source/gallery.txt:105 +msgid ":class:`Gtk.ShortcutsShortcut`" +msgstr "" + +#: ../../source/gallery.txt:106 +msgid ":class:`Gtk.ShortcutsWindow`" +msgstr "" + +#: ../../source/gallery.txt:107 +msgid ":class:`Gtk.Socket`" +msgstr "" + +#: ../../source/gallery.txt:108 +msgid ":class:`Gtk.SpinButton`" +msgstr "" + +#: ../../source/gallery.txt:109 +msgid ":class:`Gtk.Spinner`" +msgstr "" + +#: ../../source/gallery.txt:110 +msgid ":class:`Gtk.Stack`" +msgstr "" + +#: ../../source/gallery.txt:111 +msgid ":class:`Gtk.StackSidebar`" +msgstr "" + +#: ../../source/gallery.txt:112 +msgid ":class:`Gtk.StackSwitcher`" +msgstr "" + +#: ../../source/gallery.txt:113 +msgid ":class:`Gtk.Statusbar`" +msgstr "" + +#: ../../source/gallery.txt:114 +msgid ":class:`Gtk.Switch`" +msgstr "" + +#: ../../source/gallery.txt:115 +msgid ":class:`Gtk.Table`" +msgstr "" + +#: ../../source/gallery.txt:116 +msgid ":class:`Gtk.TearoffMenuItem`" +msgstr "" + +#: ../../source/gallery.txt:117 +msgid ":class:`Gtk.TextView`" +msgstr "" + +#: ../../source/gallery.txt:118 +msgid ":class:`Gtk.ToggleButton`" +msgstr "" + +#: ../../source/gallery.txt:119 +msgid ":class:`Gtk.ToggleToolButton`" +msgstr "" + +#: ../../source/gallery.txt:120 +msgid ":class:`Gtk.ToolButton`" +msgstr "" + +#: ../../source/gallery.txt:121 +msgid ":class:`Gtk.ToolItem`" +msgstr "" + +#: ../../source/gallery.txt:122 +msgid ":class:`Gtk.ToolItemGroup`" +msgstr "" + +#: ../../source/gallery.txt:123 +msgid ":class:`Gtk.ToolPalette`" +msgstr "" + +#: ../../source/gallery.txt:124 +msgid ":class:`Gtk.Toolbar`" +msgstr "" + +#: ../../source/gallery.txt:125 +msgid ":class:`Gtk.TreeView`" +msgstr "" + +#: ../../source/gallery.txt:126 +msgid ":class:`Gtk.VBox`" +msgstr "" + +#: ../../source/gallery.txt:127 +msgid ":class:`Gtk.VButtonBox`" +msgstr "" + +#: ../../source/gallery.txt:128 +msgid ":class:`Gtk.VPaned`" +msgstr "" + +#: ../../source/gallery.txt:129 +msgid ":class:`Gtk.VScale`" +msgstr "" + +#: ../../source/gallery.txt:130 +msgid ":class:`Gtk.VScrollbar`" +msgstr "" + +#: ../../source/gallery.txt:131 +msgid ":class:`Gtk.VSeparator`" +msgstr "" + +#: ../../source/gallery.txt:132 +msgid ":class:`Gtk.Viewport`" +msgstr "" + +#: ../../source/gallery.txt:133 +msgid ":class:`Gtk.VolumeButton`" +msgstr "" + +#: ../../source/gallery.txt:134 +msgid ":class:`Gtk.Window`" +msgstr "" + +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "" + +#: ../../source/iconview.txt:3 +msgid "" +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." +msgstr "" +"A :class:`Gtk.IconView` é um widget que exibe uma coleção de ícones em uma " +"visualização de grade. Ele suporta recursos como arrastar e soltar, seleções " +"múltiplas e reordenação de itens." + +#: ../../source/iconview.txt:5 +msgid "" +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +msgstr "" +"Similarmente a :class:`Gtk.TreeView`, :class:`Gtk.IconView` usa um :class:" +"`Gtk.ListStore` para seu modelo. Em vez de usar :ref:`renderizadores de " +"célula `, :class:`Gtk.IconView` requer que uma das colunas em " +"seu :class:`Gtk.ListStore` contenha objetos :class:`GdkPixbuf.Pixbuf`." + +#: ../../source/iconview.txt:7 +msgid "" +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." +msgstr "" +":class:`Gtk.IconView` suporta vários modos de seleção para permitir a " +"seleção de vários ícones por vez, restringindo seleções para apenas um item " +"ou desaprovando a seleção de itens completamente. Para especificar um modo " +"de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " +"dos modos de seleção :class:`Gtk.SelectionMode`." + +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "O tutorial do Python GTK+ 3" + +#: ../../source/index.txt:0 +msgid "Release" +msgstr "" + +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Date" +msgstr "" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "" + +#: ../../source/index.txt:11 +msgid "" +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" +msgstr "" +"GNU Free Documentation License 1.3 sem Seções Invariantes, Textos de Capa " +"Frontal e Textos de Contra-capa" + +#: ../../source/index.txt:13 +msgid "" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +msgstr "" +"Este tutorial fornece uma introdução à criação de aplicativos GTK + 3 no " +"Python." + +#: ../../source/index.txt:15 +msgid "" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." +msgstr "" +"Antes de trabalhar com este tutorial, é recomendável que você tenha uma " +"compreensão razoável da linguagem de programação Python. A programação GUI " +"introduz novos problemas em comparação com a interação com a saída padrão " +"(console / terminal). É necessário que você saiba como criar e executar " +"arquivos Python, entender os erros básicos do interpretador e trabalhar com " +"strings, inteiros, floats e valores booleanos. Para os widgets mais " +"avançados neste tutorial, serão necessários bons conhecimentos de listas e " +"tuplas." + +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." +msgstr "" +"Embora este tutorial descreva as classes e métodos mais importantes dentro " +"do GTK + 3, ele não deve servir como uma referência da API. Por favor, " +"consulte o `Manual de Referência do GTK+ 3 `_ para uma descrição detalhada da API. Também há uma referência " +"específica ao Python `_ disponível." + +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "Conteúdo:" + +#: ../../source/index.txt:59 +msgid "Deprecated" +msgstr "Descontinuada" + +#: ../../source/index.txt:67 +msgid "Indices and tables" +msgstr "Índices e tabelas" + +#: ../../source/index.txt:69 +msgid ":ref:`search`" +msgstr "" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "Instalação" + +#: ../../source/install.txt:5 +msgid "" +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in " +"your application, use `PyGTK`_, instead." +msgstr "" +"O primeiro passo antes de começarmos com a codificação de fato consiste em " +"configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " +"que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " +"como o GTK+, dentro do Python. Ele suporta exclusivamente o GTK+ versão 3 ou " +"posterior. Se você quiser usar o GTK+ 2 em sua aplicação, use `PyGTK`_." + +#: ../../source/install.txt:13 +msgid "Dependencies" +msgstr "Dependências" + +#: ../../source/install.txt:15 +msgid "GTK+3" +msgstr "" + +#: ../../source/install.txt:17 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "Python 2 (2.6 ou posterior) ou Python 3 (3.1 ou posterior)" + +#: ../../source/install.txt:19 +msgid "gobject-introspection" +msgstr "" + +#: ../../source/install.txt:22 +msgid "Prebuilt Packages" +msgstr "Pacotes pré-construídos" + +#: ../../source/install.txt:23 +msgid "" +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." +msgstr "" +"Versões recentes do PyGObject e suas dependências são empacotadas por quase " +"todas as principais distribuições do Linux. Então, se você usa o Linux, você " +"provavelmente pode começar instalando o pacote a partir do repositório " +"oficial da sua distribuição." + +#: ../../source/install.txt:29 +msgid "Installing From Source" +msgstr "Instalando a partir da origem" + +#: ../../source/install.txt:30 +msgid "" +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." +msgstr "" +"A maneira mais fácil de instalar o PyGObject a partir do código-fonte é " +"usando o `JHBuild`_. Ele é projetado para criar facilmente pacotes de código-" +"fonte e descobrir quais dependências precisam ser construídas e em que " +"ordem. Para configurar o JHBuild, por favor, siga o `manual do JHBuild`_." + +#: ../../source/install.txt:34 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +msgstr "" +"Depois de ter instalado o JHBuild com sucesso, baixe a configuração mais " +"recente de [#]_. Copie os arquivos com o sufixo `.modules` para o diretório " +"de módulos do JHBuild e o arquivo `sample-tarball.jhbuildrc` para `~/." +"jhbuildrc`." + +#: ../../source/install.txt:38 +msgid "" +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" +msgstr "" +"Se você não tiver feito isso antes, verifique se o seu ambiente de " +"compilação está configurado corretamente executando:" + +#: ../../source/install.txt:43 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." +msgstr "" +"Ele imprimirá todos os aplicativos e bibliotecas que estiverem ausentes no " +"seu sistema, mas necessários para construção. Você deve instalá-los usando o " +"repositório de pacotes da sua distribuição. Uma lista de `nomes de pacotes " +"` _ para " +"diferentes distribuições é mantida no wiki GNOME. Execute o comando acima " +"novamente para garantir que as ferramentas necessárias estejam presentes." + +#: ../../source/install.txt:49 +msgid "" +"Executing the following command will build PyGObject and all its " +"dependencies::" +msgstr "" +"Executando o seguinte comando irá construir o PyGObject e todas as suas " +"dependências::" + +#: ../../source/install.txt:53 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "" +"Finalmente, você pode querer instalar o GTK+ a partir do código fonte::" + +#: ../../source/install.txt:57 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "" +"Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, execute::" + +#: ../../source/install.txt:66 +msgid "https://download.gnome.org/teams/releng/" +msgstr "" + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "Começando" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "Exemplo Simples" + +#: ../../source/introduction.txt:9 +msgid "" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." +msgstr "" +"Para começar com o nosso tutorial, criamos o programa mais simples possível. " +"Este programa irá criar uma janela vazia de 200 x 200 pixels." + +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "Vamos agora explicar cada linha do exemplo." + +#: ../../source/introduction.txt:22 +msgid "" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +msgstr "" +"No começo, temos que importar o módulo Gtk para poder acessar as classes e " +"funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK" +"+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos " +"o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, " +"que é o propósito da declaração ``gi.require_version('Gtk', '3.0')``." + +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "A próxima linha cria uma janela vazia." + +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" +"Seguido conectando-se ao evento de exclusão da janela para garantir que o " +"aplicativo seja encerrado se clicarmos no *x* para fechar a janela." + +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "Na próxima etapa, exibimos a janela." + +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 5)." +msgstr "" +"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando " +"a janela é fechada (veja a linha 5)." + +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" +"Para executar o programa, abra um terminal, mude para o diretório do arquivo " +"e digite::" + +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "Exemplo Estendido" + +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." +msgstr "" +"Para algo um pouco mais útil, aqui está a versão PyGObject do programa " +"clássico \"Hello World\"." + +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." +msgstr "" +"Este exemplo difere do exemplo simples, pois subclassificamos :class:`Gtk." +"Window` para definir nossa própria classe :class:`MyWindow`." + +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" +"No construtor da classe, temos que chamar o construtor da superclasse. Além " +"disso, dizemos para definir o valor da propriedade `title` como `Hello " +"World`." + +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" +"As próximas três linhas são usadas para criar um widget de botão, conectar " +"ao seu sinal de 'clicado' e adicioná-lo como filho à janela de nível " +"superior." + +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" +"Assim, o método :meth:`on_button_clicked` será chamado se você clicar no " +"botão." + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" +"O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " +"invés de criar uma instância da classe genérica :class:`Gtk.Window`, criamos " +"uma instância de :class:`MyWindow`." + +#: ../../source/label.txt:2 +msgid "Label" +msgstr "" + +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" +"Os rótulos são o principal método de colocar texto não editável nas janelas, " +"por exemplo, para colocar um título ao lado de um widget :class:`Gtk.Entry`. " +"Você pode especificar o texto no construtor, ou mais tarde com os métodos :" +"meth:`Gtk.Label.set_text` ou :meth:`Gtk.Label.set_markup`." + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" +"A largura da etiqueta será ajustada automaticamente. Você pode produzir " +"rótulos de várias linhas colocando as quebras de linha (\"\\\\n\") na " +"sequência de rótulos." + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" +"Os rótulos podem ser feitos selecionáveis com :meth:`Gtk.Label." +"set_selectable`. Rótulos selecionáveis permitem que o usuário copie o " +"conteúdo do rótulo para a área de transferência. Somente os rótulos que " +"contêm informações úteis para copiar, como mensagens de erro, devem ser " +"selecionáveis." + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" +"O texto do rótulo pode ser justificado usando o método :meth:`Gtk.Label." +"set_justify`. O widget também é capaz de quebra automática de palavras, que " +"pode ser ativado com :meth:`Gtk.Label.set_line_wrap`." + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" +":class:`Gtk.Label` suporta algumas formatações simples, por exemplo, " +"permitindo que você crie algum texto em negrito, colorido ou maior. Você " +"pode fazer isso fornecendo uma string para :meth:`Gtk.Label.set_markup`, " +"usando a sintaxe de marcação do Pango [#pango]_. Por exemplo, ``texto em " +"negrito e texto tachado``. Além disso, :class:`Gtk.Label` suporta " +"hiperlinks clicáveis. A marcação para links é emprestada do HTML, usando os " +"atributos a com href e title. O GTK+ renderiza links semelhantes ao modo " +"como aparecem nos navegadores da web, com texto colorido e sublinhado. O " +"atributo de título é exibido como uma dica de ferramenta no link." + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" +"Os rótulos podem conter *mnemônicos*. Os mnemônicos são caracteres " +"sublinhados no rótulo, usados para navegação pelo teclado. Os mnemônicos são " +"criados fornecendo uma string com um sublinhado antes do caractere " +"mnemônico, como \"_File\", para as funções :meth:`Gtk.Label." +"new_with_mnemonic` ou :meth:`Gtk.Label.set_text_with_mnemonic`. Os " +"mnemônicos ativam automaticamente qualquer widget ativável em que o rótulo " +"esteja dentro, como um :class:`Gtk.Button`; se o rótulo não estiver dentro " +"do widget de destino do mnemônico, você deve informar o rótulo sobre o " +"destino usando :meth:`Gtk.Label.set_mnemonic_widget`." + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, http://developer.gnome.org/pango/stable/" +"PangoMarkupFormat.html" +msgstr "" + +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "Tabela" + +#: ../../source/layout-table.txt:4 +msgid "" +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." +msgstr "" +":class:`Gtk.Table` foi descontinuado desde o GTK+ versão 3.4 e não deve ser " +"usado em código recém-escrito. Use a classe :ref:`layout-grid`." + +#: ../../source/layout-table.txt:8 +msgid "" +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +msgstr "" +"Tabelas nos permite colocar widgets em uma grade similar a :class:`Gtk.Grid`." + +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +msgstr "" +"As dimensões da grade precisam ser especificadas no construtor :class:`Gtk." +"Table`. Para colocar um widget em uma caixa, use :meth:`Gtk.Table.attach`." + +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." +msgstr "" +":meth:`Gtk.Table.set_row_spacing` e :meth:`Gtk.Table.set_col_spacing` " +"definem o espaçamento entre as linhas na linha ou coluna especificada. " +"Observe que, para colunas, o espaço vai para a direita da coluna e, para " +"linhas, o espaço fica abaixo da linha." + +#: ../../source/layout-table.txt:18 +msgid "" +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." +msgstr "" +"Você também pode definir um espaçamento consistente para todas as linhas e/" +"ou colunas com :meth:`Gtk.Table.set_row_spacings` e :meth:`Gtk.Table." +"set_col_spacings`. Observe que, com essas chamadas, a última linha e a " +"última coluna não recebem espaçamento." + +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "Containers de Layout" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" +"Enquanto muitos toolkits GUI exigem que você coloque precisamente widgets em " +"uma janela, usando posicionamento absoluto, o GTK+ usa uma abordagem " +"diferente. Em vez de especificar a posição e o tamanho de cada widget na " +"janela, você pode organizar seus widgets em linhas, colunas e/ou tabelas. O " +"tamanho da sua janela pode ser determinado automaticamente, com base nos " +"tamanhos dos widgets que ela contém. E os tamanhos dos widgets, por sua vez, " +"são determinados pela quantidade de texto que eles contêm, ou os tamanhos " +"mínimo e máximo que você especifica, e/ou como você solicitou que o espaço " +"disponível seja compartilhado entre conjuntos de widgets. Você pode " +"aperfeiçoar seu layout especificando a distância de preenchimento e os " +"valores de centralização para cada um de seus widgets. O GTK+ usa todas " +"essas informações para redimensionar e reposicionar tudo de maneira sensata " +"e suave quando o usuário manipula a janela." + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" +"O GTK+ organiza widgets hierarquicamente, usando *containers*. Eles são " +"invisíveis para o usuário final e são inseridos em uma janela ou colocados " +"entre si para os componentes do layout. Existem dois tipos de contêineres: " +"contêineres filho único, todos descendentes de :class:`Gtk.Bin` e " +"contêineres com vários filhos, que são descendentes de :class:`Gtk." +"Container`. Os mais usados são caixas verticais ou horizontais (:class:`Gtk." +"Box`) e grades (:class:`Gtk.Grid`)." + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" +"Caixas são contêineres invisíveis nos quais podemos empacotar nossos " +"widgets. Ao agrupar widgets em uma caixa horizontal, os objetos são " +"inseridos horizontalmente da esquerda para a direita ou da direita para a " +"esquerda, dependendo se :meth:`Gtk.Box.pack_start` ou :meth:`Gtk.Box." +"pack_end` for usado. Em uma caixa vertical, os widgets são empacotados de " +"cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " +"dentro ou ao lado de outras caixas para criar o efeito desejado." + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" +"Vamos dar uma olhada em uma versão ligeiramente modificada do exemplo " +"estendido com dois botões." + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" +"Primeiro, criamos um contêiner de caixa orientado horizontalmente, onde 6 " +"pixels são colocados entre os filhos. Esta caixa se torna o filho da janela " +"de nível superior." + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "" +"Posteriormente, adicionamos dois botões diferentes ao contêiner da caixa." + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" +"Enquanto com os widgets :meth:`Gtk.Box.pack_start` estão posicionados da " +"esquerda para a direita, :meth:`Gtk.Box.pack_end` os posiciona da direita " +"para a esquerda." + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" +":class:`Gtk.Grid` é um contêiner que organiza seus widgets filhos em linhas " +"e colunas, mas você não precisa especificar as dimensões no construtor. As " +"crianças são adicionadas usando :meth:`Gtk.Grid.attach`. Eles podem abranger " +"várias linhas ou colunas. O método :meth:`Gtk.Grid.attach` usa cinco " +"parâmetros:" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "O parâmetro ``child`` é o :class:`Gtk.Widget` para adicionar." + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "" +"`` left`` é o número da coluna para anexar o lado esquerdo de ``child`` em." + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "" +"`` top`` indica o número da linha para anexar o lado superior do ``child``." + +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." +msgstr "" +"`` width`` e ``height`` indicam o número de colunas que o ``child`` irá " +"abranger, e o número de linhas que o ``child`` irá abranger, respectivamente." + +#: ../../source/layout.txt:79 +msgid "" +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +msgstr "" +"Também é possível adicionar um child ao lado de um child existente, usando :" +"meth:`Gtk.Grid.attach_next_to`, que também usa cinco parâmetros:" + +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "``child`` é o :class:`Gtk.Widget` para adicionar, como acima." + +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" +"``sibling`` é um widget filho existente de ``self`` (uma instância :class:" +"`Gtk.Grid`) ou ``None``. O widget ``child`` será colocado próximo ao " +"``sibling``, ou se ``sibling`` for ``None``, no início ou no final da grade." + +#: ../../source/layout.txt:86 +msgid "" +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." +msgstr "" +"``side`` é um :class:`Gtk.PositionType` indicando o lado do ``sibling`` que " +"``child`` é posicionado ao lado de." + +#: ../../source/layout.txt:88 +msgid "" +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." +msgstr "" +"``width`` e ``height`` indicam o número de colunas e linhas que o widget " +"``child`` abrangerá, respectivamente." + +#: ../../source/layout.txt:91 +msgid "" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." +msgstr "" +"Finalmente, :class:`Gtk.Grid` pode ser usado como :class:`Gtk.Box` usando " +"apenas :meth:`Gtk.Grid.add`, que colocará as crianças uma ao lado da outra " +"na direção determinada por a propriedade \"orientação\" (o padrão é :attr:" +"`Gtk.Orientation.HORIZONTAL`)." + +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "" + +#: ../../source/layout.txt:107 +msgid "" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" +"A :class:`Gtk.ListBox` é um contêiner vertical que contém :class:`Gtk." +"ListBoxRow` filhos. Essas linhas podem ser classificadas e filtradas " +"dinamicamente e os cabeçalhos podem ser adicionados dinamicamente, " +"dependendo do conteúdo da linha. Também permite navegação e seleção de " +"teclado e mouse como uma lista típica." + +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." +msgstr "" +"Usar :class:`Gtk.ListBox` é muitas vezes uma alternativa para :class:`Gtk." +"TreeView`, especialmente quando o conteúdo da lista tem um layout mais " +"complicado do que o permitido por um :class:`Gtk.CellRenderer`, ou quando o " +"conteúdo é interativo (ou seja, tem um botão)." + +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." +msgstr "" +"Embora um :class:`Gtk.ListBox` deva ter apenas :class:`Gtk.ListBoxRow` " +"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." +"Container.add` e um :class:`Gtk.ListBoxRow` widget será automaticamente " +"inserido entre a lista e o widget." + +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "" + +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." +msgstr "" +"A :class:`Gtk.Stack` é um contêiner que mostra apenas um de seus filhos por " +"vez. Em contraste com :class:`Gtk.Notebook`, :class:`Gtk.Stack` não fornece " +"um meio para os usuários alterarem o filho visível. Em vez disso, o widget :" +"class:`Gtk.StackSwitcher` pode ser usado com :class:`Gtk.Stack` para " +"fornecer essa funcionalidade." + +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." +msgstr "" +"Transições entre páginas podem ser animadas como slides ou fades. Isso pode " +"ser controlado com :meth:`Gtk.Stack.set_transition_type`. Essas animações " +"respeitam a configuração \"gtk-enable-animations\"." + +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" +msgstr "" +"A velocidade de transição pode ser ajustada com :meth:`Gtk.Stack." +"set_transition_duration`" + +#: ../../source/layout.txt:145 +msgid "" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." +msgstr "" +"O widget :class:`Gtk.StackSwitcher` atua como um controlador para um :class:" +"`Gtk.Stack`; Ele mostra uma linha de botões para alternar entre as várias " +"páginas do widget de pilha associado." + +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." +msgstr "" +"Todo o conteúdo para os botões vem das propriedades filho do :class:`Gtk." +"Stack`." + +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." +msgstr "" +"É possível associar múltiplos widgets :class:`Gtk.StackSwitcher` com o mesmo " +"widget :class:`Gtk.Stack`." + +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "" + +#: ../../source/layout.txt:166 +msgid "" +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." +msgstr "" +"A :class:`Gtk.HeaderBar` é semelhante a uma horizontal :class:`Gtk.Box`, " +"permite colocar filhos no início ou no final. Além disso, permite que um " +"título seja exibido. O título será centrado em relação à largura da caixa, " +"mesmo que os filhos de ambos os lados ocupem diferentes quantidades de " +"espaço." + +#: ../../source/layout.txt:171 +msgid "" +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." +msgstr "" +"Como o GTK+ agora suporta o Client Side Decoration, um :class:`Gtk." +"HeaderBar` pode ser usado no lugar da barra de título (que é renderizada " +"pelo Gerenciador de Janelas)." + +#: ../../source/layout.txt:174 +msgid "" +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." +msgstr "" +"A :class:`Gtk.HeaderBar` geralmente está localizado na parte superior de uma " +"janela e deve conter controles comumente usados que afetam o conteúdo " +"abaixo. Eles também fornecem acesso a controles de janela, incluindo o botão " +"de fechar janela e o menu de janela." + +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "" + +#: ../../source/layout.txt:190 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." +msgstr "" +"A :class:`Gtk.FlowBox` é um contêiner que posiciona widgets filhos em " +"sequência de acordo com sua orientação." + +#: ../../source/layout.txt:193 +msgid "" +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." +msgstr "" +"Por exemplo, com a orientação horizontal, os widgets serão organizados da " +"esquerda para a direita, iniciando uma nova linha na linha anterior, quando " +"necessário. Reduzir a largura neste caso exigirá mais linhas, portanto, uma " +"altura maior será solicitada." + +#: ../../source/layout.txt:198 +msgid "" +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." +msgstr "" +"Da mesma forma, com a orientação vertical, os widgets serão organizados de " +"cima para baixo, iniciando uma nova coluna à direita quando necessário. " +"Reduzir a altura exigirá mais colunas, portanto será solicitada uma largura " +"maior." + +#: ../../source/layout.txt:202 +msgid "" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." +msgstr "" +"Os filhos de uma :class:`Gtk.FlowBox` podem ser classificados e filtrados " +"dinamicamente." + +#: ../../source/layout.txt:204 +msgid "" +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" +"Embora um :class:`Gtk.FlowBox` deva ter apenas :class:`Gtk.FlowBoxChild` " +"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." +"Container.add`, e a :class:`Gtk.FlowBoxChild`, o widget será " +"automaticamente inserido entre a caixa e o widget." + +#: ../../source/layout.txt:218 +msgid "Notebook" +msgstr "" + +#: ../../source/layout.txt:220 +msgid "" +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." +msgstr "" +"O widget :class:`Gtk.Notebook` é um :class:`Gtk.Container` cujos filhos são " +"páginas que podem ser alternadas usando rótulos de guias ao longo de uma " +"borda." + +#: ../../source/layout.txt:222 +msgid "" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." +msgstr "" +"Existem muitas opções de configuração para o GtkNotebook. Entre outras " +"coisas, você pode escolher em qual borda as abas aparecem (veja :meth:`Gtk." +"Notebook.set_tab_pos`), se houver muitas abas para caber no notebook, elas " +"devem ser maiores ou setas de rolagem serão adicionadas (veja :meth:`Gtk." +"Notebook.set_scrollable`, e se haverá um menu pop-up que permita aos " +"usuários trocar de página (veja :meth:`Gtk.Notebook.popup_enable`, :meth:" +"`Gtk.Notebook.popup_disable`)." + +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." +msgstr "" +":class:`Gtk.UIManager`, :class:`Gtk.Action` e :class:`Gtk.ActionGroup` foram " +"descontinuados desde o GTK+ versão 3.10 e não devem ser usados em código " +"recém-escrito. Use o framework :ref:`application`." + +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." +msgstr "" +"O GTK+ vem com dois tipos diferentes de menus :class:`Gtk.MenuBar` e :class:" +"`Gtk.Toolbar`. :class:`Gtk.MenuBar` é uma barra de menus padrão que contém " +"uma ou mais instâncias :class:`Gtk.MenuItem` ou uma de suas subclasses. Os " +"widgets :class:`Gtk.Toolbar` são usados para acessibilidade rápida às " +"funções comumente usadas de um aplicativo. Exemplos incluem criar um novo " +"documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " +"mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." + +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." +msgstr "" +"Embora existam APIs específicas para criar menus e barras de ferramentas, " +"você deve usar :class:`Gtk.UIManager` e criar instâncias :class:`Gtk." +"Action`. As ações são organizadas em grupos. A :class:`Gtk.ActionGroup` é " +"essencialmente um mapa de nomes para objetos :class:`Gtk.Action`. Todas as " +"ações que fazem sentido usar em um contexto particular devem estar em um " +"único grupo. Vários grupos de ação podem ser usados para uma interface de " +"usuário específica. Na verdade, espera-se que a maioria dos aplicativos não " +"triviais faça uso de vários grupos. Por exemplo, em um aplicativo que pode " +"editar vários documentos, um grupo mantém ações globais (por exemplo, sair, " +"sobre, novo) e um grupo por documento que contém ações que atuam nesse " +"documento (por exemplo, salvar, recortar/copiar/colar etc. ). Os menus de " +"cada janela seriam construídos a partir de uma combinação de dois grupos de " +"ação." + +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "Existem classes diferentes representando diferentes tipos de ações:" + +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" +msgstr "" +":class:`Gtk.Action`: Uma ação que pode ser acionada por um item de menu ou " +"barra de ferramentas" + +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +msgstr "" +":class:`Gtk.ToggleAction`: Uma ação que pode ser alternada entre dois estados" + +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" +msgstr "" +":class:`Gtk.RadioAction`: Uma ação da qual apenas um em um grupo pode estar " +"ativo" + +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" +msgstr "" +":class:`Gtk.RecentAction`: Uma ação que representa uma lista de arquivos " +"usados recentemente" + +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." +msgstr "" +"Ações representam operações que o usuário pode executar, juntamente com " +"algumas informações sobre como ele deve ser apresentado na interface, " +"incluindo seu nome (não para exibição), seu rótulo (para exibição), um " +"acelerador, se um rótulo também indica uma dica de ferramenta como o retorno " +"que é chamado quando a ação é ativada." + +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" +msgstr "" +"Você pode criar ações chamando um dos construtores diretamente e adicionando-" +"os a um :class:`Gtk.ActionGroup` chamando :meth:`Gtk.ActionGroup.add_action` " +"ou :meth:`Gtk.ActionGroup.add_action_with_accel`, ou chamando uma das " +"funções de conveniência:" + +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr "" + +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr "" + +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr "" + +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "Observe que você deve especificar ações para submenus e itens de menu." + +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "Gerenciador de IU" + +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." +msgstr "" +":class:`Gtk.UIManager` fornece uma maneira fácil de criar menus e barras de " +"ferramentas usando uma descrição `XML-like `_." + +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." +msgstr "" +"Primeiro de tudo, você deve adicionar o :class:`Gtk.ActionGroup` ao UI " +"Manager com :meth:`Gtk.UIManager.insert_action_group`. Neste ponto também é " +"uma boa idéia dizer à janela pai para responder aos atalhos de teclado " +"especificados, usando :meth:`Gtk.UIManager.get_accel_group` e :meth:`Gtk." +"Window.add_accel_group`." + +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." +msgstr "" +"Em seguida, você pode definir o layout visível real dos menus e barras de " +"ferramentas e adicionar o layout da interface do usuário. Essa \"string ui\" " +"usa um formato XML, no qual você deve mencionar os nomes das ações que você " +"já criou. Lembre-se de que esses nomes são apenas os identificadores que " +"usamos ao criar as ações. Eles não são o texto que o usuário verá nos menus " +"e nas barras de ferramentas. Fornecemos esses nomes legíveis quando criamos " +"as ações." + +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." +msgstr "" +"Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " +"e adiciona o widget a um container como :class:`Gtk.Box`." + +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "" + +#: ../../source/objects.txt:6 +msgid "" +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." +msgstr "" +"O GObject é o tipo fundamental que fornece os atributos e métodos comuns " +"para todos os tipos de objeto no GTK+, no Pango e em outras bibliotecas " +"baseadas no GObject. A classe :class:`GObject.GObject` fornece métodos para " +"construção e destruição de objetos, métodos de acesso a propriedades e " +"suporte a sinais." + +#: ../../source/objects.txt:11 +msgid "" +"This section will introduce some important aspects about the GObject " +"implementation in Python." +msgstr "" +"Esta seção apresentará alguns aspectos importantes sobre a implementação do " +"GObject no Python." + +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "Herdar de GObject.GObject" + +#: ../../source/objects.txt:17 +msgid "" +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." +msgstr "" +"Um GObject nativo é acessível via :class:`GObject.GObject`. É raramente " +"instanciado diretamente, geralmente usamos classes herdadas. A :class:`Gtk." +"Widget` é uma classe herdada de um :class:`GObject.GObject`. Pode ser " +"interessante criar uma classe herdada para criar um novo widget, como uma " +"caixa de diálogo de configurações." + +#: ../../source/objects.txt:22 +msgid "" +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" +msgstr "" +"Para herdar de :class:`GObject.GObject`, você deve chamar :meth:`GObject." +"GObject.__init__` em seu construtor (se a classe herdar de :class:`Gtk." +"Button`, deve chamar :func:`Gtk.Button.__init__` por exemplo), como no " +"exemplo abaixo:" + +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "Sinais" + +#: ../../source/objects.txt:39 +msgid "" +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." +msgstr "" +"Os sinais conectam eventos específicos de aplicativos arbitrários com " +"qualquer número de ouvintes. Por exemplo, no GTK+, cada evento de usuário " +"(pressionamento de tecla ou mouse) é recebido do servidor X e gera um evento " +"GTK+ sob a forma de uma emissão de sinal em uma determinada instância de " +"objeto." + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" +"Cada sinal é registrado no sistema de tipos junto com o tipo no qual ele " +"pode ser emitido: os usuários do tipo são conectados ao sinal em uma " +"determinada instância de tipo quando registram uma função a ser invocada na " +"emissão do sinal. Os usuários também podem emitir o sinal sozinhos ou " +"interromper a emissão do sinal de dentro de uma das funções conectadas ao " +"sinal." + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "Receba sinais" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "Veja :ref:`signals`" + +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "Crie novos sinais" + +#: ../../source/objects.txt:58 +msgid "" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" +msgstr "" +"Novos sinais podem ser criados adicionando-os a :attr:`GObject.GObject." +"__gsignals__`, um dicionário:" + +#: ../../source/objects.txt:61 +msgid "" +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." +msgstr "" +"Quando um novo sinal é criado, um manipulador de método também pode ser " +"definido, ele será chamado toda vez que o sinal for emitido. É chamado " +"do_signal_name." + +#: ../../source/objects.txt:75 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` indica que este sinal invocará o " +"manipulador do método de objeto (:meth:`do_my_signal` aqui) no primeiro " +"estágio de emissão. As alternativas são :const:`GObject.SIGNAL_RUN_LAST` (o " +"manipulador de método será invocado no terceiro estágio de emissão) e :const:" +"`GObject.SIGNAL_RUN_CLEANUP` (invoca o manipulador de método no último " +"estágio de emissão)." + +#: ../../source/objects.txt:81 +msgid "" +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." +msgstr "" +"A segunda parte, ``None``, indica o tipo de retorno do sinal, geralmente " +"``None``." + +#: ../../source/objects.txt:84 +msgid "" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. This argument type list must end with a " +"comma." +msgstr "" +"``(int,)`` indica os argumentos do sinal, aqui, o sinal só receberá um " +"argumento, cujo tipo é int. Essa lista de tipos de argumentos deve terminar " +"com uma vírgula." + +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" + +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." +msgstr "" +"Um dos ótimos recursos do GObject é seu mecanismo get/set genérico para " +"propriedades de objetos. Cada classe herdada de :class:`GObject.GObject` " +"pode definir novas propriedades. Cada propriedade tem um tipo que nunca muda " +"(por exemplo, str, float, int ...). Por exemplo, eles são usados para :class:" +"`Gtk.Button` onde existe uma propriedade \"label\" que contém o texto do " +"botão." + +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "Use propriedades existentes" + +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." +msgstr "" +"A classe :class:`GObject.GObject` fornece várias funções úteis para " +"gerenciar propriedades existentes, :func:`GObject.GObject.get_property` e :" +"func:`GObject.GObject.set_property`." + +#: ../../source/objects.txt:109 +msgid "" +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." +msgstr "" +"Algumas propriedades também possuem funções dedicadas a elas, chamadas de " +"getter e setter. Para a propriedade \"label\" de um botão, existem duas " +"funções para obter e configurá-las, :func:`Gtk.Button.get_label` e :func:" +"`Gtk.Button.set_label`." + +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "Crie novas propriedades" + +#: ../../source/objects.txt:116 +msgid "" +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." +msgstr "" +"Uma propriedade é definida com um nome e um tipo. Mesmo se o próprio Python " +"for digitado dinamicamente, você não poderá alterar o tipo de uma " +"propriedade depois que ela for definida. Uma propriedade pode ser criada " +"usando :class:`GObject.Property`." + +#: ../../source/objects.txt:131 +msgid "" +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" +msgstr "" +"As propriedades também podem ser somente leitura, se você quiser que algumas " +"propriedades sejam legíveis, mas não graváveis. Para fazer isso, você pode " +"adicionar alguns sinalizadores à definição da propriedade, para controlar o " +"acesso de leitura/gravação. Sinalizadores são :const:`GObject.ParamFlags." +"READABLE` (somente acesso de leitura para código externo), :const:`GObject." +"ParamFlags.WRITABLE` (somente acesso de gravação), :const:`GObject." +"ParamFlags.READWRITE` (publico):" + +#: ../../source/objects.txt:146 +msgid "" +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" +msgstr "" +"Você também pode definir novas propriedades somente leitura com um novo " +"método decorado com :class:`GObject.Property`:" + +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "Você pode obter essa propriedade usando:" + +#: ../../source/objects.txt:170 +msgid "" +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" +msgstr "" +"A API de :class:`GObject.Property` é semelhante ao construído em :py:func:" +"`property`. Você pode criar o setter de propriedades de maneira semelhante à " +"propriedade Python:" + +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" +msgstr "" +"Há também uma maneira de definir valores mínimos e máximos para números, " +"usando um formulário mais detalhado:" + +#: ../../source/objects.txt:227 +msgid "" +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." +msgstr "" +"As propriedades devem ser definidas em :attr:`GObject.GObject." +"__gproperties__`, um dicionário e manipulado em do_get_property e " +"do_set_property." + +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "Veja as propriedades" + +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" +msgstr "" +"Quando uma propriedade é modificada, um sinal é emitido, cujo nome é " +"\"notify::property-name\":" + +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" +msgstr "" +"Note que você tem que usar o nome da propriedade canônica ao se conectar aos " +"sinais de notificação, como explicado em :func:`GObject.Object.signals." +"notify`. Por exemplo, para uma propriedade Python `foo_bar_baz` você " +"conectaria ao sinal `notify::foo-bar-baz` usando" + +#: ../../source/objects.txt:263 +msgid "API" +msgstr "" + +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "Recupera um valor de propriedade." + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "Configure a propriedade *property_name* para *valor*." + +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" +msgstr "" +"Emitir sinal *signal_name*. Argumentos de sinal devem seguir, por ex. se o " +"seu sinal é do tipo ``(int,)``, deve ser emitido com::" + +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." +msgstr "" +"Este método congela todos os sinais \"notify::\" (que são emitidos quando " +"qualquer propriedade é alterada) até que o método :meth:`thaw_notify` seja " +"chamado." + +#: ../../source/objects.txt:288 +msgid "" +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" +msgstr "" +"Recomenda-se usar a instrução *with* ao chamar :meth:`freeze_notify`, dessa " +"forma é assegurado que :meth:`thaw_notify` é chamado implicitamente no final " +"do bloco::" + +#: ../../source/objects.txt:298 +msgid "" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +msgstr "" +"Descongele todos os sinais \"notify::\" que foram descongelados por :meth:" +"`freeze_notify`." + +#: ../../source/objects.txt:300 +msgid "" +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." +msgstr "" +"Recomenda-se não chamar :meth:`thaw_notify` explicitamente mas use :meth:" +"`freeze_notify` juntamente com a instrução *with*." + +#: ../../source/objects.txt:305 +msgid "" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." +msgstr "" +"Bloqueia um manipulador de uma instância para que ele não seja chamado " +"durante qualquer emissão de sinal, a menos que :meth:`handler_unblock` seja " +"chamado para aquele *handler_id*. Assim, \"bloqueando\" um manipulador de " +"sinal significa desativá-lo temporariamente, um manipulador de sinal precisa " +"ser desbloqueado exatamente na mesma quantidade de vezes que foi bloqueado " +"antes de se tornar ativo novamente." + +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" +msgstr "" +"Recomenda-se usar :meth:`handler_block` em conjunto com a instrução *with* " +"que irá chamar :meth:`handler_unblock` implicitamente no final do bloco::" + +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." +msgstr "" +"Desfaz o efeito de :meth:`handler_block`. Um manipulador bloqueado é " +"ignorado durante as emissões do sinal e não será chamado até que tenha sido " +"desbloqueado exatamente a quantidade de vezes que foi bloqueado antes." + +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." +msgstr "" +"É recomendado não chamar explicitamente :meth:`handler_unblock` mas use :" +"meth:`handler_block` junto com a instrução *with*." + +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "Um dicionário onde a classe herdada pode definir novos sinais." + +#: ../../source/objects.txt:332 +msgid "" +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" +msgstr "" +"Cada elemento no dicionário é um novo sinal. A chave é o nome do sinal. O " +"valor é uma tupla, com o formato:" + +#: ../../source/objects.txt:337 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the list of the parameters of the " +"signal, it must end with a comma." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` pode ser substituído por :const:`GObject." +"SIGNAL_RUN_LAST` ou :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` é o tipo " +"de retorno do sinal. ``(int,)`` é a lista dos parâmetros do sinal, deve " +"terminar com uma vírgula." + +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." +msgstr "" +"O dicionário :attr:`__gproperties__` é uma propriedade de classe onde você " +"define as propriedades do seu objeto. Esta não é a maneira recomendada de " +"definir novas propriedades, o método escrito acima é muito menos detalhado. " +"Os benefícios desse método é que uma propriedade pode ser definida com mais " +"configurações, como o mínimo ou o máximo para números." + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "A chave é o nome da propriedade" + +#: ../../source/objects.txt:354 +msgid "" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" +msgstr "" +"O valor é uma tupla que descreve a propriedade. O número de elementos dessa " +"tupla depende de seu primeiro elemento, mas a tupla sempre conterá pelo " +"menos os seguintes itens:" + +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +msgstr "" +"O primeiro elemento é o tipo da propriedade (por exemplo, ``int``, " +"``float``...)." + +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." +msgstr "" +"O segundo elemento é o apelido da propriedade, que é uma string com uma " +"breve descrição da propriedade. Isso geralmente é usado por programas com " +"fortes recursos de introspecção, como o construtor de interface gráfica de " +"usuário `Glade`_." + +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." +msgstr "" +"A terceira é a descrição da propriedade ou sinopse, que é outra string com " +"uma descrição mais longa da propriedade. Também usado pelo `Glade`_ e " +"programas similares." + +#: ../../source/objects.txt:369 +msgid "" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +msgstr "" +"O último (que não é necessariamente o último, como veremos mais adiante) é o " +"sinalizador da propriedade :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." + +#: ../../source/objects.txt:373 +msgid "" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" +msgstr "" +"O comprimento absoluto da tupla depende do tipo de propriedade (o primeiro " +"elemento da tupla). Assim, temos as seguintes situações:" + +#: ../../source/objects.txt:376 +msgid "" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." +msgstr "" +"Se o tipo for ``bool`` ou ``str``, o quarto elemento é o valor padrão da " +"propriedade." + +#: ../../source/objects.txt:379 +msgid "" +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." +msgstr "" +"Se o tipo for ``int`` ou ``float``, o quarto elemento é o valor mínimo " +"aceito, o quinto elemento é o valor máximo aceito e o sexto elemento é o " +"valor padrão." + +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "Se o tipo não for um desses, não há elemento extra." + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." +msgstr "" +"Invoque o manipulador de método de objeto no primeiro estágio de emissão." + +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." +msgstr "" +"Invoque o manipulador de método de objeto no terceiro estágio de emissão." + +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "" +"Invoque o manipulador do método de objeto no último estágio de emissão." + +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "A propriedade é legível." + +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "A propriedade é gravável." + +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "A propriedade é legível e gravável." + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "" + +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a seperate window used for displaying additional " +"information and are often used as a part of button menus and context menus. " +"Their uses are similar to those of dialog windows with the advantage of " +"being less disruptive and having a connection with the widget the popover is " +"pointing to. Popovers have are visually connected to a related widget with a " +"small triangle." +msgstr "" +"O :class:`Gtk.Popover` é uma janela separada usada para exibir informações " +"adicionais e é frequentemente usada como parte de menus de botão e menus de " +"contexto. Seus usos são semelhantes aos das janelas de diálogo, com a " +"vantagem de ser menos prejudicial e ter uma conexão com o widget para o qual " +"o popover está apontando. Os popovers estão visualmente conectados a um " +"widget relacionado com um pequeno triângulo." + +#: ../../source/popover.txt:10 +msgid "" +"ApPopover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Widget.show_all`." +msgstr "" +"O ApPopover pode ser criado com :class:`Gtk.Popover`; para abrir o popover " +"use :meth:`Gtk.Widget.show_all`." + +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "Popover Personalizado" + +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." +msgstr "" +"Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." +"add`." + +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "" + +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." +msgstr "" +"Um popover pode ser criado a partir de :class:`Gio.MenuModel` usando :meth:" +"`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" +"`Gtk.Popover.bind_model`." + +#: ../../source/popover.txt:43 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "" + +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "Barra de Progresso" + +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." +msgstr "" +"O :class:`Gtk.ProgressBar` é normalmente usado para exibir o progresso de " +"uma operação longa. Ele fornece uma pista visual de que o processamento está " +"em andamento. O :class:`Gtk.ProgressBar` pode ser usado em dois modos " +"diferentes: *modo de porcentagem* e *modo de atividade*." + +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." +msgstr "" +"Quando uma aplicação pode determinar quanto trabalho precisa ocorrer (por " +"exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu " +"progresso, ela pode usar :class:`Gtk.ProgressBar` no modo *percentage* e o " +"usuário vê uma barra crescente indicando a porcentagem do trabalho que foi " +"concluído. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.set_fraction` periodicamente para atualizar a barra de " +"progresso, passando um float entre 0 e 1 para fornecer o novo valor " +"percentual." + +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." +msgstr "" +"Quando um aplicativo não tem uma maneira precisa de saber a quantidade de " +"trabalho a ser feito, ele pode usar o *modo de atividade*, que mostra a " +"atividade de um bloco se movendo para frente e para trás na área de " +"progresso. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.pulse` periodicamente para atualizar a barra de progresso. Você " +"também pode escolher o tamanho do passo, com o método :meth:`Gtk.ProgressBar." +"set_pulse_step`." + +#: ../../source/progressbar.txt:24 +msgid "" +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." +msgstr "" +"Por padrão, :class:`Gtk.ProgressBar` é horizontal e da esquerda para a " +"direita, mas você pode alterá-lo para uma barra de progresso vertical usando " +"o método :meth:`Gtk.ProgressBar.set_orientation`. Mudar a direção da barra " +"de progresso pode ser feito usando :meth:`Gtk.ProgressBar.set_inverted`. :" +"class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " +"chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." +"set_show_text`." + +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "" + +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." +msgstr "" +"O :class:`Gtk.Spinner` exibe uma animação giratória do tamanho de um ícone. " +"É frequentemente usado como uma alternativa a :class:`GtkProgressBar` para " +"exibir atividade indefinida, em vez de progresso real." + +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." +msgstr "" +"Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" +"meth:`Gtk.Spinner.stop`." + +# e121e6594e0e4da9a1621a2377ef4958 +#: ../source/stock.txt:4 +msgid "Stock Items" +msgstr "" + +# 606b231d71674442a3f5d52d748963fa +#: ../source/stock.txt:6 +msgid "" +"Stock items represent commonly-used menu or toolbar items such as \"Open\" " +"or \"Exit\". Each stock item is identified by a stock ID; stock IDs are just " +"strings, but constants such as :attr:`Gtk.STOCK_OPEN` are provided to avoid " +"typing mistakes in the strings." +msgstr "" + +# 414f2abe421e4978b47ca5427fb3f106 +# ddb9102f827b473eae086c933a8988da +# f116631764a1416e8d65f881b21f294d +# d6cefcc39cf64f0490a9ac6344093a1f +# 68e79a9579a9477ab9cc07c8831ac586 +# e7154d34aab04729a7c0b6ec84d8997f +# a4ad7d8ce49541d5aef4ca38acda2f75 +# 7205f6fbc7614699813f09ad4ad41b0d +# c7c278f8e45f4a0e90dd8e9f4efba75a +# f731da1a0b0d4a4f90f214d0e3068fad +# 3dcc064472ce433493951bdc676a1de1 +# 401ce8dc69d64ed2979b2c2bbabca805 +# e381d63cbcbb477bb7f54fc8fdedded0 +# a82fab50ef9a490aafffe735117b1b0e +# 4311fbff8eb04d1ababc0ea72a17877b +# 32791b18cb8048b598a5372d03433b5a +#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 +#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 +#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 +#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 +#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 +#: ../source/stock.txt:495 +msgid "LTR variant:" +msgstr "" + +# 856d301cc54844699657d94b81c62f38 +# c828bd161d3947f48d164903af1c15b1 +# fcd887eb429b406d87b598cee2af6456 +# 540c4c3bfb5549b2965d263b6adee0ff +# 8d3280e44d664904a253934d4a763ca8 +# dd41de5058984509aada4b41e5d15292 +# 2752da4a0eee46f49d1c1a8b212cb842 +# 7c3f745178dc46f5b49ef867c7d54c1c +# 7488f736d91c4f109c0b7f17ef0bc955 +# f592f6173a1e4362a78439441cf06a98 +# 3da43acde56548a190140395393f3f7a +# be82f292d16a4b86812d45ff60b39cc1 +# dc857a9abef7449db73e5eefb7bc51ac +# 75afb699f83c480e92f2398247b3bee9 +# b0643da317004916aabc5e5768a55df7 +# 5d2580d604fa4db980345d496d6d95d1 +#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 +#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 +#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 +#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 +#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 +#: ../source/stock.txt:499 +msgid "RTL variant:" +msgstr "" + +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "Editor de Texto Multilinha" + +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." +msgstr "" +"O widget :class:`Gtk.TextView` pode ser usado para exibir e editar grandes " +"quantidades de texto formatado. Como o :class:`Gtk.TreeView`, ele possui um " +"design de modelo/visualização. Neste caso, o :class:`Gtk.TextBuffer` é o " +"modelo que representa o texto que está sendo editado. Isto permite que dois " +"ou mais widgets :class:`Gtk.TextView` compartilhem o mesmo :class:`Gtk." +"TextBuffer`, e permite que os buffers de texto sejam exibidos de forma " +"ligeiramente diferente. Ou você pode manter vários buffers de texto e optar " +"por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." +"TextView`." + +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." +msgstr "" +"O :class:`Gtk.TextView` é o frontend com o qual o usuário pode adicionar, " +"editar e excluir dados textuais. Eles são comumente usados para editar " +"várias linhas de texto. Ao criar um :class:`Gtk.TextView` ele contém seu " +"próprio padrão :class:`Gtk.TextBuffer`, que você pode acessar através do " +"método :meth:`Gtk.TextView.get_buffer`." + +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." +msgstr "" +"Por padrão, o texto pode ser adicionado, editado e removido da :class:`Gtk." +"TextView`. Você pode desabilitar isso chamando :meth:`Gtk.TextView." +"set_editable`. Se o texto não for editável, você geralmente deseja ocultar o " +"cursor de texto com :meth:`Gtk.TextView.set_cursor_visible` também. Em " +"alguns casos, pode ser útil definir a justificação do texto com :meth:`Gtk." +"TextView.set_justification`. O texto pode ser exibido na borda esquerda, (:" +"attr:`Gtk.Justification.LEFT`), na extremidade direita (:attr:`Gtk." +"Justification.RIGHT`), centralizado (:attr:`Gtk.Justification.CENTER`), ou " +"distribuído em toda a largura (:attr:`Gtk.Justification.FILL`)." + +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." +msgstr "" +"Outra configuração padrão do widget :class:`Gtk.TextView` é que linhas " +"longas de texto continuarão horizontalmente até que uma quebra seja " +"inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " +"chame :meth:`Gtk.TextView.set_wrap_mode`." + +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." +msgstr "" +"O :class:`Gtk.TextBuffer` é o núcleo do widget :class:`Gtk.TextView` e é " +"usado para armazenar qualquer texto que esteja sendo exibido na :class:`Gtk." +"TextView`. Definir e recuperar o conteúdo é possível com :meth:`Gtk." +"TextBuffer.set_text` e :meth:`Gtk.TextBuffer.get_text`. No entanto, a maior " +"parte da manipulação de texto é realizada com *iteradores*, representados " +"por um :class:`Gtk.TextIter`. Um iterador representa uma posição entre dois " +"caracteres no buffer de texto. Iteradores não são válidos indefinidamente; " +"sempre que o buffer é modificado de uma maneira que afeta o conteúdo do " +"buffer, todos os iteradores pendentes se tornam inválidos." + +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." +msgstr "" +"Por causa disso, os iteradores não podem ser usados para preservar posições " +"nas modificações do buffer. Para preservar uma posição, use :class:`Gtk." +"TextMark`. Um buffer de texto contém duas marcas internas; uma marca \"insert" +"\" (que é a posição do cursor) e a marca \"selection_bound\". Ambos podem " +"ser recuperados usando :meth:`Gtk.TextBuffer.get_insert` e :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectivamente. Por padrão, a localização " +"de um :class:`Gtk.TextMark` não é mostrada. Isso pode ser alterado chamando :" +"meth:`Gtk.TextMark.set_visible`." + +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." +msgstr "" +"Existem muitos métodos para recuperar um :class:`Gtk.TextIter`. Por " +"exemplo, :meth:`Gtk.TextBuffer.get_start_iter` retorna um iterador apontando " +"para a primeira posição no buffer de texto, enquanto :meth:`Gtk.TextBuffer." +"get_end_iter` retorna um iterador apontando após o último caractere válido. " +"A recuperação dos limites do texto selecionado pode ser obtida chamando :" +"meth:`Gtk.TextBuffer.get_selection_bounds`." + +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +msgstr "" +"Para inserir texto em uma posição específica use :meth:`Gtk.TextBuffer." +"insert`. Outro método útil é :meth:`Gtk.TextBuffer.insert_at_cursor` que " +"insere texto onde quer que o cursor esteja posicionado no momento. Para " +"remover partes do buffer de texto, use :meth:`Gtk.TextBuffer.delete`." + +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." +msgstr "" +"Além disso, :class:`Gtk.TextIter` pode ser usado para localizar " +"correspondências textuais no buffer usando :meth:`Gtk.TextIter." +"forward_search` e :meth:`Gtk.TextIter.backward_search`. Os iters inicial e " +"final são usados como ponto de partida da pesquisa e avançam/retrocedem " +"dependendo dos requisitos." + +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "" + +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." +msgstr "" +"O texto em um buffer pode ser marcado com tags. Uma tag é um atributo que " +"pode ser aplicado a um intervalo de texto. Por exemplo, uma tag pode ser " +"chamada de \"negrito\" e tornar o texto dentro da tag em negrito. No " +"entanto, o conceito de tag é mais geral do que isso; as tags não precisam " +"afetar a aparência. Eles podem afetar o comportamento de pressionamentos de " +"mouse e de tecla, \"bloquear\" um intervalo de texto para que o usuário não " +"possa editá-lo ou inúmeras outras coisas. Uma tag é representada por um " +"objeto :class:`Gtk.TextTag`. Um :class:`Gtk.TextTag` pode ser aplicado a " +"qualquer número de intervalos de texto em qualquer número de buffers." + +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." +msgstr "" +"Cada tag é armazenada em :class:`Gtk.TextTagTable`. Uma tabela de tags " +"define um conjunto de tags que podem ser usadas juntas. Cada buffer tem uma " +"tabela de tags associada a ele; somente tags dessa tabela de tags podem ser " +"usadas com o buffer. No entanto, uma única tabela de tags pode ser " +"compartilhada entre vários buffers." + +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" +msgstr "" +"Para especificar que algum texto no buffer deve ter uma formatação " +"específica, você deve definir uma tag para manter as informações de " +"formatação e, em seguida, aplicar essa tag à região do texto usando :meth:" +"`Gtk.TextBuffer.create_tag` e :meth:`Gtk.TextBuffer.apply_tag`::" + +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "A seguir estão alguns dos estilos comuns aplicados ao texto:" + +# nome da propriedade trocado +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "Cor de fundo (propriedade \"background\")" + +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "Cor de primeiro plano (propriedade \"foreground\")" + +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "Sublinhado (propriedade \"underline\")" + +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "Negrito (propriedade \"weight\")" + +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "Itálico (propriedade \"style\")" + +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "Tachado (propriedade \"strikethrough\")" + +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "Justificação (propriedade de \"justification\")" + +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "Tamanho (propriedades \"size\" e \"size-points\")" + +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "Quebra automática de texto (propriedade \"wrap-mode\")" + +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." +msgstr "" +"Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." +"TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " +"chamando :meth:`Gtk.TextBuffer.remove_all_tags`." + +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "Widgets de Árvore e Lista" + +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" +msgstr "" +"A :class:`Gtk.TreeView` e seus widgets associados são uma maneira " +"extremamente poderosa de exibir dados. Eles são usados em conjunto com um :" +"class:`Gtk.ListStore` ou :class:`Gtk.TreeStore` e fornecem uma maneira de " +"exibir e manipular dados de várias maneiras, incluindo:" + +#: ../../source/treeview.txt:9 +msgid "Automatically updates when data added, removed or edited" +msgstr "" +"Atualiza automaticamente quando os dados são adicionados, removidos ou " +"editados" + +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "Suporte a Arrastar e Soltar" + +#: ../../source/treeview.txt:11 +msgid "Sorting of data" +msgstr "Classificação de dados" + +#: ../../source/treeview.txt:12 +msgid "Support embedding widgets such as check boxes, progress bars, etc." +msgstr "" +"Suporte a incorporação de widgets, como caixas de seleção, barras de " +"progresso, etc." + +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "Colunas reordenáveis e redimensionáveis" + +#: ../../source/treeview.txt:14 +msgid "Filtering of data" +msgstr "Filtragem de dados" + +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." +msgstr "" +"Com o poder e a flexibilidade de um :class:`Gtk.TreeView` vem a " +"complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " +"capazes de utilizá-lo corretamente devido ao número de métodos necessários." + +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." +msgstr "" +"Cada :class:`Gtk.TreeView` possui um :class:`Gtk.TreeModel`, que contém os " +"dados exibidos pelo TreeView. Cada :class:`Gtk.TreeModel` pode ser usado por " +"mais de um :class:`Gtk.TreeView`. Por exemplo, isso permite que os mesmos " +"dados subjacentes sejam exibidos e editados de duas maneiras diferentes ao " +"mesmo tempo. Ou os 2 modos de exibição podem exibir colunas diferentes dos " +"mesmos dados do modelo, da mesma forma que duas consultas SQL (ou " +"\"visualizações\") podem mostrar campos diferentes da mesma tabela de banco " +"de dados." + +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." +msgstr "" +"Embora você possa teoricamente implementar seu próprio Modelo, você " +"normalmente usará as classes de modelo :class:`Gtk.ListStore` ou :class:`Gtk." +"TreeStore`. :class:`Gtk.ListStore` contém linhas simples de dados, e cada " +"linha não tem filhos, enquanto :class:`Gtk.TreeStore` contém linhas de " +"dados, e cada linha pode ter linhas filhas." + +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." +msgstr "" +"Ao construir um modelo, você deve especificar os tipos de dados para cada " +"coluna que o modelo contém." + +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." +msgstr "" +"Isso cria um armazenamento de lista com três colunas, duas colunas de string " +"e uma coluna flutuante." + +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." +msgstr "" +"A adição de dados ao modelo é feita usando :meth:`Gtk.ListStore.append` ou :" +"meth:`Gtk.TreeStore.append`, dependendo de qual tipo de modelo foi criado." + +#: ../../source/treeview.txt:54 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." +msgstr "" +"Ambos os métodos retornam uma instância :class:`Gtk.TreeIter`, que aponta " +"para a localização da linha recém-inserida. Você pode recuperar um :class:" +"`Gtk.TreeIter` chamando :meth:`Gtk.TreeModel.get_iter`." + +#: ../../source/treeview.txt:58 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." +msgstr "" +"Depois que os dados foram inseridos, você pode recuperar ou modificar dados " +"usando o iterador de árvore e o índice de coluna." + +#: ../../source/treeview.txt:66 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." +msgstr "" +"Assim como no objeto built-in :class:`list` do Python, você pode usar :func:" +"`len` para obter o número de linhas e usar fatias para recuperar ou definir " +"valores." + +#: ../../source/treeview.txt:80 +msgid "Iterating over all rows of a tree model is very simple as well." +msgstr "" +"Iterar sobre todas as linhas de um modelo de árvore é muito simples também." + +#: ../../source/treeview.txt:88 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows and its children, use the " +"``print_tree_store`` function." +msgstr "" +"Tenha em mente que, se você usar :class:`Gtk.TreeStore`, o código acima irá " +"apenas iterar sobre as linhas do nível superior, mas não os filhos dos nós. " +"Para iterar sobre todas as linhas e seus filhos, use a função " +"``print_tree_store``." + +#: ../../source/treeview.txt:106 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." +msgstr "" +"Além de acessar valores armazenados em um :class:`Gtk.TreeModel` com o " +"método list-like mencionado acima, também é possível usar as instâncias :" +"class:`Gtk.TreeIter` ou :class:`Gtk.TreePath`. Ambos fazem referência a uma " +"linha específica em um modelo de árvore. Pode-se converter um caminho para " +"um iterador chamando :meth:`Gtk.TreeModel.get_iter`. Como :class:`Gtk." +"ListStore` contém apenas um nível, ou seja, nós não têm nenhum nó filho, um " +"caminho é essencialmente o índice da linha que você deseja acessar." + +#: ../../source/treeview.txt:123 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." +msgstr "" +"No caso de :class:`Gtk.TreeStore`, um caminho é uma lista de índices ou uma " +"string. O formulário de string é uma lista de números separados por dois " +"pontos. Cada número refere-se ao deslocamento nesse nível. Assim, o caminho " +"\"0\" refere-se ao nó raiz e o caminho \"2: 4\" refere-se ao quinto filho do " +"terceiro nó." + +#: ../../source/treeview.txt:136 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." +msgstr "" +"Instâncias de :class:`Gtk.TreePath` podem ser acessadas como listas, " +"``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " +"para, e ``treepath[i]`` retorna o índice do filho no nível *i*." + +#: ../../source/treeview.txt:142 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." +msgstr "" +"Embora existam vários modelos diferentes para escolher, há apenas um widget " +"de visualização para lidar. Funciona com a lista ou com o armazenamento em " +"árvore. Configurar um :class:`Gtk.TreeView` não é uma tarefa difícil. Ele " +"precisa de um :class:`Gtk.TreeModel` para saber de onde recuperar seus " +"dados, seja passando-o para o construtor :class:`Gtk.TreeView`, ou chamando :" +"meth:`Gtk.TreeView.set_model`." + +#: ../../source/treeview.txt:153 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." +msgstr "" +"Uma vez que o widget :class:`Gtk.TreeView` possua um modelo, ele precisará " +"saber como exibir o modelo. Ele faz isso com colunas e renderizadores de " +"célula." + +#: ../../source/treeview.txt:156 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." +msgstr "" +"Os renderizadores de célula são usados para desenhar os dados no modelo de " +"árvore de uma maneira. Existem vários renderizadores de célula que vêm com o " +"GTK+, por exemplo :class:`Gtk.CellRendererText`, :class:`Gtk." +"CellRendererPixbuf` e :class:`Gtk.CellRendererToggle`. Além disso, é " +"relativamente fácil escrever um renderizador personalizado por conta própria." + +#: ../../source/treeview.txt:162 +msgid "" +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." +msgstr "" +"A :class:`Gtk.TreeViewColumn` é o objeto que :class:`Gtk.TreeView` usa para " +"organizar as colunas verticais na visualização em árvore. Ele precisa saber " +"o nome da coluna para rotular o usuário, que tipo de renderizador de célula " +"deve ser usado e qual parte dos dados deve ser recuperada do modelo para uma " +"determinada linha." + +#: ../../source/treeview.txt:173 +msgid "" +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." +msgstr "" +"Para renderizar mais de uma coluna de modelo em uma coluna de visão, você " +"precisa criar uma instância :class:`Gtk.TreeViewColumn` e usar :meth:`Gtk." +"TreeViewColumn.pack_start` para adicionar as colunas de modelo a ela." + +#: ../../source/treeview.txt:193 +msgid "The Selection" +msgstr "A Seleção" + +#: ../../source/treeview.txt:194 +msgid "" +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." +msgstr "" +"A maioria dos aplicativos precisará não apenas lidar com a exibição de " +"dados, mas também receber eventos de entrada dos usuários. Para fazer isso, " +"basta obter uma referência a um objeto de seleção e conectar-se ao sinal " +"\"changed\"." + +#: ../../source/treeview.txt:203 +msgid "Then to retrieve data for the row selected:" +msgstr "Em seguida, para recuperar dados para a linha selecionada:" + +#: ../../source/treeview.txt:212 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +msgstr "" +"Você pode controlar quais seleções são permitidas chamando :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` não funciona " +"se o modo de seleção estiver definido como :attr:`Gtk.SelectionMode." +"MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows`." + +#: ../../source/treeview.txt:219 +msgid "Sorting" +msgstr "Classificação" + +#: ../../source/treeview.txt:220 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." +msgstr "" +"A classificação é um recurso importante para as visualizações em árvore e é " +"suportada pelos modelos de árvore padrão (:class:`Gtk.TreeStore` e :class:" +"`Gtk.ListStore`), que implementam a interface :class:`Gtk.TreeSortable`." + +#: ../../source/treeview.txt:223 +msgid "Sorting by clicking on columns" +msgstr "Classificando clicando em colunas" + +#: ../../source/treeview.txt:224 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." +msgstr "" +"Uma coluna de um :class:`Gtk.TreeView` pode ser facilmente ordenada com uma " +"chamada para :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Depois, a coluna " +"pode ser ordenada clicando no cabeçalho." + +#: ../../source/treeview.txt:227 +msgid "" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." +msgstr "" +"Primeiro precisamos de um simples :class:`Gtk.TreeView` e um :class:`Gtk." +"ListStore` como modelo." + +#: ../../source/treeview.txt:246 +msgid "" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." +msgstr "" +"O próximo passo é ativar a classificação. Note que o *column_id* (``0`` no " +"exemplo) refere-se à coluna do modelo e **não** à coluna do TreeView." + +#: ../../source/treeview.txt:253 +msgid "Setting a custom sort function" +msgstr "Definindo uma função de classificação personalizada" + +#: ../../source/treeview.txt:254 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" +msgstr "" +"Também é possível definir uma função de comparação personalizada para " +"alterar o comportamento de classificação. Como exemplo, criaremos uma função " +"de comparação que classifica maiúsculas e minúsculas. No exemplo acima, a " +"lista classificada parecia com::" + +#: ../../source/treeview.txt:267 +msgid "The case-sensitive sorted list will look like::" +msgstr "" +"A lista classificada com distinção entre maiúsculas e minúsculas será " +"semelhante a::" + +# Alterar o original para corrigir a explicação +#: ../../source/treeview.txt:278 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." +msgstr "" +"Em primeiro lugar, é necessária uma função de comparação. Esta função obtém " +"duas linhas e tem que retornar um inteiro negativo se o primeiro deve vir " +"antes do segundo, zero se eles forem iguais e um inteiro positivo se o " +"segundo vier antes do primeiro." + +#: ../../source/treeview.txt:294 +msgid "" +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" +"Então a função sort deve ser definida por :meth:`Gtk.TreeSortable." +"set_sort_func`." + +#: ../../source/treeview.txt:301 +msgid "Filtering" +msgstr "Filtrando" + +#: ../../source/treeview.txt:302 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." +msgstr "" +"Ao contrário da classificação, a filtragem não é tratada pelos dois modelos " +"que vimos anteriormente, mas pela classe :class:`Gtk.TreeModelFilter`. Esta " +"classe, como :class:`Gtk.TreeStore` e :class:`Gtk.ListStore`, é uma :class:" +"`Gtk.TreeModel`. Ele age como uma camada entre o modelo \"real\" (a :class:" +"`Gtk.TreeStore` ou a :class:`Gtk.ListStore`), ocultando alguns elementos " +"para a view. Na prática, ele fornece o :class:`Gtk.TreeView` com um " +"subconjunto do modelo subjacente. Instâncias de :class:`Gtk.TreeModelFilter` " +"podem ser empilhadas umas sobre as outras, para usar múltiplos filtros no " +"mesmo modelo (da mesma forma que você usaria cláusulas \"AND\" em uma " +"requisição SQL). Eles também podem ser encadeados com instâncias :class:`Gtk." +"TreeModelSort`." + +#: ../../source/treeview.txt:304 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +msgstr "" +"Você pode criar uma nova instância de :class:`Gtk.TreeModelFilter` e dar a " +"ela um modelo para filtrar, mas a maneira mais fácil é gerá-lo diretamente " +"do modelo filtrado, usando o método :meth:`Gtk.TreeModel.filter_new` método." + +#: ../../source/treeview.txt:310 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"needs a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" +"Da mesma forma que funciona a função de classificação, o :class:`Gtk." +"TreeModelFilter` precisa de uma função de \"visibilidade\", que, dada uma " +"linha do modelo subjacente, retornará um booleano indicando se essa linha " +"deve ser filtrada ou não. É definido por :meth:`Gtk.TreeModelFilter." +"set_visible_func`:" + +#: ../../source/treeview.txt:316 +msgid "" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." +msgstr "" +"Vejamos um exemplo completo que usa a pilha inteira :class:`Gtk.ListStore` " +"- :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView`." + +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "Como Lidar com Sequências de Caracteres" + +#: ../../source/unicode.txt:4 +msgid "" +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." +msgstr "" +"Esta seção explica como as cadeias de caracteres são representadas no Python " +"2.x, no Python 3.x e no GTK+ e discute erros comuns que surgem ao trabalhar " +"com strings." + +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "Definições" + +#: ../../source/unicode.txt:9 +msgid "" +"Conceptional, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." +msgstr "" +"Conceitual, uma string é uma lista de caracteres como 'A', 'B', 'C' ou 'É'. " +"**Caracteres** são representações abstratas e seu significado depende do " +"idioma e do contexto em que são usados. O padrão Unicode descreve como os " +"caracteres são representados por **pontos de código**. Por exemplo, os " +"caracteres acima são representados com os pontos de código U+0041, U+0042, U" +"+0043 e U+00C9, respectivamente. Basicamente, os pontos de código são " +"números no intervalo de 0 a 0x10FFFF." + +#: ../../source/unicode.txt:17 +msgid "" +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" +msgstr "" +"Como mencionado anteriormente, a representação de uma string como uma lista " +"de pontos de código é abstrata. Para converter essa representação abstrata " +"em uma sequência de bytes, a cadeia Unicode deve ser **codificada**. A forma " +"mais simples de codificação é ASCII e é executada da seguinte maneira:" + +#: ../../source/unicode.txt:22 +msgid "" +"If the code point is < 128, each byte is the same as the value of the code " +"point." +msgstr "" +"Se o ponto de código for < 128, cada byte é o mesmo que o valor do ponto de " +"código." + +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" +msgstr "" +"Se o ponto de código for 128 ou maior, a string Unicode não poderá ser " +"representada nessa codificação. (Python dispara uma exceção :exc:" +"`UnicodeEncodeError` neste caso.)" + +#: ../../source/unicode.txt:29 +msgid "" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." +msgstr "" +"Embora a codificação ASCII seja simples de aplicar, ela só pode codificar " +"128 caracteres diferentes, o que não é suficiente. Uma das codificações mais " +"usadas para resolver esse problema é o UTF-8 (ele pode manipular qualquer " +"ponto de código Unicode). UTF significa \"Formato de Transformação Unicode\" " +"e \"8\" significa que números de 8 bits são usados na codificação." + +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "" + +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "Suporte Unicode do Python 2.x" + +#: ../../source/unicode.txt:41 +msgid "" +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" +msgstr "" +"O Python 2 vem com dois tipos diferentes de objetos que podem ser usados " +"para representar strings :class:`str` e :class:`unicode`. Instâncias do " +"último são usadas para expressar cadeias Unicode, enquanto instâncias do " +"tipo :class:`str` são representações de byte (a string codificada). Sob o " +"capô, Python representa strings Unicode como números inteiros de 16 ou 32 " +"bits, dependendo de como o interpretador Python foi compilado. Strings " +"Unicode podem ser convertidas em strings de 8 bits com :meth:`unicode." +"encode`::" + +#: ../../source/unicode.txt:58 +msgid "" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" +msgstr "" +"As strings de 8 bits do Python têm um método :meth:`str.decode` que " +"interpreta a string usando a codificação fornecida::" + +#: ../../source/unicode.txt:68 +msgid "" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +msgstr "" +"Infelizmente, o Python 2.x permite que você misture :class:`unicode` e :" +"class:`str` se a string de 8 bits contivesse apenas bytes de 7 bits (ASCII), " +"mas obteria :exc:`UnicodeDecodeError` se contivesse valores não-ASCII:" + +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "Unicode no GTK+" + +#: ../../source/unicode.txt:86 +msgid "" +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" +msgstr "" +"O GTK+ usa strings codificadas em UTF-8 para todo o texto. Isto significa " +"que se você chamar um método que retorna uma string, você sempre obterá uma " +"instância do tipo :class:`str`. O mesmo se aplica aos métodos que esperam um " +"ou mais strings como parâmetro, eles devem ser codificados em UTF-8. No " +"entanto, por conveniência, o PyGObject converterá automaticamente qualquer " +"instância :class:`unicode` para :class:`str` se fornecido como argumento::" + +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." +msgstr "" +"Observe o aviso no final. Apesar de chamarmos :meth:`Gtk.Label.set_text` com " +"uma instância de :class:`unicode` como argumento, :meth:`Gtk.Label.get_text` " +"sempre retornará uma instância :class:`str`. Assim, ``txt`` e " +"``unicode_string`` *não* são iguais." + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have to " +"make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" +"Isto é especialmente importante se você quiser internacionalizar seu " +"programa usando `gettext `_. " +"Você precisa ter certeza de que gettext retornará sequências de 8 bits " +"codificadas em UTF-8 para todos os idiomas. Em geral, recomenda-se não usar " +"objetos :class:`unicode` em aplicações GTK+ e usar somente objetos " +"codificados em UTF-8 :class:`str`, já que o GTK+ não se integra totalmente a " +"objetos :class:`unicode`. Caso contrário, você teria que decodificar os " +"valores de retorno para cadeias de caracteres Unicode cada vez que você " +"chamar um método GTK+::" + +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "" + +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "Suporte Unicode do Python 3.x" + +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +msgstr "" +"Desde o Python 3.0, todas as strings são armazenadas como Unicode em uma " +"instância do tipo :class:`str`. *Codificado* strings, por outro lado, são " +"representados como dados binários na forma de instâncias do tipo :class:" +"`bytes`. Conceitualmente, :class:`str` refere-se a *texto*, enquanto :class:" +"`bytes` refere-se a *dados*. Use :meth:`str.encode` para ir de :class:`str` " +"para :class:`bytes` e :meth:`bytes.decode` para ir de :class:`bytes` para :" +"class:`str`." + +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" +msgstr "" +"Além disso, não é mais possível misturar strings Unicode com strings " +"codificadas, porque resultará em um :exc:`TypeError`::" + +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" +msgstr "" +"Como consequência, as coisas são muito mais limpas e consistentes com o " +"Python 3.x, porque o PyGObject irá automaticamente codificar/decodificar " +"para/de UTF-8 se você passar uma string para um método ou um método retornar " +"uma string. Strings, ou *text*, sempre serão representados como instâncias " +"de :class:`str` apenas::" + +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "Referências" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts " +"that clearly distinguish between text and data." +msgstr "" +"`O que há de novo no Python 3.0 `_ descreve os novos conceitos " +"que distinguir claramente entre texto e dados." + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ discusses " +"Python 2.x’s support for Unicode, and explains various problems that people " +"commonly encounter when trying to work with Unicode." +msgstr "" +"O `Unicode HOWTO `_ aborda o " +"suporte do Python 2.x para Unicode e explica vários problemas que as pessoas " +"comumente encontram ao tentar trabalhar com o Unicode." + +#: ../../source/unicode.txt:173 +msgid "" +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +msgstr "" +"O `Unicode HOWTO for Python 3.x `_ discute o suporte a Unicode no Python 3.x." + +#: ../../source/unicode.txt:176 +msgid "" +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." +msgstr "" +"`A tabela de codificação UTF-8 e os caracteres Unicode `_ contém uma lista de pontos de código Unicode e sua " +"respectiva codificação UTF-8." From 588a125bb6f0338c7f48c1c2d2dbfa05d1795951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 18 Apr 2020 20:31:53 +0200 Subject: [PATCH 107/209] Concat POT files with xgettext --- translations/Makefile | 2 +- translations/PythonGTK3Tutorial.pot | 3751 ++++++++++++++++++++++++--- 2 files changed, 3453 insertions(+), 300 deletions(-) diff --git a/translations/Makefile b/translations/Makefile index 2080721..6e900b0 100644 --- a/translations/Makefile +++ b/translations/Makefile @@ -16,7 +16,7 @@ gettext: @$(SPHINXBUILD) -M "gettext" "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) $(SPHINXPROJ).pot: gettext - msgcat -u $(wildcard $(BUILDDIR)/gettext/*.pot) > $(SPHINXPROJ).pot + xgettext -o $(SPHINXPROJ).pot $(wildcard $(BUILDDIR)/gettext/*.pot) split-po: for lang in "$(PO_LINGUAS)"; do \ diff --git a/translations/PythonGTK3Tutorial.pot b/translations/PythonGTK3Tutorial.pot index febc19a..c1ba566 100644 --- a/translations/PythonGTK3Tutorial.pot +++ b/translations/PythonGTK3Tutorial.pot @@ -1,330 +1,3483 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"#-#-#-#-# iconview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# layout.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# gallery.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# button_widgets.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# index.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# spinner.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# layout-table.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# combobox.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# unicode.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:54+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# builder.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# entry.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# basics.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# clipboard.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# cellrenderers.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# menus.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# textview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# label.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# treeview.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# dialogs.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# install.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# popover.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# drag_and_drop.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# all.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# introduction.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# objects.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# progressbar.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# application.pot (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-13 16:11+0200\n" +"POT-Creation-Date: 2020-04-18 20:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../source/unicode.txt:109 +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "" + +#: ../../source/iconview.txt:3 +msgid "" +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." +msgstr "" + +#: ../../source/iconview.txt:5 +msgid "" +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +msgstr "" + +#: ../../source/iconview.txt:7 +msgid "" +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." +msgstr "" + +#: ../../source/iconview.txt:10 ../../source/layout.txt:40 +#: ../../source/layout.txt:97 ../../source/layout.txt:123 +#: ../../source/layout.txt:156 ../../source/layout.txt:180 +#: ../../source/layout.txt:212 ../../source/layout.txt:232 +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 +#: ../../source/layout-table.txt:26 ../../source/combobox.txt:29 +#: ../../source/builder.txt:118 ../../source/entry.txt:32 +#: ../../source/clipboard.txt:17 ../../source/cellrenderers.txt:39 +#: ../../source/cellrenderers.txt:59 ../../source/cellrenderers.txt:74 +#: ../../source/cellrenderers.txt:98 ../../source/cellrenderers.txt:116 +#: ../../source/cellrenderers.txt:138 ../../source/menus.txt:80 +#: ../../source/textview.txt:115 ../../source/label.txt:48 +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 ../../source/popover.txt:19 +#: ../../source/popover.txt:34 ../../source/drag_and_drop.txt:74 +#: ../../source/application.txt:61 ../../source/progressbar.txt:32 +msgid "Example" +msgstr "" + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "" + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "" + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." +msgstr "" + +#: ../../source/layout.txt:79 +msgid "" +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +msgstr "" + +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "" + +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" + +#: ../../source/layout.txt:86 +msgid "" +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." +msgstr "" + +#: ../../source/layout.txt:88 +msgid "" +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." +msgstr "" + +#: ../../source/layout.txt:91 +msgid "" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." +msgstr "" + +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "" + +#: ../../source/layout.txt:107 +msgid "" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" + +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." +msgstr "" + +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." +msgstr "" + +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "" + +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." +msgstr "" + +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." +msgstr "" + +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" +msgstr "" + +#: ../../source/layout.txt:145 +msgid "" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." +msgstr "" + +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." +msgstr "" + +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." +msgstr "" + +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "" + +#: ../../source/layout.txt:166 +msgid "" +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." +msgstr "" + +#: ../../source/layout.txt:171 +msgid "" +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." +msgstr "" + +#: ../../source/layout.txt:174 +msgid "" +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." +msgstr "" + +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "" + +#: ../../source/layout.txt:190 +msgid "This example requires at least GTK+ 3.12." +msgstr "" + +#: ../../source/layout.txt:192 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." +msgstr "" + +#: ../../source/layout.txt:195 +msgid "" +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." +msgstr "" + +#: ../../source/layout.txt:200 +msgid "" +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." +msgstr "" + +#: ../../source/layout.txt:204 +msgid "" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." +msgstr "" + +#: ../../source/layout.txt:206 +msgid "" +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" + +#: ../../source/layout.txt:220 +msgid "Notebook" +msgstr "" + +#: ../../source/layout.txt:222 +msgid "" +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." +msgstr "" + +#: ../../source/layout.txt:224 +msgid "" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." +msgstr "" + +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" +msgstr "" + +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" +msgstr "" + +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" +msgstr "" + +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" +msgstr "" + +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.AppChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.Assistant`" +msgstr "" + +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.Button`" +msgstr "" + +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.CheckButton`" +msgstr "" + +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.ColorButton`" +msgstr "" + +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.ColorChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.ComboBox`" +msgstr "" + +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.ComboBoxText`" +msgstr "" + +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Entry`" +msgstr "" + +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.FileChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.FileChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.FlowBox`" +msgstr "" + +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.FontButton`" +msgstr "" + +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.FontChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.Frame`" +msgstr "" + +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.GLArea`" +msgstr "" + +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.Grid`" +msgstr "" + +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.HeaderBar`" +msgstr "" + +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.IconView`" +msgstr "" + +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.Image`" +msgstr "" + +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.InfoBar`" +msgstr "" + +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Label`" +msgstr "" + +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.LevelBar`" +msgstr "" + +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.LinkButton`" +msgstr "" + +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.ListBox`" +msgstr "" + +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.LockButton`" +msgstr "" + +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.MenuBar`" +msgstr "" + +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.MenuButton`" +msgstr "" + +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.MessageDialog`" +msgstr "" + +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Notebook`" +msgstr "" + +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.Paned`" +msgstr "" + +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.PlacesSidebar`" +msgstr "" + +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.ProgressBar`" +msgstr "" + +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.RadioButton`" +msgstr "" + +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.RecentChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.Scale`" +msgstr "" + +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.Scrollbar`" +msgstr "" + +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.ScrolledWindow`" +msgstr "" + +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.SearchBar`" +msgstr "" + +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.SearchEntry`" +msgstr "" + +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.Separator`" +msgstr "" + +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.SpinButton`" +msgstr "" + +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.Spinner`" +msgstr "" + +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.Stack`" +msgstr "" + +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.StackSwitcher`" +msgstr "" + +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.Statusbar`" +msgstr "" + +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.Switch`" +msgstr "" + +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.TextView`" +msgstr "" + +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.ToggleButton`" +msgstr "" + +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.ToolPalette`" +msgstr "" + +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Toolbar`" +msgstr "" + +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.TreeView`" +msgstr "" + +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.VolumeButton`" +msgstr "" + +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Window`" +msgstr "" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" + +#: ../../source/button_widgets.txt:70 +msgid "" +"When first run, the first radio button in the group will be active. This can " +"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " +"first argument." +msgstr "" + +#: ../../source/button_widgets.txt:74 +msgid "" +"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " +"achieved by calling :meth:`Gtk.RadioButton.join_group`." +msgstr "" + +#: ../../source/button_widgets.txt:86 +msgid "LinkButton" +msgstr "" + +#: ../../source/button_widgets.txt:87 +msgid "" +"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " +"to the one used by web browsers, which triggers an action when clicked. It " +"is useful to show quick links to resources." +msgstr "" + +#: ../../source/button_widgets.txt:91 +msgid "" +"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" +"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." +"get_uri`." +msgstr "" + +#: ../../source/button_widgets.txt:103 +msgid "SpinButton" +msgstr "" + +#: ../../source/button_widgets.txt:104 +msgid "" +"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " +"of some attribute. Rather than having to directly type a number into a :" +"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " +"of two arrows to increment or decrement the displayed value. A value can " +"still be typed in, with the bonus that it can be checked to ensure it is in " +"a given range. The main properties of a :class:`Gtk.SpinButton` are set " +"through :class:`Gtk.Adjustment`." +msgstr "" + +#: ../../source/button_widgets.txt:112 +msgid "" +"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." +"SpinButton.set_value`. The value entered can either be an integer or float, " +"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" +"meth:`Gtk.SpinButton.get_value_as_int`, respectively." +msgstr "" + +#: ../../source/button_widgets.txt:117 +msgid "" +"When you allow the displaying of float values in the spin button, you may " +"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." +"SpinButton.set_digits`." +msgstr "" + +#: ../../source/button_widgets.txt:121 +msgid "" +"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " +"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " +"with ``True`` as argument." +msgstr "" + +#: ../../source/button_widgets.txt:125 +msgid "" +"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " +"two options here; by default the spin button updates the value even if the " +"data entered is invalid. Alternatively, we can set the policy to only update " +"when the value entered is valid by calling :meth:`Gtk.SpinButton." +"set_update_policy`." +msgstr "" + +#: ../../source/button_widgets.txt:139 +msgid "Switch" +msgstr "" + +#: ../../source/button_widgets.txt:140 +msgid "" +"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " +"can control which state should be active by clicking the empty area, or by " +"dragging the handle." +msgstr "" + +#: ../../source/button_widgets.txt:144 +msgid "" +"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " +"action signal and emitting it causes the switch to animate. Applications " +"should never connect to this signal, but use the \"notify::active\" signal, " +"see the example here below." +msgstr "" + +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Release" +msgstr "" + +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Date" +msgstr "" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "" + +#: ../../source/index.txt:11 +msgid "" +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" +msgstr "" + +#: ../../source/index.txt:13 +msgid "" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +msgstr "" + +#: ../../source/index.txt:15 +msgid "" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." +msgstr "" + +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." +msgstr "" + +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "" + +#: ../../source/index.txt:61 +msgid "Deprecated" +msgstr "" + +#: ../../source/index.txt:69 +msgid "Indices and tables" +msgstr "" + +#: ../../source/index.txt:71 +msgid ":ref:`search`" +msgstr "" + +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "" + +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." +msgstr "" + +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." +msgstr "" + +#: ../../source/spinner.txt:20 +msgid "Extended example" +msgstr "" + +#: ../../source/spinner.txt:22 +msgid "" +"An extended example that uses a timeout function to start and stop the " +"spinning animation. The :func:`on_timeout` function is called at regular " +"intervals until it returns ``False``, at which point the timeout is " +"automatically destroyed and the function will not be called again." +msgstr "" + +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "" + +#: ../../source/layout-table.txt:4 +msgid "" +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." +msgstr "" + +#: ../../source/layout-table.txt:8 +msgid "" +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +msgstr "" + +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +msgstr "" + +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." +msgstr "" + +#: ../../source/layout-table.txt:18 +msgid "" +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." +msgstr "" + +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "" + +#: ../../source/combobox.txt:2 +msgid "ComboBox" +msgstr "" + +#: ../../source/combobox.txt:3 +msgid "" +"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " +"menu. They are preferable to having many radio buttons on screen as they " +"take up less room. If appropriate, it can show extra information about each " +"item, such as text, a picture, a checkbox, or a progress bar." +msgstr "" + +#: ../../source/combobox.txt:8 +msgid "" +":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " +"the model-view pattern; the list of valid choices is specified in the form " +"of a tree model, and the display of the choices can be adapted to the data " +"in the model by using :ref:`cell renderers `. If the combo " +"box contains a large number of items, it may be better to display them in a " +"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." +"set_wrap_width`." +msgstr "" + +#: ../../source/combobox.txt:16 +msgid "" +"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " +"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " +"to enter arbitrary text if none of the available choices are suitable. To do " +"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" +"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." +"ComboBox` instance." +msgstr "" + +#: ../../source/combobox.txt:23 +msgid "" +"For a simple list of textual choices, the model-view API of :class:`Gtk." +"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " +"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." +"ComboBoxText` can contain an entry." +msgstr "" + +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "" + +#: ../../source/unicode.txt:4 +msgid "" +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." +msgstr "" + +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "" + +#: ../../source/unicode.txt:9 +msgid "" +"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." +msgstr "" + +#: ../../source/unicode.txt:17 +msgid "" +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes, the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" +msgstr "" + +#: ../../source/unicode.txt:22 +msgid "" +"If the code point is < 128, each byte is the same as the value of the code " +"point." +msgstr "" + +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" +msgstr "" + +#: ../../source/unicode.txt:29 +msgid "" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." +msgstr "" + +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "" + +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "" + +#: ../../source/unicode.txt:41 +msgid "" +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" +msgstr "" + +#: ../../source/unicode.txt:58 +msgid "" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" +msgstr "" + +#: ../../source/unicode.txt:68 +msgid "" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +msgstr "" + +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "" + +#: ../../source/unicode.txt:86 +msgid "" +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" +msgstr "" + +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." +msgstr "" + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" + +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "" + +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "" + +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +msgstr "" + +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" +msgstr "" + +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" +msgstr "" + +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." +msgstr "" + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." +msgstr "" + +#: ../../source/unicode.txt:173 +msgid "" +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +msgstr "" + +#: ../../source/unicode.txt:176 +msgid "" +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." +msgstr "" + +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "" + +#: ../../source/builder.txt:3 +msgid "" +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by an XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" +msgstr "" + +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "" + +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "" + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." +msgstr "" + +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." +msgstr "" + +#: ../../source/builder.txt:12 +msgid "" +"The description of the user interface is independent from the programming " +"language being used." +msgstr "" + +#: ../../source/builder.txt:14 +msgid "" +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." +msgstr "" + +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "" + +#: ../../source/builder.txt:18 +msgid "" +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." +msgstr "" + +#: ../../source/builder.txt:41 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" + +#: ../../source/builder.txt:48 +msgid "" +"The second line loads all objects defined in *example.glade* into the " +"Builder object." +msgstr "" + +#: ../../source/builder.txt:50 +msgid "" +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." +msgstr "" + +#: ../../source/builder.txt:57 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." +msgstr "" + +#: ../../source/builder.txt:61 +msgid "Accessing widgets" +msgstr "" + +#: ../../source/builder.txt:62 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" +msgstr "" + +#: ../../source/builder.txt:71 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." +msgstr "" + +#: ../../source/builder.txt:74 +msgid "It is also possible to get a list of all objects with" +msgstr "" + +#: ../../source/builder.txt:81 +msgid "Connecting Signals" +msgstr "" + +#: ../../source/builder.txt:82 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." +msgstr "" + +#: ../../source/builder.txt:90 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" +msgstr "" + +#: ../../source/builder.txt:99 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +msgstr "" + +#: ../../source/builder.txt:110 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" +msgstr "" + +#: ../../source/builder.txt:119 +msgid "The final code of the example" +msgstr "" + +#: ../../source/entry.txt:2 +msgid "Entry" +msgstr "" + +#: ../../source/entry.txt:4 +msgid "" +"Entry widgets allow the user to enter text. You can change the contents with " +"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " +"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " +"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." +msgstr "" + +#: ../../source/entry.txt:9 +msgid "" +"Occasionally you might want to make an Entry widget read-only. This can be " +"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." +msgstr "" + +#: ../../source/entry.txt:12 +msgid "" +"Entry widgets can also be used to retrieve passwords from the user. It is " +"common practice to hide the characters typed into the entry to prevent " +"revealing the password to a third party. Calling :meth:`Gtk.Entry." +"set_visibility` with ``False`` will cause the text to be hidden." +msgstr "" + +#: ../../source/entry.txt:17 +msgid "" +":class:`Gtk.Entry` has the ability to display progress or activity " +"information behind the text. This is similar to :class:`Gtk.ProgressBar` " +"widget and is commonly found in web browsers to indicate how much of a page " +"download has been completed. To make an entry display such information, use :" +"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." +msgstr "" + +#: ../../source/entry.txt:24 +msgid "" +"Additionally, an Entry can show icons at either side of the entry. These " +"icons can be activatable by clicking, can be set up as drag source and can " +"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " +"or one of the various other functions that set an icon from an icon name, a " +"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` or the corresponding function for markup." +msgstr "" + +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "" + +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "" + +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "" + +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." +msgstr "" + +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." +msgstr "" + +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "" + +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." +msgstr "" + +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." +msgstr "" + +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" +msgstr "" + +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted when an object is destroyed, so when a user requests " +"that a toplevel window is closed, the default handler for this signal " +"destroys the window, but does not terminate the application. Connecting the " +"\"destroy\" signal of the top-level window to the function :func:`Gtk." +"main_quit` will result in the desired behaviour." +msgstr "" + +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." +msgstr "" + +#: ../../source/basics.txt:77 ../../source/objects.txt:96 +msgid "Properties" +msgstr "" + +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" +msgstr "" + +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "" + +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." +msgstr "" + +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" +msgstr "" + +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." +msgstr "" + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." +msgstr "" + +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "" + +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" +msgstr "" + +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr "" + +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr "" + +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr "" + +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr "" + +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr "" + +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr "" + +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr "" + +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr "" + +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "" + +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." +msgstr "" + +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" +msgstr "" + +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." +msgstr "" + +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "" + +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." +msgstr "" + +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." +msgstr "" + +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "" + +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." +msgstr "" + +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "" + +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." +msgstr "" + +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "" + +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." +msgstr "" + +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" + +#: ../../source/menus.txt:2 ../../source/application.txt:36 +msgid "Menus" +msgstr "" + +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." +msgstr "" + +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." +msgstr "" + +#: ../../source/menus.txt:17 ../../source/application.txt:12 +msgid "Actions" +msgstr "" + +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." +msgstr "" + +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "" + +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" +msgstr "" + +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +msgstr "" + +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" +msgstr "" + +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" +msgstr "" + +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." +msgstr "" + +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" +msgstr "" + +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr "" + +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr "" + +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr "" + +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "" + +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "" + +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." +msgstr "" + +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." +msgstr "" + +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." +msgstr "" + +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." +msgstr "" + +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "" + +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." +msgstr "" + +#: ../../source/textview.txt:13 ../../source/treeview.txt:141 +msgid "The View" +msgstr "" + +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." +msgstr "" + +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." +msgstr "" + +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." +msgstr "" + +#: ../../source/textview.txt:36 ../../source/treeview.txt:21 +msgid "The Model" +msgstr "" + +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." +msgstr "" + +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." +msgstr "" + +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." +msgstr "" + +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +msgstr "" + +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." +msgstr "" + +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "" + +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." +msgstr "" + +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." +msgstr "" + +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" +msgstr "" + +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "" + +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "" + +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "" + +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "" + +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "" + +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "" + +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "" + +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "" + +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "" + +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "" + +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." +msgstr "" + +#: ../../source/label.txt:2 +msgid "Label" +msgstr "" + +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" +msgstr "" + +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "" + +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" +msgstr "" + +#: ../../source/treeview.txt:9 +msgid "Automatic updates when data is added, removed or edited" +msgstr "" + +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "" + +#: ../../source/treeview.txt:11 +msgid "Sorting data" +msgstr "" + +#: ../../source/treeview.txt:12 +msgid "Embedding widgets such as check boxes, progress bars, etc." +msgstr "" + +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "" + +#: ../../source/treeview.txt:14 +msgid "Filtering data" +msgstr "" + +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." +msgstr "" + +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." +msgstr "" + +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." +msgstr "" + +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." +msgstr "" + +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." +msgstr "" + +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." +msgstr "" + +#: ../../source/treeview.txt:54 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." +msgstr "" + +#: ../../source/treeview.txt:58 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." +msgstr "" + +#: ../../source/treeview.txt:66 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." +msgstr "" + +#: ../../source/treeview.txt:80 +msgid "Iterating over all rows of a tree model is very simple as well." +msgstr "" + +#: ../../source/treeview.txt:88 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows and its children, use the " +"``print_tree_store`` function." +msgstr "" + +#: ../../source/treeview.txt:106 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." +msgstr "" + +#: ../../source/treeview.txt:123 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." +msgstr "" + +#: ../../source/treeview.txt:136 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." +msgstr "" + +#: ../../source/treeview.txt:142 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." +msgstr "" + +#: ../../source/treeview.txt:153 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." +msgstr "" + +#: ../../source/treeview.txt:156 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." +msgstr "" + +#: ../../source/treeview.txt:162 +msgid "" +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." +msgstr "" + +#: ../../source/treeview.txt:173 +msgid "" +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." +msgstr "" + +#: ../../source/treeview.txt:193 +msgid "The Selection" +msgstr "" + +#: ../../source/treeview.txt:194 +msgid "" +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." +msgstr "" + +#: ../../source/treeview.txt:203 +msgid "Then to retrieve data for the row selected:" +msgstr "" + +#: ../../source/treeview.txt:212 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +msgstr "" + +#: ../../source/treeview.txt:219 +msgid "Sorting" +msgstr "" + +#: ../../source/treeview.txt:220 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." +msgstr "" + +#: ../../source/treeview.txt:223 +msgid "Sorting by clicking on columns" +msgstr "" + +#: ../../source/treeview.txt:224 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." +msgstr "" + +#: ../../source/treeview.txt:227 +msgid "" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." +msgstr "" + +#: ../../source/treeview.txt:246 +msgid "" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." +msgstr "" + +#: ../../source/treeview.txt:253 +msgid "Setting a custom sort function" +msgstr "" + +#: ../../source/treeview.txt:254 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" +msgstr "" + +#: ../../source/treeview.txt:267 +msgid "The case-sensitive sorted list will look like::" +msgstr "" + +#: ../../source/treeview.txt:278 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." +msgstr "" + +#: ../../source/treeview.txt:294 +msgid "" +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" + +#: ../../source/treeview.txt:301 +msgid "Filtering" +msgstr "" + +#: ../../source/treeview.txt:302 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." +msgstr "" + +#: ../../source/treeview.txt:304 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +msgstr "" + +#: ../../source/treeview.txt:310 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"needs a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" + +#: ../../source/treeview.txt:316 +msgid "" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." +msgstr "" + +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "" + +#: ../../source/dialogs.txt:4 +msgid "" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." +msgstr "" + +#: ../../source/dialogs.txt:12 +msgid "" +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." +msgstr "" + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "" + +#: ../../source/dialogs.txt:20 +msgid "" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." +msgstr "" + +#: ../../source/dialogs.txt:25 +msgid "" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +msgstr "" + +#: ../../source/dialogs.txt:30 +msgid "" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." +msgstr "" + +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." +msgstr "" + +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "" + +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." +msgstr "" + +#: ../../source/dialogs.txt:60 +msgid "" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." +msgstr "" + +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "" + +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +msgstr "" + +#: ../../source/dialogs.txt:80 +msgid "" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" +msgstr "" + +#: ../../source/dialogs.txt:83 +msgid "" +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" +msgstr "" + +#: ../../source/dialogs.txt:85 +msgid "" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." +msgstr "" + +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." +msgstr "" + +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." +msgstr "" + +#: ../../source/dialogs.txt:93 +msgid "" +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" +msgstr "" + +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr "" + +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr "" + +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr "" + +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr "" + +#: ../../source/dialogs.txt:105 +msgid "" +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." +msgstr "" + +#: ../../source/dialogs.txt:109 +msgid "" +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." +msgstr "" + +#: ../../source/dialogs.txt:115 +msgid "" +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." +msgstr "" + +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +msgstr "" + +#: ../../source/dialogs.txt:119 +msgid "" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +msgstr "" + +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." +msgstr "" + +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." +msgstr "" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "" + +#: ../../source/install.txt:5 +msgid "" +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later." +msgstr "" + +#: ../../source/install.txt:12 +msgid "Dependencies" +msgstr "" + +#: ../../source/install.txt:14 +msgid "GTK+3" +msgstr "" + +#: ../../source/install.txt:16 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "" + +#: ../../source/install.txt:18 +msgid "gobject-introspection" +msgstr "" + +#: ../../source/install.txt:21 +msgid "Prebuilt Packages" +msgstr "" + +#: ../../source/install.txt:22 +msgid "" +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." +msgstr "" + +#: ../../source/install.txt:28 +msgid "Installing From Source" +msgstr "" + +#: ../../source/install.txt:29 +msgid "" +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." +msgstr "" + +#: ../../source/install.txt:33 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +msgstr "" + +#: ../../source/install.txt:37 +msgid "" +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" +msgstr "" + +#: ../../source/install.txt:42 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." +msgstr "" + +#: ../../source/install.txt:48 +msgid "" +"Executing the following command will build PyGObject and all its " +"dependencies::" +msgstr "" + +#: ../../source/install.txt:52 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "" + +#: ../../source/install.txt:56 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "" + +#: ../../source/install.txt:64 +msgid "https://download.gnome.org/teams/releng/" +msgstr "" + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "" + +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a seperate window used for displaying additional " +"information and are often used as a part of button menus and context menus. " +"Their uses are similar to those of dialog windows with the advantage of " +"being less disruptive and having a connection with the widget the popover is " +"pointing to. Popovers have are visually connected to a related widget with a " +"small triangle." +msgstr "" + +#: ../../source/popover.txt:10 +msgid "" +"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Widget.show_all`." +msgstr "" + +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "" + +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." +msgstr "" + +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "" + +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." +msgstr "" + +#: ../../source/popover.txt:41 ../../source/application.txt:69 +msgid "See Also" +msgstr "" + +#: ../../source/popover.txt:43 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "" + +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "" + +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." +msgstr "" + +#: ../../source/drag_and_drop.txt:8 +msgid "" +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." +msgstr "" + +#: ../../source/drag_and_drop.txt:14 +msgid "" +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +msgstr "" + +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +msgstr "" + +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +msgstr "" + +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "" + +#: ../../source/drag_and_drop.txt:31 +msgid "" +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." +msgstr "" + +#: ../../source/drag_and_drop.txt:36 +msgid "" +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." +msgstr "" + +#: ../../source/drag_and_drop.txt:41 +msgid "" +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +msgstr "" + +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "" + +#: ../../source/application.txt:6 +msgid "" +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." +msgstr "" + +#: ../../source/application.txt:14 +msgid "" +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." +msgstr "" + +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." +msgstr "" + +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." +msgstr "" + +#: ../../source/application.txt:26 +msgid "" +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." +msgstr "" + +#: ../../source/application.txt:32 +msgid "" +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"add_accelerator()`." +msgstr "" + +#: ../../source/application.txt:38 +msgid "" +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." +msgstr "" + +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "" + +#: ../../source/application.txt:48 +msgid "" +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." +msgstr "" + +#: ../../source/application.txt:51 msgid "" -"This is especially important if you want to internationalize your program " -"using `gettext `_. You have " -"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " -"languages. In general it is recommended to not use :class:`unicode` objects " -"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " -"since GTK+ does not fully integrate with :class:`unicode` objects. " -"Otherwise, you would have to decode the return values to Unicode strings " -"each time you call a GTK+ method::" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." msgstr "" -#: ../../source/unicode.txt:166 +#: ../../source/application.txt:54 msgid "" -"`What's new in Python 3.0 `_ describes the new concepts that " -"clearly distinguish between text and data." +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." msgstr "" -#: ../../source/unicode.txt:169 +#: ../../source/application.txt:57 msgid "" -"The `Unicode HOWTO `_ " -"discusses Python 2.x’s support for Unicode, and explains various problems " -"that people commonly encounter when trying to work with Unicode." +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." msgstr "" -#: ../../source/unicode.txt:109 +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "" + +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "" + +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "" + +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "" + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "" + +#: ../../source/introduction.txt:9 msgid "" -"This is especially important if you want to internationalize your program " -"using `gettext `_. You have to " -"make sure that gettext will return UTF-8 encoded 8-bit strings for all " -"languages. In general it is recommended to not use :class:`unicode` objects " -"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " -"since GTK+ does not fully integrate with :class:`unicode` objects. " -"Otherwise, you would have to decode the return values to Unicode strings " -"each time you call a GTK+ method::" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." msgstr "" -#: ../../source/unicode.txt:166 +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "" + +#: ../../source/introduction.txt:22 msgid "" -"`What's new in Python 3.0 `_ describes the new concepts " -"that clearly distinguish between text and data." +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." msgstr "" -#: ../../source/unicode.txt:169 +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "" + +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" + +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "" + +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 6)." +msgstr "" + +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" + +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "" + +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." +msgstr "" + +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." +msgstr "" + +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" + +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" + +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" + +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "" + +#: ../../source/objects.txt:6 +msgid "" +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." +msgstr "" + +#: ../../source/objects.txt:11 +msgid "" +"This section will introduce some important aspects about the GObject " +"implementation in Python." +msgstr "" + +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "" + +#: ../../source/objects.txt:17 +msgid "" +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." +msgstr "" + +#: ../../source/objects.txt:22 +msgid "" +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" +msgstr "" + +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "" + +#: ../../source/objects.txt:39 +msgid "" +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." +msgstr "" + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "" + +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "" + +#: ../../source/objects.txt:58 +msgid "" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" +msgstr "" + +#: ../../source/objects.txt:61 +msgid "" +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." +msgstr "" + +#: ../../source/objects.txt:75 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +msgstr "" + +#: ../../source/objects.txt:81 +msgid "" +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." +msgstr "" + +#: ../../source/objects.txt:84 +msgid "" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. This argument type list must end with a " +"comma." +msgstr "" + +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "" + +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." +msgstr "" + +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "" + +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." +msgstr "" + +#: ../../source/objects.txt:109 +msgid "" +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." +msgstr "" + +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "" + +#: ../../source/objects.txt:116 +msgid "" +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." +msgstr "" + +#: ../../source/objects.txt:131 +msgid "" +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" +msgstr "" + +#: ../../source/objects.txt:146 +msgid "" +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" +msgstr "" + +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "" + +#: ../../source/objects.txt:170 +msgid "" +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" +msgstr "" + +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" +msgstr "" + +#: ../../source/objects.txt:227 +msgid "" +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." +msgstr "" + +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "" + +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" +msgstr "" + +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" +msgstr "" + +#: ../../source/objects.txt:263 +msgid "API" +msgstr "" + +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "" + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "" + +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" +msgstr "" + +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." +msgstr "" + +#: ../../source/objects.txt:288 +msgid "" +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" +msgstr "" + +#: ../../source/objects.txt:298 +msgid "" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +msgstr "" + +#: ../../source/objects.txt:300 +msgid "" +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." +msgstr "" + +#: ../../source/objects.txt:305 +msgid "" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." +msgstr "" + +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" +msgstr "" + +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." +msgstr "" + +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." +msgstr "" + +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "" + +#: ../../source/objects.txt:332 +msgid "" +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" +msgstr "" + +#: ../../source/objects.txt:337 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the list of the parameters of the " +"signal, it must end with a comma." +msgstr "" + +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." +msgstr "" + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "" + +#: ../../source/objects.txt:354 +msgid "" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" +msgstr "" + +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +msgstr "" + +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." +msgstr "" + +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." +msgstr "" + +#: ../../source/objects.txt:369 +msgid "" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +msgstr "" + +#: ../../source/objects.txt:373 +msgid "" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" +msgstr "" + +#: ../../source/objects.txt:376 +msgid "" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." +msgstr "" + +#: ../../source/objects.txt:379 +msgid "" +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." +msgstr "" + +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "" + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." +msgstr "" + +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." +msgstr "" + +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "" + +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "" + +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "" + +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "" + +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "" + +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." +msgstr "" + +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." +msgstr "" + +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." +msgstr "" + +#: ../../source/progressbar.txt:24 msgid "" -"The `Unicode HOWTO `_ discusses " -"Python 2.x’s support for Unicode, and explains various problems that people " -"commonly encounter when trying to work with Unicode." +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." msgstr "" From a17b4b9fcdcebb8f6000d326d9ed65d2722b694b Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Sun, 19 Apr 2020 13:38:12 -0300 Subject: [PATCH 108/209] Improve translations README --- translations/README.md | 72 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/translations/README.md b/translations/README.md index e12e007..6d544fa 100644 --- a/translations/README.md +++ b/translations/README.md @@ -1,10 +1,62 @@ -Translations -============ - -- sphinx expects one PO file per document, but [Damned Lies](https://l10n.gnome.org/) -expects a single file. -- The file `PythonGTK3Tutorial.pot` contains all messages from all documents. -- Translations are listed in `LINGUAS` and the corresponding translations - reside in the `po` directory (one PO file per language). -- Executing `make split-po` will take the single-file PO and split it into individual - documents for sphinx to process. +# Translations + +## How to contribute + +Translations to PyGObject-Tutorial happen in [Damned Lies](https://l10n.gnome.org/). See [GNOME Translation Project wiki](https://wiki.gnome.org/TranslationProject) for more info. + +Please make sure to test and review the translation before considering it as finished. + +Once you're done translating, file a [pull request](https://github.com/sebp/PyGObject-Tutorial/pulls) containing your translation in `translations/po/.po`, where `` is your language's code (e.g. pt_BR). + +Refer to GitHub docs for more information on [proposing changes via pull requests](https://help.github.com/pt/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests). + +## Testing translations + +A good way to assure the quality of the translations is to build the docs with the up-to-date message catalog (.po file). If you are willing to down that way, follow the steps below. + +**Note:** All instructions below assume you are inside `translations/` directory. + +1. Install dependencies (hint: add `--user` flag for a per-user installation, without requiring admin privileges): +``` +pip install -r ../requirements.txt +``` + +2. Copy your PO file to `po/` (replace `` accordingly): +``` +cp path/to/your/translated/file.po po/.po +``` + +3. If you are adding new translation for a language, add your language code to `LINGUAS` in alphabetical order; otherwise, skip this step. + +4. Split your PO file into individual documents for Sphinx to process: +``` +make split-po +``` + +5. Build HTML docs in your language (replace `` accordingly): +``` +make -C .. -e SPHINXOPTS="-D language=''" html +``` + +4. Check `../build/html/` for the translated docs in HTML format. + +## Building translation template + +This step is **not** necessary for translating PyGObject-Tutorial, as [Damned Lies](https://l10n.gnome.org/) automatically updates the translation template (.pot file) and the message catalog (po) files. Therefore, it should be all up-to-date already. + +1. Install dependencies (same instruction as step 1 from previous section) + +2. Run: +``` +make PythonGTK3Tutorial.pot +``` + +3. Check the translation template as `PythonGTK3Tutorial.pot` + +## Why splitting PO files + +[Sphinx](https://www.sphinx-doc.org) expects one message catalog (.po) file per document, but [Damned Lies](https://l10n.gnome.org/) expects a single file. So the conciliate both needs, the following method was implemented: + +1. The `xgettext` tool is set to extract strings from source docs into a single translation template (.pot) file to be used by Damned Lies. + +2. When including an updated translation for a given language, the message catalog in `po/` is split into separated files stored in `locale//LC_MESSAGES/`. Those separated files will be used by Sphinx to build translated docs. From d1931d4e69fde6e87d60db41d614ec54bbf9a1c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:13:57 +0200 Subject: [PATCH 109/209] Use empty html_static_path Fixes #169 --- source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 6fcb64c..bce0b97 100644 --- a/source/conf.py +++ b/source/conf.py @@ -130,7 +130,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] +html_static_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. From cb6b6deef1d14c76dea4e7ea705060a4f8dc3ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:16:22 +0200 Subject: [PATCH 110/209] Fix header of .po file --- translations/po/pt_BR.po | 496 --------------------------------------- 1 file changed, 496 deletions(-) diff --git a/translations/po/pt_BR.po b/translations/po/pt_BR.po index 376947c..1e3cbf8 100644 --- a/translations/po/pt_BR.po +++ b/translations/po/pt_BR.po @@ -1,161 +1,3 @@ -# #-#-#-#-# application.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# basics.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# builder.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# button_widgets.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# cellrenderers.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# clipboard.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# combobox.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# dialogs.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# drag_and_drop.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# entry.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# gallery.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# iconview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# index.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# install.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# introduction.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# label.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# layout-table.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# layout.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# menus.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# objects.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# popover.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# progressbar.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# spinner.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# stock.po (Python GTK+ 3 Tutorial 3.0) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 -# Tutorial package. -# FIRST AUTHOR , 2018. -# -# #-#-#-#-# textview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# treeview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -# #-#-#-#-# unicode.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-# # SOME DESCRIPTIVE TITLE. # Copyright (C) GNU Free Documentation License 1.3 # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. @@ -164,175 +6,6 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# application.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 05:32-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# basics.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:29-0300\n" -"PO-Revision-Date: 2018-04-11 22:41-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# builder.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:50-0300\n" -"PO-Revision-Date: 2018-04-11 22:57-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# button_widgets.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# cellrenderers.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 06:37-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# clipboard.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 03:57-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# combobox.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:07-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# dialogs.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 14:26-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# drag_and_drop.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 04:04-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# entry.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:03-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# gallery.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-21 18:01+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/pygobject-" -"tutorial/teams/85788/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"#-#-#-#-# iconview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:19-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# index.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-27 18:50-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# install.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-29 00:10-0300\n" @@ -345,175 +18,6 @@ msgstr "" "Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" -"#-#-#-#-# introduction.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:54-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# label.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 04:29-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# layout-table.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:33-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# layout.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 02:36-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# menus.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:03-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# objects.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 18:20-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# popover.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 23:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:29-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# progressbar.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:19-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# spinner.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:35-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# stock.po (Python GTK+ 3 Tutorial 3.0) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47+0000\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.5.3\n" -"Last-Translator: Tomaz Cunha \n" -"Language-Team: \n" -"Language: pt_BR\n" -"X-Generator: Poedit 1.8.11\n" -"#-#-#-#-# textview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:32-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# treeview.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:43-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" -"#-#-#-#-# unicode.po (Python GTK+ 3 Tutorial 3.4) #-#-#-#-#\n" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 01:06-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" #: ../../source/application.txt:4 msgid "Application" From c1746a275e271cd8831e6b86b3f5aa21acaa29c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:18:00 +0200 Subject: [PATCH 111/209] Add CI to build documents for all languages using tox --- .github/workflows/tox-workflow.yaml | 25 +++++++++++++++++++++++++ .gitignore | 12 ++++++++---- tox.ini | 21 +++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/tox-workflow.yaml create mode 100644 tox.ini diff --git a/.github/workflows/tox-workflow.yaml b/.github/workflows/tox-workflow.yaml new file mode 100644 index 0000000..b57330c --- /dev/null +++ b/.github/workflows/tox-workflow.yaml @@ -0,0 +1,25 @@ +name: Tox +on: [push, pull_request] + +jobs: + sphinx_build: + runs-on: ubuntu-latest + name: Linting and Docs + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Install Tox + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox + - name: Run Tox + run: tox + - name: Archive documentation + uses: actions/upload-artifact@v1 + with: + name: documentation + path: build/html diff --git a/.gitignore b/.gitignore index 1a25069..3072a19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ -build *~ -*.py[co] -source/locale -translations/**/*.mo +__pycache__/ +*.py[cod] +build/ +eggs/ +.eggs/ +.tox/ +*.mo +translations/locale/ diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..d820c5a --- /dev/null +++ b/tox.ini @@ -0,0 +1,21 @@ +[tox] +envlist = sphinx +skipsdist = True + +# Documentation +[testenv:sphinx] +basepython = python3 +deps = + -rrequirements.txt +changedir = translations +commands = + make split-po + sphinx-build -E -W -b html ../source ../build/html/en + bash -c "grep -v '^\#' ./LINGUAS | tr '\n' ';' > .tmp-LINGUAS" + xargs -a .tmp-LINGUAS -I '{}' -d';' sphinx-build -D language='{}' -E -W -b html ../source '../build/html/{}' + rm -f .tmp-LINGUAS +whitelist_externals = + /usr/bin/bash + /usr/bin/rm + /usr/bin/make + /usr/bin/xargs \ No newline at end of file From b773f69a10a034747c9039bd5408b934159f1e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:51:04 +0200 Subject: [PATCH 112/209] CI: Run tox via custom GitHub action --- .github/actions/sphinx-build-all/Dockerfile | 17 ++++ .github/actions/sphinx-build-all/action.yml | 6 ++ .../actions/sphinx-build-all/entrypoint.sh | 3 + .github/workflows/tox-workflow.yaml | 16 +--- tox.ini | 2 + .../locale/pt_BR/LC_MESSAGES/application.po | 23 +---- .../locale/pt_BR/LC_MESSAGES/basics.po | 11 +-- .../locale/pt_BR/LC_MESSAGES/builder.po | 11 +-- .../pt_BR/LC_MESSAGES/button_widgets.po | 13 +-- .../locale/pt_BR/LC_MESSAGES/cellrenderers.po | 13 +-- .../locale/pt_BR/LC_MESSAGES/clipboard.po | 21 ++--- .../locale/pt_BR/LC_MESSAGES/combobox.po | 11 +-- .../locale/pt_BR/LC_MESSAGES/dialogs.po | 12 +-- .../locale/pt_BR/LC_MESSAGES/drag_and_drop.po | 11 +-- .../locale/pt_BR/LC_MESSAGES/entry.po | 11 +-- .../locale/pt_BR/LC_MESSAGES/iconview.po | 11 +-- .../locale/pt_BR/LC_MESSAGES/index.po | 7 +- .../locale/pt_BR/LC_MESSAGES/install.po | 1 + .../locale/pt_BR/LC_MESSAGES/introduction.po | 21 ++--- .../locale/pt_BR/LC_MESSAGES/label.po | 9 +- .../locale/pt_BR/LC_MESSAGES/layout-table.po | 9 +- .../locale/pt_BR/LC_MESSAGES/layout.po | 12 +-- .../locale/pt_BR/LC_MESSAGES/menus.po | 17 +--- .../locale/pt_BR/LC_MESSAGES/objects.po | 9 +- .../locale/pt_BR/LC_MESSAGES/popover.po | 15 +--- .../locale/pt_BR/LC_MESSAGES/progressbar.po | 9 +- .../locale/pt_BR/LC_MESSAGES/spinner.po | 9 +- .../locale/pt_BR/LC_MESSAGES/stock.po | 84 ------------------- .../locale/pt_BR/LC_MESSAGES/textview.po | 17 +--- .../locale/pt_BR/LC_MESSAGES/treeview.po | 15 +--- .../locale/pt_BR/LC_MESSAGES/unicode.po | 7 +- 31 files changed, 133 insertions(+), 300 deletions(-) create mode 100644 .github/actions/sphinx-build-all/Dockerfile create mode 100644 .github/actions/sphinx-build-all/action.yml create mode 100755 .github/actions/sphinx-build-all/entrypoint.sh delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/stock.po diff --git a/.github/actions/sphinx-build-all/Dockerfile b/.github/actions/sphinx-build-all/Dockerfile new file mode 100644 index 0000000..e5d0d45 --- /dev/null +++ b/.github/actions/sphinx-build-all/Dockerfile @@ -0,0 +1,17 @@ +FROM python:slim + +RUN apt-get update \ + && apt-get install -y \ + gettext \ + graphviz \ + imagemagick \ + make \ + && apt-get autoremove \ + && apt-get clean + +RUN python3 -m pip install -U pip +RUN python3 -m pip install tox + +COPY entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/.github/actions/sphinx-build-all/action.yml b/.github/actions/sphinx-build-all/action.yml new file mode 100644 index 0000000..5830261 --- /dev/null +++ b/.github/actions/sphinx-build-all/action.yml @@ -0,0 +1,6 @@ +# action.yml +name: 'sphinx-build' +description: 'Runs sphinx-build for all languages' +runs: + using: 'docker' + image: 'Dockerfile' diff --git a/.github/actions/sphinx-build-all/entrypoint.sh b/.github/actions/sphinx-build-all/entrypoint.sh new file mode 100755 index 0000000..5bf4daf --- /dev/null +++ b/.github/actions/sphinx-build-all/entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/sh -l + +tox \ No newline at end of file diff --git a/.github/workflows/tox-workflow.yaml b/.github/workflows/tox-workflow.yaml index b57330c..28c1872 100644 --- a/.github/workflows/tox-workflow.yaml +++ b/.github/workflows/tox-workflow.yaml @@ -4,22 +4,14 @@ on: [push, pull_request] jobs: sphinx_build: runs-on: ubuntu-latest - name: Linting and Docs + name: Build steps: - name: Checkout uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Install Tox - run: | - python -m pip install --upgrade pip - python -m pip install --upgrade tox - name: Run Tox - run: tox - - name: Archive documentation + uses: ./.github/actions/sphinx-build-all@master + - name: Archive HTML documents uses: actions/upload-artifact@v1 with: - name: documentation + name: pygobject-tutorial path: build/html diff --git a/tox.ini b/tox.ini index d820c5a..e0402ec 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,8 @@ commands = xargs -a .tmp-LINGUAS -I '{}' -d';' sphinx-build -D language='{}' -E -W -b html ../source '../build/html/{}' rm -f .tmp-LINGUAS whitelist_externals = + /bin/bash + /bin/rm /usr/bin/bash /usr/bin/rm /usr/bin/make diff --git a/translations/locale/pt_BR/LC_MESSAGES/application.po b/translations/locale/pt_BR/LC_MESSAGES/application.po index 2adfd51..1ee9fe7 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/application.po +++ b/translations/locale/pt_BR/LC_MESSAGES/application.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 05:32-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -34,10 +35,6 @@ msgstr "" "Bus, abertura de arquivos, análise de linha de comando, inicialização/" "desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." -#: ../../source/application.txt:12 -msgid "Actions" -msgstr "Ações" - #: ../../source/application.txt:14 msgid "" ":class:`Gio.Action` is a way to expose any single task your application or " @@ -97,10 +94,6 @@ msgstr "" "propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." "Application.add_accelerator()`." -#: ../../source/application.txt:36 -msgid "Menus" -msgstr "" - #: ../../source/application.txt:38 msgid "" "Your menus should be defined in XML using :class:`Gio.Menu` and would " @@ -161,14 +154,6 @@ msgstr "" "Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " "existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." -#: ../../source/application.txt:61 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/application.txt:69 -msgid "See Also" -msgstr "Veja também" - #: ../../source/application.txt:71 msgid "https://wiki.gnome.org/HowDoI/GtkApplication" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/basics.po b/translations/locale/pt_BR/LC_MESSAGES/basics.po index 47c0420..a6e4949 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/basics.po +++ b/translations/locale/pt_BR/LC_MESSAGES/basics.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:29-0300\n" -"PO-Revision-Date: 2018-04-11 22:41-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -137,10 +138,6 @@ msgstr "" "Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" "`Gtk.main`." -#: ../../source/basics.txt:77 -msgid "Properties" -msgstr "Propriedades" - #: ../../source/basics.txt:78 msgid "" "Properties describe the configuration and state of widgets. As for signals, " diff --git a/translations/locale/pt_BR/LC_MESSAGES/builder.po b/translations/locale/pt_BR/LC_MESSAGES/builder.po index 48c8aa0..1c84e3b 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/builder.po +++ b/translations/locale/pt_BR/LC_MESSAGES/builder.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:50-0300\n" -"PO-Revision-Date: 2018-04-11 22:57-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -214,10 +215,6 @@ msgstr "" "chamados como os sinais. Em nosso exemplo, o último snippet de código pode " "ser reescrito como:" -#: ../../source/builder.txt:119 -msgid "Example" -msgstr "Exemplo" - #: ../../source/builder.txt:120 msgid "The final code of the example" msgstr "O código final do exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po index 90279be..4fb642a 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po +++ b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -52,12 +53,6 @@ msgstr "" "Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " "emitido quando o botão foi pressionado e liberado." -#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 -#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 -#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 -msgid "Example" -msgstr "Exemplo" - #: ../../source/button_widgets.txt:26 msgid "ToggleButton" msgstr "Botão de Alternância" diff --git a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po index 9bf9fab..edec413 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po +++ b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 06:37-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -103,12 +104,6 @@ msgstr "" "Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." "TreeModel` de acordo." -#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 -#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 -#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 -msgid "Example" -msgstr "Exemplo" - #: ../../source/cellrenderers.txt:47 msgid "CellRendererToggle" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po index 187a1db..9800970 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po +++ b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 03:57-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -34,8 +35,8 @@ msgstr "" ":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " "de dados, incluindo texto e imagens. O uso de uma área de transferência " "permite que esses dados sejam compartilhados entre aplicativos por meio de " -"ações como copiar, cortar e colar. Essas ações geralmente são feitas de " -"três maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " +"ações como copiar, cortar e colar. Essas ações geralmente são feitas de três " +"maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " "conectando as funções aos widgets :class:`Gtk.Button`." #: ../../source/clipboard.txt:11 @@ -46,10 +47,6 @@ msgid "" "text selected by the user with the cursor." msgstr "" "Existem várias seleções da área de transferência para finalidades " -"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` " -"é usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção " -"comum que armazena texto selecionado pelo usuário com o cursor." - -#: ../../source/clipboard.txt:17 -msgid "Example" -msgstr "Exemplo" +"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` é " +"usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção comum " +"que armazena texto selecionado pelo usuário com o cursor." diff --git a/translations/locale/pt_BR/LC_MESSAGES/combobox.po b/translations/locale/pt_BR/LC_MESSAGES/combobox.po index eb3babe..3fde155 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/combobox.po +++ b/translations/locale/pt_BR/LC_MESSAGES/combobox.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:07-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -79,7 +80,3 @@ msgstr "" "class:`Gtk.ComboBox` pode ser um pouco avassaladora. Neste caso, :class:`Gtk." "ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " "e :class:`Gtk.ComboBoxText` podem conter uma entrada." - -#: ../../source/combobox.txt:29 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po index 78f7c14..d126f1c 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po +++ b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 14:26-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -118,11 +119,6 @@ msgstr "" "ele precisará ser construído novamente, caso contrário a janela de diálogo " "estará vazia." -#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 -#: ../../source/dialogs.txt:130 -msgid "Example" -msgstr "Exemplo" - #: ../../source/dialogs.txt:53 msgid "MessageDialog" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po index 00f9d84..5f09976 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po +++ b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 04:04-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -217,7 +218,3 @@ msgstr "" #: ../../source/drag_and_drop.txt:70 msgid "When drag data is received by the destination" msgstr "Quando dados arrastados são recebidos pelo destino" - -#: ../../source/drag_and_drop.txt:74 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/entry.po b/translations/locale/pt_BR/LC_MESSAGES/entry.po index 377ee7a..0c631f6 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/entry.po +++ b/translations/locale/pt_BR/LC_MESSAGES/entry.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:03-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -88,7 +89,3 @@ msgstr "" "que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de " "ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." "set_icon_tooltip_text` ou a função correspondente para marcação." - -#: ../../source/entry.txt:32 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/iconview.po b/translations/locale/pt_BR/LC_MESSAGES/iconview.po index 7f1714b..42f0326 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/iconview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/iconview.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:19-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -57,7 +58,3 @@ msgstr "" "ou desaprovando a seleção de itens completamente. Para especificar um modo " "de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " "dos modos de seleção :class:`Gtk.SelectionMode`." - -#: ../../source/iconview.txt:10 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/index.po b/translations/locale/pt_BR/LC_MESSAGES/index.po index 9b11d14..d625479 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/index.po +++ b/translations/locale/pt_BR/LC_MESSAGES/index.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-27 18:50-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" diff --git a/translations/locale/pt_BR/LC_MESSAGES/install.po b/translations/locale/pt_BR/LC_MESSAGES/install.po index 9a51df5..a9b1a41 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/install.po +++ b/translations/locale/pt_BR/LC_MESSAGES/install.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" diff --git a/translations/locale/pt_BR/LC_MESSAGES/introduction.po b/translations/locale/pt_BR/LC_MESSAGES/introduction.po index 3d3b666..00863fe 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/introduction.po +++ b/translations/locale/pt_BR/LC_MESSAGES/introduction.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:54-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -31,8 +32,8 @@ msgid "" "To start with our tutorial we create the simplest program possible. This " "program will create an empty 200 x 200 pixel window." msgstr "" -"Para começar com o nosso tutorial, criamos o programa mais simples " -"possível. Este programa irá criar uma janela vazia de 200 x 200 pixels." +"Para começar com o nosso tutorial, criamos o programa mais simples possível. " +"Este programa irá criar uma janela vazia de 200 x 200 pixels." #: ../../source/introduction.txt:17 msgid "We will now explain each line of the example." @@ -73,16 +74,16 @@ msgid "" "Finally, we start the GTK+ processing loop which we quit when the window is " "closed (see line 5)." msgstr "" -"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos " -"quando a janela é fechada (veja a linha 5)." +"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando " +"a janela é fechada (veja a linha 5)." #: ../../source/introduction.txt:51 msgid "" "To run the program, open a terminal, change to the directory of the file, " "and enter::" msgstr "" -"Para executar o programa, abra um terminal, mude para o diretório do " -"arquivo e digite::" +"Para executar o programa, abra um terminal, mude para o diretório do arquivo " +"e digite::" #: ../../source/introduction.txt:57 msgid "Extended Example" @@ -138,5 +139,5 @@ msgid "" "Window` class, we create an instance of :class:`MyWindow`." msgstr "" "O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " -"invés de criar uma instância da classe genérica :class:`Gtk.Window`, " -"criamos uma instância de :class:`MyWindow`." +"invés de criar uma instância da classe genérica :class:`Gtk.Window`, criamos " +"uma instância de :class:`MyWindow`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/label.po b/translations/locale/pt_BR/LC_MESSAGES/label.po index 60dbb68..c17a907 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/label.po +++ b/translations/locale/pt_BR/LC_MESSAGES/label.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 04:29-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -109,10 +110,6 @@ msgstr "" "do widget de destino do mnemônico, você deve informar o rótulo sobre o " "destino usando :meth:`Gtk.Label.set_mnemonic_widget`." -#: ../../source/label.txt:48 -msgid "Example" -msgstr "Exemplo" - #: ../../source/label.txt:55 msgid "" "Pango Markup Syntax, http://developer.gnome.org/pango/stable/" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po index 3168501..6ea1b54 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po +++ b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:33-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -70,7 +71,3 @@ msgstr "" #: ../../source/layout-table.txt:22 msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." - -#: ../../source/layout-table.txt:26 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout.po b/translations/locale/pt_BR/LC_MESSAGES/layout.po index 1beaad3..d28b87a 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/layout.po +++ b/translations/locale/pt_BR/LC_MESSAGES/layout.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 02:36-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -90,13 +91,6 @@ msgstr "" "cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " "dentro ou ao lado de outras caixas para criar o efeito desejado." -#: ../../source/layout.txt:40 ../../source/layout.txt:97 -#: ../../source/layout.txt:123 ../../source/layout.txt:156 -#: ../../source/layout.txt:180 ../../source/layout.txt:210 -#: ../../source/layout.txt:230 -msgid "Example" -msgstr "Exemplo" - #: ../../source/layout.txt:42 msgid "" "Let's take a look at a slightly modified version of the extended example " diff --git a/translations/locale/pt_BR/LC_MESSAGES/menus.po b/translations/locale/pt_BR/LC_MESSAGES/menus.po index 883ae3f..c135c06 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/menus.po +++ b/translations/locale/pt_BR/LC_MESSAGES/menus.po @@ -3,25 +3,22 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:03-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" -#: ../../source/menus.txt:2 -msgid "Menus" -msgstr "" - #: ../../source/menus.txt:4 msgid "" ":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " @@ -50,10 +47,6 @@ msgstr "" "documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " "mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." -#: ../../source/menus.txt:17 -msgid "Actions" -msgstr "Ações" - #: ../../source/menus.txt:19 msgid "" "Although, there are specific APIs to create menus and toolbars, you should " @@ -212,7 +205,3 @@ msgid "" msgstr "" "Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " "e adiciona o widget a um container como :class:`Gtk.Box`." - -#: ../../source/menus.txt:80 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/objects.po b/translations/locale/pt_BR/LC_MESSAGES/objects.po index 70c39d1..3cfd789 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/objects.po +++ b/translations/locale/pt_BR/LC_MESSAGES/objects.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 18:20-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -172,10 +173,6 @@ msgstr "" msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" -#: ../../source/objects.txt:96 -msgid "Properties" -msgstr "Propriedades" - #: ../../source/objects.txt:97 msgid "" "One of GObject's nice features is its generic get/set mechanism for object " diff --git a/translations/locale/pt_BR/LC_MESSAGES/popover.po b/translations/locale/pt_BR/LC_MESSAGES/popover.po index a4ce2f0..12abf98 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/popover.po +++ b/translations/locale/pt_BR/LC_MESSAGES/popover.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 23:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:29-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -56,10 +57,6 @@ msgstr "" "Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." "add`." -#: ../../source/popover.txt:19 ../../source/popover.txt:34 -msgid "Example" -msgstr "Exemplo" - #: ../../source/popover.txt:27 msgid "Menu Popover" msgstr "" @@ -74,10 +71,6 @@ msgstr "" "`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" "`Gtk.Popover.bind_model`." -#: ../../source/popover.txt:41 -msgid "See Also" -msgstr "Veja também" - #: ../../source/popover.txt:43 msgid "https://developer.gnome.org/hig/stable/popovers.html.en" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po index afbb7df..5e87d16 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po +++ b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:19-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -86,7 +87,3 @@ msgstr "" "class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " "chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." "set_show_text`." - -#: ../../source/progressbar.txt:32 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/spinner.po b/translations/locale/pt_BR/LC_MESSAGES/spinner.po index e3bbfb5..69f80ec 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/spinner.po +++ b/translations/locale/pt_BR/LC_MESSAGES/spinner.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:35-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -39,7 +40,3 @@ msgid "" msgstr "" "Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" "meth:`Gtk.Spinner.stop`." - -#: ../../source/spinner.txt:12 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/stock.po b/translations/locale/pt_BR/LC_MESSAGES/stock.po deleted file mode 100644 index 5ac7c97..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/stock.po +++ /dev/null @@ -1,84 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 -# Tutorial package. -# FIRST AUTHOR , 2018. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47+0000\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.5.3\n" -"Last-Translator: Tomaz Cunha \n" -"Language-Team: \n" -"Language: pt_BR\n" -"X-Generator: Poedit 1.8.11\n" - -# e121e6594e0e4da9a1621a2377ef4958 -#: ../source/stock.txt:4 -msgid "Stock Items" -msgstr "" - -# 606b231d71674442a3f5d52d748963fa -#: ../source/stock.txt:6 -msgid "" -"Stock items represent commonly-used menu or toolbar items such as \"Open" -"\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs " -"are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are " -"provided to avoid typing mistakes in the strings." -msgstr "" - -# 414f2abe421e4978b47ca5427fb3f106 -# ddb9102f827b473eae086c933a8988da -# f116631764a1416e8d65f881b21f294d -# d6cefcc39cf64f0490a9ac6344093a1f -# 68e79a9579a9477ab9cc07c8831ac586 -# e7154d34aab04729a7c0b6ec84d8997f -# a4ad7d8ce49541d5aef4ca38acda2f75 -# 7205f6fbc7614699813f09ad4ad41b0d -# c7c278f8e45f4a0e90dd8e9f4efba75a -# f731da1a0b0d4a4f90f214d0e3068fad -# 3dcc064472ce433493951bdc676a1de1 -# 401ce8dc69d64ed2979b2c2bbabca805 -# e381d63cbcbb477bb7f54fc8fdedded0 -# a82fab50ef9a490aafffe735117b1b0e -# 4311fbff8eb04d1ababc0ea72a17877b -# 32791b18cb8048b598a5372d03433b5a -#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 -#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 -#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 -#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 -#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 -#: ../source/stock.txt:495 -msgid "LTR variant:" -msgstr "" - -# 856d301cc54844699657d94b81c62f38 -# c828bd161d3947f48d164903af1c15b1 -# fcd887eb429b406d87b598cee2af6456 -# 540c4c3bfb5549b2965d263b6adee0ff -# 8d3280e44d664904a253934d4a763ca8 -# dd41de5058984509aada4b41e5d15292 -# 2752da4a0eee46f49d1c1a8b212cb842 -# 7c3f745178dc46f5b49ef867c7d54c1c -# 7488f736d91c4f109c0b7f17ef0bc955 -# f592f6173a1e4362a78439441cf06a98 -# 3da43acde56548a190140395393f3f7a -# be82f292d16a4b86812d45ff60b39cc1 -# dc857a9abef7449db73e5eefb7bc51ac -# 75afb699f83c480e92f2398247b3bee9 -# b0643da317004916aabc5e5768a55df7 -# 5d2580d604fa4db980345d496d6d95d1 -#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 -#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 -#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 -#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 -#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 -#: ../source/stock.txt:499 -msgid "RTL variant:" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/textview.po b/translations/locale/pt_BR/LC_MESSAGES/textview.po index 55d9d37..93ce2c0 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/textview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/textview.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:32-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -43,10 +44,6 @@ msgstr "" "por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." "TextView`." -#: ../../source/textview.txt:13 -msgid "The View" -msgstr "A Visualização" - #: ../../source/textview.txt:15 msgid "" "The :class:`Gtk.TextView` is the frontend with which the user can add, edit " @@ -95,10 +92,6 @@ msgstr "" "inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " "chame :meth:`Gtk.TextView.set_wrap_mode`." -#: ../../source/textview.txt:36 -msgid "The Model" -msgstr "O Modelo" - #: ../../source/textview.txt:38 msgid "" "The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " @@ -282,7 +275,3 @@ msgstr "" "Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." "TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " "chamando :meth:`Gtk.TextBuffer.remove_all_tags`." - -#: ../../source/textview.txt:115 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/treeview.po b/translations/locale/pt_BR/LC_MESSAGES/treeview.po index 10e95a4..ec73765 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/treeview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/treeview.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:43-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -72,10 +73,6 @@ msgstr "" "complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " "capazes de utilizá-lo corretamente devido ao número de métodos necessários." -#: ../../source/treeview.txt:21 -msgid "The Model" -msgstr "O Modelo" - #: ../../source/treeview.txt:22 msgid "" "Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " @@ -219,10 +216,6 @@ msgstr "" "``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " "para, e ``treepath[i]`` retorna o índice do filho no nível *i*." -#: ../../source/treeview.txt:141 -msgid "The View" -msgstr "A View" - #: ../../source/treeview.txt:142 msgid "" "While there are several different models to choose from, there is only one " diff --git a/translations/locale/pt_BR/LC_MESSAGES/unicode.po b/translations/locale/pt_BR/LC_MESSAGES/unicode.po index 9eb9250..b6cf337 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/unicode.po +++ b/translations/locale/pt_BR/LC_MESSAGES/unicode.po @@ -3,18 +3,19 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 01:06-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" +"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" +"Last-Translator: Matheus Rodrigues \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" From 5a197a9a048ac86e4286f5176feca96c0b9dcea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:51:30 +0200 Subject: [PATCH 113/209] Revert "CI: Run tox via custom GitHub action" This reverts commit b773f69a10a034747c9039bd5408b934159f1e22. --- .github/actions/sphinx-build-all/Dockerfile | 17 ---- .github/actions/sphinx-build-all/action.yml | 6 -- .../actions/sphinx-build-all/entrypoint.sh | 3 - .github/workflows/tox-workflow.yaml | 16 +++- tox.ini | 2 - .../locale/pt_BR/LC_MESSAGES/application.po | 23 ++++- .../locale/pt_BR/LC_MESSAGES/basics.po | 11 ++- .../locale/pt_BR/LC_MESSAGES/builder.po | 11 ++- .../pt_BR/LC_MESSAGES/button_widgets.po | 13 ++- .../locale/pt_BR/LC_MESSAGES/cellrenderers.po | 13 ++- .../locale/pt_BR/LC_MESSAGES/clipboard.po | 21 +++-- .../locale/pt_BR/LC_MESSAGES/combobox.po | 11 ++- .../locale/pt_BR/LC_MESSAGES/dialogs.po | 12 ++- .../locale/pt_BR/LC_MESSAGES/drag_and_drop.po | 11 ++- .../locale/pt_BR/LC_MESSAGES/entry.po | 11 ++- .../locale/pt_BR/LC_MESSAGES/iconview.po | 11 ++- .../locale/pt_BR/LC_MESSAGES/index.po | 7 +- .../locale/pt_BR/LC_MESSAGES/install.po | 1 - .../locale/pt_BR/LC_MESSAGES/introduction.po | 21 +++-- .../locale/pt_BR/LC_MESSAGES/label.po | 9 +- .../locale/pt_BR/LC_MESSAGES/layout-table.po | 9 +- .../locale/pt_BR/LC_MESSAGES/layout.po | 12 ++- .../locale/pt_BR/LC_MESSAGES/menus.po | 17 +++- .../locale/pt_BR/LC_MESSAGES/objects.po | 9 +- .../locale/pt_BR/LC_MESSAGES/popover.po | 15 +++- .../locale/pt_BR/LC_MESSAGES/progressbar.po | 9 +- .../locale/pt_BR/LC_MESSAGES/spinner.po | 9 +- .../locale/pt_BR/LC_MESSAGES/stock.po | 84 +++++++++++++++++++ .../locale/pt_BR/LC_MESSAGES/textview.po | 17 +++- .../locale/pt_BR/LC_MESSAGES/treeview.po | 15 +++- .../locale/pt_BR/LC_MESSAGES/unicode.po | 7 +- 31 files changed, 300 insertions(+), 133 deletions(-) delete mode 100644 .github/actions/sphinx-build-all/Dockerfile delete mode 100644 .github/actions/sphinx-build-all/action.yml delete mode 100755 .github/actions/sphinx-build-all/entrypoint.sh create mode 100644 translations/locale/pt_BR/LC_MESSAGES/stock.po diff --git a/.github/actions/sphinx-build-all/Dockerfile b/.github/actions/sphinx-build-all/Dockerfile deleted file mode 100644 index e5d0d45..0000000 --- a/.github/actions/sphinx-build-all/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM python:slim - -RUN apt-get update \ - && apt-get install -y \ - gettext \ - graphviz \ - imagemagick \ - make \ - && apt-get autoremove \ - && apt-get clean - -RUN python3 -m pip install -U pip -RUN python3 -m pip install tox - -COPY entrypoint.sh /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/.github/actions/sphinx-build-all/action.yml b/.github/actions/sphinx-build-all/action.yml deleted file mode 100644 index 5830261..0000000 --- a/.github/actions/sphinx-build-all/action.yml +++ /dev/null @@ -1,6 +0,0 @@ -# action.yml -name: 'sphinx-build' -description: 'Runs sphinx-build for all languages' -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/sphinx-build-all/entrypoint.sh b/.github/actions/sphinx-build-all/entrypoint.sh deleted file mode 100755 index 5bf4daf..0000000 --- a/.github/actions/sphinx-build-all/entrypoint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -l - -tox \ No newline at end of file diff --git a/.github/workflows/tox-workflow.yaml b/.github/workflows/tox-workflow.yaml index 28c1872..b57330c 100644 --- a/.github/workflows/tox-workflow.yaml +++ b/.github/workflows/tox-workflow.yaml @@ -4,14 +4,22 @@ on: [push, pull_request] jobs: sphinx_build: runs-on: ubuntu-latest - name: Build + name: Linting and Docs steps: - name: Checkout uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Install Tox + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox - name: Run Tox - uses: ./.github/actions/sphinx-build-all@master - - name: Archive HTML documents + run: tox + - name: Archive documentation uses: actions/upload-artifact@v1 with: - name: pygobject-tutorial + name: documentation path: build/html diff --git a/tox.ini b/tox.ini index e0402ec..d820c5a 100644 --- a/tox.ini +++ b/tox.ini @@ -15,8 +15,6 @@ commands = xargs -a .tmp-LINGUAS -I '{}' -d';' sphinx-build -D language='{}' -E -W -b html ../source '../build/html/{}' rm -f .tmp-LINGUAS whitelist_externals = - /bin/bash - /bin/rm /usr/bin/bash /usr/bin/rm /usr/bin/make diff --git a/translations/locale/pt_BR/LC_MESSAGES/application.po b/translations/locale/pt_BR/LC_MESSAGES/application.po index 1ee9fe7..2adfd51 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/application.po +++ b/translations/locale/pt_BR/LC_MESSAGES/application.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-06 05:32-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -35,6 +34,10 @@ msgstr "" "Bus, abertura de arquivos, análise de linha de comando, inicialização/" "desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." +#: ../../source/application.txt:12 +msgid "Actions" +msgstr "Ações" + #: ../../source/application.txt:14 msgid "" ":class:`Gio.Action` is a way to expose any single task your application or " @@ -94,6 +97,10 @@ msgstr "" "propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." "Application.add_accelerator()`." +#: ../../source/application.txt:36 +msgid "Menus" +msgstr "" + #: ../../source/application.txt:38 msgid "" "Your menus should be defined in XML using :class:`Gio.Menu` and would " @@ -154,6 +161,14 @@ msgstr "" "Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " "existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." +#: ../../source/application.txt:61 +msgid "Example" +msgstr "Exemplo" + +#: ../../source/application.txt:69 +msgid "See Also" +msgstr "Veja também" + #: ../../source/application.txt:71 msgid "https://wiki.gnome.org/HowDoI/GtkApplication" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/basics.po b/translations/locale/pt_BR/LC_MESSAGES/basics.po index a6e4949..47c0420 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/basics.po +++ b/translations/locale/pt_BR/LC_MESSAGES/basics.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-11 22:29-0300\n" +"PO-Revision-Date: 2018-04-11 22:41-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -138,6 +137,10 @@ msgstr "" "Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" "`Gtk.main`." +#: ../../source/basics.txt:77 +msgid "Properties" +msgstr "Propriedades" + #: ../../source/basics.txt:78 msgid "" "Properties describe the configuration and state of widgets. As for signals, " diff --git a/translations/locale/pt_BR/LC_MESSAGES/builder.po b/translations/locale/pt_BR/LC_MESSAGES/builder.po index 1c84e3b..48c8aa0 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/builder.po +++ b/translations/locale/pt_BR/LC_MESSAGES/builder.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-11 22:50-0300\n" +"PO-Revision-Date: 2018-04-11 22:57-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -215,6 +214,10 @@ msgstr "" "chamados como os sinais. Em nosso exemplo, o último snippet de código pode " "ser reescrito como:" +#: ../../source/builder.txt:119 +msgid "Example" +msgstr "Exemplo" + #: ../../source/builder.txt:120 msgid "The final code of the example" msgstr "O código final do exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po index 4fb642a..90279be 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po +++ b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-01 06:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -53,6 +52,12 @@ msgstr "" "Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " "emitido quando o botão foi pressionado e liberado." +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +msgid "Example" +msgstr "Exemplo" + #: ../../source/button_widgets.txt:26 msgid "ToggleButton" msgstr "Botão de Alternância" diff --git a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po index edec413..9bf9fab 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po +++ b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-04 06:37-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -104,6 +103,12 @@ msgstr "" "Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." "TreeModel` de acordo." +#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 +#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 +#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 +msgid "Example" +msgstr "Exemplo" + #: ../../source/cellrenderers.txt:47 msgid "CellRendererToggle" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po index 9800970..187a1db 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po +++ b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-05 03:57-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -35,8 +34,8 @@ msgstr "" ":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " "de dados, incluindo texto e imagens. O uso de uma área de transferência " "permite que esses dados sejam compartilhados entre aplicativos por meio de " -"ações como copiar, cortar e colar. Essas ações geralmente são feitas de três " -"maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " +"ações como copiar, cortar e colar. Essas ações geralmente são feitas de " +"três maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " "conectando as funções aos widgets :class:`Gtk.Button`." #: ../../source/clipboard.txt:11 @@ -47,6 +46,10 @@ msgid "" "text selected by the user with the cursor." msgstr "" "Existem várias seleções da área de transferência para finalidades " -"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` é " -"usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção comum " -"que armazena texto selecionado pelo usuário com o cursor." +"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` " +"é usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção " +"comum que armazena texto selecionado pelo usuário com o cursor." + +#: ../../source/clipboard.txt:17 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/combobox.po b/translations/locale/pt_BR/LC_MESSAGES/combobox.po index 3fde155..eb3babe 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/combobox.po +++ b/translations/locale/pt_BR/LC_MESSAGES/combobox.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-04 11:07-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -80,3 +79,7 @@ msgstr "" "class:`Gtk.ComboBox` pode ser um pouco avassaladora. Neste caso, :class:`Gtk." "ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " "e :class:`Gtk.ComboBoxText` podem conter uma entrada." + +#: ../../source/combobox.txt:29 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po index d126f1c..78f7c14 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po +++ b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-04 14:26-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -119,6 +118,11 @@ msgstr "" "ele precisará ser construído novamente, caso contrário a janela de diálogo " "estará vazia." +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 +msgid "Example" +msgstr "Exemplo" + #: ../../source/dialogs.txt:53 msgid "MessageDialog" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po index 5f09976..00f9d84 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po +++ b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-05 04:04-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -218,3 +217,7 @@ msgstr "" #: ../../source/drag_and_drop.txt:70 msgid "When drag data is received by the destination" msgstr "Quando dados arrastados são recebidos pelo destino" + +#: ../../source/drag_and_drop.txt:74 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/entry.po b/translations/locale/pt_BR/LC_MESSAGES/entry.po index 0c631f6..377ee7a 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/entry.po +++ b/translations/locale/pt_BR/LC_MESSAGES/entry.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-01 06:03-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -89,3 +88,7 @@ msgstr "" "que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de " "ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." "set_icon_tooltip_text` ou a função correspondente para marcação." + +#: ../../source/entry.txt:32 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/iconview.po b/translations/locale/pt_BR/LC_MESSAGES/iconview.po index 42f0326..7f1714b 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/iconview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/iconview.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-04 11:19-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -58,3 +57,7 @@ msgstr "" "ou desaprovando a seleção de itens completamente. Para especificar um modo " "de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " "dos modos de seleção :class:`Gtk.SelectionMode`." + +#: ../../source/iconview.txt:10 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/index.po b/translations/locale/pt_BR/LC_MESSAGES/index.po index d625479..9b11d14 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/index.po +++ b/translations/locale/pt_BR/LC_MESSAGES/index.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-03-27 18:50-0300\n" +"PO-Revision-Date: 2018-04-11 23:06-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" diff --git a/translations/locale/pt_BR/LC_MESSAGES/install.po b/translations/locale/pt_BR/LC_MESSAGES/install.po index a9b1a41..9a51df5 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/install.po +++ b/translations/locale/pt_BR/LC_MESSAGES/install.po @@ -3,7 +3,6 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" diff --git a/translations/locale/pt_BR/LC_MESSAGES/introduction.po b/translations/locale/pt_BR/LC_MESSAGES/introduction.po index 00863fe..3d3b666 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/introduction.po +++ b/translations/locale/pt_BR/LC_MESSAGES/introduction.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-03-29 00:54-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -32,8 +31,8 @@ msgid "" "To start with our tutorial we create the simplest program possible. This " "program will create an empty 200 x 200 pixel window." msgstr "" -"Para começar com o nosso tutorial, criamos o programa mais simples possível. " -"Este programa irá criar uma janela vazia de 200 x 200 pixels." +"Para começar com o nosso tutorial, criamos o programa mais simples " +"possível. Este programa irá criar uma janela vazia de 200 x 200 pixels." #: ../../source/introduction.txt:17 msgid "We will now explain each line of the example." @@ -74,16 +73,16 @@ msgid "" "Finally, we start the GTK+ processing loop which we quit when the window is " "closed (see line 5)." msgstr "" -"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando " -"a janela é fechada (veja a linha 5)." +"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos " +"quando a janela é fechada (veja a linha 5)." #: ../../source/introduction.txt:51 msgid "" "To run the program, open a terminal, change to the directory of the file, " "and enter::" msgstr "" -"Para executar o programa, abra um terminal, mude para o diretório do arquivo " -"e digite::" +"Para executar o programa, abra um terminal, mude para o diretório do " +"arquivo e digite::" #: ../../source/introduction.txt:57 msgid "Extended Example" @@ -139,5 +138,5 @@ msgid "" "Window` class, we create an instance of :class:`MyWindow`." msgstr "" "O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " -"invés de criar uma instância da classe genérica :class:`Gtk.Window`, criamos " -"uma instância de :class:`MyWindow`." +"invés de criar uma instância da classe genérica :class:`Gtk.Window`, " +"criamos uma instância de :class:`MyWindow`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/label.po b/translations/locale/pt_BR/LC_MESSAGES/label.po index c17a907..60dbb68 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/label.po +++ b/translations/locale/pt_BR/LC_MESSAGES/label.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-01 04:29-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -110,6 +109,10 @@ msgstr "" "do widget de destino do mnemônico, você deve informar o rótulo sobre o " "destino usando :meth:`Gtk.Label.set_mnemonic_widget`." +#: ../../source/label.txt:48 +msgid "Example" +msgstr "Exemplo" + #: ../../source/label.txt:55 msgid "" "Pango Markup Syntax, http://developer.gnome.org/pango/stable/" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po index 6ea1b54..3168501 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po +++ b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-06 06:33-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -71,3 +70,7 @@ msgstr "" #: ../../source/layout-table.txt:22 msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." + +#: ../../source/layout-table.txt:26 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout.po b/translations/locale/pt_BR/LC_MESSAGES/layout.po index d28b87a..1beaad3 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/layout.po +++ b/translations/locale/pt_BR/LC_MESSAGES/layout.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-03-30 02:36-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -91,6 +90,13 @@ msgstr "" "cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " "dentro ou ao lado de outras caixas para criar o efeito desejado." +#: ../../source/layout.txt:40 ../../source/layout.txt:97 +#: ../../source/layout.txt:123 ../../source/layout.txt:156 +#: ../../source/layout.txt:180 ../../source/layout.txt:210 +#: ../../source/layout.txt:230 +msgid "Example" +msgstr "Exemplo" + #: ../../source/layout.txt:42 msgid "" "Let's take a look at a slightly modified version of the extended example " diff --git a/translations/locale/pt_BR/LC_MESSAGES/menus.po b/translations/locale/pt_BR/LC_MESSAGES/menus.po index c135c06..883ae3f 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/menus.po +++ b/translations/locale/pt_BR/LC_MESSAGES/menus.po @@ -3,22 +3,25 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-06 06:03-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" +#: ../../source/menus.txt:2 +msgid "Menus" +msgstr "" + #: ../../source/menus.txt:4 msgid "" ":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " @@ -47,6 +50,10 @@ msgstr "" "documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " "mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." +#: ../../source/menus.txt:17 +msgid "Actions" +msgstr "Ações" + #: ../../source/menus.txt:19 msgid "" "Although, there are specific APIs to create menus and toolbars, you should " @@ -205,3 +212,7 @@ msgid "" msgstr "" "Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " "e adiciona o widget a um container como :class:`Gtk.Box`." + +#: ../../source/menus.txt:80 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/objects.po b/translations/locale/pt_BR/LC_MESSAGES/objects.po index 3cfd789..70c39d1 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/objects.po +++ b/translations/locale/pt_BR/LC_MESSAGES/objects.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-05 18:20-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -173,6 +172,10 @@ msgstr "" msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" +#: ../../source/objects.txt:96 +msgid "Properties" +msgstr "Propriedades" + #: ../../source/objects.txt:97 msgid "" "One of GObject's nice features is its generic get/set mechanism for object " diff --git a/translations/locale/pt_BR/LC_MESSAGES/popover.po b/translations/locale/pt_BR/LC_MESSAGES/popover.po index 12abf98..a4ce2f0 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/popover.po +++ b/translations/locale/pt_BR/LC_MESSAGES/popover.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-11 23:24-0300\n" +"PO-Revision-Date: 2018-04-11 23:29-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -57,6 +56,10 @@ msgstr "" "Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." "add`." +#: ../../source/popover.txt:19 ../../source/popover.txt:34 +msgid "Example" +msgstr "Exemplo" + #: ../../source/popover.txt:27 msgid "Menu Popover" msgstr "" @@ -71,6 +74,10 @@ msgstr "" "`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" "`Gtk.Popover.bind_model`." +#: ../../source/popover.txt:41 +msgid "See Also" +msgstr "Veja também" + #: ../../source/popover.txt:43 msgid "https://developer.gnome.org/hig/stable/popovers.html.en" msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po index 5e87d16..afbb7df 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po +++ b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-04 04:19-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -87,3 +86,7 @@ msgstr "" "class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " "chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." "set_show_text`." + +#: ../../source/progressbar.txt:32 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/spinner.po b/translations/locale/pt_BR/LC_MESSAGES/spinner.po index 69f80ec..e3bbfb5 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/spinner.po +++ b/translations/locale/pt_BR/LC_MESSAGES/spinner.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-04 04:35-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -40,3 +39,7 @@ msgid "" msgstr "" "Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" "meth:`Gtk.Spinner.stop`." + +#: ../../source/spinner.txt:12 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/stock.po b/translations/locale/pt_BR/LC_MESSAGES/stock.po new file mode 100644 index 0000000..5ac7c97 --- /dev/null +++ b/translations/locale/pt_BR/LC_MESSAGES/stock.po @@ -0,0 +1,84 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) GNU Free Documentation License 1.3 +# This file is distributed under the same license as the Python GTK+ 3 +# Tutorial package. +# FIRST AUTHOR , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-10 09:47+0000\n" +"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.5.3\n" +"Last-Translator: Tomaz Cunha \n" +"Language-Team: \n" +"Language: pt_BR\n" +"X-Generator: Poedit 1.8.11\n" + +# e121e6594e0e4da9a1621a2377ef4958 +#: ../source/stock.txt:4 +msgid "Stock Items" +msgstr "" + +# 606b231d71674442a3f5d52d748963fa +#: ../source/stock.txt:6 +msgid "" +"Stock items represent commonly-used menu or toolbar items such as \"Open" +"\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs " +"are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are " +"provided to avoid typing mistakes in the strings." +msgstr "" + +# 414f2abe421e4978b47ca5427fb3f106 +# ddb9102f827b473eae086c933a8988da +# f116631764a1416e8d65f881b21f294d +# d6cefcc39cf64f0490a9ac6344093a1f +# 68e79a9579a9477ab9cc07c8831ac586 +# e7154d34aab04729a7c0b6ec84d8997f +# a4ad7d8ce49541d5aef4ca38acda2f75 +# 7205f6fbc7614699813f09ad4ad41b0d +# c7c278f8e45f4a0e90dd8e9f4efba75a +# f731da1a0b0d4a4f90f214d0e3068fad +# 3dcc064472ce433493951bdc676a1de1 +# 401ce8dc69d64ed2979b2c2bbabca805 +# e381d63cbcbb477bb7f54fc8fdedded0 +# a82fab50ef9a490aafffe735117b1b0e +# 4311fbff8eb04d1ababc0ea72a17877b +# 32791b18cb8048b598a5372d03433b5a +#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 +#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 +#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 +#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 +#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 +#: ../source/stock.txt:495 +msgid "LTR variant:" +msgstr "" + +# 856d301cc54844699657d94b81c62f38 +# c828bd161d3947f48d164903af1c15b1 +# fcd887eb429b406d87b598cee2af6456 +# 540c4c3bfb5549b2965d263b6adee0ff +# 8d3280e44d664904a253934d4a763ca8 +# dd41de5058984509aada4b41e5d15292 +# 2752da4a0eee46f49d1c1a8b212cb842 +# 7c3f745178dc46f5b49ef867c7d54c1c +# 7488f736d91c4f109c0b7f17ef0bc955 +# f592f6173a1e4362a78439441cf06a98 +# 3da43acde56548a190140395393f3f7a +# be82f292d16a4b86812d45ff60b39cc1 +# dc857a9abef7449db73e5eefb7bc51ac +# 75afb699f83c480e92f2398247b3bee9 +# b0643da317004916aabc5e5768a55df7 +# 5d2580d604fa4db980345d496d6d95d1 +#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 +#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 +#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 +#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 +#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 +#: ../source/stock.txt:499 +msgid "RTL variant:" +msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/textview.po b/translations/locale/pt_BR/LC_MESSAGES/textview.po index 93ce2c0..55d9d37 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/textview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/textview.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" +"POT-Creation-Date: 2018-04-04 11:32-0300\n" "PO-Revision-Date: 2018-04-11 23:07-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -44,6 +43,10 @@ msgstr "" "por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." "TextView`." +#: ../../source/textview.txt:13 +msgid "The View" +msgstr "A Visualização" + #: ../../source/textview.txt:15 msgid "" "The :class:`Gtk.TextView` is the frontend with which the user can add, edit " @@ -92,6 +95,10 @@ msgstr "" "inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " "chame :meth:`Gtk.TextView.set_wrap_mode`." +#: ../../source/textview.txt:36 +msgid "The Model" +msgstr "O Modelo" + #: ../../source/textview.txt:38 msgid "" "The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " @@ -275,3 +282,7 @@ msgstr "" "Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." "TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " "chamando :meth:`Gtk.TextBuffer.remove_all_tags`." + +#: ../../source/textview.txt:115 +msgid "Example" +msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/treeview.po b/translations/locale/pt_BR/LC_MESSAGES/treeview.po index ec73765..10e95a4 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/treeview.po +++ b/translations/locale/pt_BR/LC_MESSAGES/treeview.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-04-04 04:43-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" @@ -73,6 +72,10 @@ msgstr "" "complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " "capazes de utilizá-lo corretamente devido ao número de métodos necessários." +#: ../../source/treeview.txt:21 +msgid "The Model" +msgstr "O Modelo" + #: ../../source/treeview.txt:22 msgid "" "Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " @@ -216,6 +219,10 @@ msgstr "" "``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " "para, e ``treepath[i]`` retorna o índice do filho no nível *i*." +#: ../../source/treeview.txt:141 +msgid "The View" +msgstr "A View" + #: ../../source/treeview.txt:142 msgid "" "While there are several different models to choose from, there is only one " diff --git a/translations/locale/pt_BR/LC_MESSAGES/unicode.po b/translations/locale/pt_BR/LC_MESSAGES/unicode.po index b6cf337..9eb9250 100644 --- a/translations/locale/pt_BR/LC_MESSAGES/unicode.po +++ b/translations/locale/pt_BR/LC_MESSAGES/unicode.po @@ -3,19 +3,18 @@ # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" +"POT-Creation-Date: 2018-03-30 01:06-0300\n" +"PO-Revision-Date: 2018-04-11 23:08-0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" +"Last-Translator: Tomaz Cunha \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" From a123f7cf64b42d89cfeaa3d7d722f2ff7eceede9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:51:04 +0200 Subject: [PATCH 114/209] CI: Run tox via custom GitHub action --- .github/actions/sphinx-build-all/Dockerfile | 17 +++++++++++++++++ .github/actions/sphinx-build-all/action.yml | 6 ++++++ .github/actions/sphinx-build-all/entrypoint.sh | 3 +++ .github/workflows/tox-workflow.yaml | 16 ++++------------ tox.ini | 2 ++ 5 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 .github/actions/sphinx-build-all/Dockerfile create mode 100644 .github/actions/sphinx-build-all/action.yml create mode 100755 .github/actions/sphinx-build-all/entrypoint.sh diff --git a/.github/actions/sphinx-build-all/Dockerfile b/.github/actions/sphinx-build-all/Dockerfile new file mode 100644 index 0000000..e5d0d45 --- /dev/null +++ b/.github/actions/sphinx-build-all/Dockerfile @@ -0,0 +1,17 @@ +FROM python:slim + +RUN apt-get update \ + && apt-get install -y \ + gettext \ + graphviz \ + imagemagick \ + make \ + && apt-get autoremove \ + && apt-get clean + +RUN python3 -m pip install -U pip +RUN python3 -m pip install tox + +COPY entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/.github/actions/sphinx-build-all/action.yml b/.github/actions/sphinx-build-all/action.yml new file mode 100644 index 0000000..5830261 --- /dev/null +++ b/.github/actions/sphinx-build-all/action.yml @@ -0,0 +1,6 @@ +# action.yml +name: 'sphinx-build' +description: 'Runs sphinx-build for all languages' +runs: + using: 'docker' + image: 'Dockerfile' diff --git a/.github/actions/sphinx-build-all/entrypoint.sh b/.github/actions/sphinx-build-all/entrypoint.sh new file mode 100755 index 0000000..5bf4daf --- /dev/null +++ b/.github/actions/sphinx-build-all/entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/sh -l + +tox \ No newline at end of file diff --git a/.github/workflows/tox-workflow.yaml b/.github/workflows/tox-workflow.yaml index b57330c..28c1872 100644 --- a/.github/workflows/tox-workflow.yaml +++ b/.github/workflows/tox-workflow.yaml @@ -4,22 +4,14 @@ on: [push, pull_request] jobs: sphinx_build: runs-on: ubuntu-latest - name: Linting and Docs + name: Build steps: - name: Checkout uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.7 - - name: Install Tox - run: | - python -m pip install --upgrade pip - python -m pip install --upgrade tox - name: Run Tox - run: tox - - name: Archive documentation + uses: ./.github/actions/sphinx-build-all@master + - name: Archive HTML documents uses: actions/upload-artifact@v1 with: - name: documentation + name: pygobject-tutorial path: build/html diff --git a/tox.ini b/tox.ini index d820c5a..e0402ec 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,8 @@ commands = xargs -a .tmp-LINGUAS -I '{}' -d';' sphinx-build -D language='{}' -E -W -b html ../source '../build/html/{}' rm -f .tmp-LINGUAS whitelist_externals = + /bin/bash + /bin/rm /usr/bin/bash /usr/bin/rm /usr/bin/make From db440a22c6cd4b632f425ce879b6d7b2d59eac1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 19:54:16 +0200 Subject: [PATCH 115/209] CI: Fix path to custom action --- .github/workflows/tox-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tox-workflow.yaml b/.github/workflows/tox-workflow.yaml index 28c1872..ea08d56 100644 --- a/.github/workflows/tox-workflow.yaml +++ b/.github/workflows/tox-workflow.yaml @@ -9,7 +9,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Run Tox - uses: ./.github/actions/sphinx-build-all@master + uses: ./.github/actions/sphinx-build-all - name: Archive HTML documents uses: actions/upload-artifact@v1 with: From d3a3bcbb7889312e06acd2905baeba4bcb562bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 20 Apr 2020 20:13:53 +0200 Subject: [PATCH 116/209] Add build status badges --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a854df6..ace3c67 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ +[![Documentation Status](https://readthedocs.org/projects/python-gtk-3-tutorial/badge/?version=latest)](https://python-gtk-3-tutorial.readthedocs.io/en/latest/?badge=latest) +[![Tox](https://github.com/sebp/PyGObject-Tutorial/workflows/Tox/badge.svg?branch=master)](https://github.com/sebp/PyGObject-Tutorial/actions?query=workflow%3ATox+branch%3Amaster+) + + The PyGObject Tutorial ====================== -An introduction to deveolping GTK+ 3 applications in Python with [PyGObject](https://pygobject.readthedocs.io). +An introduction to developing GTK+ 3 applications in Python with [PyGObject](https://pygobject.readthedocs.io). The tutorial's web site is https://python-gtk-3-tutorial.readthedocs.io From 1153e81cde4dabe8abd67eeefacdae2726433a62 Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Sun, 19 Apr 2020 17:38:37 -0300 Subject: [PATCH 117/209] Update Brazilian Portuguese translation --- translations/po/pt_BR.po | 7531 ++++++++++++++++++-------------------- 1 file changed, 3620 insertions(+), 3911 deletions(-) diff --git a/translations/po/pt_BR.po b/translations/po/pt_BR.po index 1e3cbf8..27433dc 100644 --- a/translations/po/pt_BR.po +++ b/translations/po/pt_BR.po @@ -1,667 +1,873 @@ -# SOME DESCRIPTIVE TITLE. +# Brazilian Portuguese translation for Python GTK+ 3 Tutorial # Copyright (C) GNU Free Documentation License 1.3 # This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. +# Rafael Fontenelle , 2020. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" +"POT-Creation-Date: 2020-04-18 20:31+0200\n" +"PO-Revision-Date: 2020-04-19 13:48-0300\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 3.36.0\n" -#: ../../source/application.txt:4 -msgid "Application" -msgstr "Aplicação" +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "IconView" -#: ../../source/application.txt:6 +#: ../../source/iconview.txt:3 msgid "" -":class:`Gtk.Application` encompasses many repetitive tasks that a modern " -"application needs such as handling multiple instances, D-Bus activation, " -"opening files, command line parsing, startup/shutdown, menu management, " -"window management, and more." +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." msgstr "" -":class:`Gtk.Application` abrange muitas tarefas repetitivas que um " -"aplicativo moderno precisa, como manipular várias instâncias, ativação do D-" -"Bus, abertura de arquivos, análise de linha de comando, inicialização/" -"desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." +"A :class:`Gtk.IconView` é um widget que exibe uma coleção de ícones em uma " +"visualização de grade. Ele possui suporte a recursos como arrastar e soltar, " +"seleções múltiplas e reordenação de itens." -#: ../../source/application.txt:14 +#: ../../source/iconview.txt:5 msgid "" -":class:`Gio.Action` is a way to expose any single task your application or " -"widget does by a name. These actions can be disabled/enabled at runtime and " -"they can either be activated or have a state changed (if they contain state)." +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." msgstr "" -":class:`Gio.Action` é uma maneira de expor qualquer tarefa que seu " -"aplicativo ou widget fizer por um nome. Essas ações podem ser desabilitadas/" -"habilitadas no tempo de execução e podem ser ativadas ou ter um estado " -"alterado (se elas contiverem estado)." +"Similarmente a :class:`Gtk.TreeView`, :class:`Gtk.IconView` usa um :class:" +"`Gtk.ListStore` para seu modelo. Em vez de usar :ref:`renderizadores de " +"célula `, :class:`Gtk.IconView` requer que uma das colunas em " +"seu :class:`Gtk.ListStore` contenha objetos :class:`GdkPixbuf.Pixbuf`." -#: ../../source/application.txt:18 +#: ../../source/iconview.txt:7 msgid "" -"The reason to use actions is to separate out the logic from the UI. For " -"example this allows using a menubar on OSX and a gear menu on GNOME both " -"simply referencing the name of an action. The main implementation of this " -"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " -"later." +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." msgstr "" -"O motivo para usar ações é separar a lógica da interface do usuário. Por " -"exemplo, isso permite usar uma barra de menu no OSX e um menu de engrenagem " -"no GNOME, simplesmente referenciando o nome de uma ação. A principal " -"implementação que você estará usando é :class:`Gio.SimpleAction` que será " -"mostrado mais tarde." +":class:`Gtk.IconView` possui suporte a vários modos de seleção para permitir " +"a seleção de vários ícones por vez, restringindo seleções para apenas um " +"item ou desaprovando a seleção de itens completamente. Para especificar um " +"modo de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado " +"com um dos modos de seleção :class:`Gtk.SelectionMode`." + +#: ../../source/iconview.txt:10 ../../source/layout.txt:40 +#: ../../source/layout.txt:97 ../../source/layout.txt:123 +#: ../../source/layout.txt:156 ../../source/layout.txt:180 +#: ../../source/layout.txt:212 ../../source/layout.txt:232 +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 +#: ../../source/layout-table.txt:26 ../../source/combobox.txt:29 +#: ../../source/builder.txt:118 ../../source/entry.txt:32 +#: ../../source/clipboard.txt:17 ../../source/cellrenderers.txt:39 +#: ../../source/cellrenderers.txt:59 ../../source/cellrenderers.txt:74 +#: ../../source/cellrenderers.txt:98 ../../source/cellrenderers.txt:116 +#: ../../source/cellrenderers.txt:138 ../../source/menus.txt:80 +#: ../../source/textview.txt:115 ../../source/label.txt:48 +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 ../../source/popover.txt:19 +#: ../../source/popover.txt:34 ../../source/drag_and_drop.txt:74 +#: ../../source/application.txt:61 ../../source/progressbar.txt:32 +msgid "Example" +msgstr "Exemplo" -#: ../../source/application.txt:23 +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "Contêineres de Layout" + +#: ../../source/layout.txt:5 msgid "" -"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " -"support properties to set an action name." +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." msgstr "" -"Muitas classes, como :class:`Gio.MenuItem` e :class:`Gtk.ModelButton` " -"suportam propriedades para definir um nome de ação." +"Enquanto muitos toolkits de GUI exigem que você coloque precisamente widgets " +"em uma janela, usando posicionamento absoluto, o GTK+ usa uma abordagem " +"diferente. Em vez de especificar a posição e o tamanho de cada widget na " +"janela, você pode organizar seus widgets em linhas, colunas e/ou tabelas. O " +"tamanho da sua janela pode ser determinado automaticamente, com base nos " +"tamanhos dos widgets que ela contém. E os tamanhos dos widgets, por sua vez, " +"são determinados pela quantidade de texto que eles contêm, ou os tamanhos " +"mínimo e máximo que você especifica, e/ou como você solicitou que o espaço " +"disponível seja compartilhado entre conjuntos de widgets. Você pode " +"aperfeiçoar seu layout especificando a distância de preenchimento e os " +"valores de centralização para cada um de seus widgets. O GTK+ usa todas " +"essas informações para redimensionar e reposicionar tudo de maneira sensata " +"e suave quando o usuário manipula a janela." -#: ../../source/application.txt:26 +#: ../../source/layout.txt:19 msgid "" -"These actions can be grouped together into a :class:`Gio.ActionGroup` and " -"when these groups are added to a widget with :meth:`Gtk.Widget." -"insert_action_group()` they will gain a prefix. Such as \"win\" when added " -"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " -"referencing it such as \"app.about\" but when you create the action it will " -"just be \"about\" until added to the application." +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." msgstr "" -"Estas ações podem ser agrupadas em um :class:`Gio.ActionGroup` e quando " -"esses grupos são adicionados a um widget com :meth:`Gtk.Widget." -"insert_action_group()`, eles ganharão um prefixo. Tal como \"win\" quando " -"adicionado a um :class:`Gtk.ApplicationWindow`. Você usará o nome completo " -"da ação ao fazer referência a ele, como \"app.about\", mas ao criar a ação, " -"ela ficará \"about\" até ser adicionada ao aplicativo." +"O GTK+ organiza widgets hierarquicamente, usando *contêineres*. Eles são " +"invisíveis para o usuário-final e são inseridos em uma janela ou colocados " +"entre si para os componentes do layout. Existem dois tipos de contêineres: " +"contêineres filho único, todos descendentes de :class:`Gtk.Bin`, e " +"contêineres com vários filhos, que são descendentes de :class:`Gtk." +"Container`. Os mais usados são caixas verticais ou horizontais (:class:`Gtk." +"Box`) e grades (:class:`Gtk.Grid`)." -#: ../../source/application.txt:32 +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "Box" + +#: ../../source/layout.txt:31 msgid "" -"You can also very easily make keybindings for actions by setting the `accel` " -"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." -"add_accelerator()`." +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." msgstr "" -"Você também pode facilmente criar keybindings para ações definindo a " -"propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." -"Application.add_accelerator()`." +"As cauxas *Box* são contêineres invisíveis nos quais podemos empacotar " +"nossos widgets. Ao agrupar widgets em uma caixa horizontal, os objetos são " +"inseridos horizontalmente da esquerda para a direita ou da direita para a " +"esquerda, dependendo se :meth:`Gtk.Box.pack_start` ou :meth:`Gtk.Box." +"pack_end` for usado. Em uma caixa vertical, os widgets são empacotados de " +"cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " +"dentro ou ao lado de outras caixas para criar o efeito desejado." -#: ../../source/application.txt:38 +#: ../../source/layout.txt:42 msgid "" -"Your menus should be defined in XML using :class:`Gio.Menu` and would " -"reference the previously mentioned actions you defined. :class:`Gtk." -"Application` allows you to set a menu either via :meth:`Gtk.Application." -"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " -"of :class:`Gio.Resource` this can automatically use the correct menu based " -"on platform, otherwise you can set them manually. A detailed example is " -"shown below." +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." msgstr "" -"Seus menus devem ser definidos em XML usando :class:`Gio.Menu` e referenciam " -"as ações mencionadas anteriormente que você definiu. :class:`Gtk." -"Application` permite que você defina um menu via :meth:`Gtk.Application." -"set_app_menu()` ou :meth:`Gtk.Application.set_menubar()`. Se você faz uso " -"de :class:`Gio.Resource` isto pode usar automaticamente o menu correto " -"baseado na plataforma, caso contrário você pode configurá-los manualmente. " -"Um exemplo detalhado é mostrado abaixo." - -#: ../../source/application.txt:46 -msgid "Command Line" -msgstr "Linha de Comando" +"Vamos dar uma olhada em uma versão ligeiramente modificada do exemplo " +"estendido com dois botões." -#: ../../source/application.txt:48 +#: ../../source/layout.txt:50 msgid "" -"When creating your application it takes a flag property of :class:`Gio." -"ApplicationFlags`. Using this you can let it handle everything itself or " -"have more custom behavior." +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." msgstr "" -"Ao criar seu aplicativo, ele recebe uma propriedade de flag de :class:`Gio." -"ApplicationFlags`. Usando isso, você pode permitir que ele manipule tudo " -"sozinho ou tenha um comportamento mais personalizado." +"Primeiro, criamos um contêiner de caixa orientado horizontalmente, onde 6 " +"pixels são colocados entre os filhos. Esta caixa se torna o filho da janela " +"de nível superior." -#: ../../source/application.txt:51 -msgid "" -"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." -"Application.do_command_line()`. In combination with :meth:`Gio.Application." -"add_main_option()` to add custom options." +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." msgstr "" -"Você pode usar o `HANDLES_COMMAND_LINE` para permitir um comportamento " -"customizado em :meth:`Gio.Application.do_command_line()`. Em combinação com :" -"meth:`Gio.Application.add_main_option()` para adicionar opções " -"personalizadas." +"Posteriormente, adicionamos dois botões diferentes ao contêiner da caixa." -#: ../../source/application.txt:54 +#: ../../source/layout.txt:61 msgid "" -"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " -"you and let you handle it in :meth:`Gio.Application.do_open()`." +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." msgstr "" -"Usar `HANDLES_OPEN` fará o trabalho de simplesmente pegar argumentos de " -"arquivo para você e permitir que você os manipule em :meth:`Gio.Application." -"do_open()`." +"Enquanto com os widgets :meth:`Gtk.Box.pack_start` estão posicionados da " +"esquerda para a direita, :meth:`Gtk.Box.pack_end` os posiciona da direita " +"para a esquerda." -#: ../../source/application.txt:57 +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "Grade" + +#: ../../source/layout.txt:68 msgid "" -"If your application is already open these will all be sent to the existing " -"instance unless you use `NON_UNIQUE` to allow multiple instances." +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" msgstr "" -"Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " -"existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." +":class:`Gtk.Grid` é um contêiner que organiza seus widgets filhos em linhas " +"e colunas, mas você não precisa especificar as dimensões no construtor. Os " +"filhos são adicionados usando :meth:`Gtk.Grid.attach`. Eles podem abranger " +"várias linhas ou colunas. O método :meth:`Gtk.Grid.attach` usa cinco " +"parâmetros:" -#: ../../source/application.txt:71 -msgid "https://wiki.gnome.org/HowDoI/GtkApplication" -msgstr "" +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "O parâmetro ``child`` é o :class:`Gtk.Widget` para adicionar." -#: ../../source/application.txt:72 -msgid "https://wiki.gnome.org/HowDoI/GAction" +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." msgstr "" +"``left`` é o número da coluna para anexar o lado esquerdo de ``child`` em." -#: ../../source/application.txt:73 -msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." msgstr "" +"``top`` indica o número da linha para anexar o lado superior do ``child``." -#: ../../source/application.txt:74 -msgid "https://wiki.gnome.org/HowDoI/GMenu" +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." msgstr "" +"``width`` e ``height`` indicam o número de colunas que o ``child`` irá " +"abranger, e o número de linhas que o ``child`` irá abranger, respectivamente." -#: ../../source/basics.txt:4 -msgid "Basics" -msgstr "Noções básicas" - -#: ../../source/basics.txt:5 -msgid "This section will introduce some of the most important aspects of GTK+." -msgstr "Esta seção apresentará alguns dos aspectos mais importantes do GTK+." - -#: ../../source/basics.txt:12 -msgid "Main loop and Signals" -msgstr "Loop principal e sinais" - -#: ../../source/basics.txt:13 +#: ../../source/layout.txt:79 msgid "" -"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " -"the user is doing nothing, GTK+ sits in the main loop and waits for input. " -"If the user performs some action - say, a mouse click - then the main loop " -"\"wakes up\" and delivers an event to GTK+." +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" msgstr "" -"Como a maioria dos toolkits GUI, o GTK+ usa um modelo de programação " -"orientada a eventos. Quando o usuário não está fazendo nada, o GTK+ fica no " -"loop principal e aguarda a entrada. Se o usuário executar alguma ação - " -"digamos, um clique do mouse - o loop principal \"acorda\" e entrega um " -"evento para o GTK+." +"Também é possível adicionar um child ao lado de um child existente, usando :" +"meth:`Gtk.Grid.attach_next_to`, que também usa cinco parâmetros:" -#: ../../source/basics.txt:18 -msgid "" -"When widgets receive an event, they frequently emit one or more signals. " -"Signals notify your program that \"something interesting happened\" by " -"invoking functions you've connected to the signal. Such functions are " -"commonly known as *callbacks*. When your callbacks are invoked, you would " -"typically take some action - for example, when an Open button is clicked you " -"might display a file chooser dialog. After a callback finishes, GTK+ will " -"return to the main loop and await more user input." -msgstr "" -"Quando widgets recebem um evento, eles frequentemente emitem um ou mais " -"sinais. Sinais notificam seu programa que \"algo interessante aconteceu\" " -"invocando funções que você conectou ao sinal. Tais funções são comumente " -"conhecidas como *callbacks*. Quando seus retornos de chamada são invocados, " -"você normalmente toma algumas ações - por exemplo, quando um botão Abrir é " -"clicado, você pode exibir uma caixa de diálogo de seleção de arquivos. " -"Depois que um retorno de chamada terminar, o GTK+ retornará ao loop " -"principal e aguardará mais entrada do usuário." +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "``child`` é o :class:`Gtk.Widget` para adicionar, como acima." -#: ../../source/basics.txt:28 -msgid "A generic example is:" -msgstr "Um exemplo genérico é:" +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" +"``sibling`` é um widget filho existente de ``self`` (uma instância :class:" +"`Gtk.Grid`) ou ``None``. O widget ``child`` será colocado próximo ao " +"``sibling``, ou se ``sibling`` for ``None``, no início ou no final da grade." -#: ../../source/basics.txt:34 +#: ../../source/layout.txt:86 msgid "" -"Firstly, *widget* is an instance of a widget we created earlier. Next, the " -"event we are interested in. Each widget has its own particular events which " -"can occur. For instance, if you have a button you usually want to connect to " -"the \"clicked\" event. This means that when the button is clicked, the " -"signal is issued. Thirdly, the *callback* argument is the name of the " -"callback function. It contains the code which runs when signals of the " -"specified type are issued. Finally, the *data* argument includes any data " -"which should be passed when the signal is issued. However, this argument is " -"completely optional and can be left out if not required." +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." msgstr "" -"Em primeiro lugar, *widget* é uma instância de um widget que criamos " -"anteriormente. Em seguida, o evento em que estamos interessados. Cada widget " -"tem seus próprios eventos específicos que podem ocorrer. Por exemplo, se " -"você tem um botão, geralmente deseja se conectar ao evento \"clicado\". Isso " -"significa que quando o botão é clicado, o sinal é emitido. Em terceiro " -"lugar, o argumento *callback* é o nome da função de retorno de chamada. Ele " -"contém o código que é executado quando os sinais do tipo especificado são " -"emitidos. Finalmente, o argumento *data* inclui todos os dados que devem ser " -"passados quando o sinal é emitido. No entanto, esse argumento é " -"completamente opcional e pode ser deixado de fora se não for necessário." +"``side`` é um :class:`Gtk.PositionType` indicando o lado do ``sibling`` que " +"``child`` é posicionado ao lado de." -#: ../../source/basics.txt:46 +#: ../../source/layout.txt:88 msgid "" -"The function returns a number that identifies this particular signal-" -"callback pair. It is required to disconnect from a signal such that the " -"callback function will not be called during any future or currently ongoing " -"emissions of the signal it has been connected to." +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." msgstr "" -"A função retorna um número que identifica esse par de retorno de chamada " -"específico. É necessário desconectar de um sinal de modo que a função de " -"retorno de chamada não seja chamada durante qualquer emissão futura ou atual " -"do sinal ao qual está conectada." +"``width`` e ``height`` indicam o número de colunas e linhas que o widget " +"``child`` abrangerá, respectivamente." -#: ../../source/basics.txt:56 +#: ../../source/layout.txt:91 msgid "" -"If you have lost the \"handler_id\" for some reason (for example the " -"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " -"still disconnect a specific callback using the function :func:" -"`disconnect_by_func`:" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." msgstr "" -"Se você perdeu o \"handler_id\" por algum motivo (por exemplo, os " -"manipuladores foram instalados usando :func:`Gtk.Builder.connect_signals`), " -"você ainda pode desconectar um callback específico usando a função :func:" -"`disconnect_by_func`:" +"Finalmente, :class:`Gtk.Grid` pode ser usado como :class:`Gtk.Box` usando " +"apenas :meth:`Gtk.Grid.add`, que colocará os filhos um ao lado do outro na " +"direção determinada pela propriedade “orientation” (o padrão é :attr:`Gtk." +"Orientation.HORIZONTAL`)." -#: ../../source/basics.txt:64 +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "ListBox" + +#: ../../source/layout.txt:107 msgid "" -"Applications should connect to the \"destroy\" signal of the top-level " -"window. It is emitted an object is destroyed, so when a user requests that a " -"toplevel window is closed, the default handler for this signal destroys the " -"window, but does not terminate the application. Connecting the \"destroy\" " -"signal of the top-level window to the function :func:`Gtk.main_quit` will " -"result in the desired behaviour." -msgstr "" -"Os aplicativos devem se conectar ao sinal \"destroy\" da janela de nível " -"superior. É emitido um objeto é destruído, portanto, quando um usuário " -"solicita que uma janela de nível superior é fechada, o manipulador padrão " -"para este sinal destrói a janela, mas não finaliza o aplicativo. Conectar o " -"sinal \"destroy\" da janela de nível superior à função :func:`Gtk.main_quit` " -"resultará no comportamento desejado." +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" +"A :class:`Gtk.ListBox` é um contêiner vertical que contém :class:`Gtk." +"ListBoxRow` filhos. Essas linhas podem ser classificadas e filtradas " +"dinamicamente e os cabeçalhos podem ser adicionados dinamicamente, " +"dependendo do conteúdo da linha. Também permite navegação e seleção de " +"teclado e mouse como uma lista típica." -#: ../../source/basics.txt:74 +#: ../../source/layout.txt:112 msgid "" -"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " -"return." +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." msgstr "" -"Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" -"`Gtk.main`." +"Usar :class:`Gtk.ListBox` é muitas vezes uma alternativa para :class:`Gtk." +"TreeView`, especialmente quando o conteúdo da lista tem um layout mais " +"complicado do que o permitido por um :class:`Gtk.CellRenderer`, ou quando o " +"conteúdo é interativo (ou seja, tem um botão)." -#: ../../source/basics.txt:78 +#: ../../source/layout.txt:117 msgid "" -"Properties describe the configuration and state of widgets. As for signals, " -"each widget has its own particular set of properties. For example, a button " -"has the property \"label\" which contains the text of the label widget " -"inside the button. You can specify the name and value of any number of " -"properties as keyword arguments when creating an instance of a widget. To " -"create a label aligned to the right with the text \"Hello World\" and an " -"angle of 25 degrees, use:" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." msgstr "" -"Propriedades descrevem a configuração e o estado dos widgets. Quanto aos " -"sinais, cada widget tem seu próprio conjunto particular de propriedades. Por " -"exemplo, um botão tem a propriedade \"label\", que contém o texto do widget " -"de etiqueta dentro do botão. Você pode especificar o nome e o valor de " -"qualquer número de propriedades como argumentos de palavras-chave ao criar " -"uma instância de um widget. Para criar um rótulo alinhado à direita com o " -"texto \"Hello World\" e um ângulo de 25 graus, use:" +"Embora um :class:`Gtk.ListBox` deva ter apenas :class:`Gtk.ListBoxRow` " +"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." +"Container.add` e um :class:`Gtk.ListBoxRow` widget será automaticamente " +"inserido entre a lista e o widget." -#: ../../source/basics.txt:89 -msgid "which is equivalent to" -msgstr "que é equivalente a" +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "Stack e StackSwitcher" -#: ../../source/basics.txt:98 +#: ../../source/layout.txt:133 msgid "" -"Instead of using getters and setters you can also get and set the gobject " -"properties through the \"props\" property such as ``widget.props.prop_name = " -"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" -"name\")`` and ``widget.set_property(\"prop-name\", value)``." +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." msgstr "" -"Em vez de usar getters e setters, você também pode obter e definir as " -"propriedades do gobject através da propriedade \"props\", como ``widget." -"props.prop_name = value``. Isto é equivalente ao mais detalhado ``widget." -"get_property(\"prop-name\")`` e ``widget.set_property(\"prop-name\", " -"value)``." +"A :class:`Gtk.Stack` é um contêiner que mostra apenas um de seus filhos por " +"vez. Em contraste com :class:`Gtk.Notebook`, :class:`Gtk.Stack` não fornece " +"um meio para os usuários alterarem o filho visível. Em vez disso, o widget :" +"class:`Gtk.StackSwitcher` pode ser usado com :class:`Gtk.Stack` para " +"fornecer essa funcionalidade." -#: ../../source/basics.txt:103 +#: ../../source/layout.txt:139 msgid "" -"To see which properties are available for a widget in the running version of " -"GTK you can \"dir\" the \"props\" property:" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." msgstr "" -"Para ver quais propriedades estão disponíveis para um widget na versão em " -"execução do GTK, você pode usar \"dir\" com a propriedade \"props\":" +"Transições entre páginas podem ser animadas como slides ou fades. Isso pode " +"ser controlado com :meth:`Gtk.Stack.set_transition_type`. Essas animações " +"respeitam a configuração “gtk-enable-animations”." -#: ../../source/basics.txt:110 -msgid "This will print in the console the list of properties a Gtk.Box has." +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" msgstr "" -"Isto irá imprimir no console a lista de propriedades que um Gtk.Box possui." - -#: ../../source/builder.txt:2 -msgid "Glade and Gtk.Builder" -msgstr "Glade e Gtk.Builder" +"A velocidade de transição pode ser ajustada com :meth:`Gtk.Stack." +"set_transition_duration`" -#: ../../source/builder.txt:3 +#: ../../source/layout.txt:145 msgid "" -"The :class:`Gtk.Builder` class offers you the opportunity to design user " -"interfaces without writing a single line of code. This is possible through " -"describing the interface by a XML file and then loading the XML description " -"at runtime and create the objects automatically, which the Builder class " -"does for you. For the purpose of not needing to write the XML manually the " -"`Glade `_ application lets you create the user " -"interface in a WYSIWYG (what you see is what you get) manner" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." msgstr "" -"A classe :class:`Gtk.Builder` oferece a você a oportunidade de projetar " -"interfaces de usuário sem escrever uma única linha de código. Isso é " -"possível descrevendo a interface por um arquivo XML e, em seguida, " -"carregando a descrição XML em tempo de execução e criando os objetos " -"automaticamente, o que a classe Builder faz por você. Para o propósito de " -"não precisar escrever o XML manualmente, o aplicativo `Glade `_ permite criar a interface do usuário de uma maneira WYSIWYG (o " -"que você vê é o que obtém)" - -#: ../../source/builder.txt:7 -msgid "This method has several advantages:" -msgstr "Esse método possui várias vantagens:" - -#: ../../source/builder.txt:9 -msgid "Less code needs to be written." -msgstr "Menos código precisa ser escrito." +"O widget :class:`Gtk.StackSwitcher` atua como um controlador para um :class:" +"`Gtk.Stack`; Ele mostra uma linha de botões para alternar entre as várias " +"páginas do widget de pilha associado." -#: ../../source/builder.txt:10 -msgid "UI changes can be seen more quickly, so UIs are able to improve." +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." msgstr "" -"As mudanças da interface do usuário podem ser vistas mais rapidamente, para " -"que as interfaces de usuário possam melhorar." +"Todo o conteúdo para os botões vem das propriedades filho do :class:`Gtk." +"Stack`." -#: ../../source/builder.txt:11 -msgid "Designers without programming skills can create and edit UIs." +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." msgstr "" -"Designers sem habilidades de programação podem criar e editar interfaces de " -"usuário." +"É possível associar múltiplos widgets :class:`Gtk.StackSwitcher` com o mesmo " +"widget :class:`Gtk.Stack`." -#: ../../source/builder.txt:12 +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "HeaderBar" + +#: ../../source/layout.txt:166 msgid "" -"The description of the user interface is independent from the programming " -"language being used." +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." msgstr "" -"A descrição da interface do usuário é independente da linguagem de " -"programação utilizada." +"A :class:`Gtk.HeaderBar` é semelhante a uma horizontal :class:`Gtk.Box`, " +"permite colocar filhos no início ou no final. Além disso, permite que um " +"título seja exibido. O título será centrado em relação à largura da caixa, " +"mesmo que os filhos de ambos os lados ocupem diferentes quantidades de " +"espaço." -#: ../../source/builder.txt:14 +#: ../../source/layout.txt:171 msgid "" -"There is still code required for handling interface changes triggered by the " -"user, but :class:`Gtk.Builder` allows you to focus on implementing that " -"functionality." +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." msgstr "" -"Ainda existe código necessário para lidar com mudanças de interface " -"acionadas pelo usuário, mas :class:`Gtk.Builder` permite que você se " -"concentre em implementar essa funcionalidade." - -#: ../../source/builder.txt:17 -msgid "Creating and loading the .glade file" -msgstr "Criando e carregando o arquivo .glade" +"Como o GTK+ agora tem suporte a Client Side Decoration, um :class:`Gtk." +"HeaderBar` pode ser usado no lugar da barra de título (que é renderizada " +"pelo Gerenciador de Janelas)." -#: ../../source/builder.txt:18 +#: ../../source/layout.txt:174 msgid "" -"First of all you have to download and install Glade. There are `several " -"tutorials `_ about " -"Glade, so this is not explained here in detail. Let's start by creating a " -"window with a button in it and saving it to a file named *example.glade*. " -"The resulting XML file should look like this." +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." msgstr "" -"Primeiro de tudo você tem que baixar e instalar o Glade. Existem `vários " -"tutoriais `_ sobre " -"o Glade, então isso não é explicado aqui em detalhes. Vamos começar criando " -"uma janela com um botão e salvando-a em um arquivo chamado *example.glade*. " -"O arquivo XML resultante deve se parecer com isso." +"A :class:`Gtk.HeaderBar` geralmente está localizado na parte superior de uma " +"janela e deve conter controles comumente usados que afetam o conteúdo " +"abaixo. Eles também fornecem acesso a controles de janela, incluindo o botão " +"de fechar janela e o menu de janela." -#: ../../source/builder.txt:42 -msgid "To load this file in Python we need a :class:`Gtk.Builder` object." -msgstr "" -"Para carregar este arquivo em Python, precisamos de um objeto :class:`Gtk." -"Builder`." +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "FlowBox" -#: ../../source/builder.txt:49 +#: ../../source/layout.txt:190 +msgid "This example requires at least GTK+ 3.12." +msgstr "Este exemplo requer pelo menos GTK+ 3.12." + +#: ../../source/layout.txt:192 msgid "" -"The second line loads all objects defined in *example.glade* into the " -"Builder object." +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." msgstr "" -"A segunda linha carrega todos os objetos definidos em *example.glade* no " -"objeto Builder." +"A :class:`Gtk.FlowBox` é um contêiner que posiciona widgets filhos em " +"sequência de acordo com sua orientação." -#: ../../source/builder.txt:51 +#: ../../source/layout.txt:195 msgid "" -"It is also possible to load only some of the objects. The following line " -"would add only the objects (and their child objects) given in the tuple." +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." msgstr "" -"Também é possível carregar apenas alguns dos objetos. A linha a seguir " -"adicionaria apenas os objetos (e seus objetos filhos) fornecidos na tupla." +"Por exemplo, com a orientação horizontal, os widgets serão organizados da " +"esquerda para a direita, iniciando uma nova linha na linha anterior, quando " +"necessário. Reduzir a largura neste caso exigirá mais linhas, portanto, uma " +"altura maior será solicitada." -#: ../../source/builder.txt:58 +#: ../../source/layout.txt:200 msgid "" -"These two methods exist also for loading from a string rather than a file. " -"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" -"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " -"instead of a file name." +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." msgstr "" -"Esses dois métodos também existem para o carregamento de uma string, em vez " -"de um arquivo. Seus nomes correspondentes são :meth:`Gtk.Builder." -"add_from_string` e :meth:`Gtk.Builder.add_objects_from_string` e eles " -"simplesmente pegam uma string XML em vez de um nome de arquivo." - -#: ../../source/builder.txt:62 -msgid "Accessing widgets" -msgstr "Acessando Widgets" +"Da mesma forma, com a orientação vertical, os widgets serão organizados de " +"cima para baixo, iniciando uma nova coluna à direita quando necessário. " +"Reduzir a altura exigirá mais colunas, portanto será solicitada uma largura " +"maior." -#: ../../source/builder.txt:63 +#: ../../source/layout.txt:204 msgid "" -"Now that the window and the button are loaded we also want to show them. " -"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " -"window. But how do we access the associated object?" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." msgstr "" -"Agora que a janela e o botão estão carregados, também queremos mostrá-los. " -"Portanto, o método :meth:`Gtk.Window.show_all` deve ser chamado na janela. " -"Mas como acessamos o objeto associado?" +"Os filhos de uma :class:`Gtk.FlowBox` podem ser classificados e filtrados " +"dinamicamente." -#: ../../source/builder.txt:72 +#: ../../source/layout.txt:206 msgid "" -"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." -"get_object` method and the widget's *id*. It is really *that* simple." +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." msgstr "" -"Cada widget pode ser recuperado do construtor pelo método :meth:`Gtk.Builder." -"get_object` e pelo *id* do widget. É realmente *isso* simples." - -#: ../../source/builder.txt:75 -msgid "It is also possible to get a list of all objects with" -msgstr "Também é possível obter uma lista de todos os objetos com" +"Embora uma :class:`Gtk.FlowBox` deva ter apenas filhos :class:`Gtk." +"FlowBoxChild`, você pode adicionar qualquer tipo de widget a ele via :meth:" +"`Gtk.Container.add`, e um widget :class:`Gtk.FlowBoxChild` será " +"automaticamente inserido entre a caixa e o widget." -#: ../../source/builder.txt:82 -msgid "Connecting Signals" -msgstr "Conectando Sinais" +#: ../../source/layout.txt:220 +msgid "Notebook" +msgstr "Notebook" -#: ../../source/builder.txt:83 +#: ../../source/layout.txt:222 msgid "" -"Glade also makes it possible to define signals which you can connect to " -"handlers in your code without extracting every object from the builder and " -"connecting to the signals manually. The first thing to do is to declare the " -"signal names in Glade. For this example we will act when the window is " -"closed and when the button was pressed, so we give the name \"onDestroy\" to " -"the callback handling the \"destroy\" signal of the window and " -"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " -"button. Now the XML file should look like this." +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." msgstr "" -"O Glade também permite definir sinais que você pode conectar a manipuladores " -"em seu código sem extrair todos os objetos do construtor e conectar-se aos " -"sinais manualmente. A primeira coisa a fazer é declarar os nomes dos sinais " -"no Glade. Para este exemplo, vamos agir quando a janela é fechada e quando o " -"botão foi pressionado, então damos o nome \"onDestroy\" para o retorno de " -"chamada manipulando o sinal \"destroy\" da janela e \"onButtonPressed\" para " -"o retorno de chamada manipulando o \"pressionado\" sinal do botão. Agora o " -"arquivo XML deve ficar assim." +"O widget :class:`Gtk.Notebook` é um :class:`Gtk.Container` cujos filhos são " +"páginas que podem ser alternadas usando rótulos de guias ao longo de uma " +"borda." -#: ../../source/builder.txt:91 +#: ../../source/layout.txt:224 msgid "" -"Now we have to define the handler functions in our code. The *onDestroy* " -"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " -"pressed we would like to print the string \"Hello World!\", so we define the " -"handler as follows" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." msgstr "" -"Agora temos que definir as funções do manipulador em nosso código. O " -"*onDestroy* deve simplesmente resultar em uma chamada para :meth:`Gtk." -"main_quit`. Quando o botão é pressionado, gostaríamos de imprimir a string " -"\"Hello World!\", Então definimos o manipulador da seguinte maneira" +"Existem muitas opções de configuração para o GtkNotebook. Entre outras " +"coisas, você pode escolher em qual borda as abas aparecem (veja :meth:`Gtk." +"Notebook.set_tab_pos`), se houver muitas abas para caber no notebook, elas " +"devem ser maiores ou setas de rolagem serão adicionadas (veja :meth:`Gtk." +"Notebook.set_scrollable`, e se haverá um menu pop-up que permita aos " +"usuários trocar de página (veja :meth:`Gtk.Notebook.popup_enable`, :meth:" +"`Gtk.Notebook.popup_disable`)." -#: ../../source/builder.txt:100 -msgid "" -"Next, we have to connect the signals and the handler functions. The easiest " -"way to do this is to define a *dict* with a mapping from the names to the " -"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." -msgstr "" -"Em seguida, temos que conectar os sinais e as funções do manipulador. A " -"maneira mais fácil de fazer isso é definir um *dict* com um mapeamento dos " -"nomes para os manipuladores e então passá-lo para o método :meth:`Gtk." -"Builder.connect_signals`." +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" +msgstr "Galeria de widgets" -#: ../../source/builder.txt:111 -msgid "" -"An alternative approach is to create a class which has methods that are " -"called like the signals. In our example the last code snippet could be " -"rewritten as:" -msgstr "" -"Uma abordagem alternativa é criar uma classe que tenha métodos que sejam " -"chamados como os sinais. Em nosso exemplo, o último snippet de código pode " -"ser reescrito como:" +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" +msgstr ":class:`Gtk.AboutDialog`" -#: ../../source/builder.txt:120 -msgid "The final code of the example" -msgstr "O código final do exemplo" +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" +msgstr ":class:`Gtk.AccelLabel`" -#: ../../source/button_widgets.txt:2 -msgid "Button Widgets" -msgstr "Widgets de Botão" +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" +msgstr ":class:`Gtk.ActionBar`" -#: ../../source/button_widgets.txt:5 -msgid "Button" -msgstr "Botão" +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.AppChooserButton`" +msgstr ":class:`Gtk.AppChooserButton`" -#: ../../source/button_widgets.txt:7 -msgid "" -"The Button widget is another commonly used widget. It is generally used to " -"attach a function that is called when the button is pressed." -msgstr "" -"O widget Button é outro widget comumente usado. Geralmente é usado para " -"anexar uma função que é chamada quando o botão é pressionado." +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserDialog`" +msgstr ":class:`Gtk.AppChooserDialog`" -#: ../../source/button_widgets.txt:10 -msgid "" -"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " -"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " -"child is the :class:`Gtk.Label`." -msgstr "" -"O widget :class:`Gtk.Button` pode conter qualquer widget filho válido. Isto " -"é, ele pode conter praticamente qualquer outro padrão :class:`Gtk.Widget`. " -"Um filho mais comumente usado é a :class:`Gtk.Label`." +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.Assistant`" +msgstr ":class:`Gtk.Assistant`" -#: ../../source/button_widgets.txt:14 -msgid "" -"Usually, you want to connect to the button's \"clicked\" signal which is " -"emitted when the button has been pressed and released." -msgstr "" -"Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " -"emitido quando o botão foi pressionado e liberado." +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.Button`" +msgstr ":class:`Gtk.Button`" -#: ../../source/button_widgets.txt:26 -msgid "ToggleButton" -msgstr "Botão de Alternância" +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.CheckButton`" +msgstr ":class:`Gtk.CheckButton`" -#: ../../source/button_widgets.txt:28 -msgid "" -"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " -"but when clicked they remain activated, or pressed, until clicked again. " -"When the state of the button is changed, the \"toggled\" signal is emitted." -msgstr "" -"A :class:`Gtk.ToggleButton` é muito semelhante a um normal :class:`Gtk." -"Button`, mas quando clicados eles permanecem ativados, ou pressionados, até " -"serem clicados novamente. Quando o estado do botão é alterado, o sinal " -"\"toggled\" (alternado) é emitido." +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.ColorButton`" +msgstr ":class:`Gtk.ColorButton`" -#: ../../source/button_widgets.txt:32 -msgid "" -"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" -"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " -"button is \"down\". You can also set the toggle button's state, with :meth:" -"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " -"actually changes, it causes the \"toggled\" signal to be emitted." -msgstr "" -"Para recuperar o estado da :class:`Gtk.ToggleButton`, você pode usar o " -"método :meth:`Gtk.ToggleButton.get_active`. Isso retorna ``True`` se o botão " -"estiver \"inativo\". Você também pode definir o estado do botão de " -"alternância, com :meth:`Gtk.ToggleButton.set_active`. Observe que, se você " -"fizer isso e o estado realmente mudar, isso fará com que o sinal \"alternado" -"\" seja emitido." +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.ColorChooserDialog`" +msgstr ":class:`Gtk.ColorChooserDialog`" -#: ../../source/button_widgets.txt:47 -msgid "CheckButton" -msgstr "Botão de Seleção" +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.ComboBox`" +msgstr ":class:`Gtk.ComboBox`" -#: ../../source/button_widgets.txt:48 -msgid "" -":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " -"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" -"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " -"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." -"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " -"inherited." -msgstr "" -":class:`Gtk.CheckButton` herda de :class:`Gtk.ToggleButton`. A única " -"diferença real entre os dois é como :class:`Gtk.CheckButton` é apresentado. " -"A :class:`Gtk.CheckButton` coloca um discreto :class:`Gtk.ToggleButton` ao " -"lado de um widget, (geralmente um :class:`Gtk.Label`). O sinal \"toggled\", :" -"meth:`Gtk.ToggleButton.set_active` e :meth:`Gtk.ToggleButton.get_active` são " -"herdados." +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.ComboBoxText`" +msgstr ":class:`Gtk.ComboBoxText`" -#: ../../source/button_widgets.txt:56 -msgid "RadioButton" -msgstr "Botão de Radio" +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Entry`" +msgstr ":class:`Gtk.Entry`" -#: ../../source/button_widgets.txt:57 -msgid "" -"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " -"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " -"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " -"one way of giving the user a choice from many options." -msgstr "" -"Como os checkboxes, os radio buttons também herdam de :class:`Gtk." -"ToggleButton`, mas estes funcionam em grupos, e apenas um :class:`Gtk." -"RadioButton` em um grupo pode ser selecionado a qualquer momento. Portanto, " -"um :class:`Gtk.RadioButton` é uma maneira de dar ao usuário uma escolha " -"entre várias opções." +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.FileChooserButton`" +msgstr ":class:`Gtk.FileChooserButton`" -#: ../../source/button_widgets.txt:62 -msgid "" -"Radio buttons can be created with one of the static methods :meth:`Gtk." -"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." -"new_with_label_from_widget` or :meth:`Gtk.RadioButton." -"new_with_mnemonic_from_widget`. The first radio button in a group will be " -"created passing ``None`` as the *group* argument. In subsequent calls, the " -"group you wish to add this button to should be passed as an argument." -msgstr "" -"Botões de rádio podem ser criados com um dos métodos estáticos :meth:`Gtk." -"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." -"new_with_label_from_widget` ou :meth:`Gtk.RadioButton." -"new_with_mnemonic_from_widget`. O primeiro botão de rádio de um grupo será " -"criado passando o ``None`` como o argumento *group*. Nas chamadas " -"subsequentes, o grupo ao qual você deseja adicionar esse botão deve ser " -"passado como um argumento." +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.FileChooserDialog`" +msgstr ":class:`Gtk.FileChooserDialog`" -#: ../../source/button_widgets.txt:70 -msgid "" +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.FlowBox`" +msgstr ":class:`Gtk.FlowBox`" + +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.FontButton`" +msgstr ":class:`Gtk.FontButton`" + +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.FontChooserDialog`" +msgstr ":class:`Gtk.FontChooserDialog`" + +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.Frame`" +msgstr ":class:`Gtk.Frame`" + +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.GLArea`" +msgstr ":class:`Gtk.GLArea`" + +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.Grid`" +msgstr ":class:`Gtk.Grid`" + +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.HeaderBar`" +msgstr ":class:`Gtk.HeaderBar`" + +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.IconView`" +msgstr ":class:`Gtk.IconView`" + +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.Image`" +msgstr ":class:`Gtk.Image`" + +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.InfoBar`" +msgstr ":class:`Gtk.InfoBar`" + +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Label`" +msgstr ":class:`Gtk.Label`" + +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.LevelBar`" +msgstr ":class:`Gtk.LevelBar`" + +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.LinkButton`" +msgstr ":class:`Gtk.LinkButton`" + +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.ListBox`" +msgstr ":class:`Gtk.ListBox`" + +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.LockButton`" +msgstr ":class:`Gtk.LockButton`" + +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.MenuBar`" +msgstr ":class:`Gtk.MenuBar`" + +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.MenuButton`" +msgstr ":class:`Gtk.MenuButton`" + +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.MessageDialog`" +msgstr ":class:`Gtk.MessageDialog`" + +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Notebook`" +msgstr ":class:`Gtk.Notebook`" + +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.Paned`" +msgstr ":class:`Gtk.Paned`" + +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.PlacesSidebar`" +msgstr ":class:`Gtk.PlacesSidebar`" + +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.ProgressBar`" +msgstr ":class:`Gtk.ProgressBar`" + +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.RadioButton`" +msgstr ":class:`Gtk.RadioButton`" + +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.RecentChooserDialog`" +msgstr ":class:`Gtk.RecentChooserDialog`" + +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.Scale`" +msgstr ":class:`Gtk.Scale`" + +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.Scrollbar`" +msgstr ":class:`Gtk.Scrollbar`" + +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.ScrolledWindow`" +msgstr ":class:`Gtk.ScrolledWindow`" + +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.SearchBar`" +msgstr ":class:`Gtk.SearchBar`" + +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.SearchEntry`" +msgstr ":class:`Gtk.SearchEntry`" + +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.Separator`" +msgstr ":class:`Gtk.Separator`" + +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.SpinButton`" +msgstr ":class:`Gtk.SpinButton`" + +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.Spinner`" +msgstr ":class:`Gtk.Spinner`" + +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.Stack`" +msgstr ":class:`Gtk.Stack`" + +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.StackSwitcher`" +msgstr ":class:`Gtk.StackSwitcher`" + +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.Statusbar`" +msgstr ":class:`Gtk.Statusbar`" + +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.Switch`" +msgstr ":class:`Gtk.Switch`" + +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.TextView`" +msgstr ":class:`Gtk.TextView`" + +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.ToggleButton`" +msgstr ":class:`Gtk.ToggleButton`" + +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.ToolPalette`" +msgstr ":class:`Gtk.ToolPalette`" + +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Toolbar`" +msgstr ":class:`Gtk.Toolbar`" + +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.TreeView`" +msgstr ":class:`Gtk.TreeView`" + +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.VolumeButton`" +msgstr ":class:`Gtk.VolumeButton`" + +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Window`" +msgstr ":class:`Gtk.Window`" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "Widgets de botão" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "Button" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" +"O widget Button é outro widget comumente usado. Geralmente é usado para " +"anexar uma função que é chamada quando o botão é pressionado." + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" +"O widget :class:`Gtk.Button` pode conter qualquer widget filho válido. Isto " +"é, ele pode conter praticamente qualquer outro padrão :class:`Gtk.Widget`. " +"Um filho mais comumente usado é a :class:`Gtk.Label`." + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" +"Normalmente, você quer se conectar ao sinal “clicked” do botão que é emitido " +"quando o botão foi pressionado e liberado." + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "ToggleButton" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" +"A :class:`Gtk.ToggleButton` (botão de alternância) é muito semelhante a um :" +"class:`Gtk.Button` normal, mas quando clicados eles permanecem ativados, ou " +"pressionados, até serem clicados novamente. Quando o estado do botão é " +"alterado, o sinal “toggled” é emitido." + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" +"Para recuperar o estado da :class:`Gtk.ToggleButton`, você pode usar o " +"método :meth:`Gtk.ToggleButton.get_active`. Isso retorna ``True`` se o botão " +"estiver “down” (inativo). Você também pode definir o estado do botão de " +"alternância, com :meth:`Gtk.ToggleButton.set_active`. Observe que, se você " +"fizer isso e o estado realmente mudar, isso fará com que o sinal “toggled” " +"seja emitido." + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "CheckButton" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" +":class:`Gtk.CheckButton` (botão de seleção) herda de :class:`Gtk." +"ToggleButton`. A única diferença real entre os dois é como :class:`Gtk." +"CheckButton` é apresentado. A :class:`Gtk.CheckButton` coloca um discreto :" +"class:`Gtk.ToggleButton` ao lado de um widget, (geralmente um :class:`Gtk." +"Label`). O sinal “toggled”, :meth:`Gtk.ToggleButton.set_active` e :meth:`Gtk." +"ToggleButton.get_active` são herdados." + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "RadioButton" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" +"Assim como os botões de seleção, botões de opção também herdam de :class:" +"`Gtk.ToggleButton`, mas estes funcionam em grupos, e apenas um :class:`Gtk." +"RadioButton` em um grupo pode ser selecionado de cada vez. Portanto, um :" +"class:`Gtk.RadioButton` é uma maneira de dar ao usuário uma escolha entre " +"várias opções." + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" +"Botões de opção podem ser criados com um dos métodos estáticos :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` ou :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. O primeiro botão de opção de um grupo será " +"criado passando o ``None`` como o argumento de *group*. Nas chamadas " +"subsequentes, o grupo ao qual você deseja adicionar esse botão deve ser " +"passado como um argumento." + +#: ../../source/button_widgets.txt:70 +msgid "" "When first run, the first radio button in the group will be active. This can " "be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " "first argument." msgstr "" -"Quando executado pela primeira vez, o primeiro botão de rádio do grupo " +"Quando executado pela primeira vez, o primeiro botão de opção do grupo " "estará ativo. Isto pode ser alterado chamando :meth:`Gtk.ToggleButton." "set_active` com ``True`` como primeiro argumento." @@ -675,7 +881,7 @@ msgstr "" #: ../../source/button_widgets.txt:86 msgid "LinkButton" -msgstr "Botão Link" +msgstr "LinkButton" #: ../../source/button_widgets.txt:87 msgid "" @@ -684,8 +890,8 @@ msgid "" "is useful to show quick links to resources." msgstr "" "A :class:`Gtk.LinkButton` é um :class:`Gtk.Button` com um hiperlink, similar " -"ao usado pelos navegadores da web, que aciona uma ação quando clicado. É " -"útil mostrar links rápidos para recursos." +"ao usado pelos navegadores web, que aciona uma ação quando clicado. É útil " +"mostrar links rápidos para recursos." #: ../../source/button_widgets.txt:91 msgid "" @@ -693,13 +899,13 @@ msgid "" "meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." "get_uri`." msgstr "" -"O URI ligado a um :class:`Gtk.LinkButton` pode ser configurado " -"especificamente usando :meth:`Gtk.LinkButton.set_uri` e recuperado usando :" +"A URI vinculada a um :class:`Gtk.LinkButton` pode ser configurada " +"especificamente usando :meth:`Gtk.LinkButton.set_uri` e sendo obtida usando :" "meth:`Gtk.LinkButton.get_uri`." #: ../../source/button_widgets.txt:103 msgid "SpinButton" -msgstr "Botão Giratório" +msgstr "SpinButton" #: ../../source/button_widgets.txt:104 msgid "" @@ -711,14 +917,14 @@ msgid "" "a given range. The main properties of a :class:`Gtk.SpinButton` are set " "through :class:`Gtk.Adjustment`." msgstr "" -"A :class:`Gtk.SpinButton` é uma maneira ideal de permitir que o usuário " -"defina o valor de algum atributo. Em vez de digitar diretamente um número " -"em :class:`Gtk.Entry`, :class:`Gtk.SpinButton` permite que o usuário clique " -"em uma das duas setas para incrementar ou decrementar o valor exibido. Um " -"valor ainda pode ser digitado, com o bônus que pode ser verificado para " -"garantir que esteja em um determinado intervalo. As propriedades principais " -"de um :class:`Gtk.SpinButton` são definidas através de :class:`Gtk." -"Adjustment`." +"A :class:`Gtk.SpinButton` (botão de rotação) é uma maneira ideal de permitir " +"que o usuário defina o valor de algum atributo. Em vez de digitar " +"diretamente um número em :class:`Gtk.Entry`, :class:`Gtk.SpinButton` permite " +"que o usuário clique em uma das duas setas para incrementar ou decrementar o " +"valor exibido. Um valor ainda pode ser digitado, com o bônus que pode ser " +"verificado para garantir que esteja em um determinado intervalo. As " +"propriedades principais de um :class:`Gtk.SpinButton` são definidas através " +"de :class:`Gtk.Adjustment`." #: ../../source/button_widgets.txt:112 msgid "" @@ -729,8 +935,8 @@ msgid "" msgstr "" "Para alterar o valor que :class:`Gtk.SpinButton` está mostrando, use :meth:" "`Gtk.SpinButton.set_value`. O valor digitado pode ser um número inteiro ou " -"float, dependendo de seus requisitos, use :meth:`Gtk.SpinButton.get_value` " -"ou :meth:`Gtk.SpinButton.get_value_as_int`, respectivamente." +"ponto flutuante, dependendo de seus requisitos, use :meth:`Gtk.SpinButton." +"get_value` ou :meth:`Gtk.SpinButton.get_value_as_int`, respectivamente." #: ../../source/button_widgets.txt:117 msgid "" @@ -768,7 +974,7 @@ msgstr "" #: ../../source/button_widgets.txt:139 msgid "Switch" -msgstr "Interruptor" +msgstr "Switch" #: ../../source/button_widgets.txt:140 msgid "" @@ -776,9 +982,9 @@ msgid "" "can control which state should be active by clicking the empty area, or by " "dragging the handle." msgstr "" -"A :class:`Gtk.Switch` é um widget que possui dois estados: ligado ou " -"desligado. O usuário pode controlar qual estado deve estar ativo clicando na " -"área vazia ou arrastando a alça." +"A :class:`Gtk.Switch` (interruptor) é um widget que possui dois estados: " +"ligado ou desligado. O usuário pode controlar qual estado deve estar ativo " +"clicando na área vazia ou arrastando a alça." #: ../../source/button_widgets.txt:144 msgid "" @@ -787,268 +993,192 @@ msgid "" "should never connect to this signal, but use the \"notify::active\" signal, " "see the example here below." msgstr "" -"Você não deve usar o sinal \"activate\" no Gtk.Switch que é um sinal de ação " -"e emiti-lo faz com que o switch anime. As aplicações nunca devem se conectar " -"a este sinal, mas use o sinal \"notify::active\", veja o exemplo abaixo." +"Você não deve usar o sinal “activate” no Gtk.Switch que é um sinal de ação e " +"emiti-lo faz com que o switch anime. Os aplicativos nunca devem se conectar " +"a este sinal, mas use o sinal “notify::active”, veja o exemplo abaixo." -#: ../../source/cellrenderers.txt:4 -msgid "CellRenderers" -msgstr "" +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "O tutorial do Python GTK+ 3" -#: ../../source/cellrenderers.txt:6 -msgid "" -":class:`Gtk.CellRenderer` widgets are used to display information within " -"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " -"work closely with the associated widgets and are very powerful, with lots of " -"configuration options for displaying a large amount of data in different " -"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " -"for different purposes:" -msgstr "" -"Os widgets :class:`Gtk.CellRenderer` são usados para exibir informações " -"dentro de widgets como :class:`Gtk.TreeView` ou :class:`Gtk.ComboBox`. Eles " -"trabalham de perto com os widgets associados e são muito poderosos, com " -"muitas opções de configuração para exibir uma grande quantidade de dados de " -"diferentes maneiras. Há sete widgets :class:`Gtk.CellRenderer` que podem ser " -"usados para diferentes propósitos:" +#: ../../source/index.txt:0 +msgid "Release" +msgstr "Lançamento" -#: ../../source/cellrenderers.txt:12 -msgid ":class:`Gtk.CellRendererText`" -msgstr "" +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "|version|" -#: ../../source/cellrenderers.txt:13 -msgid ":class:`Gtk.CellRendererToggle`" -msgstr "" +#: ../../source/index.txt:0 +msgid "Date" +msgstr "Data" -#: ../../source/cellrenderers.txt:14 -msgid ":class:`Gtk.CellRendererPixbuf`" -msgstr "" +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "|today|" -#: ../../source/cellrenderers.txt:15 -msgid ":class:`Gtk.CellRendererCombo`" -msgstr "" - -#: ../../source/cellrenderers.txt:16 -msgid ":class:`Gtk.CellRendererProgress`" -msgstr "" - -#: ../../source/cellrenderers.txt:17 -msgid ":class:`Gtk.CellRendererSpinner`" -msgstr "" - -#: ../../source/cellrenderers.txt:18 -msgid ":class:`Gtk.CellRendererSpin`" -msgstr "" - -#: ../../source/cellrenderers.txt:19 -msgid ":class:`Gtk.CellRendererAccel`" -msgstr "" - -#: ../../source/cellrenderers.txt:22 -msgid "CellRendererText" -msgstr "" +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "Copyright" -#: ../../source/cellrenderers.txt:24 +#: ../../source/index.txt:11 msgid "" -"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " -"font, color and style information provided by its properties. The text will " -"be ellipsized if it is too long and the \"ellipsize\" property allows it." +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" msgstr "" -"A :class:`Gtk.CellRendererText` processa um dado texto em sua célula, usando " -"as informações de fonte, cor e estilo fornecidas por suas propriedades. O " -"texto será reticulado se for muito longo e a propriedade \"ellipsize\" " -"permitir." +"Licença de Documentação Livre GNU 1.3 sem Seções Invariantes, Textos de Capa " +"Frontal e Textos de Contracapa" -#: ../../source/cellrenderers.txt:28 +#: ../../source/index.txt:13 msgid "" -"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " -"This can be changed by setting the value of the \"editable\" property to " -"``True``:" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." msgstr "" -"Por padrão, o texto em :class:`Gtk.CellRendererText` widgets não é editável. " -"Isso pode ser alterado, definindo o valor da propriedade \"editable\" como " -"``True``:" +"Este tutorial fornece uma introdução à criação de aplicativos GTK+ 3 no " +"Python." -#: ../../source/cellrenderers.txt:35 +#: ../../source/index.txt:15 msgid "" -"You can then connect to the \"edited\" signal and update your :class:`Gtk." -"TreeModel` accordingly." -msgstr "" -"Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." -"TreeModel` de acordo." - -#: ../../source/cellrenderers.txt:47 -msgid "CellRendererToggle" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." msgstr "" +"Antes de trabalhar com este tutorial, é recomendável que você tenha uma " +"compreensão razoável da linguagem de programação Python. A programação GUI " +"introduz novos problemas em comparação com a interação com a saída padrão " +"(console / terminal). É necessário que você saiba como criar e executar " +"arquivos Python, entender os erros básicos do interpretador e trabalhar com " +"strings, inteiros, floats e valores booleanos. Para os widgets mais " +"avançados neste tutorial, serão necessários bons conhecimentos de listas e " +"tuplas." -#: ../../source/cellrenderers.txt:49 +#: ../../source/index.txt:25 msgid "" -":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " -"button is drawn as a radio- or checkbutton, depending on the \"radio\" " -"property. When activated, it emits the \"toggled\" signal." +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." msgstr "" -":class:`Gtk.CellRendererToggle` renderiza um botão de alternância em uma " -"célula. O botão é desenhado como um botão de rádio ou de verificação, " -"dependendo da propriedade \"radio\". Quando ativado, emite o sinal " -"\"alternado\"." +"Embora este tutorial descreva as classes e métodos mais importantes dentro " +"do GTK+ 3, ele não deve servir como uma referência da API. Por favor, " +"consulte o `Manual de Referência do GTK+ 3 `_ para uma descrição detalhada da API. Também há uma `referência " +"específica ao Python `_ disponível." -#: ../../source/cellrenderers.txt:53 -msgid "" -"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " -"active, you most likely want to bind the \"active\" property on the cell " -"renderer to a boolean value in the model, thus causing the check button to " -"reflect the state of the model." -msgstr "" -"Como um :class:`Gtk.CellRendererToggle` pode ter dois estados, ativos e não " -"ativos, você provavelmente deseja vincular a propriedade \"active\" no " -"renderizador de célula a um valor booleano no modelo, fazendo com que o " -"botão de verificação reflita o estado do modelo." +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "Conteúdo:" -#: ../../source/cellrenderers.txt:67 -msgid "CellRendererPixbuf" -msgstr "" +#: ../../source/index.txt:61 +msgid "Deprecated" +msgstr "Descontinuados" -#: ../../source/cellrenderers.txt:69 -msgid "" -"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " -"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" -"\" property) or a named icon (set via the \"icon-name\" property)." -msgstr "" -"A :class:`Gtk.CellRendererPixbuf` pode ser usado para renderizar uma imagem " -"em uma célula. Ele permite renderizar um dado :class:`Gdk.Pixbuf` (definido " -"através da propriedade \"pixbuf\") ou um ícone nomeado (configurado através " -"da propriedade \"icon-name\")." +#: ../../source/index.txt:69 +msgid "Indices and tables" +msgstr "Índices e tabelas" -#: ../../source/cellrenderers.txt:82 -msgid "CellRendererCombo" -msgstr "" +#: ../../source/index.txt:71 +msgid ":ref:`search`" +msgstr ":ref:`search`" -#: ../../source/cellrenderers.txt:84 -msgid "" -":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" -"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " -"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" -"\" property." -msgstr "" -":class:`Gtk.CellRendererCombo` processa texto em uma célula como :class:`Gtk." -"CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " -"entrada simples para editar o texto, :class:`Gtk.CellRendererCombo` oferece " -"um widget :class:`Gtk.ComboBox` para editar o texto. Os valores a serem " -"exibidos na caixa de combinação são obtidos de :class:`Gtk.TreeModel` " -"especificado na propriedade \"model\"." +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "Spinner" -#: ../../source/cellrenderers.txt:90 +#: ../../source/spinner.txt:4 msgid "" -"The combo cell renderer takes care of adding a text cell renderer to the " -"combo box and sets it to display the column specified by its \"text-column\" " -"property." +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." msgstr "" -"O renderizador de célula de combinação toma o cuidado de adicionar um " -"renderizador de célula de texto à caixa de combinação e o configura para " -"exibir a coluna especificada por sua propriedade \"text-column\"." +"O :class:`Gtk.Spinner` exibe uma animação giratória do tamanho de um ícone. " +"É frequentemente usado como uma alternativa a :class:`GtkProgressBar` para " +"exibir atividade indefinida, em vez de progresso real." -#: ../../source/cellrenderers.txt:93 +#: ../../source/spinner.txt:8 msgid "" -"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " -"with and without an associated :class:`Gtk.Entry` widget, depending on the " -"value of the \"has-entry\" property." -msgstr "" -"A :class:`Gtk.CellRendererCombo` pode operar em dois modos. Ele pode ser " -"usado com e sem um widget associado :class:`Gtk.Entry`, dependendo do valor " -"da propriedade \"has-entry\"." - -#: ../../source/cellrenderers.txt:106 -msgid "CellRendererProgress" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." msgstr "" +"Para iniciar a animação, use :meth:`Gtk.Spinner.start`. Para pará-lo, use :" +"meth:`Gtk.Spinner.stop`." -#: ../../source/cellrenderers.txt:108 -msgid "" -":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " -"in a cell. Additionally, it can display a text on top of the progress bar." -msgstr "" -":class:`Gtk.CellRendererProgress` renderiza um valor numérico como uma barra " -"de progresso em uma célula. Além disso, pode exibir um texto na parte " -"superior da barra de progresso." +#: ../../source/spinner.txt:20 +msgid "Extended example" +msgstr "Exemplo estendido" -#: ../../source/cellrenderers.txt:111 +#: ../../source/spinner.txt:22 msgid "" -"The percentage value of the progress bar can be modified by changing the " -"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " -"*activity mode* by incrementing the \"pulse\" property instead of the \"value" -"\" property." +"An extended example that uses a timeout function to start and stop the " +"spinning animation. The :func:`on_timeout` function is called at regular " +"intervals until it returns ``False``, at which point the timeout is " +"automatically destroyed and the function will not be called again." msgstr "" -"O valor percentual da barra de progresso pode ser modificado alterando a " -"propriedade \"value\". Semelhante a :class:`Gtk.ProgressBar`, você pode " -"ativar o *modo de atividade* incrementando a propriedade \"pulse\" em vez da " -"propriedade \"value\"." +"Um exemplo estendido que usa uma função de tempo limite para iniciar e parar " +"a animação giratória. A função :func:`on_timeout` é chamada em intervalos " +"regulares até retornar ``False``, momento em que o tempo limite é destruído " +"automaticamente e a função não será chamada novamente." -#: ../../source/cellrenderers.txt:124 -msgid "CellRendererSpin" -msgstr "" +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "Tabela" -#: ../../source/cellrenderers.txt:126 +#: ../../source/layout-table.txt:4 msgid "" -":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" -"`Gtk.SpinButton` widget. Of course, that means that the text has to be " -"parseable as a floating point number." +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." msgstr "" -":class:`Gtk.CellRendererSpin` processa o texto em uma célula como :class:" -"`Gtk.CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " -"entrada simples para editar o texto, :class:`Gtk.CellRendererSpin` oferece " -"um widget :class:`Gtk.SpinButton`. Claro, isso significa que o texto deve " -"ser analisado como um número de ponto flutuante." +":class:`Gtk.Table` foi descontinuado desde o GTK+ versão 3.4 e não deve ser " +"usado em código recém-escrito. Use a classe de :ref:`layout-grid`." -#: ../../source/cellrenderers.txt:132 +#: ../../source/layout-table.txt:8 msgid "" -"The range of the spinbutton is taken from the adjustment property of the " -"cell renderer, which can be set explicitly or mapped to a column in the tree " -"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " -"also has properties for the climb rate and the number of digits to display." +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." msgstr "" -"O intervalo do botão de rotação é obtido da propriedade de ajuste do " -"renderizador de célula, que pode ser definido explicitamente ou mapeado para " -"uma coluna no modelo de árvore, como todas as propriedades dos " -"renderizadores de célula. :class:`Gtk.CellRendererSpin` também possui " -"propriedades para a taxa de subida e o número de dígitos a serem exibidos." +"Tabelas nos permite colocar widgets em uma grade similar a :class:`Gtk.Grid`." -#: ../../source/clipboard.txt:2 -msgid "Clipboard" +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." msgstr "" +"As dimensões da grade precisam ser especificadas no construtor :class:`Gtk." +"Table`. Para colocar um widget em uma caixa, use :meth:`Gtk.Table.attach`." -#: ../../source/clipboard.txt:4 +#: ../../source/layout-table.txt:13 msgid "" -":class:`Gtk.Clipboard` provides a storage area for a variety of data, " -"including text and images. Using a clipboard allows this data to be shared " -"between applications through actions such as copying, cutting, and pasting. " -"These actions are usually done in three ways: using keyboard shortcuts, " -"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." -"Button` widgets." +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." msgstr "" -":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " -"de dados, incluindo texto e imagens. O uso de uma área de transferência " -"permite que esses dados sejam compartilhados entre aplicativos por meio de " -"ações como copiar, cortar e colar. Essas ações geralmente são feitas de três " -"maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " -"conectando as funções aos widgets :class:`Gtk.Button`." +":meth:`Gtk.Table.set_row_spacing` e :meth:`Gtk.Table.set_col_spacing` " +"definem o espaçamento entre as linhas na linha ou coluna especificada. " +"Observe que, para colunas, o espaço vai para a direita da coluna e, para " +"linhas, o espaço fica abaixo da linha." -#: ../../source/clipboard.txt:11 +#: ../../source/layout-table.txt:18 msgid "" -"There are multiple clipboard selections for different purposes. In most " -"circumstances, the selection named ``CLIPBOARD`` is used for everyday " -"copying and pasting. ``PRIMARY`` is another common selection which stores " -"text selected by the user with the cursor." +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." msgstr "" -"Existem várias seleções da área de transferência para finalidades " -"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` é " -"usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção comum " -"que armazena texto selecionado pelo usuário com o cursor." +"Você também pode definir um espaçamento consistente para todas as linhas e/" +"ou colunas com :meth:`Gtk.Table.set_row_spacings` e :meth:`Gtk.Table." +"set_col_spacings`. Observe que, com essas chamadas, a última linha e a " +"última coluna não recebem espaçamento." + +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." #: ../../source/combobox.txt:2 msgid "ComboBox" -msgstr "" +msgstr "ComboBox" #: ../../source/combobox.txt:3 msgid "" @@ -1058,7 +1188,7 @@ msgid "" "item, such as text, a picture, a checkbox, or a progress bar." msgstr "" "A :class:`Gtk.ComboBox` permite a seleção de um item em um menu suspenso. " -"Eles são preferíveis a ter muitos botões de rádio na tela, pois ocupam menos " +"Eles são preferíveis a ter muitos botões de opção na tela, pois ocupam menos " "espaço. Se apropriado, ele pode mostrar informações extras sobre cada item, " "como texto, uma imagem, uma caixa de seleção ou uma barra de progresso." @@ -1108,498 +1238,475 @@ msgstr "" "ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " "e :class:`Gtk.ComboBoxText` podem conter uma entrada." -#: ../../source/dialogs.txt:2 -msgid "Dialogs" -msgstr "" - -#: ../../source/dialogs.txt:4 -msgid "" -"Dialog windows are very similar to standard windows, and are used to provide " -"or retrieve information from the user. They are often used to provide a " -"preferences window, for example. The major difference a dialog has is some " -"prepacked widgets which layout the dialog automatically. From there, we can " -"simply add labels, buttons, check buttons, etc. Another big difference is " -"the handling of responses to control how the application should behave after " -"the dialog has been interacted with." -msgstr "" -"As janelas de caixa de diálogo são muito semelhantes às janelas padrão e são " -"usadas para fornecer ou recuperar informações do usuário. Eles são " -"frequentemente usados para fornecer uma janela de preferências, por exemplo. " -"A principal diferença que uma caixa de diálogo tem é alguns widgets pré-" -"empacotados que organizam a caixa de diálogo automaticamente. A partir daí, " -"podemos simplesmente adicionar rótulos, botões, botões de verificação, etc. " -"Outra grande diferença é o tratamento de respostas para controlar como o " -"aplicativo deve se comportar após a interação com a caixa de diálogo." +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "Como lidar com strings" -#: ../../source/dialogs.txt:12 +#: ../../source/unicode.txt:4 msgid "" -"There are several derived Dialog classes which you might find useful. :class:" -"`Gtk.MessageDialog` is used for most simple notifications. But at other " -"times you might need to derive your own dialog class to provide more complex " -"functionality." +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." msgstr "" -"Existem várias classes de diálogo derivadas que você pode achar útil. :class:" -"`Gtk.MessageDialog` é usado para notificações mais simples. Porém, em outras " -"ocasiões, você pode precisar derivar sua própria classe de diálogo para " -"fornecer uma funcionalidade mais complexa." +"Esta seção explica como as cadeias de caracteres são representadas no Python " +"2.x, no Python 3.x e no GTK+ e discute erros comuns que surgem ao trabalhar " +"com strings." -#: ../../source/dialogs.txt:18 -msgid "Custom Dialogs" -msgstr "Dialogs Personalizados" +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "Definições" -#: ../../source/dialogs.txt:20 +#: ../../source/unicode.txt:9 msgid "" -"To pack widgets into a custom dialog, you should pack them into the :class:" -"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" -"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." -"Dialog.add_button` method." +"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." msgstr "" -"Para empacotar widgets em um diálogo customizado, você deve empacotá-los no :" -"class:`Gtk.Box`, disponível via :meth:`Gtk.Dialog.get_content_area`. Para " -"adicionar apenas um :class:`Gtk.Button` ao final do diálogo, você poderia " -"usar o método :meth:`Gtk.Dialog.add_button`." +"Conceitualmente, uma string é uma lista de caracteres como “A”, “B”, “C” ou " +"“É”. **Caracteres** são representações abstratas e seu significado depende " +"do idioma e do contexto em que são usados. O padrão Unicode descreve como os " +"caracteres são representados por **pontos de código**. Por exemplo, os " +"caracteres acima são representados com os pontos de código U+0041, U+0042, U" +"+0043 e U+00C9, respectivamente. Basicamente, os pontos de código são " +"números no intervalo de 0 a 0x10FFFF." -#: ../../source/dialogs.txt:25 +#: ../../source/unicode.txt:17 msgid "" -"A 'modal' dialog (that is, one which freezes the rest of the application " -"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " -"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " -"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes, the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" msgstr "" -"Um diálogo 'modal' (isto é, um que congela o resto do aplicativo da entrada " -"do usuário), pode ser criado chamando :class:`Gtk.Dialog.set_modal` no " -"diálogo ou setando o argumento ``flags`` do o construtor :class:`Gtk.Dialog` " -"para incluir o sinalizador :attr:`Gtk.DialogFlags.MODAL`." +"Como mencionado anteriormente, a representação de uma string como uma lista " +"de pontos de código é abstrata. Para converter essa representação abstrata " +"em uma sequência de bytes, a string Unicode deve ser **codificada**. A forma " +"mais simples de codificação é ASCII e é executada da seguinte maneira:" -#: ../../source/dialogs.txt:30 +#: ../../source/unicode.txt:22 msgid "" -"Clicking a button will emit a signal called \"response\". If you want to " -"block waiting for a dialog to return before returning control flow to your " -"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " -"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " -"response value that you specified in the :class:`Gtk.Dialog` constructor or :" -"meth:`Gtk.Dialog.add_button`." +"If the code point is < 128, each byte is the same as the value of the code " +"point." msgstr "" -"Clicar em um botão irá emitir um sinal chamado \"response\". Se você quiser " -"bloquear a espera de um diálogo para retornar antes do retorno do fluxo de " -"controle para o seu código, você pode chamar :meth:`Gtk.Dialog.run`. Este " -"método retorna um int que pode ser um valor de :class:`Gtk.ResponseType` ou " -"pode ser o valor de resposta customizado que você especificou no construtor :" -"class:`Gtk.Dialog` ou :meth:`Gtk.Dialog .add_button`." +"Se o ponto de código for < 128, cada byte é o mesmo que o valor do ponto de " +"código." -#: ../../source/dialogs.txt:36 +#: ../../source/unicode.txt:25 msgid "" -"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " -"method removes the dialog from view, however keeps it stored in memory. This " -"is useful to prevent having to construct the dialog again if it needs to be " -"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " -"method can be used to delete the dialog from memory once it is no longer " -"needed. It should be noted that if the dialog needs to be accessed after it " -"has been destroyed, it will need to be constructed again otherwise the " -"dialog window will be empty." -msgstr "" -"Finalmente, existem duas maneiras de remover um diálogo. O método :meth:`Gtk." -"Widget.hide` remove a caixa de diálogo da visualização, mas mantém " -"armazenada na memória. Isso é útil para evitar a necessidade de construir a " -"caixa de diálogo novamente se precisar ser acessada posteriormente. " -"Alternativamente, o método :meth:`Gtk.Widget.destroy` pode ser usado para " -"excluir o diálogo da memória, uma vez que não é mais necessário. Deve ser " -"notado que se o diálogo precisar ser acessado depois de ter sido destruído, " -"ele precisará ser construído novamente, caso contrário a janela de diálogo " -"estará vazia." - -#: ../../source/dialogs.txt:53 -msgid "MessageDialog" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" msgstr "" +"Se o ponto de código for 128 ou maior, a string Unicode não poderá ser " +"representada nessa codificação. (Python dispara uma exceção :exc:" +"`UnicodeEncodeError` neste caso.)" -#: ../../source/dialogs.txt:55 +#: ../../source/unicode.txt:29 msgid "" -":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " -"standard message dialogs, with a message, an icon, and buttons for user " -"response You can specify the type of message and the text in the :class:`Gtk." -"MessageDialog` constructor, as well as specifying standard buttons." +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." msgstr "" -":class:`Gtk.MessageDialog` é uma classe de conveniência, usada para criar " -"diálogos de mensagem simples e padrão, com uma mensagem, um ícone e botões " -"para resposta do usuário. Você pode especificar o tipo de mensagem e o texto " -"no construtor :class:`Gtk.MessageDialog`, além de especificar botões padrão." +"Embora a codificação ASCII seja simples de aplicar, ela só pode codificar " +"128 caracteres diferentes, o que não é suficiente. Uma das codificações mais " +"usadas para resolver esse problema é o UTF-8 (ele pode manipular qualquer " +"ponto de código Unicode). UTF significa “Formato de Transformação Unicode”, " +"do inglês “Unicode Transformation Format”, e “8” significa que números de 8 " +"bits são usados na codificação." -#: ../../source/dialogs.txt:60 -msgid "" -"In some dialogs which require some further explanation of what has happened, " -"a secondary text can be added. In this case, the primary message entered " -"when creating the message dialog is made bigger and set to bold text. The " -"secondary message can be set by calling :meth:`Gtk.MessageDialog." -"format_secondary_text`." -msgstr "" -"Em alguns diálogos que requerem alguma explicação adicional do que " -"aconteceu, um texto secundário pode ser adicionado. Nesse caso, a mensagem " -"principal inserida ao criar a caixa de diálogo da mensagem é maior e " -"definida como texto em negrito. A mensagem secundária pode ser definida " -"chamando :meth:`Gtk.MessageDialog.format_secondary_text`." +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "Python 2" -#: ../../source/dialogs.txt:74 -msgid "FileChooserDialog" -msgstr "" +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "Suporte a Unicode do Python 2.x" -#: ../../source/dialogs.txt:76 +#: ../../source/unicode.txt:41 msgid "" -"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " -"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " -"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" msgstr "" -"O :class:`Gtk.FileChooserDialog` é adequado para uso com itens de menu " -"\"Arquivo/Abrir\" ou \"Arquivo/Salvar\". Você pode usar todos os métodos :" -"class:`Gtk.FileChooser` no diálogo do seletor de arquivos, assim como " -"aqueles para :class:`Gtk.Dialog`." +"O Python 2 vem com dois tipos diferentes de objetos que podem ser usados " +"para representar strings :class:`str` e :class:`unicode`. Instâncias do " +"último são usadas para expressar strings Unicode, enquanto instâncias do " +"tipo :class:`str` são representações de byte (a string codificada). Sob o " +"capô, Python representa strings Unicode como números inteiros de 16 ou 32 " +"bits, dependendo de como o interpretador Python foi compilado. Strings " +"Unicode podem ser convertidas em strings de 8 bits com :meth:`unicode." +"encode`::" -#: ../../source/dialogs.txt:80 +#: ../../source/unicode.txt:58 msgid "" -"When creating a :class:`Gtk.FileChooserDialog` you have to define the " -"dialog's purpose:" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" msgstr "" -"Ao criar um :class:`Gtk.FileChooserDialog` você precisa definir o propósito " -"do diálogo:" +"As strings de 8 bits do Python têm um método :meth:`str.decode` que " +"interpreta a string usando a codificação fornecida::" -#: ../../source/dialogs.txt:83 +#: ../../source/unicode.txt:68 msgid "" -"To select a file for opening, as for a File/Open command, use :attr:`Gtk." -"FileChooserAction.OPEN`" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" msgstr "" -"Para selecionar um arquivo para abertura, como para um comando Arquivo/" -"Abrir, use :attr:`Gtk.FileChooserAction.OPEN`" +"Infelizmente, o Python 2.x permite que você misture :class:`unicode` e :" +"class:`str` se a string de 8 bits contivesse apenas bytes de 7 bits (ASCII), " +"mas obteria :exc:`UnicodeDecodeError` se contivesse valores não-ASCII:" -#: ../../source/dialogs.txt:85 -msgid "" -"To save a file for the first time, as for a File/Save command, use :attr:" -"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" -"meth:`Gtk.FileChooser.set_current_name`." -msgstr "" -"Para salvar um arquivo pela primeira vez, como para um comando Arquivo/" -"Salvar, use :attr:`Gtk.FileChooserAction.SAVE` e sugira um nome como " -"\"Untitled\"com :meth:`Gtk.FileChooser.set_current_name`." +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "Unicode no GTK+" -#: ../../source/dialogs.txt:88 +#: ../../source/unicode.txt:86 msgid "" -"To save a file under a different name, as for a File/Save As command, use :" -"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" -"`Gtk.FileChooser.set_filename`." +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" msgstr "" -"Para salvar um arquivo com um nome diferente, como para um comando Arquivo/" -"Salvar como, use :attr:`Gtk.FileChooserAction.SAVE` e defina o nome do " -"arquivo existente como :meth:`Gtk.FileChooser.set_filename`." +"O GTK+ usa strings codificadas em UTF-8 para todo o texto. Isto significa " +"que se você chamar um método que retorna uma string, você sempre obterá uma " +"instância do tipo :class:`str`. O mesmo se aplica aos métodos que esperam um " +"ou mais strings como parâmetro, eles devem ser codificados em UTF-8. No " +"entanto, por conveniência, o PyGObject converterá automaticamente qualquer " +"instância :class:`unicode` para :class:`str` se fornecido como argumento::" -#: ../../source/dialogs.txt:91 +#: ../../source/unicode.txt:104 msgid "" -"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." -"SELECT_FOLDER`." +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." msgstr "" -"Para escolher uma pasta em vez de um arquivo, use :attr:`Gtk." -"FileChooserAction.SELECT_FOLDER`." +"Observe o aviso no final. Apesar de chamarmos :meth:`Gtk.Label.set_text` com " +"uma instância de :class:`unicode` como argumento, :meth:`Gtk.Label.get_text` " +"sempre retornará uma instância :class:`str`. Assim, ``txt`` e " +"``unicode_string`` *não* são iguais." -#: ../../source/dialogs.txt:93 +#: ../../source/unicode.txt:109 msgid "" -":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " -"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." -"ResponseType.CANCEL` which can be specified in the :class:`Gtk." -"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " -"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " -"expects that at least one button will have of the following response IDs:" -msgstr "" -":class:`Gtk.FileChooserDialog` herda de :class:`Gtk.Dialog`, então os botões " -"possuem IDs de resposta como :attr:`Gtk.ResponseType.ACCEPT` e :attr:`Gtk." -"ResponseType.CANCEL`, que pode ser especificado no construtor :class:`Gtk." -"FileChooserDialog`. Em contraste com :class:`Gtk.Dialog`, você não pode usar " -"códigos de resposta customizados com :class:`Gtk.FileChooserDialog`. Espera " -"que pelo menos um botão tenha os seguintes IDs de resposta:" - -#: ../../source/dialogs.txt:100 -msgid ":attr:`Gtk.ResponseType.ACCEPT`" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" msgstr "" +"Isto é especialmente importante se você quiser internacionalizar seu " +"programa usando `gettext `_. Você precisa ter certeza de que gettext retornará strings de 8 bits " +"codificadas em UTF-8 para todos os idiomas. Em geral, recomenda-se não usar " +"objetos :class:`unicode` em aplicativos GTK+ e usar somente objetos " +"codificados em UTF-8 :class:`str`, já que o GTK+ não se integra totalmente a " +"objetos :class:`unicode`. Caso contrário, você teria que decodificar os " +"valores de retorno para cadeias de caracteres Unicode cada vez que você " +"chamar um método GTK+::" -#: ../../source/dialogs.txt:101 -msgid ":attr:`Gtk.ResponseType.OK`" -msgstr "" +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "Python 3" -#: ../../source/dialogs.txt:102 -msgid ":attr:`Gtk.ResponseType.YES`" -msgstr "" +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "Suporte a Unicode do Python 3.x" -#: ../../source/dialogs.txt:103 -msgid ":attr:`Gtk.ResponseType.APPLY`" +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." msgstr "" +"Desde o Python 3.0, todas as strings são armazenadas como Unicode em uma " +"instância do tipo :class:`str`. Strings *codificadas*, por outro lado, são " +"representadas como dados binários na forma de instâncias do tipo :class:" +"`bytes`. Conceitualmente, :class:`str` refere-se a *texto*, enquanto :class:" +"`bytes` refere-se a *dados*. Use :meth:`str.encode` para ir de :class:`str` " +"para :class:`bytes` e :meth:`bytes.decode` para ir de :class:`bytes` para :" +"class:`str`." -#: ../../source/dialogs.txt:105 +#: ../../source/unicode.txt:133 msgid "" -"When the user is finished selecting files, your program can get the selected " -"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " -"(:meth:`Gtk.FileChooser.get_uri`)." +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" msgstr "" -"Quando o usuário terminar de selecionar arquivos, seu programa pode obter os " -"nomes selecionados como nomes de arquivos (:meth:`Gtk.FileChooser." -"get_filename`) ou como URIs (:meth:`Gtk.FileChooser.get_uri`)." +"Além disso, não é mais possível misturar strings Unicode com strings " +"codificadas, porque resultará em um :exc:`TypeError`::" -#: ../../source/dialogs.txt:109 +#: ../../source/unicode.txt:149 msgid "" -"By default, :class:`Gtk.FileChooser` only allows a single file to be " -"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." -"FileChooser.set_select_multiple`. Retrieving a list of selected files is " -"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." -"FileChooser.get_uris`." +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" msgstr "" -"Por padrão, :class:`Gtk.FileChooser` permite apenas que um único arquivo " -"seja selecionado por vez. Para permitir que vários arquivos sejam " -"selecionados, use :meth:`Gtk.FileChooser.set_select_multiple`. Recuperar uma " -"lista de arquivos selecionados é possível com :meth:`Gtk.FileChooser." -"get_filenames` ou :meth:`Gtk.FileChooser.get_uris`." +"Como consequência, as coisas são muito mais limpas e consistentes com o " +"Python 3.x porque o PyGObject irá automaticamente codificar/decodificar para/" +"de UTF-8 se você passar uma string para um método ou um método retornar uma " +"string. Strings, ou *text*, sempre serão representados como instâncias de :" +"class:`str` apenas::" -#: ../../source/dialogs.txt:115 +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "Referências" + +#: ../../source/unicode.txt:166 msgid "" -":class:`Gtk.FileChooser` also supports a variety of options which make the " -"files and folders more configurable and accessible." +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." msgstr "" -":class:`Gtk.FileChooser` também suporta uma variedade de opções que tornam " -"os arquivos e pastas mais configuráveis e acessíveis." +"`O que há de novo no Python 3.0 `_ descreve os " +"novos conceitos que distinguir claramente entre texto e dados." -#: ../../source/dialogs.txt:118 +#: ../../source/unicode.txt:169 msgid "" -":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." msgstr "" -":meth:`Gtk.FileChooser.set_local_only`: Somente arquivos locais podem ser " -"selecionados." +"O `Unicode HOWTO `_ " +"aborda o suporte do Python 2.x a Unicode e explica vários problemas que as " +"pessoas comumente encontram ao tentar trabalhar com o Unicode." -#: ../../source/dialogs.txt:119 +#: ../../source/unicode.txt:173 msgid "" -":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." msgstr "" -":meth:`Gtk.FileChooser.show_hidden`: arquivos e pastas ocultos são exibidos." +"O `Unicode HOWTO for Python 3.x `_ discute o suporte a Unicode no Python 3.x." -#: ../../source/dialogs.txt:120 +#: ../../source/unicode.txt:176 msgid "" -":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " -"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " -"confirmation dialog if the user types a file name that already exists." +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." msgstr "" -":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Se o seletor de " -"arquivos foi configurado no modo :attr:`Gtk.FileChooserAction.SAVE`, ele " -"apresentará um diálogo de confirmação se o usuário digitar um nome de " -"arquivo que já existe." +"`A tabela de codificação UTF-8 e os caracteres Unicode `_ contém uma lista de pontos de código Unicode e sua " +"respectiva codificação UTF-8." -#: ../../source/dialogs.txt:124 +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "Glade e Gtk.Builder" + +#: ../../source/builder.txt:3 msgid "" -"Furthermore, you can specify which kind of files are displayed by creating :" -"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." -"add_filter`. The user can then select one of the added filters from a combo " -"box at the bottom of the file chooser." +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by an XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" msgstr "" -"Além disso, você pode especificar quais tipos de arquivos são exibidos " -"criando objetos :class:`Gtk.FileFilter` e chamando :meth:`Gtk.FileChooser." -"add_filter`. O usuário pode selecionar um dos filtros adicionados em uma " -"caixa de combinação na parte inferior do seletor de arquivos." +"A classe :class:`Gtk.Builder` oferece a você a oportunidade de projetar " +"interfaces de usuário sem escrever uma única linha de código. Isso é " +"possível descrevendo a interface por um arquivo XML e, em seguida, " +"carregando a descrição XML em tempo de execução e criando os objetos " +"automaticamente, o que a classe Builder faz por você. Para o propósito de " +"não precisar escrever o XML manualmente, o aplicativo `Glade `_ permite criar a interface do usuário de uma maneira WYSIWYG (o " +"que você vê é o que obtém)" -#: ../../source/drag_and_drop.txt:2 -msgid "Drag and Drop" -msgstr "Arraste e solte" +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "Esse método possui várias vantagens:" -#: ../../source/drag_and_drop.txt:4 -msgid "" -"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " -"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " -"required for the following examples to work." +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "Menos código precisa ser escrito." + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." msgstr "" -"As versões do PyGObject < 3.0.3 contêm um bug que não permite arrastar e " -"soltar para funcionar corretamente. Portanto, uma versão do PyGObject >= " -"3.0.3 é necessária para os exemplos a seguir funcionarem." +"As mudanças da interface do usuário podem ser vistas mais rapidamente, para " +"que as interfaces de usuário possam melhorar." -#: ../../source/drag_and_drop.txt:8 -msgid "" -"Setting up drag and drop between widgets consists of selecting a drag source " -"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." -"drag_source_set` method, selecting a drag destination (the widget which the " -"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " -"handling the relevant signals on both widgets." +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." msgstr "" -"Configurar arrastar e soltar entre widgets consiste em selecionar uma fonte " -"de arrasto (o widget do qual o usuário começa a arrastar) com o método :meth:" -"`Gtk.Widget.drag_source_set`, selecionando um destino de arrasto (o widget " -"que o usuário coloca em) com o método :meth:`Gtk.Widget.drag_dest_set` e " -"depois manipular os sinais relevantes em ambos os widgets." +"Designers sem habilidades de programação podem criar e editar interfaces de " +"usuário." -#: ../../source/drag_and_drop.txt:14 +#: ../../source/builder.txt:12 msgid "" -"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." -"drag_dest_set` some specialised widgets require the use of specific " -"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +"The description of the user interface is independent from the programming " +"language being used." msgstr "" -"Em vez de usar :meth:`Gtk.Widget.drag_source_set` e :meth:`Gtk.Widget." -"drag_dest_set` alguns widgets especializados requerem o uso de funções " -"específicas (como :class:`Gtk.TreeView` e :class:`Gtk.IconView`)." +"A descrição da interface do usuário é independente da linguagem de " +"programação utilizada." -#: ../../source/drag_and_drop.txt:18 +#: ../../source/builder.txt:14 msgid "" -"A basic drag and drop only requires the source to connect to the \"drag-data-" -"get\" signal and the destination to connect to the \"drag-data-received\" " -"signal. More complex things such as specific drop areas and custom drag " -"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." msgstr "" -"Um arrastar e soltar básico requer apenas que a fonte se conecte ao sinal " -"\"drag-data-get\" e que o destino se conecte ao sinal \"drag-data-received" -"\". Coisas mais complexas, como áreas de queda específicas e ícones de " -"arrastar personalizados, exigirão que você se conecte a :ref:`sinais " -"adicionais ` e interaja com o objeto :class:`Gdk.DragContext` " -"que fornece." +"Ainda existe código necessário para lidar com mudanças de interface " +"acionadas pelo usuário, mas :class:`Gtk.Builder` permite que você se " +"concentre em implementar essa funcionalidade." -#: ../../source/drag_and_drop.txt:24 +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "Criando e carregando o arquivo .glade" + +#: ../../source/builder.txt:18 msgid "" -"In order to transfer data between the source and destination, you must " -"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" -"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." msgstr "" -"Para transferir dados entre a origem e o destino, você deve interagir com a " -"variável :class:`Gtk.SelectionData` fornecida no :ref:`\"drag-data-get\" " -"` e sinais de :ref:`\"drag-data-received\" ` " -"usando os métodos get e set :class:`Gtk.SelectionData`." +"Primeiro de tudo você tem que baixar e instalar o Glade. Existem `vários " +"tutoriais `_ sobre " +"o Glade, então isso não é explicado aqui em detalhes. Vamos começar criando " +"uma janela com um botão e salvando-a em um arquivo chamado *example.glade*. " +"O arquivo XML resultante deve se parecer com isso." -#: ../../source/drag_and_drop.txt:30 -msgid "Target Entries" -msgstr "Alvos de Entrada" +#: ../../source/builder.txt:41 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" +"Para carregar este arquivo em Python, precisamos de um objeto :class:`Gtk." +"Builder`." -#: ../../source/drag_and_drop.txt:31 +#: ../../source/builder.txt:48 msgid "" -"To allow the drag source and destination to know what data they are " -"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " -"data that will be sent by the drag source and received by the drag " -"destination." +"The second line loads all objects defined in *example.glade* into the " +"Builder object." msgstr "" -"Para permitir que a fonte de arrastar e o destino saibam quais dados estão " -"recebendo e enviando, uma lista comum de :class:`Gtk.TargetEntry's ` é necessária. A :class:`Gtk.TargetEntry` descreve um dado que " -"será enviado pela fonte de arrasto e recebido pelo destino do arrasto." +"A segunda linha carrega todos os objetos definidos em *example.glade* no " +"objeto Builder." -#: ../../source/drag_and_drop.txt:36 +#: ../../source/builder.txt:50 msgid "" -"There are two ways of adding :class:`Gtk.TargetEntry's ` to " -"a source and destination. If the drag and drop is simple and each target " -"entry is of a different type, you can use the group of methods :meth:" -"`mentioned here `." +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." msgstr "" -"Existem duas maneiras de adicionar :class:`Gtk.TargetEntry's ` a uma origem e destino. Se o arrastar e soltar for simples e " -"cada entrada de destino for de um tipo diferente, você pode usar o grupo de " -"métodos mencionado aqui :meth:``." +"Também é possível carregar apenas alguns dos objetos. A linha a seguir " +"adicionaria apenas os objetos (e seus objetos filhos) fornecidos na tupla." -#: ../../source/drag_and_drop.txt:41 +#: ../../source/builder.txt:57 msgid "" -"If you require more than one type of data or wish to do more complex things " -"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." msgstr "" -"Se você precisar de mais de um tipo de dados ou quiser fazer coisas mais " -"complexas com os dados, você precisará criar o :class:`Gtk.TargetEntry's " -"` usando o método :meth:`Gtk.TargetEntry.new`." - -#: ../../source/drag_and_drop.txt:48 -msgid "Drag Source Signals" -msgstr "Sinais de Origem do Arrasto" +"Esses dois métodos também existem para o carregamento de uma string, em vez " +"de um arquivo. Seus nomes correspondentes são :meth:`Gtk.Builder." +"add_from_string` e :meth:`Gtk.Builder.add_objects_from_string` e eles " +"simplesmente pegam uma string XML em vez de um nome de arquivo." -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Name" -msgstr "Nome" +#: ../../source/builder.txt:61 +msgid "Accessing widgets" +msgstr "Acessando widgets" -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "When it is emitted" -msgstr "Quando é emitido" - -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Common Purpose" -msgstr "Propósito comum" - -#: ../../source/drag_and_drop.txt:52 -msgid "drag-begin" -msgstr "" - -#: ../../source/drag_and_drop.txt:52 -msgid "User starts a drag" -msgstr "Usuário inicia um arrasto" - -#: ../../source/drag_and_drop.txt:52 -msgid "Set-up drag icon" -msgstr "Configurar ícone de arrastar" - -#: ../../source/drag_and_drop.txt:54 -msgid "drag-data-get" +#: ../../source/builder.txt:62 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" msgstr "" +"Agora que a janela e o botão estão carregados, também queremos mostrá-los. " +"Portanto, o método :meth:`Gtk.Window.show_all` deve ser chamado na janela. " +"Mas como acessamos o objeto associado?" -#: ../../source/drag_and_drop.txt:54 -msgid "When drag data is requested by the destination" -msgstr "Quando dados arrastados são solicitados pelo destino" - -#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 -msgid "Transfer drag data from source to destination" -msgstr "Transferir dados de arrastar da origem para o destino" - -#: ../../source/drag_and_drop.txt:56 -msgid "drag-data-delete" +#: ../../source/builder.txt:71 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." msgstr "" +"Cada widget pode ser recuperado do construtor pelo método :meth:`Gtk.Builder." +"get_object` e pelo *id* do widget. É realmente *isso* simples." -#: ../../source/drag_and_drop.txt:56 -msgid "When a drag with the action Gdk.DragAction.MOVE is completed" -msgstr "Quando um arrasto com a ação Gdk.DragAction.MOVE é concluído" +#: ../../source/builder.txt:74 +msgid "It is also possible to get a list of all objects with" +msgstr "Também é possível obter uma lista de todos os objetos com" -#: ../../source/drag_and_drop.txt:56 -msgid "Delete data from the source to complete the 'move'" -msgstr "Excluir dados da fonte para completar o 'movimento'" +#: ../../source/builder.txt:81 +msgid "Connecting Signals" +msgstr "Conectando sinais" -#: ../../source/drag_and_drop.txt:58 -msgid "drag-end" +#: ../../source/builder.txt:82 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." msgstr "" +"O Glade também permite definir sinais que você pode conectar a manipuladores " +"em seu código sem extrair todos os objetos do construtor e conectar-se aos " +"sinais manualmente. A primeira coisa a fazer é declarar os nomes dos sinais " +"no Glade. Para este exemplo, vamos agir quando a janela é fechada e quando o " +"botão foi pressionado, então damos o nome “onDestroy” para o retorno de " +"chamada manipulando o sinal “destroy” da janela e “onButtonPressed” para o " +"retorno de chamada manipulando o sinal “pressed” do botão. Agora o arquivo " +"XML deve ficar assim." -#: ../../source/drag_and_drop.txt:58 -msgid "When the drag is complete" -msgstr "Quando o arrasto estiver completo" - -#: ../../source/drag_and_drop.txt:58 -msgid "Undo anything done in drag-begin" -msgstr "Desfazer qualquer coisa feita no drag-begin" - -#: ../../source/drag_and_drop.txt:62 -msgid "Drag Destination Signals" -msgstr "Sinais de Destino do Arrasto" - -#: ../../source/drag_and_drop.txt:66 -msgid "drag-motion" +#: ../../source/builder.txt:90 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" msgstr "" +"Agora temos que definir as funções do manipulador em nosso código. O " +"*onDestroy* deve simplesmente resultar em uma chamada para :meth:`Gtk." +"main_quit`. Quando o botão é pressionado, gostaríamos de imprimir a string " +"“Hello World!”, Então definimos o manipulador da seguinte maneira" -#: ../../source/drag_and_drop.txt:66 -msgid "Drag icon moves over a drop area" -msgstr "O ícone de arrasto se move sobre uma área de soltar" - -#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 -msgid "Allow only certain areas to be dropped onto" -msgstr "Permitir que apenas algumas áreas sejam soltas" - -#: ../../source/drag_and_drop.txt:68 -msgid "drag-drop" +#: ../../source/builder.txt:99 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." msgstr "" +"Em seguida, temos que conectar os sinais e as funções do manipulador. A " +"maneira mais fácil de fazer isso é definir um *dict* com um mapeamento dos " +"nomes para os manipuladores e então passá-lo para o método :meth:`Gtk." +"Builder.connect_signals`." -#: ../../source/drag_and_drop.txt:68 -msgid "Icon is dropped onto a drag area" -msgstr "O ícone é solto em uma área de arrasto" - -#: ../../source/drag_and_drop.txt:70 -msgid "drag-data-received" +#: ../../source/builder.txt:110 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" msgstr "" +"Uma abordagem alternativa é criar uma classe que tenha métodos que sejam " +"chamados como os sinais. Em nosso exemplo, o último snippet de código pode " +"ser reescrito como:" -#: ../../source/drag_and_drop.txt:70 -msgid "When drag data is received by the destination" -msgstr "Quando dados arrastados são recebidos pelo destino" +#: ../../source/builder.txt:119 +msgid "The final code of the example" +msgstr "O código final do exemplo" #: ../../source/entry.txt:2 msgid "Entry" -msgstr "" +msgstr "Entry" #: ../../source/entry.txt:4 msgid "" @@ -1608,10 +1715,10 @@ msgid "" "the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " "characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." msgstr "" -"Widgets de entrada permitem que o usuário insira texto. Você pode alterar o " -"conteúdo com o método :meth:`Gtk.Entry.set_text` e ler o conteúdo atual com " -"o método :meth:`Gtk.Entry.get_text`. Você também pode limitar o número de " -"caracteres que a Entrada pode receber chamando :meth:`Gtk.Entry." +"Entry são widgets que permitem que o usuário insira texto. Você pode alterar " +"o conteúdo com o método :meth:`Gtk.Entry.set_text` e ler o conteúdo atual " +"com o método :meth:`Gtk.Entry.get_text`. Você também pode limitar o número " +"de caracteres que a Entrada pode receber chamando :meth:`Gtk.Entry." "set_max_length`." #: ../../source/entry.txt:9 @@ -1646,10 +1753,10 @@ msgid "" msgstr "" ":class:`Gtk.Entry` tem a capacidade de exibir informações de progresso ou " "atividade por trás do texto. Isso é semelhante ao widget :class:`Gtk." -"ProgressBar` e é comumente encontrado em navegadores da Web para indicar " -"quanto de um download de página foi concluído. Para fazer uma entrada exibir " -"tais informações, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk." -"Entry.set_progress_pulse_step` ou :meth:`Gtk.Entry.progress_pulse`." +"ProgressBar` e é comumente encontrado em navegadores web para indicar quanto " +"de um download de página foi concluído. Para fazer uma entrada exibir tais " +"informações, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step` ou :meth:`Gtk.Entry.progress_pulse`." #: ../../source/entry.txt:24 msgid "" @@ -1668,3365 +1775,2967 @@ msgstr "" "ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." "set_icon_tooltip_text` ou a função correspondente para marcação." -#: ../../source/gallery.txt:2 -msgid "Widget Gallery" -msgstr "" +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "Noções básicas" -#: ../../source/gallery.txt:5 -msgid ":class:`Gtk.AboutDialog`" -msgstr "" +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "Esta seção apresentará alguns dos aspectos mais importantes do GTK+." -#: ../../source/gallery.txt:6 -msgid ":class:`Gtk.AccelLabel`" -msgstr "" +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "Loop principal e sinais" -#: ../../source/gallery.txt:7 -msgid ":class:`Gtk.ActionBar`" +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." msgstr "" +"Como a maioria dos toolkits de GUI, o GTK+ usa um modelo de programação " +"orientada a eventos. Quando o usuário não está fazendo nada, o GTK+ fica no " +"loop principal e aguarda a entrada. Se o usuário executar alguma ação – " +"digamos, um clique do mouse — o loop principal “acorda” e entrega um evento " +"para o GTK+." -#: ../../source/gallery.txt:8 -msgid ":class:`Gtk.Alignment`" +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." msgstr "" +"Quando widgets recebem um evento, eles frequentemente emitem um ou mais " +"sinais. Sinais notificam seu programa que “algo interessante aconteceu” " +"invocando funções que você conectou ao sinal. Tais funções são comumente " +"conhecidas como *callbacks* ou *retorno de chamada*. Quando seus retornos de " +"chamada são invocados, você normalmente toma algumas ações – por exemplo, " +"quando um botão Abrir é clicado, você pode exibir uma caixa de diálogo de " +"seleção de arquivos. Depois que um retorno de chamada terminar, o GTK+ " +"retornará ao loop principal e aguardará mais entrada do usuário." -#: ../../source/gallery.txt:9 -msgid ":class:`Gtk.AppChooserButton`" -msgstr "" +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "Um exemplo genérico é:" -#: ../../source/gallery.txt:10 -msgid ":class:`Gtk.AppChooserDialog`" +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." msgstr "" +"Em primeiro lugar, *widget* é uma instância de um widget que criamos " +"anteriormente. Em seguida, o evento em que estamos interessados. Cada widget " +"tem seus próprios eventos específicos que podem ocorrer. Por exemplo, se " +"você tem um botão, geralmente deseja se conectar ao evento “clicked”. Isso " +"significa que quando o botão é clicado, o sinal é emitido. Em terceiro " +"lugar, o argumento *callback* é o nome da função de retorno de chamada. Ele " +"contém o código que é executado quando os sinais do tipo especificado são " +"emitidos. Finalmente, o argumento *data* inclui todos os dados que devem ser " +"passados quando o sinal é emitido. No entanto, esse argumento é " +"completamente opcional e pode ser deixado de fora se não for necessário." -#: ../../source/gallery.txt:11 -msgid ":class:`Gtk.AppChooserWidget`" +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." msgstr "" +"A função retorna um número que identifica esse par de sinal/retorno de " +"chamada específico. É necessário desconectar de um sinal de modo que a " +"função de retorno de chamada não seja chamada durante qualquer emissão " +"futura ou atual do sinal ao qual está conectada." -#: ../../source/gallery.txt:12 -msgid ":class:`Gtk.ApplicationWindow`" +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" msgstr "" +"Se você perdeu o “handler_id” por algum motivo (por exemplo, os " +"manipuladores foram instalados usando :func:`Gtk.Builder.connect_signals`), " +"você ainda pode desconectar um retorno de chamada específico usando a " +"função :func:`disconnect_by_func`:" -#: ../../source/gallery.txt:13 -msgid ":class:`Gtk.Arrow`" -msgstr "" +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted when an object is destroyed, so when a user requests " +"that a toplevel window is closed, the default handler for this signal " +"destroys the window, but does not terminate the application. Connecting the " +"\"destroy\" signal of the top-level window to the function :func:`Gtk." +"main_quit` will result in the desired behaviour." +msgstr "" +"Os aplicativos devem se conectar ao sinal “destroy” da janela de nível " +"superior. É emitido quando um objeto é destruído, portanto, quando um " +"usuário solicita que uma janela de nível superior é fechada, o manipulador " +"padrão para este sinal destrói a janela, mas não finaliza o aplicativo. " +"Conectar o sinal “destroy” da janela de nível superior à função :func:`Gtk." +"main_quit` resultará no comportamento desejado." -#: ../../source/gallery.txt:14 -msgid ":class:`Gtk.AspectFrame`" +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." msgstr "" +"Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" +"`Gtk.main`." -#: ../../source/gallery.txt:15 -msgid ":class:`Gtk.Assistant`" -msgstr "" +#: ../../source/basics.txt:77 ../../source/objects.txt:96 +msgid "Properties" +msgstr "Propriedades" -#: ../../source/gallery.txt:16 -msgid ":class:`Gtk.Box`" +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" msgstr "" +"Propriedades descrevem a configuração e o estado dos widgets. Quanto aos " +"sinais, cada widget tem seu próprio conjunto particular de propriedades. Por " +"exemplo, um botão tem a propriedade “label”, que contém o texto do widget de " +"etiqueta dentro do botão. Você pode especificar o nome e o valor de qualquer " +"número de propriedades como argumentos nomeados ao criar uma instância de um " +"widget. Para criar um rótulo alinhado à direita com o texto “Hello World” e " +"um ângulo de 25 graus, use:" -#: ../../source/gallery.txt:17 -msgid ":class:`Gtk.Button`" -msgstr "" +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "que é equivalente a" -#: ../../source/gallery.txt:18 -msgid ":class:`Gtk.ButtonBox`" +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." msgstr "" +"Em vez de usar getters e setters, você também pode obter e definir as " +"propriedades do gobject através da propriedade “props”, como ``widget.props." +"prop_name = valor``. Isto é equivalente ao mais detalhado ``widget." +"get_property(“prop-name”)`` e ``widget.set_property(“prop-name”, valor)``." -#: ../../source/gallery.txt:19 -msgid ":class:`Gtk.Calendar`" +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" msgstr "" +"Para ver quais propriedades estão disponíveis para um widget na versão em " +"execução do GTK, você pode usar “dir” com a propriedade “props”:" -#: ../../source/gallery.txt:20 -msgid ":class:`Gtk.CellView`" +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." msgstr "" +"Isto irá imprimir no console a lista de propriedades que um Gtk.Box possui." -#: ../../source/gallery.txt:21 -msgid ":class:`Gtk.CheckButton`" -msgstr "" +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "Clipboard" -#: ../../source/gallery.txt:22 -msgid ":class:`Gtk.CheckMenuItem`" +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." msgstr "" +":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " +"de dados, incluindo texto e imagens. O uso de uma área de transferência " +"permite que esses dados sejam compartilhados entre aplicativos por meio de " +"ações como copiar, cortar e colar. Essas ações geralmente são feitas de três " +"maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " +"conectando as funções aos widgets :class:`Gtk.Button`." -#: ../../source/gallery.txt:23 -msgid ":class:`Gtk.ColorButton`" +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." msgstr "" +"Existem várias seleções da área de transferência para finalidades " +"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` é " +"usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção comum " +"que armazena texto selecionado pelo usuário com o cursor." -#: ../../source/gallery.txt:24 -msgid ":class:`Gtk.ColorChooserDialog`" -msgstr "" +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "CellRenderers" -#: ../../source/gallery.txt:25 -msgid ":class:`Gtk.ColorChooserWidget`" +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" msgstr "" +"Os widgets :class:`Gtk.CellRenderer` (renderizadores de célula) são usados " +"para exibir informações dentro de widgets como :class:`Gtk.TreeView` ou :" +"class:`Gtk.ComboBox`. Eles trabalham de perto com os widgets associados e " +"são muito poderosos, com muitas opções de configuração para exibir uma " +"grande quantidade de dados de diferentes maneiras. Há sete widgets :class:" +"`Gtk.CellRenderer` que podem ser usados para diferentes propósitos:" -#: ../../source/gallery.txt:26 -msgid ":class:`Gtk.ColorSelection`" -msgstr "" +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr ":class:`Gtk.CellRendererText`" -#: ../../source/gallery.txt:27 -msgid ":class:`Gtk.ColorSelectionDialog`" -msgstr "" +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr ":class:`Gtk.CellRendererToggle`" -#: ../../source/gallery.txt:28 -msgid ":class:`Gtk.ComboBox`" -msgstr "" +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr ":class:`Gtk.CellRendererPixbuf`" -#: ../../source/gallery.txt:29 -msgid ":class:`Gtk.ComboBoxText`" -msgstr "" +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr ":class:`Gtk.CellRendererCombo`" -#: ../../source/gallery.txt:30 -msgid ":class:`Gtk.Dialog`" -msgstr "" +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr ":class:`Gtk.CellRendererProgress`" -#: ../../source/gallery.txt:31 -msgid ":class:`Gtk.DrawingArea`" -msgstr "" +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr ":class:`Gtk.CellRendererSpinner`" -#: ../../source/gallery.txt:32 -msgid ":class:`Gtk.Entry`" -msgstr "" +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr ":class:`Gtk.CellRendererSpin`" -#: ../../source/gallery.txt:33 -msgid ":class:`Gtk.EventBox`" -msgstr "" +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr ":class:`Gtk.CellRendererAccel`" -#: ../../source/gallery.txt:34 -msgid ":class:`Gtk.Expander`" -msgstr "" +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "CellRendererText" -#: ../../source/gallery.txt:35 -msgid ":class:`Gtk.FileChooserButton`" +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." msgstr "" +"A :class:`Gtk.CellRendererText` processa um dado texto em sua célula, usando " +"as informações de fonte, cor e estilo fornecidas por suas propriedades. O " +"texto será reticulado se for muito longo e a propriedade “ellipsize” " +"permitir." -#: ../../source/gallery.txt:36 -msgid ":class:`Gtk.FileChooserDialog`" +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" msgstr "" +"Por padrão, o texto em :class:`Gtk.CellRendererText` widgets não é editável. " +"Isso pode ser alterado, definindo o valor da propriedade “editable” como " +"``True``:" -#: ../../source/gallery.txt:37 -msgid ":class:`Gtk.FileChooserWidget`" +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." msgstr "" +"Você pode então se conectar ao sinal “edited” e atualizar seu :class:`Gtk." +"TreeModel` de acordo." -#: ../../source/gallery.txt:38 -msgid ":class:`Gtk.Fixed`" -msgstr "" +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "CellRendererToggle" -#: ../../source/gallery.txt:39 -msgid ":class:`Gtk.FlowBox`" +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." msgstr "" +":class:`Gtk.CellRendererToggle` renderiza um botão de alternância em uma " +"célula. O botão é desenhado como um botão de rádio ou de verificação, " +"dependendo da propriedade “radio”. Quando ativado, emite o sinal “toggled”." -#: ../../source/gallery.txt:40 -msgid ":class:`Gtk.FlowBoxChild`" +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." msgstr "" +"Como um :class:`Gtk.CellRendererToggle` pode ter dois estados, ativos e não " +"ativos, você provavelmente deseja vincular a propriedade “active” no " +"renderizador de célula a um valor booleano no modelo, fazendo com que o " +"botão de seleção reflita o estado do modelo." -#: ../../source/gallery.txt:41 -msgid ":class:`Gtk.FontButton`" -msgstr "" +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "CellRendererPixbuf" -#: ../../source/gallery.txt:42 -msgid ":class:`Gtk.FontChooserDialog`" +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." msgstr "" +"A :class:`Gtk.CellRendererPixbuf` pode ser usado para renderizar uma imagem " +"em uma célula. Ele permite renderizar um dado :class:`Gdk.Pixbuf` (definido " +"através da propriedade “pixbuf”) ou um ícone nomeado (configurado através da " +"propriedade “icon-name”)." -#: ../../source/gallery.txt:43 -msgid ":class:`Gtk.FontChooserWidget`" -msgstr "" +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "CellRendererCombo" -#: ../../source/gallery.txt:44 -msgid ":class:`Gtk.FontSelection`" +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." msgstr "" +":class:`Gtk.CellRendererCombo` processa texto em uma célula como :class:`Gtk." +"CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererCombo` oferece " +"um widget :class:`Gtk.ComboBox` para editar o texto. Os valores a serem " +"exibidos na caixa de combinação são obtidos de :class:`Gtk.TreeModel` " +"especificado na propriedade “model”." -#: ../../source/gallery.txt:45 -msgid ":class:`Gtk.FontSelectionDialog`" +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." msgstr "" +"O CellRendererCombo cuida de adicionar um renderizador de célula de texto à " +"caixa de combinação e o configura para exibir a coluna especificada por sua " +"propriedade “text-column”." -#: ../../source/gallery.txt:46 -msgid ":class:`Gtk.Frame`" +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." msgstr "" +"A :class:`Gtk.CellRendererCombo` pode operar em dois modos. Ele pode ser " +"usado com e sem um widget associado :class:`Gtk.Entry`, dependendo do valor " +"da propriedade “has-entry”." -#: ../../source/gallery.txt:47 -msgid ":class:`Gtk.GLArea`" -msgstr "" +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "CellRendererProgress" -#: ../../source/gallery.txt:48 -msgid ":class:`Gtk.Grid`" +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." msgstr "" +":class:`Gtk.CellRendererProgress` renderiza um valor numérico como uma barra " +"de progresso em uma célula. Além disso, pode exibir um texto na parte " +"superior da barra de progresso." -#: ../../source/gallery.txt:49 -msgid ":class:`Gtk.HBox`" +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." msgstr "" +"O valor percentual da barra de progresso pode ser modificado alterando a " +"propriedade “value”. Semelhante a :class:`Gtk.ProgressBar`, você pode ativar " +"o *modo de atividade* incrementando a propriedade “pulse” em vez da " +"propriedade “value”." -#: ../../source/gallery.txt:50 -msgid ":class:`Gtk.HButtonBox`" -msgstr "" +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "CellRendererSpin" -#: ../../source/gallery.txt:51 -msgid ":class:`Gtk.HPaned`" +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." msgstr "" +":class:`Gtk.CellRendererSpin` processa o texto em uma célula como :class:" +"`Gtk.CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " +"entrada simples para editar o texto, :class:`Gtk.CellRendererSpin` oferece " +"um widget :class:`Gtk.SpinButton`. Claro, isso significa que o texto deve " +"ser analisado como um número de ponto flutuante." -#: ../../source/gallery.txt:52 -msgid ":class:`Gtk.HSV`" +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." msgstr "" +"O intervalo do botão de rotação é obtido da propriedade de ajuste do " +"renderizador de célula, que pode ser definido explicitamente ou mapeado para " +"uma coluna no modelo de árvore, como todas as propriedades dos " +"renderizadores de célula. :class:`Gtk.CellRendererSpin` também possui " +"propriedades para a taxa de subida e o número de dígitos a serem exibidos." -#: ../../source/gallery.txt:53 -msgid ":class:`Gtk.HScale`" -msgstr "" +#: ../../source/menus.txt:2 ../../source/application.txt:36 +msgid "Menus" +msgstr "Menus" -#: ../../source/gallery.txt:54 -msgid ":class:`Gtk.HScrollbar`" +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." msgstr "" +":class:`Gtk.UIManager`, :class:`Gtk.Action` e :class:`Gtk.ActionGroup` foram " +"descontinuados desde o GTK+ versão 3.10 e não devem ser usados em código " +"recém-escrito. Use o framework :ref:`application`." -#: ../../source/gallery.txt:55 -msgid ":class:`Gtk.HSeparator`" +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." msgstr "" +"O GTK+ vem com dois tipos diferentes de menus :class:`Gtk.MenuBar` e :class:" +"`Gtk.Toolbar`. :class:`Gtk.MenuBar` é uma barra de menus padrão que contém " +"uma ou mais instâncias :class:`Gtk.MenuItem` ou uma de suas subclasses. Os " +"widgets :class:`Gtk.Toolbar` são usados para acessibilidade rápida às " +"funções comumente usadas de um aplicativo. Exemplos incluem criar um novo " +"documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " +"mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." -#: ../../source/gallery.txt:56 -msgid ":class:`Gtk.HandleBox`" -msgstr "" - -#: ../../source/gallery.txt:57 -msgid ":class:`Gtk.HeaderBar`" -msgstr "" - -#: ../../source/gallery.txt:58 -msgid ":class:`Gtk.IconView`" -msgstr "" +#: ../../source/menus.txt:17 ../../source/application.txt:12 +msgid "Actions" +msgstr "Ações" -#: ../../source/gallery.txt:59 -msgid ":class:`Gtk.Image`" +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." msgstr "" +"Embora existam APIs específicas para criar menus e barras de ferramentas, " +"você deve usar :class:`Gtk.UIManager` e criar instâncias :class:`Gtk." +"Action`. As ações são organizadas em grupos. A :class:`Gtk.ActionGroup` é " +"essencialmente um mapa de nomes para objetos :class:`Gtk.Action`. Todas as " +"ações que fazem sentido usar em um contexto particular devem estar em um " +"único grupo. Vários grupos de ação podem ser usados para uma interface de " +"usuário específica. Na verdade, espera-se que a maioria dos aplicativos não " +"triviais faça uso de vários grupos. Por exemplo, em um aplicativo que pode " +"editar vários documentos, um grupo mantém ações globais (por exemplo, sair, " +"sobre, novo) e um grupo por documento que contém ações que atuam nesse " +"documento (por exemplo, salvar, recortar/copiar/colar etc. ). Os menus de " +"cada janela seriam construídos a partir de uma combinação de dois grupos de " +"ação." -#: ../../source/gallery.txt:60 -msgid ":class:`Gtk.ImageMenuItem`" -msgstr "" +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "Existem classes diferentes representando diferentes tipos de ações:" -#: ../../source/gallery.txt:61 -msgid ":class:`Gtk.InfoBar`" +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" msgstr "" +":class:`Gtk.Action`: Uma ação que pode ser acionada por um item de menu ou " +"barra de ferramentas" -#: ../../source/gallery.txt:62 -msgid ":class:`Gtk.Invisible`" +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" msgstr "" +":class:`Gtk.ToggleAction`: Uma ação que pode ser alternada entre dois estados" -#: ../../source/gallery.txt:63 -msgid ":class:`Gtk.Label`" +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" msgstr "" +":class:`Gtk.RadioAction`: Uma ação da qual apenas um em um grupo pode estar " +"ativo" -#: ../../source/gallery.txt:64 -msgid ":class:`Gtk.Layout`" +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" msgstr "" +":class:`Gtk.RecentAction`: Uma ação que representa uma lista de arquivos " +"usados recentemente" -#: ../../source/gallery.txt:65 -msgid ":class:`Gtk.LevelBar`" +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." msgstr "" +"Ações representam operações que o usuário pode executar, juntamente com " +"algumas informações sobre como ele deve ser apresentado na interface, " +"incluindo seu nome (não para exibição), seu rótulo (para exibição), um " +"acelerador, se um rótulo também indica uma dica de ferramenta como o retorno " +"que é chamado quando a ação é ativada." -#: ../../source/gallery.txt:66 -msgid ":class:`Gtk.LinkButton`" +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" msgstr "" +"Você pode criar ações chamando um dos construtores diretamente e adicionando-" +"os a um :class:`Gtk.ActionGroup` chamando :meth:`Gtk.ActionGroup.add_action` " +"ou :meth:`Gtk.ActionGroup.add_action_with_accel`, ou chamando uma das " +"funções de conveniência:" -#: ../../source/gallery.txt:67 -msgid ":class:`Gtk.ListBox`" -msgstr "" +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr ":meth:`Gtk.ActionGroup.add_actions`," -#: ../../source/gallery.txt:68 -msgid ":class:`Gtk.ListBoxRow`" -msgstr "" +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr ":meth:`Gtk.ActionGroup.add_toggle_actions`" -#: ../../source/gallery.txt:69 -msgid ":class:`Gtk.LockButton`" -msgstr "" +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr ":meth:`Gtk.ActionGroup.add_radio_actions`." -#: ../../source/gallery.txt:70 -msgid ":class:`Gtk.Menu`" -msgstr "" +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "Observe que você deve especificar ações para submenus e itens de menu." -#: ../../source/gallery.txt:71 -msgid ":class:`Gtk.MenuBar`" -msgstr "" +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "Gerenciador de interface de usuário" -#: ../../source/gallery.txt:72 -msgid ":class:`Gtk.MenuButton`" +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." msgstr "" +":class:`Gtk.UIManager` fornece uma maneira fácil de criar menus e barras de " +"ferramentas usando uma descrição `tipo XML `_." -#: ../../source/gallery.txt:73 -msgid ":class:`Gtk.MenuItem`" +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." msgstr "" +"Primeiro de tudo, você deve adicionar o :class:`Gtk.ActionGroup` ao UI " +"Manager com :meth:`Gtk.UIManager.insert_action_group`. Neste ponto também é " +"uma boa ideia dizer à janela pai para responder aos atalhos de teclado " +"especificados, usando :meth:`Gtk.UIManager.get_accel_group` e :meth:`Gtk." +"Window.add_accel_group`." -#: ../../source/gallery.txt:74 -msgid ":class:`Gtk.MenuToolButton`" +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." msgstr "" +"Em seguida, você pode definir o layout visível real dos menus e barras de " +"ferramentas e adicionar o layout da interface do usuário. Essa “string de " +"ui” usa um formato XML, no qual você deve mencionar os nomes das ações que " +"você já criou. Lembre-se de que esses nomes são apenas os identificadores " +"que usamos ao criar as ações. Eles não são o texto que o usuário verá nos " +"menus e nas barras de ferramentas. Fornecemos esses nomes legíveis quando " +"criamos as ações." -#: ../../source/gallery.txt:75 -msgid ":class:`Gtk.MessageDialog`" +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." msgstr "" +"Finalmente, você obtém o widget raiz com :meth:`Gtk.UIManager.get_widget` e " +"adiciona o widget a um contêiner como :class:`Gtk.Box`." -#: ../../source/gallery.txt:76 -msgid ":class:`Gtk.ModelButton`" -msgstr "" +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "Editor de Texto Multilinha" -#: ../../source/gallery.txt:77 -msgid ":class:`Gtk.Notebook`" +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." msgstr "" +"O widget :class:`Gtk.TextView` pode ser usado para exibir e editar grandes " +"quantidades de texto formatado. Como o :class:`Gtk.TreeView`, ele possui um " +"design de modelo/visualização. Neste caso, o :class:`Gtk.TextBuffer` é o " +"modelo que representa o texto que está sendo editado. Isto permite que dois " +"ou mais widgets :class:`Gtk.TextView` compartilhem o mesmo :class:`Gtk." +"TextBuffer`, e permite que os buffers de texto sejam exibidos de forma " +"ligeiramente diferente. Ou você pode manter vários buffers de texto e optar " +"por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." +"TextView`." -#: ../../source/gallery.txt:78 -msgid ":class:`Gtk.OffscreenWindow`" -msgstr "" +#: ../../source/textview.txt:13 ../../source/treeview.txt:141 +msgid "The View" +msgstr "A visão" -#: ../../source/gallery.txt:79 -msgid ":class:`Gtk.Overlay`" +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." msgstr "" +"O :class:`Gtk.TextView` é o frontend com o qual o usuário pode adicionar, " +"editar e excluir dados textuais. Eles são comumente usados para editar " +"várias linhas de texto. Ao criar um :class:`Gtk.TextView` ele contém seu " +"próprio padrão :class:`Gtk.TextBuffer`, que você pode acessar através do " +"método :meth:`Gtk.TextView.get_buffer`." -#: ../../source/gallery.txt:80 -msgid ":class:`Gtk.Paned`" +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." msgstr "" +"Por padrão, o texto pode ser adicionado, editado e removido da :class:`Gtk." +"TextView`. Você pode desabilitar isso chamando :meth:`Gtk.TextView." +"set_editable`. Se o texto não for editável, você geralmente deseja ocultar o " +"cursor de texto com :meth:`Gtk.TextView.set_cursor_visible` também. Em " +"alguns casos, pode ser útil definir a justificação do texto com :meth:`Gtk." +"TextView.set_justification`. O texto pode ser exibido na borda da esquerda, " +"(:attr:`Gtk.Justification.LEFT`), na borda da direita (:attr:`Gtk." +"Justification.RIGHT`), centralizado (:attr:`Gtk.Justification.CENTER`) ou " +"distribuído em toda a largura (:attr:`Gtk.Justification.FILL`)." -#: ../../source/gallery.txt:81 -msgid ":class:`Gtk.PlacesSidebar`" +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." msgstr "" +"Outra configuração padrão do widget :class:`Gtk.TextView` é que linhas " +"longas de texto continuarão horizontalmente até que uma quebra seja " +"inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " +"chame :meth:`Gtk.TextView.set_wrap_mode`." -#: ../../source/gallery.txt:82 -msgid ":class:`Gtk.Plug`" -msgstr "" +#: ../../source/textview.txt:36 ../../source/treeview.txt:21 +msgid "The Model" +msgstr "O modelo" -#: ../../source/gallery.txt:83 -msgid ":class:`Gtk.Popover`" +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." msgstr "" +"O :class:`Gtk.TextBuffer` é o núcleo do widget :class:`Gtk.TextView` e é " +"usado para armazenar qualquer texto que esteja sendo exibido na :class:`Gtk." +"TextView`. Definir e recuperar o conteúdo é possível com :meth:`Gtk." +"TextBuffer.set_text` e :meth:`Gtk.TextBuffer.get_text`. No entanto, a maior " +"parte da manipulação de texto é realizada com *iteradores*, representados " +"por um :class:`Gtk.TextIter`. Um iterador representa uma posição entre dois " +"caracteres no buffer de texto. Iteradores não são válidos indefinidamente; " +"sempre que o buffer é modificado de uma maneira que afeta o conteúdo do " +"buffer, todos os iteradores pendentes se tornam inválidos." -#: ../../source/gallery.txt:84 -msgid ":class:`Gtk.PopoverMenu`" +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." msgstr "" +"Por causa disso, os iteradores não podem ser usados para preservar posições " +"nas modificações do buffer. Para preservar uma posição, use :class:`Gtk." +"TextMark`. Um buffer de texto contém duas marcas internas; uma marca " +"“insert” (que é a posição do cursor) e a marca “selection_bound”. Ambos " +"podem ser recuperados usando :meth:`Gtk.TextBuffer.get_insert` e :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectivamente. Por padrão, a localização " +"de um :class:`Gtk.TextMark` não é mostrada. Isso pode ser alterado chamando :" +"meth:`Gtk.TextMark.set_visible`." -#: ../../source/gallery.txt:85 -msgid ":class:`Gtk.ProgressBar`" +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." msgstr "" +"Existem muitos métodos para recuperar um :class:`Gtk.TextIter`. Por " +"exemplo, :meth:`Gtk.TextBuffer.get_start_iter` retorna um iterador apontando " +"para a primeira posição no buffer de texto, enquanto :meth:`Gtk.TextBuffer." +"get_end_iter` retorna um iterador apontando após o último caractere válido. " +"A recuperação dos limites do texto selecionado pode ser obtida chamando :" +"meth:`Gtk.TextBuffer.get_selection_bounds`." -#: ../../source/gallery.txt:86 -msgid ":class:`Gtk.RadioButton`" +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." msgstr "" +"Para inserir texto em uma posição específica use :meth:`Gtk.TextBuffer." +"insert`. Outro método útil é :meth:`Gtk.TextBuffer.insert_at_cursor` que " +"insere texto onde quer que o cursor esteja posicionado no momento. Para " +"remover partes do buffer de texto, use :meth:`Gtk.TextBuffer.delete`." -#: ../../source/gallery.txt:87 -msgid ":class:`Gtk.RadioMenuItem`" +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." msgstr "" +"Além disso, :class:`Gtk.TextIter` pode ser usado para localizar " +"correspondências textuais no buffer usando :meth:`Gtk.TextIter." +"forward_search` e :meth:`Gtk.TextIter.backward_search`. Os iters inicial e " +"final são usados como ponto de partida da pesquisa e avançam/retrocedem " +"dependendo dos requisitos." -#: ../../source/gallery.txt:88 -msgid ":class:`Gtk.RadioToolButton`" -msgstr "" +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "Tags" -#: ../../source/gallery.txt:89 -msgid ":class:`Gtk.RecentChooserDialog`" +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." msgstr "" +"O texto em um buffer pode ser marcado com tags. Uma tag é um atributo que " +"pode ser aplicado a um intervalo de texto. Por exemplo, uma tag pode ser " +"chamada de “negrito” e tornar o texto dentro da tag em negrito. No entanto, " +"o conceito de tag é mais geral do que isso; as tags não precisam afetar a " +"aparência. Eles podem afetar o comportamento de pressionamentos de mouse e " +"de tecla, “bloquear” um intervalo de texto para que o usuário não possa " +"editá-lo ou inúmeras outras coisas. Uma tag é representada por um objeto :" +"class:`Gtk.TextTag`. Um :class:`Gtk.TextTag` pode ser aplicado a qualquer " +"número de intervalos de texto em qualquer número de buffers." -#: ../../source/gallery.txt:90 -msgid ":class:`Gtk.RecentChooserMenu`" +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." msgstr "" +"Cada tag é armazenada em :class:`Gtk.TextTagTable`. Uma tabela de tags " +"define um conjunto de tags que podem ser usadas juntas. Cada buffer tem uma " +"tabela de tags associada a ele; somente tags dessa tabela de tags podem ser " +"usadas com o buffer. No entanto, uma única tabela de tags pode ser " +"compartilhada entre vários buffers." -#: ../../source/gallery.txt:91 -msgid ":class:`Gtk.RecentChooserWidget`" +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" msgstr "" +"Para especificar que algum texto no buffer deve ter uma formatação " +"específica, você deve definir uma tag para manter as informações de " +"formatação e, em seguida, aplicar essa tag à região do texto usando :meth:" +"`Gtk.TextBuffer.create_tag` e :meth:`Gtk.TextBuffer.apply_tag`::" -#: ../../source/gallery.txt:92 -msgid ":class:`Gtk.Revealer`" -msgstr "" +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "A seguir estão alguns dos estilos comuns aplicados ao texto:" -#: ../../source/gallery.txt:93 -msgid ":class:`Gtk.Scale`" -msgstr "" +# nome da propriedade trocado +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "Cor de fundo (propriedade “background”)" -#: ../../source/gallery.txt:94 -msgid ":class:`Gtk.ScaleButton`" -msgstr "" +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "Cor de primeiro plano (propriedade “foreground”)" -#: ../../source/gallery.txt:95 -msgid ":class:`Gtk.Scrollbar`" -msgstr "" +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "Sublinhado (propriedade “underline”)" -#: ../../source/gallery.txt:96 -msgid ":class:`Gtk.ScrolledWindow`" -msgstr "" +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "Negrito (propriedade “weight”)" -#: ../../source/gallery.txt:97 -msgid ":class:`Gtk.SearchBar`" -msgstr "" +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "Itálico (propriedade “style”)" -#: ../../source/gallery.txt:98 -msgid ":class:`Gtk.SearchEntry`" -msgstr "" +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "Tachado (propriedade “strikethrough”)" -#: ../../source/gallery.txt:99 -msgid ":class:`Gtk.Separator`" -msgstr "" +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "Justificação (propriedade de “justification”)" -#: ../../source/gallery.txt:100 -msgid ":class:`Gtk.SeparatorMenuItem`" -msgstr "" +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "Tamanho (propriedades “size” e “size-points”)" -#: ../../source/gallery.txt:101 -msgid ":class:`Gtk.SeparatorToolItem`" -msgstr "" +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "Quebra automática de texto (propriedade “wrap-mode”)" -#: ../../source/gallery.txt:102 -msgid ":class:`Gtk.ShortcutLabel`" +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." msgstr "" +"Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." +"TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " +"chamando :meth:`Gtk.TextBuffer.remove_all_tags`." -#: ../../source/gallery.txt:103 -msgid ":class:`Gtk.ShortcutsGroup`" -msgstr "" +#: ../../source/label.txt:2 +msgid "Label" +msgstr "Label" -#: ../../source/gallery.txt:104 -msgid ":class:`Gtk.ShortcutsSection`" +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." msgstr "" +"Os rótulos (labels) são o principal método de colocar texto não editável nas " +"janelas, por exemplo, para colocar um título ao lado de um widget :class:" +"`Gtk.Entry`. Você pode especificar o texto no construtor, ou mais tarde com " +"os métodos :meth:`Gtk.Label.set_text` ou :meth:`Gtk.Label.set_markup`." -#: ../../source/gallery.txt:105 -msgid ":class:`Gtk.ShortcutsShortcut`" +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." msgstr "" +"A largura da etiqueta será ajustada automaticamente. Você pode produzir " +"rótulos de várias linhas colocando as quebras de linha (“\\\\n”) na " +"sequência de rótulos." -#: ../../source/gallery.txt:106 -msgid ":class:`Gtk.ShortcutsWindow`" +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." msgstr "" +"Os rótulos podem ser feitos selecionáveis com :meth:`Gtk.Label." +"set_selectable`. Rótulos selecionáveis permitem que o usuário copie o " +"conteúdo do rótulo para a área de transferência. Somente os rótulos que " +"contêm informações úteis para copiar, como mensagens de erro, devem ser " +"selecionáveis." -#: ../../source/gallery.txt:107 -msgid ":class:`Gtk.Socket`" +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." msgstr "" +"O texto do rótulo pode ser justificado usando o método :meth:`Gtk.Label." +"set_justify`. O widget também é capaz de quebra automática de palavras, que " +"pode ser ativado com :meth:`Gtk.Label.set_line_wrap`." -#: ../../source/gallery.txt:108 -msgid ":class:`Gtk.SpinButton`" +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." msgstr "" +":class:`Gtk.Label` possui suporte algumas a formatações simples, por " +"exemplo, permitindo que você torne algum texto em negrito, colorido ou " +"maior. Você pode fazer isso fornecendo uma string para :meth:`Gtk.Label." +"set_markup`, usando a sintaxe de marcação do Pango [#pango]_. Por exemplo, " +"``texto em negrito e texto tachado``. Além disso, :class:`Gtk." +"Label` possui suporte a hiperlinks clicáveis. A marcação para links é " +"emprestada do HTML, usando os atributos de a com href e title. O GTK+ " +"renderiza links semelhantes ao modo como aparecem nos navegadores da web, " +"com texto colorido e sublinhado. O atributo de título é exibido como uma " +"dica de ferramenta no link." -#: ../../source/gallery.txt:109 -msgid ":class:`Gtk.Spinner`" +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." msgstr "" +"Os rótulos podem conter *mnemônicos*. Os mnemônicos são caracteres " +"sublinhados no rótulo, usados para navegação pelo teclado. Os mnemônicos são " +"criados fornecendo uma string com um sublinhado antes do caractere " +"mnemônico, como “_File”, para as funções :meth:`Gtk.Label.new_with_mnemonic` " +"ou :meth:`Gtk.Label.set_text_with_mnemonic`. Os mnemônicos ativam " +"automaticamente qualquer widget ativável em que o rótulo esteja dentro, como " +"um :class:`Gtk.Button`; se o rótulo não estiver dentro do widget de destino " +"do mnemônico, você deve informar o rótulo sobre o destino usando :meth:`Gtk." +"Label.set_mnemonic_widget`." -#: ../../source/gallery.txt:110 -msgid ":class:`Gtk.Stack`" +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" msgstr "" +"Sintaxe de marcação do Pango, https://developer.gnome.org/pango/stable/pango-" +"Markup.html" -#: ../../source/gallery.txt:111 -msgid ":class:`Gtk.StackSidebar`" -msgstr "" +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "Widgets de árvore e lista" -#: ../../source/gallery.txt:112 -msgid ":class:`Gtk.StackSwitcher`" +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" msgstr "" +"A :class:`Gtk.TreeView` e seus widgets associados são uma maneira " +"extremamente poderosa de exibir dados. Eles são usados em conjunto com um :" +"class:`Gtk.ListStore` ou :class:`Gtk.TreeStore` e fornecem uma maneira de " +"exibir e manipular dados de várias maneiras, incluindo:" -#: ../../source/gallery.txt:113 -msgid ":class:`Gtk.Statusbar`" +#: ../../source/treeview.txt:9 +msgid "Automatic updates when data is added, removed or edited" msgstr "" +"Atualizações automáticas quando os dados são adicionados, removidos ou " +"editados" -#: ../../source/gallery.txt:114 -msgid ":class:`Gtk.Switch`" -msgstr "" +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "Suporte a arrastar e soltar" -#: ../../source/gallery.txt:115 -msgid ":class:`Gtk.Table`" -msgstr "" +#: ../../source/treeview.txt:11 +msgid "Sorting data" +msgstr "Ordenação de dados" -#: ../../source/gallery.txt:116 -msgid ":class:`Gtk.TearoffMenuItem`" +#: ../../source/treeview.txt:12 +msgid "Embedding widgets such as check boxes, progress bars, etc." msgstr "" +"Incorporação de widgets, como caixas de seleção, barras de progresso, etc." -#: ../../source/gallery.txt:117 -msgid ":class:`Gtk.TextView`" -msgstr "" +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "Colunas reordenáveis e redimensionáveis" -#: ../../source/gallery.txt:118 -msgid ":class:`Gtk.ToggleButton`" -msgstr "" +#: ../../source/treeview.txt:14 +msgid "Filtering data" +msgstr "Filtragem de dados" -#: ../../source/gallery.txt:119 -msgid ":class:`Gtk.ToggleToolButton`" +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." msgstr "" +"Com o poder e a flexibilidade de um :class:`Gtk.TreeView` vem a " +"complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " +"capazes de utilizá-lo corretamente devido ao número de métodos necessários." -#: ../../source/gallery.txt:120 -msgid ":class:`Gtk.ToolButton`" +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." msgstr "" +"Cada :class:`Gtk.TreeView` possui um :class:`Gtk.TreeModel`, o qual contém " +"os dados exibidos pelo TreeView. Cada :class:`Gtk.TreeModel` pode ser usado " +"por mais de um :class:`Gtk.TreeView`. Por exemplo, isso permite que os " +"mesmos dados subjacentes sejam exibidos e editados de duas maneiras " +"diferentes ao mesmo tempo. Ou os 2 modos de exibição podem exibir colunas " +"diferentes dos mesmos dados do modelo, da mesma forma que duas consultas SQL " +"(ou “views”) podem mostrar campos diferentes da mesma tabela de banco de " +"dados." -#: ../../source/gallery.txt:121 -msgid ":class:`Gtk.ToolItem`" +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." msgstr "" +"Embora você possa teoricamente implementar seu próprio Model, você " +"normalmente usará as classes de modelo :class:`Gtk.ListStore` ou :class:`Gtk." +"TreeStore`. :class:`Gtk.ListStore` contém linhas simples de dados, e cada " +"linha não tem filhos, enquanto :class:`Gtk.TreeStore` contém linhas de " +"dados, e cada linha pode ter linhas filhas." -#: ../../source/gallery.txt:122 -msgid ":class:`Gtk.ToolItemGroup`" +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." msgstr "" +"Ao construir um modelo, você deve especificar os tipos de dados para cada " +"coluna que o modelo contém." -#: ../../source/gallery.txt:123 -msgid ":class:`Gtk.ToolPalette`" +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." msgstr "" +"Isso cria um armazenamento de lista com três colunas, duas colunas de string " +"e uma coluna flutuante." -#: ../../source/gallery.txt:124 -msgid ":class:`Gtk.Toolbar`" +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." msgstr "" +"A adição de dados ao modelo é feita usando :meth:`Gtk.ListStore.append` ou :" +"meth:`Gtk.TreeStore.append`, dependendo de qual tipo de modelo foi criado." -#: ../../source/gallery.txt:125 -msgid ":class:`Gtk.TreeView`" +#: ../../source/treeview.txt:54 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." msgstr "" +"Ambos os métodos retornam uma instância :class:`Gtk.TreeIter`, que aponta " +"para a localização da linha recém-inserida. Você pode recuperar um :class:" +"`Gtk.TreeIter` chamando :meth:`Gtk.TreeModel.get_iter`." -#: ../../source/gallery.txt:126 -msgid ":class:`Gtk.VBox`" +#: ../../source/treeview.txt:58 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." msgstr "" +"Depois que os dados foram inseridos, você pode recuperar ou modificar dados " +"usando o iterador de árvore e o índice de coluna." -#: ../../source/gallery.txt:127 -msgid ":class:`Gtk.VButtonBox`" +#: ../../source/treeview.txt:66 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." msgstr "" +"Assim como no objeto interno :class:`list` do Python, você pode usar :func:" +"`len` para obter o número de linhas e usar fatias para recuperar ou definir " +"valores." -#: ../../source/gallery.txt:128 -msgid ":class:`Gtk.VPaned`" +#: ../../source/treeview.txt:80 +msgid "Iterating over all rows of a tree model is very simple as well." msgstr "" +"Iterar sobre todas as linhas de um modelo de árvore é muito simples também." -#: ../../source/gallery.txt:129 -msgid ":class:`Gtk.VScale`" +#: ../../source/treeview.txt:88 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows and its children, use the " +"``print_tree_store`` function." msgstr "" +"Tenha em mente que, se você usar :class:`Gtk.TreeStore`, o código acima irá " +"apenas iterar sobre as linhas do nível superior, mas não os filhos dos nós. " +"Para iterar sobre todas as linhas e seus filhos, use a função " +"``print_tree_store``." -#: ../../source/gallery.txt:130 -msgid ":class:`Gtk.VScrollbar`" +#: ../../source/treeview.txt:106 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." msgstr "" +"Além de acessar valores armazenados em um :class:`Gtk.TreeModel` com o " +"método list-like mencionado acima, também é possível usar as instâncias :" +"class:`Gtk.TreeIter` ou :class:`Gtk.TreePath`. Ambos fazem referência a uma " +"linha específica em um modelo de árvore. Pode-se converter um caminho para " +"um iterador chamando :meth:`Gtk.TreeModel.get_iter`. Como :class:`Gtk." +"ListStore` contém apenas um nível, ou seja, nós não têm nenhum nó filho, um " +"caminho é essencialmente o índice da linha que você deseja acessar." -#: ../../source/gallery.txt:131 -msgid ":class:`Gtk.VSeparator`" +#: ../../source/treeview.txt:123 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." msgstr "" +"No caso de :class:`Gtk.TreeStore`, um caminho é uma lista de índices ou uma " +"string. O formulário de string é uma lista de números separados por dois " +"pontos. Cada número refere-se ao deslocamento nesse nível. Assim, o caminho " +"“0” refere-se ao nó raiz e o caminho “2:4” refere-se ao quinto filho do " +"terceiro nó." -#: ../../source/gallery.txt:132 -msgid ":class:`Gtk.Viewport`" +#: ../../source/treeview.txt:136 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." msgstr "" +"Instâncias de :class:`Gtk.TreePath` podem ser acessadas como listas, " +"``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " +"para, e ``treepath[i]`` retorna o índice do filho no nível *i*." -#: ../../source/gallery.txt:133 -msgid ":class:`Gtk.VolumeButton`" +#: ../../source/treeview.txt:142 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." msgstr "" +"Embora existam vários modelos diferentes para escolher, há apenas um widget " +"de visualização para lidar. Funciona com a lista ou com o armazenamento em " +"árvore. Configurar um :class:`Gtk.TreeView` não é uma tarefa difícil. Ele " +"precisa de um :class:`Gtk.TreeModel` para saber de onde recuperar seus " +"dados, seja passando-o para o construtor :class:`Gtk.TreeView`, ou chamando :" +"meth:`Gtk.TreeView.set_model`." -#: ../../source/gallery.txt:134 -msgid ":class:`Gtk.Window`" +#: ../../source/treeview.txt:153 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." msgstr "" +"Uma vez que o widget :class:`Gtk.TreeView` possua um modelo, ele precisará " +"saber como exibir o modelo. Ele faz isso com colunas e renderizadores de " +"célula." -#: ../../source/iconview.txt:2 -msgid "IconView" +#: ../../source/treeview.txt:156 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." msgstr "" +"Os renderizadores de célula são usados para desenhar os dados no modelo de " +"árvore de uma maneira. Existem vários renderizadores de célula que vêm com o " +"GTK+, por exemplo :class:`Gtk.CellRendererText`, :class:`Gtk." +"CellRendererPixbuf` e :class:`Gtk.CellRendererToggle`. Além disso, é " +"relativamente fácil escrever um renderizador personalizado por conta própria." -#: ../../source/iconview.txt:3 +#: ../../source/treeview.txt:162 msgid "" -"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " -"grid view. It supports features such as drag and drop, multiple selections " -"and item reordering." +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." msgstr "" -"A :class:`Gtk.IconView` é um widget que exibe uma coleção de ícones em uma " -"visualização de grade. Ele suporta recursos como arrastar e soltar, seleções " -"múltiplas e reordenação de itens." +"A :class:`Gtk.TreeViewColumn` é o objeto que :class:`Gtk.TreeView` usa para " +"organizar as colunas verticais na visualização em árvore. Ele precisa saber " +"o nome da coluna para rotular o usuário, que tipo de renderizador de célula " +"deve ser usado e qual parte dos dados deve ser recuperada do modelo para uma " +"determinada linha." -#: ../../source/iconview.txt:5 +#: ../../source/treeview.txt:173 msgid "" -"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." -"ListStore` for its model. Instead of using :ref:`cell renderers " -"`, :class:`Gtk.IconView` requires that one of the columns in " -"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." msgstr "" -"Similarmente a :class:`Gtk.TreeView`, :class:`Gtk.IconView` usa um :class:" -"`Gtk.ListStore` para seu modelo. Em vez de usar :ref:`renderizadores de " -"célula `, :class:`Gtk.IconView` requer que uma das colunas em " -"seu :class:`Gtk.ListStore` contenha objetos :class:`GdkPixbuf.Pixbuf`." +"Para renderizar mais de uma coluna de modelo em uma coluna de visão, você " +"precisa criar uma instância :class:`Gtk.TreeViewColumn` e usar :meth:`Gtk." +"TreeViewColumn.pack_start` para adicionar as colunas de modelo a ela." -#: ../../source/iconview.txt:7 +#: ../../source/treeview.txt:193 +msgid "The Selection" +msgstr "A seleção" + +#: ../../source/treeview.txt:194 msgid "" -":class:`Gtk.IconView` supports numerous selection modes to allow for either " -"selecting multiple icons at a time, restricting selections to just one item " -"or disallowing selecting items completely. To specify a selection mode, the :" -"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" -"`Gtk.SelectionMode` selection modes." +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." msgstr "" -":class:`Gtk.IconView` suporta vários modos de seleção para permitir a " -"seleção de vários ícones por vez, restringindo seleções para apenas um item " -"ou desaprovando a seleção de itens completamente. Para especificar um modo " -"de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " -"dos modos de seleção :class:`Gtk.SelectionMode`." +"A maioria dos aplicativos precisará não apenas lidar com a exibição de " +"dados, mas também receber eventos de entrada dos usuários. Para fazer isso, " +"basta obter uma referência a um objeto de seleção e conectar-se ao sinal " +"“changed”." -#: ../../source/index.txt:7 -msgid "The Python GTK+ 3 Tutorial" -msgstr "O tutorial do Python GTK+ 3" +#: ../../source/treeview.txt:203 +msgid "Then to retrieve data for the row selected:" +msgstr "Em seguida, para recuperar dados para a linha selecionada:" -#: ../../source/index.txt:0 -msgid "Release" +#: ../../source/treeview.txt:212 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." msgstr "" +"Você pode controlar quais seleções são permitidas chamando :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` não funciona " +"se o modo de seleção estiver definido como :attr:`Gtk.SelectionMode." +"MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows`." -#: ../../source/index.txt:9 -msgid "|version|" -msgstr "" +#: ../../source/treeview.txt:219 +msgid "Sorting" +msgstr "Classificação" -#: ../../source/index.txt:0 -msgid "Date" +#: ../../source/treeview.txt:220 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." msgstr "" +"A classificação é um recurso importante para as visualizações em árvore e é " +"suportada pelos modelos de árvore padrão (:class:`Gtk.TreeStore` e :class:" +"`Gtk.ListStore`), que implementam a interface :class:`Gtk.TreeSortable`." -#: ../../source/index.txt:10 -msgid "|today|" -msgstr "" +#: ../../source/treeview.txt:223 +msgid "Sorting by clicking on columns" +msgstr "Classificando clicando em colunas" -#: ../../source/index.txt:0 -msgid "Copyright" +#: ../../source/treeview.txt:224 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." msgstr "" +"Uma coluna de um :class:`Gtk.TreeView` pode ser facilmente ordenada com uma " +"chamada para :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Depois, a coluna " +"pode ser ordenada clicando no cabeçalho." -#: ../../source/index.txt:11 +#: ../../source/treeview.txt:227 msgid "" -"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" -"Cover Texts, and no Back-Cover Texts" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." msgstr "" -"GNU Free Documentation License 1.3 sem Seções Invariantes, Textos de Capa " -"Frontal e Textos de Contra-capa" +"Primeiro precisamos de um simples :class:`Gtk.TreeView` e um :class:`Gtk." +"ListStore` como modelo." -#: ../../source/index.txt:13 +#: ../../source/treeview.txt:246 msgid "" -"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." msgstr "" -"Este tutorial fornece uma introdução à criação de aplicativos GTK + 3 no " -"Python." +"O próximo passo é ativar a classificação. Note que o *column_id* (``0`` no " +"exemplo) refere-se à coluna do modelo e **não** à coluna do TreeView." -#: ../../source/index.txt:15 +#: ../../source/treeview.txt:253 +msgid "Setting a custom sort function" +msgstr "Definindo uma função de classificação personalizada" + +#: ../../source/treeview.txt:254 msgid "" -"Prior to working through this tutorial, it is recommended that you have a " -"reasonable grasp of the Python programming language. GUI programming " -"introduces new problems compared to interacting with the standard output " -"(console / terminal). It is necessary for you to know how to create and run " -"Python files, understand basic interpreter errors, and work with strings, " -"integers, floats and Boolean values. For the more advanced widgets in this " -"tutorial, good knowledge of lists and tuples will be needed." +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" msgstr "" -"Antes de trabalhar com este tutorial, é recomendável que você tenha uma " -"compreensão razoável da linguagem de programação Python. A programação GUI " -"introduz novos problemas em comparação com a interação com a saída padrão " -"(console / terminal). É necessário que você saiba como criar e executar " -"arquivos Python, entender os erros básicos do interpretador e trabalhar com " -"strings, inteiros, floats e valores booleanos. Para os widgets mais " -"avançados neste tutorial, serão necessários bons conhecimentos de listas e " -"tuplas." +"Também é possível definir uma função de comparação personalizada para " +"alterar o comportamento de classificação. Como exemplo, criaremos uma função " +"de comparação que classifica maiúsculas e minúsculas. No exemplo acima, a " +"lista classificada parecia com::" -#: ../../source/index.txt:25 -msgid "" -"Although this tutorial describes the most important classes and methods " -"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " -"to the `GTK+ 3 Reference Manual `_ " -"for a detailed description of the API. Also there's a `Python-specific " -"reference `_ available." +#: ../../source/treeview.txt:267 +msgid "The case-sensitive sorted list will look like::" msgstr "" -"Embora este tutorial descreva as classes e métodos mais importantes dentro " -"do GTK + 3, ele não deve servir como uma referência da API. Por favor, " -"consulte o `Manual de Referência do GTK+ 3 `_ para uma descrição detalhada da API. Também há uma referência " -"específica ao Python `_ disponível." - -#: ../../source/index.txt:31 -msgid "Contents:" -msgstr "Conteúdo:" - -#: ../../source/index.txt:59 -msgid "Deprecated" -msgstr "Descontinuada" - -#: ../../source/index.txt:67 -msgid "Indices and tables" -msgstr "Índices e tabelas" +"A lista classificada com distinção entre maiúsculas e minúsculas será " +"semelhante a::" -#: ../../source/index.txt:69 -msgid ":ref:`search`" +# Alterar o original para corrigir a explicação +#: ../../source/treeview.txt:278 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." msgstr "" +"Em primeiro lugar, é necessária uma função de comparação. Esta função obtém " +"duas linhas e tem que retornar um inteiro negativo se o primeiro deve vir " +"antes do segundo, zero se eles forem iguais e um inteiro positivo se o " +"segundo vier antes do primeiro." -#: ../../source/install.txt:4 -msgid "Installation" -msgstr "Instalação" - -#: ../../source/install.txt:5 +#: ../../source/treeview.txt:294 msgid "" -"The first step before we start with actual coding consists of setting up " -"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " -"developers to access GObject-based libraries such as GTK+ within Python. It " -"exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in " -"your application, use `PyGTK`_, instead." +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." msgstr "" -"O primeiro passo antes de começarmos com a codificação de fato consiste em " -"configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " -"que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " -"como o GTK+, dentro do Python. Ele suporta exclusivamente o GTK+ versão 3 ou " -"posterior. Se você quiser usar o GTK+ 2 em sua aplicação, use `PyGTK`_." +"Então a função sort deve ser definida por :meth:`Gtk.TreeSortable." +"set_sort_func`." -#: ../../source/install.txt:13 -msgid "Dependencies" -msgstr "Dependências" +#: ../../source/treeview.txt:301 +msgid "Filtering" +msgstr "Filtragem" -#: ../../source/install.txt:15 -msgid "GTK+3" +#: ../../source/treeview.txt:302 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." msgstr "" +"Ao contrário da classificação, a filtragem não é tratada pelos dois modelos " +"que vimos anteriormente, mas pela classe :class:`Gtk.TreeModelFilter`. Esta " +"classe, como :class:`Gtk.TreeStore` e :class:`Gtk.ListStore`, é uma :class:" +"`Gtk.TreeModel`. Ele age como uma camada entre o modelo “real” (a :class:" +"`Gtk.TreeStore` ou a :class:`Gtk.ListStore`), ocultando alguns elementos " +"para a view. Na prática, ele fornece o :class:`Gtk.TreeView` com um " +"subconjunto do modelo subjacente. Instâncias de :class:`Gtk.TreeModelFilter` " +"podem ser empilhadas umas sobre as outras, para usar múltiplos filtros no " +"mesmo modelo (da mesma forma que você usaria cláusulas “AND” em uma " +"requisição SQL). Eles também podem ser encadeados com instâncias :class:`Gtk." +"TreeModelSort`." -#: ../../source/install.txt:17 -msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" -msgstr "Python 2 (2.6 ou posterior) ou Python 3 (3.1 ou posterior)" - -#: ../../source/install.txt:19 -msgid "gobject-introspection" +#: ../../source/treeview.txt:304 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." msgstr "" +"Você pode criar uma nova instância de :class:`Gtk.TreeModelFilter` e dar a " +"ela um modelo para filtrar, mas a maneira mais fácil é gerá-lo diretamente " +"do modelo filtrado, usando o método :meth:`Gtk.TreeModel.filter_new` método." -#: ../../source/install.txt:22 -msgid "Prebuilt Packages" -msgstr "Pacotes pré-construídos" +#: ../../source/treeview.txt:310 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"needs a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" +"Da mesma forma que funciona a função de classificação, o :class:`Gtk." +"TreeModelFilter` precisa de uma função “visibility”, que, dada uma linha do " +"modelo subjacente, retornará um booleano indicando se essa linha deve ser " +"filtrada ou não. É definido por :meth:`Gtk.TreeModelFilter.set_visible_func`:" -#: ../../source/install.txt:23 +#: ../../source/treeview.txt:316 msgid "" -"Recent versions of PyGObject and its dependencies are packaged by nearly all " -"major Linux distributions. So, if you use Linux, you can probably get " -"started by installing the package from the official repository for your " -"distribution." +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." msgstr "" -"Versões recentes do PyGObject e suas dependências são empacotadas por quase " -"todas as principais distribuições do Linux. Então, se você usa o Linux, você " -"provavelmente pode começar instalando o pacote a partir do repositório " -"oficial da sua distribuição." +"Vejamos um exemplo completo que usa a pilha inteira :class:`Gtk.ListStore` " +"– :class:`Gtk.TreeModelFilter` – :class:`Gtk.TreeModelFilter` — :class:`Gtk." +"TreeView`." -#: ../../source/install.txt:29 -msgid "Installing From Source" -msgstr "Instalando a partir da origem" +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "Diálogos" -#: ../../source/install.txt:30 +#: ../../source/dialogs.txt:4 msgid "" -"The easiest way to install PyGObject from source is using `JHBuild`_. It is " -"designed to easily build source packages and discover what dependencies need " -"to be build and in what order. To setup JHBuild, please follow the `JHBuild " -"manual`_." +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." msgstr "" -"A maneira mais fácil de instalar o PyGObject a partir do código-fonte é " -"usando o `JHBuild`_. Ele é projetado para criar facilmente pacotes de código-" -"fonte e descobrir quais dependências precisam ser construídas e em que " -"ordem. Para configurar o JHBuild, por favor, siga o `manual do JHBuild`_." +"As janelas de caixa de diálogo são muito semelhantes às janelas padrão e são " +"usadas para fornecer ou recuperar informações do usuário. Eles são " +"frequentemente usados para fornecer uma janela de preferências, por exemplo. " +"A principal diferença que uma caixa de diálogo tem é alguns widgets pré-" +"empacotados que organizam a caixa de diálogo automaticamente. A partir daí, " +"podemos simplesmente adicionar rótulos, botões, botões de seleção, etc. " +"Outra grande diferença é o tratamento de respostas para controlar como o " +"aplicativo deve se comportar após a interação com a caixa de diálogo." -#: ../../source/install.txt:34 +#: ../../source/dialogs.txt:12 msgid "" -"Once you have installed JHBuild successfully, download the latest " -"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " -"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." msgstr "" -"Depois de ter instalado o JHBuild com sucesso, baixe a configuração mais " -"recente de [#]_. Copie os arquivos com o sufixo `.modules` para o diretório " -"de módulos do JHBuild e o arquivo `sample-tarball.jhbuildrc` para `~/." -"jhbuildrc`." +"Existem várias classes de diálogo derivadas que você pode achar útil. :class:" +"`Gtk.MessageDialog` é usado para notificações mais simples. Porém, em outras " +"ocasiões, você pode precisar derivar sua própria classe de diálogo para " +"fornecer uma funcionalidade mais complexa." + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "Dialogos personalizados" -#: ../../source/install.txt:38 +#: ../../source/dialogs.txt:20 msgid "" -"If you have not done it before, verify that your build environment is setup " -"correctly by running::" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." msgstr "" -"Se você não tiver feito isso antes, verifique se o seu ambiente de " -"compilação está configurado corretamente executando:" +"Para empacotar widgets em um diálogo personalizado, você deve empacotá-los " +"no :class:`Gtk.Box`, disponível via :meth:`Gtk.Dialog.get_content_area`. " +"Para adicionar apenas um :class:`Gtk.Button` ao final do diálogo, você " +"poderia usar o método :meth:`Gtk.Dialog.add_button`." -#: ../../source/install.txt:43 +#: ../../source/dialogs.txt:25 msgid "" -"It will print any applications and libraries that are currently missing on " -"your system but required for building. You should install those using your " -"distribution's package repository. A list of `package names `_ for different " -"distributions is maintained on the GNOME wiki. Run the command above again " -"to ensure the required tools are present." +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." msgstr "" -"Ele imprimirá todos os aplicativos e bibliotecas que estiverem ausentes no " -"seu sistema, mas necessários para construção. Você deve instalá-los usando o " -"repositório de pacotes da sua distribuição. Uma lista de `nomes de pacotes " -"` _ para " -"diferentes distribuições é mantida no wiki GNOME. Execute o comando acima " -"novamente para garantir que as ferramentas necessárias estejam presentes." +"Um diálogo “modal” (isto é, um que congela o resto do aplicativo da entrada " +"do usuário), pode ser criado chamando :class:`Gtk.Dialog.set_modal` no " +"diálogo ou setando o argumento ``flags`` do o construtor :class:`Gtk.Dialog` " +"para incluir o sinalizador :attr:`Gtk.DialogFlags.MODAL`." -#: ../../source/install.txt:49 +#: ../../source/dialogs.txt:30 msgid "" -"Executing the following command will build PyGObject and all its " -"dependencies::" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." msgstr "" -"Executando o seguinte comando irá construir o PyGObject e todas as suas " -"dependências::" +"Clicar em um botão irá emitir um sinal chamado “response”. Se você quiser " +"bloquear a espera de um diálogo para retornar antes do retorno do fluxo de " +"controle para o seu código, você pode chamar :meth:`Gtk.Dialog.run`. Este " +"método retorna um int que pode ser um valor de :class:`Gtk.ResponseType` ou " +"pode ser o valor de resposta personalizado que você especificou no " +"construtor :class:`Gtk.Dialog` ou :meth:`Gtk.Dialog.add_button`." -#: ../../source/install.txt:53 -msgid "Finally, you might want to install GTK+ from source as well::" +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." msgstr "" -"Finalmente, você pode querer instalar o GTK+ a partir do código fonte::" +"Finalmente, existem duas maneiras de remover um diálogo. O método :meth:`Gtk." +"Widget.hide` remove a caixa de diálogo da visualização, mas mantém " +"armazenada na memória. Isso é útil para evitar a necessidade de construir a " +"caixa de diálogo novamente se precisar ser acessada posteriormente. " +"Alternativamente, o método :meth:`Gtk.Widget.destroy` pode ser usado para " +"excluir o diálogo da memória, uma vez que não é mais necessário. Deve ser " +"notado que se o diálogo precisar ser acessado depois de ter sido destruído, " +"ele precisará ser construído novamente, caso contrário a janela de diálogo " +"estará vazia." -#: ../../source/install.txt:57 -msgid "To start a shell with the same environment as used by JHBuild, run::" -msgstr "" -"Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, execute::" +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "MessageDialog" -#: ../../source/install.txt:66 -msgid "https://download.gnome.org/teams/releng/" +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." msgstr "" +":class:`Gtk.MessageDialog` é uma classe de conveniência, usada para criar " +"diálogos de mensagem simples e padrão, com uma mensagem, um ícone e botões " +"para resposta do usuário. Você pode especificar o tipo de mensagem e o texto " +"no construtor :class:`Gtk.MessageDialog`, além de especificar botões padrão." -#: ../../source/introduction.txt:4 -msgid "Getting Started" -msgstr "Começando" - -#: ../../source/introduction.txt:7 -msgid "Simple Example" -msgstr "Exemplo Simples" - -#: ../../source/introduction.txt:9 +#: ../../source/dialogs.txt:60 msgid "" -"To start with our tutorial we create the simplest program possible. This " -"program will create an empty 200 x 200 pixel window." +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." msgstr "" -"Para começar com o nosso tutorial, criamos o programa mais simples possível. " -"Este programa irá criar uma janela vazia de 200 x 200 pixels." +"Em alguns diálogos que requerem alguma explicação adicional do que " +"aconteceu, um texto secundário pode ser adicionado. Nesse caso, a mensagem " +"principal inserida ao criar a caixa de diálogo da mensagem é maior e " +"definida como texto em negrito. A mensagem secundária pode ser definida " +"chamando :meth:`Gtk.MessageDialog.format_secondary_text`." -#: ../../source/introduction.txt:17 -msgid "We will now explain each line of the example." -msgstr "Vamos agora explicar cada linha do exemplo." +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "FileChooserDialog" -#: ../../source/introduction.txt:22 +#: ../../source/dialogs.txt:76 msgid "" -"In the beginning, we have to import the Gtk module to be able to access GTK" -"+'s classes and functions. Since a user's system can have multiple versions " -"of GTK+ installed at the same, we want to make sure that when we import Gtk " -"that it refers to GTK+ 3 and not any other version of the library, which is " -"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." msgstr "" -"No começo, temos que importar o módulo Gtk para poder acessar as classes e " -"funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK" -"+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos " -"o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, " -"que é o propósito da declaração ``gi.require_version('Gtk', '3.0')``." - -#: ../../source/introduction.txt:29 -msgid "The next line creates an empty window." -msgstr "A próxima linha cria uma janela vazia." +"O :class:`Gtk.FileChooserDialog` é adequado para uso com itens de menu " +"“Arquivo/Abrir” ou “Arquivo/Salvar”. Você pode usar todos os métodos :class:" +"`Gtk.FileChooser` no diálogo do seletor de arquivos, assim como aqueles " +"para :class:`Gtk.Dialog`." -#: ../../source/introduction.txt:34 +#: ../../source/dialogs.txt:80 msgid "" -"Followed by connecting to the window's delete event to ensure that the " -"application is terminated if we click on the *x* to close the window." +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" msgstr "" -"Seguido conectando-se ao evento de exclusão da janela para garantir que o " -"aplicativo seja encerrado se clicarmos no *x* para fechar a janela." - -#: ../../source/introduction.txt:40 -msgid "In the next step we display the window." -msgstr "Na próxima etapa, exibimos a janela." +"Ao criar um :class:`Gtk.FileChooserDialog` você precisa definir o propósito " +"do diálogo:" -#: ../../source/introduction.txt:45 +#: ../../source/dialogs.txt:83 msgid "" -"Finally, we start the GTK+ processing loop which we quit when the window is " -"closed (see line 5)." +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" msgstr "" -"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando " -"a janela é fechada (veja a linha 5)." +"Para selecionar um arquivo para abertura, como para um comando Arquivo/" +"Abrir, use :attr:`Gtk.FileChooserAction.OPEN`" -#: ../../source/introduction.txt:51 +#: ../../source/dialogs.txt:85 msgid "" -"To run the program, open a terminal, change to the directory of the file, " -"and enter::" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." msgstr "" -"Para executar o programa, abra um terminal, mude para o diretório do arquivo " -"e digite::" - -#: ../../source/introduction.txt:57 -msgid "Extended Example" -msgstr "Exemplo Estendido" +"Para salvar um arquivo pela primeira vez, como para um comando Arquivo/" +"Salvar, use :attr:`Gtk.FileChooserAction.SAVE` e sugira um nome como " +"“Untitled” com :meth:`Gtk.FileChooser.set_current_name`." -#: ../../source/introduction.txt:58 +#: ../../source/dialogs.txt:88 msgid "" -"For something a little more useful, here's the PyGObject version of the " -"classic \"Hello World\" program." +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." msgstr "" -"Para algo um pouco mais útil, aqui está a versão PyGObject do programa " -"clássico \"Hello World\"." +"Para salvar um arquivo com um nome diferente, como para um comando Arquivo/" +"Salvar como, use :attr:`Gtk.FileChooserAction.SAVE` e defina o nome do " +"arquivo existente como :meth:`Gtk.FileChooser.set_filename`." -#: ../../source/introduction.txt:66 +#: ../../source/dialogs.txt:91 msgid "" -"This example differs from the simple example as we sub-class :class:`Gtk." -"Window` to define our own :class:`MyWindow` class." +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." msgstr "" -"Este exemplo difere do exemplo simples, pois subclassificamos :class:`Gtk." -"Window` para definir nossa própria classe :class:`MyWindow`." +"Para escolher uma pasta em vez de um arquivo, use :attr:`Gtk." +"FileChooserAction.SELECT_FOLDER`." -#: ../../source/introduction.txt:72 +#: ../../source/dialogs.txt:93 msgid "" -"In the class's constructor we have to call the constructor of the super " -"class. In addition, we tell it to set the value of the property `title` to " -"`Hello World`." +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" msgstr "" -"No construtor da classe, temos que chamar o construtor da superclasse. Além " -"disso, dizemos para definir o valor da propriedade `title` como `Hello " -"World`." +":class:`Gtk.FileChooserDialog` herda de :class:`Gtk.Dialog`, então os botões " +"possuem IDs de resposta como :attr:`Gtk.ResponseType.ACCEPT` e :attr:`Gtk." +"ResponseType.CANCEL`, que pode ser especificado no construtor :class:`Gtk." +"FileChooserDialog`. Em contraste com :class:`Gtk.Dialog`, você não pode usar " +"códigos de resposta customizados com :class:`Gtk.FileChooserDialog`. Espera " +"que pelo menos um botão tenha os seguintes IDs de resposta:" -#: ../../source/introduction.txt:78 -msgid "" -"The next three lines are used to create a button widget, connect to its " -"`clicked` signal and add it as child to the top-level window." -msgstr "" -"As próximas três linhas são usadas para criar um widget de botão, conectar " -"ao seu sinal de 'clicado' e adicioná-lo como filho à janela de nível " -"superior." +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr ":attr:`Gtk.ResponseType.ACCEPT`" -#: ../../source/introduction.txt:84 -msgid "" -"Accordingly, the method :meth:`on_button_clicked` will be called if you " -"click on the button." -msgstr "" -"Assim, o método :meth:`on_button_clicked` será chamado se você clicar no " -"botão." +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr ":attr:`Gtk.ResponseType.OK`" -#: ../../source/introduction.txt:89 -msgid "" -"The last block, outside of the class, is very similar to the simple example " -"above, but instead of creating an instance of the generic :class:`Gtk." -"Window` class, we create an instance of :class:`MyWindow`." -msgstr "" -"O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " -"invés de criar uma instância da classe genérica :class:`Gtk.Window`, criamos " -"uma instância de :class:`MyWindow`." +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr ":attr:`Gtk.ResponseType.YES`" -#: ../../source/label.txt:2 -msgid "Label" -msgstr "" +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr ":attr:`Gtk.ResponseType.APPLY`" -#: ../../source/label.txt:4 +#: ../../source/dialogs.txt:105 msgid "" -"Labels are the main method of placing non-editable text in windows, for " -"instance to place a title next to a :class:`Gtk.Entry` widget. You can " -"specify the text in the constructor, or later with the :meth:`Gtk.Label." -"set_text` or :meth:`Gtk.Label.set_markup` methods." +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." msgstr "" -"Os rótulos são o principal método de colocar texto não editável nas janelas, " -"por exemplo, para colocar um título ao lado de um widget :class:`Gtk.Entry`. " -"Você pode especificar o texto no construtor, ou mais tarde com os métodos :" -"meth:`Gtk.Label.set_text` ou :meth:`Gtk.Label.set_markup`." +"Quando o usuário terminar de selecionar arquivos, seu programa pode obter os " +"nomes selecionados como nomes de arquivos (:meth:`Gtk.FileChooser." +"get_filename`) ou como URIs (:meth:`Gtk.FileChooser.get_uri`)." -#: ../../source/label.txt:9 +#: ../../source/dialogs.txt:109 msgid "" -"The width of the label will be adjusted automatically. You can produce multi-" -"line labels by putting line breaks (\"\\\\n\") in the label string." +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." msgstr "" -"A largura da etiqueta será ajustada automaticamente. Você pode produzir " -"rótulos de várias linhas colocando as quebras de linha (\"\\\\n\") na " -"sequência de rótulos." +"Por padrão, :class:`Gtk.FileChooser` permite apenas que um único arquivo " +"seja selecionado por vez. Para permitir que vários arquivos sejam " +"selecionados, use :meth:`Gtk.FileChooser.set_select_multiple`. Recuperar uma " +"lista de arquivos selecionados é possível com :meth:`Gtk.FileChooser." +"get_filenames` ou :meth:`Gtk.FileChooser.get_uris`." -#: ../../source/label.txt:12 +#: ../../source/dialogs.txt:115 msgid "" -"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " -"Selectable labels allow the user to copy the label contents to the " -"clipboard. Only labels that contain useful-to-copy information — such as " -"error messages — should be made selectable." +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." msgstr "" -"Os rótulos podem ser feitos selecionáveis com :meth:`Gtk.Label." -"set_selectable`. Rótulos selecionáveis permitem que o usuário copie o " -"conteúdo do rótulo para a área de transferência. Somente os rótulos que " -"contêm informações úteis para copiar, como mensagens de erro, devem ser " -"selecionáveis." +":class:`Gtk.FileChooser` também possui suporte a uma variedade de opções que " +"tornam os arquivos e pastas mais configuráveis e acessíveis." -#: ../../source/label.txt:17 +#: ../../source/dialogs.txt:118 msgid "" -"The label text can be justified using the :meth:`Gtk.Label.set_justify` " -"method. The widget is also capable of word-wrapping, which can be activated " -"with :meth:`Gtk.Label.set_line_wrap`." +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." msgstr "" -"O texto do rótulo pode ser justificado usando o método :meth:`Gtk.Label." -"set_justify`. O widget também é capaz de quebra automática de palavras, que " -"pode ser ativado com :meth:`Gtk.Label.set_line_wrap`." +":meth:`Gtk.FileChooser.set_local_only`: Somente arquivos locais podem ser " +"selecionados." -#: ../../source/label.txt:21 +#: ../../source/dialogs.txt:119 msgid "" -":class:`Gtk.Label` support some simple formatting, for instance allowing you " -"to make some text bold, colored, or larger. You can do this by providing a " -"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " -"[#pango]_. For instance, ``bold text and strikethrough text``. " -"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " -"for links is borrowed from HTML, using the a with href and title attributes. " -"GTK+ renders links similar to the way they appear in web browsers, with " -"colored, underlined text. The title attribute is displayed as a tooltip on " -"the link." +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." msgstr "" -":class:`Gtk.Label` suporta algumas formatações simples, por exemplo, " -"permitindo que você crie algum texto em negrito, colorido ou maior. Você " -"pode fazer isso fornecendo uma string para :meth:`Gtk.Label.set_markup`, " -"usando a sintaxe de marcação do Pango [#pango]_. Por exemplo, ``texto em " -"negrito e texto tachado``. Além disso, :class:`Gtk.Label` suporta " -"hiperlinks clicáveis. A marcação para links é emprestada do HTML, usando os " -"atributos a com href e title. O GTK+ renderiza links semelhantes ao modo " -"como aparecem nos navegadores da web, com texto colorido e sublinhado. O " -"atributo de título é exibido como uma dica de ferramenta no link." +":meth:`Gtk.FileChooser.show_hidden`: Arquivos e pastas ocultos são exibidos." -#: ../../source/label.txt:37 +#: ../../source/dialogs.txt:120 msgid "" -"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " -"label, used for keyboard navigation. Mnemonics are created by providing a " -"string with an underscore before the mnemonic character, such as \"_File\", " -"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." -"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " -"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " -"not inside the mnemonic's target widget, you have to tell the label about " -"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." msgstr "" -"Os rótulos podem conter *mnemônicos*. Os mnemônicos são caracteres " -"sublinhados no rótulo, usados para navegação pelo teclado. Os mnemônicos são " -"criados fornecendo uma string com um sublinhado antes do caractere " -"mnemônico, como \"_File\", para as funções :meth:`Gtk.Label." -"new_with_mnemonic` ou :meth:`Gtk.Label.set_text_with_mnemonic`. Os " -"mnemônicos ativam automaticamente qualquer widget ativável em que o rótulo " -"esteja dentro, como um :class:`Gtk.Button`; se o rótulo não estiver dentro " -"do widget de destino do mnemônico, você deve informar o rótulo sobre o " -"destino usando :meth:`Gtk.Label.set_mnemonic_widget`." +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Se o seletor de " +"arquivos foi configurado no modo :attr:`Gtk.FileChooserAction.SAVE`, ele " +"apresentará um diálogo de confirmação se o usuário digitar um nome de " +"arquivo que já existe." -#: ../../source/label.txt:55 +#: ../../source/dialogs.txt:124 msgid "" -"Pango Markup Syntax, http://developer.gnome.org/pango/stable/" -"PangoMarkupFormat.html" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." msgstr "" +"Além disso, você pode especificar quais tipos de arquivos são exibidos " +"criando objetos :class:`Gtk.FileFilter` e chamando :meth:`Gtk.FileChooser." +"add_filter`. O usuário pode selecionar um dos filtros adicionados em uma " +"caixa de combinação na parte inferior do seletor de arquivos." -#: ../../source/layout-table.txt:2 -msgid "Table" -msgstr "Tabela" +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "Instalação" -#: ../../source/layout-table.txt:4 +#: ../../source/install.txt:5 msgid "" -":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " -"be used in newly-written code. Use the :ref:`layout-grid` class instead." +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later." msgstr "" -":class:`Gtk.Table` foi descontinuado desde o GTK+ versão 3.4 e não deve ser " -"usado em código recém-escrito. Use a classe :ref:`layout-grid`." +"O primeiro passo antes de começarmos com a programação de fato consiste em " +"configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " +"que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " +"como o GTK+, dentro do Python. Ele possui suporte exclusivamente ao GTK+ " +"versão 3 ou posterior." -#: ../../source/layout-table.txt:8 -msgid "" -"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." -msgstr "" -"Tabelas nos permite colocar widgets em uma grade similar a :class:`Gtk.Grid`." +#: ../../source/install.txt:12 +msgid "Dependencies" +msgstr "Dependências" -#: ../../source/layout-table.txt:10 -msgid "" -"The grid's dimensions need to be specified in the :class:`Gtk.Table` " -"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." -msgstr "" -"As dimensões da grade precisam ser especificadas no construtor :class:`Gtk." -"Table`. Para colocar um widget em uma caixa, use :meth:`Gtk.Table.attach`." +#: ../../source/install.txt:14 +msgid "GTK+3" +msgstr "GTK+3" -#: ../../source/layout-table.txt:13 -msgid "" -":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " -"the spacing between the rows at the specified row or column. Note that for " -"columns, the space goes to the right of the column, and for rows, the space " -"goes below the row." -msgstr "" -":meth:`Gtk.Table.set_row_spacing` e :meth:`Gtk.Table.set_col_spacing` " -"definem o espaçamento entre as linhas na linha ou coluna especificada. " -"Observe que, para colunas, o espaço vai para a direita da coluna e, para " -"linhas, o espaço fica abaixo da linha." - -#: ../../source/layout-table.txt:18 -msgid "" -"You can also set a consistent spacing for all rows and/or columns with :meth:" -"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " -"that with these calls, the last row and last column do not get any spacing." -msgstr "" -"Você também pode definir um espaçamento consistente para todas as linhas e/" -"ou colunas com :meth:`Gtk.Table.set_row_spacings` e :meth:`Gtk.Table." -"set_col_spacings`. Observe que, com essas chamadas, a última linha e a " -"última coluna não recebem espaçamento." +#: ../../source/install.txt:16 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "Python 2 (2.6 ou posterior) ou Python 3 (3.1 ou posterior)" -#: ../../source/layout-table.txt:22 -msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." -msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." +#: ../../source/install.txt:18 +msgid "gobject-introspection" +msgstr "gobject-introspection" -#: ../../source/layout.txt:4 -msgid "Layout Containers" -msgstr "Containers de Layout" +#: ../../source/install.txt:21 +msgid "Prebuilt Packages" +msgstr "Pacotes pré-construídos" -#: ../../source/layout.txt:5 +#: ../../source/install.txt:22 msgid "" -"While many GUI toolkits require you to precisely place widgets in a window, " -"using absolute positioning, GTK+ uses a different approach. Rather than " -"specifying the position and size of each widget in the window, you can " -"arrange your widgets in rows, columns, and/or tables. The size of your " -"window can be determined automatically, based on the sizes of the widgets it " -"contains. And the sizes of the widgets are, in turn, determined by the " -"amount of text they contain, or the minimum and maximum sizes that you " -"specify, and/or how you have requested that the available space should be " -"shared between sets of widgets. You can perfect your layout by specifying " -"padding distance and centering values for each of your widgets. GTK+ then " -"uses all this information to resize and reposition everything sensibly and " -"smoothly when the user manipulates the window." +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." msgstr "" -"Enquanto muitos toolkits GUI exigem que você coloque precisamente widgets em " -"uma janela, usando posicionamento absoluto, o GTK+ usa uma abordagem " -"diferente. Em vez de especificar a posição e o tamanho de cada widget na " -"janela, você pode organizar seus widgets em linhas, colunas e/ou tabelas. O " -"tamanho da sua janela pode ser determinado automaticamente, com base nos " -"tamanhos dos widgets que ela contém. E os tamanhos dos widgets, por sua vez, " -"são determinados pela quantidade de texto que eles contêm, ou os tamanhos " -"mínimo e máximo que você especifica, e/ou como você solicitou que o espaço " -"disponível seja compartilhado entre conjuntos de widgets. Você pode " -"aperfeiçoar seu layout especificando a distância de preenchimento e os " -"valores de centralização para cada um de seus widgets. O GTK+ usa todas " -"essas informações para redimensionar e reposicionar tudo de maneira sensata " -"e suave quando o usuário manipula a janela." +"Versões recentes do PyGObject e suas dependências são empacotadas por quase " +"todas as principais distribuições do Linux. Então, se você usa o Linux, você " +"provavelmente pode começar instalando o pacote a partir do repositório " +"oficial da sua distribuição." -#: ../../source/layout.txt:19 +#: ../../source/install.txt:28 +msgid "Installing From Source" +msgstr "Instalando a partir da origem" + +#: ../../source/install.txt:29 msgid "" -"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " -"to the end user and are inserted into a window, or placed within each other " -"to layout components. There are two flavours of containers: single-child " -"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" -"child containers, which are descendants of :class:`Gtk.Container`. The most " -"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " -"(:class:`Gtk.Grid`)." +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." msgstr "" -"O GTK+ organiza widgets hierarquicamente, usando *containers*. Eles são " -"invisíveis para o usuário final e são inseridos em uma janela ou colocados " -"entre si para os componentes do layout. Existem dois tipos de contêineres: " -"contêineres filho único, todos descendentes de :class:`Gtk.Bin` e " -"contêineres com vários filhos, que são descendentes de :class:`Gtk." -"Container`. Os mais usados são caixas verticais ou horizontais (:class:`Gtk." -"Box`) e grades (:class:`Gtk.Grid`)." +"A maneira mais fácil de instalar o PyGObject a partir do código-fonte é " +"usando o `JHBuild`_. Ele é projetado para criar facilmente pacotes de código-" +"fonte e descobrir quais dependências precisam ser construídas e em que " +"ordem. Para configurar o JHBuild, por favor, siga o `manual do JHBuild`_." -#: ../../source/layout.txt:29 -msgid "Boxes" +#: ../../source/install.txt:33 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." msgstr "" +"Depois de ter instalado o JHBuild com sucesso, baixe a configuração mais " +"recente de [#]_. Copie os arquivos com o sufixo `.modules` para o diretório " +"de módulos do JHBuild e o arquivo `sample-tarball.jhbuildrc` para `~/." +"jhbuildrc`." -#: ../../source/layout.txt:31 +#: ../../source/install.txt:37 msgid "" -"Boxes are invisible containers into which we can pack our widgets. When " -"packing widgets into a horizontal box, the objects are inserted horizontally " -"from left to right or right to left depending on whether :meth:`Gtk.Box." -"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " -"are packed from top to bottom or vice versa. You may use any combination of " -"boxes inside or beside other boxes to create the desired effect." +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" msgstr "" -"Caixas são contêineres invisíveis nos quais podemos empacotar nossos " -"widgets. Ao agrupar widgets em uma caixa horizontal, os objetos são " -"inseridos horizontalmente da esquerda para a direita ou da direita para a " -"esquerda, dependendo se :meth:`Gtk.Box.pack_start` ou :meth:`Gtk.Box." -"pack_end` for usado. Em uma caixa vertical, os widgets são empacotados de " -"cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " -"dentro ou ao lado de outras caixas para criar o efeito desejado." +"Se você não tiver feito isso antes, verifique se o seu ambiente de " +"compilação está configurado corretamente executando:" -#: ../../source/layout.txt:42 +#: ../../source/install.txt:42 msgid "" -"Let's take a look at a slightly modified version of the extended example " -"with two buttons." +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." msgstr "" -"Vamos dar uma olhada em uma versão ligeiramente modificada do exemplo " -"estendido com dois botões." +"Isso imprimirá todos os aplicativos e bibliotecas que estiverem faltando no " +"seu sistema, mas que são necessários para construção. Você deve instalá-los " +"usando o repositório de pacotes da sua distribuição. Uma lista de `nomes de " +"pacotes `_ " +"para diferentes distribuições é mantida na wiki do GNOME. Execute o comando " +"acima novamente para garantir que as ferramentas necessárias estejam " +"presentes." -#: ../../source/layout.txt:50 +#: ../../source/install.txt:48 msgid "" -"First, we create a horizontally orientated box container where 6 pixels are " -"placed between children. This box becomes the child of the top-level window." +"Executing the following command will build PyGObject and all its " +"dependencies::" msgstr "" -"Primeiro, criamos um contêiner de caixa orientado horizontalmente, onde 6 " -"pixels são colocados entre os filhos. Esta caixa se torna o filho da janela " -"de nível superior." +"Executando o seguinte comando irá construir o PyGObject e todas as suas " +"dependências::" -#: ../../source/layout.txt:56 -msgid "Subsequently, we add two different buttons to the box container." +#: ../../source/install.txt:52 +msgid "Finally, you might want to install GTK+ from source as well::" msgstr "" -"Posteriormente, adicionamos dois botões diferentes ao contêiner da caixa." +"Finalmente, você pode querer instalar o GTK+ a partir do código-fonte::" -#: ../../source/layout.txt:61 -msgid "" -"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " -"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +#: ../../source/install.txt:56 +msgid "To start a shell with the same environment as used by JHBuild, run::" msgstr "" -"Enquanto com os widgets :meth:`Gtk.Box.pack_start` estão posicionados da " -"esquerda para a direita, :meth:`Gtk.Box.pack_end` os posiciona da direita " -"para a esquerda." +"Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, execute::" -#: ../../source/layout.txt:67 -msgid "Grid" +#: ../../source/install.txt:64 +msgid "https://download.gnome.org/teams/releng/" +msgstr "https://download.gnome.org/teams/releng/" + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "Popovers" + +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a seperate window used for displaying additional " +"information and are often used as a part of button menus and context menus. " +"Their uses are similar to those of dialog windows with the advantage of " +"being less disruptive and having a connection with the widget the popover is " +"pointing to. Popovers have are visually connected to a related widget with a " +"small triangle." msgstr "" +"O :class:`Gtk.Popover` é uma janela separada usada para exibir informações " +"adicionais e é frequentemente usada como parte de menus de botão e menus de " +"contexto. Seus usos são semelhantes aos das janelas de diálogo, com a " +"vantagem de ser menos prejudicial e ter uma conexão com o widget para o qual " +"o popover está apontando. Os popovers estão visualmente conectados a um " +"widget relacionado com um pequeno triângulo." -#: ../../source/layout.txt:68 +#: ../../source/popover.txt:10 msgid "" -":class:`Gtk.Grid` is a container which arranges its child widgets in rows " -"and columns, but you do not need to specify the dimensions in the " -"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " -"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " -"parameters:" +"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Widget.show_all`." msgstr "" -":class:`Gtk.Grid` é um contêiner que organiza seus widgets filhos em linhas " -"e colunas, mas você não precisa especificar as dimensões no construtor. As " -"crianças são adicionadas usando :meth:`Gtk.Grid.attach`. Eles podem abranger " -"várias linhas ou colunas. O método :meth:`Gtk.Grid.attach` usa cinco " -"parâmetros:" +"Um Popover pode ser criado com :class:`Gtk.Popover`; para abrir o popover, " +"use :meth:`Gtk.Widget.show_all`." -#: ../../source/layout.txt:73 -msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." -msgstr "O parâmetro ``child`` é o :class:`Gtk.Widget` para adicionar." +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "Popover Personalizado" -#: ../../source/layout.txt:74 -msgid "``left`` is the column number to attach the left side of ``child`` to." +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." msgstr "" -"`` left`` é o número da coluna para anexar o lado esquerdo de ``child`` em." +"Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." +"add`." -#: ../../source/layout.txt:75 -msgid "" -"``top`` indicates the row number to attach the top side of ``child`` to." -msgstr "" -"`` top`` indica o número da linha para anexar o lado superior do ``child``." +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "Popover de menu" -#: ../../source/layout.txt:76 +#: ../../source/popover.txt:29 msgid "" -"``width`` and ``height`` indicate the number of columns that the ``child`` " -"will span, and the number of rows that the ``child`` will span, respectively." +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." msgstr "" -"`` width`` e ``height`` indicam o número de colunas que o ``child`` irá " -"abranger, e o número de linhas que o ``child`` irá abranger, respectivamente." +"Um popover pode ser criado a partir de :class:`Gio.MenuModel` usando :meth:" +"`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" +"`Gtk.Popover.bind_model`." -#: ../../source/layout.txt:79 -msgid "" -"It is also possible to add a child next to an existing child, using :meth:" -"`Gtk.Grid.attach_next_to`, which also takes five parameters:" -msgstr "" -"Também é possível adicionar um child ao lado de um child existente, usando :" -"meth:`Gtk.Grid.attach_next_to`, que também usa cinco parâmetros:" +#: ../../source/popover.txt:41 ../../source/application.txt:69 +msgid "See Also" +msgstr "Veja também" -#: ../../source/layout.txt:82 -msgid "``child`` is the :class:`Gtk.Widget` to add, as above." -msgstr "``child`` é o :class:`Gtk.Widget` para adicionar, como acima." +#: ../../source/popover.txt:43 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "https://developer.gnome.org/hig/stable/popovers.html.pt_BR" -#: ../../source/layout.txt:83 +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "Arrastar e soltar" + +#: ../../source/drag_and_drop.txt:4 msgid "" -"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " -"instance) or ``None``. The ``child`` widget will be placed next to " -"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " -"grid." +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." msgstr "" -"``sibling`` é um widget filho existente de ``self`` (uma instância :class:" -"`Gtk.Grid`) ou ``None``. O widget ``child`` será colocado próximo ao " -"``sibling``, ou se ``sibling`` for ``None``, no início ou no final da grade." +"As versões do PyGObject < 3.0.3 contêm um bug que não permite arrastar e " +"soltar para funcionar corretamente. Portanto, uma versão do PyGObject >= " +"3.0.3 é necessária para os exemplos a seguir funcionarem." -#: ../../source/layout.txt:86 +#: ../../source/drag_and_drop.txt:8 msgid "" -"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " -"that ``child`` is positioned next to." +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." msgstr "" -"``side`` é um :class:`Gtk.PositionType` indicando o lado do ``sibling`` que " -"``child`` é posicionado ao lado de." +"Configurar arrastar e soltar entre widgets consiste em selecionar uma fonte " +"de arrasto (o widget do qual o usuário começa a arrastar) com o método :meth:" +"`Gtk.Widget.drag_source_set`, selecionando um destino de arrasto (o widget " +"que o usuário coloca em) com o método :meth:`Gtk.Widget.drag_dest_set` e " +"depois manipular os sinais relevantes em ambos os widgets." -#: ../../source/layout.txt:88 +#: ../../source/drag_and_drop.txt:14 msgid "" -"``width`` and ``height`` indicate the number of columns and rows the " -"``child`` widget will span, respectively." +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." msgstr "" -"``width`` e ``height`` indicam o número de colunas e linhas que o widget " -"``child`` abrangerá, respectivamente." +"Em vez de usar :meth:`Gtk.Widget.drag_source_set` e :meth:`Gtk.Widget." +"drag_dest_set` alguns widgets especializados requerem o uso de funções " +"específicas (como :class:`Gtk.TreeView` e :class:`Gtk.IconView`)." -#: ../../source/layout.txt:91 +#: ../../source/drag_and_drop.txt:18 msgid "" -"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " -"using :meth:`Gtk.Grid.add`, which will place children next to each other in " -"the direction determined by the \"orientation\" property (defaults to :attr:" -"`Gtk.Orientation.HORIZONTAL`)." +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." msgstr "" -"Finalmente, :class:`Gtk.Grid` pode ser usado como :class:`Gtk.Box` usando " -"apenas :meth:`Gtk.Grid.add`, que colocará as crianças uma ao lado da outra " -"na direção determinada por a propriedade \"orientação\" (o padrão é :attr:" -"`Gtk.Orientation.HORIZONTAL`)." +"Um arrastar e soltar básico requer apenas que a fonte se conecte ao sinal " +"“drag-data-get” e que o destino se conecte ao sinal “drag-data-received”. " +"Coisas mais complexas, como áreas de queda específicas e ícones de arrastar " +"personalizados, exigirão que você se conecte a :ref:`sinais adicionais ` e interaja com o objeto :class:`Gdk.DragContext` que fornece." -#: ../../source/layout.txt:105 -msgid "ListBox" +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." msgstr "" +"Para transferir dados entre a origem e o destino, você deve interagir com a " +"variável :class:`Gtk.SelectionData` fornecida nos sinais :ref:`“drag-data-" +"get” ` e :ref:`“drag-data-received” ` usando os " +"métodos get e set de :class:`Gtk.SelectionData`." -#: ../../source/layout.txt:107 +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "Entradas de alvo" + +#: ../../source/drag_and_drop.txt:31 msgid "" -"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." -"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " -"headers can be added dynamically depending on the row content. It also " -"allows keyboard and mouse navigation and selection like a typical list." +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." msgstr "" -"A :class:`Gtk.ListBox` é um contêiner vertical que contém :class:`Gtk." -"ListBoxRow` filhos. Essas linhas podem ser classificadas e filtradas " -"dinamicamente e os cabeçalhos podem ser adicionados dinamicamente, " -"dependendo do conteúdo da linha. Também permite navegação e seleção de " -"teclado e mouse como uma lista típica." +"Para permitir que a origem e o destino do arrastar saibam quais dados estão " +"recebendo e enviando, uma lista comum de :class:`Gtk.TargetEntry`\\s é " +"necessária. A :class:`Gtk.TargetEntry` descreve um dado que será enviado " +"pela fonte de arrasto e recebido pelo destino do arrasto." -#: ../../source/layout.txt:112 +#: ../../source/drag_and_drop.txt:36 msgid "" -"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " -"especially when the list content has a more complicated layout than what is " -"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " -"(i.e. has a button in it)." +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." msgstr "" -"Usar :class:`Gtk.ListBox` é muitas vezes uma alternativa para :class:`Gtk." -"TreeView`, especialmente quando o conteúdo da lista tem um layout mais " -"complicado do que o permitido por um :class:`Gtk.CellRenderer`, ou quando o " -"conteúdo é interativo (ou seja, tem um botão)." +"Existem duas maneiras de adicionar :class:`Gtk.TargetEntry`\\s a uma origem " +"e destino. Se o arrastar e soltar for simples e cada entrada de destino for " +"de um tipo diferente, você pode usar o grupo de métodos mencionado aqui :" +"meth:``." -#: ../../source/layout.txt:117 +#: ../../source/drag_and_drop.txt:41 msgid "" -"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " -"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " -"the list and the widget." +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." msgstr "" -"Embora um :class:`Gtk.ListBox` deva ter apenas :class:`Gtk.ListBoxRow` " -"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." -"Container.add` e um :class:`Gtk.ListBoxRow` widget será automaticamente " -"inserido entre a lista e o widget." +"Se você precisar de mais de um tipo de dados ou quiser fazer coisas mais " +"complexas com os dados, você precisará criar o :class:`Gtk.TargetEntry`\\s " +"usando o método :meth:`Gtk.TargetEntry.new`." -#: ../../source/layout.txt:131 -msgid "Stack and StackSwitcher" -msgstr "" +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "Sinais de origem do arrasto" -#: ../../source/layout.txt:133 +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "Nome" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "Quando é emitido" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "Propósito comum" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "drag-begin" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "Usuário inicia um arrasto" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "Configurar ícone de arrasto" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "drag-data-get" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "Quando dados do arrasto são solicitados pelo destino" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "Transferir dados do arrasto da origem para o destino" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "drag-data-delete" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "Quando um arrasto com a ação Gdk.DragAction.MOVE é concluído" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "Excluir dados da origem para concluir o “movimento”" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "drag-end" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "Quando o arrasto estiver concluído" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "Desfazer qualquer coisa feita no drag-begin" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "Sinais de destino do arrasto" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "drag-motion" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "O ícone de arrasto se move sobre uma área de soltar" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "Permitir que apenas algumas áreas sejam soltas" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "drag-drop" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "O ícone é solto em uma área de arrasto" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "drag-data-received" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "Quando dados do arrasto são recebidos pelo destino" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "Application" + +#: ../../source/application.txt:6 msgid "" -"A :class:`Gtk.Stack` is a container which only shows one of its children at " -"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " -"provide a means for users to change the visible child. Instead, the :class:" -"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " -"this functionality." +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." msgstr "" -"A :class:`Gtk.Stack` é um contêiner que mostra apenas um de seus filhos por " -"vez. Em contraste com :class:`Gtk.Notebook`, :class:`Gtk.Stack` não fornece " -"um meio para os usuários alterarem o filho visível. Em vez disso, o widget :" -"class:`Gtk.StackSwitcher` pode ser usado com :class:`Gtk.Stack` para " -"fornecer essa funcionalidade." +":class:`Gtk.Application` abrange muitas tarefas repetitivas que um " +"aplicativo moderno precisa, como manipular várias instâncias, ativação do D-" +"Bus, abertura de arquivos, análise de linha de comando, inicialização/" +"desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." -#: ../../source/layout.txt:139 +#: ../../source/application.txt:14 msgid "" -"Transitions between pages can be animated as slides or fades. This can be " -"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " -"respect the \"gtk-enable-animations\" setting." +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." msgstr "" -"Transições entre páginas podem ser animadas como slides ou fades. Isso pode " -"ser controlado com :meth:`Gtk.Stack.set_transition_type`. Essas animações " -"respeitam a configuração \"gtk-enable-animations\"." +":class:`Gio.Action` é uma maneira de expor qualquer tarefa que seu " +"aplicativo ou widget fizer por um nome. Essas ações podem ser desabilitadas/" +"habilitadas no tempo de execução e podem ser ativadas ou ter um estado " +"alterado (se elas contiverem estado)." -#: ../../source/layout.txt:143 +#: ../../source/application.txt:18 msgid "" -"Transition speed can be adjusted with :meth:`Gtk.Stack." -"set_transition_duration`" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." msgstr "" -"A velocidade de transição pode ser ajustada com :meth:`Gtk.Stack." -"set_transition_duration`" +"O motivo para usar ações é separar a lógica da interface do usuário. Por " +"exemplo, isso permite usar uma barra de menu no OSX e um menu de engrenagem " +"no GNOME, simplesmente referenciando o nome de uma ação. A principal " +"implementação que você estará usando é :class:`Gio.SimpleAction` que será " +"mostrado mais tarde." -#: ../../source/layout.txt:145 +#: ../../source/application.txt:23 msgid "" -"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." -"Stack`; it shows a row of buttons to switch between the various pages of the " -"associated stack widget." +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." msgstr "" -"O widget :class:`Gtk.StackSwitcher` atua como um controlador para um :class:" -"`Gtk.Stack`; Ele mostra uma linha de botões para alternar entre as várias " -"páginas do widget de pilha associado." +"Muitas classes, como :class:`Gio.MenuItem` e :class:`Gtk.ModelButton` " +"suportam propriedades para definir um nome de ação." -#: ../../source/layout.txt:149 +#: ../../source/application.txt:26 msgid "" -"All the content for the buttons comes from the child properties of the :" -"class:`Gtk.Stack`." +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." msgstr "" -"Todo o conteúdo para os botões vem das propriedades filho do :class:`Gtk." -"Stack`." +"Estas ações podem ser agrupadas em um :class:`Gio.ActionGroup` e quando " +"esses grupos são adicionados a um widget com :meth:`Gtk.Widget." +"insert_action_group()`, eles ganharão um prefixo. Tal como “win” quando " +"adicionado a um :class:`Gtk.ApplicationWindow`. Você usará o nome completo " +"da ação ao fazer referência a ele, como “app.about”, mas ao criar a ação, " +"ela ficará “about” até ser adicionada ao aplicativo." -#: ../../source/layout.txt:152 +#: ../../source/application.txt:32 msgid "" -"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " -"the same :class:`Gtk.Stack` widget." +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"add_accelerator()`." msgstr "" -"É possível associar múltiplos widgets :class:`Gtk.StackSwitcher` com o mesmo " -"widget :class:`Gtk.Stack`." +"Você também pode facilmente criar keybindings para ações definindo a " +"propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." +"Application.add_accelerator()`." -#: ../../source/layout.txt:164 -msgid "HeaderBar" -msgstr "" - -#: ../../source/layout.txt:166 -msgid "" -"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " -"allows to place children at the start or the end. In addition, it allows a " -"title to be displayed. The title will be centered with respect to the width " -"of the box, even if the children at either side take up different amounts of " -"space." -msgstr "" -"A :class:`Gtk.HeaderBar` é semelhante a uma horizontal :class:`Gtk.Box`, " -"permite colocar filhos no início ou no final. Além disso, permite que um " -"título seja exibido. O título será centrado em relação à largura da caixa, " -"mesmo que os filhos de ambos os lados ocupem diferentes quantidades de " -"espaço." - -#: ../../source/layout.txt:171 -msgid "" -"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " -"be used in place of the title bar (which is rendered by the Window Manager)." -msgstr "" -"Como o GTK+ agora suporta o Client Side Decoration, um :class:`Gtk." -"HeaderBar` pode ser usado no lugar da barra de título (que é renderizada " -"pelo Gerenciador de Janelas)." - -#: ../../source/layout.txt:174 -msgid "" -"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " -"should contain commonly used controls which affect the content below. They " -"also provide access to window controls, including the close window button " -"and window menu." -msgstr "" -"A :class:`Gtk.HeaderBar` geralmente está localizado na parte superior de uma " -"janela e deve conter controles comumente usados que afetam o conteúdo " -"abaixo. Eles também fornecem acesso a controles de janela, incluindo o botão " -"de fechar janela e o menu de janela." - -#: ../../source/layout.txt:188 -msgid "FlowBox" -msgstr "" - -#: ../../source/layout.txt:190 -msgid "" -"A :class:`Gtk.FlowBox` is a container that positions child widgets in " -"sequence according to its orientation." -msgstr "" -"A :class:`Gtk.FlowBox` é um contêiner que posiciona widgets filhos em " -"sequência de acordo com sua orientação." - -#: ../../source/layout.txt:193 -msgid "" -"For instance, with the horizontal orientation, the widgets will be arranged " -"from left to right, starting a new row under the previous row when " -"necessary. Reducing the width in this case will require more rows, so a " -"larger height will be requested." -msgstr "" -"Por exemplo, com a orientação horizontal, os widgets serão organizados da " -"esquerda para a direita, iniciando uma nova linha na linha anterior, quando " -"necessário. Reduzir a largura neste caso exigirá mais linhas, portanto, uma " -"altura maior será solicitada." - -#: ../../source/layout.txt:198 -msgid "" -"Likewise, with the vertical orientation, the widgets will be arranged from " -"top to bottom, starting a new column to the right when necessary. Reducing " -"the height will require more columns, so a larger width will be requested." -msgstr "" -"Da mesma forma, com a orientação vertical, os widgets serão organizados de " -"cima para baixo, iniciando uma nova coluna à direita quando necessário. " -"Reduzir a altura exigirá mais colunas, portanto será solicitada uma largura " -"maior." - -#: ../../source/layout.txt:202 -msgid "" -"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " -"filtered." -msgstr "" -"Os filhos de uma :class:`Gtk.FlowBox` podem ser classificados e filtrados " -"dinamicamente." - -#: ../../source/layout.txt:204 -msgid "" -"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container." -"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " -"between the box and the widget." -msgstr "" -"Embora um :class:`Gtk.FlowBox` deva ter apenas :class:`Gtk.FlowBoxChild` " -"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." -"Container.add`, e a :class:`Gtk.FlowBoxChild`, o widget será " -"automaticamente inserido entre a caixa e o widget." - -#: ../../source/layout.txt:218 -msgid "Notebook" -msgstr "" - -#: ../../source/layout.txt:220 -msgid "" -"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " -"are pages that can be switched between using tab labels along one edge." -msgstr "" -"O widget :class:`Gtk.Notebook` é um :class:`Gtk.Container` cujos filhos são " -"páginas que podem ser alternadas usando rótulos de guias ao longo de uma " -"borda." - -#: ../../source/layout.txt:222 -msgid "" -"There are many configuration options for GtkNotebook. Among other things, " -"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." -"set_tab_pos`), whether, if there are too many tabs to fit the notebook " -"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." -"set_scrollable`, and whether there will be a popup menu allowing the users " -"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." -"popup_disable`)." -msgstr "" -"Existem muitas opções de configuração para o GtkNotebook. Entre outras " -"coisas, você pode escolher em qual borda as abas aparecem (veja :meth:`Gtk." -"Notebook.set_tab_pos`), se houver muitas abas para caber no notebook, elas " -"devem ser maiores ou setas de rolagem serão adicionadas (veja :meth:`Gtk." -"Notebook.set_scrollable`, e se haverá um menu pop-up que permita aos " -"usuários trocar de página (veja :meth:`Gtk.Notebook.popup_enable`, :meth:" -"`Gtk.Notebook.popup_disable`)." - -#: ../../source/menus.txt:4 -msgid "" -":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " -"have been deprecated since GTK+ version 3.10 and should not be used in newly-" -"written code. Use the :ref:`application` framework instead." -msgstr "" -":class:`Gtk.UIManager`, :class:`Gtk.Action` e :class:`Gtk.ActionGroup` foram " -"descontinuados desde o GTK+ versão 3.10 e não devem ser usados em código " -"recém-escrito. Use o framework :ref:`application`." - -#: ../../source/menus.txt:8 -msgid "" -"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" -"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " -"contains one or more :class:`Gtk.MenuItem` instances or one of its " -"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " -"commonly used functions of an application. Examples include creating a new " -"document, printing a page or undoing an operation. It contains one or more " -"instances of :class:`Gtk.ToolItem` or one of its subclasses." -msgstr "" -"O GTK+ vem com dois tipos diferentes de menus :class:`Gtk.MenuBar` e :class:" -"`Gtk.Toolbar`. :class:`Gtk.MenuBar` é uma barra de menus padrão que contém " -"uma ou mais instâncias :class:`Gtk.MenuItem` ou uma de suas subclasses. Os " -"widgets :class:`Gtk.Toolbar` são usados para acessibilidade rápida às " -"funções comumente usadas de um aplicativo. Exemplos incluem criar um novo " -"documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " -"mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." - -#: ../../source/menus.txt:19 -msgid "" -"Although, there are specific APIs to create menus and toolbars, you should " -"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " -"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " -"from names to :class:`Gtk.Action` objects. All actions that would make sense " -"to use in a particular context should be in a single group. Multiple action " -"groups may be used for a particular user interface. In fact, it is expected " -"that most non-trivial applications will make use of multiple groups. For " -"example, in an application that can edit multiple documents, one group " -"holding global actions (e.g. quit, about, new), and one group per document " -"holding actions that act on that document (eg. save, cut/copy/paste, etc). " -"Each window's menus would be constructed from a combination of two action " -"groups." -msgstr "" -"Embora existam APIs específicas para criar menus e barras de ferramentas, " -"você deve usar :class:`Gtk.UIManager` e criar instâncias :class:`Gtk." -"Action`. As ações são organizadas em grupos. A :class:`Gtk.ActionGroup` é " -"essencialmente um mapa de nomes para objetos :class:`Gtk.Action`. Todas as " -"ações que fazem sentido usar em um contexto particular devem estar em um " -"único grupo. Vários grupos de ação podem ser usados para uma interface de " -"usuário específica. Na verdade, espera-se que a maioria dos aplicativos não " -"triviais faça uso de vários grupos. Por exemplo, em um aplicativo que pode " -"editar vários documentos, um grupo mantém ações globais (por exemplo, sair, " -"sobre, novo) e um grupo por documento que contém ações que atuam nesse " -"documento (por exemplo, salvar, recortar/copiar/colar etc. ). Os menus de " -"cada janela seriam construídos a partir de uma combinação de dois grupos de " -"ação." - -#: ../../source/menus.txt:31 -msgid "Different classes representing different types of actions exist:" -msgstr "Existem classes diferentes representando diferentes tipos de ações:" - -#: ../../source/menus.txt:33 -msgid "" -":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " -"item" -msgstr "" -":class:`Gtk.Action`: Uma ação que pode ser acionada por um item de menu ou " -"barra de ferramentas" - -#: ../../source/menus.txt:35 -msgid "" -":class:`Gtk.ToggleAction`: An action which can be toggled between two states" -msgstr "" -":class:`Gtk.ToggleAction`: Uma ação que pode ser alternada entre dois estados" - -#: ../../source/menus.txt:36 -msgid "" -":class:`Gtk.RadioAction`: An action of which only one in a group can be " -"active" -msgstr "" -":class:`Gtk.RadioAction`: Uma ação da qual apenas um em um grupo pode estar " -"ativo" - -#: ../../source/menus.txt:38 -msgid "" -":class:`Gtk.RecentAction`: An action of which represents a list of recently " -"used files" -msgstr "" -":class:`Gtk.RecentAction`: Uma ação que representa uma lista de arquivos " -"usados recentemente" - -#: ../../source/menus.txt:41 -msgid "" -"Actions represent operations that the user can be perform, along with some " -"information how it should be presented in the interface, including its name " -"(not for display), its label (for display), an accelerator, whether a label " -"indicates a tooltip as well as the callback that is called when the action " -"gets activated." -msgstr "" -"Ações representam operações que o usuário pode executar, juntamente com " -"algumas informações sobre como ele deve ser apresentado na interface, " -"incluindo seu nome (não para exibição), seu rótulo (para exibição), um " -"acelerador, se um rótulo também indica uma dica de ferramenta como o retorno " -"que é chamado quando a ação é ativada." - -#: ../../source/menus.txt:47 -msgid "" -"You can create actions by either calling one of the constructors directly " -"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." -"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " -"by calling one of the convenience functions:" -msgstr "" -"Você pode criar ações chamando um dos construtores diretamente e adicionando-" -"os a um :class:`Gtk.ActionGroup` chamando :meth:`Gtk.ActionGroup.add_action` " -"ou :meth:`Gtk.ActionGroup.add_action_with_accel`, ou chamando uma das " -"funções de conveniência:" - -#: ../../source/menus.txt:52 -msgid ":meth:`Gtk.ActionGroup.add_actions`," -msgstr "" - -#: ../../source/menus.txt:53 -msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" -msgstr "" - -#: ../../source/menus.txt:54 -msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." -msgstr "" - -#: ../../source/menus.txt:56 -msgid "Note that you must specify actions for sub menus as well as menu items." -msgstr "Observe que você deve especificar ações para submenus e itens de menu." - -#: ../../source/menus.txt:59 -msgid "UI Manager" -msgstr "Gerenciador de IU" - -#: ../../source/menus.txt:61 -msgid "" -":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " -"using an `XML-like description `_." -msgstr "" -":class:`Gtk.UIManager` fornece uma maneira fácil de criar menus e barras de " -"ferramentas usando uma descrição `XML-like `_." - -#: ../../source/menus.txt:64 -msgid "" -"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " -"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " -"idea to tell the parent window to respond to the specified keyboard " -"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." -"Window.add_accel_group`." -msgstr "" -"Primeiro de tudo, você deve adicionar o :class:`Gtk.ActionGroup` ao UI " -"Manager com :meth:`Gtk.UIManager.insert_action_group`. Neste ponto também é " -"uma boa idéia dizer à janela pai para responder aos atalhos de teclado " -"especificados, usando :meth:`Gtk.UIManager.get_accel_group` e :meth:`Gtk." -"Window.add_accel_group`." - -#: ../../source/menus.txt:69 -msgid "" -"Then, you can define the actual visible layout of the menus and toolbars, " -"and add the UI layout. This \"ui string\" uses an XML format, in which you " -"should mention the names of the actions that you have already created. " -"Remember that these names are just the identifiers that we used when " -"creating the actions. They are not the text that the user will see in the " -"menus and toolbars. We provided those human-readable names when we created " -"the actions." -msgstr "" -"Em seguida, você pode definir o layout visível real dos menus e barras de " -"ferramentas e adicionar o layout da interface do usuário. Essa \"string ui\" " -"usa um formato XML, no qual você deve mencionar os nomes das ações que você " -"já criou. Lembre-se de que esses nomes são apenas os identificadores que " -"usamos ao criar as ações. Eles não são o texto que o usuário verá nos menus " -"e nas barras de ferramentas. Fornecemos esses nomes legíveis quando criamos " -"as ações." - -#: ../../source/menus.txt:76 -msgid "" -"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " -"and add the widget to a container such as :class:`Gtk.Box`." -msgstr "" -"Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " -"e adiciona o widget a um container como :class:`Gtk.Box`." - -#: ../../source/objects.txt:4 -msgid "Objects" -msgstr "" - -#: ../../source/objects.txt:6 -msgid "" -"GObject is the fundamental type providing the common attributes and methods " -"for all object types in GTK+, Pango and other libraries based on GObject. " -"The :class:`GObject.GObject` class provides methods for object construction " -"and destruction, property access methods, and signal support." -msgstr "" -"O GObject é o tipo fundamental que fornece os atributos e métodos comuns " -"para todos os tipos de objeto no GTK+, no Pango e em outras bibliotecas " -"baseadas no GObject. A classe :class:`GObject.GObject` fornece métodos para " -"construção e destruição de objetos, métodos de acesso a propriedades e " -"suporte a sinais." - -#: ../../source/objects.txt:11 -msgid "" -"This section will introduce some important aspects about the GObject " -"implementation in Python." -msgstr "" -"Esta seção apresentará alguns aspectos importantes sobre a implementação do " -"GObject no Python." - -#: ../../source/objects.txt:15 -msgid "Inherit from GObject.GObject" -msgstr "Herdar de GObject.GObject" - -#: ../../source/objects.txt:17 -msgid "" -"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " -"instantiated directly, we generally use inherited class. A :class:`Gtk." -"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " -"interesting to make an inherited class to create a new widget, like a " -"settings dialog." -msgstr "" -"Um GObject nativo é acessível via :class:`GObject.GObject`. É raramente " -"instanciado diretamente, geralmente usamos classes herdadas. A :class:`Gtk." -"Widget` é uma classe herdada de um :class:`GObject.GObject`. Pode ser " -"interessante criar uma classe herdada para criar um novo widget, como uma " -"caixa de diálogo de configurações." - -#: ../../source/objects.txt:22 -msgid "" -"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." -"GObject.__init__` in your constructor (if the class inherits from :class:" -"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " -"in the example below:" -msgstr "" -"Para herdar de :class:`GObject.GObject`, você deve chamar :meth:`GObject." -"GObject.__init__` em seu construtor (se a classe herdar de :class:`Gtk." -"Button`, deve chamar :func:`Gtk.Button.__init__` por exemplo), como no " -"exemplo abaixo:" - -#: ../../source/objects.txt:37 -msgid "Signals" -msgstr "Sinais" - -#: ../../source/objects.txt:39 -msgid "" -"Signals connect arbitrary application-specific events with any number of " -"listeners. For example, in GTK+, every user event (keystroke or mouse move) " -"is received from the X server and generates a GTK+ event under the form of a " -"signal emission on a given object instance." -msgstr "" -"Os sinais conectam eventos específicos de aplicativos arbitrários com " -"qualquer número de ouvintes. Por exemplo, no GTK+, cada evento de usuário " -"(pressionamento de tecla ou mouse) é recebido do servidor X e gera um evento " -"GTK+ sob a forma de uma emissão de sinal em uma determinada instância de " -"objeto." - -#: ../../source/objects.txt:44 -msgid "" -"Each signal is registered in the type system together with the type on which " -"it can be emitted: users of the type are said to connect to the signal on a " -"given type instance when they register a function to be invoked upon the " -"signal emission. Users can also emit the signal by themselves or stop the " -"emission of the signal from within one of the functions connected to the " -"signal." -msgstr "" -"Cada sinal é registrado no sistema de tipos junto com o tipo no qual ele " -"pode ser emitido: os usuários do tipo são conectados ao sinal em uma " -"determinada instância de tipo quando registram uma função a ser invocada na " -"emissão do sinal. Os usuários também podem emitir o sinal sozinhos ou " -"interromper a emissão do sinal de dentro de uma das funções conectadas ao " -"sinal." - -#: ../../source/objects.txt:51 -msgid "Receive signals" -msgstr "Receba sinais" - -#: ../../source/objects.txt:53 -msgid "See :ref:`signals`" -msgstr "Veja :ref:`signals`" - -#: ../../source/objects.txt:56 -msgid "Create new signals" -msgstr "Crie novos sinais" - -#: ../../source/objects.txt:58 -msgid "" -"New signals can be created by adding them to :attr:`GObject.GObject." -"__gsignals__`, a dictionary:" -msgstr "" -"Novos sinais podem ser criados adicionando-os a :attr:`GObject.GObject." -"__gsignals__`, um dicionário:" - -#: ../../source/objects.txt:61 -msgid "" -"When a new signal is created, a method handler can also be defined, it will " -"be called each time the signal is emitted. It is called do_signal_name." -msgstr "" -"Quando um novo sinal é criado, um manipulador de método também pode ser " -"definido, ele será chamado toda vez que o sinal for emitido. É chamado " -"do_signal_name." - -#: ../../source/objects.txt:75 -msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " -"object method handler (:meth:`do_my_signal` here) in the first emission " -"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " -"will be invoked in the third emission stage) and :const:`GObject." -"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." -msgstr "" -":const:`GObject.SIGNAL_RUN_FIRST` indica que este sinal invocará o " -"manipulador do método de objeto (:meth:`do_my_signal` aqui) no primeiro " -"estágio de emissão. As alternativas são :const:`GObject.SIGNAL_RUN_LAST` (o " -"manipulador de método será invocado no terceiro estágio de emissão) e :const:" -"`GObject.SIGNAL_RUN_CLEANUP` (invoca o manipulador de método no último " -"estágio de emissão)." - -#: ../../source/objects.txt:81 -msgid "" -"The second part, ``None``, indicates the return type of the signal, usually " -"``None``." -msgstr "" -"A segunda parte, ``None``, indica o tipo de retorno do sinal, geralmente " -"``None``." - -#: ../../source/objects.txt:84 -msgid "" -"``(int,)`` indicates the signal arguments, here, the signal will only take " -"one argument, whose type is int. This argument type list must end with a " -"comma." -msgstr "" -"``(int,)`` indica os argumentos do sinal, aqui, o sinal só receberá um " -"argumento, cujo tipo é int. Essa lista de tipos de argumentos deve terminar " -"com uma vírgula." - -#: ../../source/objects.txt:88 -msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" -msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" - -#: ../../source/objects.txt:97 -msgid "" -"One of GObject's nice features is its generic get/set mechanism for object " -"properties. Each class inherited from :class:`GObject.GObject` can define " -"new properties. Each property has a type which never changes (e.g. str, " -"float, int...). For instance, they are used for :class:`Gtk.Button` where " -"there is a \"label\" property which contains the text of the button." -msgstr "" -"Um dos ótimos recursos do GObject é seu mecanismo get/set genérico para " -"propriedades de objetos. Cada classe herdada de :class:`GObject.GObject` " -"pode definir novas propriedades. Cada propriedade tem um tipo que nunca muda " -"(por exemplo, str, float, int ...). Por exemplo, eles são usados para :class:" -"`Gtk.Button` onde existe uma propriedade \"label\" que contém o texto do " -"botão." - -#: ../../source/objects.txt:104 -msgid "Use existing properties" -msgstr "Use propriedades existentes" - -#: ../../source/objects.txt:106 -msgid "" -"The class :class:`GObject.GObject` provides several useful functions to " -"manage existing properties, :func:`GObject.GObject.get_property` and :func:" -"`GObject.GObject.set_property`." -msgstr "" -"A classe :class:`GObject.GObject` fornece várias funções úteis para " -"gerenciar propriedades existentes, :func:`GObject.GObject.get_property` e :" -"func:`GObject.GObject.set_property`." - -#: ../../source/objects.txt:109 -msgid "" -"Some properties also have functions dedicated to them, called getter and " -"setter. For the property \"label\" of a button, there are two functions to " -"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." -"set_label`." -msgstr "" -"Algumas propriedades também possuem funções dedicadas a elas, chamadas de " -"getter e setter. Para a propriedade \"label\" de um botão, existem duas " -"funções para obter e configurá-las, :func:`Gtk.Button.get_label` e :func:" -"`Gtk.Button.set_label`." - -#: ../../source/objects.txt:114 -msgid "Create new properties" -msgstr "Crie novas propriedades" - -#: ../../source/objects.txt:116 -msgid "" -"A property is defined with a name and a type. Even if Python itself is " -"dynamically typed, you can't change the type of a property once it is " -"defined. A property can be created using :class:`GObject.Property`." -msgstr "" -"Uma propriedade é definida com um nome e um tipo. Mesmo se o próprio Python " -"for digitado dinamicamente, você não poderá alterar o tipo de uma " -"propriedade depois que ela for definida. Uma propriedade pode ser criada " -"usando :class:`GObject.Property`." - -#: ../../source/objects.txt:131 -msgid "" -"Properties can also be read-only, if you want some properties to be readable " -"but not writable. To do so, you can add some flags to the property " -"definition, to control read/write access. Flags are :const:`GObject." -"ParamFlags.READABLE` (only read access for external code), :const:`GObject." -"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." -"READWRITE` (public):" -msgstr "" -"As propriedades também podem ser somente leitura, se você quiser que algumas " -"propriedades sejam legíveis, mas não graváveis. Para fazer isso, você pode " -"adicionar alguns sinalizadores à definição da propriedade, para controlar o " -"acesso de leitura/gravação. Sinalizadores são :const:`GObject.ParamFlags." -"READABLE` (somente acesso de leitura para código externo), :const:`GObject." -"ParamFlags.WRITABLE` (somente acesso de gravação), :const:`GObject." -"ParamFlags.READWRITE` (publico):" - -#: ../../source/objects.txt:146 -msgid "" -"You can also define new read-only properties with a new method decorated " -"with :class:`GObject.Property`:" -msgstr "" -"Você também pode definir novas propriedades somente leitura com um novo " -"método decorado com :class:`GObject.Property`:" - -#: ../../source/objects.txt:162 -msgid "You can get this property using:" -msgstr "Você pode obter essa propriedade usando:" - -#: ../../source/objects.txt:170 -msgid "" -"The API of :class:`GObject.Property` is similar to the builtin :py:func:" -"`property`. You can create property setter in a way similar to Python " -"property:" -msgstr "" -"A API de :class:`GObject.Property` é semelhante ao construído em :py:func:" -"`property`. Você pode criar o setter de propriedades de maneira semelhante à " -"propriedade Python:" - -#: ../../source/objects.txt:191 -msgid "" -"There is also a way to define minimum and maximum values for numbers, using " -"a more verbose form:" -msgstr "" -"Há também uma maneira de definir valores mínimos e máximos para números, " -"usando um formulário mais detalhado:" - -#: ../../source/objects.txt:227 -msgid "" -"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " -"dictionary, and handled in do_get_property and do_set_property." -msgstr "" -"As propriedades devem ser definidas em :attr:`GObject.GObject." -"__gproperties__`, um dicionário e manipulado em do_get_property e " -"do_set_property." - -#: ../../source/objects.txt:231 -msgid "Watch properties" -msgstr "Veja as propriedades" - -#: ../../source/objects.txt:233 -msgid "" -"When a property is modified, a signal is emitted, whose name is \"notify::" -"property-name\":" -msgstr "" -"Quando uma propriedade é modificada, um sinal é emitido, cujo nome é " -"\"notify::property-name\":" - -#: ../../source/objects.txt:248 -msgid "" -"Note that you have to use the canonical property name when connecting to the " -"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " -"instance, for a Python property `foo_bar_baz` you would connect to the " -"signal `notify::foo-bar-baz` using" -msgstr "" -"Note que você tem que usar o nome da propriedade canônica ao se conectar aos " -"sinais de notificação, como explicado em :func:`GObject.Object.signals." -"notify`. Por exemplo, para uma propriedade Python `foo_bar_baz` você " -"conectaria ao sinal `notify::foo-bar-baz` usando" - -#: ../../source/objects.txt:263 -msgid "API" -msgstr "" - -#: ../../source/objects.txt:269 -msgid "Retrieves a property value." -msgstr "Recupera um valor de propriedade." - -#: ../../source/objects.txt:273 -msgid "Set property *property_name* to *value*." -msgstr "Configure a propriedade *property_name* para *valor*." - -#: ../../source/objects.txt:277 -msgid "" -"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " -"is of type ``(int,)``, it must be emitted with::" -msgstr "" -"Emitir sinal *signal_name*. Argumentos de sinal devem seguir, por ex. se o " -"seu sinal é do tipo ``(int,)``, deve ser emitido com::" - -#: ../../source/objects.txt:284 -msgid "" -"This method freezes all the \"notify::\" signals (which are emitted when any " -"property is changed) until the :meth:`thaw_notify` method is called." -msgstr "" -"Este método congela todos os sinais \"notify::\" (que são emitidos quando " -"qualquer propriedade é alterada) até que o método :meth:`thaw_notify` seja " -"chamado." - -#: ../../source/objects.txt:288 -msgid "" -"It recommended to use the *with* statement when calling :meth:" -"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " -"implicitly at the end of the block::" -msgstr "" -"Recomenda-se usar a instrução *with* ao chamar :meth:`freeze_notify`, dessa " -"forma é assegurado que :meth:`thaw_notify` é chamado implicitamente no final " -"do bloco::" - -#: ../../source/objects.txt:298 -msgid "" -"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." -msgstr "" -"Descongele todos os sinais \"notify::\" que foram descongelados por :meth:" -"`freeze_notify`." - -#: ../../source/objects.txt:300 -msgid "" -"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" -"`freeze_notify` together with the *with* statement." -msgstr "" -"Recomenda-se não chamar :meth:`thaw_notify` explicitamente mas use :meth:" -"`freeze_notify` juntamente com a instrução *with*." - -#: ../../source/objects.txt:305 -msgid "" -"Blocks a handler of an instance so it will not be called during any signal " -"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " -"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " -"signal handler has to be unblocked exactly the same amount of times it has " -"been blocked before to become active again." -msgstr "" -"Bloqueia um manipulador de uma instância para que ele não seja chamado " -"durante qualquer emissão de sinal, a menos que :meth:`handler_unblock` seja " -"chamado para aquele *handler_id*. Assim, \"bloqueando\" um manipulador de " -"sinal significa desativá-lo temporariamente, um manipulador de sinal precisa " -"ser desbloqueado exatamente na mesma quantidade de vezes que foi bloqueado " -"antes de se tornar ativo novamente." - -#: ../../source/objects.txt:311 -msgid "" -"It is recommended to use :meth:`handler_block` in conjunction with the " -"*with* statement which will call :meth:`handler_unblock` implicitly at the " -"end of the block::" -msgstr "" -"Recomenda-se usar :meth:`handler_block` em conjunto com a instrução *with* " -"que irá chamar :meth:`handler_unblock` implicitamente no final do bloco::" - -#: ../../source/objects.txt:321 -msgid "" -"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " -"during signal emissions and will not be invoked until it has been unblocked " -"exactly the amount of times it has been blocked before." -msgstr "" -"Desfaz o efeito de :meth:`handler_block`. Um manipulador bloqueado é " -"ignorado durante as emissões do sinal e não será chamado até que tenha sido " -"desbloqueado exatamente a quantidade de vezes que foi bloqueado antes." - -#: ../../source/objects.txt:325 -msgid "" -"It is recommended to not call :meth:`handler_unblock` explicitly but use :" -"meth:`handler_block` together with the *with* statement." -msgstr "" -"É recomendado não chamar explicitamente :meth:`handler_unblock` mas use :" -"meth:`handler_block` junto com a instrução *with*." - -#: ../../source/objects.txt:330 -msgid "A dictionary where inherited class can define new signals." -msgstr "Um dicionário onde a classe herdada pode definir novos sinais." - -#: ../../source/objects.txt:332 -msgid "" -"Each element in the dictionary is a new signal. The key is the signal name. " -"The value is a tuple, with the form::" -msgstr "" -"Cada elemento no dicionário é um novo sinal. A chave é o nome do sinal. O " -"valor é uma tupla, com o formato:" - -#: ../../source/objects.txt:337 -msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." -"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " -"return type of the signal. ``(int,)`` is the list of the parameters of the " -"signal, it must end with a comma." -msgstr "" -":const:`GObject.SIGNAL_RUN_FIRST` pode ser substituído por :const:`GObject." -"SIGNAL_RUN_LAST` ou :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` é o tipo " -"de retorno do sinal. ``(int,)`` é a lista dos parâmetros do sinal, deve " -"terminar com uma vírgula." - -#: ../../source/objects.txt:346 -msgid "" -"The :attr:`__gproperties__` dictionary is a class property where you define " -"the properties of your object. This is not the recommend way to define new " -"properties, the method written above is much less verbose. The benefits of " -"this method is that a property can be defined with more settings, like the " -"minimum or the maximum for numbers." -msgstr "" -"O dicionário :attr:`__gproperties__` é uma propriedade de classe onde você " -"define as propriedades do seu objeto. Esta não é a maneira recomendada de " -"definir novas propriedades, o método escrito acima é muito menos detalhado. " -"Os benefícios desse método é que uma propriedade pode ser definida com mais " -"configurações, como o mínimo ou o máximo para números." - -#: ../../source/objects.txt:352 -msgid "The key is the name of the property" -msgstr "A chave é o nome da propriedade" - -#: ../../source/objects.txt:354 -msgid "" -"The value is a tuple which describe the property. The number of elements of " -"this tuple depends on its first element but the tuple will always contain at " -"least the following items:" -msgstr "" -"O valor é uma tupla que descreve a propriedade. O número de elementos dessa " -"tupla depende de seu primeiro elemento, mas a tupla sempre conterá pelo " -"menos os seguintes itens:" - -#: ../../source/objects.txt:358 -msgid "The first element is the property's type (e.g. ``int``, ``float``...)." -msgstr "" -"O primeiro elemento é o tipo da propriedade (por exemplo, ``int``, " -"``float``...)." - -#: ../../source/objects.txt:360 -msgid "" -"The second element is the property's nick name, which is a string with a " -"short description of the property. This is generally used by programs with " -"strong introspection capabilities, like the graphical user interface builder " -"`Glade`_." -msgstr "" -"O segundo elemento é o apelido da propriedade, que é uma string com uma " -"breve descrição da propriedade. Isso geralmente é usado por programas com " -"fortes recursos de introspecção, como o construtor de interface gráfica de " -"usuário `Glade`_." - -#: ../../source/objects.txt:365 -msgid "" -"The third one is the property's description or blurb, which is another " -"string with a longer description of the property. Also used by `Glade`_ and " -"similar programs." -msgstr "" -"A terceira é a descrição da propriedade ou sinopse, que é outra string com " -"uma descrição mais longa da propriedade. Também usado pelo `Glade`_ e " -"programas similares." - -#: ../../source/objects.txt:369 -msgid "" -"The last one (which is not necessarily the forth one as we will see later) " -"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." -"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." -msgstr "" -"O último (que não é necessariamente o último, como veremos mais adiante) é o " -"sinalizador da propriedade :const:`GObject.PARAM_READABLE`, :const:`GObject." -"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." - -#: ../../source/objects.txt:373 -msgid "" -"The absolute length of the tuple depends on the property type (the first " -"element of the tuple). Thus we have the following situations:" -msgstr "" -"O comprimento absoluto da tupla depende do tipo de propriedade (o primeiro " -"elemento da tupla). Assim, temos as seguintes situações:" - -#: ../../source/objects.txt:376 -msgid "" -"If the type is ``bool`` or ``str``, the forth element is the default value " -"of the property." -msgstr "" -"Se o tipo for ``bool`` ou ``str``, o quarto elemento é o valor padrão da " -"propriedade." - -#: ../../source/objects.txt:379 -msgid "" -"If the type is ``int`` or ``float``, the forth element is the minimum " -"accepted value, the fifth element is the maximum accepted value and the " -"sixth element is the default value." -msgstr "" -"Se o tipo for ``int`` ou ``float``, o quarto elemento é o valor mínimo " -"aceito, o quinto elemento é o valor máximo aceito e o sexto elemento é o " -"valor padrão." - -#: ../../source/objects.txt:383 -msgid "If the type is not one of these, there is no extra element." -msgstr "Se o tipo não for um desses, não há elemento extra." - -#: ../../source/objects.txt:388 -msgid "Invoke the object method handler in the first emission stage." -msgstr "" -"Invoque o manipulador de método de objeto no primeiro estágio de emissão." - -#: ../../source/objects.txt:392 -msgid "Invoke the object method handler in the third emission stage." -msgstr "" -"Invoque o manipulador de método de objeto no terceiro estágio de emissão." - -#: ../../source/objects.txt:396 -msgid "Invoke the object method handler in the last emission stage." -msgstr "" -"Invoque o manipulador do método de objeto no último estágio de emissão." - -#: ../../source/objects.txt:400 -msgid "The property is readable." -msgstr "A propriedade é legível." - -#: ../../source/objects.txt:404 -msgid "The property is writable." -msgstr "A propriedade é gravável." - -#: ../../source/objects.txt:408 -msgid "The property is readable and writable." -msgstr "A propriedade é legível e gravável." - -#: ../../source/popover.txt:2 -msgid "Popovers" -msgstr "" - -#: ../../source/popover.txt:4 -msgid "" -"The :class:`Gtk.Popover` is a seperate window used for displaying additional " -"information and are often used as a part of button menus and context menus. " -"Their uses are similar to those of dialog windows with the advantage of " -"being less disruptive and having a connection with the widget the popover is " -"pointing to. Popovers have are visually connected to a related widget with a " -"small triangle." -msgstr "" -"O :class:`Gtk.Popover` é uma janela separada usada para exibir informações " -"adicionais e é frequentemente usada como parte de menus de botão e menus de " -"contexto. Seus usos são semelhantes aos das janelas de diálogo, com a " -"vantagem de ser menos prejudicial e ter uma conexão com o widget para o qual " -"o popover está apontando. Os popovers estão visualmente conectados a um " -"widget relacionado com um pequeno triângulo." - -#: ../../source/popover.txt:10 -msgid "" -"ApPopover can be created with :class:`Gtk.Popover`; for opening the popover " -"use :meth:`Gtk.Widget.show_all`." -msgstr "" -"O ApPopover pode ser criado com :class:`Gtk.Popover`; para abrir o popover " -"use :meth:`Gtk.Widget.show_all`." - -#: ../../source/popover.txt:14 -msgid "Custom Popover" -msgstr "Popover Personalizado" - -#: ../../source/popover.txt:16 -msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." -msgstr "" -"Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." -"add`." - -#: ../../source/popover.txt:27 -msgid "Menu Popover" -msgstr "" - -#: ../../source/popover.txt:29 -msgid "" -"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." -"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." -"Popover.bind_model`." -msgstr "" -"Um popover pode ser criado a partir de :class:`Gio.MenuModel` usando :meth:" -"`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" -"`Gtk.Popover.bind_model`." - -#: ../../source/popover.txt:43 -msgid "https://developer.gnome.org/hig/stable/popovers.html.en" -msgstr "" - -#: ../../source/progressbar.txt:2 -msgid "ProgressBar" -msgstr "Barra de Progresso" - -#: ../../source/progressbar.txt:4 -msgid "" -"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " -"long running operation. It provides a visual clue that processing is " -"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " -"*percentage mode* and *activity mode*." -msgstr "" -"O :class:`Gtk.ProgressBar` é normalmente usado para exibir o progresso de " -"uma operação longa. Ele fornece uma pista visual de que o processamento está " -"em andamento. O :class:`Gtk.ProgressBar` pode ser usado em dois modos " -"diferentes: *modo de porcentagem* e *modo de atividade*." - -#: ../../source/progressbar.txt:9 -msgid "" -"When an application can determine how much work needs to take place (e.g. " -"read a fixed number of bytes from a file) and can monitor its progress, it " -"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " -"a growing bar indicating the percentage of the work that has been completed. " -"In this mode, the application is required to call :meth:`Gtk.ProgressBar." -"set_fraction` periodically to update the progress bar, passing a float " -"between 0 and 1 to provide the new percentage value." -msgstr "" -"Quando uma aplicação pode determinar quanto trabalho precisa ocorrer (por " -"exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu " -"progresso, ela pode usar :class:`Gtk.ProgressBar` no modo *percentage* e o " -"usuário vê uma barra crescente indicando a porcentagem do trabalho que foi " -"concluído. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." -"ProgressBar.set_fraction` periodicamente para atualizar a barra de " -"progresso, passando um float entre 0 e 1 para fornecer o novo valor " -"percentual." - -#: ../../source/progressbar.txt:17 -msgid "" -"When an application has no accurate way of knowing the amount of work to do, " -"it can use *activity mode*, which shows activity by a block moving back and " -"forth within the progress area. In this mode, the application is required to " -"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " -"You can also choose the step size, with the :meth:`Gtk.ProgressBar." -"set_pulse_step` method." -msgstr "" -"Quando um aplicativo não tem uma maneira precisa de saber a quantidade de " -"trabalho a ser feito, ele pode usar o *modo de atividade*, que mostra a " -"atividade de um bloco se movendo para frente e para trás na área de " -"progresso. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." -"ProgressBar.pulse` periodicamente para atualizar a barra de progresso. Você " -"também pode escolher o tamanho do passo, com o método :meth:`Gtk.ProgressBar." -"set_pulse_step`." - -#: ../../source/progressbar.txt:24 -msgid "" -"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " -"you can change it to a vertical progress bar by using the :meth:`Gtk." -"ProgressBar.set_orientation` method. Changing the direction the progress bar " -"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." -"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." -"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." -msgstr "" -"Por padrão, :class:`Gtk.ProgressBar` é horizontal e da esquerda para a " -"direita, mas você pode alterá-lo para uma barra de progresso vertical usando " -"o método :meth:`Gtk.ProgressBar.set_orientation`. Mudar a direção da barra " -"de progresso pode ser feito usando :meth:`Gtk.ProgressBar.set_inverted`. :" -"class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " -"chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." -"set_show_text`." - -#: ../../source/spinner.txt:2 -msgid "Spinner" -msgstr "" - -#: ../../source/spinner.txt:4 -msgid "" -"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " -"often used as an alternative to a :class:`GtkProgressBar` for displaying " -"indefinite activity, instead of actual progress." -msgstr "" -"O :class:`Gtk.Spinner` exibe uma animação giratória do tamanho de um ícone. " -"É frequentemente usado como uma alternativa a :class:`GtkProgressBar` para " -"exibir atividade indefinida, em vez de progresso real." - -#: ../../source/spinner.txt:8 -msgid "" -"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" -"`Gtk.Spinner.stop`." -msgstr "" -"Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" -"meth:`Gtk.Spinner.stop`." - -# e121e6594e0e4da9a1621a2377ef4958 -#: ../source/stock.txt:4 -msgid "Stock Items" -msgstr "" - -# 606b231d71674442a3f5d52d748963fa -#: ../source/stock.txt:6 -msgid "" -"Stock items represent commonly-used menu or toolbar items such as \"Open\" " -"or \"Exit\". Each stock item is identified by a stock ID; stock IDs are just " -"strings, but constants such as :attr:`Gtk.STOCK_OPEN` are provided to avoid " -"typing mistakes in the strings." -msgstr "" - -# 414f2abe421e4978b47ca5427fb3f106 -# ddb9102f827b473eae086c933a8988da -# f116631764a1416e8d65f881b21f294d -# d6cefcc39cf64f0490a9ac6344093a1f -# 68e79a9579a9477ab9cc07c8831ac586 -# e7154d34aab04729a7c0b6ec84d8997f -# a4ad7d8ce49541d5aef4ca38acda2f75 -# 7205f6fbc7614699813f09ad4ad41b0d -# c7c278f8e45f4a0e90dd8e9f4efba75a -# f731da1a0b0d4a4f90f214d0e3068fad -# 3dcc064472ce433493951bdc676a1de1 -# 401ce8dc69d64ed2979b2c2bbabca805 -# e381d63cbcbb477bb7f54fc8fdedded0 -# a82fab50ef9a490aafffe735117b1b0e -# 4311fbff8eb04d1ababc0ea72a17877b -# 32791b18cb8048b598a5372d03433b5a -#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 -#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 -#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 -#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 -#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 -#: ../source/stock.txt:495 -msgid "LTR variant:" -msgstr "" - -# 856d301cc54844699657d94b81c62f38 -# c828bd161d3947f48d164903af1c15b1 -# fcd887eb429b406d87b598cee2af6456 -# 540c4c3bfb5549b2965d263b6adee0ff -# 8d3280e44d664904a253934d4a763ca8 -# dd41de5058984509aada4b41e5d15292 -# 2752da4a0eee46f49d1c1a8b212cb842 -# 7c3f745178dc46f5b49ef867c7d54c1c -# 7488f736d91c4f109c0b7f17ef0bc955 -# f592f6173a1e4362a78439441cf06a98 -# 3da43acde56548a190140395393f3f7a -# be82f292d16a4b86812d45ff60b39cc1 -# dc857a9abef7449db73e5eefb7bc51ac -# 75afb699f83c480e92f2398247b3bee9 -# b0643da317004916aabc5e5768a55df7 -# 5d2580d604fa4db980345d496d6d95d1 -#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 -#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 -#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 -#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 -#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 -#: ../source/stock.txt:499 -msgid "RTL variant:" -msgstr "" - -#: ../../source/textview.txt:2 -msgid "Multiline Text Editor" -msgstr "Editor de Texto Multilinha" - -#: ../../source/textview.txt:4 -msgid "" -"The :class:`Gtk.TextView` widget can be used to display and edit large " -"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" -"view design. In this case the :class:`Gtk.TextBuffer` is the model which " -"represents the text being edited. This allows two or more :class:`Gtk." -"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " -"those text buffers to be displayed slightly differently. Or you could " -"maintain several text buffers and choose to display each one at different " -"times in the same :class:`Gtk.TextView` widget." -msgstr "" -"O widget :class:`Gtk.TextView` pode ser usado para exibir e editar grandes " -"quantidades de texto formatado. Como o :class:`Gtk.TreeView`, ele possui um " -"design de modelo/visualização. Neste caso, o :class:`Gtk.TextBuffer` é o " -"modelo que representa o texto que está sendo editado. Isto permite que dois " -"ou mais widgets :class:`Gtk.TextView` compartilhem o mesmo :class:`Gtk." -"TextBuffer`, e permite que os buffers de texto sejam exibidos de forma " -"ligeiramente diferente. Ou você pode manter vários buffers de texto e optar " -"por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." -"TextView`." - -#: ../../source/textview.txt:15 -msgid "" -"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " -"and delete textual data. They are commonly used to edit multiple lines of " -"text. When creating a :class:`Gtk.TextView` it contains its own default :" -"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." -"get_buffer` method." -msgstr "" -"O :class:`Gtk.TextView` é o frontend com o qual o usuário pode adicionar, " -"editar e excluir dados textuais. Eles são comumente usados para editar " -"várias linhas de texto. Ao criar um :class:`Gtk.TextView` ele contém seu " -"próprio padrão :class:`Gtk.TextBuffer`, que você pode acessar através do " -"método :meth:`Gtk.TextView.get_buffer`." - -#: ../../source/textview.txt:21 -msgid "" -"By default, text can be added, edited and removed from the :class:`Gtk." -"TextView`. You can disable this by calling :meth:`Gtk.TextView." -"set_editable`. If the text is not editable, you usually want to hide the " -"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " -"cases it may be useful to set the justification of the text with :meth:`Gtk." -"TextView.set_justification`. The text can be displayed at the left edge, (:" -"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." -"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " -"the complete width (:attr:`Gtk.Justification.FILL`)." -msgstr "" -"Por padrão, o texto pode ser adicionado, editado e removido da :class:`Gtk." -"TextView`. Você pode desabilitar isso chamando :meth:`Gtk.TextView." -"set_editable`. Se o texto não for editável, você geralmente deseja ocultar o " -"cursor de texto com :meth:`Gtk.TextView.set_cursor_visible` também. Em " -"alguns casos, pode ser útil definir a justificação do texto com :meth:`Gtk." -"TextView.set_justification`. O texto pode ser exibido na borda esquerda, (:" -"attr:`Gtk.Justification.LEFT`), na extremidade direita (:attr:`Gtk." -"Justification.RIGHT`), centralizado (:attr:`Gtk.Justification.CENTER`), ou " -"distribuído em toda a largura (:attr:`Gtk.Justification.FILL`)." - -#: ../../source/textview.txt:31 -msgid "" -"Another default setting of the :class:`Gtk.TextView` widget is long lines of " -"text will continue horizontally until a break is entered. To wrap the text " -"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." -"set_wrap_mode`." -msgstr "" -"Outra configuração padrão do widget :class:`Gtk.TextView` é que linhas " -"longas de texto continuarão horizontalmente até que uma quebra seja " -"inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " -"chame :meth:`Gtk.TextView.set_wrap_mode`." - -#: ../../source/textview.txt:38 +#: ../../source/application.txt:38 msgid "" -"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " -"and is used to hold whatever text is being displayed in the :class:`Gtk." -"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." -"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " -"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." -"TextIter`. An iterator represents a position between two characters in the " -"text buffer. Iterators are not valid indefinitely; whenever the buffer is " -"modified in a way that affects the contents of the buffer, all outstanding " -"iterators become invalid." +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." msgstr "" -"O :class:`Gtk.TextBuffer` é o núcleo do widget :class:`Gtk.TextView` e é " -"usado para armazenar qualquer texto que esteja sendo exibido na :class:`Gtk." -"TextView`. Definir e recuperar o conteúdo é possível com :meth:`Gtk." -"TextBuffer.set_text` e :meth:`Gtk.TextBuffer.get_text`. No entanto, a maior " -"parte da manipulação de texto é realizada com *iteradores*, representados " -"por um :class:`Gtk.TextIter`. Um iterador representa uma posição entre dois " -"caracteres no buffer de texto. Iteradores não são válidos indefinidamente; " -"sempre que o buffer é modificado de uma maneira que afeta o conteúdo do " -"buffer, todos os iteradores pendentes se tornam inválidos." +"Seus menus devem ser definidos em XML usando :class:`Gio.Menu` e referenciam " +"as ações mencionadas anteriormente que você definiu. :class:`Gtk." +"Application` permite que você defina um menu via :meth:`Gtk.Application." +"set_app_menu()` ou :meth:`Gtk.Application.set_menubar()`. Se você faz uso " +"de :class:`Gio.Resource` isto pode usar automaticamente o menu correto " +"baseado na plataforma, caso contrário você pode configurá-los manualmente. " +"Um exemplo detalhado é mostrado abaixo." -#: ../../source/textview.txt:48 -msgid "" -"Because of this, iterators can't be used to preserve positions across buffer " -"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " -"buffer contains two built-in marks; an \"insert\" mark (which is the " -"position of the cursor) and the \"selection_bound\" mark. Both of them can " -"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectively. By default, the location of " -"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" -"`Gtk.TextMark.set_visible`." -msgstr "" -"Por causa disso, os iteradores não podem ser usados para preservar posições " -"nas modificações do buffer. Para preservar uma posição, use :class:`Gtk." -"TextMark`. Um buffer de texto contém duas marcas internas; uma marca \"insert" -"\" (que é a posição do cursor) e a marca \"selection_bound\". Ambos podem " -"ser recuperados usando :meth:`Gtk.TextBuffer.get_insert` e :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectivamente. Por padrão, a localização " -"de um :class:`Gtk.TextMark` não é mostrada. Isso pode ser alterado chamando :" -"meth:`Gtk.TextMark.set_visible`." +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "Linha de comando" -#: ../../source/textview.txt:56 +#: ../../source/application.txt:48 msgid "" -"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" -"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " -"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " -"returns an iterator pointing past the last valid character. Retrieving the " -"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." -"get_selection_bounds`." +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." msgstr "" -"Existem muitos métodos para recuperar um :class:`Gtk.TextIter`. Por " -"exemplo, :meth:`Gtk.TextBuffer.get_start_iter` retorna um iterador apontando " -"para a primeira posição no buffer de texto, enquanto :meth:`Gtk.TextBuffer." -"get_end_iter` retorna um iterador apontando após o último caractere válido. " -"A recuperação dos limites do texto selecionado pode ser obtida chamando :" -"meth:`Gtk.TextBuffer.get_selection_bounds`." +"Ao criar seu aplicativo, ele recebe uma propriedade de flag de :class:`Gio." +"ApplicationFlags`. Usando isso, você pode permitir que ele manipule tudo " +"sozinho ou tenha um comportamento mais personalizado." -#: ../../source/textview.txt:63 +#: ../../source/application.txt:51 msgid "" -"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " -"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " -"inserts text wherever the cursor may be currently positioned. To remove " -"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." msgstr "" -"Para inserir texto em uma posição específica use :meth:`Gtk.TextBuffer." -"insert`. Outro método útil é :meth:`Gtk.TextBuffer.insert_at_cursor` que " -"insere texto onde quer que o cursor esteja posicionado no momento. Para " -"remover partes do buffer de texto, use :meth:`Gtk.TextBuffer.delete`." +"Você pode usar o `HANDLES_COMMAND_LINE` para permitir um comportamento " +"customizado em :meth:`Gio.Application.do_command_line()`. Em combinação com :" +"meth:`Gio.Application.add_main_option()` para adicionar opções " +"personalizadas." -#: ../../source/textview.txt:68 +#: ../../source/application.txt:54 msgid "" -"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " -"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." -"backward_search`. The start and end iters are used as the starting point of " -"the search and move forwards/backwards depending on requirements." -msgstr "" -"Além disso, :class:`Gtk.TextIter` pode ser usado para localizar " -"correspondências textuais no buffer usando :meth:`Gtk.TextIter." -"forward_search` e :meth:`Gtk.TextIter.backward_search`. Os iters inicial e " -"final são usados como ponto de partida da pesquisa e avançam/retrocedem " -"dependendo dos requisitos." - -#: ../../source/textview.txt:75 -msgid "Tags" +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." msgstr "" +"Usar `HANDLES_OPEN` fará o trabalho de simplesmente pegar argumentos de " +"arquivo para você e permitir que você os manipule em :meth:`Gio.Application." +"do_open()`." -#: ../../source/textview.txt:77 +#: ../../source/application.txt:57 msgid "" -"Text in a buffer can be marked with tags. A tag is an attribute that can be " -"applied to some range of text. For example, a tag might be called \"bold\" " -"and make the text inside the tag bold. However, the tag concept is more " -"general than that; tags don't have to affect appearance. They can instead " -"affect the behaviour of mouse and key presses, \"lock\" a range of text so " -"the user can't edit it, or countless other things. A tag is represented by " -"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " -"any number of text ranges in any number of buffers." +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." msgstr "" -"O texto em um buffer pode ser marcado com tags. Uma tag é um atributo que " -"pode ser aplicado a um intervalo de texto. Por exemplo, uma tag pode ser " -"chamada de \"negrito\" e tornar o texto dentro da tag em negrito. No " -"entanto, o conceito de tag é mais geral do que isso; as tags não precisam " -"afetar a aparência. Eles podem afetar o comportamento de pressionamentos de " -"mouse e de tecla, \"bloquear\" um intervalo de texto para que o usuário não " -"possa editá-lo ou inúmeras outras coisas. Uma tag é representada por um " -"objeto :class:`Gtk.TextTag`. Um :class:`Gtk.TextTag` pode ser aplicado a " -"qualquer número de intervalos de texto em qualquer número de buffers." +"Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " +"existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." -#: ../../source/textview.txt:86 -msgid "" -"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " -"of tags that can be used together. Each buffer has one tag table associated " -"with it; only tags from that tag table can be used with the buffer. A single " -"tag table can be shared between multiple buffers, however." -msgstr "" -"Cada tag é armazenada em :class:`Gtk.TextTagTable`. Uma tabela de tags " -"define um conjunto de tags que podem ser usadas juntas. Cada buffer tem uma " -"tabela de tags associada a ele; somente tags dessa tabela de tags podem ser " -"usadas com o buffer. No entanto, uma única tabela de tags pode ser " -"compartilhada entre vários buffers." +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "https://wiki.gnome.org/HowDoI/GtkApplication" -#: ../../source/textview.txt:91 -msgid "" -"To specify that some text in the buffer should have specific formatting, you " -"must define a tag to hold that formatting information, and then apply that " -"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" -"`Gtk.TextBuffer.apply_tag`::" -msgstr "" -"Para especificar que algum texto no buffer deve ter uma formatação " -"específica, você deve definir uma tag para manter as informações de " -"formatação e, em seguida, aplicar essa tag à região do texto usando :meth:" -"`Gtk.TextBuffer.create_tag` e :meth:`Gtk.TextBuffer.apply_tag`::" +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "https://wiki.gnome.org/HowDoI/GAction" -#: ../../source/textview.txt:99 -msgid "The following are some of the common styles applied to text:" -msgstr "A seguir estão alguns dos estilos comuns aplicados ao texto:" +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "https://wiki.gnome.org/HowDoI/ApplicationMenu" -# nome da propriedade trocado -#: ../../source/textview.txt:101 -msgid "Background colour (\"foreground\" property)" -msgstr "Cor de fundo (propriedade \"background\")" +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "https://wiki.gnome.org/HowDoI/GMenu" -#: ../../source/textview.txt:102 -msgid "Foreground colour (\"background\" property)" -msgstr "Cor de primeiro plano (propriedade \"foreground\")" +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "Começando" -#: ../../source/textview.txt:103 -msgid "Underline (\"underline\" property)" -msgstr "Sublinhado (propriedade \"underline\")" +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "Exemplo simples" -#: ../../source/textview.txt:104 -msgid "Bold (\"weight\" property)" -msgstr "Negrito (propriedade \"weight\")" +#: ../../source/introduction.txt:9 +msgid "" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." +msgstr "" +"Para começar com o nosso tutorial, criamos o programa mais simples possível. " +"Este programa irá criar uma janela vazia de 200×200 pixels." -#: ../../source/textview.txt:105 -msgid "Italics (\"style\" property)" -msgstr "Itálico (propriedade \"style\")" +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "Vamos agora explicar cada linha do exemplo." -#: ../../source/textview.txt:106 -msgid "Strikethrough (\"strikethrough\" property)" -msgstr "Tachado (propriedade \"strikethrough\")" +#: ../../source/introduction.txt:22 +msgid "" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +msgstr "" +"No começo, temos que importar o módulo Gtk para poder acessar as classes e " +"funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK" +"+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos " +"o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, " +"que é o propósito da declaração ``gi.require_version('Gtk', '3.0')``." -#: ../../source/textview.txt:107 -msgid "Justification (\"justification\" property)" -msgstr "Justificação (propriedade de \"justification\")" +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "A próxima linha cria uma janela vazia." -#: ../../source/textview.txt:108 -msgid "Size (\"size\" and \"size-points\" properties)" -msgstr "Tamanho (propriedades \"size\" e \"size-points\")" +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" +"Seguido conectando-se ao evento de exclusão da janela para garantir que o " +"aplicativo seja encerrado se clicarmos no *x* para fechar a janela." -#: ../../source/textview.txt:109 -msgid "Text wrapping (\"wrap-mode\" property)" -msgstr "Quebra automática de texto (propriedade \"wrap-mode\")" +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "Na próxima etapa, exibimos a janela." -#: ../../source/textview.txt:111 +#: ../../source/introduction.txt:45 msgid "" -"You can also delete particular tags later using :meth:`Gtk.TextBuffer." -"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." -"TextBuffer.remove_all_tags`." +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 6)." msgstr "" -"Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." -"TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " -"chamando :meth:`Gtk.TextBuffer.remove_all_tags`." +"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando " +"a janela é fechada (veja a linha 6)." -#: ../../source/treeview.txt:2 -msgid "Tree and List Widgets" -msgstr "Widgets de Árvore e Lista" +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" +"Para executar o programa, abra um terminal, mude para o diretório do arquivo " +"e digite::" -#: ../../source/treeview.txt:4 +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "Exemplo estendido" + +#: ../../source/introduction.txt:58 msgid "" -"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " -"way of displaying data. They are used in conjunction with a :class:`Gtk." -"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " -"manipulating data in many ways, including:" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." msgstr "" -"A :class:`Gtk.TreeView` e seus widgets associados são uma maneira " -"extremamente poderosa de exibir dados. Eles são usados em conjunto com um :" -"class:`Gtk.ListStore` ou :class:`Gtk.TreeStore` e fornecem uma maneira de " -"exibir e manipular dados de várias maneiras, incluindo:" +"Para algo um pouco mais útil, aqui está a versão PyGObject do programa " +"clássico “Hello World”." -#: ../../source/treeview.txt:9 -msgid "Automatically updates when data added, removed or edited" +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." msgstr "" -"Atualiza automaticamente quando os dados são adicionados, removidos ou " -"editados" +"Este exemplo difere do exemplo simples, pois subclassificamos :class:`Gtk." +"Window` para definir nossa própria classe :class:`MyWindow`." -#: ../../source/treeview.txt:10 -msgid "Drag and drop support" -msgstr "Suporte a Arrastar e Soltar" +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" +"No construtor da classe, temos que chamar o construtor da superclasse. Além " +"disso, dizemos para definir o valor da propriedade `title` como `Hello " +"World`." -#: ../../source/treeview.txt:11 -msgid "Sorting of data" -msgstr "Classificação de dados" +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" +"As próximas três linhas são usadas para criar um widget de botão, conectar " +"ao seu sinal `clicked` e adicioná-lo como filho à janela de nível superior." -#: ../../source/treeview.txt:12 -msgid "Support embedding widgets such as check boxes, progress bars, etc." +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." msgstr "" -"Suporte a incorporação de widgets, como caixas de seleção, barras de " -"progresso, etc." +"Assim, o método :meth:`on_button_clicked` será chamado se você clicar no " +"botão." -#: ../../source/treeview.txt:13 -msgid "Reorderable and resizable columns" -msgstr "Colunas reordenáveis e redimensionáveis" +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" +"O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " +"invés de criar uma instância da classe genérica :class:`Gtk.Window`, criamos " +"uma instância de :class:`MyWindow`." -#: ../../source/treeview.txt:14 -msgid "Filtering of data" -msgstr "Filtragem de dados" +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "Objetos" -#: ../../source/treeview.txt:16 +#: ../../source/objects.txt:6 msgid "" -"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " -"It is often difficult for beginner developers to be able to utilize it " -"correctly due to the number of methods which are required." +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." msgstr "" -"Com o poder e a flexibilidade de um :class:`Gtk.TreeView` vem a " -"complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " -"capazes de utilizá-lo corretamente devido ao número de métodos necessários." +"O GObject é o tipo fundamental que fornece os atributos e métodos comuns " +"para todos os tipos de objeto no GTK+, no Pango e em outras bibliotecas " +"baseadas no GObject. A classe :class:`GObject.GObject` fornece métodos para " +"construção e destruição de objetos, métodos de acesso a propriedades e " +"suporte a sinais." -#: ../../source/treeview.txt:22 +#: ../../source/objects.txt:11 msgid "" -"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " -"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " -"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " -"the same underlying data to be displayed and edited in 2 different ways at " -"the same time. Or the 2 Views might display different columns from the same " -"Model data, in the same way that 2 SQL queries (or \"views\") might show " -"different fields from the same database table." +"This section will introduce some important aspects about the GObject " +"implementation in Python." msgstr "" -"Cada :class:`Gtk.TreeView` possui um :class:`Gtk.TreeModel`, que contém os " -"dados exibidos pelo TreeView. Cada :class:`Gtk.TreeModel` pode ser usado por " -"mais de um :class:`Gtk.TreeView`. Por exemplo, isso permite que os mesmos " -"dados subjacentes sejam exibidos e editados de duas maneiras diferentes ao " -"mesmo tempo. Ou os 2 modos de exibição podem exibir colunas diferentes dos " -"mesmos dados do modelo, da mesma forma que duas consultas SQL (ou " -"\"visualizações\") podem mostrar campos diferentes da mesma tabela de banco " -"de dados." +"Esta seção apresentará alguns aspectos importantes sobre a implementação do " +"GObject no Python." -#: ../../source/treeview.txt:30 +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "Herdar de GObject.GObject" + +#: ../../source/objects.txt:17 msgid "" -"Although you can theoretically implement your own Model, you will normally " -"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " -"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " -"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " -"each row may have child rows." +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." msgstr "" -"Embora você possa teoricamente implementar seu próprio Modelo, você " -"normalmente usará as classes de modelo :class:`Gtk.ListStore` ou :class:`Gtk." -"TreeStore`. :class:`Gtk.ListStore` contém linhas simples de dados, e cada " -"linha não tem filhos, enquanto :class:`Gtk.TreeStore` contém linhas de " -"dados, e cada linha pode ter linhas filhas." +"Um GObject nativo é acessível via :class:`GObject.GObject`. É raramente " +"instanciado diretamente, geralmente usamos classes herdadas. A :class:`Gtk." +"Widget` é uma classe herdada de um :class:`GObject.GObject`. Pode ser " +"interessante criar uma classe herdada para criar um novo widget, como uma " +"caixa de diálogo de configurações." -#: ../../source/treeview.txt:36 +#: ../../source/objects.txt:22 msgid "" -"When constructing a model you have to specify the data types for each column " -"the model holds." +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" msgstr "" -"Ao construir um modelo, você deve especificar os tipos de dados para cada " -"coluna que o modelo contém." +"Para herdar de :class:`GObject.GObject`, você deve chamar :meth:`GObject." +"GObject.__init__` em seu construtor (se a classe herdar de :class:`Gtk." +"Button`, deve chamar :func:`Gtk.Button.__init__` por exemplo), como no " +"exemplo abaixo:" -#: ../../source/treeview.txt:43 +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "Sinais" + +#: ../../source/objects.txt:39 msgid "" -"This creates a list store with three columns, two string columns, and a " -"float column." +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." msgstr "" -"Isso cria um armazenamento de lista com três colunas, duas colunas de string " -"e uma coluna flutuante." +"Os sinais conectam eventos específicos de aplicativos arbitrários com " +"qualquer número de ouvintes. Por exemplo, no GTK+, cada evento de usuário " +"(pressionamento de tecla ou mouse) é recebido do servidor X e gera um evento " +"GTK+ sob a forma de uma emissão de sinal em uma determinada instância de " +"objeto." + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" +"Cada sinal é registrado no sistema de tipos junto com o tipo no qual ele " +"pode ser emitido: os usuários do tipo são conectados ao sinal em uma " +"determinada instância de tipo quando registram uma função a ser invocada na " +"emissão do sinal. Os usuários também podem emitir o sinal sozinhos ou " +"interromper a emissão do sinal de dentro de uma das funções conectadas ao " +"sinal." + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "Receba sinais" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "Veja :ref:`signals`" -#: ../../source/treeview.txt:46 -msgid "" -"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" -"`Gtk.TreeStore.append`, depending upon which sort of model was created." -msgstr "" -"A adição de dados ao modelo é feita usando :meth:`Gtk.ListStore.append` ou :" -"meth:`Gtk.TreeStore.append`, dependendo de qual tipo de modelo foi criado." +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "Crie novos sinais" -#: ../../source/treeview.txt:54 +#: ../../source/objects.txt:58 msgid "" -"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " -"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " -"by calling :meth:`Gtk.TreeModel.get_iter`." +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" msgstr "" -"Ambos os métodos retornam uma instância :class:`Gtk.TreeIter`, que aponta " -"para a localização da linha recém-inserida. Você pode recuperar um :class:" -"`Gtk.TreeIter` chamando :meth:`Gtk.TreeModel.get_iter`." +"Novos sinais podem ser criados adicionando-os a :attr:`GObject.GObject." +"__gsignals__`, um dicionário:" -#: ../../source/treeview.txt:58 +#: ../../source/objects.txt:61 msgid "" -"Once data has been inserted, you can retrieve or modify data using the tree " -"iter and column index." +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." msgstr "" -"Depois que os dados foram inseridos, você pode recuperar ou modificar dados " -"usando o iterador de árvore e o índice de coluna." +"Quando um novo sinal é criado, um manipulador de método também pode ser " +"definido, ele será chamado toda vez que o sinal for emitido. É chamado " +"do_nome_sinal." -#: ../../source/treeview.txt:66 +#: ../../source/objects.txt:75 msgid "" -"As with Python's built-in :class:`list` object you can use :func:`len` to " -"get the number of rows and use slices to retrieve or set values." -msgstr "" -"Assim como no objeto built-in :class:`list` do Python, você pode usar :func:" -"`len` para obter o número de linhas e usar fatias para recuperar ou definir " -"valores." - -#: ../../source/treeview.txt:80 -msgid "Iterating over all rows of a tree model is very simple as well." +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." msgstr "" -"Iterar sobre todas as linhas de um modelo de árvore é muito simples também." +":const:`GObject.SIGNAL_RUN_FIRST` indica que este sinal invocará o " +"manipulador do método de objeto (:meth:`do_my_signal` aqui) no primeiro " +"estágio de emissão. As alternativas são :const:`GObject.SIGNAL_RUN_LAST` (o " +"manipulador de método será invocado no terceiro estágio de emissão) e :const:" +"`GObject.SIGNAL_RUN_CLEANUP` (invoca o manipulador de método no último " +"estágio de emissão)." -#: ../../source/treeview.txt:88 +#: ../../source/objects.txt:81 msgid "" -"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " -"only iterate over the rows of the top level, but not the children of the " -"nodes. To iterate over all rows and its children, use the " -"``print_tree_store`` function." +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." msgstr "" -"Tenha em mente que, se você usar :class:`Gtk.TreeStore`, o código acima irá " -"apenas iterar sobre as linhas do nível superior, mas não os filhos dos nós. " -"Para iterar sobre todas as linhas e seus filhos, use a função " -"``print_tree_store``." +"A segunda parte, ``None``, indica o tipo de retorno do sinal, geralmente " +"``None``." -#: ../../source/treeview.txt:106 +#: ../../source/objects.txt:84 msgid "" -"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" -"like method mentioned above, it is also possible to either use :class:`Gtk." -"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " -"row in a tree model. One can convert a path to an iterator by calling :meth:" -"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " -"i.e. nodes do not have any child nodes, a path is essentially the index of " -"the row you want to access." +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. This argument type list must end with a " +"comma." msgstr "" -"Além de acessar valores armazenados em um :class:`Gtk.TreeModel` com o " -"método list-like mencionado acima, também é possível usar as instâncias :" -"class:`Gtk.TreeIter` ou :class:`Gtk.TreePath`. Ambos fazem referência a uma " -"linha específica em um modelo de árvore. Pode-se converter um caminho para " -"um iterador chamando :meth:`Gtk.TreeModel.get_iter`. Como :class:`Gtk." -"ListStore` contém apenas um nível, ou seja, nós não têm nenhum nó filho, um " -"caminho é essencialmente o índice da linha que você deseja acessar." +"``(int,)`` indica os argumentos do sinal, aqui, o sinal só receberá um " +"argumento, cujo tipo é int. Essa lista de tipos de argumentos deve terminar " +"com uma vírgula." -#: ../../source/treeview.txt:123 -msgid "" -"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " -"string. The string form is a list of numbers separated by a colon. Each " -"number refers to the offset at that level. Thus, the path \"0\" refers to " -"the root node and the path \"2:4\" refers to the fifth child of the third " -"node." -msgstr "" -"No caso de :class:`Gtk.TreeStore`, um caminho é uma lista de índices ou uma " -"string. O formulário de string é uma lista de números separados por dois " -"pontos. Cada número refere-se ao deslocamento nesse nível. Assim, o caminho " -"\"0\" refere-se ao nó raiz e o caminho \"2: 4\" refere-se ao quinto filho do " -"terceiro nó." +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" -#: ../../source/treeview.txt:136 +#: ../../source/objects.txt:97 msgid "" -"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " -"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " -"and ``treepath[i]`` returns the child's index on the *i*-th level." +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." msgstr "" -"Instâncias de :class:`Gtk.TreePath` podem ser acessadas como listas, " -"``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " -"para, e ``treepath[i]`` retorna o índice do filho no nível *i*." +"Um dos ótimos recursos do GObject é seu mecanismo get/set genérico para " +"propriedades de objetos. Cada classe herdada de :class:`GObject.GObject` " +"pode definir novas propriedades. Cada propriedade tem um tipo que nunca muda " +"(por exemplo, str, float, int …). Por exemplo, eles são usados para :class:" +"`Gtk.Button` onde existe uma propriedade “label” que contém o texto do botão." -#: ../../source/treeview.txt:142 -msgid "" -"While there are several different models to choose from, there is only one " -"view widget to deal with. It works with either the list or the tree store. " -"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" -"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " -"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" -"`Gtk.TreeView.set_model`." -msgstr "" -"Embora existam vários modelos diferentes para escolher, há apenas um widget " -"de visualização para lidar. Funciona com a lista ou com o armazenamento em " -"árvore. Configurar um :class:`Gtk.TreeView` não é uma tarefa difícil. Ele " -"precisa de um :class:`Gtk.TreeModel` para saber de onde recuperar seus " -"dados, seja passando-o para o construtor :class:`Gtk.TreeView`, ou chamando :" -"meth:`Gtk.TreeView.set_model`." +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "Use propriedades existentes" -#: ../../source/treeview.txt:153 +#: ../../source/objects.txt:106 msgid "" -"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " -"to display the model. It does this with columns and cell renderers." +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." msgstr "" -"Uma vez que o widget :class:`Gtk.TreeView` possua um modelo, ele precisará " -"saber como exibir o modelo. Ele faz isso com colunas e renderizadores de " -"célula." +"A classe :class:`GObject.GObject` fornece várias funções úteis para " +"gerenciar propriedades existentes, :func:`GObject.GObject.get_property` e :" +"func:`GObject.GObject.set_property`." -#: ../../source/treeview.txt:156 +#: ../../source/objects.txt:109 msgid "" -"Cell renderers are used to draw the data in the tree model in a way. There " -"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." -"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." -"CellRendererToggle`. In addition, it is relatively easy to write a custom " -"renderer yourself." +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." msgstr "" -"Os renderizadores de célula são usados para desenhar os dados no modelo de " -"árvore de uma maneira. Existem vários renderizadores de célula que vêm com o " -"GTK+, por exemplo :class:`Gtk.CellRendererText`, :class:`Gtk." -"CellRendererPixbuf` e :class:`Gtk.CellRendererToggle`. Além disso, é " -"relativamente fácil escrever um renderizador personalizado por conta própria." +"Algumas propriedades também possuem funções dedicadas a elas, chamadas de " +"getter e setter. Para a propriedade “label” de um botão, existem duas " +"funções para obter e configurá-las, :func:`Gtk.Button.get_label` e :func:" +"`Gtk.Button.set_label`." -#: ../../source/treeview.txt:162 +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "Crie novas propriedades" + +#: ../../source/objects.txt:116 msgid "" -"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " -"to organize the vertical columns in the tree view. It needs to know the name " -"of the column to label for the user, what type of cell renderer to use, and " -"which piece of data to retrieve from the model for a given row." +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." msgstr "" -"A :class:`Gtk.TreeViewColumn` é o objeto que :class:`Gtk.TreeView` usa para " -"organizar as colunas verticais na visualização em árvore. Ele precisa saber " -"o nome da coluna para rotular o usuário, que tipo de renderizador de célula " -"deve ser usado e qual parte dos dados deve ser recuperada do modelo para uma " -"determinada linha." +"Uma propriedade é definida com um nome e um tipo. Mesmo se o próprio Python " +"for digitado dinamicamente, você não poderá alterar o tipo de uma " +"propriedade depois que ela for definida. Uma propriedade pode ser criada " +"usando :class:`GObject.Property`." -#: ../../source/treeview.txt:173 +#: ../../source/objects.txt:131 msgid "" -"To render more than one model column in a view column, you need to create a :" -"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." -"pack_start` to add the model columns to it." +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" msgstr "" -"Para renderizar mais de uma coluna de modelo em uma coluna de visão, você " -"precisa criar uma instância :class:`Gtk.TreeViewColumn` e usar :meth:`Gtk." -"TreeViewColumn.pack_start` para adicionar as colunas de modelo a ela." - -#: ../../source/treeview.txt:193 -msgid "The Selection" -msgstr "A Seleção" +"As propriedades também podem ser somente leitura, se você quiser que algumas " +"propriedades sejam legíveis, mas não graváveis. Para fazer isso, você pode " +"adicionar alguns sinalizadores à definição da propriedade, para controlar o " +"acesso de leitura/gravação. Sinalizadores são :const:`GObject.ParamFlags." +"READABLE` (somente acesso de leitura para código externo), :const:`GObject." +"ParamFlags.WRITABLE` (somente acesso de gravação), :const:`GObject." +"ParamFlags.READWRITE` (publico):" -#: ../../source/treeview.txt:194 +#: ../../source/objects.txt:146 msgid "" -"Most applications will need to not only deal with displaying data, but also " -"receiving input events from users. To do this, simply get a reference to a " -"selection object and connect to the \"changed\" signal." +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" msgstr "" -"A maioria dos aplicativos precisará não apenas lidar com a exibição de " -"dados, mas também receber eventos de entrada dos usuários. Para fazer isso, " -"basta obter uma referência a um objeto de seleção e conectar-se ao sinal " -"\"changed\"." +"Você também pode definir novas propriedades somente leitura com um novo " +"método decorado com :class:`GObject.Property`:" -#: ../../source/treeview.txt:203 -msgid "Then to retrieve data for the row selected:" -msgstr "Em seguida, para recuperar dados para a linha selecionada:" +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "Você pode obter essa propriedade usando:" -#: ../../source/treeview.txt:212 +#: ../../source/objects.txt:170 msgid "" -"You can control what selections are allowed by calling :meth:`Gtk." -"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " -"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " -"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" msgstr "" -"Você pode controlar quais seleções são permitidas chamando :meth:`Gtk." -"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` não funciona " -"se o modo de seleção estiver definido como :attr:`Gtk.SelectionMode." -"MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows`." - -#: ../../source/treeview.txt:219 -msgid "Sorting" -msgstr "Classificação" +"A API de :class:`GObject.Property` é semelhante ao construído em :py:func:" +"`property`. Você pode criar o setter de propriedades de maneira semelhante à " +"propriedade Python:" -#: ../../source/treeview.txt:220 +#: ../../source/objects.txt:191 msgid "" -"Sorting is an important feature for tree views and is supported by the " -"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " -"which implement the :class:`Gtk.TreeSortable` interface." +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" msgstr "" -"A classificação é um recurso importante para as visualizações em árvore e é " -"suportada pelos modelos de árvore padrão (:class:`Gtk.TreeStore` e :class:" -"`Gtk.ListStore`), que implementam a interface :class:`Gtk.TreeSortable`." - -#: ../../source/treeview.txt:223 -msgid "Sorting by clicking on columns" -msgstr "Classificando clicando em colunas" +"Há também uma maneira de definir valores mínimos e máximos para números, " +"usando um formulário mais detalhado:" -#: ../../source/treeview.txt:224 +#: ../../source/objects.txt:227 msgid "" -"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" -"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " -"sorted by clicking on its header." +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." msgstr "" -"Uma coluna de um :class:`Gtk.TreeView` pode ser facilmente ordenada com uma " -"chamada para :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Depois, a coluna " -"pode ser ordenada clicando no cabeçalho." +"As propriedades devem ser definidas em :attr:`GObject.GObject." +"__gproperties__`, um dicionário e manipulado em do_get_property e " +"do_set_property." -#: ../../source/treeview.txt:227 +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "Veja as propriedades" + +#: ../../source/objects.txt:233 msgid "" -"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " -"a model." +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" msgstr "" -"Primeiro precisamos de um simples :class:`Gtk.TreeView` e um :class:`Gtk." -"ListStore` como modelo." +"Quando uma propriedade é modificada, um sinal é emitido, cujo nome é " +"“notify::property-name”::" -#: ../../source/treeview.txt:246 +#: ../../source/objects.txt:248 msgid "" -"The next step is to enable sorting. Note that the *column_id* (``0`` in the " -"example) refers to the column of the model and **not** to the TreeView's " -"column." +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" msgstr "" -"O próximo passo é ativar a classificação. Note que o *column_id* (``0`` no " -"exemplo) refere-se à coluna do modelo e **não** à coluna do TreeView." +"Note que você tem que usar o nome da propriedade canônica ao se conectar aos " +"sinais de notificação, como explicado em :func:`GObject.Object.signals." +"notify`. Por exemplo, para uma propriedade Python `foo_bar_baz` você " +"conectaria ao sinal `notify::foo-bar-baz` usando" -#: ../../source/treeview.txt:253 -msgid "Setting a custom sort function" -msgstr "Definindo uma função de classificação personalizada" +#: ../../source/objects.txt:263 +msgid "API" +msgstr "API" -#: ../../source/treeview.txt:254 +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "Recupera um valor de propriedade." + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "Configura a propriedade *property_name* para *valor*." + +#: ../../source/objects.txt:277 msgid "" -"It is also possible to set a custom comparison function in order to change " -"the sorting behaviour. As an example we will create a comparison function " -"that sorts case-sensitive. In the example above the sorted list looked like::" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" msgstr "" -"Também é possível definir uma função de comparação personalizada para " -"alterar o comportamento de classificação. Como exemplo, criaremos uma função " -"de comparação que classifica maiúsculas e minúsculas. No exemplo acima, a " -"lista classificada parecia com::" +"Emite sinal *signal_name*. Argumentos de sinal devem seguir, p. ex., se o " +"seu sinal é do tipo ``(int,)``, deve ser emitido com::" -#: ../../source/treeview.txt:267 -msgid "The case-sensitive sorted list will look like::" +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." msgstr "" -"A lista classificada com distinção entre maiúsculas e minúsculas será " -"semelhante a::" +"Este método congela todos os sinais “notify::” (que são emitidos quando " +"qualquer propriedade é alterada) até que o método :meth:`thaw_notify` seja " +"chamado." -# Alterar o original para corrigir a explicação -#: ../../source/treeview.txt:278 +#: ../../source/objects.txt:288 msgid "" -"First of all a comparison function is needed. This function gets two rows " -"and has to return a negative integer if the first one should come before the " -"second one, zero if they are equal and a positive integer if the second one " -"should come before the second one." +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" msgstr "" -"Em primeiro lugar, é necessária uma função de comparação. Esta função obtém " -"duas linhas e tem que retornar um inteiro negativo se o primeiro deve vir " -"antes do segundo, zero se eles forem iguais e um inteiro positivo se o " -"segundo vier antes do primeiro." +"Recomenda-se usar a instrução *with* ao chamar :meth:`freeze_notify`, dessa " +"forma é assegurado que :meth:`thaw_notify` é chamado implicitamente no final " +"do bloco::" -#: ../../source/treeview.txt:294 +#: ../../source/objects.txt:298 msgid "" -"Then the sort function has to be set by :meth:`Gtk.TreeSortable." -"set_sort_func`." +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." msgstr "" -"Então a função sort deve ser definida por :meth:`Gtk.TreeSortable." -"set_sort_func`." - -#: ../../source/treeview.txt:301 -msgid "Filtering" -msgstr "Filtrando" +"Descongela todos os sinais “notify::” que foram descongelados por :meth:" +"`freeze_notify`." -#: ../../source/treeview.txt:302 +#: ../../source/objects.txt:300 msgid "" -"Unlike sorting, filtering is not handled by the two models we previously " -"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" -"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " -"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" -"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " -"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " -"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " -"to use multiple filters on the same model (in the same way you'd use \"AND\" " -"clauses in a SQL request). They can also be chained with :class:`Gtk." -"TreeModelSort` instances." +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." msgstr "" -"Ao contrário da classificação, a filtragem não é tratada pelos dois modelos " -"que vimos anteriormente, mas pela classe :class:`Gtk.TreeModelFilter`. Esta " -"classe, como :class:`Gtk.TreeStore` e :class:`Gtk.ListStore`, é uma :class:" -"`Gtk.TreeModel`. Ele age como uma camada entre o modelo \"real\" (a :class:" -"`Gtk.TreeStore` ou a :class:`Gtk.ListStore`), ocultando alguns elementos " -"para a view. Na prática, ele fornece o :class:`Gtk.TreeView` com um " -"subconjunto do modelo subjacente. Instâncias de :class:`Gtk.TreeModelFilter` " -"podem ser empilhadas umas sobre as outras, para usar múltiplos filtros no " -"mesmo modelo (da mesma forma que você usaria cláusulas \"AND\" em uma " -"requisição SQL). Eles também podem ser encadeados com instâncias :class:`Gtk." -"TreeModelSort`." +"Recomenda-se não chamar :meth:`thaw_notify` explicitamente mas use :meth:" +"`freeze_notify` juntamente com a instrução *with*." -#: ../../source/treeview.txt:304 +#: ../../source/objects.txt:305 msgid "" -"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " -"a model to filter, but the easiest way is to spawn it directly from the " -"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." msgstr "" -"Você pode criar uma nova instância de :class:`Gtk.TreeModelFilter` e dar a " -"ela um modelo para filtrar, mas a maneira mais fácil é gerá-lo diretamente " -"do modelo filtrado, usando o método :meth:`Gtk.TreeModel.filter_new` método." +"Bloqueia um manipulador de uma instância para que ele não seja chamado " +"durante qualquer emissão de sinal, a menos que :meth:`handler_unblock` seja " +"chamado para aquele *handler_id*. Assim, “bloquear” um manipulador de sinal " +"significa desativá-lo temporariamente, um manipulador de sinal precisa ser " +"desbloqueado exatamente na mesma quantidade de vezes que foi bloqueado antes " +"de se tornar ativo novamente." -#: ../../source/treeview.txt:310 +#: ../../source/objects.txt:311 msgid "" -"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " -"needs a \"visibility\" function, which, given a row from the underlying " -"model, will return a boolean indicating if this row should be filtered out " -"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" msgstr "" -"Da mesma forma que funciona a função de classificação, o :class:`Gtk." -"TreeModelFilter` precisa de uma função de \"visibilidade\", que, dada uma " -"linha do modelo subjacente, retornará um booleano indicando se essa linha " -"deve ser filtrada ou não. É definido por :meth:`Gtk.TreeModelFilter." -"set_visible_func`:" +"Recomenda-se usar :meth:`handler_block` em conjunto com a instrução *with* " +"que irá chamar :meth:`handler_unblock` implicitamente no final do bloco::" -#: ../../source/treeview.txt:316 +#: ../../source/objects.txt:321 msgid "" -"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" -"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." -"TreeView` stack." +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." msgstr "" -"Vejamos um exemplo completo que usa a pilha inteira :class:`Gtk.ListStore` " -"- :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." -"TreeView`." - -#: ../../source/unicode.txt:2 -msgid "How to Deal With Strings" -msgstr "Como Lidar com Sequências de Caracteres" +"Desfaz o efeito de :meth:`handler_block`. Um manipulador bloqueado é " +"ignorado durante as emissões do sinal e não será chamado até que tenha sido " +"desbloqueado exatamente a quantidade de vezes que foi bloqueado antes." -#: ../../source/unicode.txt:4 +#: ../../source/objects.txt:325 msgid "" -"This section explains how strings are represented in Python 2.x, Python 3.x " -"and GTK+ and discusses common errors that arise when working with strings." +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." msgstr "" -"Esta seção explica como as cadeias de caracteres são representadas no Python " -"2.x, no Python 3.x e no GTK+ e discute erros comuns que surgem ao trabalhar " -"com strings." +"É recomendado não chamar explicitamente :meth:`handler_unblock` mas use :" +"meth:`handler_block` junto com a instrução *with*." -#: ../../source/unicode.txt:8 -msgid "Definitions" -msgstr "Definições" +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "Um dicionário onde a classe herdada pode definir novos sinais." -#: ../../source/unicode.txt:9 +#: ../../source/objects.txt:332 msgid "" -"Conceptional, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " -"**Characters** are abstract representations and their meaning depends on the " -"language and context they are used in. The Unicode standard describes how " -"characters are represented by **code points**. For example the characters " -"above are represented with the code points U+0041, U+0042, U+0043, and U" -"+00C9, respectively. Basically, code points are numbers in the range from 0 " -"to 0x10FFFF." +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" msgstr "" -"Conceitual, uma string é uma lista de caracteres como 'A', 'B', 'C' ou 'É'. " -"**Caracteres** são representações abstratas e seu significado depende do " -"idioma e do contexto em que são usados. O padrão Unicode descreve como os " -"caracteres são representados por **pontos de código**. Por exemplo, os " -"caracteres acima são representados com os pontos de código U+0041, U+0042, U" -"+0043 e U+00C9, respectivamente. Basicamente, os pontos de código são " -"números no intervalo de 0 a 0x10FFFF." +"Cada elemento no dicionário é um novo sinal. A chave é o nome do sinal. O " +"valor é uma tupla, com o formato::" -#: ../../source/unicode.txt:17 +#: ../../source/objects.txt:337 msgid "" -"As mentioned earlier, the representation of a string as a list of code " -"points is abstract. In order to convert this abstract representation into a " -"sequence of bytes the Unicode string must be **encoded**. The simplest form " -"of encoding is ASCII and is performed as follows:" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the list of the parameters of the " +"signal, it must end with a comma." msgstr "" -"Como mencionado anteriormente, a representação de uma string como uma lista " -"de pontos de código é abstrata. Para converter essa representação abstrata " -"em uma sequência de bytes, a cadeia Unicode deve ser **codificada**. A forma " -"mais simples de codificação é ASCII e é executada da seguinte maneira:" +":const:`GObject.SIGNAL_RUN_FIRST` pode ser substituído por :const:`GObject." +"SIGNAL_RUN_LAST` ou :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` é o tipo " +"de retorno do sinal. ``(int,)`` é a lista dos parâmetros do sinal, deve " +"terminar com uma vírgula." -#: ../../source/unicode.txt:22 +#: ../../source/objects.txt:346 msgid "" -"If the code point is < 128, each byte is the same as the value of the code " -"point." +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." msgstr "" -"Se o ponto de código for < 128, cada byte é o mesmo que o valor do ponto de " -"código." +"O dicionário :attr:`__gproperties__` é uma propriedade de classe onde você " +"define as propriedades do seu objeto. Esta não é a maneira recomendada de " +"definir novas propriedades, o método escrito acima é muito menos detalhado. " +"Os benefícios desse método é que uma propriedade pode ser definida com mais " +"configurações, como o mínimo ou o máximo para números." + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "A chave é o nome da propriedade" -#: ../../source/unicode.txt:25 +#: ../../source/objects.txt:354 msgid "" -"If the code point is 128 or greater, the Unicode string can't be represented " -"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " -"this case.)" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" msgstr "" -"Se o ponto de código for 128 ou maior, a string Unicode não poderá ser " -"representada nessa codificação. (Python dispara uma exceção :exc:" -"`UnicodeEncodeError` neste caso.)" +"O valor é uma tupla que descreve a propriedade. O número de elementos dessa " +"tupla depende de seu primeiro elemento, mas a tupla sempre conterá pelo " +"menos os seguintes itens:" -#: ../../source/unicode.txt:29 -msgid "" -"Although ASCII encoding is simple to apply it can only encode for 128 " -"different characters which is hardly enough. One of the most commonly used " -"encodings that addresses this problem is UTF-8 (it can handle any Unicode " -"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " -"means that 8-bit numbers are used in the encoding." +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." msgstr "" -"Embora a codificação ASCII seja simples de aplicar, ela só pode codificar " -"128 caracteres diferentes, o que não é suficiente. Uma das codificações mais " -"usadas para resolver esse problema é o UTF-8 (ele pode manipular qualquer " -"ponto de código Unicode). UTF significa \"Formato de Transformação Unicode\" " -"e \"8\" significa que números de 8 bits são usados na codificação." +"O primeiro elemento é o tipo da propriedade (por exemplo, ``int``, " +"``float``…)." -#: ../../source/unicode.txt:37 -msgid "Python 2" +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." msgstr "" +"O segundo elemento é o apelido da propriedade, que é uma string com uma " +"breve descrição da propriedade. Isso geralmente é usado por programas com " +"fortes recursos de introspecção, como o construtor de interface gráfica de " +"usuário `Glade`_." -#: ../../source/unicode.txt:40 -msgid "Python 2.x’s Unicode Support" -msgstr "Suporte Unicode do Python 2.x" - -#: ../../source/unicode.txt:41 +#: ../../source/objects.txt:365 msgid "" -"Python 2 comes with two different kinds of objects that can be used to " -"represent strings, :class:`str` and :class:`unicode`. Instances of the " -"latter are used to express Unicode strings, whereas instances of the :class:" -"`str` type are byte representations (the encoded string). Under the hood, " -"Python represents Unicode strings as either 16- or 32-bit integers, " -"depending on how the Python interpreter was compiled. Unicode strings can be " -"converted to 8-bit strings with :meth:`unicode.encode`::" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." msgstr "" -"O Python 2 vem com dois tipos diferentes de objetos que podem ser usados " -"para representar strings :class:`str` e :class:`unicode`. Instâncias do " -"último são usadas para expressar cadeias Unicode, enquanto instâncias do " -"tipo :class:`str` são representações de byte (a string codificada). Sob o " -"capô, Python representa strings Unicode como números inteiros de 16 ou 32 " -"bits, dependendo de como o interpretador Python foi compilado. Strings " -"Unicode podem ser convertidas em strings de 8 bits com :meth:`unicode." -"encode`::" +"A terceira é a descrição da propriedade ou sinopse, que é outra string com " +"uma descrição mais longa da propriedade. Também usado pelo `Glade`_ e " +"programas similares." -#: ../../source/unicode.txt:58 +#: ../../source/objects.txt:369 msgid "" -"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " -"string using the given encoding::" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." msgstr "" -"As strings de 8 bits do Python têm um método :meth:`str.decode` que " -"interpreta a string usando a codificação fornecida::" +"O último (que não é necessariamente o último, como veremos mais adiante) é o " +"sinalizador da propriedade :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." -#: ../../source/unicode.txt:68 +#: ../../source/objects.txt:373 msgid "" -"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" -"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " -"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" msgstr "" -"Infelizmente, o Python 2.x permite que você misture :class:`unicode` e :" -"class:`str` se a string de 8 bits contivesse apenas bytes de 7 bits (ASCII), " -"mas obteria :exc:`UnicodeDecodeError` se contivesse valores não-ASCII:" - -#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 -msgid "Unicode in GTK+" -msgstr "Unicode no GTK+" +"O comprimento absoluto da tupla depende do tipo de propriedade (o primeiro " +"elemento da tupla). Assim, temos as seguintes situações:" -#: ../../source/unicode.txt:86 +#: ../../source/objects.txt:376 msgid "" -"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " -"method that returns a string you will always obtain an instance of the :" -"class:`str` type. The same applies to methods that expect one or more " -"strings as parameter, they must be UTF-8 encoded. However, for convenience " -"PyGObject will automatically convert any :class:`unicode` instance to :class:" -"`str` if supplied as argument::" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." msgstr "" -"O GTK+ usa strings codificadas em UTF-8 para todo o texto. Isto significa " -"que se você chamar um método que retorna uma string, você sempre obterá uma " -"instância do tipo :class:`str`. O mesmo se aplica aos métodos que esperam um " -"ou mais strings como parâmetro, eles devem ser codificados em UTF-8. No " -"entanto, por conveniência, o PyGObject converterá automaticamente qualquer " -"instância :class:`unicode` para :class:`str` se fornecido como argumento::" +"Se o tipo for ``bool`` ou ``str``, o quarto elemento é o valor padrão da " +"propriedade." -#: ../../source/unicode.txt:104 +#: ../../source/objects.txt:379 msgid "" -"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " -"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " -"will always return a :class:`str` instance. Accordingly, ``txt`` and " -"``unicode_string`` are *not* equal." +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." msgstr "" -"Observe o aviso no final. Apesar de chamarmos :meth:`Gtk.Label.set_text` com " -"uma instância de :class:`unicode` como argumento, :meth:`Gtk.Label.get_text` " -"sempre retornará uma instância :class:`str`. Assim, ``txt`` e " -"``unicode_string`` *não* são iguais." +"Se o tipo for ``int`` ou ``float``, o quarto elemento é o valor mínimo " +"aceito, o quinto elemento é o valor máximo aceito e o sexto elemento é o " +"valor padrão." -#: ../../source/unicode.txt:109 -msgid "" -"This is especially important if you want to internationalize your program " -"using `gettext `_. You have to " -"make sure that gettext will return UTF-8 encoded 8-bit strings for all " -"languages. In general it is recommended to not use :class:`unicode` objects " -"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " -"since GTK+ does not fully integrate with :class:`unicode` objects. " -"Otherwise, you would have to decode the return values to Unicode strings " -"each time you call a GTK+ method::" +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "Se o tipo não for um desses, não há elemento extra." + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." msgstr "" -"Isto é especialmente importante se você quiser internacionalizar seu " -"programa usando `gettext `_. " -"Você precisa ter certeza de que gettext retornará sequências de 8 bits " -"codificadas em UTF-8 para todos os idiomas. Em geral, recomenda-se não usar " -"objetos :class:`unicode` em aplicações GTK+ e usar somente objetos " -"codificados em UTF-8 :class:`str`, já que o GTK+ não se integra totalmente a " -"objetos :class:`unicode`. Caso contrário, você teria que decodificar os " -"valores de retorno para cadeias de caracteres Unicode cada vez que você " -"chamar um método GTK+::" +"Invoca o manipulador de método de objeto no primeiro estágio de emissão." -#: ../../source/unicode.txt:122 -msgid "Python 3" +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." msgstr "" +"Invoca o manipulador de método de objeto no terceiro estágio de emissão." -#: ../../source/unicode.txt:125 -msgid "Python 3.x's Unicode support" -msgstr "Suporte Unicode do Python 3.x" +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "Invoca o manipulador do método de objeto no último estágio de emissão." -#: ../../source/unicode.txt:126 -msgid "" -"Since Python 3.0, all strings are stored as Unicode in an instance of the :" -"class:`str` type. *Encoded* strings on the other hand are represented as " -"binary data in the form of instances of the :class:`bytes` type. " -"Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers " -"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " -"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." -msgstr "" -"Desde o Python 3.0, todas as strings são armazenadas como Unicode em uma " -"instância do tipo :class:`str`. *Codificado* strings, por outro lado, são " -"representados como dados binários na forma de instâncias do tipo :class:" -"`bytes`. Conceitualmente, :class:`str` refere-se a *texto*, enquanto :class:" -"`bytes` refere-se a *dados*. Use :meth:`str.encode` para ir de :class:`str` " -"para :class:`bytes` e :meth:`bytes.decode` para ir de :class:`bytes` para :" -"class:`str`." +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "A propriedade é legível." -#: ../../source/unicode.txt:133 -msgid "" -"In addition, it is no longer possible to mix Unicode strings with encoded " -"strings, because it will result in a :exc:`TypeError`::" -msgstr "" -"Além disso, não é mais possível misturar strings Unicode com strings " -"codificadas, porque resultará em um :exc:`TypeError`::" +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "A propriedade é gravável." -#: ../../source/unicode.txt:149 -msgid "" -"As a consequence, things are much cleaner and consistent with Python 3.x, " -"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " -"a string to a method or a method returns a string. Strings, or *text*, will " -"always be represented as instances of :class:`str` only::" -msgstr "" -"Como consequência, as coisas são muito mais limpas e consistentes com o " -"Python 3.x, porque o PyGObject irá automaticamente codificar/decodificar " -"para/de UTF-8 se você passar uma string para um método ou um método retornar " -"uma string. Strings, ou *text*, sempre serão representados como instâncias " -"de :class:`str` apenas::" +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "A propriedade é legível e gravável." -#: ../../source/unicode.txt:165 -msgid "References" -msgstr "Referências" +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "ProgressBar" -#: ../../source/unicode.txt:166 +#: ../../source/progressbar.txt:4 msgid "" -"`What's new in Python 3.0 `_ describes the new concepts " -"that clearly distinguish between text and data." +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." msgstr "" -"`O que há de novo no Python 3.0 `_ descreve os novos conceitos " -"que distinguir claramente entre texto e dados." +"O :class:`Gtk.ProgressBar` é normalmente usado para exibir o progresso de " +"uma operação longa. Ele fornece uma pista visual de que o processamento está " +"em andamento. O :class:`Gtk.ProgressBar` pode ser usado em dois modos " +"diferentes: *modo de porcentagem* e *modo de atividade*." -#: ../../source/unicode.txt:169 +#: ../../source/progressbar.txt:9 msgid "" -"The `Unicode HOWTO `_ discusses " -"Python 2.x’s support for Unicode, and explains various problems that people " -"commonly encounter when trying to work with Unicode." +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." msgstr "" -"O `Unicode HOWTO `_ aborda o " -"suporte do Python 2.x para Unicode e explica vários problemas que as pessoas " -"comumente encontram ao tentar trabalhar com o Unicode." +"Quando um aplicativo pode determinar quanto trabalho precisa ocorrer (por " +"exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu " +"progresso, ela pode usar :class:`Gtk.ProgressBar` no modo *percentage* e o " +"usuário vê uma barra crescente indicando a porcentagem do trabalho que foi " +"concluído. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.set_fraction` periodicamente para atualizar a barra de " +"progresso, passando um ponto flutuante entre 0 e 1 para fornecer o novo " +"valor percentual." -#: ../../source/unicode.txt:173 +#: ../../source/progressbar.txt:17 msgid "" -"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." msgstr "" -"O `Unicode HOWTO for Python 3.x `_ discute o suporte a Unicode no Python 3.x." +"Quando um aplicativo não tem uma maneira precisa de saber a quantidade de " +"trabalho a ser feito, ele pode usar o *modo de atividade*, que mostra a " +"atividade de um bloco se movendo para frente e para trás na área de " +"progresso. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." +"ProgressBar.pulse` periodicamente para atualizar a barra de progresso. Você " +"também pode escolher o tamanho do passo, com o método :meth:`Gtk.ProgressBar." +"set_pulse_step`." -#: ../../source/unicode.txt:176 +#: ../../source/progressbar.txt:24 msgid "" -"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " -"encoding." +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." msgstr "" -"`A tabela de codificação UTF-8 e os caracteres Unicode `_ contém uma lista de pontos de código Unicode e sua " -"respectiva codificação UTF-8." +"Por padrão, :class:`Gtk.ProgressBar` é horizontal e da esquerda para a " +"direita, mas você pode alterá-lo para uma barra de progresso vertical usando " +"o método :meth:`Gtk.ProgressBar.set_orientation`. Mudar a direção da barra " +"de progresso pode ser feito usando :meth:`Gtk.ProgressBar.set_inverted`. :" +"class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " +"chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." +"set_show_text`." From c01da9f676a6884ced258c35d3a7fd247c2abcff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Tue, 21 Apr 2020 20:37:28 +0200 Subject: [PATCH 118/209] Remove u prefix from strings --- source/conf.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/conf.py b/source/conf.py index bce0b97..d9fdcb4 100644 --- a/source/conf.py +++ b/source/conf.py @@ -47,8 +47,8 @@ master_doc = "index" # General information about the project. -project = u"Python GTK+ 3 Tutorial" -copyright = u"GNU Free Documentation License 1.3" +project = "Python GTK+ 3 Tutorial" +copyright = "GNU Free Documentation License 1.3" locale_dirs = ["../translations/locale"] @@ -191,8 +191,8 @@ ( "index", "PyGObjectTutorial.tex", - u"The Python GTK+ 3 Tutorial", - u"Sebastian Pölsterl", + "The Python GTK+ 3 Tutorial", + "Sebastian Pölsterl", "manual", ) ] @@ -229,8 +229,8 @@ ( "index", "pygobjecttutorial", - u"PyGObject Tutorial Documentation", - [u"Sebastian Pölsterl"], + "PyGObject Tutorial Documentation", + ["Sebastian Pölsterl"], 1, ) ] From 0da8bddc1caaa1db3fe1e8444e110cbbe6dbcd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:06:50 +0200 Subject: [PATCH 119/209] Run make split-po when running on RTD --- source/conf.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/conf.py b/source/conf.py index d9fdcb4..35935bf 100644 --- a/source/conf.py +++ b/source/conf.py @@ -12,6 +12,11 @@ # serve to show the default. import sys, os +import subprocess + +# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org +# https://docs.readthedocs.io/en/latest/faq.html?highlight=environ#how-do-i-change-behavior-for-read-the-docs +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -234,3 +239,7 @@ 1, ) ] + +if on_rtd: + subprocess.call(["/usr/bin/make", "split-po"], cwd="translations") + From 25d5acb568c0cf34f2f694183e74f3d41e354286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:09:00 +0200 Subject: [PATCH 120/209] Fix path to translations directory --- source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 35935bf..147f59c 100644 --- a/source/conf.py +++ b/source/conf.py @@ -12,6 +12,7 @@ # serve to show the default. import sys, os +from os.path import join import subprocess # on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org @@ -241,5 +242,5 @@ ] if on_rtd: - subprocess.call(["/usr/bin/make", "split-po"], cwd="translations") + subprocess.call(["/usr/bin/make", "split-po"], cwd=join("..", "translations")) From 1fb973aadad236b573727a42ae614868999099d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:30:54 +0200 Subject: [PATCH 121/209] RTD: Create conda environment --- .readthedocs.yml | 19 +++++++++++++++++++ environment.yml | 12 ++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 .readthedocs.yml create mode 100644 environment.yml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 0000000..fc79f7e --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,19 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + builder: html + configuration: source/conf.py + fail_on_warning: true + +# Optionally build your docs in additional formats such as PDF and ePub +formats: all + +conda: + environment: environment.yml + diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..1844a38 --- /dev/null +++ b/environment.yml @@ -0,0 +1,12 @@ +name: rtd +channels: + - defaults +dependencies: + - python=3.7 + - gettext + - pip + - sphinx==1.7.6 + - sphinx_rtd_theme>=0.3.1 + - pip: + - sphinx-autobuild==0.7.1 + - sphinx-intl From b9542f87080ab7488d1af6fd941f1717447e29e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:31:21 +0200 Subject: [PATCH 122/209] Abort if make on RTD fails --- source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index 147f59c..1b1e43f 100644 --- a/source/conf.py +++ b/source/conf.py @@ -242,5 +242,5 @@ ] if on_rtd: - subprocess.call(["/usr/bin/make", "split-po"], cwd=join("..", "translations")) + subprocess.check_call(["/usr/bin/make", "split-po"], cwd=join("..", "translations")) From fe4fb137720410767169beb921696bfb7159ab30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:51:19 +0200 Subject: [PATCH 123/209] Do not pin sphinx version as it gets replaced on RTD See readthedocs/readthedocs.org#3829 --- environment.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/environment.yml b/environment.yml index 1844a38..1036a4c 100644 --- a/environment.yml +++ b/environment.yml @@ -4,9 +4,10 @@ channels: dependencies: - python=3.7 - gettext + - mock + - pillow - pip - - sphinx==1.7.6 - - sphinx_rtd_theme>=0.3.1 + - sphinx + - sphinx_rtd_theme - pip: - - sphinx-autobuild==0.7.1 - sphinx-intl From 59a15b5032d86f5ac70916250073961e4d4b13cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 22:56:00 +0200 Subject: [PATCH 124/209] Remove individual PO files for pt_BR Will be generated automatically from translations/po/pt_BR.po --- .../locale/pt_BR/LC_MESSAGES/application.po | 186 ------ .../locale/pt_BR/LC_MESSAGES/basics.po | 190 ------ .../locale/pt_BR/LC_MESSAGES/builder.po | 223 ------- .../pt_BR/LC_MESSAGES/button_widgets.po | 279 --------- .../locale/pt_BR/LC_MESSAGES/cellrenderers.po | 248 -------- .../locale/pt_BR/LC_MESSAGES/clipboard.po | 55 -- .../locale/pt_BR/LC_MESSAGES/combobox.po | 85 --- .../locale/pt_BR/LC_MESSAGES/dialogs.po | 313 ---------- .../locale/pt_BR/LC_MESSAGES/drag_and_drop.po | 223 ------- .../locale/pt_BR/LC_MESSAGES/entry.po | 94 --- .../locale/pt_BR/LC_MESSAGES/iconview.po | 63 -- .../locale/pt_BR/LC_MESSAGES/index.po | 107 ---- .../locale/pt_BR/LC_MESSAGES/install.po | 142 ----- .../locale/pt_BR/LC_MESSAGES/introduction.po | 142 ----- .../locale/pt_BR/LC_MESSAGES/label.po | 120 ---- .../locale/pt_BR/LC_MESSAGES/layout-table.po | 76 --- .../locale/pt_BR/LC_MESSAGES/layout.po | 449 -------------- .../locale/pt_BR/LC_MESSAGES/menus.po | 218 ------- .../locale/pt_BR/LC_MESSAGES/objects.po | 556 ------------------ .../locale/pt_BR/LC_MESSAGES/popover.po | 83 --- .../locale/pt_BR/LC_MESSAGES/progressbar.po | 92 --- .../locale/pt_BR/LC_MESSAGES/spinner.po | 45 -- .../locale/pt_BR/LC_MESSAGES/stock.po | 84 --- .../locale/pt_BR/LC_MESSAGES/textview.po | 288 --------- .../locale/pt_BR/LC_MESSAGES/treeview.po | 466 --------------- .../locale/pt_BR/LC_MESSAGES/unicode.po | 284 --------- 26 files changed, 5111 deletions(-) delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/application.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/basics.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/builder.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/button_widgets.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/clipboard.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/combobox.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/dialogs.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/entry.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/iconview.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/index.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/install.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/introduction.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/label.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/layout-table.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/layout.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/menus.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/objects.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/popover.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/progressbar.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/spinner.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/stock.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/textview.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/treeview.po delete mode 100644 translations/locale/pt_BR/LC_MESSAGES/unicode.po diff --git a/translations/locale/pt_BR/LC_MESSAGES/application.po b/translations/locale/pt_BR/LC_MESSAGES/application.po deleted file mode 100644 index 2adfd51..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/application.po +++ /dev/null @@ -1,186 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 05:32-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/application.txt:4 -msgid "Application" -msgstr "Aplicação" - -#: ../../source/application.txt:6 -msgid "" -":class:`Gtk.Application` encompasses many repetitive tasks that a modern " -"application needs such as handling multiple instances, D-Bus activation, " -"opening files, command line parsing, startup/shutdown, menu management, " -"window management, and more." -msgstr "" -":class:`Gtk.Application` abrange muitas tarefas repetitivas que um " -"aplicativo moderno precisa, como manipular várias instâncias, ativação do D-" -"Bus, abertura de arquivos, análise de linha de comando, inicialização/" -"desligamento, gerenciamento de menus, gerenciamento de janelas e muito mais." - -#: ../../source/application.txt:12 -msgid "Actions" -msgstr "Ações" - -#: ../../source/application.txt:14 -msgid "" -":class:`Gio.Action` is a way to expose any single task your application or " -"widget does by a name. These actions can be disabled/enabled at runtime and " -"they can either be activated or have a state changed (if they contain state)." -msgstr "" -":class:`Gio.Action` é uma maneira de expor qualquer tarefa que seu " -"aplicativo ou widget fizer por um nome. Essas ações podem ser desabilitadas/" -"habilitadas no tempo de execução e podem ser ativadas ou ter um estado " -"alterado (se elas contiverem estado)." - -#: ../../source/application.txt:18 -msgid "" -"The reason to use actions is to separate out the logic from the UI. For " -"example this allows using a menubar on OSX and a gear menu on GNOME both " -"simply referencing the name of an action. The main implementation of this " -"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " -"later." -msgstr "" -"O motivo para usar ações é separar a lógica da interface do usuário. Por " -"exemplo, isso permite usar uma barra de menu no OSX e um menu de engrenagem " -"no GNOME, simplesmente referenciando o nome de uma ação. A principal " -"implementação que você estará usando é :class:`Gio.SimpleAction` que será " -"mostrado mais tarde." - -#: ../../source/application.txt:23 -msgid "" -"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " -"support properties to set an action name." -msgstr "" -"Muitas classes, como :class:`Gio.MenuItem` e :class:`Gtk.ModelButton` " -"suportam propriedades para definir um nome de ação." - -#: ../../source/application.txt:26 -msgid "" -"These actions can be grouped together into a :class:`Gio.ActionGroup` and " -"when these groups are added to a widget with :meth:`Gtk.Widget." -"insert_action_group()` they will gain a prefix. Such as \"win\" when added " -"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " -"referencing it such as \"app.about\" but when you create the action it will " -"just be \"about\" until added to the application." -msgstr "" -"Estas ações podem ser agrupadas em um :class:`Gio.ActionGroup` e quando " -"esses grupos são adicionados a um widget com :meth:`Gtk.Widget." -"insert_action_group()`, eles ganharão um prefixo. Tal como \"win\" quando " -"adicionado a um :class:`Gtk.ApplicationWindow`. Você usará o nome completo " -"da ação ao fazer referência a ele, como \"app.about\", mas ao criar a ação, " -"ela ficará \"about\" até ser adicionada ao aplicativo." - -#: ../../source/application.txt:32 -msgid "" -"You can also very easily make keybindings for actions by setting the `accel` " -"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." -"add_accelerator()`." -msgstr "" -"Você também pode facilmente criar keybindings para ações definindo a " -"propriedade `accel` no arquivo :class:`Gio.Menu` ou usando :meth:`Gtk." -"Application.add_accelerator()`." - -#: ../../source/application.txt:36 -msgid "Menus" -msgstr "" - -#: ../../source/application.txt:38 -msgid "" -"Your menus should be defined in XML using :class:`Gio.Menu` and would " -"reference the previously mentioned actions you defined. :class:`Gtk." -"Application` allows you to set a menu either via :meth:`Gtk.Application." -"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " -"of :class:`Gio.Resource` this can automatically use the correct menu based " -"on platform, otherwise you can set them manually. A detailed example is " -"shown below." -msgstr "" -"Seus menus devem ser definidos em XML usando :class:`Gio.Menu` e referenciam " -"as ações mencionadas anteriormente que você definiu. :class:`Gtk." -"Application` permite que você defina um menu via :meth:`Gtk.Application." -"set_app_menu()` ou :meth:`Gtk.Application.set_menubar()`. Se você faz uso " -"de :class:`Gio.Resource` isto pode usar automaticamente o menu correto " -"baseado na plataforma, caso contrário você pode configurá-los manualmente. " -"Um exemplo detalhado é mostrado abaixo." - -#: ../../source/application.txt:46 -msgid "Command Line" -msgstr "Linha de Comando" - -#: ../../source/application.txt:48 -msgid "" -"When creating your application it takes a flag property of :class:`Gio." -"ApplicationFlags`. Using this you can let it handle everything itself or " -"have more custom behavior." -msgstr "" -"Ao criar seu aplicativo, ele recebe uma propriedade de flag de :class:`Gio." -"ApplicationFlags`. Usando isso, você pode permitir que ele manipule tudo " -"sozinho ou tenha um comportamento mais personalizado." - -#: ../../source/application.txt:51 -msgid "" -"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." -"Application.do_command_line()`. In combination with :meth:`Gio.Application." -"add_main_option()` to add custom options." -msgstr "" -"Você pode usar o `HANDLES_COMMAND_LINE` para permitir um comportamento " -"customizado em :meth:`Gio.Application.do_command_line()`. Em combinação com :" -"meth:`Gio.Application.add_main_option()` para adicionar opções " -"personalizadas." - -#: ../../source/application.txt:54 -msgid "" -"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " -"you and let you handle it in :meth:`Gio.Application.do_open()`." -msgstr "" -"Usar `HANDLES_OPEN` fará o trabalho de simplesmente pegar argumentos de " -"arquivo para você e permitir que você os manipule em :meth:`Gio.Application." -"do_open()`." - -#: ../../source/application.txt:57 -msgid "" -"If your application is already open these will all be sent to the existing " -"instance unless you use `NON_UNIQUE` to allow multiple instances." -msgstr "" -"Se o seu aplicativo já estiver aberto, todos serão enviados para a instância " -"existente, a menos que você use `NON_UNIQUE` para permitir várias instâncias." - -#: ../../source/application.txt:61 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/application.txt:69 -msgid "See Also" -msgstr "Veja também" - -#: ../../source/application.txt:71 -msgid "https://wiki.gnome.org/HowDoI/GtkApplication" -msgstr "" - -#: ../../source/application.txt:72 -msgid "https://wiki.gnome.org/HowDoI/GAction" -msgstr "" - -#: ../../source/application.txt:73 -msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" -msgstr "" - -#: ../../source/application.txt:74 -msgid "https://wiki.gnome.org/HowDoI/GMenu" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/basics.po b/translations/locale/pt_BR/LC_MESSAGES/basics.po deleted file mode 100644 index 47c0420..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/basics.po +++ /dev/null @@ -1,190 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:29-0300\n" -"PO-Revision-Date: 2018-04-11 22:41-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/basics.txt:4 -msgid "Basics" -msgstr "Noções básicas" - -#: ../../source/basics.txt:5 -msgid "This section will introduce some of the most important aspects of GTK+." -msgstr "Esta seção apresentará alguns dos aspectos mais importantes do GTK+." - -#: ../../source/basics.txt:12 -msgid "Main loop and Signals" -msgstr "Loop principal e sinais" - -#: ../../source/basics.txt:13 -msgid "" -"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " -"the user is doing nothing, GTK+ sits in the main loop and waits for input. " -"If the user performs some action - say, a mouse click - then the main loop " -"\"wakes up\" and delivers an event to GTK+." -msgstr "" -"Como a maioria dos toolkits GUI, o GTK+ usa um modelo de programação " -"orientada a eventos. Quando o usuário não está fazendo nada, o GTK+ fica no " -"loop principal e aguarda a entrada. Se o usuário executar alguma ação - " -"digamos, um clique do mouse - o loop principal \"acorda\" e entrega um " -"evento para o GTK+." - -#: ../../source/basics.txt:18 -msgid "" -"When widgets receive an event, they frequently emit one or more signals. " -"Signals notify your program that \"something interesting happened\" by " -"invoking functions you've connected to the signal. Such functions are " -"commonly known as *callbacks*. When your callbacks are invoked, you would " -"typically take some action - for example, when an Open button is clicked you " -"might display a file chooser dialog. After a callback finishes, GTK+ will " -"return to the main loop and await more user input." -msgstr "" -"Quando widgets recebem um evento, eles frequentemente emitem um ou mais " -"sinais. Sinais notificam seu programa que \"algo interessante aconteceu\" " -"invocando funções que você conectou ao sinal. Tais funções são comumente " -"conhecidas como *callbacks*. Quando seus retornos de chamada são invocados, " -"você normalmente toma algumas ações - por exemplo, quando um botão Abrir é " -"clicado, você pode exibir uma caixa de diálogo de seleção de arquivos. " -"Depois que um retorno de chamada terminar, o GTK+ retornará ao loop " -"principal e aguardará mais entrada do usuário." - -#: ../../source/basics.txt:28 -msgid "A generic example is:" -msgstr "Um exemplo genérico é:" - -#: ../../source/basics.txt:34 -msgid "" -"Firstly, *widget* is an instance of a widget we created earlier. Next, the " -"event we are interested in. Each widget has its own particular events which " -"can occur. For instance, if you have a button you usually want to connect to " -"the \"clicked\" event. This means that when the button is clicked, the " -"signal is issued. Thirdly, the *callback* argument is the name of the " -"callback function. It contains the code which runs when signals of the " -"specified type are issued. Finally, the *data* argument includes any data " -"which should be passed when the signal is issued. However, this argument is " -"completely optional and can be left out if not required." -msgstr "" -"Em primeiro lugar, *widget* é uma instância de um widget que criamos " -"anteriormente. Em seguida, o evento em que estamos interessados. Cada widget " -"tem seus próprios eventos específicos que podem ocorrer. Por exemplo, se " -"você tem um botão, geralmente deseja se conectar ao evento \"clicado\". Isso " -"significa que quando o botão é clicado, o sinal é emitido. Em terceiro " -"lugar, o argumento *callback* é o nome da função de retorno de chamada. Ele " -"contém o código que é executado quando os sinais do tipo especificado são " -"emitidos. Finalmente, o argumento *data* inclui todos os dados que devem ser " -"passados quando o sinal é emitido. No entanto, esse argumento é " -"completamente opcional e pode ser deixado de fora se não for necessário." - -#: ../../source/basics.txt:46 -msgid "" -"The function returns a number that identifies this particular signal-" -"callback pair. It is required to disconnect from a signal such that the " -"callback function will not be called during any future or currently ongoing " -"emissions of the signal it has been connected to." -msgstr "" -"A função retorna um número que identifica esse par de retorno de chamada " -"específico. É necessário desconectar de um sinal de modo que a função de " -"retorno de chamada não seja chamada durante qualquer emissão futura ou atual " -"do sinal ao qual está conectada." - -#: ../../source/basics.txt:56 -msgid "" -"If you have lost the \"handler_id\" for some reason (for example the " -"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " -"still disconnect a specific callback using the function :func:" -"`disconnect_by_func`:" -msgstr "" -"Se você perdeu o \"handler_id\" por algum motivo (por exemplo, os " -"manipuladores foram instalados usando :func:`Gtk.Builder.connect_signals`), " -"você ainda pode desconectar um callback específico usando a função :func:" -"`disconnect_by_func`:" - -#: ../../source/basics.txt:64 -msgid "" -"Applications should connect to the \"destroy\" signal of the top-level " -"window. It is emitted an object is destroyed, so when a user requests that a " -"toplevel window is closed, the default handler for this signal destroys the " -"window, but does not terminate the application. Connecting the \"destroy\" " -"signal of the top-level window to the function :func:`Gtk.main_quit` will " -"result in the desired behaviour." -msgstr "" -"Os aplicativos devem se conectar ao sinal \"destroy\" da janela de nível " -"superior. É emitido um objeto é destruído, portanto, quando um usuário " -"solicita que uma janela de nível superior é fechada, o manipulador padrão " -"para este sinal destrói a janela, mas não finaliza o aplicativo. Conectar o " -"sinal \"destroy\" da janela de nível superior à função :func:`Gtk.main_quit` " -"resultará no comportamento desejado." - -#: ../../source/basics.txt:74 -msgid "" -"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " -"return." -msgstr "" -"Chamar :func:`Gtk.main_quit` faz o loop principal dentro do retorno de :func:" -"`Gtk.main`." - -#: ../../source/basics.txt:77 -msgid "Properties" -msgstr "Propriedades" - -#: ../../source/basics.txt:78 -msgid "" -"Properties describe the configuration and state of widgets. As for signals, " -"each widget has its own particular set of properties. For example, a button " -"has the property \"label\" which contains the text of the label widget " -"inside the button. You can specify the name and value of any number of " -"properties as keyword arguments when creating an instance of a widget. To " -"create a label aligned to the right with the text \"Hello World\" and an " -"angle of 25 degrees, use:" -msgstr "" -"Propriedades descrevem a configuração e o estado dos widgets. Quanto aos " -"sinais, cada widget tem seu próprio conjunto particular de propriedades. Por " -"exemplo, um botão tem a propriedade \"label\", que contém o texto do widget " -"de etiqueta dentro do botão. Você pode especificar o nome e o valor de " -"qualquer número de propriedades como argumentos de palavras-chave ao criar " -"uma instância de um widget. Para criar um rótulo alinhado à direita com o " -"texto \"Hello World\" e um ângulo de 25 graus, use:" - -#: ../../source/basics.txt:89 -msgid "which is equivalent to" -msgstr "que é equivalente a" - -#: ../../source/basics.txt:98 -msgid "" -"Instead of using getters and setters you can also get and set the gobject " -"properties through the \"props\" property such as ``widget.props.prop_name = " -"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" -"name\")`` and ``widget.set_property(\"prop-name\", value)``." -msgstr "" -"Em vez de usar getters e setters, você também pode obter e definir as " -"propriedades do gobject através da propriedade \"props\", como ``widget." -"props.prop_name = value``. Isto é equivalente ao mais detalhado ``widget." -"get_property(\"prop-name\")`` e ``widget.set_property(\"prop-name\", " -"value)``." - -#: ../../source/basics.txt:103 -msgid "" -"To see which properties are available for a widget in the running version of " -"GTK you can \"dir\" the \"props\" property:" -msgstr "" -"Para ver quais propriedades estão disponíveis para um widget na versão em " -"execução do GTK, você pode usar \"dir\" com a propriedade \"props\":" - -#: ../../source/basics.txt:110 -msgid "This will print in the console the list of properties a Gtk.Box has." -msgstr "" -"Isto irá imprimir no console a lista de propriedades que um Gtk.Box possui." diff --git a/translations/locale/pt_BR/LC_MESSAGES/builder.po b/translations/locale/pt_BR/LC_MESSAGES/builder.po deleted file mode 100644 index 48c8aa0..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/builder.po +++ /dev/null @@ -1,223 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 22:50-0300\n" -"PO-Revision-Date: 2018-04-11 22:57-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/builder.txt:2 -msgid "Glade and Gtk.Builder" -msgstr "Glade e Gtk.Builder" - -#: ../../source/builder.txt:3 -msgid "" -"The :class:`Gtk.Builder` class offers you the opportunity to design user " -"interfaces without writing a single line of code. This is possible through " -"describing the interface by a XML file and then loading the XML description " -"at runtime and create the objects automatically, which the Builder class " -"does for you. For the purpose of not needing to write the XML manually the " -"`Glade `_ application lets you create the user " -"interface in a WYSIWYG (what you see is what you get) manner" -msgstr "" -"A classe :class:`Gtk.Builder` oferece a você a oportunidade de projetar " -"interfaces de usuário sem escrever uma única linha de código. Isso é " -"possível descrevendo a interface por um arquivo XML e, em seguida, " -"carregando a descrição XML em tempo de execução e criando os objetos " -"automaticamente, o que a classe Builder faz por você. Para o propósito de " -"não precisar escrever o XML manualmente, o aplicativo `Glade `_ permite criar a interface do usuário de uma maneira WYSIWYG (o " -"que você vê é o que obtém)" - -#: ../../source/builder.txt:7 -msgid "This method has several advantages:" -msgstr "Esse método possui várias vantagens:" - -#: ../../source/builder.txt:9 -msgid "Less code needs to be written." -msgstr "Menos código precisa ser escrito." - -#: ../../source/builder.txt:10 -msgid "UI changes can be seen more quickly, so UIs are able to improve." -msgstr "" -"As mudanças da interface do usuário podem ser vistas mais rapidamente, para " -"que as interfaces de usuário possam melhorar." - -#: ../../source/builder.txt:11 -msgid "Designers without programming skills can create and edit UIs." -msgstr "" -"Designers sem habilidades de programação podem criar e editar interfaces de " -"usuário." - -#: ../../source/builder.txt:12 -msgid "" -"The description of the user interface is independent from the programming " -"language being used." -msgstr "" -"A descrição da interface do usuário é independente da linguagem de " -"programação utilizada." - -#: ../../source/builder.txt:14 -msgid "" -"There is still code required for handling interface changes triggered by the " -"user, but :class:`Gtk.Builder` allows you to focus on implementing that " -"functionality." -msgstr "" -"Ainda existe código necessário para lidar com mudanças de interface " -"acionadas pelo usuário, mas :class:`Gtk.Builder` permite que você se " -"concentre em implementar essa funcionalidade." - -#: ../../source/builder.txt:17 -msgid "Creating and loading the .glade file" -msgstr "Criando e carregando o arquivo .glade" - -#: ../../source/builder.txt:18 -msgid "" -"First of all you have to download and install Glade. There are `several " -"tutorials `_ about " -"Glade, so this is not explained here in detail. Let's start by creating a " -"window with a button in it and saving it to a file named *example.glade*. " -"The resulting XML file should look like this." -msgstr "" -"Primeiro de tudo você tem que baixar e instalar o Glade. Existem `vários " -"tutoriais `_ sobre " -"o Glade, então isso não é explicado aqui em detalhes. Vamos começar criando " -"uma janela com um botão e salvando-a em um arquivo chamado *example.glade*. " -"O arquivo XML resultante deve se parecer com isso." - -#: ../../source/builder.txt:42 -msgid "To load this file in Python we need a :class:`Gtk.Builder` object." -msgstr "" -"Para carregar este arquivo em Python, precisamos de um objeto :class:`Gtk." -"Builder`." - -#: ../../source/builder.txt:49 -msgid "" -"The second line loads all objects defined in *example.glade* into the " -"Builder object." -msgstr "" -"A segunda linha carrega todos os objetos definidos em *example.glade* no " -"objeto Builder." - -#: ../../source/builder.txt:51 -msgid "" -"It is also possible to load only some of the objects. The following line " -"would add only the objects (and their child objects) given in the tuple." -msgstr "" -"Também é possível carregar apenas alguns dos objetos. A linha a seguir " -"adicionaria apenas os objetos (e seus objetos filhos) fornecidos na tupla." - -#: ../../source/builder.txt:58 -msgid "" -"These two methods exist also for loading from a string rather than a file. " -"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" -"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " -"instead of a file name." -msgstr "" -"Esses dois métodos também existem para o carregamento de uma string, em vez " -"de um arquivo. Seus nomes correspondentes são :meth:`Gtk.Builder." -"add_from_string` e :meth:`Gtk.Builder.add_objects_from_string` e eles " -"simplesmente pegam uma string XML em vez de um nome de arquivo." - -#: ../../source/builder.txt:62 -msgid "Accessing widgets" -msgstr "Acessando Widgets" - -#: ../../source/builder.txt:63 -msgid "" -"Now that the window and the button are loaded we also want to show them. " -"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " -"window. But how do we access the associated object?" -msgstr "" -"Agora que a janela e o botão estão carregados, também queremos mostrá-los. " -"Portanto, o método :meth:`Gtk.Window.show_all` deve ser chamado na janela. " -"Mas como acessamos o objeto associado?" - -#: ../../source/builder.txt:72 -msgid "" -"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." -"get_object` method and the widget's *id*. It is really *that* simple." -msgstr "" -"Cada widget pode ser recuperado do construtor pelo método :meth:`Gtk.Builder." -"get_object` e pelo *id* do widget. É realmente *isso* simples." - -#: ../../source/builder.txt:75 -msgid "It is also possible to get a list of all objects with" -msgstr "Também é possível obter uma lista de todos os objetos com" - -#: ../../source/builder.txt:82 -msgid "Connecting Signals" -msgstr "Conectando Sinais" - -#: ../../source/builder.txt:83 -msgid "" -"Glade also makes it possible to define signals which you can connect to " -"handlers in your code without extracting every object from the builder and " -"connecting to the signals manually. The first thing to do is to declare the " -"signal names in Glade. For this example we will act when the window is " -"closed and when the button was pressed, so we give the name \"onDestroy\" to " -"the callback handling the \"destroy\" signal of the window and " -"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " -"button. Now the XML file should look like this." -msgstr "" -"O Glade também permite definir sinais que você pode conectar a manipuladores " -"em seu código sem extrair todos os objetos do construtor e conectar-se aos " -"sinais manualmente. A primeira coisa a fazer é declarar os nomes dos sinais " -"no Glade. Para este exemplo, vamos agir quando a janela é fechada e quando o " -"botão foi pressionado, então damos o nome \"onDestroy\" para o retorno de " -"chamada manipulando o sinal \"destroy\" da janela e \"onButtonPressed\" para " -"o retorno de chamada manipulando o \"pressionado\" sinal do botão. Agora o " -"arquivo XML deve ficar assim." - -#: ../../source/builder.txt:91 -msgid "" -"Now we have to define the handler functions in our code. The *onDestroy* " -"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " -"pressed we would like to print the string \"Hello World!\", so we define the " -"handler as follows" -msgstr "" -"Agora temos que definir as funções do manipulador em nosso código. O " -"*onDestroy* deve simplesmente resultar em uma chamada para :meth:`Gtk." -"main_quit`. Quando o botão é pressionado, gostaríamos de imprimir a string " -"\"Hello World!\", Então definimos o manipulador da seguinte maneira" - -#: ../../source/builder.txt:100 -msgid "" -"Next, we have to connect the signals and the handler functions. The easiest " -"way to do this is to define a *dict* with a mapping from the names to the " -"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." -msgstr "" -"Em seguida, temos que conectar os sinais e as funções do manipulador. A " -"maneira mais fácil de fazer isso é definir um *dict* com um mapeamento dos " -"nomes para os manipuladores e então passá-lo para o método :meth:`Gtk." -"Builder.connect_signals`." - -#: ../../source/builder.txt:111 -msgid "" -"An alternative approach is to create a class which has methods that are " -"called like the signals. In our example the last code snippet could be " -"rewritten as:" -msgstr "" -"Uma abordagem alternativa é criar uma classe que tenha métodos que sejam " -"chamados como os sinais. Em nosso exemplo, o último snippet de código pode " -"ser reescrito como:" - -#: ../../source/builder.txt:119 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/builder.txt:120 -msgid "The final code of the example" -msgstr "O código final do exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po b/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po deleted file mode 100644 index 90279be..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/button_widgets.po +++ /dev/null @@ -1,279 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/button_widgets.txt:2 -msgid "Button Widgets" -msgstr "Widgets de Botão" - -#: ../../source/button_widgets.txt:5 -msgid "Button" -msgstr "Botão" - -#: ../../source/button_widgets.txt:7 -msgid "" -"The Button widget is another commonly used widget. It is generally used to " -"attach a function that is called when the button is pressed." -msgstr "" -"O widget Button é outro widget comumente usado. Geralmente é usado para " -"anexar uma função que é chamada quando o botão é pressionado." - -#: ../../source/button_widgets.txt:10 -msgid "" -"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " -"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " -"child is the :class:`Gtk.Label`." -msgstr "" -"O widget :class:`Gtk.Button` pode conter qualquer widget filho válido. Isto " -"é, ele pode conter praticamente qualquer outro padrão :class:`Gtk.Widget`. " -"Um filho mais comumente usado é a :class:`Gtk.Label`." - -#: ../../source/button_widgets.txt:14 -msgid "" -"Usually, you want to connect to the button's \"clicked\" signal which is " -"emitted when the button has been pressed and released." -msgstr "" -"Normalmente, você quer se conectar ao sinal \"clicado\" do botão que é " -"emitido quando o botão foi pressionado e liberado." - -#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 -#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 -#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/button_widgets.txt:26 -msgid "ToggleButton" -msgstr "Botão de Alternância" - -#: ../../source/button_widgets.txt:28 -msgid "" -"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " -"but when clicked they remain activated, or pressed, until clicked again. " -"When the state of the button is changed, the \"toggled\" signal is emitted." -msgstr "" -"A :class:`Gtk.ToggleButton` é muito semelhante a um normal :class:`Gtk." -"Button`, mas quando clicados eles permanecem ativados, ou pressionados, até " -"serem clicados novamente. Quando o estado do botão é alterado, o sinal " -"\"toggled\" (alternado) é emitido." - -#: ../../source/button_widgets.txt:32 -msgid "" -"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" -"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " -"button is \"down\". You can also set the toggle button's state, with :meth:" -"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " -"actually changes, it causes the \"toggled\" signal to be emitted." -msgstr "" -"Para recuperar o estado da :class:`Gtk.ToggleButton`, você pode usar o " -"método :meth:`Gtk.ToggleButton.get_active`. Isso retorna ``True`` se o botão " -"estiver \"inativo\". Você também pode definir o estado do botão de " -"alternância, com :meth:`Gtk.ToggleButton.set_active`. Observe que, se você " -"fizer isso e o estado realmente mudar, isso fará com que o sinal \"alternado" -"\" seja emitido." - -#: ../../source/button_widgets.txt:47 -msgid "CheckButton" -msgstr "Botão de Seleção" - -#: ../../source/button_widgets.txt:48 -msgid "" -":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " -"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" -"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " -"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." -"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " -"inherited." -msgstr "" -":class:`Gtk.CheckButton` herda de :class:`Gtk.ToggleButton`. A única " -"diferença real entre os dois é como :class:`Gtk.CheckButton` é apresentado. " -"A :class:`Gtk.CheckButton` coloca um discreto :class:`Gtk.ToggleButton` ao " -"lado de um widget, (geralmente um :class:`Gtk.Label`). O sinal \"toggled\", :" -"meth:`Gtk.ToggleButton.set_active` e :meth:`Gtk.ToggleButton.get_active` são " -"herdados." - -#: ../../source/button_widgets.txt:56 -msgid "RadioButton" -msgstr "Botão de Radio" - -#: ../../source/button_widgets.txt:57 -msgid "" -"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " -"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " -"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " -"one way of giving the user a choice from many options." -msgstr "" -"Como os checkboxes, os radio buttons também herdam de :class:`Gtk." -"ToggleButton`, mas estes funcionam em grupos, e apenas um :class:`Gtk." -"RadioButton` em um grupo pode ser selecionado a qualquer momento. Portanto, " -"um :class:`Gtk.RadioButton` é uma maneira de dar ao usuário uma escolha " -"entre várias opções." - -#: ../../source/button_widgets.txt:62 -msgid "" -"Radio buttons can be created with one of the static methods :meth:`Gtk." -"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." -"new_with_label_from_widget` or :meth:`Gtk.RadioButton." -"new_with_mnemonic_from_widget`. The first radio button in a group will be " -"created passing ``None`` as the *group* argument. In subsequent calls, the " -"group you wish to add this button to should be passed as an argument." -msgstr "" -"Botões de rádio podem ser criados com um dos métodos estáticos :meth:`Gtk." -"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." -"new_with_label_from_widget` ou :meth:`Gtk.RadioButton." -"new_with_mnemonic_from_widget`. O primeiro botão de rádio de um grupo será " -"criado passando o ``None`` como o argumento *group*. Nas chamadas " -"subsequentes, o grupo ao qual você deseja adicionar esse botão deve ser " -"passado como um argumento." - -#: ../../source/button_widgets.txt:70 -msgid "" -"When first run, the first radio button in the group will be active. This can " -"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " -"first argument." -msgstr "" -"Quando executado pela primeira vez, o primeiro botão de rádio do grupo " -"estará ativo. Isto pode ser alterado chamando :meth:`Gtk.ToggleButton." -"set_active` com ``True`` como primeiro argumento." - -#: ../../source/button_widgets.txt:74 -msgid "" -"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " -"achieved by calling :meth:`Gtk.RadioButton.join_group`." -msgstr "" -"Alterar o grupo de widgets :class:`Gtk.RadioButton` após sua criação pode " -"ser feito chamando :meth:`Gtk.RadioButton.join_group`." - -#: ../../source/button_widgets.txt:86 -msgid "LinkButton" -msgstr "Botão Link" - -#: ../../source/button_widgets.txt:87 -msgid "" -"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " -"to the one used by web browsers, which triggers an action when clicked. It " -"is useful to show quick links to resources." -msgstr "" -"A :class:`Gtk.LinkButton` é um :class:`Gtk.Button` com um hiperlink, similar " -"ao usado pelos navegadores da web, que aciona uma ação quando clicado. É " -"útil mostrar links rápidos para recursos." - -#: ../../source/button_widgets.txt:91 -msgid "" -"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" -"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." -"get_uri`." -msgstr "" -"O URI ligado a um :class:`Gtk.LinkButton` pode ser configurado " -"especificamente usando :meth:`Gtk.LinkButton.set_uri` e recuperado usando :" -"meth:`Gtk.LinkButton.get_uri`." - -#: ../../source/button_widgets.txt:103 -msgid "SpinButton" -msgstr "Botão Giratório" - -#: ../../source/button_widgets.txt:104 -msgid "" -"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " -"of some attribute. Rather than having to directly type a number into a :" -"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " -"of two arrows to increment or decrement the displayed value. A value can " -"still be typed in, with the bonus that it can be checked to ensure it is in " -"a given range. The main properties of a :class:`Gtk.SpinButton` are set " -"through :class:`Gtk.Adjustment`." -msgstr "" -"A :class:`Gtk.SpinButton` é uma maneira ideal de permitir que o usuário " -"defina o valor de algum atributo. Em vez de digitar diretamente um número " -"em :class:`Gtk.Entry`, :class:`Gtk.SpinButton` permite que o usuário clique " -"em uma das duas setas para incrementar ou decrementar o valor exibido. Um " -"valor ainda pode ser digitado, com o bônus que pode ser verificado para " -"garantir que esteja em um determinado intervalo. As propriedades principais " -"de um :class:`Gtk.SpinButton` são definidas através de :class:`Gtk." -"Adjustment`." - -#: ../../source/button_widgets.txt:112 -msgid "" -"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." -"SpinButton.set_value`. The value entered can either be an integer or float, " -"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" -"meth:`Gtk.SpinButton.get_value_as_int`, respectively." -msgstr "" -"Para alterar o valor que :class:`Gtk.SpinButton` está mostrando, use :meth:" -"`Gtk.SpinButton.set_value`. O valor digitado pode ser um número inteiro ou " -"float, dependendo de seus requisitos, use :meth:`Gtk.SpinButton.get_value` " -"ou :meth:`Gtk.SpinButton.get_value_as_int`, respectivamente." - -#: ../../source/button_widgets.txt:117 -msgid "" -"When you allow the displaying of float values in the spin button, you may " -"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." -"SpinButton.set_digits`." -msgstr "" -"Quando você permite a exibição de valores flutuantes no botão de rotação, " -"você pode querer ajustar o número de espaços decimais exibidos chamando :" -"meth:`Gtk.SpinButton.set_digits`." - -#: ../../source/button_widgets.txt:121 -msgid "" -"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " -"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " -"with ``True`` as argument." -msgstr "" -"Por padrão, :class:`Gtk.SpinButton` aceita dados textuais. Se você deseja " -"limitar isso apenas a valores numéricos, chame :meth:`Gtk.SpinButton." -"set_numeric` com ``True`` como argumento." - -#: ../../source/button_widgets.txt:125 -msgid "" -"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " -"two options here; by default the spin button updates the value even if the " -"data entered is invalid. Alternatively, we can set the policy to only update " -"when the value entered is valid by calling :meth:`Gtk.SpinButton." -"set_update_policy`." -msgstr "" -"Também podemos ajustar a política de atualização de :class:`Gtk.SpinButton`. " -"Existem duas opções aqui; por padrão, o botão de rotação atualiza o valor " -"mesmo se os dados inseridos forem inválidos. Alternativamente, podemos " -"definir a política para apenas atualizar quando o valor inserido é válido " -"chamando :meth:`Gtk.SpinButton.set_update_policy`." - -#: ../../source/button_widgets.txt:139 -msgid "Switch" -msgstr "Interruptor" - -#: ../../source/button_widgets.txt:140 -msgid "" -"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " -"can control which state should be active by clicking the empty area, or by " -"dragging the handle." -msgstr "" -"A :class:`Gtk.Switch` é um widget que possui dois estados: ligado ou " -"desligado. O usuário pode controlar qual estado deve estar ativo clicando na " -"área vazia ou arrastando a alça." - -#: ../../source/button_widgets.txt:144 -msgid "" -"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " -"action signal and emitting it causes the switch to animate. Applications " -"should never connect to this signal, but use the \"notify::active\" signal, " -"see the example here below." -msgstr "" -"Você não deve usar o sinal \"activate\" no Gtk.Switch que é um sinal de ação " -"e emiti-lo faz com que o switch anime. As aplicações nunca devem se conectar " -"a este sinal, mas use o sinal \"notify::active\", veja o exemplo abaixo." diff --git a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po b/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po deleted file mode 100644 index 9bf9fab..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/cellrenderers.po +++ /dev/null @@ -1,248 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 06:37-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/cellrenderers.txt:4 -msgid "CellRenderers" -msgstr "" - -#: ../../source/cellrenderers.txt:6 -msgid "" -":class:`Gtk.CellRenderer` widgets are used to display information within " -"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " -"work closely with the associated widgets and are very powerful, with lots of " -"configuration options for displaying a large amount of data in different " -"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " -"for different purposes:" -msgstr "" -"Os widgets :class:`Gtk.CellRenderer` são usados para exibir informações " -"dentro de widgets como :class:`Gtk.TreeView` ou :class:`Gtk.ComboBox`. Eles " -"trabalham de perto com os widgets associados e são muito poderosos, com " -"muitas opções de configuração para exibir uma grande quantidade de dados de " -"diferentes maneiras. Há sete widgets :class:`Gtk.CellRenderer` que podem ser " -"usados para diferentes propósitos:" - -#: ../../source/cellrenderers.txt:12 -msgid ":class:`Gtk.CellRendererText`" -msgstr "" - -#: ../../source/cellrenderers.txt:13 -msgid ":class:`Gtk.CellRendererToggle`" -msgstr "" - -#: ../../source/cellrenderers.txt:14 -msgid ":class:`Gtk.CellRendererPixbuf`" -msgstr "" - -#: ../../source/cellrenderers.txt:15 -msgid ":class:`Gtk.CellRendererCombo`" -msgstr "" - -#: ../../source/cellrenderers.txt:16 -msgid ":class:`Gtk.CellRendererProgress`" -msgstr "" - -#: ../../source/cellrenderers.txt:17 -msgid ":class:`Gtk.CellRendererSpinner`" -msgstr "" - -#: ../../source/cellrenderers.txt:18 -msgid ":class:`Gtk.CellRendererSpin`" -msgstr "" - -#: ../../source/cellrenderers.txt:19 -msgid ":class:`Gtk.CellRendererAccel`" -msgstr "" - -#: ../../source/cellrenderers.txt:22 -msgid "CellRendererText" -msgstr "" - -#: ../../source/cellrenderers.txt:24 -msgid "" -"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " -"font, color and style information provided by its properties. The text will " -"be ellipsized if it is too long and the \"ellipsize\" property allows it." -msgstr "" -"A :class:`Gtk.CellRendererText` processa um dado texto em sua célula, usando " -"as informações de fonte, cor e estilo fornecidas por suas propriedades. O " -"texto será reticulado se for muito longo e a propriedade \"ellipsize\" " -"permitir." - -#: ../../source/cellrenderers.txt:28 -msgid "" -"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " -"This can be changed by setting the value of the \"editable\" property to " -"``True``:" -msgstr "" -"Por padrão, o texto em :class:`Gtk.CellRendererText` widgets não é editável. " -"Isso pode ser alterado, definindo o valor da propriedade \"editable\" como " -"``True``:" - -#: ../../source/cellrenderers.txt:35 -msgid "" -"You can then connect to the \"edited\" signal and update your :class:`Gtk." -"TreeModel` accordingly." -msgstr "" -"Você pode então se conectar ao sinal \"editado\" e atualizar seu :class:`Gtk." -"TreeModel` de acordo." - -#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 -#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 -#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/cellrenderers.txt:47 -msgid "CellRendererToggle" -msgstr "" - -#: ../../source/cellrenderers.txt:49 -msgid "" -":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " -"button is drawn as a radio- or checkbutton, depending on the \"radio\" " -"property. When activated, it emits the \"toggled\" signal." -msgstr "" -":class:`Gtk.CellRendererToggle` renderiza um botão de alternância em uma " -"célula. O botão é desenhado como um botão de rádio ou de verificação, " -"dependendo da propriedade \"radio\". Quando ativado, emite o sinal " -"\"alternado\"." - -#: ../../source/cellrenderers.txt:53 -msgid "" -"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " -"active, you most likely want to bind the \"active\" property on the cell " -"renderer to a boolean value in the model, thus causing the check button to " -"reflect the state of the model." -msgstr "" -"Como um :class:`Gtk.CellRendererToggle` pode ter dois estados, ativos e não " -"ativos, você provavelmente deseja vincular a propriedade \"active\" no " -"renderizador de célula a um valor booleano no modelo, fazendo com que o " -"botão de verificação reflita o estado do modelo." - -#: ../../source/cellrenderers.txt:67 -msgid "CellRendererPixbuf" -msgstr "" - -#: ../../source/cellrenderers.txt:69 -msgid "" -"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " -"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" -"\" property) or a named icon (set via the \"icon-name\" property)." -msgstr "" -"A :class:`Gtk.CellRendererPixbuf` pode ser usado para renderizar uma imagem " -"em uma célula. Ele permite renderizar um dado :class:`Gdk.Pixbuf` (definido " -"através da propriedade \"pixbuf\") ou um ícone nomeado (configurado através " -"da propriedade \"icon-name\")." - -#: ../../source/cellrenderers.txt:82 -msgid "CellRendererCombo" -msgstr "" - -#: ../../source/cellrenderers.txt:84 -msgid "" -":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" -"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " -"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" -"\" property." -msgstr "" -":class:`Gtk.CellRendererCombo` processa texto em uma célula como :class:`Gtk." -"CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " -"entrada simples para editar o texto, :class:`Gtk.CellRendererCombo` oferece " -"um widget :class:`Gtk.ComboBox` para editar o texto. Os valores a serem " -"exibidos na caixa de combinação são obtidos de :class:`Gtk.TreeModel` " -"especificado na propriedade \"model\"." - -#: ../../source/cellrenderers.txt:90 -msgid "" -"The combo cell renderer takes care of adding a text cell renderer to the " -"combo box and sets it to display the column specified by its \"text-column\" " -"property." -msgstr "" -"O renderizador de célula de combinação toma o cuidado de adicionar um " -"renderizador de célula de texto à caixa de combinação e o configura para " -"exibir a coluna especificada por sua propriedade \"text-column\"." - -#: ../../source/cellrenderers.txt:93 -msgid "" -"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " -"with and without an associated :class:`Gtk.Entry` widget, depending on the " -"value of the \"has-entry\" property." -msgstr "" -"A :class:`Gtk.CellRendererCombo` pode operar em dois modos. Ele pode ser " -"usado com e sem um widget associado :class:`Gtk.Entry`, dependendo do valor " -"da propriedade \"has-entry\"." - -#: ../../source/cellrenderers.txt:106 -msgid "CellRendererProgress" -msgstr "" - -#: ../../source/cellrenderers.txt:108 -msgid "" -":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " -"in a cell. Additionally, it can display a text on top of the progress bar." -msgstr "" -":class:`Gtk.CellRendererProgress` renderiza um valor numérico como uma barra " -"de progresso em uma célula. Além disso, pode exibir um texto na parte " -"superior da barra de progresso." - -#: ../../source/cellrenderers.txt:111 -msgid "" -"The percentage value of the progress bar can be modified by changing the " -"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " -"*activity mode* by incrementing the \"pulse\" property instead of the \"value" -"\" property." -msgstr "" -"O valor percentual da barra de progresso pode ser modificado alterando a " -"propriedade \"value\". Semelhante a :class:`Gtk.ProgressBar`, você pode " -"ativar o *modo de atividade* incrementando a propriedade \"pulse\" em vez da " -"propriedade \"value\"." - -#: ../../source/cellrenderers.txt:124 -msgid "CellRendererSpin" -msgstr "" - -#: ../../source/cellrenderers.txt:126 -msgid "" -":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" -"`Gtk.SpinButton` widget. Of course, that means that the text has to be " -"parseable as a floating point number." -msgstr "" -":class:`Gtk.CellRendererSpin` processa o texto em uma célula como :class:" -"`Gtk.CellRendererText` do qual é derivado. Mas enquanto o último oferece uma " -"entrada simples para editar o texto, :class:`Gtk.CellRendererSpin` oferece " -"um widget :class:`Gtk.SpinButton`. Claro, isso significa que o texto deve " -"ser analisado como um número de ponto flutuante." - -#: ../../source/cellrenderers.txt:132 -msgid "" -"The range of the spinbutton is taken from the adjustment property of the " -"cell renderer, which can be set explicitly or mapped to a column in the tree " -"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " -"also has properties for the climb rate and the number of digits to display." -msgstr "" -"O intervalo do botão de rotação é obtido da propriedade de ajuste do " -"renderizador de célula, que pode ser definido explicitamente ou mapeado para " -"uma coluna no modelo de árvore, como todas as propriedades dos " -"renderizadores de célula. :class:`Gtk.CellRendererSpin` também possui " -"propriedades para a taxa de subida e o número de dígitos a serem exibidos." diff --git a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po b/translations/locale/pt_BR/LC_MESSAGES/clipboard.po deleted file mode 100644 index 187a1db..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/clipboard.po +++ /dev/null @@ -1,55 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 03:57-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/clipboard.txt:2 -msgid "Clipboard" -msgstr "" - -#: ../../source/clipboard.txt:4 -msgid "" -":class:`Gtk.Clipboard` provides a storage area for a variety of data, " -"including text and images. Using a clipboard allows this data to be shared " -"between applications through actions such as copying, cutting, and pasting. " -"These actions are usually done in three ways: using keyboard shortcuts, " -"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." -"Button` widgets." -msgstr "" -":class:`Gtk.Clipboard` fornece uma área de armazenamento para uma variedade " -"de dados, incluindo texto e imagens. O uso de uma área de transferência " -"permite que esses dados sejam compartilhados entre aplicativos por meio de " -"ações como copiar, cortar e colar. Essas ações geralmente são feitas de " -"três maneiras: usando atalhos de teclado, usando um :class:`Gtk.MenuItem` e " -"conectando as funções aos widgets :class:`Gtk.Button`." - -#: ../../source/clipboard.txt:11 -msgid "" -"There are multiple clipboard selections for different purposes. In most " -"circumstances, the selection named ``CLIPBOARD`` is used for everyday " -"copying and pasting. ``PRIMARY`` is another common selection which stores " -"text selected by the user with the cursor." -msgstr "" -"Existem várias seleções da área de transferência para finalidades " -"diferentes. Na maioria das circunstâncias, a seleção chamada ``CLIPBOARD`` " -"é usada para copiar e colar todos os dias. ``PRIMARY`` é outra seleção " -"comum que armazena texto selecionado pelo usuário com o cursor." - -#: ../../source/clipboard.txt:17 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/combobox.po b/translations/locale/pt_BR/LC_MESSAGES/combobox.po deleted file mode 100644 index eb3babe..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/combobox.po +++ /dev/null @@ -1,85 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:07-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/combobox.txt:2 -msgid "ComboBox" -msgstr "" - -#: ../../source/combobox.txt:3 -msgid "" -"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " -"menu. They are preferable to having many radio buttons on screen as they " -"take up less room. If appropriate, it can show extra information about each " -"item, such as text, a picture, a checkbox, or a progress bar." -msgstr "" -"A :class:`Gtk.ComboBox` permite a seleção de um item em um menu suspenso. " -"Eles são preferíveis a ter muitos botões de rádio na tela, pois ocupam menos " -"espaço. Se apropriado, ele pode mostrar informações extras sobre cada item, " -"como texto, uma imagem, uma caixa de seleção ou uma barra de progresso." - -#: ../../source/combobox.txt:8 -msgid "" -":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " -"the model-view pattern; the list of valid choices is specified in the form " -"of a tree model, and the display of the choices can be adapted to the data " -"in the model by using :ref:`cell renderers `. If the combo " -"box contains a large number of items, it may be better to display them in a " -"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." -"set_wrap_width`." -msgstr "" -":class:`Gtk.ComboBox` é muito similar a :class:`Gtk.TreeView`, já que ambos " -"usam o padrão model-view; A lista de opções válidas é especificada na forma " -"de um modelo de árvore, e a exibição das opções pode ser adaptada aos dados " -"no modelo usando :ref:`renderizadores de célula `. Se a caixa " -"de combinação contiver um grande número de itens, talvez seja melhor exibi-" -"los em uma grade em vez de em uma lista. Isso pode ser feito chamando :meth:" -"`Gtk.ComboBox.set_wrap_width`." - -#: ../../source/combobox.txt:16 -msgid "" -"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " -"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " -"to enter arbitrary text if none of the available choices are suitable. To do " -"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" -"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." -"ComboBox` instance." -msgstr "" -"O widget :class:`Gtk.ComboBox` geralmente restringe o usuário às opções " -"disponíveis, mas ele pode opcionalmente ter um :class:`Gtk.Entry`, " -"permitindo que o usuário insira texto arbitrário se nenhuma das opções " -"disponíveis for adequada. Para fazer isso, use um dos métodos estáticos :" -"meth:`Gtk.ComboBox.new_with_entry` ou :meth:`Gtk.ComboBox." -"new_with_model_and_entry` para criar uma instância :class:`Gtk.ComboBox`." - -#: ../../source/combobox.txt:23 -msgid "" -"For a simple list of textual choices, the model-view API of :class:`Gtk." -"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " -"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." -"ComboBoxText` can contain an entry." -msgstr "" -"Para uma lista simples de escolhas textuais, a API de visão de modelo de :" -"class:`Gtk.ComboBox` pode ser um pouco avassaladora. Neste caso, :class:`Gtk." -"ComboBoxText` oferece uma alternativa simples. Ambos :class:`Gtk.ComboBox` " -"e :class:`Gtk.ComboBoxText` podem conter uma entrada." - -#: ../../source/combobox.txt:29 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po b/translations/locale/pt_BR/LC_MESSAGES/dialogs.po deleted file mode 100644 index 78f7c14..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/dialogs.po +++ /dev/null @@ -1,313 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 14:26-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/dialogs.txt:2 -msgid "Dialogs" -msgstr "" - -#: ../../source/dialogs.txt:4 -msgid "" -"Dialog windows are very similar to standard windows, and are used to provide " -"or retrieve information from the user. They are often used to provide a " -"preferences window, for example. The major difference a dialog has is some " -"prepacked widgets which layout the dialog automatically. From there, we can " -"simply add labels, buttons, check buttons, etc. Another big difference is " -"the handling of responses to control how the application should behave after " -"the dialog has been interacted with." -msgstr "" -"As janelas de caixa de diálogo são muito semelhantes às janelas padrão e são " -"usadas para fornecer ou recuperar informações do usuário. Eles são " -"frequentemente usados para fornecer uma janela de preferências, por exemplo. " -"A principal diferença que uma caixa de diálogo tem é alguns widgets pré-" -"empacotados que organizam a caixa de diálogo automaticamente. A partir daí, " -"podemos simplesmente adicionar rótulos, botões, botões de verificação, etc. " -"Outra grande diferença é o tratamento de respostas para controlar como o " -"aplicativo deve se comportar após a interação com a caixa de diálogo." - -#: ../../source/dialogs.txt:12 -msgid "" -"There are several derived Dialog classes which you might find useful. :class:" -"`Gtk.MessageDialog` is used for most simple notifications. But at other " -"times you might need to derive your own dialog class to provide more complex " -"functionality." -msgstr "" -"Existem várias classes de diálogo derivadas que você pode achar útil. :class:" -"`Gtk.MessageDialog` é usado para notificações mais simples. Porém, em outras " -"ocasiões, você pode precisar derivar sua própria classe de diálogo para " -"fornecer uma funcionalidade mais complexa." - -#: ../../source/dialogs.txt:18 -msgid "Custom Dialogs" -msgstr "Dialogs Personalizados" - -#: ../../source/dialogs.txt:20 -msgid "" -"To pack widgets into a custom dialog, you should pack them into the :class:" -"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" -"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." -"Dialog.add_button` method." -msgstr "" -"Para empacotar widgets em um diálogo customizado, você deve empacotá-los no :" -"class:`Gtk.Box`, disponível via :meth:`Gtk.Dialog.get_content_area`. Para " -"adicionar apenas um :class:`Gtk.Button` ao final do diálogo, você poderia " -"usar o método :meth:`Gtk.Dialog.add_button`." - -#: ../../source/dialogs.txt:25 -msgid "" -"A 'modal' dialog (that is, one which freezes the rest of the application " -"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " -"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " -"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." -msgstr "" -"Um diálogo 'modal' (isto é, um que congela o resto do aplicativo da entrada " -"do usuário), pode ser criado chamando :class:`Gtk.Dialog.set_modal` no " -"diálogo ou setando o argumento ``flags`` do o construtor :class:`Gtk.Dialog` " -"para incluir o sinalizador :attr:`Gtk.DialogFlags.MODAL`." - -#: ../../source/dialogs.txt:30 -msgid "" -"Clicking a button will emit a signal called \"response\". If you want to " -"block waiting for a dialog to return before returning control flow to your " -"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " -"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " -"response value that you specified in the :class:`Gtk.Dialog` constructor or :" -"meth:`Gtk.Dialog.add_button`." -msgstr "" -"Clicar em um botão irá emitir um sinal chamado \"response\". Se você quiser " -"bloquear a espera de um diálogo para retornar antes do retorno do fluxo de " -"controle para o seu código, você pode chamar :meth:`Gtk.Dialog.run`. Este " -"método retorna um int que pode ser um valor de :class:`Gtk.ResponseType` ou " -"pode ser o valor de resposta customizado que você especificou no construtor :" -"class:`Gtk.Dialog` ou :meth:`Gtk.Dialog .add_button`." - -#: ../../source/dialogs.txt:36 -msgid "" -"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " -"method removes the dialog from view, however keeps it stored in memory. This " -"is useful to prevent having to construct the dialog again if it needs to be " -"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " -"method can be used to delete the dialog from memory once it is no longer " -"needed. It should be noted that if the dialog needs to be accessed after it " -"has been destroyed, it will need to be constructed again otherwise the " -"dialog window will be empty." -msgstr "" -"Finalmente, existem duas maneiras de remover um diálogo. O método :meth:`Gtk." -"Widget.hide` remove a caixa de diálogo da visualização, mas mantém " -"armazenada na memória. Isso é útil para evitar a necessidade de construir a " -"caixa de diálogo novamente se precisar ser acessada posteriormente. " -"Alternativamente, o método :meth:`Gtk.Widget.destroy` pode ser usado para " -"excluir o diálogo da memória, uma vez que não é mais necessário. Deve ser " -"notado que se o diálogo precisar ser acessado depois de ter sido destruído, " -"ele precisará ser construído novamente, caso contrário a janela de diálogo " -"estará vazia." - -#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 -#: ../../source/dialogs.txt:130 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/dialogs.txt:53 -msgid "MessageDialog" -msgstr "" - -#: ../../source/dialogs.txt:55 -msgid "" -":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " -"standard message dialogs, with a message, an icon, and buttons for user " -"response You can specify the type of message and the text in the :class:`Gtk." -"MessageDialog` constructor, as well as specifying standard buttons." -msgstr "" -":class:`Gtk.MessageDialog` é uma classe de conveniência, usada para criar " -"diálogos de mensagem simples e padrão, com uma mensagem, um ícone e botões " -"para resposta do usuário. Você pode especificar o tipo de mensagem e o texto " -"no construtor :class:`Gtk.MessageDialog`, além de especificar botões padrão." - -#: ../../source/dialogs.txt:60 -msgid "" -"In some dialogs which require some further explanation of what has happened, " -"a secondary text can be added. In this case, the primary message entered " -"when creating the message dialog is made bigger and set to bold text. The " -"secondary message can be set by calling :meth:`Gtk.MessageDialog." -"format_secondary_text`." -msgstr "" -"Em alguns diálogos que requerem alguma explicação adicional do que " -"aconteceu, um texto secundário pode ser adicionado. Nesse caso, a mensagem " -"principal inserida ao criar a caixa de diálogo da mensagem é maior e " -"definida como texto em negrito. A mensagem secundária pode ser definida " -"chamando :meth:`Gtk.MessageDialog.format_secondary_text`." - -#: ../../source/dialogs.txt:74 -msgid "FileChooserDialog" -msgstr "" - -#: ../../source/dialogs.txt:76 -msgid "" -"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " -"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " -"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." -msgstr "" -"O :class:`Gtk.FileChooserDialog` é adequado para uso com itens de menu " -"\"Arquivo/Abrir\" ou \"Arquivo/Salvar\". Você pode usar todos os métodos :" -"class:`Gtk.FileChooser` no diálogo do seletor de arquivos, assim como " -"aqueles para :class:`Gtk.Dialog`." - -#: ../../source/dialogs.txt:80 -msgid "" -"When creating a :class:`Gtk.FileChooserDialog` you have to define the " -"dialog's purpose:" -msgstr "" -"Ao criar um :class:`Gtk.FileChooserDialog` você precisa definir o propósito " -"do diálogo:" - -#: ../../source/dialogs.txt:83 -msgid "" -"To select a file for opening, as for a File/Open command, use :attr:`Gtk." -"FileChooserAction.OPEN`" -msgstr "" -"Para selecionar um arquivo para abertura, como para um comando Arquivo/" -"Abrir, use :attr:`Gtk.FileChooserAction.OPEN`" - -#: ../../source/dialogs.txt:85 -msgid "" -"To save a file for the first time, as for a File/Save command, use :attr:" -"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" -"meth:`Gtk.FileChooser.set_current_name`." -msgstr "" -"Para salvar um arquivo pela primeira vez, como para um comando Arquivo/" -"Salvar, use :attr:`Gtk.FileChooserAction.SAVE` e sugira um nome como " -"\"Untitled\"com :meth:`Gtk.FileChooser.set_current_name`." - -#: ../../source/dialogs.txt:88 -msgid "" -"To save a file under a different name, as for a File/Save As command, use :" -"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" -"`Gtk.FileChooser.set_filename`." -msgstr "" -"Para salvar um arquivo com um nome diferente, como para um comando Arquivo/" -"Salvar como, use :attr:`Gtk.FileChooserAction.SAVE` e defina o nome do " -"arquivo existente como :meth:`Gtk.FileChooser.set_filename`." - -#: ../../source/dialogs.txt:91 -msgid "" -"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." -"SELECT_FOLDER`." -msgstr "" -"Para escolher uma pasta em vez de um arquivo, use :attr:`Gtk." -"FileChooserAction.SELECT_FOLDER`." - -#: ../../source/dialogs.txt:93 -msgid "" -":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " -"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." -"ResponseType.CANCEL` which can be specified in the :class:`Gtk." -"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " -"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " -"expects that at least one button will have of the following response IDs:" -msgstr "" -":class:`Gtk.FileChooserDialog` herda de :class:`Gtk.Dialog`, então os botões " -"possuem IDs de resposta como :attr:`Gtk.ResponseType.ACCEPT` e :attr:`Gtk." -"ResponseType.CANCEL`, que pode ser especificado no construtor :class:`Gtk." -"FileChooserDialog`. Em contraste com :class:`Gtk.Dialog`, você não pode usar " -"códigos de resposta customizados com :class:`Gtk.FileChooserDialog`. Espera " -"que pelo menos um botão tenha os seguintes IDs de resposta:" - -#: ../../source/dialogs.txt:100 -msgid ":attr:`Gtk.ResponseType.ACCEPT`" -msgstr "" - -#: ../../source/dialogs.txt:101 -msgid ":attr:`Gtk.ResponseType.OK`" -msgstr "" - -#: ../../source/dialogs.txt:102 -msgid ":attr:`Gtk.ResponseType.YES`" -msgstr "" - -#: ../../source/dialogs.txt:103 -msgid ":attr:`Gtk.ResponseType.APPLY`" -msgstr "" - -#: ../../source/dialogs.txt:105 -msgid "" -"When the user is finished selecting files, your program can get the selected " -"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " -"(:meth:`Gtk.FileChooser.get_uri`)." -msgstr "" -"Quando o usuário terminar de selecionar arquivos, seu programa pode obter os " -"nomes selecionados como nomes de arquivos (:meth:`Gtk.FileChooser." -"get_filename`) ou como URIs (:meth:`Gtk.FileChooser.get_uri`)." - -#: ../../source/dialogs.txt:109 -msgid "" -"By default, :class:`Gtk.FileChooser` only allows a single file to be " -"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." -"FileChooser.set_select_multiple`. Retrieving a list of selected files is " -"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." -"FileChooser.get_uris`." -msgstr "" -"Por padrão, :class:`Gtk.FileChooser` permite apenas que um único arquivo " -"seja selecionado por vez. Para permitir que vários arquivos sejam " -"selecionados, use :meth:`Gtk.FileChooser.set_select_multiple`. Recuperar uma " -"lista de arquivos selecionados é possível com :meth:`Gtk.FileChooser." -"get_filenames` ou :meth:`Gtk.FileChooser.get_uris`." - -#: ../../source/dialogs.txt:115 -msgid "" -":class:`Gtk.FileChooser` also supports a variety of options which make the " -"files and folders more configurable and accessible." -msgstr "" -":class:`Gtk.FileChooser` também suporta uma variedade de opções que tornam " -"os arquivos e pastas mais configuráveis e acessíveis." - -#: ../../source/dialogs.txt:118 -msgid "" -":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." -msgstr "" -":meth:`Gtk.FileChooser.set_local_only`: Somente arquivos locais podem ser " -"selecionados." - -#: ../../source/dialogs.txt:119 -msgid "" -":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." -msgstr "" -":meth:`Gtk.FileChooser.show_hidden`: arquivos e pastas ocultos são exibidos." - -#: ../../source/dialogs.txt:120 -msgid "" -":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " -"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " -"confirmation dialog if the user types a file name that already exists." -msgstr "" -":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Se o seletor de " -"arquivos foi configurado no modo :attr:`Gtk.FileChooserAction.SAVE`, ele " -"apresentará um diálogo de confirmação se o usuário digitar um nome de " -"arquivo que já existe." - -#: ../../source/dialogs.txt:124 -msgid "" -"Furthermore, you can specify which kind of files are displayed by creating :" -"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." -"add_filter`. The user can then select one of the added filters from a combo " -"box at the bottom of the file chooser." -msgstr "" -"Além disso, você pode especificar quais tipos de arquivos são exibidos " -"criando objetos :class:`Gtk.FileFilter` e chamando :meth:`Gtk.FileChooser." -"add_filter`. O usuário pode selecionar um dos filtros adicionados em uma " -"caixa de combinação na parte inferior do seletor de arquivos." diff --git a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po b/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po deleted file mode 100644 index 00f9d84..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/drag_and_drop.po +++ /dev/null @@ -1,223 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 04:04-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/drag_and_drop.txt:2 -msgid "Drag and Drop" -msgstr "Arraste e solte" - -#: ../../source/drag_and_drop.txt:4 -msgid "" -"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " -"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " -"required for the following examples to work." -msgstr "" -"As versões do PyGObject < 3.0.3 contêm um bug que não permite arrastar e " -"soltar para funcionar corretamente. Portanto, uma versão do PyGObject >= " -"3.0.3 é necessária para os exemplos a seguir funcionarem." - -#: ../../source/drag_and_drop.txt:8 -msgid "" -"Setting up drag and drop between widgets consists of selecting a drag source " -"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." -"drag_source_set` method, selecting a drag destination (the widget which the " -"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " -"handling the relevant signals on both widgets." -msgstr "" -"Configurar arrastar e soltar entre widgets consiste em selecionar uma fonte " -"de arrasto (o widget do qual o usuário começa a arrastar) com o método :meth:" -"`Gtk.Widget.drag_source_set`, selecionando um destino de arrasto (o widget " -"que o usuário coloca em) com o método :meth:`Gtk.Widget.drag_dest_set` e " -"depois manipular os sinais relevantes em ambos os widgets." - -#: ../../source/drag_and_drop.txt:14 -msgid "" -"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." -"drag_dest_set` some specialised widgets require the use of specific " -"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." -msgstr "" -"Em vez de usar :meth:`Gtk.Widget.drag_source_set` e :meth:`Gtk.Widget." -"drag_dest_set` alguns widgets especializados requerem o uso de funções " -"específicas (como :class:`Gtk.TreeView` e :class:`Gtk.IconView`)." - -#: ../../source/drag_and_drop.txt:18 -msgid "" -"A basic drag and drop only requires the source to connect to the \"drag-data-" -"get\" signal and the destination to connect to the \"drag-data-received\" " -"signal. More complex things such as specific drop areas and custom drag " -"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." -msgstr "" -"Um arrastar e soltar básico requer apenas que a fonte se conecte ao sinal " -"\"drag-data-get\" e que o destino se conecte ao sinal \"drag-data-received" -"\". Coisas mais complexas, como áreas de queda específicas e ícones de " -"arrastar personalizados, exigirão que você se conecte a :ref:`sinais " -"adicionais ` e interaja com o objeto :class:`Gdk.DragContext` " -"que fornece." - -#: ../../source/drag_and_drop.txt:24 -msgid "" -"In order to transfer data between the source and destination, you must " -"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" -"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." -msgstr "" -"Para transferir dados entre a origem e o destino, você deve interagir com a " -"variável :class:`Gtk.SelectionData` fornecida no :ref:`\"drag-data-get\" " -"` e sinais de :ref:`\"drag-data-received\" ` " -"usando os métodos get e set :class:`Gtk.SelectionData`." - -#: ../../source/drag_and_drop.txt:30 -msgid "Target Entries" -msgstr "Alvos de Entrada" - -#: ../../source/drag_and_drop.txt:31 -msgid "" -"To allow the drag source and destination to know what data they are " -"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " -"data that will be sent by the drag source and received by the drag " -"destination." -msgstr "" -"Para permitir que a fonte de arrastar e o destino saibam quais dados estão " -"recebendo e enviando, uma lista comum de :class:`Gtk.TargetEntry's ` é necessária. A :class:`Gtk.TargetEntry` descreve um dado que " -"será enviado pela fonte de arrasto e recebido pelo destino do arrasto." - -#: ../../source/drag_and_drop.txt:36 -msgid "" -"There are two ways of adding :class:`Gtk.TargetEntry's ` to " -"a source and destination. If the drag and drop is simple and each target " -"entry is of a different type, you can use the group of methods :meth:" -"`mentioned here `." -msgstr "" -"Existem duas maneiras de adicionar :class:`Gtk.TargetEntry's ` a uma origem e destino. Se o arrastar e soltar for simples e " -"cada entrada de destino for de um tipo diferente, você pode usar o grupo de " -"métodos mencionado aqui :meth:``." - -#: ../../source/drag_and_drop.txt:41 -msgid "" -"If you require more than one type of data or wish to do more complex things " -"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." -msgstr "" -"Se você precisar de mais de um tipo de dados ou quiser fazer coisas mais " -"complexas com os dados, você precisará criar o :class:`Gtk.TargetEntry's " -"` usando o método :meth:`Gtk.TargetEntry.new`." - -#: ../../source/drag_and_drop.txt:48 -msgid "Drag Source Signals" -msgstr "Sinais de Origem do Arrasto" - -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Name" -msgstr "Nome" - -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "When it is emitted" -msgstr "Quando é emitido" - -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Common Purpose" -msgstr "Propósito comum" - -#: ../../source/drag_and_drop.txt:52 -msgid "drag-begin" -msgstr "" - -#: ../../source/drag_and_drop.txt:52 -msgid "User starts a drag" -msgstr "Usuário inicia um arrasto" - -#: ../../source/drag_and_drop.txt:52 -msgid "Set-up drag icon" -msgstr "Configurar ícone de arrastar" - -#: ../../source/drag_and_drop.txt:54 -msgid "drag-data-get" -msgstr "" - -#: ../../source/drag_and_drop.txt:54 -msgid "When drag data is requested by the destination" -msgstr "Quando dados arrastados são solicitados pelo destino" - -#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 -msgid "Transfer drag data from source to destination" -msgstr "Transferir dados de arrastar da origem para o destino" - -#: ../../source/drag_and_drop.txt:56 -msgid "drag-data-delete" -msgstr "" - -#: ../../source/drag_and_drop.txt:56 -msgid "When a drag with the action Gdk.DragAction.MOVE is completed" -msgstr "Quando um arrasto com a ação Gdk.DragAction.MOVE é concluído" - -#: ../../source/drag_and_drop.txt:56 -msgid "Delete data from the source to complete the 'move'" -msgstr "Excluir dados da fonte para completar o 'movimento'" - -#: ../../source/drag_and_drop.txt:58 -msgid "drag-end" -msgstr "" - -#: ../../source/drag_and_drop.txt:58 -msgid "When the drag is complete" -msgstr "Quando o arrasto estiver completo" - -#: ../../source/drag_and_drop.txt:58 -msgid "Undo anything done in drag-begin" -msgstr "Desfazer qualquer coisa feita no drag-begin" - -#: ../../source/drag_and_drop.txt:62 -msgid "Drag Destination Signals" -msgstr "Sinais de Destino do Arrasto" - -#: ../../source/drag_and_drop.txt:66 -msgid "drag-motion" -msgstr "" - -#: ../../source/drag_and_drop.txt:66 -msgid "Drag icon moves over a drop area" -msgstr "O ícone de arrasto se move sobre uma área de soltar" - -#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 -msgid "Allow only certain areas to be dropped onto" -msgstr "Permitir que apenas algumas áreas sejam soltas" - -#: ../../source/drag_and_drop.txt:68 -msgid "drag-drop" -msgstr "" - -#: ../../source/drag_and_drop.txt:68 -msgid "Icon is dropped onto a drag area" -msgstr "O ícone é solto em uma área de arrasto" - -#: ../../source/drag_and_drop.txt:70 -msgid "drag-data-received" -msgstr "" - -#: ../../source/drag_and_drop.txt:70 -msgid "When drag data is received by the destination" -msgstr "Quando dados arrastados são recebidos pelo destino" - -#: ../../source/drag_and_drop.txt:74 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/entry.po b/translations/locale/pt_BR/LC_MESSAGES/entry.po deleted file mode 100644 index 377ee7a..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/entry.po +++ /dev/null @@ -1,94 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 06:03-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/entry.txt:2 -msgid "Entry" -msgstr "" - -#: ../../source/entry.txt:4 -msgid "" -"Entry widgets allow the user to enter text. You can change the contents with " -"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " -"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " -"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." -msgstr "" -"Widgets de entrada permitem que o usuário insira texto. Você pode alterar o " -"conteúdo com o método :meth:`Gtk.Entry.set_text` e ler o conteúdo atual com " -"o método :meth:`Gtk.Entry.get_text`. Você também pode limitar o número de " -"caracteres que a Entrada pode receber chamando :meth:`Gtk.Entry." -"set_max_length`." - -#: ../../source/entry.txt:9 -msgid "" -"Occasionally you might want to make an Entry widget read-only. This can be " -"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." -msgstr "" -"Ocasionalmente, você pode querer tornar um widget de Entrada somente " -"leitura. Isto pode ser feito passando ``False`` para o método :meth:`Gtk." -"Entry.set_editable`." - -#: ../../source/entry.txt:12 -msgid "" -"Entry widgets can also be used to retrieve passwords from the user. It is " -"common practice to hide the characters typed into the entry to prevent " -"revealing the password to a third party. Calling :meth:`Gtk.Entry." -"set_visibility` with ``False`` will cause the text to be hidden." -msgstr "" -"Os widgets de entrada também podem ser usados para recuperar senhas do " -"usuário. É uma prática comum ocultar os caracteres digitados na entrada para " -"evitar revelar a senha a terceiros. Chamando :meth:`Gtk.Entry." -"set_visibility` com ``False`` fará com que o texto fique oculto." - -#: ../../source/entry.txt:17 -msgid "" -":class:`Gtk.Entry` has the ability to display progress or activity " -"information behind the text. This is similar to :class:`Gtk.ProgressBar` " -"widget and is commonly found in web browsers to indicate how much of a page " -"download has been completed. To make an entry display such information, use :" -"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." -"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." -msgstr "" -":class:`Gtk.Entry` tem a capacidade de exibir informações de progresso ou " -"atividade por trás do texto. Isso é semelhante ao widget :class:`Gtk." -"ProgressBar` e é comumente encontrado em navegadores da Web para indicar " -"quanto de um download de página foi concluído. Para fazer uma entrada exibir " -"tais informações, use :meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk." -"Entry.set_progress_pulse_step` ou :meth:`Gtk.Entry.progress_pulse`." - -#: ../../source/entry.txt:24 -msgid "" -"Additionally, an Entry can show icons at either side of the entry. These " -"icons can be activatable by clicking, can be set up as drag source and can " -"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " -"or one of the various other functions that set an icon from an icon name, a " -"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." -"set_icon_tooltip_text` or the corresponding function for markup." -msgstr "" -"Além disso, uma entrada pode mostrar ícones em ambos os lados da entrada. " -"Esses ícones podem ser ativados clicando, podem ser configurados como fonte " -"de arrastar e podem ter dicas de ferramentas. Para adicionar um ícone, use :" -"meth:`Gtk.Entry.set_icon_from_icon_name` ou uma das várias outras funções " -"que definem um ícone a partir de um nome de ícone, um pixbuf ou tema de " -"ícone. Para definir uma dica de ferramenta em um ícone, use :meth:`Gtk.Entry." -"set_icon_tooltip_text` ou a função correspondente para marcação." - -#: ../../source/entry.txt:32 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/iconview.po b/translations/locale/pt_BR/LC_MESSAGES/iconview.po deleted file mode 100644 index 7f1714b..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/iconview.po +++ /dev/null @@ -1,63 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:19-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/iconview.txt:2 -msgid "IconView" -msgstr "" - -#: ../../source/iconview.txt:3 -msgid "" -"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " -"grid view. It supports features such as drag and drop, multiple selections " -"and item reordering." -msgstr "" -"A :class:`Gtk.IconView` é um widget que exibe uma coleção de ícones em uma " -"visualização de grade. Ele suporta recursos como arrastar e soltar, seleções " -"múltiplas e reordenação de itens." - -#: ../../source/iconview.txt:5 -msgid "" -"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." -"ListStore` for its model. Instead of using :ref:`cell renderers " -"`, :class:`Gtk.IconView` requires that one of the columns in " -"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." -msgstr "" -"Similarmente a :class:`Gtk.TreeView`, :class:`Gtk.IconView` usa um :class:" -"`Gtk.ListStore` para seu modelo. Em vez de usar :ref:`renderizadores de " -"célula `, :class:`Gtk.IconView` requer que uma das colunas em " -"seu :class:`Gtk.ListStore` contenha objetos :class:`GdkPixbuf.Pixbuf`." - -#: ../../source/iconview.txt:7 -msgid "" -":class:`Gtk.IconView` supports numerous selection modes to allow for either " -"selecting multiple icons at a time, restricting selections to just one item " -"or disallowing selecting items completely. To specify a selection mode, the :" -"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" -"`Gtk.SelectionMode` selection modes." -msgstr "" -":class:`Gtk.IconView` suporta vários modos de seleção para permitir a " -"seleção de vários ícones por vez, restringindo seleções para apenas um item " -"ou desaprovando a seleção de itens completamente. Para especificar um modo " -"de seleção, o método :meth:`Gtk.IconView.set_selection_mode` é usado com um " -"dos modos de seleção :class:`Gtk.SelectionMode`." - -#: ../../source/iconview.txt:10 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/index.po b/translations/locale/pt_BR/LC_MESSAGES/index.po deleted file mode 100644 index 9b11d14..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/index.po +++ /dev/null @@ -1,107 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-27 18:50-0300\n" -"PO-Revision-Date: 2018-04-11 23:06-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/index.txt:7 -msgid "The Python GTK+ 3 Tutorial" -msgstr "O tutorial do Python GTK+ 3" - -#: ../../source/index.txt:0 -msgid "Release" -msgstr "" - -#: ../../source/index.txt:9 -msgid "|version|" -msgstr "" - -#: ../../source/index.txt:0 -msgid "Date" -msgstr "" - -#: ../../source/index.txt:10 -msgid "|today|" -msgstr "" - -#: ../../source/index.txt:0 -msgid "Copyright" -msgstr "" - -#: ../../source/index.txt:11 -msgid "" -"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" -"Cover Texts, and no Back-Cover Texts" -msgstr "" -"GNU Free Documentation License 1.3 sem Seções Invariantes, Textos de Capa " -"Frontal e Textos de Contra-capa" - -#: ../../source/index.txt:13 -msgid "" -"This tutorial gives an introduction to writing GTK+ 3 applications in Python." -msgstr "" -"Este tutorial fornece uma introdução à criação de aplicativos GTK + 3 no " -"Python." - -#: ../../source/index.txt:15 -msgid "" -"Prior to working through this tutorial, it is recommended that you have a " -"reasonable grasp of the Python programming language. GUI programming " -"introduces new problems compared to interacting with the standard output " -"(console / terminal). It is necessary for you to know how to create and run " -"Python files, understand basic interpreter errors, and work with strings, " -"integers, floats and Boolean values. For the more advanced widgets in this " -"tutorial, good knowledge of lists and tuples will be needed." -msgstr "" -"Antes de trabalhar com este tutorial, é recomendável que você tenha uma " -"compreensão razoável da linguagem de programação Python. A programação GUI " -"introduz novos problemas em comparação com a interação com a saída padrão " -"(console / terminal). É necessário que você saiba como criar e executar " -"arquivos Python, entender os erros básicos do interpretador e trabalhar com " -"strings, inteiros, floats e valores booleanos. Para os widgets mais " -"avançados neste tutorial, serão necessários bons conhecimentos de listas e " -"tuplas." - -#: ../../source/index.txt:25 -msgid "" -"Although this tutorial describes the most important classes and methods " -"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " -"to the `GTK+ 3 Reference Manual `_ " -"for a detailed description of the API. Also there's a `Python-specific " -"reference `_ available." -msgstr "" -"Embora este tutorial descreva as classes e métodos mais importantes dentro " -"do GTK + 3, ele não deve servir como uma referência da API. Por favor, " -"consulte o `Manual de Referência do GTK+ 3 `_ para uma descrição detalhada da API. Também há uma referência " -"específica ao Python `_ disponível." - -#: ../../source/index.txt:31 -msgid "Contents:" -msgstr "Conteúdo:" - -#: ../../source/index.txt:59 -msgid "Deprecated" -msgstr "Descontinuada" - -#: ../../source/index.txt:67 -msgid "Indices and tables" -msgstr "Índices e tabelas" - -#: ../../source/index.txt:69 -msgid ":ref:`search`" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/install.po b/translations/locale/pt_BR/LC_MESSAGES/install.po deleted file mode 100644 index 9a51df5..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/install.po +++ /dev/null @@ -1,142 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:10-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Matheus Rodrigues \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/install.txt:4 -msgid "Installation" -msgstr "Instalação" - -#: ../../source/install.txt:5 -msgid "" -"The first step before we start with actual coding consists of setting up " -"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " -"developers to access GObject-based libraries such as GTK+ within Python. It " -"exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in " -"your application, use `PyGTK`_, instead." -msgstr "" -"O primeiro passo antes de começarmos com a codificação de fato consiste em " -"configurar o `PyGObject`_ e suas dependências. PyGObject é um módulo Python " -"que permite aos desenvolvedores acessar bibliotecas baseadas no GObject, " -"como o GTK+, dentro do Python. Ele suporta exclusivamente o GTK+ versão 3 ou " -"posterior. Se você quiser usar o GTK+ 2 em sua aplicação, use `PyGTK`_." - -#: ../../source/install.txt:13 -msgid "Dependencies" -msgstr "Dependências" - -#: ../../source/install.txt:15 -msgid "GTK+3" -msgstr "" - -#: ../../source/install.txt:17 -msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" -msgstr "Python 2 (2.6 ou posterior) ou Python 3 (3.1 ou posterior)" - -#: ../../source/install.txt:19 -msgid "gobject-introspection" -msgstr "" - -#: ../../source/install.txt:22 -msgid "Prebuilt Packages" -msgstr "Pacotes pré-construídos" - -#: ../../source/install.txt:23 -msgid "" -"Recent versions of PyGObject and its dependencies are packaged by nearly all " -"major Linux distributions. So, if you use Linux, you can probably get " -"started by installing the package from the official repository for your " -"distribution." -msgstr "" -"Versões recentes do PyGObject e suas dependências são empacotadas por quase " -"todas as principais distribuições do Linux. Então, se você usa o Linux, você " -"provavelmente pode começar instalando o pacote a partir do repositório " -"oficial da sua distribuição." - -#: ../../source/install.txt:29 -msgid "Installing From Source" -msgstr "Instalando a partir da origem" - -#: ../../source/install.txt:30 -msgid "" -"The easiest way to install PyGObject from source is using `JHBuild`_. It is " -"designed to easily build source packages and discover what dependencies need " -"to be build and in what order. To setup JHBuild, please follow the `JHBuild " -"manual`_." -msgstr "" -"A maneira mais fácil de instalar o PyGObject a partir do código-fonte é " -"usando o `JHBuild`_. Ele é projetado para criar facilmente pacotes de código-" -"fonte e descobrir quais dependências precisam ser construídas e em que " -"ordem. Para configurar o JHBuild, por favor, siga o `manual do JHBuild`_." - -#: ../../source/install.txt:34 -msgid "" -"Once you have installed JHBuild successfully, download the latest " -"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " -"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." -msgstr "" -"Depois de ter instalado o JHBuild com sucesso, baixe a configuração mais " -"recente de [#]_. Copie os arquivos com o sufixo `.modules` para o diretório " -"de módulos do JHBuild e o arquivo `sample-tarball.jhbuildrc` para `~/." -"jhbuildrc`." - -#: ../../source/install.txt:38 -msgid "" -"If you have not done it before, verify that your build environment is setup " -"correctly by running::" -msgstr "" -"Se você não tiver feito isso antes, verifique se o seu ambiente de " -"compilação está configurado corretamente executando:" - -#: ../../source/install.txt:43 -msgid "" -"It will print any applications and libraries that are currently missing on " -"your system but required for building. You should install those using your " -"distribution's package repository. A list of `package names `_ for different " -"distributions is maintained on the GNOME wiki. Run the command above again " -"to ensure the required tools are present." -msgstr "" -"Ele imprimirá todos os aplicativos e bibliotecas que estiverem ausentes no " -"seu sistema, mas necessários para construção. Você deve instalá-los usando o " -"repositório de pacotes da sua distribuição. Uma lista de `nomes de pacotes " -"` _ para " -"diferentes distribuições é mantida no wiki GNOME. Execute o comando acima " -"novamente para garantir que as ferramentas necessárias estejam presentes." - -#: ../../source/install.txt:49 -msgid "" -"Executing the following command will build PyGObject and all its " -"dependencies::" -msgstr "" -"Executando o seguinte comando irá construir o PyGObject e todas as suas " -"dependências::" - -#: ../../source/install.txt:53 -msgid "Finally, you might want to install GTK+ from source as well::" -msgstr "" -"Finalmente, você pode querer instalar o GTK+ a partir do código fonte::" - -#: ../../source/install.txt:57 -msgid "To start a shell with the same environment as used by JHBuild, run::" -msgstr "" -"Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, execute::" - -#: ../../source/install.txt:66 -msgid "https://download.gnome.org/teams/releng/" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/introduction.po b/translations/locale/pt_BR/LC_MESSAGES/introduction.po deleted file mode 100644 index 3d3b666..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/introduction.po +++ /dev/null @@ -1,142 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-29 00:54-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/introduction.txt:4 -msgid "Getting Started" -msgstr "Começando" - -#: ../../source/introduction.txt:7 -msgid "Simple Example" -msgstr "Exemplo Simples" - -#: ../../source/introduction.txt:9 -msgid "" -"To start with our tutorial we create the simplest program possible. This " -"program will create an empty 200 x 200 pixel window." -msgstr "" -"Para começar com o nosso tutorial, criamos o programa mais simples " -"possível. Este programa irá criar uma janela vazia de 200 x 200 pixels." - -#: ../../source/introduction.txt:17 -msgid "We will now explain each line of the example." -msgstr "Vamos agora explicar cada linha do exemplo." - -#: ../../source/introduction.txt:22 -msgid "" -"In the beginning, we have to import the Gtk module to be able to access GTK" -"+'s classes and functions. Since a user's system can have multiple versions " -"of GTK+ installed at the same, we want to make sure that when we import Gtk " -"that it refers to GTK+ 3 and not any other version of the library, which is " -"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." -msgstr "" -"No começo, temos que importar o módulo Gtk para poder acessar as classes e " -"funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK" -"+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos " -"o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, " -"que é o propósito da declaração ``gi.require_version('Gtk', '3.0')``." - -#: ../../source/introduction.txt:29 -msgid "The next line creates an empty window." -msgstr "A próxima linha cria uma janela vazia." - -#: ../../source/introduction.txt:34 -msgid "" -"Followed by connecting to the window's delete event to ensure that the " -"application is terminated if we click on the *x* to close the window." -msgstr "" -"Seguido conectando-se ao evento de exclusão da janela para garantir que o " -"aplicativo seja encerrado se clicarmos no *x* para fechar a janela." - -#: ../../source/introduction.txt:40 -msgid "In the next step we display the window." -msgstr "Na próxima etapa, exibimos a janela." - -#: ../../source/introduction.txt:45 -msgid "" -"Finally, we start the GTK+ processing loop which we quit when the window is " -"closed (see line 5)." -msgstr "" -"Finalmente, iniciamos o loop de processamento do GTK+, que encerramos " -"quando a janela é fechada (veja a linha 5)." - -#: ../../source/introduction.txt:51 -msgid "" -"To run the program, open a terminal, change to the directory of the file, " -"and enter::" -msgstr "" -"Para executar o programa, abra um terminal, mude para o diretório do " -"arquivo e digite::" - -#: ../../source/introduction.txt:57 -msgid "Extended Example" -msgstr "Exemplo Estendido" - -#: ../../source/introduction.txt:58 -msgid "" -"For something a little more useful, here's the PyGObject version of the " -"classic \"Hello World\" program." -msgstr "" -"Para algo um pouco mais útil, aqui está a versão PyGObject do programa " -"clássico \"Hello World\"." - -#: ../../source/introduction.txt:66 -msgid "" -"This example differs from the simple example as we sub-class :class:`Gtk." -"Window` to define our own :class:`MyWindow` class." -msgstr "" -"Este exemplo difere do exemplo simples, pois subclassificamos :class:`Gtk." -"Window` para definir nossa própria classe :class:`MyWindow`." - -#: ../../source/introduction.txt:72 -msgid "" -"In the class's constructor we have to call the constructor of the super " -"class. In addition, we tell it to set the value of the property `title` to " -"`Hello World`." -msgstr "" -"No construtor da classe, temos que chamar o construtor da superclasse. Além " -"disso, dizemos para definir o valor da propriedade `title` como `Hello " -"World`." - -#: ../../source/introduction.txt:78 -msgid "" -"The next three lines are used to create a button widget, connect to its " -"`clicked` signal and add it as child to the top-level window." -msgstr "" -"As próximas três linhas são usadas para criar um widget de botão, conectar " -"ao seu sinal de 'clicado' e adicioná-lo como filho à janela de nível " -"superior." - -#: ../../source/introduction.txt:84 -msgid "" -"Accordingly, the method :meth:`on_button_clicked` will be called if you " -"click on the button." -msgstr "" -"Assim, o método :meth:`on_button_clicked` será chamado se você clicar no " -"botão." - -#: ../../source/introduction.txt:89 -msgid "" -"The last block, outside of the class, is very similar to the simple example " -"above, but instead of creating an instance of the generic :class:`Gtk." -"Window` class, we create an instance of :class:`MyWindow`." -msgstr "" -"O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao " -"invés de criar uma instância da classe genérica :class:`Gtk.Window`, " -"criamos uma instância de :class:`MyWindow`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/label.po b/translations/locale/pt_BR/LC_MESSAGES/label.po deleted file mode 100644 index 60dbb68..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/label.po +++ /dev/null @@ -1,120 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 04:29-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/label.txt:2 -msgid "Label" -msgstr "" - -#: ../../source/label.txt:4 -msgid "" -"Labels are the main method of placing non-editable text in windows, for " -"instance to place a title next to a :class:`Gtk.Entry` widget. You can " -"specify the text in the constructor, or later with the :meth:`Gtk.Label." -"set_text` or :meth:`Gtk.Label.set_markup` methods." -msgstr "" -"Os rótulos são o principal método de colocar texto não editável nas janelas, " -"por exemplo, para colocar um título ao lado de um widget :class:`Gtk.Entry`. " -"Você pode especificar o texto no construtor, ou mais tarde com os métodos :" -"meth:`Gtk.Label.set_text` ou :meth:`Gtk.Label.set_markup`." - -#: ../../source/label.txt:9 -msgid "" -"The width of the label will be adjusted automatically. You can produce multi-" -"line labels by putting line breaks (\"\\\\n\") in the label string." -msgstr "" -"A largura da etiqueta será ajustada automaticamente. Você pode produzir " -"rótulos de várias linhas colocando as quebras de linha (\"\\\\n\") na " -"sequência de rótulos." - -#: ../../source/label.txt:12 -msgid "" -"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " -"Selectable labels allow the user to copy the label contents to the " -"clipboard. Only labels that contain useful-to-copy information — such as " -"error messages — should be made selectable." -msgstr "" -"Os rótulos podem ser feitos selecionáveis com :meth:`Gtk.Label." -"set_selectable`. Rótulos selecionáveis permitem que o usuário copie o " -"conteúdo do rótulo para a área de transferência. Somente os rótulos que " -"contêm informações úteis para copiar, como mensagens de erro, devem ser " -"selecionáveis." - -#: ../../source/label.txt:17 -msgid "" -"The label text can be justified using the :meth:`Gtk.Label.set_justify` " -"method. The widget is also capable of word-wrapping, which can be activated " -"with :meth:`Gtk.Label.set_line_wrap`." -msgstr "" -"O texto do rótulo pode ser justificado usando o método :meth:`Gtk.Label." -"set_justify`. O widget também é capaz de quebra automática de palavras, que " -"pode ser ativado com :meth:`Gtk.Label.set_line_wrap`." - -#: ../../source/label.txt:21 -msgid "" -":class:`Gtk.Label` support some simple formatting, for instance allowing you " -"to make some text bold, colored, or larger. You can do this by providing a " -"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " -"[#pango]_. For instance, ``bold text and strikethrough text``. " -"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " -"for links is borrowed from HTML, using the a with href and title attributes. " -"GTK+ renders links similar to the way they appear in web browsers, with " -"colored, underlined text. The title attribute is displayed as a tooltip on " -"the link." -msgstr "" -":class:`Gtk.Label` suporta algumas formatações simples, por exemplo, " -"permitindo que você crie algum texto em negrito, colorido ou maior. Você " -"pode fazer isso fornecendo uma string para :meth:`Gtk.Label.set_markup`, " -"usando a sintaxe de marcação do Pango [#pango]_. Por exemplo, ``texto em " -"negrito e texto tachado``. Além disso, :class:`Gtk.Label` suporta " -"hiperlinks clicáveis. A marcação para links é emprestada do HTML, usando os " -"atributos a com href e title. O GTK+ renderiza links semelhantes ao modo " -"como aparecem nos navegadores da web, com texto colorido e sublinhado. O " -"atributo de título é exibido como uma dica de ferramenta no link." - -#: ../../source/label.txt:37 -msgid "" -"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " -"label, used for keyboard navigation. Mnemonics are created by providing a " -"string with an underscore before the mnemonic character, such as \"_File\", " -"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." -"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " -"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " -"not inside the mnemonic's target widget, you have to tell the label about " -"the target using :meth:`Gtk.Label.set_mnemonic_widget`." -msgstr "" -"Os rótulos podem conter *mnemônicos*. Os mnemônicos são caracteres " -"sublinhados no rótulo, usados para navegação pelo teclado. Os mnemônicos são " -"criados fornecendo uma string com um sublinhado antes do caractere " -"mnemônico, como \"_File\", para as funções :meth:`Gtk.Label." -"new_with_mnemonic` ou :meth:`Gtk.Label.set_text_with_mnemonic`. Os " -"mnemônicos ativam automaticamente qualquer widget ativável em que o rótulo " -"esteja dentro, como um :class:`Gtk.Button`; se o rótulo não estiver dentro " -"do widget de destino do mnemônico, você deve informar o rótulo sobre o " -"destino usando :meth:`Gtk.Label.set_mnemonic_widget`." - -#: ../../source/label.txt:48 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/label.txt:55 -msgid "" -"Pango Markup Syntax, http://developer.gnome.org/pango/stable/" -"PangoMarkupFormat.html" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po b/translations/locale/pt_BR/LC_MESSAGES/layout-table.po deleted file mode 100644 index 3168501..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/layout-table.po +++ /dev/null @@ -1,76 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:33-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/layout-table.txt:2 -msgid "Table" -msgstr "Tabela" - -#: ../../source/layout-table.txt:4 -msgid "" -":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " -"be used in newly-written code. Use the :ref:`layout-grid` class instead." -msgstr "" -":class:`Gtk.Table` foi descontinuado desde o GTK+ versão 3.4 e não deve ser " -"usado em código recém-escrito. Use a classe :ref:`layout-grid`." - -#: ../../source/layout-table.txt:8 -msgid "" -"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." -msgstr "" -"Tabelas nos permite colocar widgets em uma grade similar a :class:`Gtk.Grid`." - -#: ../../source/layout-table.txt:10 -msgid "" -"The grid's dimensions need to be specified in the :class:`Gtk.Table` " -"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." -msgstr "" -"As dimensões da grade precisam ser especificadas no construtor :class:`Gtk." -"Table`. Para colocar um widget em uma caixa, use :meth:`Gtk.Table.attach`." - -#: ../../source/layout-table.txt:13 -msgid "" -":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " -"the spacing between the rows at the specified row or column. Note that for " -"columns, the space goes to the right of the column, and for rows, the space " -"goes below the row." -msgstr "" -":meth:`Gtk.Table.set_row_spacing` e :meth:`Gtk.Table.set_col_spacing` " -"definem o espaçamento entre as linhas na linha ou coluna especificada. " -"Observe que, para colunas, o espaço vai para a direita da coluna e, para " -"linhas, o espaço fica abaixo da linha." - -#: ../../source/layout-table.txt:18 -msgid "" -"You can also set a consistent spacing for all rows and/or columns with :meth:" -"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " -"that with these calls, the last row and last column do not get any spacing." -msgstr "" -"Você também pode definir um espaçamento consistente para todas as linhas e/" -"ou colunas com :meth:`Gtk.Table.set_row_spacings` e :meth:`Gtk.Table." -"set_col_spacings`. Observe que, com essas chamadas, a última linha e a " -"última coluna não recebem espaçamento." - -#: ../../source/layout-table.txt:22 -msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." -msgstr "É recomendado que você use o :class:`Gtk.Grid` para o novo código." - -#: ../../source/layout-table.txt:26 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/layout.po b/translations/locale/pt_BR/LC_MESSAGES/layout.po deleted file mode 100644 index 1beaad3..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/layout.po +++ /dev/null @@ -1,449 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 02:36-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/layout.txt:4 -msgid "Layout Containers" -msgstr "Containers de Layout" - -#: ../../source/layout.txt:5 -msgid "" -"While many GUI toolkits require you to precisely place widgets in a window, " -"using absolute positioning, GTK+ uses a different approach. Rather than " -"specifying the position and size of each widget in the window, you can " -"arrange your widgets in rows, columns, and/or tables. The size of your " -"window can be determined automatically, based on the sizes of the widgets it " -"contains. And the sizes of the widgets are, in turn, determined by the " -"amount of text they contain, or the minimum and maximum sizes that you " -"specify, and/or how you have requested that the available space should be " -"shared between sets of widgets. You can perfect your layout by specifying " -"padding distance and centering values for each of your widgets. GTK+ then " -"uses all this information to resize and reposition everything sensibly and " -"smoothly when the user manipulates the window." -msgstr "" -"Enquanto muitos toolkits GUI exigem que você coloque precisamente widgets em " -"uma janela, usando posicionamento absoluto, o GTK+ usa uma abordagem " -"diferente. Em vez de especificar a posição e o tamanho de cada widget na " -"janela, você pode organizar seus widgets em linhas, colunas e/ou tabelas. O " -"tamanho da sua janela pode ser determinado automaticamente, com base nos " -"tamanhos dos widgets que ela contém. E os tamanhos dos widgets, por sua vez, " -"são determinados pela quantidade de texto que eles contêm, ou os tamanhos " -"mínimo e máximo que você especifica, e/ou como você solicitou que o espaço " -"disponível seja compartilhado entre conjuntos de widgets. Você pode " -"aperfeiçoar seu layout especificando a distância de preenchimento e os " -"valores de centralização para cada um de seus widgets. O GTK+ usa todas " -"essas informações para redimensionar e reposicionar tudo de maneira sensata " -"e suave quando o usuário manipula a janela." - -#: ../../source/layout.txt:19 -msgid "" -"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " -"to the end user and are inserted into a window, or placed within each other " -"to layout components. There are two flavours of containers: single-child " -"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" -"child containers, which are descendants of :class:`Gtk.Container`. The most " -"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " -"(:class:`Gtk.Grid`)." -msgstr "" -"O GTK+ organiza widgets hierarquicamente, usando *containers*. Eles são " -"invisíveis para o usuário final e são inseridos em uma janela ou colocados " -"entre si para os componentes do layout. Existem dois tipos de contêineres: " -"contêineres filho único, todos descendentes de :class:`Gtk.Bin` e " -"contêineres com vários filhos, que são descendentes de :class:`Gtk." -"Container`. Os mais usados são caixas verticais ou horizontais (:class:`Gtk." -"Box`) e grades (:class:`Gtk.Grid`)." - -#: ../../source/layout.txt:29 -msgid "Boxes" -msgstr "" - -#: ../../source/layout.txt:31 -msgid "" -"Boxes are invisible containers into which we can pack our widgets. When " -"packing widgets into a horizontal box, the objects are inserted horizontally " -"from left to right or right to left depending on whether :meth:`Gtk.Box." -"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " -"are packed from top to bottom or vice versa. You may use any combination of " -"boxes inside or beside other boxes to create the desired effect." -msgstr "" -"Caixas são contêineres invisíveis nos quais podemos empacotar nossos " -"widgets. Ao agrupar widgets em uma caixa horizontal, os objetos são " -"inseridos horizontalmente da esquerda para a direita ou da direita para a " -"esquerda, dependendo se :meth:`Gtk.Box.pack_start` ou :meth:`Gtk.Box." -"pack_end` for usado. Em uma caixa vertical, os widgets são empacotados de " -"cima para baixo ou vice-versa. Você pode usar qualquer combinação de caixas " -"dentro ou ao lado de outras caixas para criar o efeito desejado." - -#: ../../source/layout.txt:40 ../../source/layout.txt:97 -#: ../../source/layout.txt:123 ../../source/layout.txt:156 -#: ../../source/layout.txt:180 ../../source/layout.txt:210 -#: ../../source/layout.txt:230 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/layout.txt:42 -msgid "" -"Let's take a look at a slightly modified version of the extended example " -"with two buttons." -msgstr "" -"Vamos dar uma olhada em uma versão ligeiramente modificada do exemplo " -"estendido com dois botões." - -#: ../../source/layout.txt:50 -msgid "" -"First, we create a horizontally orientated box container where 6 pixels are " -"placed between children. This box becomes the child of the top-level window." -msgstr "" -"Primeiro, criamos um contêiner de caixa orientado horizontalmente, onde 6 " -"pixels são colocados entre os filhos. Esta caixa se torna o filho da janela " -"de nível superior." - -#: ../../source/layout.txt:56 -msgid "Subsequently, we add two different buttons to the box container." -msgstr "" -"Posteriormente, adicionamos dois botões diferentes ao contêiner da caixa." - -#: ../../source/layout.txt:61 -msgid "" -"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " -"right, :meth:`Gtk.Box.pack_end` positions them from right to left." -msgstr "" -"Enquanto com os widgets :meth:`Gtk.Box.pack_start` estão posicionados da " -"esquerda para a direita, :meth:`Gtk.Box.pack_end` os posiciona da direita " -"para a esquerda." - -#: ../../source/layout.txt:67 -msgid "Grid" -msgstr "" - -#: ../../source/layout.txt:68 -msgid "" -":class:`Gtk.Grid` is a container which arranges its child widgets in rows " -"and columns, but you do not need to specify the dimensions in the " -"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " -"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " -"parameters:" -msgstr "" -":class:`Gtk.Grid` é um contêiner que organiza seus widgets filhos em linhas " -"e colunas, mas você não precisa especificar as dimensões no construtor. As " -"crianças são adicionadas usando :meth:`Gtk.Grid.attach`. Eles podem abranger " -"várias linhas ou colunas. O método :meth:`Gtk.Grid.attach` usa cinco " -"parâmetros:" - -#: ../../source/layout.txt:73 -msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." -msgstr "O parâmetro ``child`` é o :class:`Gtk.Widget` para adicionar." - -#: ../../source/layout.txt:74 -msgid "``left`` is the column number to attach the left side of ``child`` to." -msgstr "" -"`` left`` é o número da coluna para anexar o lado esquerdo de ``child`` em." - -#: ../../source/layout.txt:75 -msgid "" -"``top`` indicates the row number to attach the top side of ``child`` to." -msgstr "" -"`` top`` indica o número da linha para anexar o lado superior do ``child``." - -#: ../../source/layout.txt:76 -msgid "" -"``width`` and ``height`` indicate the number of columns that the ``child`` " -"will span, and the number of rows that the ``child`` will span, respectively." -msgstr "" -"`` width`` e ``height`` indicam o número de colunas que o ``child`` irá " -"abranger, e o número de linhas que o ``child`` irá abranger, respectivamente." - -#: ../../source/layout.txt:79 -msgid "" -"It is also possible to add a child next to an existing child, using :meth:" -"`Gtk.Grid.attach_next_to`, which also takes five parameters:" -msgstr "" -"Também é possível adicionar um child ao lado de um child existente, usando :" -"meth:`Gtk.Grid.attach_next_to`, que também usa cinco parâmetros:" - -#: ../../source/layout.txt:82 -msgid "``child`` is the :class:`Gtk.Widget` to add, as above." -msgstr "``child`` é o :class:`Gtk.Widget` para adicionar, como acima." - -#: ../../source/layout.txt:83 -msgid "" -"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " -"instance) or ``None``. The ``child`` widget will be placed next to " -"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " -"grid." -msgstr "" -"``sibling`` é um widget filho existente de ``self`` (uma instância :class:" -"`Gtk.Grid`) ou ``None``. O widget ``child`` será colocado próximo ao " -"``sibling``, ou se ``sibling`` for ``None``, no início ou no final da grade." - -#: ../../source/layout.txt:86 -msgid "" -"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " -"that ``child`` is positioned next to." -msgstr "" -"``side`` é um :class:`Gtk.PositionType` indicando o lado do ``sibling`` que " -"``child`` é posicionado ao lado de." - -#: ../../source/layout.txt:88 -msgid "" -"``width`` and ``height`` indicate the number of columns and rows the " -"``child`` widget will span, respectively." -msgstr "" -"``width`` e ``height`` indicam o número de colunas e linhas que o widget " -"``child`` abrangerá, respectivamente." - -#: ../../source/layout.txt:91 -msgid "" -"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " -"using :meth:`Gtk.Grid.add`, which will place children next to each other in " -"the direction determined by the \"orientation\" property (defaults to :attr:" -"`Gtk.Orientation.HORIZONTAL`)." -msgstr "" -"Finalmente, :class:`Gtk.Grid` pode ser usado como :class:`Gtk.Box` usando " -"apenas :meth:`Gtk.Grid.add`, que colocará as crianças uma ao lado da outra " -"na direção determinada por a propriedade \"orientação\" (o padrão é :attr:" -"`Gtk.Orientation.HORIZONTAL`)." - -#: ../../source/layout.txt:105 -msgid "ListBox" -msgstr "" - -#: ../../source/layout.txt:107 -msgid "" -"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." -"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " -"headers can be added dynamically depending on the row content. It also " -"allows keyboard and mouse navigation and selection like a typical list." -msgstr "" -"A :class:`Gtk.ListBox` é um contêiner vertical que contém :class:`Gtk." -"ListBoxRow` filhos. Essas linhas podem ser classificadas e filtradas " -"dinamicamente e os cabeçalhos podem ser adicionados dinamicamente, " -"dependendo do conteúdo da linha. Também permite navegação e seleção de " -"teclado e mouse como uma lista típica." - -#: ../../source/layout.txt:112 -msgid "" -"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " -"especially when the list content has a more complicated layout than what is " -"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " -"(i.e. has a button in it)." -msgstr "" -"Usar :class:`Gtk.ListBox` é muitas vezes uma alternativa para :class:`Gtk." -"TreeView`, especialmente quando o conteúdo da lista tem um layout mais " -"complicado do que o permitido por um :class:`Gtk.CellRenderer`, ou quando o " -"conteúdo é interativo (ou seja, tem um botão)." - -#: ../../source/layout.txt:117 -msgid "" -"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " -"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " -"the list and the widget." -msgstr "" -"Embora um :class:`Gtk.ListBox` deva ter apenas :class:`Gtk.ListBoxRow` " -"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." -"Container.add` e um :class:`Gtk.ListBoxRow` widget será automaticamente " -"inserido entre a lista e o widget." - -#: ../../source/layout.txt:131 -msgid "Stack and StackSwitcher" -msgstr "" - -#: ../../source/layout.txt:133 -msgid "" -"A :class:`Gtk.Stack` is a container which only shows one of its children at " -"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " -"provide a means for users to change the visible child. Instead, the :class:" -"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " -"this functionality." -msgstr "" -"A :class:`Gtk.Stack` é um contêiner que mostra apenas um de seus filhos por " -"vez. Em contraste com :class:`Gtk.Notebook`, :class:`Gtk.Stack` não fornece " -"um meio para os usuários alterarem o filho visível. Em vez disso, o widget :" -"class:`Gtk.StackSwitcher` pode ser usado com :class:`Gtk.Stack` para " -"fornecer essa funcionalidade." - -#: ../../source/layout.txt:139 -msgid "" -"Transitions between pages can be animated as slides or fades. This can be " -"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " -"respect the \"gtk-enable-animations\" setting." -msgstr "" -"Transições entre páginas podem ser animadas como slides ou fades. Isso pode " -"ser controlado com :meth:`Gtk.Stack.set_transition_type`. Essas animações " -"respeitam a configuração \"gtk-enable-animations\"." - -#: ../../source/layout.txt:143 -msgid "" -"Transition speed can be adjusted with :meth:`Gtk.Stack." -"set_transition_duration`" -msgstr "" -"A velocidade de transição pode ser ajustada com :meth:`Gtk.Stack." -"set_transition_duration`" - -#: ../../source/layout.txt:145 -msgid "" -"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." -"Stack`; it shows a row of buttons to switch between the various pages of the " -"associated stack widget." -msgstr "" -"O widget :class:`Gtk.StackSwitcher` atua como um controlador para um :class:" -"`Gtk.Stack`; Ele mostra uma linha de botões para alternar entre as várias " -"páginas do widget de pilha associado." - -#: ../../source/layout.txt:149 -msgid "" -"All the content for the buttons comes from the child properties of the :" -"class:`Gtk.Stack`." -msgstr "" -"Todo o conteúdo para os botões vem das propriedades filho do :class:`Gtk." -"Stack`." - -#: ../../source/layout.txt:152 -msgid "" -"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " -"the same :class:`Gtk.Stack` widget." -msgstr "" -"É possível associar múltiplos widgets :class:`Gtk.StackSwitcher` com o mesmo " -"widget :class:`Gtk.Stack`." - -#: ../../source/layout.txt:164 -msgid "HeaderBar" -msgstr "" - -#: ../../source/layout.txt:166 -msgid "" -"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " -"allows to place children at the start or the end. In addition, it allows a " -"title to be displayed. The title will be centered with respect to the width " -"of the box, even if the children at either side take up different amounts of " -"space." -msgstr "" -"A :class:`Gtk.HeaderBar` é semelhante a uma horizontal :class:`Gtk.Box`, " -"permite colocar filhos no início ou no final. Além disso, permite que um " -"título seja exibido. O título será centrado em relação à largura da caixa, " -"mesmo que os filhos de ambos os lados ocupem diferentes quantidades de " -"espaço." - -#: ../../source/layout.txt:171 -msgid "" -"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " -"be used in place of the title bar (which is rendered by the Window Manager)." -msgstr "" -"Como o GTK+ agora suporta o Client Side Decoration, um :class:`Gtk." -"HeaderBar` pode ser usado no lugar da barra de título (que é renderizada " -"pelo Gerenciador de Janelas)." - -#: ../../source/layout.txt:174 -msgid "" -"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " -"should contain commonly used controls which affect the content below. They " -"also provide access to window controls, including the close window button " -"and window menu." -msgstr "" -"A :class:`Gtk.HeaderBar` geralmente está localizado na parte superior de uma " -"janela e deve conter controles comumente usados que afetam o conteúdo " -"abaixo. Eles também fornecem acesso a controles de janela, incluindo o botão " -"de fechar janela e o menu de janela." - -#: ../../source/layout.txt:188 -msgid "FlowBox" -msgstr "" - -#: ../../source/layout.txt:190 -msgid "" -"A :class:`Gtk.FlowBox` is a container that positions child widgets in " -"sequence according to its orientation." -msgstr "" -"A :class:`Gtk.FlowBox` é um contêiner que posiciona widgets filhos em " -"sequência de acordo com sua orientação." - -#: ../../source/layout.txt:193 -msgid "" -"For instance, with the horizontal orientation, the widgets will be arranged " -"from left to right, starting a new row under the previous row when " -"necessary. Reducing the width in this case will require more rows, so a " -"larger height will be requested." -msgstr "" -"Por exemplo, com a orientação horizontal, os widgets serão organizados da " -"esquerda para a direita, iniciando uma nova linha na linha anterior, quando " -"necessário. Reduzir a largura neste caso exigirá mais linhas, portanto, uma " -"altura maior será solicitada." - -#: ../../source/layout.txt:198 -msgid "" -"Likewise, with the vertical orientation, the widgets will be arranged from " -"top to bottom, starting a new column to the right when necessary. Reducing " -"the height will require more columns, so a larger width will be requested." -msgstr "" -"Da mesma forma, com a orientação vertical, os widgets serão organizados de " -"cima para baixo, iniciando uma nova coluna à direita quando necessário. " -"Reduzir a altura exigirá mais colunas, portanto será solicitada uma largura " -"maior." - -#: ../../source/layout.txt:202 -msgid "" -"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " -"filtered." -msgstr "" -"Os filhos de uma :class:`Gtk.FlowBox` podem ser classificados e filtrados " -"dinamicamente." - -#: ../../source/layout.txt:204 -msgid "" -"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container." -"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " -"between the box and the widget." -msgstr "" -"Embora um :class:`Gtk.FlowBox` deva ter apenas :class:`Gtk.FlowBoxChild` " -"filhos, você pode adicionar qualquer tipo de widget a ele via :meth:`Gtk." -"Container.add`, e a :class:`Gtk.FlowBoxChild`, o widget será " -"automaticamente inserido entre a caixa e o widget." - -#: ../../source/layout.txt:218 -msgid "Notebook" -msgstr "" - -#: ../../source/layout.txt:220 -msgid "" -"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " -"are pages that can be switched between using tab labels along one edge." -msgstr "" -"O widget :class:`Gtk.Notebook` é um :class:`Gtk.Container` cujos filhos são " -"páginas que podem ser alternadas usando rótulos de guias ao longo de uma " -"borda." - -#: ../../source/layout.txt:222 -msgid "" -"There are many configuration options for GtkNotebook. Among other things, " -"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." -"set_tab_pos`), whether, if there are too many tabs to fit the notebook " -"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." -"set_scrollable`, and whether there will be a popup menu allowing the users " -"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." -"popup_disable`)." -msgstr "" -"Existem muitas opções de configuração para o GtkNotebook. Entre outras " -"coisas, você pode escolher em qual borda as abas aparecem (veja :meth:`Gtk." -"Notebook.set_tab_pos`), se houver muitas abas para caber no notebook, elas " -"devem ser maiores ou setas de rolagem serão adicionadas (veja :meth:`Gtk." -"Notebook.set_scrollable`, e se haverá um menu pop-up que permita aos " -"usuários trocar de página (veja :meth:`Gtk.Notebook.popup_enable`, :meth:" -"`Gtk.Notebook.popup_disable`)." diff --git a/translations/locale/pt_BR/LC_MESSAGES/menus.po b/translations/locale/pt_BR/LC_MESSAGES/menus.po deleted file mode 100644 index 883ae3f..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/menus.po +++ /dev/null @@ -1,218 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-06 06:03-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/menus.txt:2 -msgid "Menus" -msgstr "" - -#: ../../source/menus.txt:4 -msgid "" -":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " -"have been deprecated since GTK+ version 3.10 and should not be used in newly-" -"written code. Use the :ref:`application` framework instead." -msgstr "" -":class:`Gtk.UIManager`, :class:`Gtk.Action` e :class:`Gtk.ActionGroup` foram " -"descontinuados desde o GTK+ versão 3.10 e não devem ser usados em código " -"recém-escrito. Use o framework :ref:`application`." - -#: ../../source/menus.txt:8 -msgid "" -"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" -"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " -"contains one or more :class:`Gtk.MenuItem` instances or one of its " -"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " -"commonly used functions of an application. Examples include creating a new " -"document, printing a page or undoing an operation. It contains one or more " -"instances of :class:`Gtk.ToolItem` or one of its subclasses." -msgstr "" -"O GTK+ vem com dois tipos diferentes de menus :class:`Gtk.MenuBar` e :class:" -"`Gtk.Toolbar`. :class:`Gtk.MenuBar` é uma barra de menus padrão que contém " -"uma ou mais instâncias :class:`Gtk.MenuItem` ou uma de suas subclasses. Os " -"widgets :class:`Gtk.Toolbar` são usados para acessibilidade rápida às " -"funções comumente usadas de um aplicativo. Exemplos incluem criar um novo " -"documento, imprimir uma página ou desfazer uma operação. Ele contém uma ou " -"mais instâncias de :class:`Gtk.ToolItem` ou uma de suas subclasses." - -#: ../../source/menus.txt:17 -msgid "Actions" -msgstr "Ações" - -#: ../../source/menus.txt:19 -msgid "" -"Although, there are specific APIs to create menus and toolbars, you should " -"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " -"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " -"from names to :class:`Gtk.Action` objects. All actions that would make sense " -"to use in a particular context should be in a single group. Multiple action " -"groups may be used for a particular user interface. In fact, it is expected " -"that most non-trivial applications will make use of multiple groups. For " -"example, in an application that can edit multiple documents, one group " -"holding global actions (e.g. quit, about, new), and one group per document " -"holding actions that act on that document (eg. save, cut/copy/paste, etc). " -"Each window's menus would be constructed from a combination of two action " -"groups." -msgstr "" -"Embora existam APIs específicas para criar menus e barras de ferramentas, " -"você deve usar :class:`Gtk.UIManager` e criar instâncias :class:`Gtk." -"Action`. As ações são organizadas em grupos. A :class:`Gtk.ActionGroup` é " -"essencialmente um mapa de nomes para objetos :class:`Gtk.Action`. Todas as " -"ações que fazem sentido usar em um contexto particular devem estar em um " -"único grupo. Vários grupos de ação podem ser usados para uma interface de " -"usuário específica. Na verdade, espera-se que a maioria dos aplicativos não " -"triviais faça uso de vários grupos. Por exemplo, em um aplicativo que pode " -"editar vários documentos, um grupo mantém ações globais (por exemplo, sair, " -"sobre, novo) e um grupo por documento que contém ações que atuam nesse " -"documento (por exemplo, salvar, recortar/copiar/colar etc. ). Os menus de " -"cada janela seriam construídos a partir de uma combinação de dois grupos de " -"ação." - -#: ../../source/menus.txt:31 -msgid "Different classes representing different types of actions exist:" -msgstr "Existem classes diferentes representando diferentes tipos de ações:" - -#: ../../source/menus.txt:33 -msgid "" -":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " -"item" -msgstr "" -":class:`Gtk.Action`: Uma ação que pode ser acionada por um item de menu ou " -"barra de ferramentas" - -#: ../../source/menus.txt:35 -msgid "" -":class:`Gtk.ToggleAction`: An action which can be toggled between two states" -msgstr "" -":class:`Gtk.ToggleAction`: Uma ação que pode ser alternada entre dois estados" - -#: ../../source/menus.txt:36 -msgid "" -":class:`Gtk.RadioAction`: An action of which only one in a group can be " -"active" -msgstr "" -":class:`Gtk.RadioAction`: Uma ação da qual apenas um em um grupo pode estar " -"ativo" - -#: ../../source/menus.txt:38 -msgid "" -":class:`Gtk.RecentAction`: An action of which represents a list of recently " -"used files" -msgstr "" -":class:`Gtk.RecentAction`: Uma ação que representa uma lista de arquivos " -"usados recentemente" - -#: ../../source/menus.txt:41 -msgid "" -"Actions represent operations that the user can be perform, along with some " -"information how it should be presented in the interface, including its name " -"(not for display), its label (for display), an accelerator, whether a label " -"indicates a tooltip as well as the callback that is called when the action " -"gets activated." -msgstr "" -"Ações representam operações que o usuário pode executar, juntamente com " -"algumas informações sobre como ele deve ser apresentado na interface, " -"incluindo seu nome (não para exibição), seu rótulo (para exibição), um " -"acelerador, se um rótulo também indica uma dica de ferramenta como o retorno " -"que é chamado quando a ação é ativada." - -#: ../../source/menus.txt:47 -msgid "" -"You can create actions by either calling one of the constructors directly " -"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." -"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " -"by calling one of the convenience functions:" -msgstr "" -"Você pode criar ações chamando um dos construtores diretamente e adicionando-" -"os a um :class:`Gtk.ActionGroup` chamando :meth:`Gtk.ActionGroup.add_action` " -"ou :meth:`Gtk.ActionGroup.add_action_with_accel`, ou chamando uma das " -"funções de conveniência:" - -#: ../../source/menus.txt:52 -msgid ":meth:`Gtk.ActionGroup.add_actions`," -msgstr "" - -#: ../../source/menus.txt:53 -msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" -msgstr "" - -#: ../../source/menus.txt:54 -msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." -msgstr "" - -#: ../../source/menus.txt:56 -msgid "Note that you must specify actions for sub menus as well as menu items." -msgstr "Observe que você deve especificar ações para submenus e itens de menu." - -#: ../../source/menus.txt:59 -msgid "UI Manager" -msgstr "Gerenciador de IU" - -#: ../../source/menus.txt:61 -msgid "" -":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " -"using an `XML-like description `_." -msgstr "" -":class:`Gtk.UIManager` fornece uma maneira fácil de criar menus e barras de " -"ferramentas usando uma descrição `XML-like `_." - -#: ../../source/menus.txt:64 -msgid "" -"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " -"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " -"idea to tell the parent window to respond to the specified keyboard " -"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." -"Window.add_accel_group`." -msgstr "" -"Primeiro de tudo, você deve adicionar o :class:`Gtk.ActionGroup` ao UI " -"Manager com :meth:`Gtk.UIManager.insert_action_group`. Neste ponto também é " -"uma boa idéia dizer à janela pai para responder aos atalhos de teclado " -"especificados, usando :meth:`Gtk.UIManager.get_accel_group` e :meth:`Gtk." -"Window.add_accel_group`." - -#: ../../source/menus.txt:69 -msgid "" -"Then, you can define the actual visible layout of the menus and toolbars, " -"and add the UI layout. This \"ui string\" uses an XML format, in which you " -"should mention the names of the actions that you have already created. " -"Remember that these names are just the identifiers that we used when " -"creating the actions. They are not the text that the user will see in the " -"menus and toolbars. We provided those human-readable names when we created " -"the actions." -msgstr "" -"Em seguida, você pode definir o layout visível real dos menus e barras de " -"ferramentas e adicionar o layout da interface do usuário. Essa \"string ui\" " -"usa um formato XML, no qual você deve mencionar os nomes das ações que você " -"já criou. Lembre-se de que esses nomes são apenas os identificadores que " -"usamos ao criar as ações. Eles não são o texto que o usuário verá nos menus " -"e nas barras de ferramentas. Fornecemos esses nomes legíveis quando criamos " -"as ações." - -#: ../../source/menus.txt:76 -msgid "" -"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " -"and add the widget to a container such as :class:`Gtk.Box`." -msgstr "" -"Finalmente, você recupera o widget raiz com :meth:`Gtk.UIManager.get_widget` " -"e adiciona o widget a um container como :class:`Gtk.Box`." - -#: ../../source/menus.txt:80 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/objects.po b/translations/locale/pt_BR/LC_MESSAGES/objects.po deleted file mode 100644 index 70c39d1..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/objects.po +++ /dev/null @@ -1,556 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-05 18:20-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/objects.txt:4 -msgid "Objects" -msgstr "" - -#: ../../source/objects.txt:6 -msgid "" -"GObject is the fundamental type providing the common attributes and methods " -"for all object types in GTK+, Pango and other libraries based on GObject. " -"The :class:`GObject.GObject` class provides methods for object construction " -"and destruction, property access methods, and signal support." -msgstr "" -"O GObject é o tipo fundamental que fornece os atributos e métodos comuns " -"para todos os tipos de objeto no GTK+, no Pango e em outras bibliotecas " -"baseadas no GObject. A classe :class:`GObject.GObject` fornece métodos para " -"construção e destruição de objetos, métodos de acesso a propriedades e " -"suporte a sinais." - -#: ../../source/objects.txt:11 -msgid "" -"This section will introduce some important aspects about the GObject " -"implementation in Python." -msgstr "" -"Esta seção apresentará alguns aspectos importantes sobre a implementação do " -"GObject no Python." - -#: ../../source/objects.txt:15 -msgid "Inherit from GObject.GObject" -msgstr "Herdar de GObject.GObject" - -#: ../../source/objects.txt:17 -msgid "" -"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " -"instantiated directly, we generally use inherited class. A :class:`Gtk." -"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " -"interesting to make an inherited class to create a new widget, like a " -"settings dialog." -msgstr "" -"Um GObject nativo é acessível via :class:`GObject.GObject`. É raramente " -"instanciado diretamente, geralmente usamos classes herdadas. A :class:`Gtk." -"Widget` é uma classe herdada de um :class:`GObject.GObject`. Pode ser " -"interessante criar uma classe herdada para criar um novo widget, como uma " -"caixa de diálogo de configurações." - -#: ../../source/objects.txt:22 -msgid "" -"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." -"GObject.__init__` in your constructor (if the class inherits from :class:" -"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " -"in the example below:" -msgstr "" -"Para herdar de :class:`GObject.GObject`, você deve chamar :meth:`GObject." -"GObject.__init__` em seu construtor (se a classe herdar de :class:`Gtk." -"Button`, deve chamar :func:`Gtk.Button.__init__` por exemplo), como no " -"exemplo abaixo:" - -#: ../../source/objects.txt:37 -msgid "Signals" -msgstr "Sinais" - -#: ../../source/objects.txt:39 -msgid "" -"Signals connect arbitrary application-specific events with any number of " -"listeners. For example, in GTK+, every user event (keystroke or mouse move) " -"is received from the X server and generates a GTK+ event under the form of a " -"signal emission on a given object instance." -msgstr "" -"Os sinais conectam eventos específicos de aplicativos arbitrários com " -"qualquer número de ouvintes. Por exemplo, no GTK+, cada evento de usuário " -"(pressionamento de tecla ou mouse) é recebido do servidor X e gera um evento " -"GTK+ sob a forma de uma emissão de sinal em uma determinada instância de " -"objeto." - -#: ../../source/objects.txt:44 -msgid "" -"Each signal is registered in the type system together with the type on which " -"it can be emitted: users of the type are said to connect to the signal on a " -"given type instance when they register a function to be invoked upon the " -"signal emission. Users can also emit the signal by themselves or stop the " -"emission of the signal from within one of the functions connected to the " -"signal." -msgstr "" -"Cada sinal é registrado no sistema de tipos junto com o tipo no qual ele " -"pode ser emitido: os usuários do tipo são conectados ao sinal em uma " -"determinada instância de tipo quando registram uma função a ser invocada na " -"emissão do sinal. Os usuários também podem emitir o sinal sozinhos ou " -"interromper a emissão do sinal de dentro de uma das funções conectadas ao " -"sinal." - -#: ../../source/objects.txt:51 -msgid "Receive signals" -msgstr "Receba sinais" - -#: ../../source/objects.txt:53 -msgid "See :ref:`signals`" -msgstr "Veja :ref:`signals`" - -#: ../../source/objects.txt:56 -msgid "Create new signals" -msgstr "Crie novos sinais" - -#: ../../source/objects.txt:58 -msgid "" -"New signals can be created by adding them to :attr:`GObject.GObject." -"__gsignals__`, a dictionary:" -msgstr "" -"Novos sinais podem ser criados adicionando-os a :attr:`GObject.GObject." -"__gsignals__`, um dicionário:" - -#: ../../source/objects.txt:61 -msgid "" -"When a new signal is created, a method handler can also be defined, it will " -"be called each time the signal is emitted. It is called do_signal_name." -msgstr "" -"Quando um novo sinal é criado, um manipulador de método também pode ser " -"definido, ele será chamado toda vez que o sinal for emitido. É chamado " -"do_signal_name." - -#: ../../source/objects.txt:75 -msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " -"object method handler (:meth:`do_my_signal` here) in the first emission " -"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " -"will be invoked in the third emission stage) and :const:`GObject." -"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." -msgstr "" -":const:`GObject.SIGNAL_RUN_FIRST` indica que este sinal invocará o " -"manipulador do método de objeto (:meth:`do_my_signal` aqui) no primeiro " -"estágio de emissão. As alternativas são :const:`GObject.SIGNAL_RUN_LAST` (o " -"manipulador de método será invocado no terceiro estágio de emissão) e :const:" -"`GObject.SIGNAL_RUN_CLEANUP` (invoca o manipulador de método no último " -"estágio de emissão)." - -#: ../../source/objects.txt:81 -msgid "" -"The second part, ``None``, indicates the return type of the signal, usually " -"``None``." -msgstr "" -"A segunda parte, ``None``, indica o tipo de retorno do sinal, geralmente " -"``None``." - -#: ../../source/objects.txt:84 -msgid "" -"``(int,)`` indicates the signal arguments, here, the signal will only take " -"one argument, whose type is int. This argument type list must end with a " -"comma." -msgstr "" -"``(int,)`` indica os argumentos do sinal, aqui, o sinal só receberá um " -"argumento, cujo tipo é int. Essa lista de tipos de argumentos deve terminar " -"com uma vírgula." - -#: ../../source/objects.txt:88 -msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" -msgstr "Os sinais podem ser emitidos usando :meth:`GObject.GObject.emit`:" - -#: ../../source/objects.txt:96 -msgid "Properties" -msgstr "Propriedades" - -#: ../../source/objects.txt:97 -msgid "" -"One of GObject's nice features is its generic get/set mechanism for object " -"properties. Each class inherited from :class:`GObject.GObject` can define " -"new properties. Each property has a type which never changes (e.g. str, " -"float, int...). For instance, they are used for :class:`Gtk.Button` where " -"there is a \"label\" property which contains the text of the button." -msgstr "" -"Um dos ótimos recursos do GObject é seu mecanismo get/set genérico para " -"propriedades de objetos. Cada classe herdada de :class:`GObject.GObject` " -"pode definir novas propriedades. Cada propriedade tem um tipo que nunca muda " -"(por exemplo, str, float, int ...). Por exemplo, eles são usados para :class:" -"`Gtk.Button` onde existe uma propriedade \"label\" que contém o texto do " -"botão." - -#: ../../source/objects.txt:104 -msgid "Use existing properties" -msgstr "Use propriedades existentes" - -#: ../../source/objects.txt:106 -msgid "" -"The class :class:`GObject.GObject` provides several useful functions to " -"manage existing properties, :func:`GObject.GObject.get_property` and :func:" -"`GObject.GObject.set_property`." -msgstr "" -"A classe :class:`GObject.GObject` fornece várias funções úteis para " -"gerenciar propriedades existentes, :func:`GObject.GObject.get_property` e :" -"func:`GObject.GObject.set_property`." - -#: ../../source/objects.txt:109 -msgid "" -"Some properties also have functions dedicated to them, called getter and " -"setter. For the property \"label\" of a button, there are two functions to " -"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." -"set_label`." -msgstr "" -"Algumas propriedades também possuem funções dedicadas a elas, chamadas de " -"getter e setter. Para a propriedade \"label\" de um botão, existem duas " -"funções para obter e configurá-las, :func:`Gtk.Button.get_label` e :func:" -"`Gtk.Button.set_label`." - -#: ../../source/objects.txt:114 -msgid "Create new properties" -msgstr "Crie novas propriedades" - -#: ../../source/objects.txt:116 -msgid "" -"A property is defined with a name and a type. Even if Python itself is " -"dynamically typed, you can't change the type of a property once it is " -"defined. A property can be created using :class:`GObject.Property`." -msgstr "" -"Uma propriedade é definida com um nome e um tipo. Mesmo se o próprio Python " -"for digitado dinamicamente, você não poderá alterar o tipo de uma " -"propriedade depois que ela for definida. Uma propriedade pode ser criada " -"usando :class:`GObject.Property`." - -#: ../../source/objects.txt:131 -msgid "" -"Properties can also be read-only, if you want some properties to be readable " -"but not writable. To do so, you can add some flags to the property " -"definition, to control read/write access. Flags are :const:`GObject." -"ParamFlags.READABLE` (only read access for external code), :const:`GObject." -"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." -"READWRITE` (public):" -msgstr "" -"As propriedades também podem ser somente leitura, se você quiser que algumas " -"propriedades sejam legíveis, mas não graváveis. Para fazer isso, você pode " -"adicionar alguns sinalizadores à definição da propriedade, para controlar o " -"acesso de leitura/gravação. Sinalizadores são :const:`GObject.ParamFlags." -"READABLE` (somente acesso de leitura para código externo), :const:`GObject." -"ParamFlags.WRITABLE` (somente acesso de gravação), :const:`GObject." -"ParamFlags.READWRITE` (publico):" - -#: ../../source/objects.txt:146 -msgid "" -"You can also define new read-only properties with a new method decorated " -"with :class:`GObject.Property`:" -msgstr "" -"Você também pode definir novas propriedades somente leitura com um novo " -"método decorado com :class:`GObject.Property`:" - -#: ../../source/objects.txt:162 -msgid "You can get this property using:" -msgstr "Você pode obter essa propriedade usando:" - -#: ../../source/objects.txt:170 -msgid "" -"The API of :class:`GObject.Property` is similar to the builtin :py:func:" -"`property`. You can create property setter in a way similar to Python " -"property:" -msgstr "" -"A API de :class:`GObject.Property` é semelhante ao construído em :py:func:" -"`property`. Você pode criar o setter de propriedades de maneira semelhante à " -"propriedade Python:" - -#: ../../source/objects.txt:191 -msgid "" -"There is also a way to define minimum and maximum values for numbers, using " -"a more verbose form:" -msgstr "" -"Há também uma maneira de definir valores mínimos e máximos para números, " -"usando um formulário mais detalhado:" - -#: ../../source/objects.txt:227 -msgid "" -"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " -"dictionary, and handled in do_get_property and do_set_property." -msgstr "" -"As propriedades devem ser definidas em :attr:`GObject.GObject." -"__gproperties__`, um dicionário e manipulado em do_get_property e " -"do_set_property." - -#: ../../source/objects.txt:231 -msgid "Watch properties" -msgstr "Veja as propriedades" - -#: ../../source/objects.txt:233 -msgid "" -"When a property is modified, a signal is emitted, whose name is \"notify::" -"property-name\":" -msgstr "" -"Quando uma propriedade é modificada, um sinal é emitido, cujo nome é " -"\"notify::property-name\":" - -#: ../../source/objects.txt:248 -msgid "" -"Note that you have to use the canonical property name when connecting to the " -"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " -"instance, for a Python property `foo_bar_baz` you would connect to the " -"signal `notify::foo-bar-baz` using" -msgstr "" -"Note que você tem que usar o nome da propriedade canônica ao se conectar aos " -"sinais de notificação, como explicado em :func:`GObject.Object.signals." -"notify`. Por exemplo, para uma propriedade Python `foo_bar_baz` você " -"conectaria ao sinal `notify::foo-bar-baz` usando" - -#: ../../source/objects.txt:263 -msgid "API" -msgstr "" - -#: ../../source/objects.txt:269 -msgid "Retrieves a property value." -msgstr "Recupera um valor de propriedade." - -#: ../../source/objects.txt:273 -msgid "Set property *property_name* to *value*." -msgstr "Configure a propriedade *property_name* para *valor*." - -#: ../../source/objects.txt:277 -msgid "" -"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " -"is of type ``(int,)``, it must be emitted with::" -msgstr "" -"Emitir sinal *signal_name*. Argumentos de sinal devem seguir, por ex. se o " -"seu sinal é do tipo ``(int,)``, deve ser emitido com::" - -#: ../../source/objects.txt:284 -msgid "" -"This method freezes all the \"notify::\" signals (which are emitted when any " -"property is changed) until the :meth:`thaw_notify` method is called." -msgstr "" -"Este método congela todos os sinais \"notify::\" (que são emitidos quando " -"qualquer propriedade é alterada) até que o método :meth:`thaw_notify` seja " -"chamado." - -#: ../../source/objects.txt:288 -msgid "" -"It recommended to use the *with* statement when calling :meth:" -"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " -"implicitly at the end of the block::" -msgstr "" -"Recomenda-se usar a instrução *with* ao chamar :meth:`freeze_notify`, dessa " -"forma é assegurado que :meth:`thaw_notify` é chamado implicitamente no final " -"do bloco::" - -#: ../../source/objects.txt:298 -msgid "" -"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." -msgstr "" -"Descongele todos os sinais \"notify::\" que foram descongelados por :meth:" -"`freeze_notify`." - -#: ../../source/objects.txt:300 -msgid "" -"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" -"`freeze_notify` together with the *with* statement." -msgstr "" -"Recomenda-se não chamar :meth:`thaw_notify` explicitamente mas use :meth:" -"`freeze_notify` juntamente com a instrução *with*." - -#: ../../source/objects.txt:305 -msgid "" -"Blocks a handler of an instance so it will not be called during any signal " -"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " -"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " -"signal handler has to be unblocked exactly the same amount of times it has " -"been blocked before to become active again." -msgstr "" -"Bloqueia um manipulador de uma instância para que ele não seja chamado " -"durante qualquer emissão de sinal, a menos que :meth:`handler_unblock` seja " -"chamado para aquele *handler_id*. Assim, \"bloqueando\" um manipulador de " -"sinal significa desativá-lo temporariamente, um manipulador de sinal precisa " -"ser desbloqueado exatamente na mesma quantidade de vezes que foi bloqueado " -"antes de se tornar ativo novamente." - -#: ../../source/objects.txt:311 -msgid "" -"It is recommended to use :meth:`handler_block` in conjunction with the " -"*with* statement which will call :meth:`handler_unblock` implicitly at the " -"end of the block::" -msgstr "" -"Recomenda-se usar :meth:`handler_block` em conjunto com a instrução *with* " -"que irá chamar :meth:`handler_unblock` implicitamente no final do bloco::" - -#: ../../source/objects.txt:321 -msgid "" -"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " -"during signal emissions and will not be invoked until it has been unblocked " -"exactly the amount of times it has been blocked before." -msgstr "" -"Desfaz o efeito de :meth:`handler_block`. Um manipulador bloqueado é " -"ignorado durante as emissões do sinal e não será chamado até que tenha sido " -"desbloqueado exatamente a quantidade de vezes que foi bloqueado antes." - -#: ../../source/objects.txt:325 -msgid "" -"It is recommended to not call :meth:`handler_unblock` explicitly but use :" -"meth:`handler_block` together with the *with* statement." -msgstr "" -"É recomendado não chamar explicitamente :meth:`handler_unblock` mas use :" -"meth:`handler_block` junto com a instrução *with*." - -#: ../../source/objects.txt:330 -msgid "A dictionary where inherited class can define new signals." -msgstr "Um dicionário onde a classe herdada pode definir novos sinais." - -#: ../../source/objects.txt:332 -msgid "" -"Each element in the dictionary is a new signal. The key is the signal name. " -"The value is a tuple, with the form::" -msgstr "" -"Cada elemento no dicionário é um novo sinal. A chave é o nome do sinal. O " -"valor é uma tupla, com o formato:" - -#: ../../source/objects.txt:337 -msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." -"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " -"return type of the signal. ``(int,)`` is the list of the parameters of the " -"signal, it must end with a comma." -msgstr "" -":const:`GObject.SIGNAL_RUN_FIRST` pode ser substituído por :const:`GObject." -"SIGNAL_RUN_LAST` ou :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` é o tipo " -"de retorno do sinal. ``(int,)`` é a lista dos parâmetros do sinal, deve " -"terminar com uma vírgula." - -#: ../../source/objects.txt:346 -msgid "" -"The :attr:`__gproperties__` dictionary is a class property where you define " -"the properties of your object. This is not the recommend way to define new " -"properties, the method written above is much less verbose. The benefits of " -"this method is that a property can be defined with more settings, like the " -"minimum or the maximum for numbers." -msgstr "" -"O dicionário :attr:`__gproperties__` é uma propriedade de classe onde você " -"define as propriedades do seu objeto. Esta não é a maneira recomendada de " -"definir novas propriedades, o método escrito acima é muito menos detalhado. " -"Os benefícios desse método é que uma propriedade pode ser definida com mais " -"configurações, como o mínimo ou o máximo para números." - -#: ../../source/objects.txt:352 -msgid "The key is the name of the property" -msgstr "A chave é o nome da propriedade" - -#: ../../source/objects.txt:354 -msgid "" -"The value is a tuple which describe the property. The number of elements of " -"this tuple depends on its first element but the tuple will always contain at " -"least the following items:" -msgstr "" -"O valor é uma tupla que descreve a propriedade. O número de elementos dessa " -"tupla depende de seu primeiro elemento, mas a tupla sempre conterá pelo " -"menos os seguintes itens:" - -#: ../../source/objects.txt:358 -msgid "The first element is the property's type (e.g. ``int``, ``float``...)." -msgstr "" -"O primeiro elemento é o tipo da propriedade (por exemplo, ``int``, " -"``float``...)." - -#: ../../source/objects.txt:360 -msgid "" -"The second element is the property's nick name, which is a string with a " -"short description of the property. This is generally used by programs with " -"strong introspection capabilities, like the graphical user interface builder " -"`Glade`_." -msgstr "" -"O segundo elemento é o apelido da propriedade, que é uma string com uma " -"breve descrição da propriedade. Isso geralmente é usado por programas com " -"fortes recursos de introspecção, como o construtor de interface gráfica de " -"usuário `Glade`_." - -#: ../../source/objects.txt:365 -msgid "" -"The third one is the property's description or blurb, which is another " -"string with a longer description of the property. Also used by `Glade`_ and " -"similar programs." -msgstr "" -"A terceira é a descrição da propriedade ou sinopse, que é outra string com " -"uma descrição mais longa da propriedade. Também usado pelo `Glade`_ e " -"programas similares." - -#: ../../source/objects.txt:369 -msgid "" -"The last one (which is not necessarily the forth one as we will see later) " -"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." -"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." -msgstr "" -"O último (que não é necessariamente o último, como veremos mais adiante) é o " -"sinalizador da propriedade :const:`GObject.PARAM_READABLE`, :const:`GObject." -"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." - -#: ../../source/objects.txt:373 -msgid "" -"The absolute length of the tuple depends on the property type (the first " -"element of the tuple). Thus we have the following situations:" -msgstr "" -"O comprimento absoluto da tupla depende do tipo de propriedade (o primeiro " -"elemento da tupla). Assim, temos as seguintes situações:" - -#: ../../source/objects.txt:376 -msgid "" -"If the type is ``bool`` or ``str``, the forth element is the default value " -"of the property." -msgstr "" -"Se o tipo for ``bool`` ou ``str``, o quarto elemento é o valor padrão da " -"propriedade." - -#: ../../source/objects.txt:379 -msgid "" -"If the type is ``int`` or ``float``, the forth element is the minimum " -"accepted value, the fifth element is the maximum accepted value and the " -"sixth element is the default value." -msgstr "" -"Se o tipo for ``int`` ou ``float``, o quarto elemento é o valor mínimo " -"aceito, o quinto elemento é o valor máximo aceito e o sexto elemento é o " -"valor padrão." - -#: ../../source/objects.txt:383 -msgid "If the type is not one of these, there is no extra element." -msgstr "Se o tipo não for um desses, não há elemento extra." - -#: ../../source/objects.txt:388 -msgid "Invoke the object method handler in the first emission stage." -msgstr "" -"Invoque o manipulador de método de objeto no primeiro estágio de emissão." - -#: ../../source/objects.txt:392 -msgid "Invoke the object method handler in the third emission stage." -msgstr "" -"Invoque o manipulador de método de objeto no terceiro estágio de emissão." - -#: ../../source/objects.txt:396 -msgid "Invoke the object method handler in the last emission stage." -msgstr "" -"Invoque o manipulador do método de objeto no último estágio de emissão." - -#: ../../source/objects.txt:400 -msgid "The property is readable." -msgstr "A propriedade é legível." - -#: ../../source/objects.txt:404 -msgid "The property is writable." -msgstr "A propriedade é gravável." - -#: ../../source/objects.txt:408 -msgid "The property is readable and writable." -msgstr "A propriedade é legível e gravável." diff --git a/translations/locale/pt_BR/LC_MESSAGES/popover.po b/translations/locale/pt_BR/LC_MESSAGES/popover.po deleted file mode 100644 index a4ce2f0..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/popover.po +++ /dev/null @@ -1,83 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-11 23:24-0300\n" -"PO-Revision-Date: 2018-04-11 23:29-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/popover.txt:2 -msgid "Popovers" -msgstr "" - -#: ../../source/popover.txt:4 -msgid "" -"The :class:`Gtk.Popover` is a seperate window used for displaying additional " -"information and are often used as a part of button menus and context menus. " -"Their uses are similar to those of dialog windows with the advantage of " -"being less disruptive and having a connection with the widget the popover is " -"pointing to. Popovers have are visually connected to a related widget with a " -"small triangle." -msgstr "" -"O :class:`Gtk.Popover` é uma janela separada usada para exibir informações " -"adicionais e é frequentemente usada como parte de menus de botão e menus de " -"contexto. Seus usos são semelhantes aos das janelas de diálogo, com a " -"vantagem de ser menos prejudicial e ter uma conexão com o widget para o qual " -"o popover está apontando. Os popovers estão visualmente conectados a um " -"widget relacionado com um pequeno triângulo." - -#: ../../source/popover.txt:10 -msgid "" -"ApPopover can be created with :class:`Gtk.Popover`; for opening the popover " -"use :meth:`Gtk.Widget.show_all`." -msgstr "" -"O ApPopover pode ser criado com :class:`Gtk.Popover`; para abrir o popover " -"use :meth:`Gtk.Widget.show_all`." - -#: ../../source/popover.txt:14 -msgid "Custom Popover" -msgstr "Popover Personalizado" - -#: ../../source/popover.txt:16 -msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." -msgstr "" -"Um widget pode ser adicionado a um popover usando o :meth:`Gtk.Container." -"add`." - -#: ../../source/popover.txt:19 ../../source/popover.txt:34 -msgid "Example" -msgstr "Exemplo" - -#: ../../source/popover.txt:27 -msgid "Menu Popover" -msgstr "" - -#: ../../source/popover.txt:29 -msgid "" -"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." -"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." -"Popover.bind_model`." -msgstr "" -"Um popover pode ser criado a partir de :class:`Gio.MenuModel` usando :meth:" -"`Gtk.Popover.new_from_model` e pode ser alterado após a criação com :meth:" -"`Gtk.Popover.bind_model`." - -#: ../../source/popover.txt:41 -msgid "See Also" -msgstr "Veja também" - -#: ../../source/popover.txt:43 -msgid "https://developer.gnome.org/hig/stable/popovers.html.en" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po b/translations/locale/pt_BR/LC_MESSAGES/progressbar.po deleted file mode 100644 index afbb7df..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/progressbar.po +++ /dev/null @@ -1,92 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:19-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/progressbar.txt:2 -msgid "ProgressBar" -msgstr "Barra de Progresso" - -#: ../../source/progressbar.txt:4 -msgid "" -"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " -"long running operation. It provides a visual clue that processing is " -"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " -"*percentage mode* and *activity mode*." -msgstr "" -"O :class:`Gtk.ProgressBar` é normalmente usado para exibir o progresso de " -"uma operação longa. Ele fornece uma pista visual de que o processamento está " -"em andamento. O :class:`Gtk.ProgressBar` pode ser usado em dois modos " -"diferentes: *modo de porcentagem* e *modo de atividade*." - -#: ../../source/progressbar.txt:9 -msgid "" -"When an application can determine how much work needs to take place (e.g. " -"read a fixed number of bytes from a file) and can monitor its progress, it " -"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " -"a growing bar indicating the percentage of the work that has been completed. " -"In this mode, the application is required to call :meth:`Gtk.ProgressBar." -"set_fraction` periodically to update the progress bar, passing a float " -"between 0 and 1 to provide the new percentage value." -msgstr "" -"Quando uma aplicação pode determinar quanto trabalho precisa ocorrer (por " -"exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu " -"progresso, ela pode usar :class:`Gtk.ProgressBar` no modo *percentage* e o " -"usuário vê uma barra crescente indicando a porcentagem do trabalho que foi " -"concluído. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." -"ProgressBar.set_fraction` periodicamente para atualizar a barra de " -"progresso, passando um float entre 0 e 1 para fornecer o novo valor " -"percentual." - -#: ../../source/progressbar.txt:17 -msgid "" -"When an application has no accurate way of knowing the amount of work to do, " -"it can use *activity mode*, which shows activity by a block moving back and " -"forth within the progress area. In this mode, the application is required to " -"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " -"You can also choose the step size, with the :meth:`Gtk.ProgressBar." -"set_pulse_step` method." -msgstr "" -"Quando um aplicativo não tem uma maneira precisa de saber a quantidade de " -"trabalho a ser feito, ele pode usar o *modo de atividade*, que mostra a " -"atividade de um bloco se movendo para frente e para trás na área de " -"progresso. Neste modo, o aplicativo é necessário para chamar :meth:`Gtk." -"ProgressBar.pulse` periodicamente para atualizar a barra de progresso. Você " -"também pode escolher o tamanho do passo, com o método :meth:`Gtk.ProgressBar." -"set_pulse_step`." - -#: ../../source/progressbar.txt:24 -msgid "" -"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " -"you can change it to a vertical progress bar by using the :meth:`Gtk." -"ProgressBar.set_orientation` method. Changing the direction the progress bar " -"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." -"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." -"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." -msgstr "" -"Por padrão, :class:`Gtk.ProgressBar` é horizontal e da esquerda para a " -"direita, mas você pode alterá-lo para uma barra de progresso vertical usando " -"o método :meth:`Gtk.ProgressBar.set_orientation`. Mudar a direção da barra " -"de progresso pode ser feito usando :meth:`Gtk.ProgressBar.set_inverted`. :" -"class:`Gtk.ProgressBar` também pode conter texto que pode ser definido " -"chamando :meth:`Gtk.ProgressBar.set_text` e :meth:`Gtk.ProgressBar." -"set_show_text`." - -#: ../../source/progressbar.txt:32 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/spinner.po b/translations/locale/pt_BR/LC_MESSAGES/spinner.po deleted file mode 100644 index e3bbfb5..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/spinner.po +++ /dev/null @@ -1,45 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:35-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/spinner.txt:2 -msgid "Spinner" -msgstr "" - -#: ../../source/spinner.txt:4 -msgid "" -"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " -"often used as an alternative to a :class:`GtkProgressBar` for displaying " -"indefinite activity, instead of actual progress." -msgstr "" -"O :class:`Gtk.Spinner` exibe uma animação giratória do tamanho de um ícone. " -"É frequentemente usado como uma alternativa a :class:`GtkProgressBar` para " -"exibir atividade indefinida, em vez de progresso real." - -#: ../../source/spinner.txt:8 -msgid "" -"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" -"`Gtk.Spinner.stop`." -msgstr "" -"Para iniciar a animação, use :meth:`Gtk.Spinner.start`, para pará-lo use :" -"meth:`Gtk.Spinner.stop`." - -#: ../../source/spinner.txt:12 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/stock.po b/translations/locale/pt_BR/LC_MESSAGES/stock.po deleted file mode 100644 index 5ac7c97..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/stock.po +++ /dev/null @@ -1,84 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 -# Tutorial package. -# FIRST AUTHOR , 2018. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-10 09:47+0000\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.5.3\n" -"Last-Translator: Tomaz Cunha \n" -"Language-Team: \n" -"Language: pt_BR\n" -"X-Generator: Poedit 1.8.11\n" - -# e121e6594e0e4da9a1621a2377ef4958 -#: ../source/stock.txt:4 -msgid "Stock Items" -msgstr "" - -# 606b231d71674442a3f5d52d748963fa -#: ../source/stock.txt:6 -msgid "" -"Stock items represent commonly-used menu or toolbar items such as \"Open" -"\" or \"Exit\". Each stock item is identified by a stock ID; stock IDs " -"are just strings, but constants such as :attr:`Gtk.STOCK_OPEN` are " -"provided to avoid typing mistakes in the strings." -msgstr "" - -# 414f2abe421e4978b47ca5427fb3f106 -# ddb9102f827b473eae086c933a8988da -# f116631764a1416e8d65f881b21f294d -# d6cefcc39cf64f0490a9ac6344093a1f -# 68e79a9579a9477ab9cc07c8831ac586 -# e7154d34aab04729a7c0b6ec84d8997f -# a4ad7d8ce49541d5aef4ca38acda2f75 -# 7205f6fbc7614699813f09ad4ad41b0d -# c7c278f8e45f4a0e90dd8e9f4efba75a -# f731da1a0b0d4a4f90f214d0e3068fad -# 3dcc064472ce433493951bdc676a1de1 -# 401ce8dc69d64ed2979b2c2bbabca805 -# e381d63cbcbb477bb7f54fc8fdedded0 -# a82fab50ef9a490aafffe735117b1b0e -# 4311fbff8eb04d1ababc0ea72a17877b -# 32791b18cb8048b598a5372d03433b5a -#: ../source/stock.txt:141 ../source/stock.txt:151 ../source/stock.txt:165 -#: ../source/stock.txt:179 ../source/stock.txt:209 ../source/stock.txt:227 -#: ../source/stock.txt:261 ../source/stock.txt:271 ../source/stock.txt:285 -#: ../source/stock.txt:295 ../source/stock.txt:309 ../source/stock.txt:403 -#: ../source/stock.txt:421 ../source/stock.txt:471 ../source/stock.txt:485 -#: ../source/stock.txt:495 -msgid "LTR variant:" -msgstr "" - -# 856d301cc54844699657d94b81c62f38 -# c828bd161d3947f48d164903af1c15b1 -# fcd887eb429b406d87b598cee2af6456 -# 540c4c3bfb5549b2965d263b6adee0ff -# 8d3280e44d664904a253934d4a763ca8 -# dd41de5058984509aada4b41e5d15292 -# 2752da4a0eee46f49d1c1a8b212cb842 -# 7c3f745178dc46f5b49ef867c7d54c1c -# 7488f736d91c4f109c0b7f17ef0bc955 -# f592f6173a1e4362a78439441cf06a98 -# 3da43acde56548a190140395393f3f7a -# be82f292d16a4b86812d45ff60b39cc1 -# dc857a9abef7449db73e5eefb7bc51ac -# 75afb699f83c480e92f2398247b3bee9 -# b0643da317004916aabc5e5768a55df7 -# 5d2580d604fa4db980345d496d6d95d1 -#: ../source/stock.txt:145 ../source/stock.txt:155 ../source/stock.txt:169 -#: ../source/stock.txt:183 ../source/stock.txt:213 ../source/stock.txt:231 -#: ../source/stock.txt:265 ../source/stock.txt:275 ../source/stock.txt:289 -#: ../source/stock.txt:299 ../source/stock.txt:313 ../source/stock.txt:407 -#: ../source/stock.txt:425 ../source/stock.txt:475 ../source/stock.txt:489 -#: ../source/stock.txt:499 -msgid "RTL variant:" -msgstr "" diff --git a/translations/locale/pt_BR/LC_MESSAGES/textview.po b/translations/locale/pt_BR/LC_MESSAGES/textview.po deleted file mode 100644 index 55d9d37..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/textview.po +++ /dev/null @@ -1,288 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 11:32-0300\n" -"PO-Revision-Date: 2018-04-11 23:07-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/textview.txt:2 -msgid "Multiline Text Editor" -msgstr "Editor de Texto Multilinha" - -#: ../../source/textview.txt:4 -msgid "" -"The :class:`Gtk.TextView` widget can be used to display and edit large " -"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" -"view design. In this case the :class:`Gtk.TextBuffer` is the model which " -"represents the text being edited. This allows two or more :class:`Gtk." -"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " -"those text buffers to be displayed slightly differently. Or you could " -"maintain several text buffers and choose to display each one at different " -"times in the same :class:`Gtk.TextView` widget." -msgstr "" -"O widget :class:`Gtk.TextView` pode ser usado para exibir e editar grandes " -"quantidades de texto formatado. Como o :class:`Gtk.TreeView`, ele possui um " -"design de modelo/visualização. Neste caso, o :class:`Gtk.TextBuffer` é o " -"modelo que representa o texto que está sendo editado. Isto permite que dois " -"ou mais widgets :class:`Gtk.TextView` compartilhem o mesmo :class:`Gtk." -"TextBuffer`, e permite que os buffers de texto sejam exibidos de forma " -"ligeiramente diferente. Ou você pode manter vários buffers de texto e optar " -"por exibir cada um deles em momentos diferentes no mesmo widget :class:`Gtk." -"TextView`." - -#: ../../source/textview.txt:13 -msgid "The View" -msgstr "A Visualização" - -#: ../../source/textview.txt:15 -msgid "" -"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " -"and delete textual data. They are commonly used to edit multiple lines of " -"text. When creating a :class:`Gtk.TextView` it contains its own default :" -"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." -"get_buffer` method." -msgstr "" -"O :class:`Gtk.TextView` é o frontend com o qual o usuário pode adicionar, " -"editar e excluir dados textuais. Eles são comumente usados para editar " -"várias linhas de texto. Ao criar um :class:`Gtk.TextView` ele contém seu " -"próprio padrão :class:`Gtk.TextBuffer`, que você pode acessar através do " -"método :meth:`Gtk.TextView.get_buffer`." - -#: ../../source/textview.txt:21 -msgid "" -"By default, text can be added, edited and removed from the :class:`Gtk." -"TextView`. You can disable this by calling :meth:`Gtk.TextView." -"set_editable`. If the text is not editable, you usually want to hide the " -"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " -"cases it may be useful to set the justification of the text with :meth:`Gtk." -"TextView.set_justification`. The text can be displayed at the left edge, (:" -"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." -"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " -"the complete width (:attr:`Gtk.Justification.FILL`)." -msgstr "" -"Por padrão, o texto pode ser adicionado, editado e removido da :class:`Gtk." -"TextView`. Você pode desabilitar isso chamando :meth:`Gtk.TextView." -"set_editable`. Se o texto não for editável, você geralmente deseja ocultar o " -"cursor de texto com :meth:`Gtk.TextView.set_cursor_visible` também. Em " -"alguns casos, pode ser útil definir a justificação do texto com :meth:`Gtk." -"TextView.set_justification`. O texto pode ser exibido na borda esquerda, (:" -"attr:`Gtk.Justification.LEFT`), na extremidade direita (:attr:`Gtk." -"Justification.RIGHT`), centralizado (:attr:`Gtk.Justification.CENTER`), ou " -"distribuído em toda a largura (:attr:`Gtk.Justification.FILL`)." - -#: ../../source/textview.txt:31 -msgid "" -"Another default setting of the :class:`Gtk.TextView` widget is long lines of " -"text will continue horizontally until a break is entered. To wrap the text " -"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." -"set_wrap_mode`." -msgstr "" -"Outra configuração padrão do widget :class:`Gtk.TextView` é que linhas " -"longas de texto continuarão horizontalmente até que uma quebra seja " -"inserida. Para encapsular o texto e impedir que ele saia das bordas da tela, " -"chame :meth:`Gtk.TextView.set_wrap_mode`." - -#: ../../source/textview.txt:36 -msgid "The Model" -msgstr "O Modelo" - -#: ../../source/textview.txt:38 -msgid "" -"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " -"and is used to hold whatever text is being displayed in the :class:`Gtk." -"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." -"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " -"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." -"TextIter`. An iterator represents a position between two characters in the " -"text buffer. Iterators are not valid indefinitely; whenever the buffer is " -"modified in a way that affects the contents of the buffer, all outstanding " -"iterators become invalid." -msgstr "" -"O :class:`Gtk.TextBuffer` é o núcleo do widget :class:`Gtk.TextView` e é " -"usado para armazenar qualquer texto que esteja sendo exibido na :class:`Gtk." -"TextView`. Definir e recuperar o conteúdo é possível com :meth:`Gtk." -"TextBuffer.set_text` e :meth:`Gtk.TextBuffer.get_text`. No entanto, a maior " -"parte da manipulação de texto é realizada com *iteradores*, representados " -"por um :class:`Gtk.TextIter`. Um iterador representa uma posição entre dois " -"caracteres no buffer de texto. Iteradores não são válidos indefinidamente; " -"sempre que o buffer é modificado de uma maneira que afeta o conteúdo do " -"buffer, todos os iteradores pendentes se tornam inválidos." - -#: ../../source/textview.txt:48 -msgid "" -"Because of this, iterators can't be used to preserve positions across buffer " -"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " -"buffer contains two built-in marks; an \"insert\" mark (which is the " -"position of the cursor) and the \"selection_bound\" mark. Both of them can " -"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectively. By default, the location of " -"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" -"`Gtk.TextMark.set_visible`." -msgstr "" -"Por causa disso, os iteradores não podem ser usados para preservar posições " -"nas modificações do buffer. Para preservar uma posição, use :class:`Gtk." -"TextMark`. Um buffer de texto contém duas marcas internas; uma marca \"insert" -"\" (que é a posição do cursor) e a marca \"selection_bound\". Ambos podem " -"ser recuperados usando :meth:`Gtk.TextBuffer.get_insert` e :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectivamente. Por padrão, a localização " -"de um :class:`Gtk.TextMark` não é mostrada. Isso pode ser alterado chamando :" -"meth:`Gtk.TextMark.set_visible`." - -#: ../../source/textview.txt:56 -msgid "" -"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" -"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " -"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " -"returns an iterator pointing past the last valid character. Retrieving the " -"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." -"get_selection_bounds`." -msgstr "" -"Existem muitos métodos para recuperar um :class:`Gtk.TextIter`. Por " -"exemplo, :meth:`Gtk.TextBuffer.get_start_iter` retorna um iterador apontando " -"para a primeira posição no buffer de texto, enquanto :meth:`Gtk.TextBuffer." -"get_end_iter` retorna um iterador apontando após o último caractere válido. " -"A recuperação dos limites do texto selecionado pode ser obtida chamando :" -"meth:`Gtk.TextBuffer.get_selection_bounds`." - -#: ../../source/textview.txt:63 -msgid "" -"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " -"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " -"inserts text wherever the cursor may be currently positioned. To remove " -"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." -msgstr "" -"Para inserir texto em uma posição específica use :meth:`Gtk.TextBuffer." -"insert`. Outro método útil é :meth:`Gtk.TextBuffer.insert_at_cursor` que " -"insere texto onde quer que o cursor esteja posicionado no momento. Para " -"remover partes do buffer de texto, use :meth:`Gtk.TextBuffer.delete`." - -#: ../../source/textview.txt:68 -msgid "" -"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " -"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." -"backward_search`. The start and end iters are used as the starting point of " -"the search and move forwards/backwards depending on requirements." -msgstr "" -"Além disso, :class:`Gtk.TextIter` pode ser usado para localizar " -"correspondências textuais no buffer usando :meth:`Gtk.TextIter." -"forward_search` e :meth:`Gtk.TextIter.backward_search`. Os iters inicial e " -"final são usados como ponto de partida da pesquisa e avançam/retrocedem " -"dependendo dos requisitos." - -#: ../../source/textview.txt:75 -msgid "Tags" -msgstr "" - -#: ../../source/textview.txt:77 -msgid "" -"Text in a buffer can be marked with tags. A tag is an attribute that can be " -"applied to some range of text. For example, a tag might be called \"bold\" " -"and make the text inside the tag bold. However, the tag concept is more " -"general than that; tags don't have to affect appearance. They can instead " -"affect the behaviour of mouse and key presses, \"lock\" a range of text so " -"the user can't edit it, or countless other things. A tag is represented by " -"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " -"any number of text ranges in any number of buffers." -msgstr "" -"O texto em um buffer pode ser marcado com tags. Uma tag é um atributo que " -"pode ser aplicado a um intervalo de texto. Por exemplo, uma tag pode ser " -"chamada de \"negrito\" e tornar o texto dentro da tag em negrito. No " -"entanto, o conceito de tag é mais geral do que isso; as tags não precisam " -"afetar a aparência. Eles podem afetar o comportamento de pressionamentos de " -"mouse e de tecla, \"bloquear\" um intervalo de texto para que o usuário não " -"possa editá-lo ou inúmeras outras coisas. Uma tag é representada por um " -"objeto :class:`Gtk.TextTag`. Um :class:`Gtk.TextTag` pode ser aplicado a " -"qualquer número de intervalos de texto em qualquer número de buffers." - -#: ../../source/textview.txt:86 -msgid "" -"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " -"of tags that can be used together. Each buffer has one tag table associated " -"with it; only tags from that tag table can be used with the buffer. A single " -"tag table can be shared between multiple buffers, however." -msgstr "" -"Cada tag é armazenada em :class:`Gtk.TextTagTable`. Uma tabela de tags " -"define um conjunto de tags que podem ser usadas juntas. Cada buffer tem uma " -"tabela de tags associada a ele; somente tags dessa tabela de tags podem ser " -"usadas com o buffer. No entanto, uma única tabela de tags pode ser " -"compartilhada entre vários buffers." - -#: ../../source/textview.txt:91 -msgid "" -"To specify that some text in the buffer should have specific formatting, you " -"must define a tag to hold that formatting information, and then apply that " -"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" -"`Gtk.TextBuffer.apply_tag`::" -msgstr "" -"Para especificar que algum texto no buffer deve ter uma formatação " -"específica, você deve definir uma tag para manter as informações de " -"formatação e, em seguida, aplicar essa tag à região do texto usando :meth:" -"`Gtk.TextBuffer.create_tag` e :meth:`Gtk.TextBuffer.apply_tag`::" - -#: ../../source/textview.txt:99 -msgid "The following are some of the common styles applied to text:" -msgstr "A seguir estão alguns dos estilos comuns aplicados ao texto:" - -# nome da propriedade trocado -#: ../../source/textview.txt:101 -msgid "Background colour (\"foreground\" property)" -msgstr "Cor de fundo (propriedade \"background\")" - -#: ../../source/textview.txt:102 -msgid "Foreground colour (\"background\" property)" -msgstr "Cor de primeiro plano (propriedade \"foreground\")" - -#: ../../source/textview.txt:103 -msgid "Underline (\"underline\" property)" -msgstr "Sublinhado (propriedade \"underline\")" - -#: ../../source/textview.txt:104 -msgid "Bold (\"weight\" property)" -msgstr "Negrito (propriedade \"weight\")" - -#: ../../source/textview.txt:105 -msgid "Italics (\"style\" property)" -msgstr "Itálico (propriedade \"style\")" - -#: ../../source/textview.txt:106 -msgid "Strikethrough (\"strikethrough\" property)" -msgstr "Tachado (propriedade \"strikethrough\")" - -#: ../../source/textview.txt:107 -msgid "Justification (\"justification\" property)" -msgstr "Justificação (propriedade de \"justification\")" - -#: ../../source/textview.txt:108 -msgid "Size (\"size\" and \"size-points\" properties)" -msgstr "Tamanho (propriedades \"size\" e \"size-points\")" - -#: ../../source/textview.txt:109 -msgid "Text wrapping (\"wrap-mode\" property)" -msgstr "Quebra automática de texto (propriedade \"wrap-mode\")" - -#: ../../source/textview.txt:111 -msgid "" -"You can also delete particular tags later using :meth:`Gtk.TextBuffer." -"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." -"TextBuffer.remove_all_tags`." -msgstr "" -"Você também pode excluir tags particulares posteriormente usando :meth:`Gtk." -"TextBuffer.remove_tag` ou excluir todas as tags em uma determinada região " -"chamando :meth:`Gtk.TextBuffer.remove_all_tags`." - -#: ../../source/textview.txt:115 -msgid "Example" -msgstr "Exemplo" diff --git a/translations/locale/pt_BR/LC_MESSAGES/treeview.po b/translations/locale/pt_BR/LC_MESSAGES/treeview.po deleted file mode 100644 index 10e95a4..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/treeview.po +++ /dev/null @@ -1,466 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-04 04:43-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/treeview.txt:2 -msgid "Tree and List Widgets" -msgstr "Widgets de Árvore e Lista" - -#: ../../source/treeview.txt:4 -msgid "" -"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " -"way of displaying data. They are used in conjunction with a :class:`Gtk." -"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " -"manipulating data in many ways, including:" -msgstr "" -"A :class:`Gtk.TreeView` e seus widgets associados são uma maneira " -"extremamente poderosa de exibir dados. Eles são usados em conjunto com um :" -"class:`Gtk.ListStore` ou :class:`Gtk.TreeStore` e fornecem uma maneira de " -"exibir e manipular dados de várias maneiras, incluindo:" - -#: ../../source/treeview.txt:9 -msgid "Automatically updates when data added, removed or edited" -msgstr "" -"Atualiza automaticamente quando os dados são adicionados, removidos ou " -"editados" - -#: ../../source/treeview.txt:10 -msgid "Drag and drop support" -msgstr "Suporte a Arrastar e Soltar" - -#: ../../source/treeview.txt:11 -msgid "Sorting of data" -msgstr "Classificação de dados" - -#: ../../source/treeview.txt:12 -msgid "Support embedding widgets such as check boxes, progress bars, etc." -msgstr "" -"Suporte a incorporação de widgets, como caixas de seleção, barras de " -"progresso, etc." - -#: ../../source/treeview.txt:13 -msgid "Reorderable and resizable columns" -msgstr "Colunas reordenáveis e redimensionáveis" - -#: ../../source/treeview.txt:14 -msgid "Filtering of data" -msgstr "Filtragem de dados" - -#: ../../source/treeview.txt:16 -msgid "" -"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " -"It is often difficult for beginner developers to be able to utilize it " -"correctly due to the number of methods which are required." -msgstr "" -"Com o poder e a flexibilidade de um :class:`Gtk.TreeView` vem a " -"complexidade. Geralmente, é difícil para os desenvolvedores iniciantes serem " -"capazes de utilizá-lo corretamente devido ao número de métodos necessários." - -#: ../../source/treeview.txt:21 -msgid "The Model" -msgstr "O Modelo" - -#: ../../source/treeview.txt:22 -msgid "" -"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " -"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " -"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " -"the same underlying data to be displayed and edited in 2 different ways at " -"the same time. Or the 2 Views might display different columns from the same " -"Model data, in the same way that 2 SQL queries (or \"views\") might show " -"different fields from the same database table." -msgstr "" -"Cada :class:`Gtk.TreeView` possui um :class:`Gtk.TreeModel`, que contém os " -"dados exibidos pelo TreeView. Cada :class:`Gtk.TreeModel` pode ser usado por " -"mais de um :class:`Gtk.TreeView`. Por exemplo, isso permite que os mesmos " -"dados subjacentes sejam exibidos e editados de duas maneiras diferentes ao " -"mesmo tempo. Ou os 2 modos de exibição podem exibir colunas diferentes dos " -"mesmos dados do modelo, da mesma forma que duas consultas SQL (ou " -"\"visualizações\") podem mostrar campos diferentes da mesma tabela de banco " -"de dados." - -#: ../../source/treeview.txt:30 -msgid "" -"Although you can theoretically implement your own Model, you will normally " -"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " -"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " -"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " -"each row may have child rows." -msgstr "" -"Embora você possa teoricamente implementar seu próprio Modelo, você " -"normalmente usará as classes de modelo :class:`Gtk.ListStore` ou :class:`Gtk." -"TreeStore`. :class:`Gtk.ListStore` contém linhas simples de dados, e cada " -"linha não tem filhos, enquanto :class:`Gtk.TreeStore` contém linhas de " -"dados, e cada linha pode ter linhas filhas." - -#: ../../source/treeview.txt:36 -msgid "" -"When constructing a model you have to specify the data types for each column " -"the model holds." -msgstr "" -"Ao construir um modelo, você deve especificar os tipos de dados para cada " -"coluna que o modelo contém." - -#: ../../source/treeview.txt:43 -msgid "" -"This creates a list store with three columns, two string columns, and a " -"float column." -msgstr "" -"Isso cria um armazenamento de lista com três colunas, duas colunas de string " -"e uma coluna flutuante." - -#: ../../source/treeview.txt:46 -msgid "" -"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" -"`Gtk.TreeStore.append`, depending upon which sort of model was created." -msgstr "" -"A adição de dados ao modelo é feita usando :meth:`Gtk.ListStore.append` ou :" -"meth:`Gtk.TreeStore.append`, dependendo de qual tipo de modelo foi criado." - -#: ../../source/treeview.txt:54 -msgid "" -"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " -"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " -"by calling :meth:`Gtk.TreeModel.get_iter`." -msgstr "" -"Ambos os métodos retornam uma instância :class:`Gtk.TreeIter`, que aponta " -"para a localização da linha recém-inserida. Você pode recuperar um :class:" -"`Gtk.TreeIter` chamando :meth:`Gtk.TreeModel.get_iter`." - -#: ../../source/treeview.txt:58 -msgid "" -"Once data has been inserted, you can retrieve or modify data using the tree " -"iter and column index." -msgstr "" -"Depois que os dados foram inseridos, você pode recuperar ou modificar dados " -"usando o iterador de árvore e o índice de coluna." - -#: ../../source/treeview.txt:66 -msgid "" -"As with Python's built-in :class:`list` object you can use :func:`len` to " -"get the number of rows and use slices to retrieve or set values." -msgstr "" -"Assim como no objeto built-in :class:`list` do Python, você pode usar :func:" -"`len` para obter o número de linhas e usar fatias para recuperar ou definir " -"valores." - -#: ../../source/treeview.txt:80 -msgid "Iterating over all rows of a tree model is very simple as well." -msgstr "" -"Iterar sobre todas as linhas de um modelo de árvore é muito simples também." - -#: ../../source/treeview.txt:88 -msgid "" -"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " -"only iterate over the rows of the top level, but not the children of the " -"nodes. To iterate over all rows and its children, use the " -"``print_tree_store`` function." -msgstr "" -"Tenha em mente que, se você usar :class:`Gtk.TreeStore`, o código acima irá " -"apenas iterar sobre as linhas do nível superior, mas não os filhos dos nós. " -"Para iterar sobre todas as linhas e seus filhos, use a função " -"``print_tree_store``." - -#: ../../source/treeview.txt:106 -msgid "" -"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" -"like method mentioned above, it is also possible to either use :class:`Gtk." -"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " -"row in a tree model. One can convert a path to an iterator by calling :meth:" -"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " -"i.e. nodes do not have any child nodes, a path is essentially the index of " -"the row you want to access." -msgstr "" -"Além de acessar valores armazenados em um :class:`Gtk.TreeModel` com o " -"método list-like mencionado acima, também é possível usar as instâncias :" -"class:`Gtk.TreeIter` ou :class:`Gtk.TreePath`. Ambos fazem referência a uma " -"linha específica em um modelo de árvore. Pode-se converter um caminho para " -"um iterador chamando :meth:`Gtk.TreeModel.get_iter`. Como :class:`Gtk." -"ListStore` contém apenas um nível, ou seja, nós não têm nenhum nó filho, um " -"caminho é essencialmente o índice da linha que você deseja acessar." - -#: ../../source/treeview.txt:123 -msgid "" -"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " -"string. The string form is a list of numbers separated by a colon. Each " -"number refers to the offset at that level. Thus, the path \"0\" refers to " -"the root node and the path \"2:4\" refers to the fifth child of the third " -"node." -msgstr "" -"No caso de :class:`Gtk.TreeStore`, um caminho é uma lista de índices ou uma " -"string. O formulário de string é uma lista de números separados por dois " -"pontos. Cada número refere-se ao deslocamento nesse nível. Assim, o caminho " -"\"0\" refere-se ao nó raiz e o caminho \"2: 4\" refere-se ao quinto filho do " -"terceiro nó." - -#: ../../source/treeview.txt:136 -msgid "" -"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " -"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " -"and ``treepath[i]`` returns the child's index on the *i*-th level." -msgstr "" -"Instâncias de :class:`Gtk.TreePath` podem ser acessadas como listas, " -"``len(treepath)`` retorna a profundidade do item ``treepath`` está apontando " -"para, e ``treepath[i]`` retorna o índice do filho no nível *i*." - -#: ../../source/treeview.txt:141 -msgid "The View" -msgstr "A View" - -#: ../../source/treeview.txt:142 -msgid "" -"While there are several different models to choose from, there is only one " -"view widget to deal with. It works with either the list or the tree store. " -"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" -"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " -"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" -"`Gtk.TreeView.set_model`." -msgstr "" -"Embora existam vários modelos diferentes para escolher, há apenas um widget " -"de visualização para lidar. Funciona com a lista ou com o armazenamento em " -"árvore. Configurar um :class:`Gtk.TreeView` não é uma tarefa difícil. Ele " -"precisa de um :class:`Gtk.TreeModel` para saber de onde recuperar seus " -"dados, seja passando-o para o construtor :class:`Gtk.TreeView`, ou chamando :" -"meth:`Gtk.TreeView.set_model`." - -#: ../../source/treeview.txt:153 -msgid "" -"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " -"to display the model. It does this with columns and cell renderers." -msgstr "" -"Uma vez que o widget :class:`Gtk.TreeView` possua um modelo, ele precisará " -"saber como exibir o modelo. Ele faz isso com colunas e renderizadores de " -"célula." - -#: ../../source/treeview.txt:156 -msgid "" -"Cell renderers are used to draw the data in the tree model in a way. There " -"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." -"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." -"CellRendererToggle`. In addition, it is relatively easy to write a custom " -"renderer yourself." -msgstr "" -"Os renderizadores de célula são usados para desenhar os dados no modelo de " -"árvore de uma maneira. Existem vários renderizadores de célula que vêm com o " -"GTK+, por exemplo :class:`Gtk.CellRendererText`, :class:`Gtk." -"CellRendererPixbuf` e :class:`Gtk.CellRendererToggle`. Além disso, é " -"relativamente fácil escrever um renderizador personalizado por conta própria." - -#: ../../source/treeview.txt:162 -msgid "" -"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " -"to organize the vertical columns in the tree view. It needs to know the name " -"of the column to label for the user, what type of cell renderer to use, and " -"which piece of data to retrieve from the model for a given row." -msgstr "" -"A :class:`Gtk.TreeViewColumn` é o objeto que :class:`Gtk.TreeView` usa para " -"organizar as colunas verticais na visualização em árvore. Ele precisa saber " -"o nome da coluna para rotular o usuário, que tipo de renderizador de célula " -"deve ser usado e qual parte dos dados deve ser recuperada do modelo para uma " -"determinada linha." - -#: ../../source/treeview.txt:173 -msgid "" -"To render more than one model column in a view column, you need to create a :" -"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." -"pack_start` to add the model columns to it." -msgstr "" -"Para renderizar mais de uma coluna de modelo em uma coluna de visão, você " -"precisa criar uma instância :class:`Gtk.TreeViewColumn` e usar :meth:`Gtk." -"TreeViewColumn.pack_start` para adicionar as colunas de modelo a ela." - -#: ../../source/treeview.txt:193 -msgid "The Selection" -msgstr "A Seleção" - -#: ../../source/treeview.txt:194 -msgid "" -"Most applications will need to not only deal with displaying data, but also " -"receiving input events from users. To do this, simply get a reference to a " -"selection object and connect to the \"changed\" signal." -msgstr "" -"A maioria dos aplicativos precisará não apenas lidar com a exibição de " -"dados, mas também receber eventos de entrada dos usuários. Para fazer isso, " -"basta obter uma referência a um objeto de seleção e conectar-se ao sinal " -"\"changed\"." - -#: ../../source/treeview.txt:203 -msgid "Then to retrieve data for the row selected:" -msgstr "Em seguida, para recuperar dados para a linha selecionada:" - -#: ../../source/treeview.txt:212 -msgid "" -"You can control what selections are allowed by calling :meth:`Gtk." -"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " -"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " -"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." -msgstr "" -"Você pode controlar quais seleções são permitidas chamando :meth:`Gtk." -"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` não funciona " -"se o modo de seleção estiver definido como :attr:`Gtk.SelectionMode." -"MULTIPLE`, use :meth:`Gtk.TreeSelection.get_selected_rows`." - -#: ../../source/treeview.txt:219 -msgid "Sorting" -msgstr "Classificação" - -#: ../../source/treeview.txt:220 -msgid "" -"Sorting is an important feature for tree views and is supported by the " -"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " -"which implement the :class:`Gtk.TreeSortable` interface." -msgstr "" -"A classificação é um recurso importante para as visualizações em árvore e é " -"suportada pelos modelos de árvore padrão (:class:`Gtk.TreeStore` e :class:" -"`Gtk.ListStore`), que implementam a interface :class:`Gtk.TreeSortable`." - -#: ../../source/treeview.txt:223 -msgid "Sorting by clicking on columns" -msgstr "Classificando clicando em colunas" - -#: ../../source/treeview.txt:224 -msgid "" -"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" -"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " -"sorted by clicking on its header." -msgstr "" -"Uma coluna de um :class:`Gtk.TreeView` pode ser facilmente ordenada com uma " -"chamada para :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Depois, a coluna " -"pode ser ordenada clicando no cabeçalho." - -#: ../../source/treeview.txt:227 -msgid "" -"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " -"a model." -msgstr "" -"Primeiro precisamos de um simples :class:`Gtk.TreeView` e um :class:`Gtk." -"ListStore` como modelo." - -#: ../../source/treeview.txt:246 -msgid "" -"The next step is to enable sorting. Note that the *column_id* (``0`` in the " -"example) refers to the column of the model and **not** to the TreeView's " -"column." -msgstr "" -"O próximo passo é ativar a classificação. Note que o *column_id* (``0`` no " -"exemplo) refere-se à coluna do modelo e **não** à coluna do TreeView." - -#: ../../source/treeview.txt:253 -msgid "Setting a custom sort function" -msgstr "Definindo uma função de classificação personalizada" - -#: ../../source/treeview.txt:254 -msgid "" -"It is also possible to set a custom comparison function in order to change " -"the sorting behaviour. As an example we will create a comparison function " -"that sorts case-sensitive. In the example above the sorted list looked like::" -msgstr "" -"Também é possível definir uma função de comparação personalizada para " -"alterar o comportamento de classificação. Como exemplo, criaremos uma função " -"de comparação que classifica maiúsculas e minúsculas. No exemplo acima, a " -"lista classificada parecia com::" - -#: ../../source/treeview.txt:267 -msgid "The case-sensitive sorted list will look like::" -msgstr "" -"A lista classificada com distinção entre maiúsculas e minúsculas será " -"semelhante a::" - -# Alterar o original para corrigir a explicação -#: ../../source/treeview.txt:278 -msgid "" -"First of all a comparison function is needed. This function gets two rows " -"and has to return a negative integer if the first one should come before the " -"second one, zero if they are equal and a positive integer if the second one " -"should come before the second one." -msgstr "" -"Em primeiro lugar, é necessária uma função de comparação. Esta função obtém " -"duas linhas e tem que retornar um inteiro negativo se o primeiro deve vir " -"antes do segundo, zero se eles forem iguais e um inteiro positivo se o " -"segundo vier antes do primeiro." - -#: ../../source/treeview.txt:294 -msgid "" -"Then the sort function has to be set by :meth:`Gtk.TreeSortable." -"set_sort_func`." -msgstr "" -"Então a função sort deve ser definida por :meth:`Gtk.TreeSortable." -"set_sort_func`." - -#: ../../source/treeview.txt:301 -msgid "Filtering" -msgstr "Filtrando" - -#: ../../source/treeview.txt:302 -msgid "" -"Unlike sorting, filtering is not handled by the two models we previously " -"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" -"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " -"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" -"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " -"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " -"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " -"to use multiple filters on the same model (in the same way you'd use \"AND\" " -"clauses in a SQL request). They can also be chained with :class:`Gtk." -"TreeModelSort` instances." -msgstr "" -"Ao contrário da classificação, a filtragem não é tratada pelos dois modelos " -"que vimos anteriormente, mas pela classe :class:`Gtk.TreeModelFilter`. Esta " -"classe, como :class:`Gtk.TreeStore` e :class:`Gtk.ListStore`, é uma :class:" -"`Gtk.TreeModel`. Ele age como uma camada entre o modelo \"real\" (a :class:" -"`Gtk.TreeStore` ou a :class:`Gtk.ListStore`), ocultando alguns elementos " -"para a view. Na prática, ele fornece o :class:`Gtk.TreeView` com um " -"subconjunto do modelo subjacente. Instâncias de :class:`Gtk.TreeModelFilter` " -"podem ser empilhadas umas sobre as outras, para usar múltiplos filtros no " -"mesmo modelo (da mesma forma que você usaria cláusulas \"AND\" em uma " -"requisição SQL). Eles também podem ser encadeados com instâncias :class:`Gtk." -"TreeModelSort`." - -#: ../../source/treeview.txt:304 -msgid "" -"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " -"a model to filter, but the easiest way is to spawn it directly from the " -"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." -msgstr "" -"Você pode criar uma nova instância de :class:`Gtk.TreeModelFilter` e dar a " -"ela um modelo para filtrar, mas a maneira mais fácil é gerá-lo diretamente " -"do modelo filtrado, usando o método :meth:`Gtk.TreeModel.filter_new` método." - -#: ../../source/treeview.txt:310 -msgid "" -"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " -"needs a \"visibility\" function, which, given a row from the underlying " -"model, will return a boolean indicating if this row should be filtered out " -"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" -msgstr "" -"Da mesma forma que funciona a função de classificação, o :class:`Gtk." -"TreeModelFilter` precisa de uma função de \"visibilidade\", que, dada uma " -"linha do modelo subjacente, retornará um booleano indicando se essa linha " -"deve ser filtrada ou não. É definido por :meth:`Gtk.TreeModelFilter." -"set_visible_func`:" - -#: ../../source/treeview.txt:316 -msgid "" -"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" -"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." -"TreeView` stack." -msgstr "" -"Vejamos um exemplo completo que usa a pilha inteira :class:`Gtk.ListStore` " -"- :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." -"TreeView`." diff --git a/translations/locale/pt_BR/LC_MESSAGES/unicode.po b/translations/locale/pt_BR/LC_MESSAGES/unicode.po deleted file mode 100644 index 9eb9250..0000000 --- a/translations/locale/pt_BR/LC_MESSAGES/unicode.po +++ /dev/null @@ -1,284 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) GNU Free Documentation License 1.3 -# This file is distributed under the same license as the Python GTK+ 3 Tutorial package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: Python GTK+ 3 Tutorial 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-30 01:06-0300\n" -"PO-Revision-Date: 2018-04-11 23:08-0300\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" -"Last-Translator: Tomaz Cunha \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt_BR\n" - -#: ../../source/unicode.txt:2 -msgid "How to Deal With Strings" -msgstr "Como Lidar com Sequências de Caracteres" - -#: ../../source/unicode.txt:4 -msgid "" -"This section explains how strings are represented in Python 2.x, Python 3.x " -"and GTK+ and discusses common errors that arise when working with strings." -msgstr "" -"Esta seção explica como as cadeias de caracteres são representadas no Python " -"2.x, no Python 3.x e no GTK+ e discute erros comuns que surgem ao trabalhar " -"com strings." - -#: ../../source/unicode.txt:8 -msgid "Definitions" -msgstr "Definições" - -#: ../../source/unicode.txt:9 -msgid "" -"Conceptional, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " -"**Characters** are abstract representations and their meaning depends on the " -"language and context they are used in. The Unicode standard describes how " -"characters are represented by **code points**. For example the characters " -"above are represented with the code points U+0041, U+0042, U+0043, and U" -"+00C9, respectively. Basically, code points are numbers in the range from 0 " -"to 0x10FFFF." -msgstr "" -"Conceitual, uma string é uma lista de caracteres como 'A', 'B', 'C' ou 'É'. " -"**Caracteres** são representações abstratas e seu significado depende do " -"idioma e do contexto em que são usados. O padrão Unicode descreve como os " -"caracteres são representados por **pontos de código**. Por exemplo, os " -"caracteres acima são representados com os pontos de código U+0041, U+0042, U" -"+0043 e U+00C9, respectivamente. Basicamente, os pontos de código são " -"números no intervalo de 0 a 0x10FFFF." - -#: ../../source/unicode.txt:17 -msgid "" -"As mentioned earlier, the representation of a string as a list of code " -"points is abstract. In order to convert this abstract representation into a " -"sequence of bytes the Unicode string must be **encoded**. The simplest form " -"of encoding is ASCII and is performed as follows:" -msgstr "" -"Como mencionado anteriormente, a representação de uma string como uma lista " -"de pontos de código é abstrata. Para converter essa representação abstrata " -"em uma sequência de bytes, a cadeia Unicode deve ser **codificada**. A forma " -"mais simples de codificação é ASCII e é executada da seguinte maneira:" - -#: ../../source/unicode.txt:22 -msgid "" -"If the code point is < 128, each byte is the same as the value of the code " -"point." -msgstr "" -"Se o ponto de código for < 128, cada byte é o mesmo que o valor do ponto de " -"código." - -#: ../../source/unicode.txt:25 -msgid "" -"If the code point is 128 or greater, the Unicode string can't be represented " -"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " -"this case.)" -msgstr "" -"Se o ponto de código for 128 ou maior, a string Unicode não poderá ser " -"representada nessa codificação. (Python dispara uma exceção :exc:" -"`UnicodeEncodeError` neste caso.)" - -#: ../../source/unicode.txt:29 -msgid "" -"Although ASCII encoding is simple to apply it can only encode for 128 " -"different characters which is hardly enough. One of the most commonly used " -"encodings that addresses this problem is UTF-8 (it can handle any Unicode " -"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " -"means that 8-bit numbers are used in the encoding." -msgstr "" -"Embora a codificação ASCII seja simples de aplicar, ela só pode codificar " -"128 caracteres diferentes, o que não é suficiente. Uma das codificações mais " -"usadas para resolver esse problema é o UTF-8 (ele pode manipular qualquer " -"ponto de código Unicode). UTF significa \"Formato de Transformação Unicode\" " -"e \"8\" significa que números de 8 bits são usados na codificação." - -#: ../../source/unicode.txt:37 -msgid "Python 2" -msgstr "" - -#: ../../source/unicode.txt:40 -msgid "Python 2.x’s Unicode Support" -msgstr "Suporte Unicode do Python 2.x" - -#: ../../source/unicode.txt:41 -msgid "" -"Python 2 comes with two different kinds of objects that can be used to " -"represent strings, :class:`str` and :class:`unicode`. Instances of the " -"latter are used to express Unicode strings, whereas instances of the :class:" -"`str` type are byte representations (the encoded string). Under the hood, " -"Python represents Unicode strings as either 16- or 32-bit integers, " -"depending on how the Python interpreter was compiled. Unicode strings can be " -"converted to 8-bit strings with :meth:`unicode.encode`::" -msgstr "" -"O Python 2 vem com dois tipos diferentes de objetos que podem ser usados " -"para representar strings :class:`str` e :class:`unicode`. Instâncias do " -"último são usadas para expressar cadeias Unicode, enquanto instâncias do " -"tipo :class:`str` são representações de byte (a string codificada). Sob o " -"capô, Python representa strings Unicode como números inteiros de 16 ou 32 " -"bits, dependendo de como o interpretador Python foi compilado. Strings " -"Unicode podem ser convertidas em strings de 8 bits com :meth:`unicode." -"encode`::" - -#: ../../source/unicode.txt:58 -msgid "" -"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " -"string using the given encoding::" -msgstr "" -"As strings de 8 bits do Python têm um método :meth:`str.decode` que " -"interpreta a string usando a codificação fornecida::" - -#: ../../source/unicode.txt:68 -msgid "" -"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" -"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " -"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" -msgstr "" -"Infelizmente, o Python 2.x permite que você misture :class:`unicode` e :" -"class:`str` se a string de 8 bits contivesse apenas bytes de 7 bits (ASCII), " -"mas obteria :exc:`UnicodeDecodeError` se contivesse valores não-ASCII:" - -#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 -msgid "Unicode in GTK+" -msgstr "Unicode no GTK+" - -#: ../../source/unicode.txt:86 -msgid "" -"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " -"method that returns a string you will always obtain an instance of the :" -"class:`str` type. The same applies to methods that expect one or more " -"strings as parameter, they must be UTF-8 encoded. However, for convenience " -"PyGObject will automatically convert any :class:`unicode` instance to :class:" -"`str` if supplied as argument::" -msgstr "" -"O GTK+ usa strings codificadas em UTF-8 para todo o texto. Isto significa " -"que se você chamar um método que retorna uma string, você sempre obterá uma " -"instância do tipo :class:`str`. O mesmo se aplica aos métodos que esperam um " -"ou mais strings como parâmetro, eles devem ser codificados em UTF-8. No " -"entanto, por conveniência, o PyGObject converterá automaticamente qualquer " -"instância :class:`unicode` para :class:`str` se fornecido como argumento::" - -#: ../../source/unicode.txt:104 -msgid "" -"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " -"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " -"will always return a :class:`str` instance. Accordingly, ``txt`` and " -"``unicode_string`` are *not* equal." -msgstr "" -"Observe o aviso no final. Apesar de chamarmos :meth:`Gtk.Label.set_text` com " -"uma instância de :class:`unicode` como argumento, :meth:`Gtk.Label.get_text` " -"sempre retornará uma instância :class:`str`. Assim, ``txt`` e " -"``unicode_string`` *não* são iguais." - -#: ../../source/unicode.txt:109 -msgid "" -"This is especially important if you want to internationalize your program " -"using `gettext `_. You have to " -"make sure that gettext will return UTF-8 encoded 8-bit strings for all " -"languages. In general it is recommended to not use :class:`unicode` objects " -"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " -"since GTK+ does not fully integrate with :class:`unicode` objects. " -"Otherwise, you would have to decode the return values to Unicode strings " -"each time you call a GTK+ method::" -msgstr "" -"Isto é especialmente importante se você quiser internacionalizar seu " -"programa usando `gettext `_. " -"Você precisa ter certeza de que gettext retornará sequências de 8 bits " -"codificadas em UTF-8 para todos os idiomas. Em geral, recomenda-se não usar " -"objetos :class:`unicode` em aplicações GTK+ e usar somente objetos " -"codificados em UTF-8 :class:`str`, já que o GTK+ não se integra totalmente a " -"objetos :class:`unicode`. Caso contrário, você teria que decodificar os " -"valores de retorno para cadeias de caracteres Unicode cada vez que você " -"chamar um método GTK+::" - -#: ../../source/unicode.txt:122 -msgid "Python 3" -msgstr "" - -#: ../../source/unicode.txt:125 -msgid "Python 3.x's Unicode support" -msgstr "Suporte Unicode do Python 3.x" - -#: ../../source/unicode.txt:126 -msgid "" -"Since Python 3.0, all strings are stored as Unicode in an instance of the :" -"class:`str` type. *Encoded* strings on the other hand are represented as " -"binary data in the form of instances of the :class:`bytes` type. " -"Conceptional, :class:`str` refers to *text*, whereas :class:`bytes` refers " -"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " -"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." -msgstr "" -"Desde o Python 3.0, todas as strings são armazenadas como Unicode em uma " -"instância do tipo :class:`str`. *Codificado* strings, por outro lado, são " -"representados como dados binários na forma de instâncias do tipo :class:" -"`bytes`. Conceitualmente, :class:`str` refere-se a *texto*, enquanto :class:" -"`bytes` refere-se a *dados*. Use :meth:`str.encode` para ir de :class:`str` " -"para :class:`bytes` e :meth:`bytes.decode` para ir de :class:`bytes` para :" -"class:`str`." - -#: ../../source/unicode.txt:133 -msgid "" -"In addition, it is no longer possible to mix Unicode strings with encoded " -"strings, because it will result in a :exc:`TypeError`::" -msgstr "" -"Além disso, não é mais possível misturar strings Unicode com strings " -"codificadas, porque resultará em um :exc:`TypeError`::" - -#: ../../source/unicode.txt:149 -msgid "" -"As a consequence, things are much cleaner and consistent with Python 3.x, " -"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " -"a string to a method or a method returns a string. Strings, or *text*, will " -"always be represented as instances of :class:`str` only::" -msgstr "" -"Como consequência, as coisas são muito mais limpas e consistentes com o " -"Python 3.x, porque o PyGObject irá automaticamente codificar/decodificar " -"para/de UTF-8 se você passar uma string para um método ou um método retornar " -"uma string. Strings, ou *text*, sempre serão representados como instâncias " -"de :class:`str` apenas::" - -#: ../../source/unicode.txt:165 -msgid "References" -msgstr "Referências" - -#: ../../source/unicode.txt:166 -msgid "" -"`What's new in Python 3.0 `_ describes the new concepts " -"that clearly distinguish between text and data." -msgstr "" -"`O que há de novo no Python 3.0 `_ descreve os novos conceitos " -"que distinguir claramente entre texto e dados." - -#: ../../source/unicode.txt:169 -msgid "" -"The `Unicode HOWTO `_ discusses " -"Python 2.x’s support for Unicode, and explains various problems that people " -"commonly encounter when trying to work with Unicode." -msgstr "" -"O `Unicode HOWTO `_ aborda o " -"suporte do Python 2.x para Unicode e explica vários problemas que as pessoas " -"comumente encontram ao tentar trabalhar com o Unicode." - -#: ../../source/unicode.txt:173 -msgid "" -"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." -msgstr "" -"O `Unicode HOWTO for Python 3.x `_ discute o suporte a Unicode no Python 3.x." - -#: ../../source/unicode.txt:176 -msgid "" -"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " -"encoding." -msgstr "" -"`A tabela de codificação UTF-8 e os caracteres Unicode `_ contém uma lista de pontos de código Unicode e sua " -"respectiva codificação UTF-8." From f985f9bcb82b2c87654632d0490fd3b258004c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 23 Apr 2020 23:00:34 +0200 Subject: [PATCH 125/209] Update Sphinx to match what's used on RTD --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index fe830eb..852a3c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Sphinx==1.7.6 +Sphinx==2.4.4 sphinx-autobuild==0.7.1 sphinx-rtd-theme>=0.3.1 sphinx-intl From b1d1261627eff146a47ee450ce3e3fe4dc509b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sat, 25 Apr 2020 14:01:16 +0200 Subject: [PATCH 126/209] Check that |version| and |today| are present in each PO file Fixes #165 --- translations/Makefile | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/translations/Makefile b/translations/Makefile index 6e900b0..0dd5994 100644 --- a/translations/Makefile +++ b/translations/Makefile @@ -18,11 +18,27 @@ gettext: $(SPHINXPROJ).pot: gettext xgettext -o $(SPHINXPROJ).pot $(wildcard $(BUILDDIR)/gettext/*.pot) -split-po: - for lang in "$(PO_LINGUAS)"; do \ +check-po: + for lang in $(PO_LINGUAS); do \ + grep -q 'msgstr "|version|"' "$(MERGEDDIR)/$$lang.po"; \ + if [ $$? -ne 0 ]; then \ + echo "ERROR: Translation in $(MERGEDDIR)/$$lang.po has no |version|." >&2; \ + exit 1; \ + fi; \ + grep -q 'msgstr "|today|"' "$(MERGEDDIR)/$$lang.po"; \ + if [ $$? -ne 0 ]; then \ + echo "ERROR: Translation in $(MERGEDDIR)/$$lang.po has no |today|." >&2; \ + exit 1; \ + fi; \ + done + +split-po: check-po + for lang in $(PO_LINGUAS); do \ echo "$$lang:"; \ mkdir -p "$(LOCALEDIR)/$$lang/LC_MESSAGES"; \ for src in $(SOURCE_FILES); do \ msggrep -N "../$(SOURCEDIR)/$$src.txt" "$(MERGEDDIR)/$$lang.po" > "$(LOCALEDIR)/$$lang/LC_MESSAGES/$$src.po"; \ done; \ done + +.PHONY: check-po gettext split-po From 7b08518a4db8ae7275fd2b378e6827f29ba9630c Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Fri, 24 Apr 2020 08:14:50 -0300 Subject: [PATCH 127/209] Update translations README --- translations/README.md | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/translations/README.md b/translations/README.md index 6d544fa..c4d1192 100644 --- a/translations/README.md +++ b/translations/README.md @@ -14,44 +14,42 @@ Refer to GitHub docs for more information on [proposing changes via pull request A good way to assure the quality of the translations is to build the docs with the up-to-date message catalog (.po file). If you are willing to down that way, follow the steps below. -**Note:** All instructions below assume you are inside `translations/` directory. +**Note:** All instructions below assume you are running from the project's root directory. -1. Install dependencies (hint: add `--user` flag for a per-user installation, without requiring admin privileges): +1. Install `tox` (hint: add `--user` flag for a per-user installation, without requiring admin privileges): ``` -pip install -r ../requirements.txt +pip install tox ``` -2. Copy your PO file to `po/` (replace `` accordingly): +2. Copy your .po file to `translations/po/` (replace `` accordingly): ``` -cp path/to/your/translated/file.po po/.po +cp path/to/your/translated/file.po translations/po/.po ``` -3. If you are adding new translation for a language, add your language code to `LINGUAS` in alphabetical order; otherwise, skip this step. +3. If you are adding new translation for a language, add your language code to the `LINGUAS` file in alphabetical order; otherwise, skip this step. -4. Split your PO file into individual documents for Sphinx to process: +4. Build HTML docs in your language by running: ``` -make split-po +tox ``` -5. Build HTML docs in your language (replace `` accordingly): -``` -make -C .. -e SPHINXOPTS="-D language=''" html -``` - -4. Check `../build/html/` for the translated docs in HTML format. +5. Check `build/html/` for the translated docs in HTML format. ## Building translation template -This step is **not** necessary for translating PyGObject-Tutorial, as [Damned Lies](https://l10n.gnome.org/) automatically updates the translation template (.pot file) and the message catalog (po) files. Therefore, it should be all up-to-date already. - -1. Install dependencies (same instruction as step 1 from previous section) +This is **not** necessary for translating PyGObject-Tutorial, as [Damned Lies](https://l10n.gnome.org/) automatically updates the translation template (.pot file) and the message catalogs (.po files). Therefore, it should be all up-to-date already. -2. Run: +1. To build the .pot file, run: ``` -make PythonGTK3Tutorial.pot +make -C translations PythonGTK3Tutorial.pot ``` -3. Check the translation template as `PythonGTK3Tutorial.pot` +2. If the execution is done successfully, then `translations/PythonGTK3Tutorial.pot` should be available. + +3. If step 1 failed, run the following command before retrying step 1: +``` +pip install -r requirements +``` ## Why splitting PO files From ff711deea27fbeda503e986adee0967de2ac89de Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Fri, 24 Apr 2020 14:49:24 -0300 Subject: [PATCH 128/209] Further improvements to README --- translations/README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/translations/README.md b/translations/README.md index c4d1192..b988bee 100644 --- a/translations/README.md +++ b/translations/README.md @@ -14,7 +14,7 @@ Refer to GitHub docs for more information on [proposing changes via pull request A good way to assure the quality of the translations is to build the docs with the up-to-date message catalog (.po file). If you are willing to down that way, follow the steps below. -**Note:** All instructions below assume you are running from the project's root directory. +**Note:** All instructions below assume the current working directory is the project's root directory. 1. Install `tox` (hint: add `--user` flag for a per-user installation, without requiring admin privileges): ``` @@ -26,7 +26,7 @@ pip install tox cp path/to/your/translated/file.po translations/po/.po ``` -3. If you are adding new translation for a language, add your language code to the `LINGUAS` file in alphabetical order; otherwise, skip this step. +3. If you are adding new translation for a language, add your language code to the `translations/LINGUAS` file in alphabetical order (see [supported language codes](https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language)); otherwise, skip this step. 4. Build HTML docs in your language by running: ``` @@ -46,11 +46,6 @@ make -C translations PythonGTK3Tutorial.pot 2. If the execution is done successfully, then `translations/PythonGTK3Tutorial.pot` should be available. -3. If step 1 failed, run the following command before retrying step 1: -``` -pip install -r requirements -``` - ## Why splitting PO files [Sphinx](https://www.sphinx-doc.org) expects one message catalog (.po) file per document, but [Damned Lies](https://l10n.gnome.org/) expects a single file. So the conciliate both needs, the following method was implemented: From 3cd49b0ac884dd1c821703715df334d6e6327913 Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Fri, 24 Apr 2020 15:00:30 -0300 Subject: [PATCH 129/209] Mention .rst in translation README --- translations/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/translations/README.md b/translations/README.md index b988bee..11faac3 100644 --- a/translations/README.md +++ b/translations/README.md @@ -4,6 +4,9 @@ Translations to PyGObject-Tutorial happen in [Damned Lies](https://l10n.gnome.org/). See [GNOME Translation Project wiki](https://wiki.gnome.org/TranslationProject) for more info. +This tutorial is written in reStructuredText markup language, so you might want to check [reStructuredText syntax and concepts in Sphinx documentation](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html). + + Please make sure to test and review the translation before considering it as finished. Once you're done translating, file a [pull request](https://github.com/sebp/PyGObject-Tutorial/pulls) containing your translation in `translations/po/.po`, where `` is your language's code (e.g. pt_BR). @@ -53,3 +56,4 @@ make -C translations PythonGTK3Tutorial.pot 1. The `xgettext` tool is set to extract strings from source docs into a single translation template (.pot) file to be used by Damned Lies. 2. When including an updated translation for a given language, the message catalog in `po/` is split into separated files stored in `locale//LC_MESSAGES/`. Those separated files will be used by Sphinx to build translated docs. + From 449872b71d589c1225fdfbb905b5bbc7d7edd2d5 Mon Sep 17 00:00:00 2001 From: Gian Mario Tagliaretti Date: Wed, 8 Jul 2020 23:56:07 +0200 Subject: [PATCH 130/209] Update messagedialog_example.py Remove deprecation warnings from the message dialog example Fixes #174 --- examples/messagedialog_example.py | 56 +++++++++++++------------------ 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index 3a65d91..e2881a8 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -11,30 +11,28 @@ def __init__(self): box = Gtk.Box(spacing=6) self.add(box) - button1 = Gtk.Button("Information") + button1 = Gtk.Button(label="Information") button1.connect("clicked", self.on_info_clicked) box.add(button1) - button2 = Gtk.Button("Error") + button2 = Gtk.Button(label="Error") button2.connect("clicked", self.on_error_clicked) box.add(button2) - button3 = Gtk.Button("Warning") + button3 = Gtk.Button(label="Warning") button3.connect("clicked", self.on_warn_clicked) box.add(button3) - button4 = Gtk.Button("Question") + button4 = Gtk.Button(label="Question") button4.connect("clicked", self.on_question_clicked) box.add(button4) def on_info_clicked(self, widget): - dialog = Gtk.MessageDialog( - self, - 0, - Gtk.MessageType.INFO, - Gtk.ButtonsType.OK, - "This is an INFO MessageDialog", - ) + dialog = Gtk.MessageDialog(parent=self, + flags=0, + message_type=Gtk.MessageType.INFO, + buttons=Gtk.ButtonsType.OK, + text="This is an INFO MessageDialog") dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -44,13 +42,11 @@ def on_info_clicked(self, widget): dialog.destroy() def on_error_clicked(self, widget): - dialog = Gtk.MessageDialog( - self, - 0, - Gtk.MessageType.ERROR, - Gtk.ButtonsType.CANCEL, - "This is an ERROR MessageDialog", - ) + dialog = Gtk.MessageDialog(parent=self, + flags=0, + message_type=Gtk.MessageType.ERROR, + buttons=Gtk.ButtonsType.CANCEL, + text="This is an ERROR MessageDialog") dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -60,13 +56,11 @@ def on_error_clicked(self, widget): dialog.destroy() def on_warn_clicked(self, widget): - dialog = Gtk.MessageDialog( - self, - 0, - Gtk.MessageType.WARNING, - Gtk.ButtonsType.OK_CANCEL, - "This is an WARNING MessageDialog", - ) + dialog = Gtk.MessageDialog(parent=self, + flags=0, + message_type=Gtk.MessageType.WARNING, + buttons=Gtk.ButtonsType.OK_CANCEL, + text="This is an WARNING MessageDialog") dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -79,13 +73,11 @@ def on_warn_clicked(self, widget): dialog.destroy() def on_question_clicked(self, widget): - dialog = Gtk.MessageDialog( - self, - 0, - Gtk.MessageType.QUESTION, - Gtk.ButtonsType.YES_NO, - "This is an QUESTION MessageDialog", - ) + dialog = Gtk.MessageDialog(parent = self, + flags = 0, + message_type = Gtk.MessageType.QUESTION, + buttons = Gtk.ButtonsType.YES_NO, + text = "This is an QUESTION MessageDialog") dialog.format_secondary_text( "And this is the secondary text that explains things." ) From 40199f533eb0d1704998f344a9e3024978eefc02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 19 Jul 2020 15:35:52 +0200 Subject: [PATCH 131/209] Fix initializer deprecation warnings Fixes #150 --- examples/cellrendererspin_example.py | 9 ++++- examples/checkbutton_example.py | 4 +-- examples/clipboard_example.py | 10 +++--- examples/dialog_example.py | 18 +++------- examples/entry_example.py | 8 ++--- examples/filechooserdialog_example.py | 30 ++++++++--------- examples/label_example.py | 10 +++--- examples/layout_flowbox_example.py | 4 +-- examples/layout_headerbar_example.py | 6 ++-- examples/layout_listbox_example.py | 10 +++--- examples/layout_stack_example.py | 2 +- examples/layout_table_example.py | 2 +- examples/linkbutton_example.py | 5 ++- examples/menu_example.py | 19 ++++++----- examples/messagedialog_example.py | 48 ++++++++++++++++----------- examples/notebook_plain_example.py | 6 ++-- examples/popover_example.py | 4 +-- examples/progressbar_example.py | 6 ++-- examples/spinbutton_example.py | 6 ++-- examples/spinner_example.py | 4 +-- examples/spinner_ext_example.py | 4 +-- examples/textview_example.py | 23 ++++++------- examples/togglebutton_example.py | 4 +-- examples/treeview_filter_example.py | 2 +- 24 files changed, 129 insertions(+), 115 deletions(-) diff --git a/examples/cellrendererspin_example.py b/examples/cellrendererspin_example.py index d6b3bdc..1e81b56 100644 --- a/examples/cellrendererspin_example.py +++ b/examples/cellrendererspin_example.py @@ -25,7 +25,14 @@ def __init__(self): renderer_spin.connect("edited", self.on_amount_edited) renderer_spin.set_property("editable", True) - adjustment = Gtk.Adjustment(0, 0, 100, 1, 10, 0) + adjustment = Gtk.Adjustment( + value=0, + lower=0, + upper=100, + step_increment=1, + page_increment=10, + page_size=0, + ) renderer_spin.set_property("adjustment", adjustment) column_spin = Gtk.TreeViewColumn("Amount", renderer_spin, text=1) diff --git a/examples/checkbutton_example.py b/examples/checkbutton_example.py index 202c570..dbddd65 100644 --- a/examples/checkbutton_example.py +++ b/examples/checkbutton_example.py @@ -12,11 +12,11 @@ def __init__(self): hbox = Gtk.Box(spacing=6) self.add(hbox) - button = Gtk.CheckButton("Button 1") + button = Gtk.CheckButton.new_with_label("Button 1") button.connect("toggled", self.on_button_toggled, "1") hbox.pack_start(button, False, False, 0) - button = Gtk.CheckButton("B_utton 2", use_underline=True) + button = Gtk.CheckButton.new_with_mnemonic("B_utton 2") button.set_active(True) button.connect("toggled", self.on_button_toggled, "2") hbox.pack_start(button, False, False, 0) diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index 6bddb2c..a65a66a 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -8,16 +8,16 @@ class ClipboardWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Clipboard Example") - table = Gtk.Table(3, 2) + table = Gtk.Table(n_rows=3, n_columns=2) self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.entry = Gtk.Entry() self.image = Gtk.Image.new_from_icon_name("process-stop", Gtk.IconSize.MENU) - button_copy_text = Gtk.Button("Copy Text") - button_paste_text = Gtk.Button("Paste Text") - button_copy_image = Gtk.Button("Copy Image") - button_paste_image = Gtk.Button("Paste Image") + button_copy_text = Gtk.Button(label="Copy Text") + button_paste_text = Gtk.Button(label="Paste Text") + button_copy_image = Gtk.Button(label="Copy Image") + button_paste_image = Gtk.Button(label="Paste Image") table.attach(self.entry, 0, 1, 0, 1) table.attach(self.image, 0, 1, 1, 2) diff --git a/examples/dialog_example.py b/examples/dialog_example.py index 980b60f..c440b2a 100644 --- a/examples/dialog_example.py +++ b/examples/dialog_example.py @@ -6,22 +6,14 @@ class DialogExample(Gtk.Dialog): def __init__(self, parent): - Gtk.Dialog.__init__( - self, - "My Dialog", - parent, - 0, - ( - Gtk.STOCK_CANCEL, - Gtk.ResponseType.CANCEL, - Gtk.STOCK_OK, - Gtk.ResponseType.OK, - ), + Gtk.Dialog.__init__(self, title="My Dialog", transient_for=parent, flags=0) + self.add_buttons( + Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK ) self.set_default_size(150, 100) - label = Gtk.Label("This is a dialog to display additional information") + label = Gtk.Label(label="This is a dialog to display additional information") box = self.get_content_area() box.add(label) @@ -34,7 +26,7 @@ def __init__(self): self.set_border_width(6) - button = Gtk.Button("Open dialog") + button = Gtk.Button(label="Open dialog") button.connect("clicked", self.on_button_clicked) self.add(button) diff --git a/examples/entry_example.py b/examples/entry_example.py index 8145d20..48e1323 100644 --- a/examples/entry_example.py +++ b/examples/entry_example.py @@ -21,22 +21,22 @@ def __init__(self): hbox = Gtk.Box(spacing=6) vbox.pack_start(hbox, True, True, 0) - self.check_editable = Gtk.CheckButton("Editable") + self.check_editable = Gtk.CheckButton(label="Editable") self.check_editable.connect("toggled", self.on_editable_toggled) self.check_editable.set_active(True) hbox.pack_start(self.check_editable, True, True, 0) - self.check_visible = Gtk.CheckButton("Visible") + self.check_visible = Gtk.CheckButton(label="Visible") self.check_visible.connect("toggled", self.on_visible_toggled) self.check_visible.set_active(True) hbox.pack_start(self.check_visible, True, True, 0) - self.pulse = Gtk.CheckButton("Pulse") + self.pulse = Gtk.CheckButton(label="Pulse") self.pulse.connect("toggled", self.on_pulse_toggled) self.pulse.set_active(False) hbox.pack_start(self.pulse, True, True, 0) - self.icon = Gtk.CheckButton("Icon") + self.icon = Gtk.CheckButton(label="Icon") self.icon.connect("toggled", self.on_icon_toggled) self.icon.set_active(False) hbox.pack_start(self.icon, True, True, 0) diff --git a/examples/filechooserdialog_example.py b/examples/filechooserdialog_example.py index f710f5f..94a1ca5 100644 --- a/examples/filechooserdialog_example.py +++ b/examples/filechooserdialog_example.py @@ -11,25 +11,23 @@ def __init__(self): box = Gtk.Box(spacing=6) self.add(box) - button1 = Gtk.Button("Choose File") + button1 = Gtk.Button(label="Choose File") button1.connect("clicked", self.on_file_clicked) box.add(button1) - button2 = Gtk.Button("Choose Folder") + button2 = Gtk.Button(label="Choose Folder") button2.connect("clicked", self.on_folder_clicked) box.add(button2) def on_file_clicked(self, widget): dialog = Gtk.FileChooserDialog( - "Please choose a file", - self, - Gtk.FileChooserAction.OPEN, - ( - Gtk.STOCK_CANCEL, - Gtk.ResponseType.CANCEL, - Gtk.STOCK_OPEN, - Gtk.ResponseType.OK, - ), + title="Please choose a file", parent=self, action=Gtk.FileChooserAction.OPEN + ) + dialog.add_buttons( + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK, ) self.add_filters(dialog) @@ -61,10 +59,12 @@ def add_filters(self, dialog): def on_folder_clicked(self, widget): dialog = Gtk.FileChooserDialog( - "Please choose a folder", - self, - Gtk.FileChooserAction.SELECT_FOLDER, - (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, "Select", Gtk.ResponseType.OK), + title="Please choose a folder", + parent=self, + action=Gtk.FileChooserAction.SELECT_FOLDER, + ) + dialog.add_buttons( + Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, "Select", Gtk.ResponseType.OK ) dialog.set_default_size(800, 400) diff --git a/examples/label_example.py b/examples/label_example.py index 701d58a..fa42602 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -18,7 +18,7 @@ def __init__(self): hbox.pack_start(vbox_left, True, True, 0) hbox.pack_start(vbox_right, True, True, 0) - label = Gtk.Label("This is a normal label") + label = Gtk.Label(label="This is a normal label") vbox_left.pack_start(label, True, True, 0) label = Gtk.Label() @@ -26,12 +26,14 @@ def __init__(self): label.set_justify(Gtk.Justification.LEFT) vbox_left.pack_start(label, True, True, 0) - label = Gtk.Label("This is a right-justified label.\nWith multiple lines.") + label = Gtk.Label( + label="This is a right-justified label.\nWith multiple lines." + ) label.set_justify(Gtk.Justification.RIGHT) vbox_left.pack_start(label, True, True, 0) label = Gtk.Label( - "This is an example of a line-wrapped label. It " + label="This is an example of a line-wrapped label. It " "should not be taking up the entire " "width allocated to it, but automatically " "wraps the words to fit.\n" @@ -43,7 +45,7 @@ def __init__(self): vbox_right.pack_start(label, True, True, 0) label = Gtk.Label( - "This is an example of a line-wrapped, filled label. " + label="This is an example of a line-wrapped, filled label. " "It should be taking " "up the entire width allocated to it. " "Here is a sentence to prove " diff --git a/examples/layout_flowbox_example.py b/examples/layout_flowbox_example.py index 1a819e9..80d132d 100644 --- a/examples/layout_flowbox_example.py +++ b/examples/layout_flowbox_example.py @@ -44,9 +44,9 @@ def on_draw(self, widget, cr, data): cr.fill() def color_swatch_new(self, str_color): - color = Gdk.color_parse(str_color) + rgba = Gdk.RGBA() + rgba.parse(str_color) - rgba = Gdk.RGBA.from_color(color) button = Gtk.Button() area = Gtk.DrawingArea() diff --git a/examples/layout_headerbar_example.py b/examples/layout_headerbar_example.py index 0174189..8b5b995 100644 --- a/examples/layout_headerbar_example.py +++ b/examples/layout_headerbar_example.py @@ -25,11 +25,13 @@ def __init__(self): Gtk.StyleContext.add_class(box.get_style_context(), "linked") button = Gtk.Button() - button.add(Gtk.Arrow(Gtk.ArrowType.LEFT, Gtk.ShadowType.NONE)) + button.add( + Gtk.Arrow(arrow_type=Gtk.ArrowType.LEFT, shadow_type=Gtk.ShadowType.NONE) + ) box.add(button) button = Gtk.Button() - button.add(Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.NONE)) + button = Gtk.Button.new_from_icon_name("pan-end-symbolic", Gtk.IconSize.MENU) box.add(button) hb.pack_start(box) diff --git a/examples/layout_listbox_example.py b/examples/layout_listbox_example.py index f7ba1c2..0454ec6 100644 --- a/examples/layout_listbox_example.py +++ b/examples/layout_listbox_example.py @@ -8,7 +8,7 @@ class ListBoxRowWithData(Gtk.ListBoxRow): def __init__(self, data): super(Gtk.ListBoxRow, self).__init__() self.data = data - self.add(Gtk.Label(data)) + self.add(Gtk.Label(label=data)) class ListBoxWindow(Gtk.Window): @@ -29,8 +29,8 @@ def __init__(self): vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) hbox.pack_start(vbox, True, True, 0) - label1 = Gtk.Label("Automatic Date & Time", xalign=0) - label2 = Gtk.Label("Requires internet access", xalign=0) + label1 = Gtk.Label(label="Automatic Date & Time", xalign=0) + label2 = Gtk.Label(label="Requires internet access", xalign=0) vbox.pack_start(label1, True, True, 0) vbox.pack_start(label2, True, True, 0) @@ -43,7 +43,7 @@ def __init__(self): row = Gtk.ListBoxRow() hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) row.add(hbox) - label = Gtk.Label("Enable Automatic Update", xalign=0) + label = Gtk.Label(label="Enable Automatic Update", xalign=0) check = Gtk.CheckButton() hbox.pack_start(label, True, True, 0) hbox.pack_start(check, False, True, 0) @@ -53,7 +53,7 @@ def __init__(self): row = Gtk.ListBoxRow() hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) row.add(hbox) - label = Gtk.Label("Date Format", xalign=0) + label = Gtk.Label(label="Date Format", xalign=0) combo = Gtk.ComboBoxText() combo.insert(0, "0", "24-hour") combo.insert(1, "1", "AM/PM") diff --git a/examples/layout_stack_example.py b/examples/layout_stack_example.py index 9967f89..95e3d95 100644 --- a/examples/layout_stack_example.py +++ b/examples/layout_stack_example.py @@ -16,7 +16,7 @@ def __init__(self): stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) stack.set_transition_duration(1000) - checkbutton = Gtk.CheckButton("Click me!") + checkbutton = Gtk.CheckButton(label="Click me!") stack.add_titled(checkbutton, "check", "Check Button") label = Gtk.Label() diff --git a/examples/layout_table_example.py b/examples/layout_table_example.py index 40144b9..311d3da 100644 --- a/examples/layout_table_example.py +++ b/examples/layout_table_example.py @@ -8,7 +8,7 @@ class TableWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Table Example") - table = Gtk.Table(3, 3, True) + table = Gtk.Table(n_rows=3, n_columns=3, homogeneous=True) self.add(table) button1 = Gtk.Button(label="Button 1") diff --git a/examples/linkbutton_example.py b/examples/linkbutton_example.py index 6414891..e915a67 100644 --- a/examples/linkbutton_example.py +++ b/examples/linkbutton_example.py @@ -9,7 +9,10 @@ def __init__(self): Gtk.Window.__init__(self, title="LinkButton Demo") self.set_border_width(10) - button = Gtk.LinkButton("https://www.gtk.org", "Visit GTK+ Homepage") + button = Gtk.LinkButton.new_with_label( + uri="https://www.gtk.org", + label="Visit GTK+ Homepage" + ) self.add(button) diff --git a/examples/menu_example.py b/examples/menu_example.py index d46fc47..55fe68c 100644 --- a/examples/menu_example.py +++ b/examples/menu_example.py @@ -46,7 +46,7 @@ def __init__(self): self.set_default_size(200, 200) - action_group = Gtk.ActionGroup("my_actions") + action_group = Gtk.ActionGroup(name="my_actions") self.add_file_menu_actions(action_group) self.add_edit_menu_actions(action_group) @@ -67,7 +67,7 @@ def __init__(self): eventbox.connect("button-press-event", self.on_button_press_event) box.pack_start(eventbox, True, True, 0) - label = Gtk.Label("Right-click to see the popup menu.") + label = Gtk.Label(label="Right-click to see the popup menu.") eventbox.add(label) self.popup = uimanager.get_widget("/PopupMenu") @@ -75,14 +75,17 @@ def __init__(self): self.add(box) def add_file_menu_actions(self, action_group): - action_filemenu = Gtk.Action("FileMenu", "File", None, None) + action_filemenu = Gtk.Action(name="FileMenu", label="File") action_group.add_action(action_filemenu) - action_filenewmenu = Gtk.Action("FileNew", None, None, Gtk.STOCK_NEW) + action_filenewmenu = Gtk.Action(name="FileNew", stock_id=Gtk.STOCK_NEW) action_group.add_action(action_filenewmenu) action_new = Gtk.Action( - "FileNewStandard", "_New", "Create a new file", Gtk.STOCK_NEW + name="FileNewStandard", + label="_New", + tooltip="Create a new file", + stock_id=Gtk.STOCK_NEW, ) action_new.connect("activate", self.on_menu_file_new_generic) action_group.add_action_with_accel(action_new, None) @@ -108,7 +111,7 @@ def add_file_menu_actions(self, action_group): ] ) - action_filequit = Gtk.Action("FileQuit", None, None, Gtk.STOCK_QUIT) + action_filequit = Gtk.Action(name="FileQuit", stock_id=Gtk.STOCK_QUIT) action_filequit.connect("activate", self.on_menu_file_quit) action_group.add_action(action_filequit) @@ -130,7 +133,7 @@ def add_edit_menu_actions(self, action_group): ) def add_choices_menu_actions(self, action_group): - action_group.add_action(Gtk.Action("ChoicesMenu", "Choices", None, None)) + action_group.add_action(Gtk.Action(name="ChoicesMenu", label="Choices")) action_group.add_radio_actions( [ @@ -141,7 +144,7 @@ def add_choices_menu_actions(self, action_group): self.on_menu_choices_changed, ) - three = Gtk.ToggleAction("ChoiceThree", "Three", None, None) + three = Gtk.ToggleAction(name="ChoiceThree", label="Three") three.connect("toggled", self.on_menu_choices_toggled) action_group.add_action(three) diff --git a/examples/messagedialog_example.py b/examples/messagedialog_example.py index e2881a8..23d7bf7 100644 --- a/examples/messagedialog_example.py +++ b/examples/messagedialog_example.py @@ -28,11 +28,13 @@ def __init__(self): box.add(button4) def on_info_clicked(self, widget): - dialog = Gtk.MessageDialog(parent=self, - flags=0, - message_type=Gtk.MessageType.INFO, - buttons=Gtk.ButtonsType.OK, - text="This is an INFO MessageDialog") + dialog = Gtk.MessageDialog( + transient_for=self, + flags=0, + message_type=Gtk.MessageType.INFO, + buttons=Gtk.ButtonsType.OK, + text="This is an INFO MessageDialog", + ) dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -42,11 +44,13 @@ def on_info_clicked(self, widget): dialog.destroy() def on_error_clicked(self, widget): - dialog = Gtk.MessageDialog(parent=self, - flags=0, - message_type=Gtk.MessageType.ERROR, - buttons=Gtk.ButtonsType.CANCEL, - text="This is an ERROR MessageDialog") + dialog = Gtk.MessageDialog( + transient_for=self, + flags=0, + message_type=Gtk.MessageType.ERROR, + buttons=Gtk.ButtonsType.CANCEL, + text="This is an ERROR MessageDialog", + ) dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -56,11 +60,13 @@ def on_error_clicked(self, widget): dialog.destroy() def on_warn_clicked(self, widget): - dialog = Gtk.MessageDialog(parent=self, - flags=0, - message_type=Gtk.MessageType.WARNING, - buttons=Gtk.ButtonsType.OK_CANCEL, - text="This is an WARNING MessageDialog") + dialog = Gtk.MessageDialog( + transient_for=self, + flags=0, + message_type=Gtk.MessageType.WARNING, + buttons=Gtk.ButtonsType.OK_CANCEL, + text="This is an WARNING MessageDialog", + ) dialog.format_secondary_text( "And this is the secondary text that explains things." ) @@ -73,11 +79,13 @@ def on_warn_clicked(self, widget): dialog.destroy() def on_question_clicked(self, widget): - dialog = Gtk.MessageDialog(parent = self, - flags = 0, - message_type = Gtk.MessageType.QUESTION, - buttons = Gtk.ButtonsType.YES_NO, - text = "This is an QUESTION MessageDialog") + dialog = Gtk.MessageDialog( + transient_for=self, + flags=0, + message_type=Gtk.MessageType.QUESTION, + buttons=Gtk.ButtonsType.YES_NO, + text="This is an QUESTION MessageDialog", + ) dialog.format_secondary_text( "And this is the secondary text that explains things." ) diff --git a/examples/notebook_plain_example.py b/examples/notebook_plain_example.py index 03e8a48..16dca1b 100644 --- a/examples/notebook_plain_example.py +++ b/examples/notebook_plain_example.py @@ -14,12 +14,12 @@ def __init__(self): self.page1 = Gtk.Box() self.page1.set_border_width(10) - self.page1.add(Gtk.Label("Default Page!")) - self.notebook.append_page(self.page1, Gtk.Label("Plain Title")) + self.page1.add(Gtk.Label(label="Default Page!")) + self.notebook.append_page(self.page1, Gtk.Label(label="Plain Title")) self.page2 = Gtk.Box() self.page2.set_border_width(10) - self.page2.add(Gtk.Label("A page with an image for a Title.")) + self.page2.add(Gtk.Label(label="A page with an image for a Title.")) self.notebook.append_page( self.page2, Gtk.Image.new_from_icon_name("help-about", Gtk.IconSize.MENU) ) diff --git a/examples/popover_example.py b/examples/popover_example.py index 39159a3..91d3e3f 100644 --- a/examples/popover_example.py +++ b/examples/popover_example.py @@ -18,8 +18,8 @@ def __init__(self): self.popover = Gtk.Popover() vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - vbox.pack_start(Gtk.ModelButton("Item 1"), False, True, 10) - vbox.pack_start(Gtk.Label("Item 2"), False, True, 10) + vbox.pack_start(Gtk.ModelButton(label="Item 1"), False, True, 10) + vbox.pack_start(Gtk.Label(label="Item 2"), False, True, 10) self.popover.add(vbox) self.popover.set_position(Gtk.PositionType.BOTTOM) diff --git a/examples/progressbar_example.py b/examples/progressbar_example.py index 566e8f1..52e2114 100644 --- a/examples/progressbar_example.py +++ b/examples/progressbar_example.py @@ -15,15 +15,15 @@ def __init__(self): self.progressbar = Gtk.ProgressBar() vbox.pack_start(self.progressbar, True, True, 0) - button = Gtk.CheckButton("Show text") + button = Gtk.CheckButton(label="Show text") button.connect("toggled", self.on_show_text_toggled) vbox.pack_start(button, True, True, 0) - button = Gtk.CheckButton("Activity mode") + button = Gtk.CheckButton(label="Activity mode") button.connect("toggled", self.on_activity_mode_toggled) vbox.pack_start(button, True, True, 0) - button = Gtk.CheckButton("Right to Left") + button = Gtk.CheckButton(label="Right to Left") button.connect("toggled", self.on_right_to_left_toggled) vbox.pack_start(button, True, True, 0) diff --git a/examples/spinbutton_example.py b/examples/spinbutton_example.py index ac5e8bc..ed6e0cb 100644 --- a/examples/spinbutton_example.py +++ b/examples/spinbutton_example.py @@ -12,16 +12,16 @@ def __init__(self): hbox = Gtk.Box(spacing=6) self.add(hbox) - adjustment = Gtk.Adjustment(0, 0, 100, 1, 10, 0) + adjustment = Gtk.Adjustment(upper=100, step_increment=1, page_increment=10) self.spinbutton = Gtk.SpinButton() self.spinbutton.set_adjustment(adjustment) hbox.pack_start(self.spinbutton, False, False, 0) - check_numeric = Gtk.CheckButton("Numeric") + check_numeric = Gtk.CheckButton(label="Numeric") check_numeric.connect("toggled", self.on_numeric_toggled) hbox.pack_start(check_numeric, False, False, 0) - check_ifvalid = Gtk.CheckButton("If Valid") + check_ifvalid = Gtk.CheckButton(label="If Valid") check_ifvalid.connect("toggled", self.on_ifvalid_toggled) hbox.pack_start(check_ifvalid, False, False, 0) diff --git a/examples/spinner_example.py b/examples/spinner_example.py index 331e385..36d674d 100644 --- a/examples/spinner_example.py +++ b/examples/spinner_example.py @@ -11,13 +11,13 @@ def __init__(self): self.set_border_width(3) self.connect("destroy", Gtk.main_quit) - self.button = Gtk.ToggleButton("Start Spinning") + self.button = Gtk.ToggleButton(label="Start Spinning") self.button.connect("toggled", self.on_button_toggled) self.button.set_active(False) self.spinner = Gtk.Spinner() - self.table = Gtk.Table(3, 2, True) + self.table = Gtk.Table(n_rows=3, n_columns=2, homogeneous=True) self.table.attach(self.button, 0, 2, 0, 1) self.table.attach(self.spinner, 0, 2, 2, 3) diff --git a/examples/spinner_ext_example.py b/examples/spinner_ext_example.py index 23b6102..65e2ac1 100644 --- a/examples/spinner_ext_example.py +++ b/examples/spinner_ext_example.py @@ -22,11 +22,11 @@ def __init__(self, *args, **kwargs): self.entry.set_text("10") mainBox.pack_start(self.entry, True, True, 0) - self.buttonStart = Gtk.Button("Start timer") + self.buttonStart = Gtk.Button(label="Start timer") self.buttonStart.connect("clicked", self.on_buttonStart_clicked) mainBox.pack_start(self.buttonStart, True, True, 0) - self.buttonStop = Gtk.Button("Stop timer") + self.buttonStop = Gtk.Button(label="Stop timer") self.buttonStop.set_sensitive(False) self.buttonStop.connect("clicked", self.on_buttonStop_clicked) mainBox.pack_start(self.buttonStop, True, True, 0) diff --git a/examples/textview_example.py b/examples/textview_example.py index e3df2b2..c7847e0 100644 --- a/examples/textview_example.py +++ b/examples/textview_example.py @@ -7,21 +7,18 @@ class SearchDialog(Gtk.Dialog): def __init__(self, parent): Gtk.Dialog.__init__( - self, - "Search", - parent, - Gtk.DialogFlags.MODAL, - buttons=( - Gtk.STOCK_FIND, - Gtk.ResponseType.OK, - Gtk.STOCK_CANCEL, - Gtk.ResponseType.CANCEL, - ), + self, title="Search", transient_for=parent, modal=True, + ) + self.add_buttons( + Gtk.STOCK_FIND, + Gtk.ResponseType.OK, + Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, ) box = self.get_content_area() - label = Gtk.Label("Insert text you want to search for:") + label = Gtk.Label(label="Insert text you want to search for:") box.add(label) self.entry = Gtk.Entry() @@ -131,12 +128,12 @@ def create_textview(self): self.tag_found = self.textbuffer.create_tag("found", background="yellow") def create_buttons(self): - check_editable = Gtk.CheckButton("Editable") + check_editable = Gtk.CheckButton(label="Editable") check_editable.set_active(True) check_editable.connect("toggled", self.on_editable_toggled) self.grid.attach(check_editable, 0, 2, 1, 1) - check_cursor = Gtk.CheckButton("Cursor Visible") + check_cursor = Gtk.CheckButton(label="Cursor Visible") check_cursor.set_active(True) check_editable.connect("toggled", self.on_cursor_toggled) self.grid.attach_next_to( diff --git a/examples/togglebutton_example.py b/examples/togglebutton_example.py index 34d1952..f0c26d0 100644 --- a/examples/togglebutton_example.py +++ b/examples/togglebutton_example.py @@ -12,11 +12,11 @@ def __init__(self): hbox = Gtk.Box(spacing=6) self.add(hbox) - button = Gtk.ToggleButton("Button 1") + button = Gtk.ToggleButton(label="Button 1") button.connect("toggled", self.on_button_toggled, "1") hbox.pack_start(button, True, True, 0) - button = Gtk.ToggleButton("B_utton 2", use_underline=True) + button = Gtk.ToggleButton(label="B_utton 2", use_underline=True) button.set_active(True) button.connect("toggled", self.on_button_toggled, "2") hbox.pack_start(button, True, True, 0) diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index c9193b6..5e8d580 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -53,7 +53,7 @@ def __init__(self): # creating buttons to filter by programming language, and setting up their events self.buttons = list() for prog_language in ["Java", "C", "C++", "Python", "None"]: - button = Gtk.Button(prog_language) + button = Gtk.Button(label=prog_language) self.buttons.append(button) button.connect("clicked", self.on_selection_button_clicked) From 98a19639a1bbd0f9f9ab86d0d126282075a8ee3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 19 Jul 2020 15:56:04 +0200 Subject: [PATCH 132/209] Set labels' desired maximum width Fixes #110 --- examples/label_example.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/label_example.py b/examples/label_example.py index fa42602..1751aee 100644 --- a/examples/label_example.py +++ b/examples/label_example.py @@ -42,6 +42,7 @@ def __init__(self): "many extra spaces. " ) label.set_line_wrap(True) + label.set_max_width_chars(32) vbox_right.pack_start(label, True, True, 0) label = Gtk.Label( @@ -58,6 +59,7 @@ def __init__(self): ) label.set_line_wrap(True) label.set_justify(Gtk.Justification.FILL) + label.set_max_width_chars(32) vbox_right.pack_start(label, True, True, 0) label = Gtk.Label() @@ -68,6 +70,7 @@ def __init__(self): 'title="Click to find out more">internets.' ) label.set_line_wrap(True) + label.set_max_width_chars(48) vbox_left.pack_start(label, True, True, 0) label = Gtk.Label.new_with_mnemonic( From 1c221d8b7aa493494391aeef5965c337f3a17257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 19 Jul 2020 16:41:08 +0200 Subject: [PATCH 133/209] Do not use deprecated Gtk.Table --- examples/clipboard_example.py | 16 ++++++++-------- examples/spinner_example.py | 13 ++++++++----- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/examples/clipboard_example.py b/examples/clipboard_example.py index a65a66a..9788d69 100644 --- a/examples/clipboard_example.py +++ b/examples/clipboard_example.py @@ -8,7 +8,7 @@ class ClipboardWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Clipboard Example") - table = Gtk.Table(n_rows=3, n_columns=2) + grid = Gtk.Grid() self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.entry = Gtk.Entry() @@ -19,19 +19,19 @@ def __init__(self): button_copy_image = Gtk.Button(label="Copy Image") button_paste_image = Gtk.Button(label="Paste Image") - table.attach(self.entry, 0, 1, 0, 1) - table.attach(self.image, 0, 1, 1, 2) - table.attach(button_copy_text, 1, 2, 0, 1) - table.attach(button_paste_text, 2, 3, 0, 1) - table.attach(button_copy_image, 1, 2, 1, 2) - table.attach(button_paste_image, 2, 3, 1, 2) + grid.add(self.entry) + grid.attach(self.image, 0, 1, 1, 1) + grid.attach(button_copy_text, 1, 0, 1, 1) + grid.attach(button_paste_text, 2, 0, 1, 1) + grid.attach(button_copy_image, 1, 1, 1, 1) + grid.attach(button_paste_image, 2, 1, 1, 1) button_copy_text.connect("clicked", self.copy_text) button_paste_text.connect("clicked", self.paste_text) button_copy_image.connect("clicked", self.copy_image) button_paste_image.connect("clicked", self.paste_image) - self.add(table) + self.add(grid) def copy_text(self, widget): self.clipboard.set_text(self.entry.get_text(), -1) diff --git a/examples/spinner_example.py b/examples/spinner_example.py index 36d674d..ab30681 100644 --- a/examples/spinner_example.py +++ b/examples/spinner_example.py @@ -17,11 +17,14 @@ def __init__(self): self.spinner = Gtk.Spinner() - self.table = Gtk.Table(n_rows=3, n_columns=2, homogeneous=True) - self.table.attach(self.button, 0, 2, 0, 1) - self.table.attach(self.spinner, 0, 2, 2, 3) - - self.add(self.table) + self.grid = Gtk.Grid() + self.grid.add(self.button) + self.grid.attach_next_to( + self.spinner, self.button, Gtk.PositionType.BOTTOM, 1, 2 + ) + self.grid.set_row_homogeneous(True) + + self.add(self.grid) self.show_all() def on_button_toggled(self, button): From d4f83d8e5dfb56e453f423f6efbfda165287b36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ma=C5=84kowski?= Date: Thu, 17 Sep 2020 17:42:57 +0200 Subject: [PATCH 134/209] popover_example: set size, remove not used method Current example is open as a window with button-only, without any space for a popup, so the popup is not visible when opened. A method `on_open_clicked` was not a part of this example. --- examples/popover_example.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/popover_example.py b/examples/popover_example.py index 91d3e3f..c49588b 100644 --- a/examples/popover_example.py +++ b/examples/popover_example.py @@ -8,6 +8,7 @@ class PopoverWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Popover Demo") self.set_border_width(10) + self.set_default_size(300, 200) outerbox = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL) self.add(outerbox) @@ -28,9 +29,6 @@ def on_click_me_clicked(self, button): self.popover.show_all() self.popover.popup() - def on_open_clicked(self, button): - print('"Open" button was clicked') - win = PopoverWindow() win.connect("destroy", Gtk.main_quit) From a4abebc762b7299b3db80ecb92317d9a28d73db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ma=C5=84kowski?= Date: Sat, 19 Sep 2020 19:15:08 +0200 Subject: [PATCH 135/209] Clarify signal's arguments declaration Expected type is any sequence. Example presents one-element tuple and this is only reason why it has comma at the end. Remove suggest that list need to end with comma Comma is used only to tell python it's a one-element tuple, not just brackets. Fixes #177 --- source/objects.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/objects.txt b/source/objects.txt index 730caca..2f323a8 100644 --- a/source/objects.txt +++ b/source/objects.txt @@ -82,8 +82,8 @@ The second part, ``None``, indicates the return type of the signal, usually ``None``. ``(int,)`` indicates the signal arguments, here, the signal will only -take one argument, whose type is int. This argument type list must end with a -comma. +take one argument, whose type is int. Types of arguments required by +signal are declared as a sequence, here it is a one-element tuple. Signals can be emitted using :meth:`GObject.GObject.emit`: @@ -336,8 +336,8 @@ API :const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject.SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. - ``None`` is the return type of the signal. ``(int,)`` is the list of the - parameters of the signal, it must end with a comma. + ``None`` is the return type of the signal. ``(int,)`` is the tuple of the + parameters of the signal. .. attribute:: __gproperties__ From 5c2b6777d5318c5c9805fce7049e4782adea48fc Mon Sep 17 00:00:00 2001 From: Dan Yeaw Date: Sun, 11 Oct 2020 13:39:41 -0400 Subject: [PATCH 136/209] Update example to print value when changed --- examples/spinbutton_example.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/spinbutton_example.py b/examples/spinbutton_example.py index ed6e0cb..8f7cfd1 100644 --- a/examples/spinbutton_example.py +++ b/examples/spinbutton_example.py @@ -15,6 +15,7 @@ def __init__(self): adjustment = Gtk.Adjustment(upper=100, step_increment=1, page_increment=10) self.spinbutton = Gtk.SpinButton() self.spinbutton.set_adjustment(adjustment) + self.spinbutton.connect("value-changed", self.on_value_changed) hbox.pack_start(self.spinbutton, False, False, 0) check_numeric = Gtk.CheckButton(label="Numeric") @@ -25,6 +26,9 @@ def __init__(self): check_ifvalid.connect("toggled", self.on_ifvalid_toggled) hbox.pack_start(check_ifvalid, False, False, 0) + def on_value_changed(self, scroll): + print(self.spinbutton.get_value_as_int()) + def on_numeric_toggled(self, button): self.spinbutton.set_numeric(button.get_active()) From ef54a6d3093d20956d97af6bb2b19b3310d12465 Mon Sep 17 00:00:00 2001 From: Cyril Danilevski Date: Fri, 2 Oct 2020 11:46:00 +0200 Subject: [PATCH 137/209] Describe ComboBox.set_active and use it in example Closes #178 --- examples/combobox_example.py | 1 + source/combobox.txt | 3 +++ 2 files changed, 4 insertions(+) diff --git a/examples/combobox_example.py b/examples/combobox_example.py index b4eace8..1438527 100644 --- a/examples/combobox_example.py +++ b/examples/combobox_example.py @@ -62,6 +62,7 @@ def __init__(self): for currency in currencies: currency_combo.append_text(currency) + currency_combo.set_active(0) vbox.pack_start(currency_combo, False, False, 0) self.add(vbox) diff --git a/source/combobox.txt b/source/combobox.txt index c170e26..8f8c07c 100644 --- a/source/combobox.txt +++ b/source/combobox.txt @@ -13,6 +13,9 @@ If the combo box contains a large number of items, it may be better to display them in a grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox.set_wrap_width`. +A default value can be set by calling :meth:`Gtk.ComboBox.set_active` with the index +of the desired value. + The :class:`Gtk.ComboBox` widget usually restricts the user to the available choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user to enter arbitrary text if none of the From 3730e7669f780d20324a357be1e808ec58ad4419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Thu, 29 Oct 2020 21:46:25 +0100 Subject: [PATCH 138/209] Update screenshot of ComboBox example --- images/combobox_example.png | Bin 4856 -> 6781 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/combobox_example.png b/images/combobox_example.png index e6b6b6ff21292b011a7510854584dcd331e895d5..b2fd42fa6344b0fe4b3a66a2c6ac82a95022c0b6 100644 GIT binary patch literal 6781 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 kB_XnN0qz>G*U5!j$a5 Date: Tue, 3 Nov 2020 14:29:20 +0100 Subject: [PATCH 139/209] Add Expander example Closes #181 --- examples/expander_example.py | 47 +++++++++++++++++++++++++++++++++++ images/expander_example.png | Bin 0 -> 16426 bytes source/expander.txt | 24 ++++++++++++++++++ source/index.txt | 1 + 4 files changed, 72 insertions(+) create mode 100644 examples/expander_example.py create mode 100644 images/expander_example.png create mode 100644 source/expander.txt diff --git a/examples/expander_example.py b/examples/expander_example.py new file mode 100644 index 0000000..ddca039 --- /dev/null +++ b/examples/expander_example.py @@ -0,0 +1,47 @@ +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk + + +class ExpanderExample(Gtk.Window): + def __init__(self): + Gtk.Window.__init__(self, title="Expander Demo") + + self.set_size_request(350, 100) + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) + self.add(vbox) + + text_expander = Gtk.Expander( + label="This expander displays additional information" + ) + text_expander.set_expanded(True) + vbox.add(text_expander) + + msg = """ +This message is quite long, complicated even: + - It has a list with a sublist: + - of 3 elements; + - taking several lines; + - with indentation. +""" + details = Gtk.Label(label=msg) + text_expander.add(details) + + widget_expander = Gtk.Expander(label="Expand for more controls") + vbox.add(widget_expander) + + expander_hbox = Gtk.HBox() + widget_expander.add(expander_hbox) + + expander_hbox.add(Gtk.Label(label="Text message")) + expander_hbox.add(Gtk.Button(label="Click me")) + + self.show_all() + + +win = ExpanderExample() +win.connect("destroy", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/images/expander_example.png b/images/expander_example.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9104c72e9731843659228af8df8e9e489dcb05 GIT binary patch literal 16426 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 DF(r## literal 0 HcmV?d00001 diff --git a/source/expander.txt b/source/expander.txt new file mode 100644 index 0000000..7a0060e --- /dev/null +++ b/source/expander.txt @@ -0,0 +1,24 @@ +Expander +======== + +Expanders allow to dynamically hide or show information within a window or +dialog. An expander can take a single widget that will be displayed when +expanded. + +Expanders remain expanded until clicked again. When the state of an expander +is changed, the "activate" signal is emitted. + +An expander can be programmatically expanded or collapsed by passing `True` or +`False` to :meth:`Gtk.Expander.set_expanded`. Note that doing so causes the +"activate" signal to be emitted. + +More than one widget, such as a :class:`Gtk.Label` and :class:`Gtk.Button`, +can be added by appending them to a :class:`Gtk.Box`. + +Example +^^^^^^^ + +.. image:: ../images/expander_example.png + +.. literalinclude:: ../examples/expander_example.py + :linenos: diff --git a/source/index.txt b/source/index.txt index 9194303..23d1460 100644 --- a/source/index.txt +++ b/source/index.txt @@ -43,6 +43,7 @@ Contents: label entry button_widgets + expander progressbar spinner treeview From 8ec38d7a9053f522437527246843e85bf3cf7bdf Mon Sep 17 00:00:00 2001 From: Christian Kirbach Date: Thu, 10 Dec 2020 22:50:27 +0100 Subject: [PATCH 140/209] Update LINGUAS --- translations/LINGUAS | 1 + 1 file changed, 1 insertion(+) diff --git a/translations/LINGUAS b/translations/LINGUAS index d193efc..a0573e5 100644 --- a/translations/LINGUAS +++ b/translations/LINGUAS @@ -1,2 +1,3 @@ # please keep this list sorted alphabetically +de_DE pt_BR From edd1fd862dd1714ef6a9e625fa3bafcb04f8518e Mon Sep 17 00:00:00 2001 From: Christian Kirbach Date: Thu, 10 Dec 2020 22:52:44 +0100 Subject: [PATCH 141/209] Add proof-read German translation Proof-read on https://l10n.gnome.org/vertimus/4174/1261/18/ --- translations/po/de_DE.po | 3484 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 3484 insertions(+) create mode 100644 translations/po/de_DE.po diff --git a/translations/po/de_DE.po b/translations/po/de_DE.po new file mode 100644 index 0000000..ef66a5f --- /dev/null +++ b/translations/po/de_DE.po @@ -0,0 +1,3484 @@ +# German translation for pygobject-tutorial. +# Copyright (C) 2020 pygobject-tutorial's COPYRIGHT HOLDER +# This file is distributed under the same license as the pygobject-tutorial package. +# Christian Kirbach , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: pygobject-tutorial master\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-18 20:31+0200\n" +"PO-Revision-Date: 2020-11-12 22:46+0100\n" +"Last-Translator: Christian Kirbach \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.1\n" + +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "IconView" + +#: ../../source/iconview.txt:3 +msgid "" +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." +msgstr "" + +#: ../../source/iconview.txt:5 +msgid "" +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +msgstr "" + +#: ../../source/iconview.txt:7 +msgid "" +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." +msgstr "" + +#: ../../source/iconview.txt:10 ../../source/layout.txt:40 +#: ../../source/layout.txt:97 ../../source/layout.txt:123 +#: ../../source/layout.txt:156 ../../source/layout.txt:180 +#: ../../source/layout.txt:212 ../../source/layout.txt:232 +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 +#: ../../source/layout-table.txt:26 ../../source/combobox.txt:29 +#: ../../source/builder.txt:118 ../../source/entry.txt:32 +#: ../../source/clipboard.txt:17 ../../source/cellrenderers.txt:39 +#: ../../source/cellrenderers.txt:59 ../../source/cellrenderers.txt:74 +#: ../../source/cellrenderers.txt:98 ../../source/cellrenderers.txt:116 +#: ../../source/cellrenderers.txt:138 ../../source/menus.txt:80 +#: ../../source/textview.txt:115 ../../source/label.txt:48 +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 ../../source/popover.txt:19 +#: ../../source/popover.txt:34 ../../source/drag_and_drop.txt:74 +#: ../../source/application.txt:61 ../../source/progressbar.txt:32 +msgid "Example" +msgstr "Beispiel" + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "Boxen" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "" + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "Raster" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "" + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." +msgstr "" + +#: ../../source/layout.txt:79 +msgid "" +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +msgstr "" + +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "" + +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" + +#: ../../source/layout.txt:86 +msgid "" +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." +msgstr "" + +#: ../../source/layout.txt:88 +msgid "" +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." +msgstr "" + +#: ../../source/layout.txt:91 +msgid "" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." +msgstr "" + +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "ListBox" + +#: ../../source/layout.txt:107 +msgid "" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" + +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." +msgstr "" + +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." +msgstr "" + +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "" + +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." +msgstr "" + +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." +msgstr "" + +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" +msgstr "" + +#: ../../source/layout.txt:145 +msgid "" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." +msgstr "" + +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." +msgstr "" + +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." +msgstr "" + +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "Kopfleiste" + +#: ../../source/layout.txt:166 +msgid "" +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." +msgstr "" + +#: ../../source/layout.txt:171 +msgid "" +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." +msgstr "" + +#: ../../source/layout.txt:174 +msgid "" +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." +msgstr "" + +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "FlowBox" + +#: ../../source/layout.txt:190 +msgid "This example requires at least GTK+ 3.12." +msgstr "" + +#: ../../source/layout.txt:192 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." +msgstr "" + +#: ../../source/layout.txt:195 +msgid "" +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." +msgstr "" + +#: ../../source/layout.txt:200 +msgid "" +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." +msgstr "" + +#: ../../source/layout.txt:204 +msgid "" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." +msgstr "" + +#: ../../source/layout.txt:206 +msgid "" +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" + +#: ../../source/layout.txt:220 +msgid "Notebook" +msgstr "Notizbuch" + +#: ../../source/layout.txt:222 +msgid "" +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." +msgstr "" + +#: ../../source/layout.txt:224 +msgid "" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." +msgstr "" + +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" +msgstr "" + +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" +msgstr "" + +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" +msgstr "" + +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" +msgstr "" + +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.AppChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.Assistant`" +msgstr "" + +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.Button`" +msgstr "" + +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.CheckButton`" +msgstr "" + +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.ColorButton`" +msgstr "" + +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.ColorChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.ComboBox`" +msgstr "" + +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.ComboBoxText`" +msgstr "" + +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Entry`" +msgstr "" + +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.FileChooserButton`" +msgstr "" + +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.FileChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.FlowBox`" +msgstr "" + +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.FontButton`" +msgstr "" + +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.FontChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.Frame`" +msgstr "" + +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.GLArea`" +msgstr "" + +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.Grid`" +msgstr "" + +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.HeaderBar`" +msgstr "" + +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.IconView`" +msgstr "" + +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.Image`" +msgstr "" + +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.InfoBar`" +msgstr "" + +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Label`" +msgstr "" + +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.LevelBar`" +msgstr "" + +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.LinkButton`" +msgstr "" + +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.ListBox`" +msgstr "" + +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.LockButton`" +msgstr "" + +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.MenuBar`" +msgstr "" + +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.MenuButton`" +msgstr "" + +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.MessageDialog`" +msgstr "" + +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Notebook`" +msgstr "" + +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.Paned`" +msgstr "" + +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.PlacesSidebar`" +msgstr "" + +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.ProgressBar`" +msgstr "" + +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.RadioButton`" +msgstr "" + +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.RecentChooserDialog`" +msgstr "" + +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.Scale`" +msgstr "" + +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.Scrollbar`" +msgstr "" + +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.ScrolledWindow`" +msgstr "" + +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.SearchBar`" +msgstr "" + +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.SearchEntry`" +msgstr "" + +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.Separator`" +msgstr "" + +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.SpinButton`" +msgstr "" + +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.Spinner`" +msgstr "" + +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.Stack`" +msgstr "" + +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.StackSwitcher`" +msgstr "" + +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.Statusbar`" +msgstr "" + +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.Switch`" +msgstr "" + +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.TextView`" +msgstr "" + +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.ToggleButton`" +msgstr "" + +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.ToolPalette`" +msgstr "" + +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Toolbar`" +msgstr "" + +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.TreeView`" +msgstr "" + +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.VolumeButton`" +msgstr "" + +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Window`" +msgstr "" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "Knopf" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "Auswahlknopf" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" + +#: ../../source/button_widgets.txt:70 +msgid "" +"When first run, the first radio button in the group will be active. This can " +"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " +"first argument." +msgstr "" + +#: ../../source/button_widgets.txt:74 +msgid "" +"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " +"achieved by calling :meth:`Gtk.RadioButton.join_group`." +msgstr "" + +#: ../../source/button_widgets.txt:86 +msgid "LinkButton" +msgstr "" + +#: ../../source/button_widgets.txt:87 +msgid "" +"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " +"to the one used by web browsers, which triggers an action when clicked. It " +"is useful to show quick links to resources." +msgstr "" + +#: ../../source/button_widgets.txt:91 +msgid "" +"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" +"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." +"get_uri`." +msgstr "" + +#: ../../source/button_widgets.txt:103 +msgid "SpinButton" +msgstr "Einstellfeld" + +#: ../../source/button_widgets.txt:104 +msgid "" +"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " +"of some attribute. Rather than having to directly type a number into a :" +"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " +"of two arrows to increment or decrement the displayed value. A value can " +"still be typed in, with the bonus that it can be checked to ensure it is in " +"a given range. The main properties of a :class:`Gtk.SpinButton` are set " +"through :class:`Gtk.Adjustment`." +msgstr "" + +#: ../../source/button_widgets.txt:112 +msgid "" +"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." +"SpinButton.set_value`. The value entered can either be an integer or float, " +"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" +"meth:`Gtk.SpinButton.get_value_as_int`, respectively." +msgstr "" + +#: ../../source/button_widgets.txt:117 +msgid "" +"When you allow the displaying of float values in the spin button, you may " +"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." +"SpinButton.set_digits`." +msgstr "" + +#: ../../source/button_widgets.txt:121 +msgid "" +"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " +"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " +"with ``True`` as argument." +msgstr "" + +#: ../../source/button_widgets.txt:125 +msgid "" +"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " +"two options here; by default the spin button updates the value even if the " +"data entered is invalid. Alternatively, we can set the policy to only update " +"when the value entered is valid by calling :meth:`Gtk.SpinButton." +"set_update_policy`." +msgstr "" + +#: ../../source/button_widgets.txt:139 +msgid "Switch" +msgstr "Schalter" + +#: ../../source/button_widgets.txt:140 +msgid "" +"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " +"can control which state should be active by clicking the empty area, or by " +"dragging the handle." +msgstr "" + +#: ../../source/button_widgets.txt:144 +msgid "" +"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " +"action signal and emitting it causes the switch to animate. Applications " +"should never connect to this signal, but use the \"notify::active\" signal, " +"see the example here below." +msgstr "" + +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Release" +msgstr "Veröffentlichung" + +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Date" +msgstr "Datum" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "Copyright" + +#: ../../source/index.txt:11 +msgid "" +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" +msgstr "" + +#: ../../source/index.txt:13 +msgid "" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +msgstr "" + +#: ../../source/index.txt:15 +msgid "" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." +msgstr "" + +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." +msgstr "" + +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "Inhalt:" + +#: ../../source/index.txt:61 +msgid "Deprecated" +msgstr "Veraltet" + +#: ../../source/index.txt:69 +msgid "Indices and tables" +msgstr "Indizes und Tabellen" + +#: ../../source/index.txt:71 +msgid ":ref:`search`" +msgstr "" + +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "Spinner" + +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." +msgstr "" + +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." +msgstr "" + +#: ../../source/spinner.txt:20 +msgid "Extended example" +msgstr "Erweitertes Beispiel" + +#: ../../source/spinner.txt:22 +msgid "" +"An extended example that uses a timeout function to start and stop the " +"spinning animation. The :func:`on_timeout` function is called at regular " +"intervals until it returns ``False``, at which point the timeout is " +"automatically destroyed and the function will not be called again." +msgstr "" + +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "Tabelle" + +#: ../../source/layout-table.txt:4 +msgid "" +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." +msgstr "" + +#: ../../source/layout-table.txt:8 +msgid "" +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +msgstr "" + +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +msgstr "" + +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." +msgstr "" + +#: ../../source/layout-table.txt:18 +msgid "" +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." +msgstr "" + +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "" + +#: ../../source/combobox.txt:2 +msgid "ComboBox" +msgstr "ComboBox" + +#: ../../source/combobox.txt:3 +msgid "" +"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " +"menu. They are preferable to having many radio buttons on screen as they " +"take up less room. If appropriate, it can show extra information about each " +"item, such as text, a picture, a checkbox, or a progress bar." +msgstr "" + +#: ../../source/combobox.txt:8 +msgid "" +":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " +"the model-view pattern; the list of valid choices is specified in the form " +"of a tree model, and the display of the choices can be adapted to the data " +"in the model by using :ref:`cell renderers `. If the combo " +"box contains a large number of items, it may be better to display them in a " +"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." +"set_wrap_width`." +msgstr "" + +#: ../../source/combobox.txt:16 +msgid "" +"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " +"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " +"to enter arbitrary text if none of the available choices are suitable. To do " +"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" +"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." +"ComboBox` instance." +msgstr "" + +#: ../../source/combobox.txt:23 +msgid "" +"For a simple list of textual choices, the model-view API of :class:`Gtk." +"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " +"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." +"ComboBoxText` can contain an entry." +msgstr "" + +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "" + +#: ../../source/unicode.txt:4 +msgid "" +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." +msgstr "" + +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "Definitionen" + +#: ../../source/unicode.txt:9 +msgid "" +"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." +msgstr "" + +#: ../../source/unicode.txt:17 +msgid "" +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes, the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" +msgstr "" + +#: ../../source/unicode.txt:22 +msgid "" +"If the code point is < 128, each byte is the same as the value of the code " +"point." +msgstr "" + +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" +msgstr "" + +#: ../../source/unicode.txt:29 +msgid "" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." +msgstr "" + +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "Python 2" + +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "" + +#: ../../source/unicode.txt:41 +msgid "" +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" +msgstr "" + +#: ../../source/unicode.txt:58 +msgid "" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" +msgstr "" + +#: ../../source/unicode.txt:68 +msgid "" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +msgstr "" + +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "Unicode in GTK+" + +#: ../../source/unicode.txt:86 +msgid "" +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" +msgstr "" + +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." +msgstr "" + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" + +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "Python 3" + +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "" + +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +msgstr "" + +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" +msgstr "" + +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" +msgstr "" + +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "Referenzen" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." +msgstr "" + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." +msgstr "" + +#: ../../source/unicode.txt:173 +msgid "" +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +msgstr "" + +#: ../../source/unicode.txt:176 +msgid "" +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." +msgstr "" + +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "" + +#: ../../source/builder.txt:3 +msgid "" +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by an XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" +msgstr "" + +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "" + +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "" + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." +msgstr "" + +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." +msgstr "" + +#: ../../source/builder.txt:12 +msgid "" +"The description of the user interface is independent from the programming " +"language being used." +msgstr "" + +#: ../../source/builder.txt:14 +msgid "" +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." +msgstr "" + +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "" + +#: ../../source/builder.txt:18 +msgid "" +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." +msgstr "" + +#: ../../source/builder.txt:41 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" + +#: ../../source/builder.txt:48 +msgid "" +"The second line loads all objects defined in *example.glade* into the " +"Builder object." +msgstr "" + +#: ../../source/builder.txt:50 +msgid "" +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." +msgstr "" + +#: ../../source/builder.txt:57 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." +msgstr "" + +#: ../../source/builder.txt:61 +msgid "Accessing widgets" +msgstr "" + +#: ../../source/builder.txt:62 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" +msgstr "" + +#: ../../source/builder.txt:71 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." +msgstr "" + +#: ../../source/builder.txt:74 +msgid "It is also possible to get a list of all objects with" +msgstr "" + +#: ../../source/builder.txt:81 +msgid "Connecting Signals" +msgstr "" + +#: ../../source/builder.txt:82 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." +msgstr "" + +#: ../../source/builder.txt:90 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" +msgstr "" + +#: ../../source/builder.txt:99 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +msgstr "" + +#: ../../source/builder.txt:110 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" +msgstr "" + +#: ../../source/builder.txt:119 +msgid "The final code of the example" +msgstr "" + +#: ../../source/entry.txt:2 +msgid "Entry" +msgstr "Eintrag" + +#: ../../source/entry.txt:4 +msgid "" +"Entry widgets allow the user to enter text. You can change the contents with " +"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " +"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " +"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." +msgstr "" + +#: ../../source/entry.txt:9 +msgid "" +"Occasionally you might want to make an Entry widget read-only. This can be " +"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." +msgstr "" + +#: ../../source/entry.txt:12 +msgid "" +"Entry widgets can also be used to retrieve passwords from the user. It is " +"common practice to hide the characters typed into the entry to prevent " +"revealing the password to a third party. Calling :meth:`Gtk.Entry." +"set_visibility` with ``False`` will cause the text to be hidden." +msgstr "" + +#: ../../source/entry.txt:17 +msgid "" +":class:`Gtk.Entry` has the ability to display progress or activity " +"information behind the text. This is similar to :class:`Gtk.ProgressBar` " +"widget and is commonly found in web browsers to indicate how much of a page " +"download has been completed. To make an entry display such information, use :" +"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." +msgstr "" + +#: ../../source/entry.txt:24 +msgid "" +"Additionally, an Entry can show icons at either side of the entry. These " +"icons can be activatable by clicking, can be set up as drag source and can " +"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " +"or one of the various other functions that set an icon from an icon name, a " +"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` or the corresponding function for markup." +msgstr "" + +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "Grundlagen" + +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "" + +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "" + +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." +msgstr "" + +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." +msgstr "" + +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "" + +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." +msgstr "" + +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." +msgstr "" + +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" +msgstr "" + +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted when an object is destroyed, so when a user requests " +"that a toplevel window is closed, the default handler for this signal " +"destroys the window, but does not terminate the application. Connecting the " +"\"destroy\" signal of the top-level window to the function :func:`Gtk." +"main_quit` will result in the desired behaviour." +msgstr "" + +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." +msgstr "" + +#: ../../source/basics.txt:77 ../../source/objects.txt:96 +msgid "Properties" +msgstr "Eigenschaften" + +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" +msgstr "" + +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "" + +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." +msgstr "" + +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" +msgstr "" + +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." +msgstr "" + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "Zwischenablage" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." +msgstr "" + +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "" + +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" +msgstr "" + +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr "" + +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr "" + +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr "" + +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr "" + +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr "" + +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr "" + +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr "" + +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr "" + +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "" + +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." +msgstr "" + +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" +msgstr "" + +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." +msgstr "" + +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "" + +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." +msgstr "" + +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." +msgstr "" + +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "" + +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." +msgstr "" + +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "" + +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." +msgstr "" + +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "" + +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." +msgstr "" + +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." +msgstr "" + +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" + +#: ../../source/menus.txt:2 ../../source/application.txt:36 +msgid "Menus" +msgstr "Menüs" + +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." +msgstr "" + +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." +msgstr "" + +#: ../../source/menus.txt:17 ../../source/application.txt:12 +msgid "Actions" +msgstr "Befehl" + +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." +msgstr "" + +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "" + +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" +msgstr "" + +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +msgstr "" + +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" +msgstr "" + +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" +msgstr "" + +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." +msgstr "" + +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" +msgstr "" + +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr "" + +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr "" + +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr "" + +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "" + +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "" + +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." +msgstr "" + +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." +msgstr "" + +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." +msgstr "" + +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." +msgstr "" + +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "" + +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." +msgstr "" + +#: ../../source/textview.txt:13 ../../source/treeview.txt:141 +msgid "The View" +msgstr "" + +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." +msgstr "" + +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." +msgstr "" + +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." +msgstr "" + +#: ../../source/textview.txt:36 ../../source/treeview.txt:21 +msgid "The Model" +msgstr "Das Modell" + +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." +msgstr "" + +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." +msgstr "" + +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." +msgstr "" + +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +msgstr "" + +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." +msgstr "" + +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "Tags" + +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." +msgstr "" + +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." +msgstr "" + +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" +msgstr "" + +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "" + +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "" + +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "" + +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "" + +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "" + +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "" + +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "" + +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "" + +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "" + +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "" + +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." +msgstr "" + +#: ../../source/label.txt:2 +msgid "Label" +msgstr "Label" + +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" +msgstr "" + +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "" + +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" +msgstr "" + +#: ../../source/treeview.txt:9 +msgid "Automatic updates when data is added, removed or edited" +msgstr "" + +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "" + +#: ../../source/treeview.txt:11 +msgid "Sorting data" +msgstr "" + +#: ../../source/treeview.txt:12 +msgid "Embedding widgets such as check boxes, progress bars, etc." +msgstr "" + +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "" + +#: ../../source/treeview.txt:14 +msgid "Filtering data" +msgstr "" + +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." +msgstr "" + +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." +msgstr "" + +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." +msgstr "" + +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." +msgstr "" + +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." +msgstr "" + +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." +msgstr "" + +#: ../../source/treeview.txt:54 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." +msgstr "" + +#: ../../source/treeview.txt:58 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." +msgstr "" + +#: ../../source/treeview.txt:66 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." +msgstr "" + +#: ../../source/treeview.txt:80 +msgid "Iterating over all rows of a tree model is very simple as well." +msgstr "" + +#: ../../source/treeview.txt:88 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows and its children, use the " +"``print_tree_store`` function." +msgstr "" + +#: ../../source/treeview.txt:106 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." +msgstr "" + +#: ../../source/treeview.txt:123 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." +msgstr "" + +#: ../../source/treeview.txt:136 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." +msgstr "" + +#: ../../source/treeview.txt:142 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." +msgstr "" + +#: ../../source/treeview.txt:153 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." +msgstr "" + +#: ../../source/treeview.txt:156 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." +msgstr "" + +#: ../../source/treeview.txt:162 +msgid "" +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." +msgstr "" + +#: ../../source/treeview.txt:173 +msgid "" +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." +msgstr "" + +#: ../../source/treeview.txt:193 +msgid "The Selection" +msgstr "Die Auswahl" + +#: ../../source/treeview.txt:194 +msgid "" +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." +msgstr "" + +#: ../../source/treeview.txt:203 +msgid "Then to retrieve data for the row selected:" +msgstr "" + +#: ../../source/treeview.txt:212 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +msgstr "" + +#: ../../source/treeview.txt:219 +msgid "Sorting" +msgstr "Sortierung" + +#: ../../source/treeview.txt:220 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." +msgstr "" + +#: ../../source/treeview.txt:223 +msgid "Sorting by clicking on columns" +msgstr "" + +#: ../../source/treeview.txt:224 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." +msgstr "" + +#: ../../source/treeview.txt:227 +msgid "" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." +msgstr "" + +#: ../../source/treeview.txt:246 +msgid "" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." +msgstr "" + +#: ../../source/treeview.txt:253 +msgid "Setting a custom sort function" +msgstr "" + +#: ../../source/treeview.txt:254 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" +msgstr "" + +#: ../../source/treeview.txt:267 +msgid "The case-sensitive sorted list will look like::" +msgstr "" + +#: ../../source/treeview.txt:278 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." +msgstr "" + +#: ../../source/treeview.txt:294 +msgid "" +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" + +#: ../../source/treeview.txt:301 +msgid "Filtering" +msgstr "" + +#: ../../source/treeview.txt:302 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." +msgstr "" + +#: ../../source/treeview.txt:304 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +msgstr "" + +#: ../../source/treeview.txt:310 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"needs a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" + +#: ../../source/treeview.txt:316 +msgid "" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." +msgstr "" + +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "Dialoge" + +#: ../../source/dialogs.txt:4 +msgid "" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." +msgstr "" + +#: ../../source/dialogs.txt:12 +msgid "" +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." +msgstr "" + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "Custom Dialogs" + +#: ../../source/dialogs.txt:20 +msgid "" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." +msgstr "" + +#: ../../source/dialogs.txt:25 +msgid "" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +msgstr "" + +#: ../../source/dialogs.txt:30 +msgid "" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." +msgstr "" + +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." +msgstr "" + +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "MessageDialog" + +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." +msgstr "" + +#: ../../source/dialogs.txt:60 +msgid "" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." +msgstr "" + +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "FileChooserDialog" + +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +msgstr "" + +#: ../../source/dialogs.txt:80 +msgid "" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" +msgstr "" + +#: ../../source/dialogs.txt:83 +msgid "" +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" +msgstr "" + +#: ../../source/dialogs.txt:85 +msgid "" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." +msgstr "" + +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." +msgstr "" + +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." +msgstr "" + +#: ../../source/dialogs.txt:93 +msgid "" +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" +msgstr "" + +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr "" + +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr "" + +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr "" + +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr "" + +#: ../../source/dialogs.txt:105 +msgid "" +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." +msgstr "" + +#: ../../source/dialogs.txt:109 +msgid "" +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." +msgstr "" + +#: ../../source/dialogs.txt:115 +msgid "" +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." +msgstr "" + +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +msgstr "" + +#: ../../source/dialogs.txt:119 +msgid "" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +msgstr "" + +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." +msgstr "" + +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." +msgstr "" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "Installation" + +#: ../../source/install.txt:5 +msgid "" +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later." +msgstr "" + +#: ../../source/install.txt:12 +msgid "Dependencies" +msgstr "Abhängigkeiten" + +#: ../../source/install.txt:14 +msgid "GTK+3" +msgstr "GTK+3" + +#: ../../source/install.txt:16 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "Python 2 (2.6 oder neuer) oder Python 3 (3.1 oder neuer)" + +#: ../../source/install.txt:18 +msgid "gobject-introspection" +msgstr "gobject-introspection" + +#: ../../source/install.txt:21 +msgid "Prebuilt Packages" +msgstr "" + +#: ../../source/install.txt:22 +msgid "" +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." +msgstr "" + +#: ../../source/install.txt:28 +msgid "Installing From Source" +msgstr "" + +#: ../../source/install.txt:29 +msgid "" +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." +msgstr "" + +#: ../../source/install.txt:33 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +msgstr "" + +#: ../../source/install.txt:37 +msgid "" +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" +msgstr "" + +#: ../../source/install.txt:42 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." +msgstr "" + +#: ../../source/install.txt:48 +msgid "" +"Executing the following command will build PyGObject and all its " +"dependencies::" +msgstr "" + +#: ../../source/install.txt:52 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "" + +#: ../../source/install.txt:56 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "" + +#: ../../source/install.txt:64 +msgid "https://download.gnome.org/teams/releng/" +msgstr "https://download.gnome.org/teams/releng/" + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "" + +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a seperate window used for displaying additional " +"information and are often used as a part of button menus and context menus. " +"Their uses are similar to those of dialog windows with the advantage of " +"being less disruptive and having a connection with the widget the popover is " +"pointing to. Popovers have are visually connected to a related widget with a " +"small triangle." +msgstr "" + +#: ../../source/popover.txt:10 +msgid "" +"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Widget.show_all`." +msgstr "" + +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "" + +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." +msgstr "" + +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "" + +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." +msgstr "" + +#: ../../source/popover.txt:41 ../../source/application.txt:69 +msgid "See Also" +msgstr "Siehe auch" + +#: ../../source/popover.txt:43 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "" + +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "Ziehen und Ablegen" + +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." +msgstr "" + +#: ../../source/drag_and_drop.txt:8 +msgid "" +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." +msgstr "" + +#: ../../source/drag_and_drop.txt:14 +msgid "" +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +msgstr "" + +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +msgstr "" + +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +msgstr "" + +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "" + +#: ../../source/drag_and_drop.txt:31 +msgid "" +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." +msgstr "" + +#: ../../source/drag_and_drop.txt:36 +msgid "" +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." +msgstr "" + +#: ../../source/drag_and_drop.txt:41 +msgid "" +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +msgstr "" + +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "Ebenenname" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "drag-begin" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "drag-data-get" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "drag-data-delete" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "drag-end" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "drag-motion" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "drag-drop" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "drag-data-received" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "Anwendung" + +#: ../../source/application.txt:6 +msgid "" +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." +msgstr "" + +#: ../../source/application.txt:14 +msgid "" +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." +msgstr "" + +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." +msgstr "" + +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." +msgstr "" + +#: ../../source/application.txt:26 +msgid "" +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." +msgstr "" + +#: ../../source/application.txt:32 +msgid "" +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"add_accelerator()`." +msgstr "" + +#: ../../source/application.txt:38 +msgid "" +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." +msgstr "" + +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "Befehlszeile" + +#: ../../source/application.txt:48 +msgid "" +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." +msgstr "" + +#: ../../source/application.txt:51 +msgid "" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." +msgstr "" + +#: ../../source/application.txt:54 +msgid "" +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." +msgstr "" + +#: ../../source/application.txt:57 +msgid "" +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." +msgstr "" + +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "Die Eigenschaft ist lesbar." + +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "Die Eigenschaft ist lesbar." + +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "Die Eigenschaft ist lesbar." + +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "Die Eigenschaft ist lesbar." + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "Erste Schritte" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "Einfaches Beispiel" + +#: ../../source/introduction.txt:9 +msgid "" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." +msgstr "" + +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "" + +#: ../../source/introduction.txt:22 +msgid "" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +msgstr "" + +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "" + +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" + +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "" + +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 6)." +msgstr "" + +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" + +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "Erweitertes Beispiel" + +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." +msgstr "" + +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." +msgstr "" + +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" + +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" + +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" + +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "Objekte" + +#: ../../source/objects.txt:6 +msgid "" +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." +msgstr "" + +#: ../../source/objects.txt:11 +msgid "" +"This section will introduce some important aspects about the GObject " +"implementation in Python." +msgstr "" + +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "" + +#: ../../source/objects.txt:17 +msgid "" +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." +msgstr "" + +#: ../../source/objects.txt:22 +msgid "" +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" +msgstr "" + +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "Signale" + +#: ../../source/objects.txt:39 +msgid "" +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." +msgstr "" + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "" + +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "" + +#: ../../source/objects.txt:58 +msgid "" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" +msgstr "" + +#: ../../source/objects.txt:61 +msgid "" +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." +msgstr "" + +#: ../../source/objects.txt:75 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +msgstr "" + +#: ../../source/objects.txt:81 +msgid "" +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." +msgstr "" + +#: ../../source/objects.txt:84 +msgid "" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. This argument type list must end with a " +"comma." +msgstr "" + +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "" + +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." +msgstr "" + +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "" + +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." +msgstr "" + +#: ../../source/objects.txt:109 +msgid "" +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." +msgstr "" + +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "" + +#: ../../source/objects.txt:116 +msgid "" +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." +msgstr "" + +#: ../../source/objects.txt:131 +msgid "" +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" +msgstr "" + +#: ../../source/objects.txt:146 +msgid "" +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" +msgstr "" + +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "" + +#: ../../source/objects.txt:170 +msgid "" +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" +msgstr "" + +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" +msgstr "" + +#: ../../source/objects.txt:227 +msgid "" +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." +msgstr "" + +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "Eigenschaften überwachen" + +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" +msgstr "" + +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" +msgstr "" + +#: ../../source/objects.txt:263 +msgid "API" +msgstr "API" + +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "" + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "" + +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" +msgstr "" + +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." +msgstr "" + +#: ../../source/objects.txt:288 +msgid "" +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" +msgstr "" + +#: ../../source/objects.txt:298 +msgid "" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +msgstr "" + +#: ../../source/objects.txt:300 +msgid "" +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." +msgstr "" + +#: ../../source/objects.txt:305 +msgid "" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." +msgstr "" + +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" +msgstr "" + +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." +msgstr "" + +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." +msgstr "" + +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "" + +#: ../../source/objects.txt:332 +msgid "" +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" +msgstr "" + +#: ../../source/objects.txt:337 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the list of the parameters of the " +"signal, it must end with a comma." +msgstr "" + +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." +msgstr "" + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "" + +#: ../../source/objects.txt:354 +msgid "" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" +msgstr "" + +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +msgstr "" + +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." +msgstr "" + +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." +msgstr "" + +#: ../../source/objects.txt:369 +msgid "" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +msgstr "" + +#: ../../source/objects.txt:373 +msgid "" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" +msgstr "" + +#: ../../source/objects.txt:376 +msgid "" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." +msgstr "" + +#: ../../source/objects.txt:379 +msgid "" +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." +msgstr "" + +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "" + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." +msgstr "" + +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." +msgstr "" + +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "" + +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "Die Eigenschaft ist lesbar." + +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "Die Eigenschaft ist schreibbar." + +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "Die Eigenschaft ist lesbar und schreibbar." + +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "ProgressBar" + +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." +msgstr "" + +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." +msgstr "" + +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." +msgstr "" + +#: ../../source/progressbar.txt:24 +msgid "" +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." +msgstr "" From 3c73b27b23be7c0bb6c75f72620c603bacdcf3f1 Mon Sep 17 00:00:00 2001 From: Christian Kirbach Date: Thu, 10 Dec 2020 23:06:22 +0100 Subject: [PATCH 142/209] Add |version| and |today| --- translations/po/de_DE.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/po/de_DE.po b/translations/po/de_DE.po index ef66a5f..e022466 100644 --- a/translations/po/de_DE.po +++ b/translations/po/de_DE.po @@ -794,7 +794,7 @@ msgstr "Veröffentlichung" #: ../../source/index.txt:9 msgid "|version|" -msgstr "" +msgstr "|version|" #: ../../source/index.txt:0 msgid "Date" @@ -802,7 +802,7 @@ msgstr "Datum" #: ../../source/index.txt:10 msgid "|today|" -msgstr "" +msgstr "|today|" #: ../../source/index.txt:0 msgid "Copyright" From 9f4f3cccc694f1d5be82e67c79dc7bc2fd4ef160 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 21 Dec 2020 19:46:38 +0000 Subject: [PATCH 143/209] Replace deprecated Gtk.Application.add_accelerator() Deprecated since version 3.14. --- source/application.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/application.txt b/source/application.txt index eca57b3..b2c5226 100644 --- a/source/application.txt +++ b/source/application.txt @@ -30,7 +30,7 @@ You will use the full action name when referencing it such as "app.about" but wh you create the action it will just be "about" until added to the application. You can also very easily make keybindings for actions by setting the `accel` -property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application.add_accelerator()`. +property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application.set_accels_for_action()`. Menus ----- From ba1c888fe9d70fc017551727392421dc2bb3c518 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Fri, 18 Dec 2020 19:17:33 +0000 Subject: [PATCH 144/209] Improve the Popovers chapter - Use more of the features of Gtk.MenuButton - Ensure the menu can be seen in the advanced example - Consistently create objects using GObject constructors with named arguments - Rework some of the text --- examples/popover_advanced_example.py | 9 ++++----- examples/popover_example.py | 11 +++-------- source/popover.txt | 14 +++++++++----- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/examples/popover_advanced_example.py b/examples/popover_advanced_example.py index ac18ca6..3fbc78d 100644 --- a/examples/popover_advanced_example.py +++ b/examples/popover_advanced_example.py @@ -28,6 +28,7 @@ class AppWindow(Gtk.ApplicationWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.set_default_size(300, 200) outerbox = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL) self.add(outerbox) @@ -36,9 +37,7 @@ def __init__(self, *args, **kwargs): builder = Gtk.Builder.new_from_string(MENU_XML, -1) menu = builder.get_object("app-menu") - button = Gtk.MenuButton.new() - popover = Gtk.Popover.new_from_model(button, menu) - button.set_popover(popover) + button = Gtk.MenuButton(menu_model=menu) outerbox.pack_start(button, False, True, 0) button.show() @@ -53,11 +52,11 @@ def __init__(self, *args, **kwargs): def do_startup(self): Gtk.Application.do_startup(self) - action = Gio.SimpleAction.new("about", None) + action = Gio.SimpleAction(name="about") action.connect("activate", self.on_about) self.add_action(action) - action = Gio.SimpleAction.new("quit", None) + action = Gio.SimpleAction(name="quit") action.connect("activate", self.on_quit) self.add_action(action) diff --git a/examples/popover_example.py b/examples/popover_example.py index c49588b..816befe 100644 --- a/examples/popover_example.py +++ b/examples/popover_example.py @@ -13,21 +13,16 @@ def __init__(self): outerbox = Gtk.Box(spacing=6, orientation=Gtk.Orientation.VERTICAL) self.add(outerbox) - button = Gtk.Button.new_with_label("Click Me") - button.connect("clicked", self.on_click_me_clicked) - outerbox.pack_start(button, False, True, 0) - self.popover = Gtk.Popover() vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.pack_start(Gtk.ModelButton(label="Item 1"), False, True, 10) vbox.pack_start(Gtk.Label(label="Item 2"), False, True, 10) + vbox.show_all() self.popover.add(vbox) self.popover.set_position(Gtk.PositionType.BOTTOM) - def on_click_me_clicked(self, button): - self.popover.set_relative_to(button) - self.popover.show_all() - self.popover.popup() + button = Gtk.MenuButton(label="Click Me", popover=self.popover) + outerbox.pack_start(button, False, True, 0) win = PopoverWindow() diff --git a/source/popover.txt b/source/popover.txt index 008a925..31ac096 100644 --- a/source/popover.txt +++ b/source/popover.txt @@ -1,19 +1,19 @@ Popovers ======== -The :class:`Gtk.Popover` is a seperate window used for displaying additional -information and are often used as a part of button menus and context menus. +The :class:`Gtk.Popover` is a separate window used for displaying additional +information and is often used with button menus and context menus. +Popovers are visually connected to a related widget with a small triangle. Their uses are similar to those of dialog windows with the advantage of being less disruptive and having a connection with the widget the popover is pointing to. -Popovers have are visually connected to a related widget with a small triangle. A Popover can be created with :class:`Gtk.Popover`; for opening the popover use -:meth:`Gtk.Widget.show_all`. +:meth:`Gtk.Popover.popup`. Custom Popover -------------- -A widget can be added to a popover using the :meth:`Gtk.Container.add`. +A widget can be added to a popover using :meth:`Gtk.Container.add`. Example ^^^^^^^ @@ -30,6 +30,10 @@ A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk.Popover.new_from_model` and can be changed after creation with :meth:`Gtk.Popover.bind_model`. +Passing a :class:`Gio.MenuModel` as a +:data:`menu_model ` argument to the +:class:`Gtk.MenuButton` constructor implicitly creates a popover. + Example ^^^^^^^ From af9e532930baa6aa06a53ecbf826b676a30e846e Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Tue, 22 Dec 2020 19:42:19 +0000 Subject: [PATCH 145/209] Use keyword arguments with Gtk.Treeview() constructor Positional arguments are deprecated and be consistent. --- examples/treeview_filter_example.py | 2 +- source/treeview.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/treeview_filter_example.py b/examples/treeview_filter_example.py index 5e8d580..9142d95 100644 --- a/examples/treeview_filter_example.py +++ b/examples/treeview_filter_example.py @@ -42,7 +42,7 @@ def __init__(self): self.language_filter.set_visible_func(self.language_filter_func) # creating the treeview, making it use the filter as a model, and adding the columns - self.treeview = Gtk.TreeView.new_with_model(self.language_filter) + self.treeview = Gtk.TreeView(model=self.language_filter) for i, column_title in enumerate( ["Software", "Release Year", "Programming Language"] ): diff --git a/source/treeview.txt b/source/treeview.txt index 8a9c941..b5f55d9 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -148,7 +148,7 @@ passing it to the :class:`Gtk.TreeView` constructor, or by calling .. code-block:: python - tree = Gtk.TreeView(store) + tree = Gtk.TreeView(model=store) Once the :class:`Gtk.TreeView` widget has a model, it will need to know how to display the model. It does this with columns and cell renderers. @@ -238,7 +238,7 @@ First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as a m model.append(["david"]) model.append(["benjamin"]) - treeView = Gtk.TreeView(model) + treeView = Gtk.TreeView(model=model) cellRenderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn("Title", renderer, text=0) From 51e0dc47094c82765ca18f97ab80c9fdf0cce596 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Tue, 22 Dec 2020 19:42:19 +0000 Subject: [PATCH 146/209] Improve documentation of Gtk.TreeStore() - Add a snippet with text for Gtk.TreeStore.append() - Use Gtk.TreeModel.foreach() instead of custom Python code --- source/treeview.txt | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index b5f55d9..1698100 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -46,11 +46,21 @@ column. Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:`Gtk.TreeStore.append`, depending upon which sort of model was created. +For a list store: + .. code-block:: python treeiter = store.append(["The Art of Computer Programming", "Donald E. Knuth", 25.46]) +For a tree store you must specify an existing row to append the new row to, +using a :class:`Gtk.TreeIter`, or None for the top level of the tree: + +.. code-block:: python + + treeiter = store.append(None, ["The Art of Computer Programming", + "Donald E. Knuth", 25.46]) + Both methods return a :class:`Gtk.TreeIter` instance, which points to the location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` by calling :meth:`Gtk.TreeModel.get_iter`. @@ -87,21 +97,14 @@ Iterating over all rows of a tree model is very simple as well. Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will only iterate over the rows of the top level, but not the children of the nodes. -To iterate over all rows and its children, use the ``print_tree_store`` function. +To iterate over all rows, use :meth:`Gtk.TreeModel.foreach`. .. code-block:: python - def print_tree_store(store): - rootiter = store.get_iter_first() - print_rows(store, rootiter, "") - - def print_rows(store, treeiter, indent): - while treeiter is not None: - print(indent + str(store[treeiter][:])) - if store.iter_has_child(treeiter): - childiter = store.iter_children(treeiter) - print_rows(store, childiter, indent + "\t") - treeiter = store.iter_next(treeiter) + def print_row(store, treepath, treeiter): + print("\t" * (treepath.get_depth() - 1), store[treeiter][:], sep="") + + store.foreach(print_row) Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-like method mentioned above, it is also possible to From ae2a86de2ce78cb3dd17fe96d9a3936e16adf2c3 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 28 Dec 2020 19:24:17 +0000 Subject: [PATCH 147/209] Mention Gtk.TreeModelFilter.set_visible_column() --- source/treeview.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/treeview.txt b/source/treeview.txt index 1698100..9010d46 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -310,12 +310,14 @@ You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it a mo filter = model.filter_new() -In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` needs a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`: +In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` uses a "visibility" function, which, given a row from the underlying model, will return a boolean indicating if this row should be filtered out or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`: .. code-block:: python filter.set_visible_func(filter_func, data=None) +The alternative to a "visibility" function is to use a boolean column in the model to specify which rows to filter. Choose which column with :meth:`Gtk.TreeModelFilter.set_visible_column`. + Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeView` stack. .. image:: ../images/treeview_filter_example.png From 5b86f569e7a7375649ff4b829c2099f70918242d Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Tue, 5 Jan 2021 19:29:01 +0000 Subject: [PATCH 148/209] Use references to Gtk.ListStore and Gtk.TreeStore in text --- source/treeview.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/treeview.txt b/source/treeview.txt index 9010d46..efb81da 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -46,14 +46,14 @@ column. Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:`Gtk.TreeStore.append`, depending upon which sort of model was created. -For a list store: +For a :class:`Gtk.ListStore`: .. code-block:: python treeiter = store.append(["The Art of Computer Programming", "Donald E. Knuth", 25.46]) -For a tree store you must specify an existing row to append the new row to, +For a :class:`Gtk.TreeStore` you must specify an existing row to append the new row to, using a :class:`Gtk.TreeIter`, or None for the top level of the tree: .. code-block:: python From 68473e774e3aa6cf9f815939566283cb99fa8923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Sun, 2 May 2021 18:34:19 +0200 Subject: [PATCH 149/209] CI: Do not use curly braces in xarg replacement Tox uses {} for substitutions already, see https://tox.readthedocs.io/en/latest/config.html#substitutions Fixes #193 --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index e0402ec..6182112 100644 --- a/tox.ini +++ b/tox.ini @@ -12,7 +12,7 @@ commands = make split-po sphinx-build -E -W -b html ../source ../build/html/en bash -c "grep -v '^\#' ./LINGUAS | tr '\n' ';' > .tmp-LINGUAS" - xargs -a .tmp-LINGUAS -I '{}' -d';' sphinx-build -D language='{}' -E -W -b html ../source '../build/html/{}' + xargs -a .tmp-LINGUAS -I '@' -d';' sphinx-build -D language='@' -E -W -b html ../source '../build/html/@' rm -f .tmp-LINGUAS whitelist_externals = /bin/bash @@ -20,4 +20,4 @@ whitelist_externals = /usr/bin/bash /usr/bin/rm /usr/bin/make - /usr/bin/xargs \ No newline at end of file + /usr/bin/xargs From 3c63f3bb96c42144738661f57e227c574c915104 Mon Sep 17 00:00:00 2001 From: Anders Jonsson Date: Mon, 12 Apr 2021 18:45:21 +0200 Subject: [PATCH 150/209] Add Swedish translation Closes #192 --- translations/LINGUAS | 1 + translations/po/sv.po | 4779 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4780 insertions(+) create mode 100644 translations/po/sv.po diff --git a/translations/LINGUAS b/translations/LINGUAS index a0573e5..9a02e8a 100644 --- a/translations/LINGUAS +++ b/translations/LINGUAS @@ -1,3 +1,4 @@ # please keep this list sorted alphabetically de_DE pt_BR +sv diff --git a/translations/po/sv.po b/translations/po/sv.po new file mode 100644 index 0000000..41deafa --- /dev/null +++ b/translations/po/sv.po @@ -0,0 +1,4779 @@ +# Swedish translation for pygobject-tutorial. +# Copyright © 2021 pygobject-tutorial's COPYRIGHT HOLDER +# This file is distributed under the same license as the pygobject-tutorial package. +# Anders Jonsson , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: pygobject-tutorial master\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-11 19:50+0200\n" +"PO-Revision-Date: 2021-04-12 18:11+0200\n" +"Last-Translator: Anders Jonsson \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" + +#: ../../source/application.txt:4 +msgid "Application" +msgstr "Application" + +#: ../../source/application.txt:6 +msgid "" +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." +msgstr "" +":class:`Gtk.Application` täcker flera upprepande uppgifter som ett modernt " +"program behöver så som att hantera flera instanser, D-Bus-aktivering, öppna " +"filer, kommandoradstolkning, uppstart/nedstängning, menyhantering, " +"fönsterhantering med mera." + +#: ../../source/application.txt:12 ../../source/menus.txt:17 +msgid "Actions" +msgstr "Åtgärder" + +#: ../../source/application.txt:14 +msgid "" +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." +msgstr "" +":class:`Gio.Action` är ett sätt att exponera varje enskild uppgift ditt " +"program eller din komponent gör med ett namn. Dessa åtgärder kan inaktiveras/" +"aktiveras vid körtid och de kan antingen aktiveras eller få ett tillstånd " +"ändrat (om de innehåller tillstånd)." + +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." +msgstr "" +"Orsaken för att använda åtgärder är att separera logiken från " +"användargränssnittet. Till exempel så tillåter detta användning av en " +"menyrad i OSX och en kugghjulsmeny i GNOME genom att helt enkelt referera " +"namnet på en åtgärd. Den huvudsakliga implementationen av detta som du " +"kommer att använda är :class:`Gio.SimpleAction` som kommer demonstreras " +"senare." + +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." +msgstr "" +"Många klasser så som :class:`Gio.MenuItem` och :class:`Gtk.ModelButton` " +"stöder egenskaper för att ställa in ett åtgärdsnamn." + +#: ../../source/application.txt:26 +msgid "" +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." +msgstr "" +"Dessa åtgärder kan grupperas tillsammans i en :class:`Gio.ActionGroup` och " +"då dessa grupper läggs till i en komponent med :meth:`Gtk.Widget." +"insert_action_group()` kommer de få ett prefix. Exempelvis ”win” då de läggs " +"till ett :class:`Gtk.ApplicationWindow`. Du kommer använda det fullständiga " +"åtgärdsnamnet då du refererar till det, som ”app.about”, men då du skapar " +"åtgärden kommer den bara vara ”about” tills den läggs till i programmet." + +#: ../../source/application.txt:32 +msgid "" +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"set_accels_for_action()`." +msgstr "" +"Du kan också väldigt lätt göra tangentbindningar för åtgärder genom att " +"ställa in egenskapen `accel` i :class:`Gio.Menu`-filen eller genom att " +"använda :meth:`Gtk.Application.set_accels_for_action()`." + +#: ../../source/application.txt:36 ../../source/menus.txt:2 +msgid "Menus" +msgstr "Menyer" + +#: ../../source/application.txt:38 +msgid "" +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." +msgstr "" +"Dina menyer bör definieras i XML med :class:`Gio.Menu` och skulle hänvisa " +"till de tidigare nämnda åtgärderna som du definierade. :class:`Gtk." +"Application` låter dig konfigurera en meny antingen via :meth:`Gtk." +"Application.set_app_menu()` eller :meth:`Gtk.Application.set_menubar()`. Om " +"du använder :class:`Gio.Resource` så kan det automatiskt använda rätt meny " +"baserat på plattform, annars kan du ställa in dem manuellt. Ett detaljerat " +"exempel visas nedan." + +#: ../../source/application.txt:46 +msgid "Command Line" +msgstr "Kommandorad" + +#: ../../source/application.txt:48 +msgid "" +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." +msgstr "" +"Då du skapar ditt program tar det en flaggegenskap från :class:`Gio." +"ApplicationFlags`. Med denna kan du låta det hantera allting själv eller ha " +"mer anpassat beteende." + +#: ../../source/application.txt:51 +msgid "" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." +msgstr "" +"Du kan använda `HANDLES_COMMAND_LINE` för att tillåta anpassat beteende i :" +"meth:`Gio.Application.do_command_line()`. Kombinera med :meth:`Gio." +"Application.add_main_option()` för att lägga till anpassade alternativ." + +#: ../../source/application.txt:54 +msgid "" +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." +msgstr "" +"Att använda `HANDLES_OPEN` kommer göra jobbet med att helt enkelt ta " +"filargument åt dig och låta dig hantera det i :meth:`Gio.Application." +"do_open()`." + +#: ../../source/application.txt:57 +msgid "" +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." +msgstr "" +"Om ditt program redan är öppet kommer alla dessa sändas till den befintliga " +"instansen om du inte använder `NON_UNIQUE` för att tillåta flera instanser." + +#: ../../source/application.txt:61 ../../source/builder.txt:118 +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 +#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 +#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 +#: ../../source/clipboard.txt:17 ../../source/combobox.txt:32 +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 ../../source/drag_and_drop.txt:74 +#: ../../source/entry.txt:32 ../../source/expander.txt:19 +#: ../../source/iconview.txt:10 ../../source/label.txt:48 +#: ../../source/layout.txt:40 ../../source/layout.txt:97 +#: ../../source/layout.txt:123 ../../source/layout.txt:156 +#: ../../source/layout.txt:180 ../../source/layout.txt:212 +#: ../../source/layout.txt:232 ../../source/layout-table.txt:26 +#: ../../source/menus.txt:80 ../../source/popover.txt:19 +#: ../../source/popover.txt:38 ../../source/progressbar.txt:32 +#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 +#: ../../source/textview.txt:115 +msgid "Example" +msgstr "Exempel" + +#: ../../source/application.txt:69 ../../source/popover.txt:45 +msgid "See Also" +msgstr "Se även" + +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +msgstr "https://wiki.gnome.org/HowDoI/GtkApplication" + +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" +msgstr "https://wiki.gnome.org/HowDoI/GAction" + +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +msgstr "https://wiki.gnome.org/HowDoI/ApplicationMenu" + +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" +msgstr "https://wiki.gnome.org/HowDoI/GMenu" + +#: ../../source/basics.txt:4 +msgid "Basics" +msgstr "Grunder" + +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." +msgstr "" +"Detta avsnitt kommer introducera några av de viktigaste aspekterna i GTK+." + +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" +msgstr "Huvudslinga och signaler" + +#: ../../source/basics.txt:13 +msgid "" +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." +msgstr "" +"Som de flesta verktygslådor för grafiska användargränssnitt använder GTK+ en " +"händelsedriven programmeringsmodell. Då användaren gör något sitter GTK+ i " +"huvudslingan och väntar på inmatning. Om användaren utför någon åtgärd - " +"exempelvis ett musklick - så ”vaknar” huvudslingan och levererar en händelse " +"till GTK+." + +#: ../../source/basics.txt:18 +msgid "" +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." +msgstr "" +"När komponenter tar emot en händelse så sänder de ofta ut en eller flera " +"signaler. Signaler meddelar ditt program att ”något intressant inträffade” " +"genom att anropa funktioner som du anslutit till signalen. Sådana funktioner " +"kallas vanligen *återanrop*. Då dina återanrop anropas skulle du vanligen " +"utföra någon åtgärd - då exempelvis en Öppna-knapp klickas på kanske du " +"visar en filväljardialog. Efter att ett återanrop slutförs kommer GTK+ " +"återgå till huvudslingan och vänta på mer användarinmatning." + +#: ../../source/basics.txt:28 +msgid "A generic example is:" +msgstr "Ett generiskt exempel är:" + +#: ../../source/basics.txt:34 +msgid "" +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." +msgstr "" +"Först så är *widget* en instans av en komponent vi skapade tidigare. Härnäst " +"är händelsen ”event” som vi är intresserade av. Varje komponent har sina " +"egna specifika händelser som kan inträffa. Om du exempelvis har en knapp så " +"skulle du vanligen vilja ansluta den till händelsen ”clicked”. Det här " +"betyder att när knappen klickas på så utfärdas signalen. Som trea kommer " +"argumentet *callback* som är namnet på återanropsfunktionen. Den innehåller " +"koden som körs när signaler av den angivna typen utfärdas. Slutligen " +"inkluderar argumentet *data* de data som ska skickas när signalen utfärdas. " +"Detta argument är dock fullständigt valfritt och kan utelämnas om det inte " +"behövs." + +#: ../../source/basics.txt:46 +msgid "" +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." +msgstr "" +"Funktionen returnerar ett tal som identifierar detta specifika signal-" +"återanropspar. Det krävs för att koppla bort från en signal så att " +"återanropsfunktionen inte kommer anropas under framtida eller aktuellt " +"pågående utsändningar av signalen den har anslutits till." + +# TODO: doubled space +#: ../../source/basics.txt:56 +msgid "" +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" +msgstr "" +"Om du förlorat ”handler_id” av någon anledning (till exempel för att " +"hanterarna installerades med :func:`Gtk.Builder.connect_signals`), så kan du " +"fortfarande koppla från ett specifikt återanrop med funktionen :func:" +"`disconnect_by_func`:" + +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted when an object is destroyed, so when a user requests " +"that a toplevel window is closed, the default handler for this signal " +"destroys the window, but does not terminate the application. Connecting the " +"\"destroy\" signal of the top-level window to the function :func:`Gtk." +"main_quit` will result in the desired behaviour." +msgstr "" +"Program bör ansluta till toppnivåfönstrets ”destroy”-signal. Den sänds ut " +"när ett objekt förstörs, så när en användare begär att ett toppnivåfönster " +"stängs så förstör standardhanteraren för denna signal fönstret, men avslutar " +"inte programmet. Att ansluta ”destroy”-signalen för toppnivåfönstret till " +"funktionen :func:`Gtk.main_quit` kommer att resultera i det önskade " +"beteendet." + +#: ../../source/basics.txt:74 +msgid "" +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." +msgstr "" +"Att anropa :func:`Gtk.main_quit` får huvudslingan i :func:`Gtk.main` att " +"returnera." + +#: ../../source/basics.txt:77 ../../source/objects.txt:96 +msgid "Properties" +msgstr "Egenskaper" + +#: ../../source/basics.txt:78 +msgid "" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" +msgstr "" +"Egenskaper beskriver konfigurationen och tillståndet för komponenter. Som " +"för signaler så har varje komponent sin specifika uppsättning egenskaper. " +"Exempelvis har en knapp egenskapen ”label” som innehåller texten för label-" +"komponenten i knappen. Du kan ange namnet och värdet på valfritt antal " +"egenskaper som nyckelordsargument då du skapar en instans av en komponent. " +"För att skapa en högerjusterad etikett med texten ”Hello World” och en " +"vinkel på 25 grader, använd:" + +#: ../../source/basics.txt:89 +msgid "which is equivalent to" +msgstr "vilket är ekvivalent med" + +#: ../../source/basics.txt:98 +msgid "" +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." +msgstr "" +"Istället för att använda get- och set-metoder kan du också erhålla och " +"ställa in gobjekt-egenskaperna genom egenskapen ”props” som ``widget.props." +"egenskapsnamn = värde``. Detta är ekvivalent med det mer utförliga ``widget." +"get_property(\"egenskapsnamn\")`` och ``widget.set_property(\"egenskapsnamn" +"\", värde)``." + +#: ../../source/basics.txt:103 +msgid "" +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" +msgstr "" +"För att se vilka egenskaper som är tillgängliga för en komponent i versionen " +"som körs av GTK kan du köra ”dir” på egenskapen ”props”:" + +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." +msgstr "" +"Detta kommer i konsolen skriva listan av egenskaper som en Gtk.Box har." + +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" +msgstr "Glade och Gtk.Builder" + +#: ../../source/builder.txt:3 +msgid "" +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by an XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" +msgstr "" +"Klassen :class:`Gtk.Builder` ger dig möjligheten att designa " +"användargränssnitt utan att skriva en enda rad kod. Detta är möjligt genom " +"att beskriva gränssnittet med en XML-fil och sedan läsa in XML-beskrivningen " +"under körtid och skapa objekten automatiskt, vilket Builder-klassen gör åt " +"dig. För att inte behöva skriva denna XML manuellt låter programmet `Glade " +"`_ dig skapa användargränssnittet på ett WYSIWYG-" +"sätt (What You See Is What You Get, vad du ser är vad du får)" + +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" +msgstr "Denna metod har flera fördelar:" + +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." +msgstr "Mindre kod behöver skrivas." + +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." +msgstr "" +"Ändringar i användargränssnitten kan ses snabbare, så de kan förbättras." + +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." +msgstr "" +"Designers utan programmeringskunskap kan skapa och redigera " +"användargränssnitt." + +#: ../../source/builder.txt:12 +msgid "" +"The description of the user interface is independent from the programming " +"language being used." +msgstr "" +"Beskrivningen av användargränssnittet är oberoende av programmeringsspråket " +"som används." + +#: ../../source/builder.txt:14 +msgid "" +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." +msgstr "" +"Det finns fortfarande kod som krävs för att hantera gränssnittsändringar som " +"utlöses av användaren, men :class:`Gtk.Builder` låter dig fokusera på att " +"implementera den funktionaliteten." + +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" +msgstr "Skapa och läsa in .glade-filen" + +#: ../../source/builder.txt:18 +msgid "" +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." +msgstr "" +"Först måste du hämta och installera Glade. Det finns `flera handledningar " +"`_ om Glade, så det " +"förklaras här inte i detalj. Låt oss starta med att skapa ett fönster med en " +"knapp i, och spara till en fil med namnet *example.glade*. Den resulterande " +"XML-filen bör se ut så här." + +#: ../../source/builder.txt:41 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +msgstr "" +"För att läsa in denna fil i Python behöver vi ett :class:`Gtk.Builder`-" +"objekt." + +#: ../../source/builder.txt:48 +msgid "" +"The second line loads all objects defined in *example.glade* into the " +"Builder object." +msgstr "" +"Den andra raden läser in alla objekt som definieras i *example.glade* till " +"Builder-objektet." + +#: ../../source/builder.txt:50 +msgid "" +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." +msgstr "" +"Det är också möjligt att bara läsa in några av objekten. Följande rad skulle " +"bara lägga till de objekt (och deras barnobjekt) som anges i tupeln." + +#: ../../source/builder.txt:57 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." +msgstr "" +"Dessa två metoder finns också för att läsa från en sträng snarare än en fil. " +"Deras motsvarande namn är :meth:`Gtk.Builder.add_from_string` och :meth:`Gtk." +"Builder.add_objects_from_string` och de tar helt enkelt en XML-sträng " +"istället för ett filnamn." + +#: ../../source/builder.txt:61 +msgid "Accessing widgets" +msgstr "Komma åt komponenter" + +#: ../../source/builder.txt:62 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" +msgstr "" +"Nu när fönstret och knappen har lästs in vill vi också visa dem. Därför " +"behöver metoden :meth:`Gtk.Window.show_all` anropas på fönstret. Men hur " +"kommer vi åt det associerade objektet?" + +#: ../../source/builder.txt:71 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." +msgstr "" +"Varje komponent kan erhållas från byggaren genom metoden :meth:`Gtk.Builder." +"get_object` och komponentens *id*. Det är precis *så* lätt." + +#: ../../source/builder.txt:74 +msgid "It is also possible to get a list of all objects with" +msgstr "Det är också möjligt att få en lista över alla objekt med" + +#: ../../source/builder.txt:81 +msgid "Connecting Signals" +msgstr "Ansluta signaler" + +#: ../../source/builder.txt:82 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." +msgstr "" +"Glade möjliggör också att definiera signaler som du kan ansluta till " +"hanterare i din kod utan att extrahera varje objekt från byggaren och " +"ansluta till signalerna manuellt. Den första saken att göra är att deklarera " +"signalnamnen i Glade. För detta exempel kommer vi agera när fönstret stängs " +"och när knappen trycktes ned, så vi ger namnet ”onDestroy” till återanropet " +"som hanterar fönstrets ”destroy”-signal och ”onButtonPressed” till " +"återanropet som hanterar knappens ”pressed”-signal. Nu bör XML-filen se ut " +"så här." + +#: ../../source/builder.txt:90 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" +msgstr "" +"Nu behöver vi definiera hanterarfunktionerna i vår kod. *onDestroy* bör helt " +"enkelt resultera i ett anrop till :meth:`Gtk.main_quit`. När knappen trycks " +"ned skulle vi vilja skriva ut strängen ”Hello World!”, så vi definierar " +"hanteraren enligt följande" + +#: ../../source/builder.txt:99 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +msgstr "" +"Härnäst behöver vi ansluta signalerna och hanterarfunktionerna. Det lättaste " +"sättet att göra det är att definiera en *dict* med en mappning från namnen " +"till hanterarna och sedan skicka den till metoden :meth:`Gtk.Builder." +"connect_signals`." + +#: ../../source/builder.txt:110 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" +msgstr "" +"Ett alternativt tillvägagångssätt är att skapa en klass som har metoder som " +"anropas som signalerna. I vårt exempel skulle den sista kodsnutten kunna " +"skrivas om som:" + +#: ../../source/builder.txt:119 +msgid "The final code of the example" +msgstr "Exemplets slutgiltiga kod" + +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" +msgstr "Knappkomponenter" + +#: ../../source/button_widgets.txt:5 +msgid "Button" +msgstr "Button" + +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." +msgstr "" +"Komponenten Button är en annan ofta använd komponent. Den används vanligen " +"för att ansluta en funktion som anropas när knappen trycks ned." + +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." +msgstr "" +"Komponenten :class:`Gtk.Button` kan innehålla alla giltiga barnkomponenter. " +"Det vill säga att den kan innehålla de flesta andra vanliga :class:`Gtk." +"Widget`. Det oftast använda barnet är :class:`Gtk.Label`." + +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." +msgstr "" +"Vanligen vill du ansluta till knappens ”clicked”-signal som sänds ut när " +"knappen har tryckts ned och släppts." + +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" +msgstr "ToggleButton" + +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." +msgstr "" +"En :class:`Gtk.ToggleButton` är väldigt lik en vanlig :class:`Gtk.Button`, " +"men när de klickats så förbli de aktiverade, eller nedtryckta, tills de " +"klickas på igen. När tillståndet för knappen ändras sänder den ut signalen " +"”toggled”." + +#: ../../source/button_widgets.txt:32 +msgid "" +"To retrieve the state of the :class:`Gtk.ToggleButton`, you can use the :" +"meth:`Gtk.ToggleButton.get_active` method. This returns ``True`` if the " +"button is \"down\". You can also set the toggle button's state, with :meth:" +"`Gtk.ToggleButton.set_active`. Note that, if you do this, and the state " +"actually changes, it causes the \"toggled\" signal to be emitted." +msgstr "" +"För att erhålla tillståndet för :class:`Gtk.ToggleButton` kan du använda " +"metoden :meth:`Gtk.ToggleButton.get_active`. Denna returnerar ``True`` om " +"knappen är ”nere”. Du kan också ställa in växlingsknappens tillstånd med :" +"meth:`Gtk.ToggleButton.set_active`. Observera att om du gör detta och " +"tillståndet faktiskt ändras så får det signalen ”toggled” att sändas ut." + +#: ../../source/button_widgets.txt:47 +msgid "CheckButton" +msgstr "CheckButton" + +#: ../../source/button_widgets.txt:48 +msgid "" +":class:`Gtk.CheckButton` inherits from :class:`Gtk.ToggleButton`. The only " +"real difference between the two is :class:`Gtk.CheckButton`'s appearance. A :" +"class:`Gtk.CheckButton` places a discrete :class:`Gtk.ToggleButton` next to " +"a widget, (usually a :class:`Gtk.Label`). The \"toggled\" signal, :meth:`Gtk." +"ToggleButton.set_active` and :meth:`Gtk.ToggleButton.get_active` are " +"inherited." +msgstr "" +":class:`Gtk.CheckButton` ärver från :class:`Gtk.ToggleButton`. Den enda " +"reella skillnaden mellan dem är utseendet för :class:`Gtk.CheckButton`. En :" +"class:`Gtk.CheckButton` placerar en diskret :class:`Gtk.ToggleButton` intill " +"en komponent (vanligen en :class:`Gtk.Label`). Signalen ”toggled”, :meth:" +"`Gtk.ToggleButton.set_active` och :meth:`Gtk.ToggleButton.get_active` ärvs." + +#: ../../source/button_widgets.txt:56 +msgid "RadioButton" +msgstr "RadioButton" + +#: ../../source/button_widgets.txt:57 +msgid "" +"Like checkboxes, radio buttons also inherit from :class:`Gtk.ToggleButton`, " +"but these work in groups, and only one :class:`Gtk.RadioButton` in a group " +"can be selected at any one time. Therefore, a :class:`Gtk.RadioButton` is " +"one way of giving the user a choice from many options." +msgstr "" +"Liksom kryssrutor så ärver även radioknappar från :class:`Gtk.ToggleButton`, " +"men dessa fungerar i grupp, och endast en :class:`Gtk.RadioButton` i en " +"grupp kan väljas vid varje givet tillfälle. Därigenom är en :class:`Gtk." +"RadioButton` ett sätt att ge användaren ett val bland många alternativ." + +#: ../../source/button_widgets.txt:62 +msgid "" +"Radio buttons can be created with one of the static methods :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` or :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. The first radio button in a group will be " +"created passing ``None`` as the *group* argument. In subsequent calls, the " +"group you wish to add this button to should be passed as an argument." +msgstr "" +"Radioknappar kan skapas med en av de statiska metoderna :meth:`Gtk." +"RadioButton.new_from_widget`, :meth:`Gtk.RadioButton." +"new_with_label_from_widget` eller :meth:`Gtk.RadioButton." +"new_with_mnemonic_from_widget`. Den första radioknappen i en grupp kommer " +"skicka ``None`` som *group*-argument då den skapas. I följande anrop ska " +"gruppen som du vill lägga till denna knapp till skickas med som ett argument." + +#: ../../source/button_widgets.txt:70 +msgid "" +"When first run, the first radio button in the group will be active. This can " +"be changed by calling :meth:`Gtk.ToggleButton.set_active` with ``True`` as " +"first argument." +msgstr "" +"Då den först körs kommer den första radioknappen vara aktiv. Detta kan " +"ändras genom att anropa :meth:`Gtk.ToggleButton.set_active` med ``True`` som " +"första argument." + +#: ../../source/button_widgets.txt:74 +msgid "" +"Changing a :class:`Gtk.RadioButton`'s widget group after its creation can be " +"achieved by calling :meth:`Gtk.RadioButton.join_group`." +msgstr "" +"Att ändra komponentgrupp för en :class:`Gtk.RadioButton` efter att den " +"skapats kan göras genom att anropa :meth:`Gtk.RadioButton.join_group`." + +#: ../../source/button_widgets.txt:86 +msgid "LinkButton" +msgstr "LinkButton" + +#: ../../source/button_widgets.txt:87 +msgid "" +"A :class:`Gtk.LinkButton` is a :class:`Gtk.Button` with a hyperlink, similar " +"to the one used by web browsers, which triggers an action when clicked. It " +"is useful to show quick links to resources." +msgstr "" +"En :class:`Gtk.LinkButton` är en :class:`Gtk.Button` med en hyperlänk, " +"liknande den som används av webbläsare, vilken utlöser en åtgärd då den " +"klickas på. Den är användbar för att visa snabblänkar till resurser." + +#: ../../source/button_widgets.txt:91 +msgid "" +"The URI bound to a :class:`Gtk.LinkButton` can be set specifically using :" +"meth:`Gtk.LinkButton.set_uri`, and retrieved using :meth:`Gtk.LinkButton." +"get_uri`." +msgstr "" +"Den URI som är bunden till en :class:`Gtk.LinkButton` kan specifikt ställas " +"in med :meth:`Gtk.LinkButton.set_uri`, och erhållas med :meth:`Gtk." +"LinkButton.get_uri`." + +#: ../../source/button_widgets.txt:103 +msgid "SpinButton" +msgstr "SpinButton" + +#: ../../source/button_widgets.txt:104 +msgid "" +"A :class:`Gtk.SpinButton` is an ideal way to allow the user to set the value " +"of some attribute. Rather than having to directly type a number into a :" +"class:`Gtk.Entry`, :class:`Gtk.SpinButton` allows the user to click on one " +"of two arrows to increment or decrement the displayed value. A value can " +"still be typed in, with the bonus that it can be checked to ensure it is in " +"a given range. The main properties of a :class:`Gtk.SpinButton` are set " +"through :class:`Gtk.Adjustment`." +msgstr "" +"En :class:`Gtk.SpinButton` är ett idealiskt sätt att låta användaren ställa " +"in värdet för något attribut. Snarare än att direkt behöva skriva in ett tal " +"i ett :class:`Gtk.Entry`, så låter :class:`Gtk.SpinButton` användaren klicka " +"på en av två pilar för att öka eller minska det visade värdet. Ett värde kan " +"fortfarande skrivas in, med bonusen att det kan kontrolleras för att " +"säkerställa att det är i ett givet intervall. Huvudegenskaperna för en :" +"class:`Gtk.SpinButton` ställs in genom :class:`Gtk.Adjustment`." + +# TODO: switch order of the methods. +#: ../../source/button_widgets.txt:112 +msgid "" +"To change the value that :class:`Gtk.SpinButton` is showing, use :meth:`Gtk." +"SpinButton.set_value`. The value entered can either be an integer or float, " +"depending on your requirements, use :meth:`Gtk.SpinButton.get_value` or :" +"meth:`Gtk.SpinButton.get_value_as_int`, respectively." +msgstr "" +"För att ändra värdet som :class:`Gtk.SpinButton` visar, använd :meth:`Gtk." +"SpinButton.set_value`. Värdet som matas in kan antingen vara ett hel- eller " +"flyttal, beroende på dina krav. Använd :meth:`Gtk.SpinButton." +"get_value_as_int` respektive :meth:`Gtk.SpinButton.get_value`." + +#: ../../source/button_widgets.txt:117 +msgid "" +"When you allow the displaying of float values in the spin button, you may " +"wish to adjust the number of decimal spaces displayed by calling :meth:`Gtk." +"SpinButton.set_digits`." +msgstr "" +"När du tillåter visning av flyttalsvärden i stegningsrutan kan du vilja " +"justera antalet decimaler som visas genom att anropa :meth:`Gtk.SpinButton." +"set_digits`." + +#: ../../source/button_widgets.txt:121 +msgid "" +"By default, :class:`Gtk.SpinButton` accepts textual data. If you wish to " +"limit this to numerical values only, call :meth:`Gtk.SpinButton.set_numeric` " +"with ``True`` as argument." +msgstr "" +"Som standard accepterar :class:`Gtk.SpinButton` textdata. Om du vill " +"begränsa detta till endast numeriska värden anropar du :meth:`Gtk.SpinButton." +"set_numeric` med ``True`` som argument." + +#: ../../source/button_widgets.txt:125 +msgid "" +"We can also adjust the update policy of :class:`Gtk.SpinButton`. There are " +"two options here; by default the spin button updates the value even if the " +"data entered is invalid. Alternatively, we can set the policy to only update " +"when the value entered is valid by calling :meth:`Gtk.SpinButton." +"set_update_policy`." +msgstr "" +"Vi kan även justera uppdateringspolicyn för :class:`Gtk.SpinButton`. Det " +"finns två alternativ här; som standard uppdaterar stegningsrutan värdet även " +"om de data som matas in är ogiltiga. Alternativt kan vi ställa in policyn så " +"att det bara uppdateras när det inmatade värdet är giltigt genom att anropa :" +"meth:`Gtk.SpinButton.set_update_policy`." + +#: ../../source/button_widgets.txt:139 +msgid "Switch" +msgstr "Switch" + +#: ../../source/button_widgets.txt:140 +msgid "" +"A :class:`Gtk.Switch` is a widget that has two states: on or off. The user " +"can control which state should be active by clicking the empty area, or by " +"dragging the handle." +msgstr "" +"En :class:`Gtk.Switch` är en komponent som har två tillstånd: på eller av. " +"Användaren kan styra vilket tillstånd som ska vara aktivt genom att klicka " +"på den tomma ytan, eller genom att dra handtaget." + +#: ../../source/button_widgets.txt:144 +msgid "" +"You shouldn't use the \"activate\" signal on the Gtk.Switch which is an " +"action signal and emitting it causes the switch to animate. Applications " +"should never connect to this signal, but use the \"notify::active\" signal, " +"see the example here below." +msgstr "" +"Du bör inte använda ”activate”-signalen vilken är en åtgärdssignal på Gtk." +"Switch, att sända ut den får brytaren att animeras. Program ska aldrig " +"ansluta till denna signal, utan använda signalen ”notify::active”, se " +"exemplet nedan." + +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" +msgstr "CellRenderer-komponenter" + +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" +msgstr "" +":class:`Gtk.CellRenderer`-komponenter används för att visa information i " +"komponenter så som :class:`Gtk.TreeView` eller :class:`Gtk.ComboBox`. De " +"arbetar nära med de associerade komponenterna och är väldigt kraftfulla, med " +"många konfigurationsalternativ för att visa en stor mängd data på olika " +"sätt. Det finns sju :class:`Gtk.CellRenderer`-komponenter som kan användas " +"för olika syften:" + +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" +msgstr ":class:`Gtk.CellRendererText`" + +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" +msgstr ":class:`Gtk.CellRendererToggle`" + +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" +msgstr ":class:`Gtk.CellRendererPixbuf`" + +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" +msgstr ":class:`Gtk.CellRendererCombo`" + +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" +msgstr ":class:`Gtk.CellRendererProgress`" + +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" +msgstr ":class:`Gtk.CellRendererSpinner`" + +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" +msgstr ":class:`Gtk.CellRendererSpin`" + +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" +msgstr ":class:`Gtk.CellRendererAccel`" + +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" +msgstr "CellRendererText" + +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." +msgstr "" +"En :class:`Gtk.CellRendererText` renderar en given text i en cell, med det " +"typsnitt, färg och stilinformation som ges av dess egenskaper. Texten kommer " +"elliptiseras om den är för lång och egenskapen ”ellipsize” tillåter det." + +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" +msgstr "" +"Som standard är text i :class:`Gtk.CellRendererText`-komponenter inte " +"redigerbar. Detta kan ändras genom att ställa in värdet för egenskapen " +"”editable” till ``True``:" + +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." +msgstr "" +"Du kan sedan ansluta till ”edited”-signalen och uppdatera din :class:`Gtk." +"TreeModel` enligt det." + +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" +msgstr "CellRendererToggle" + +#: ../../source/cellrenderers.txt:49 +msgid "" +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." +msgstr "" +":class:`Gtk.CellRendererToggle` renderar en växlingsknapp i en cell. Knappen " +"ritas som en radioknapp eller en kryssruta, beroende på egenskapen ”radio”. " +"Då den aktiveras sänder den signalen ”toggled”." + +#: ../../source/cellrenderers.txt:53 +msgid "" +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." +msgstr "" +"Då en :class:`Gtk.CellRendererToggle` kan ha två tillstånd, aktiv och inte " +"aktiv, så kommer du mest troligt vilja binda egenskapen ”active” på " +"cellrenderaren till ett booleskt värde i modellen, och därigenom få " +"kryssrutan att motsvara tillståndet för modellen." + +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" +msgstr "CellRendererPixbuf" + +#: ../../source/cellrenderers.txt:69 +msgid "" +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." +msgstr "" +"En :class:`Gtk.CellRendererPixbuf` kan användas för att rendera en bild i en " +"cell. Den tillåter att rendera antingen en given :class:`Gdk.Pixbuf` (satt " +"via egenskapen ”pixbuf”) eller en namngiven ikon (satt via egenskapen ”icon-" +"name”)." + +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" +msgstr "CellRendererCombo" + +#: ../../source/cellrenderers.txt:84 +msgid "" +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." +msgstr "" +":class:`Gtk.CellRendererCombo` renderar text i en cell som :class:`Gtk." +"CellRendererText` från vilken den härletts. Men medan den senare erbjuder " +"ett enkelt inmatningsfält för att redigera texten så erbjuder :class:`Gtk." +"CellRendererCombo` en :class:`Gtk.ComboBox`-komponent för att redigera " +"texten. Värdena att visa i kombinationsrutan tas från den :class:`Gtk." +"TreeModel` som anges i egenskapen ”model”." + +#: ../../source/cellrenderers.txt:90 +msgid "" +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." +msgstr "" +"Kombinationscellrenderaren tar hand om att lägga till en textcellrenderare " +"till kombinationsrutan och ställer in den att visa kolumnen som anges av " +"dess egenskap ”text-column”." + +#: ../../source/cellrenderers.txt:93 +msgid "" +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." +msgstr "" +"En :class:`Gtk.CellRendererCombo` kan arbeta i två lägen. Den kan användas " +"med eller utan en associerad :class:`Gtk.Entry`-komponent, beroende på " +"värdet på egenskapen ”has-entry”." + +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "CellRendererProgress" + +#: ../../source/cellrenderers.txt:108 +msgid "" +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." +msgstr "" +":class:`Gtk.CellRendererProgress` renderar ett numeriskt värde som en " +"förloppsindikator i en cell. Vidare kan den visa en text ovanpå " +"förloppsindikatorn." + +#: ../../source/cellrenderers.txt:111 +msgid "" +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." +msgstr "" +"Procentvärdet för förloppsindikatorn kan ändras genom att ändra egenskapen " +"”value”. Liknande :class:`Gtk.ProgressBar` så kan du aktivera " +"*aktivitetsläget* genom att öka ”pulse”-egenskapen istället för ”value”-" +"egenskapen." + +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "CellRendererSpin" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" +":class:`Gtk.CellRendererSpin` renderar text i en cell som :class:`Gtk." +"CellRendererText` från vilken den härletts. Men medan den senare erbjuder " +"ett enkelt inmatningsfält för att redigera texten så erbjuder :class:`Gtk." +"CellRendererSpin` en :class:`Gtk.SpinButton`-komponent. Detta betyder " +"förstås att texten måste gå att tolka som ett flyttal." + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" +"Intervallet för stegningsrutan tas från justeringsegenskapen för " +"cellrenderaren, vilken kan ställas in explicit eller mappas till en kolumn i " +"trädmodellen, som alla egenskaper för cellrenderare. :class:`Gtk." +"CellRendererSpin` har också egenskaper för steghöjden och antalet siffror " +"att visa." + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "Clipboard" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" +":class:`Gtk.Clipboard` tillhandahåller ett lagringsutrymme för en mängd " +"data, inklusive text och bilder. Att använda urklipp låter dessa data delas " +"mellan program genom åtgärder så som kopiering, utklippning och inklistring. " +"Dessa åtgärder utförs vanligen på tre sätt: med tangentbordsgenvägar, med " +"ett :class:`Gtk.MenuItem` och att ansluta funktionerna till :class:`Gtk." +"Button`-komponenter." + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." +msgstr "" +"Det finns flera urklippsmarkeringar för olika syften. I de flesta " +"omständigheter används markeringen med namn ``CLIPBOARD`` för vardaglig " +"kopiering och inklistring. ``PRIMARY`` är en annan vanlig markering som " +"lagrar text som markerats av användaren med markören." + +#: ../../source/combobox.txt:2 +msgid "ComboBox" +msgstr "ComboBox" + +#: ../../source/combobox.txt:3 +msgid "" +"A :class:`Gtk.ComboBox` allows for the selection of an item from a dropdown " +"menu. They are preferable to having many radio buttons on screen as they " +"take up less room. If appropriate, it can show extra information about each " +"item, such as text, a picture, a checkbox, or a progress bar." +msgstr "" +"En :class:`Gtk.ComboBox` möjliggör val av ett objekt från en " +"rullgardinsmeny. De föredras över att ha många radioknappar på skärmen då de " +"tar upp mindre utrymme. Om lämpligt kan den visa extra information om varje " +"objekt, så som text, en bild, en kryssruta eller en förloppsindikator." + +#: ../../source/combobox.txt:8 +msgid "" +":class:`Gtk.ComboBox` is very similar to :class:`Gtk.TreeView`, as both use " +"the model-view pattern; the list of valid choices is specified in the form " +"of a tree model, and the display of the choices can be adapted to the data " +"in the model by using :ref:`cell renderers `. If the combo " +"box contains a large number of items, it may be better to display them in a " +"grid rather than a list. This can be done by calling :meth:`Gtk.ComboBox." +"set_wrap_width`." +msgstr "" +":class:`Gtk.ComboBox`` är väldigt lik :class:`Gtk.TreeView`, då de båda " +"använder model-view-mönstret; listan över giltiga val anges i formen av en " +"trädmodell, och visningen av valen kan anpassas till data i modellen genom " +"att använda :ref:`cellrenderare `. Om kombinationsrutan " +"innehåller ett stort antal objekt kan det vara bättre att visa dem i ett " +"rutnät snarare än i en lista. Detta kan göras genom att anropa :meth:`Gtk." +"ComboBox.set_wrap_width`." + +#: ../../source/combobox.txt:16 +msgid "" +"A default value can be set by calling :meth:`Gtk.ComboBox.set_active` with " +"the index of the desired value." +msgstr "" +"Ett standardvärde kan ställas in genom att anropa :meth:`Gtk.ComboBox." +"set_active` med index för det önskade värdet." + +#: ../../source/combobox.txt:19 +msgid "" +"The :class:`Gtk.ComboBox` widget usually restricts the user to the available " +"choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " +"to enter arbitrary text if none of the available choices are suitable. To do " +"this, use one of the static methods :meth:`Gtk.ComboBox.new_with_entry` or :" +"meth:`Gtk.ComboBox.new_with_model_and_entry` to create an :class:`Gtk." +"ComboBox` instance." +msgstr "" +":class:`Gtk.ComboBox`-komponenten begränsar vanligen användaren till de " +"tillgängliga valen, men den kan valfritt ha ett :class:`Gtk.Entry`, vilket " +"låter användaren ange godtycklig text om inget av de tillgängliga valen är " +"lämpligt. För att göra detta, använd en av de statiska metoderna :meth:`Gtk." +"ComboBox.new_with_entry` eller :meth:`Gtk.ComboBox.new_with_model_and_entry` " +"för att skapa en :class:`Gtk.ComboBox`-instans." + +#: ../../source/combobox.txt:26 +msgid "" +"For a simple list of textual choices, the model-view API of :class:`Gtk." +"ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " +"offers a simple alternative. Both :class:`Gtk.ComboBox` and :class:`Gtk." +"ComboBoxText` can contain an entry." +msgstr "" +"För en enkel lista över textval kan model-view-API:t för :class:`Gtk." +"ComboBox` vara lite överväldigande. I detta fall är :class:`Gtk." +"ComboBoxText` ett enkelt alternativ. Både :class:`Gtk.ComboBox` och :class:" +"`Gtk.ComboBoxText` kan innehålla ett inmatningsfält." + +#: ../../source/dialogs.txt:2 +msgid "Dialogs" +msgstr "Dialoger" + +#: ../../source/dialogs.txt:4 +msgid "" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." +msgstr "" +"Dialogfönster liknar väldigt mycket standardfönster, och används för att " +"tillhandahålla eller erhålla information från användaren. De används ofta " +"för att exempelvis tillhandahålla ett inställningsfönster. Den stora " +"skillnaden som en dialog har är några i förväg packade komponenter som " +"automatiskt gör en layout för dialogen. Därifrån kan vi enkelt lägga till " +"etiketter, knappar, kryssrutor o.s.v. En annan stor skillnad är hanteringen " +"av svar för att styra hur programmet ska bete sig efter interaktion med " +"dialogen." + +#: ../../source/dialogs.txt:12 +msgid "" +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." +msgstr "" +"Det finns flera härledda Dialog-klasser som du kan finna användbara. :class:" +"`Gtk.MessageDialog` används för de flesta enkla aviseringar. Men vid andra " +"tillfällen kan du behöva härleda din egen dialogklass för att tillhandahålla " +"mer komplex funktionalitet." + +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" +msgstr "Anpassade dialoger" + +#: ../../source/dialogs.txt:20 +msgid "" +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." +msgstr "" +"För att packa komponenter i en anpassad dialog bör du packa dem i din :class:" +"`Gtk.Box`, tillgänglig via :meth:`Gtk.Dialog.get_content_area`. För att bara " +"lägga till en :class:`Gtk.Button` längst ner i dialogen kan du använda " +"metoden :meth:`Gtk.Dialog.add_button`." + +#: ../../source/dialogs.txt:25 +msgid "" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +msgstr "" +"En ”modal” dialog (det vill säga en som fryser resten av programmet från " +"användarinmatning) kan skapas genom att anropa :class:`Gtk.Dialog.set_modal` " +"på dialogen eller ställa in argumentet ``flags`` för konstruktorn :class:" +"`Gtk.Dialog` att inkludera flaggan :attr:`Gtk.DialogFlags.MODAL`." + +#: ../../source/dialogs.txt:30 +msgid "" +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." +msgstr "" +"Att klicka på en knapp kommer sända ut en signal kallad ”response”. Om du " +"vill blockera och vänta på att en dialog ska returnera innan du returnerar " +"kontrollflödet till din kod kan du anropa :meth:`Gtk.Dialog.run`. Denna " +"metod returnerar en int som kan vara ett värde från :class:`Gtk." +"ResponseType` eller så kan den vara det anpassade svarsvärdet som du angav " +"i :class:`Gtk.Dialog`-konstruktorn eller :meth:`Gtk.Dialog.add_button`." + +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." +msgstr "" +"Slutligen finns det två sätt att ta bort en dialog. Metoden :meth:`Gtk." +"Widget.hide` får dialogen att sluta visas, men behåller den i minnet. Detta " +"är användbart för att slippa behöva konstruera dialogen igen om den behöver " +"kommas åt vid ett senare tillfälle. Alternativt kan metoden :meth:`Gtk." +"Widget.destroy` användas för att ta bort dialogen från minnet då den inte " +"längre behövs. Det bör noteras att om dialogen behöver kommas åt efter att " +"den förstörts så kommer den behöva konstrueras igen, annars kommer " +"dialogfönstret vara tomt." + +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" +msgstr "MessageDialog" + +# TODO: user response*.* You can +#: ../../source/dialogs.txt:55 +msgid "" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." +msgstr "" +":class:`Gtk.MessageDialog` är en bekvämlighetsklass, använd för att skapa " +"enkla standardmeddelandedialoger, med ett meddelande, en ikon och knappar " +"för användarsvar. Du kan ange meddelandetypen och texten i :class:`Gtk." +"MessageDialog`-konstruktorn, såväl som att ange standardknappar." + +#: ../../source/dialogs.txt:60 +msgid "" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." +msgstr "" +"I några dialoger som kräver vidare förklaring av vad som har hänt kan en " +"sekundär text läggas till. I detta fall görs det primära meddelandet som " +"matats in då meddelandedialogen skapades större och ställs in till fetstil. " +"Det sekundära meddelandet kan ställas in genom att anropa :meth:`Gtk." +"MessageDialog.format_secondary_text`." + +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" +msgstr "FileChooserDialog" + +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +msgstr "" +":class:`Gtk.FileChooserDialog` är lämplig för användning med menyobjekten " +"”Arkiv/Öppna” eller ”Arkiv/Spara”. Du kan använda alla metoder för :class:" +"`Gtk.FileChooser` på filväljardialogen såväl som de för :class:`Gtk.Dialog`." + +#: ../../source/dialogs.txt:80 +msgid "" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" +msgstr "" +"När du skapar en :class:`Gtk.FileChooserDialog` måste du definiera dialogens " +"syfte:" + +#: ../../source/dialogs.txt:83 +msgid "" +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" +msgstr "" +"För att välja en fil att öppna, som för ett Arkiv/Öppna-kommando, använd :" +"attr:`Gtk.FileChooserAction.OPEN`" + +#: ../../source/dialogs.txt:85 +msgid "" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." +msgstr "" +"För att spara en fil för första gången, som för ett Arkiv/Spara-kommando, " +"använd :attr:`Gtk.FileChooserAction.SAVE`, och föreslå ett namn som " +"”Namnlös” med :meth:`Gtk.FileChooser.set_current_name`." + +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." +msgstr "" +"För att spara en fil under ett annat namn, som för ett Arkiv/Spara som-" +"kommando, använd :attr:`Gtk.FileChooserAction.SAVE`, och ställ in det " +"befintliga filnamnet med :meth:`Gtk.FileChooser.set_filename`." + +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." +msgstr "" +"För att välja en mapp istället för en fil, använd :attr:`Gtk." +"FileChooserAction.SELECT_FOLDER`." + +#: ../../source/dialogs.txt:93 +msgid "" +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" +msgstr "" +":class:`Gtk.FileChooserDialog` ärver från :class:`Gtk.Dialog`, så knappar " +"har svars-ID:n så som :attr:`Gtk.ResponseType.ACCEPT` och :attr:`Gtk." +"ResponseType.CANCEL` vilka kan anges i konstruktorn för :class:`Gtk." +"FileChooserDialog`. I kontrast till :class:`Gtk.Dialog` så kan du inte " +"använda anpassade svarskoder med :class:`Gtk.FileChooserDialog`. Den " +"förväntar sig att åtminstone en knapp kommer ha följande svars-ID:n:" + +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" +msgstr ":attr:`Gtk.ResponseType.ACCEPT`" + +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" +msgstr ":attr:`Gtk.ResponseType.OK`" + +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" +msgstr ":attr:`Gtk.ResponseType.YES`" + +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" +msgstr ":attr:`Gtk.ResponseType.APPLY`" + +#: ../../source/dialogs.txt:105 +msgid "" +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." +msgstr "" +"När användaren är klar med att välja filer kan ditt program få de valda " +"namnen antingen som filnamn (:meth:`Gtk.FileChooser.get_filename`) eller som " +"URI:er (:meth:`Gtk.FileChooser.get_uri`)." + +#: ../../source/dialogs.txt:109 +msgid "" +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." +msgstr "" +"Som standard tillåter :class:`Gtk.FileChooser` endast att en fil väljs åt " +"gången. För att aktivera val av flera filer, använd :meth:`Gtk.FileChooser." +"set_select_multiple`. Att erhålla en lista över valda filer är möjligt med " +"antingen :meth:`Gtk.FileChooser.get_filenames` eller :meth:`Gtk.FileChooser." +"get_uris`." + +#: ../../source/dialogs.txt:115 +msgid "" +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." +msgstr "" +":class:`Gtk.FileChooser` stöder också ett antal alternativ som gör filerna " +"och mapparna mer konfigurerbara och åtkomliga." + +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +msgstr "" +":meth:`Gtk.FileChooser.set_local_only`: Endast lokala filer kan väljas." + +#: ../../source/dialogs.txt:119 +msgid "" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +msgstr ":meth:`Gtk.FileChooser.show_hidden`: Dolda filer och mappar visas." + +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." +msgstr "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: Om filväljaren " +"konfigurerades i läget :attr:`Gtk.FileChooserAction.SAVE`, kommer den " +"presentera en bekräftelsedialog om användaren skriver in ett filnamn som " +"redan finns." + +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." +msgstr "" +"Vidare kan du ange vilka typer av filer som visas genom att skapa :class:" +"`Gtk.FileFilter`-objekt och anropa :meth:`Gtk.FileChooser.add_filter`. " +"Användaren kan sedan välja ett av de tillagda filtren från en " +"kombinationsruta längst ner i filväljaren." + +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" +msgstr "Dra-och-släpp" + +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." +msgstr "" +"Versioner av PyGObject < 3.0.3 innehåller ett fel som inte låter dra-och-" +"släpp fungera korrekt. Därför krävs en version av PyGObject >= 3.0.3 för att " +"följande exempel ska fungera." + +#: ../../source/drag_and_drop.txt:8 +msgid "" +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." +msgstr "" +"Att konfigurera dra-och-släpp mellan komponenter består i att välja en " +"dragkälla (komponenten som användaren startar dragningen från) med metoden :" +"meth:`Gtk.Widget.drag_source_set`, välja ett dragmål (komponenten som " +"användaren släpper på) med metoden :meth:`Gtk.Widget.drag_dest_set` och " +"sedan hantera de relevanta signalerna för båda komponenterna." + +#: ../../source/drag_and_drop.txt:14 +msgid "" +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +msgstr "" +"Istället för att använda :meth:`Gtk.Widget.drag_source_set` och :meth:`Gtk." +"Widget.drag_dest_set` så kräver vissa specialiserade komponenter " +"användningen av specifika funktioner (så som :class:`Gtk.TreeView` och :" +"class:`Gtk.IconView`)." + +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +msgstr "" +"Ett enkelt dra-och-släpp kräver bara att källan ansluter till signalen ”drag-" +"data-get” och att målet ansluter till signalen ”drag-data-received”. Mer " +"komplexa saker som specifika släppområden och anpassade dragikoner kommer " +"kräva att du ansluter till :ref:`ytterligare signaler ` och " +"interagerar med :class:`Gdk.DragContext`-objektet det tillhandahåller." + +#: ../../source/drag_and_drop.txt:24 +msgid "" +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +msgstr "" +"För att överföra data mellan källan och målet behöver du interagera med " +"variabeln :class:`Gtk.SelectionData` som tillhandahålls i signalerna :ref:" +"`”drag-data-get” ` och :ref:`”drag-data-received” ` med get- och set-metoderna för :class:`Gtk.SelectionData`." + +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" +msgstr "Målfält" + +#: ../../source/drag_and_drop.txt:31 +msgid "" +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." +msgstr "" +"För att dragningens källa och mål ska få veta vilka data de tar emot och " +"skickar krävs en gemensam lista över :class:`Gtk.TargetEntry `. Ett :class:`Gtk.TargetEntry` beskriver ett datastycke som " +"kommer sändas av dragkällan och tas emot av dragmålet." + +#: ../../source/drag_and_drop.txt:36 +msgid "" +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." +msgstr "" +"Det finns två sätt att lägga till :class:`Gtk.TargetEntry ` " +"till en källa och ett mål. Om dra-och-släppet är enkelt och varje målfält är " +"av olika typ så kan du använda gruppen av metoder :meth:`omnämnda här `." + +#: ../../source/drag_and_drop.txt:41 +msgid "" +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +msgstr "" +"Om du behöver mer än en typ av data eller vill göra mer komplexa saker med " +"dessa data kommer du behöva skapa ditt :class:`Gtk.TargetEntry ` med metoden :meth:`Gtk.TargetEntry.new`." + +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" +msgstr "Dragkällsignaler" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" +msgstr "Namn" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" +msgstr "När den sänds ut" + +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "Vanligt syfte" + +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" +msgstr "drag-begin" + +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" +msgstr "Användaren startar en dragning" + +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" +msgstr "Konfigurera dragikon" + +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" +msgstr "drag-data-get" + +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" +msgstr "Då dragningsdata begärs av målet" + +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "Överför dragningsdata från källan till målet" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "drag-data-delete" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "Då en dragning med åtgärden Gdk.DragAction.MOVE slutförts" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "Ta bort data från källan för att slutföra ”flytten”" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "drag-end" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "Då dragningen slutförts" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "Gör allt som gjorts i drag-begin ogjort" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "Dragmålsignaler" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "drag-motion" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "Dragikon flyttar över ett släppområde" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "Tillåt endast vissa områden att släppas till" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "drag-drop" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "Ikon släpps på ett dragområde" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "drag-data-received" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" +msgstr "När dragningsdata tas emot av målet" + +#: ../../source/entry.txt:2 +msgid "Entry" +msgstr "Entry" + +#: ../../source/entry.txt:4 +msgid "" +"Entry widgets allow the user to enter text. You can change the contents with " +"the :meth:`Gtk.Entry.set_text` method, and read the current contents with " +"the :meth:`Gtk.Entry.get_text` method. You can also limit the number of " +"characters the Entry can take by calling :meth:`Gtk.Entry.set_max_length`." +msgstr "" +"Entry-komponenter låter användaren mata in text. Du kan ändra innehållet med " +"metoden :meth:`Gtk.Entry.set_text`, och läsa det aktuella innehållet med " +"metoden :meth:`Gtk.Entry.get_text`. Du kan också begränsa antalet tecken " +"ditt Entry kan innehålla genom att anropa :meth:`Gtk.Entry.set_max_length`." + +#: ../../source/entry.txt:9 +msgid "" +"Occasionally you might want to make an Entry widget read-only. This can be " +"done by passing ``False`` to the :meth:`Gtk.Entry.set_editable` method." +msgstr "" +"Emellanåt kan du vilja göra en Entry-komponent skrivskyddad. Detta kan göras " +"genom att skicka ``False`` till metoden :meth:`Gtk.Entry.set_editable`." + +#: ../../source/entry.txt:12 +msgid "" +"Entry widgets can also be used to retrieve passwords from the user. It is " +"common practice to hide the characters typed into the entry to prevent " +"revealing the password to a third party. Calling :meth:`Gtk.Entry." +"set_visibility` with ``False`` will cause the text to be hidden." +msgstr "" +"Entry-komponenter kan också användas för att ta emot lösenord från " +"användaren. Det är praxis att dölja tecknen som skrivs in i fältet för att " +"undvika att avslöja lösenordet till en tredje part. Att anropa :meth:`Gtk." +"Entry.set_visibility` med ``False`` får texten att döljas." + +#: ../../source/entry.txt:17 +msgid "" +":class:`Gtk.Entry` has the ability to display progress or activity " +"information behind the text. This is similar to :class:`Gtk.ProgressBar` " +"widget and is commonly found in web browsers to indicate how much of a page " +"download has been completed. To make an entry display such information, use :" +"meth:`Gtk.Entry.set_progress_fraction`, :meth:`Gtk.Entry." +"set_progress_pulse_step`, or :meth:`Gtk.Entry.progress_pulse`." +msgstr "" +":class:`Gtk.Entry` har förmågan att visa förlopps- eller " +"aktivitetsinformation bakom texten. Detta liknar :class:`Gtk.ProgressBar`-" +"komponenten och hittas vanligen i webbläsare för att indikera hur mycket av " +"en sidhämtning som har slutförts. För att få ett inmatningsfält att visa " +"sådan information, använd :meth:`Gtk.Entry.set_progress_fraction`, :meth:" +"`Gtk.Entry.set_progress_pulse_step` eller :meth:`Gtk.Entry.progress_pulse`." + +#: ../../source/entry.txt:24 +msgid "" +"Additionally, an Entry can show icons at either side of the entry. These " +"icons can be activatable by clicking, can be set up as drag source and can " +"have tooltips. To add an icon, use :meth:`Gtk.Entry.set_icon_from_icon_name` " +"or one of the various other functions that set an icon from an icon name, a " +"pixbuf, or icon theme. To set a tooltip on an icon, use :meth:`Gtk.Entry." +"set_icon_tooltip_text` or the corresponding function for markup." +msgstr "" +"Vidare kan ett Entry visa ikoner på endera sida av fältet. Dessa ikoner kan " +"vara aktiverbara genom klick, kan ställas in som en dragkälla och kan ha " +"inforutor. För att lägga till en ikon, använd :meth:`Gtk.Entry." +"set_icon_from_icon_name` eller en av de andra funktionerna som ställer in en " +"ikon från ett ikonnamn, en pixbuf eller ett ikontema. För att ställa in en " +"inforuta på en ikon, använd :meth:`Gtk.Entry.set_icon_tooltip_text` eller " +"motsvarande funktion för markup." + +#: ../../source/expander.txt:2 +msgid "Expander" +msgstr "Expander" + +#: ../../source/expander.txt:4 +msgid "" +"Expanders allow to dynamically hide or show information within a window or " +"dialog. An expander can take a single widget that will be displayed when " +"expanded." +msgstr "" +"Expanderare låter dig dynamiskt dölja eller visa information i ett fönster " +"eller en dialog. En expanderare kan ta en ensam komponent som kommer att " +"visas när den expanderas." + +#: ../../source/expander.txt:8 +msgid "" +"Expanders remain expanded until clicked again. When the state of an expander " +"is changed, the \"activate\" signal is emitted." +msgstr "" +"Expanderare förblir expanderade tills de klickas på igen. När tillståndet " +"för en expanderare ändras sänds signalen ”activate” ut." + +#: ../../source/expander.txt:11 +msgid "" +"An expander can be programmatically expanded or collapsed by passing `True` " +"or `False` to :meth:`Gtk.Expander.set_expanded`. Note that doing so causes " +"the \"activate\" signal to be emitted." +msgstr "" +"En expanderare kan programmatiskt expanderas eller fällas ihop genom skicka " +"`True` eller `False` till :meth:`Gtk.Expander.set_expanded`. Observera att " +"göra så får signalen ”activate” att sändas ut." + +#: ../../source/expander.txt:15 +msgid "" +"More than one widget, such as a :class:`Gtk.Label` and :class:`Gtk.Button`, " +"can be added by appending them to a :class:`Gtk.Box`." +msgstr "" +"Mer än en komponent, så som en :class:`Gtk.Label` och :class:`Gtk.Button`, " +"kan läggas till genom att lägga till dem till en :class:`Gtk.Box`." + +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" +msgstr "Komponentgalleri" + +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" +msgstr ":class:`Gtk.AboutDialog`" + +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" +msgstr ":class:`Gtk.AccelLabel`" + +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" +msgstr ":class:`Gtk.ActionBar`" + +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.AppChooserButton`" +msgstr ":class:`Gtk.AppChooserButton`" + +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserDialog`" +msgstr ":class:`Gtk.AppChooserDialog`" + +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.Assistant`" +msgstr ":class:`Gtk.Assistant`" + +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.Button`" +msgstr ":class:`Gtk.Button`" + +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.CheckButton`" +msgstr ":class:`Gtk.CheckButton`" + +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.ColorButton`" +msgstr ":class:`Gtk.ColorButton`" + +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.ColorChooserDialog`" +msgstr ":class:`Gtk.ColorChooserDialog`" + +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.ComboBox`" +msgstr ":class:`Gtk.ComboBox`" + +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.ComboBoxText`" +msgstr ":class:`Gtk.ComboBoxText`" + +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Entry`" +msgstr ":class:`Gtk.Entry`" + +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.FileChooserButton`" +msgstr ":class:`Gtk.FileChooserButton`" + +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.FileChooserDialog`" +msgstr ":class:`Gtk.FileChooserDialog`" + +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.FlowBox`" +msgstr ":class:`Gtk.FlowBox`" + +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.FontButton`" +msgstr ":class:`Gtk.FontButton`" + +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.FontChooserDialog`" +msgstr ":class:`Gtk.FontChooserDialog`" + +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.Frame`" +msgstr ":class:`Gtk.Frame`" + +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.GLArea`" +msgstr ":class:`Gtk.GLArea`" + +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.Grid`" +msgstr ":class:`Gtk.Grid`" + +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.HeaderBar`" +msgstr ":class:`Gtk.HeaderBar`" + +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.IconView`" +msgstr ":class:`Gtk.IconView`" + +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.Image`" +msgstr ":class:`Gtk.Image`" + +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.InfoBar`" +msgstr ":class:`Gtk.InfoBar`" + +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Label`" +msgstr ":class:`Gtk.Label`" + +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.LevelBar`" +msgstr ":class:`Gtk.LevelBar`" + +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.LinkButton`" +msgstr ":class:`Gtk.LinkButton`" + +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.ListBox`" +msgstr ":class:`Gtk.ListBox`" + +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.LockButton`" +msgstr ":class:`Gtk.LockButton`" + +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.MenuBar`" +msgstr ":class:`Gtk.MenuBar`" + +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.MenuButton`" +msgstr ":class:`Gtk.MenuButton`" + +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.MessageDialog`" +msgstr ":class:`Gtk.MessageDialog`" + +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Notebook`" +msgstr ":class:`Gtk.Notebook`" + +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.Paned`" +msgstr ":class:`Gtk.Paned`" + +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.PlacesSidebar`" +msgstr ":class:`Gtk.PlacesSidebar`" + +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.ProgressBar`" +msgstr ":class:`Gtk.ProgressBar`" + +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.RadioButton`" +msgstr ":class:`Gtk.RadioButton`" + +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.RecentChooserDialog`" +msgstr ":class:`Gtk.RecentChooserDialog`" + +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.Scale`" +msgstr ":class:`Gtk.Scale`" + +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.Scrollbar`" +msgstr ":class:`Gtk.Scrollbar`" + +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.ScrolledWindow`" +msgstr ":class:`Gtk.ScrolledWindow`" + +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.SearchBar`" +msgstr ":class:`Gtk.SearchBar`" + +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.SearchEntry`" +msgstr ":class:`Gtk.SearchEntry`" + +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.Separator`" +msgstr ":class:`Gtk.Separator`" + +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.SpinButton`" +msgstr ":class:`Gtk.SpinButton`" + +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.Spinner`" +msgstr ":class:`Gtk.Spinner`" + +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.Stack`" +msgstr ":class:`Gtk.Stack`" + +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.StackSwitcher`" +msgstr ":class:`Gtk.StackSwitcher`" + +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.Statusbar`" +msgstr ":class:`Gtk.Statusbar`" + +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.Switch`" +msgstr ":class:`Gtk.Switch`" + +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.TextView`" +msgstr ":class:`Gtk.TextView`" + +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.ToggleButton`" +msgstr ":class:`Gtk.ToggleButton`" + +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.ToolPalette`" +msgstr ":class:`Gtk.ToolPalette`" + +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Toolbar`" +msgstr ":class:`Gtk.Toolbar`" + +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.TreeView`" +msgstr ":class:`Gtk.TreeView`" + +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.VolumeButton`" +msgstr ":class:`Gtk.VolumeButton`" + +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Window`" +msgstr ":class:`Gtk.Window`" + +#: ../../source/iconview.txt:2 +msgid "IconView" +msgstr "IconView" + +#: ../../source/iconview.txt:3 +msgid "" +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." +msgstr "" +"En :class:`Gtk.IconView` är en komponent som visar en samling ikoner i en " +"rutnätsvy. Den stöder funktioner så som dra-och-släpp, flerval och att ändra " +"ordning på objekt." + +#: ../../source/iconview.txt:5 +msgid "" +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +msgstr "" +"Liknande :class:`Gtk.TreeView` använder :class:`Gtk.IconView` en :class:`Gtk." +"ListStore` för sin modell. Istället för att använda :ref:`cellrenderare " +"`, kräver :class:`Gtk.IconView` att en av kolumnerna i dess :" +"class:`Gtk.ListStore` innehåller :class:`GdkPixbuf.Pixbuf`-objekt." + +#: ../../source/iconview.txt:7 +msgid "" +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." +msgstr "" +":class:`Gtk.IconView` stöder flera markeringslägen för att tillåta antingen " +"markering av flera ikoner samtidigt, begränsa markeringar till bara ett " +"objekt eller helt förbjuda markering av objekt. För att ange ett " +"markeringsläge används metoden :meth:`Gtk.IconView.set_selection_mode` med " +"ett av markeringslägena i :class:`Gtk.SelectionMode`." + +#: ../../source/index.txt:62 +msgid "Deprecated" +msgstr "Föråldrat" + +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" +msgstr "Python-handledningen för GTK+ 3" + +#: ../../source/index.txt:0 +msgid "Release" +msgstr "Utgåva" + +#: ../../source/index.txt:9 +msgid "|version|" +msgstr "|version|" + +#: ../../source/index.txt:0 +msgid "Date" +msgstr "Datum" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "|today|" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "Copyright" + +#: ../../source/index.txt:11 +msgid "" +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" +msgstr "" +"GNU Free Documentation License 1.3 utan standardavsnitt och omslagstexter" + +#: ../../source/index.txt:13 +msgid "" +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +msgstr "" +"Denna handledning ger en introduktion till att skriva GTK+ 3-program i " +"Python." + +#: ../../source/index.txt:15 +msgid "" +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." +msgstr "" +"Innan du arbetar dig genom denna handledning så är det rekommenderat att du " +"har rimlig förståelse av programmeringsspråket Python. Programmering av " +"grafiska användargränssnitt introducerar nya problem jämfört med att " +"interagera med standardutmatning (konsol / terminal). Det är nödvändigt för " +"dig att veta hur du skapar och kör Python-filer, förstår enkla tolkfel, hur " +"du arbetar med strängar, heltal, flyttal och booleska värden. För de mer " +"avancerade komponenterna i denna handledning kommer god kunskap om listor " +"och tupler vara nödvändig." + +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." +msgstr "" +"Även om denna handledning beskriver de viktigaste klasserna och metoderna i " +"GTK+ 3 så är den inte tänkt att tjäna som en API-referens. Se " +"`Referenshandboken för GTK+ 3 `_ " +"för en detaljerad beskrivning av API:t. Det finns även en `Python-specifik " +"referens `_ tillgänglig." + +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "Innehåll:" + +#: ../../source/index.txt:70 +msgid "Indices and tables" +msgstr "Index och tabeller" + +#: ../../source/index.txt:72 +msgid ":ref:`search`" +msgstr ":ref:`search`" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "Installation" + +#: ../../source/install.txt:5 +msgid "" +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later." +msgstr "" +"Det första steget innan vi börjar med faktisk kodning består i att " +"konfigurera `PyGObject`_ och dess beroenden. PyGObject är en Python-modul " +"som låter utvecklare komma åt GObject-baserade bibliotek så som GTK+ i " +"Python. Dess stöd är begränsat till GTK+ version 3 eller senare." + +#: ../../source/install.txt:12 +msgid "Dependencies" +msgstr "Beroenden" + +#: ../../source/install.txt:14 +msgid "GTK+3" +msgstr "GTK+3" + +#: ../../source/install.txt:16 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "Python 2 (2.6 eller senare) eller Python 3 (3.1 eller senare)" + +#: ../../source/install.txt:18 +msgid "gobject-introspection" +msgstr "gobject-introspection" + +#: ../../source/install.txt:21 +msgid "Prebuilt Packages" +msgstr "Förbyggda paket" + +#: ../../source/install.txt:22 +msgid "" +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." +msgstr "" +"De senaste versionerna av PyGObject och dess beroenden paketeras av nästan " +"alla stora Linux-distributioner. Så om du använder Linux kan du troligen " +"komma igång genom att installera paketet från det officiella förrådet för " +"din distribution." + +#: ../../source/install.txt:28 +msgid "Installing From Source" +msgstr "Installera från källkod" + +#: ../../source/install.txt:29 +msgid "" +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." +msgstr "" +"Det lättaste sättet att installera PyGObject från källkod är genom att " +"använda `JHBuild`_. Det är designat för att lätt bygga källpaket och " +"upptäcka vilka beroenden som måste byggas och i vilken ordning. För att " +"konfigurera JHBuild, följ `JHBuild-handboken`_." + +#: ../../source/install.txt:33 +msgid "" +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +msgstr "" +"När du har installerat JHBuild, hämta den senaste konfigurationen från [#]_. " +"Kopiera filer med filändelsen `.modules` to JHBuilds modulkatalog och filen " +"`sample-tarball.jhbuildrc` till `~/.jhbuildrc`." + +#: ../../source/install.txt:37 +msgid "" +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" +msgstr "" +"Om du inte har gjort det tidigare kan du bekräfta att din byggmiljö är " +"konfigurerad riktigt genom att köra::" + +#: ../../source/install.txt:42 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." +msgstr "" +"Det kommer skriva ut alla program och bibliotek som för närvarande saknas på " +"ditt system men behövs för att bygga. Du bör installera dessa genom din " +"distributions paketförråd. En lista över `paketnamn `_ för olika distributioner finns " +"på GNOME-wikin. Kör kommandot ovan igen för att säkerställa att de " +"nödvändiga verktygen är tillgängliga." + +#: ../../source/install.txt:48 +msgid "" +"Executing the following command will build PyGObject and all its " +"dependencies::" +msgstr "" +"Att köra följande kommando kommer bygga PyGObject och alla dess beroenden::" + +#: ../../source/install.txt:52 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "Slutligen kan du även vilja installera GTK+ från källkod::" + +#: ../../source/install.txt:56 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "För att starta ett skal med samma miljö som används av JHBuild, kör::" + +#: ../../source/install.txt:64 +msgid "https://download.gnome.org/teams/releng/" +msgstr "https://download.gnome.org/teams/releng/" + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "Komma igång" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "Enkelt exempel" + +#: ../../source/introduction.txt:9 +msgid "" +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." +msgstr "" +"För att starta med vår handledning skapar vi det enklast tänkbara " +"programmet. Detta program kommer skapa ett tomt fönster som är 200 x 200 " +"bildpunkter stort." + +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "Vi kommer nu förklara varje rad i exemplet." + +#: ../../source/introduction.txt:22 +msgid "" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +msgstr "" +"I början måste vi importera Gtk-modulen för att kunna komma åt GTK+:s " +"klasser och funktioner. Då en användares system kan ha flera versioner av GTK" +"+ installerade samtidigt så vill vi säkerställa att då vi importerar Gtk så " +"refererar det till GTK+ 3 och inte någon annan version av biblioteket, " +"vilket är syftet med satsen ``gi.require_version('Gtk', '3.0')``." + +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." +msgstr "Nästa rad skapar ett tomt fönster." + +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." +msgstr "" +"Följt av att ansluta till fönstrets borttagningshändelse för att säkerställa " +"att programmet stängs om vi klickar på *x* för att stänga fönstret." + +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." +msgstr "I nästa steg visar vi fönstret." + +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 6)." +msgstr "" +"Slutligen startar vi GTK+-bearbetningsslingan som vi avslutar när fönstret " +"stängs (se rad 6)." + +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" +msgstr "" +"För att köra programmet, öppna en terminal, ändra till filens katalog, och " +"mata in::" + +#: ../../source/introduction.txt:57 +msgid "Extended Example" +msgstr "Utökat exempel" + +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." +msgstr "" +"För något som är lite mer användbart kommer här PyGObject-versionen av det " +"klassiska ”Hej världen”-programmet." + +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." +msgstr "" +"Detta exempel skiljer sig från det enkla exemplet då vi gör en underklass " +"till :class:`Gtk.Window` för att skapa vår egen klass :class:`MyWindow`." + +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." +msgstr "" +"I klassens konstruktor måste vi anropa superklassens konstruktor. Dessutom " +"säger vi till den att ställa in värdet på egenskapen `title` till `Hello " +"World`." + +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." +msgstr "" +"De nästa tre raderna används för att skapa en knappkomponent, ansluta till " +"dess `clicked`-signal och lägga till den som barn till toppnivåfönstret." + +#: ../../source/introduction.txt:84 +msgid "" +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" +"På det viset kommer metoden :meth:`on_button_clicked` att anropas om du " +"klickar på knappen." + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." +msgstr "" +"Det sista blocket, utanför klassen, är väldigt likt det enkla exemplet ovan, " +"men istället för att skapa en instans av den generiska klassen :class:`Gtk." +"Window`, så skapar vi en instans av :class:`MyWindow`." + +#: ../../source/label.txt:2 +msgid "Label" +msgstr "Label" + +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" +"Etiketter är huvudmetoden för att placera ej redigerbar text i fönster, " +"exempelvis för att placera en titel intill en :class:`Gtk.Entry`-komponent. " +"Du kan ange texten i konstruktorn, eller senare med metoderna :meth:`Gtk." +"Label.set_text` eller :meth:`Gtk.Label.set_markup`." + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" +"Bredden på etiketten kommer justeras automatiskt. Du kan skapa etiketter med " +"flera rader genom att stoppa nyrader (”\\\\n”) i etikettsträngen." + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" +"Etiketter kan göras markerbara med :meth:`Gtk.Label.set_selectable`. " +"Markerbara etiketter låter användaren kopiera etikettinnehållet till " +"urklipp. Endast etiketter som innehåller information som är användbar att " +"kopiera — så som felmeddelanden — bör göras markerbara." + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" +"Etikettexten kan justeras med metoden :meth:`Gtk.Label.set_justify`. " +"Komponenten kan också radbryta, vilket kan aktiveras med :meth:`Gtk.Label." +"set_line_wrap`." + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" +":class:`Gtk.Label` stöder viss enkel formatering, exempelvis låter den dig " +"göra text fet, färgad eller större. Du kan göra detta genom att " +"tillhandahålla en sträng till :meth:`Gtk.Label.set_markup`, med Pango Markup-" +"syntaxen [#pango]_. Exempelvis ``fet text och genomstruken text``. Dessutom stöder :class:`Gtk.Label` klickbara hyperlänkar. Markup för " +"länkar har lånats från HTML, och använder ”a” med attributen href och title. " +"GTK+ renderar länkar liknande hur de visas i webbläsare, med färgad, " +"understruken text. Attributet title visas som en inforuta över länken." + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" +"Etiketter kan innehålla *snabbtangenter*. Snabbtangenter är understrukna " +"tecken i etiketten, använda för tangentbordsnavigering. Snabbtangenter " +"skapas genom att tillhandahålla en sträng med ett understreck innan tecknet " +"för snabbtangenten, så som ”_Arkiv”, till funktionerna :meth:`Gtk.Label." +"new_with_mnemonic` eller :meth:`Gtk.Label.set_text_with_mnemonic`. " +"Snabbtangenter aktiverar automatiskt alla aktiverbara komponenter som " +"etiketten är i, så som en :class:`Gtk.Button`; om etiketten inte är inuti " +"snabbtangentens målkomponent, så kommer du behöva säga till etiketten om " +"målet med :meth:`Gtk.Label.set_mnemonic_widget`." + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" +msgstr "" +"Pango Markup-syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "Layoutbehållare" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" +"Medan många verktygslådor för grafiska användargränssnitt tvingar dig att " +"precist placera komponenter i ett fönster med absolut positionering, så " +"använder GTK+ ett annat tillvägagångssätt. Snarare än att ange positionen " +"och storleken för varje komponent i fönstret så kan du arrangera dina " +"komponenter i rader, kolumner och/eller tabeller. Storleken på ditt fönster " +"kan avgöras automatiskt, baserat på storleken för de komponenter som det " +"innehåller. Storlekarna för komponenterna avgörs i sin tur av mängden text " +"som de innehåller, eller minimi- och maximistorlekarna som du anger, och/" +"eller hur du har begärt att det tillgängliga utrymmet ska delas mellan " +"uppsättningar av komponenter. Du kan göra din layout bättre genom att ange " +"utfyllnadsavstånd och centreringsvärden för var och en av dina komponenter. " +"GTK+ använder sedan all denna information för att ändra storlek och position " +"för allt på ett förnuftigt och smidigt sätt när användaren manipulerar " +"fönstret." + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" +"GTK+ arrangerar komponenter hierarkiskt, med *behållare*. De är osynliga för " +"slutanvändaren och infogas i ett fönster, eller placeras i varandra för att " +"skapa en layout för komponenter. Det finns två sorters behållare: behållare " +"med ett barn, vilka alla är ättlingar till :class:`Gtk.Bin`, och behållare " +"med flera barn, vilka är ättlingar till :class:`Gtk.Container`. De mest " +"använda är vertikala eller horisontella rutor (:class:`Gtk.Box`) och rutnät " +"(:class:`Gtk.Grid`)." + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "Rutor" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" +"Rutor är osynliga behållare som vi kan packa våra komponenter i. Då " +"komponenter packas i en horisontell ruta infogas objekten horisontellt från " +"vänster till höger eller höger till vänster beroende på huruvida :meth:`Gtk." +"Box.pack_start` eller :meth:`Gtk.Box.pack_end` används. I en vertikal ruta " +"packas komponenter uppifrån och ner eller omvänt. Du kan använda alla " +"tänkbara kombinationer av rutor i eller bredvid andra rutor för att skapa " +"önskad effekt." + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" +"Låt oss ta en titt på en något ändrad version av det utökade exemplet med " +"två knappar." + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" +"Vi skapar först en horisontellt orienterad rutbehållare där 6 bildpunkter " +"placeras mellan barn. Denna ruta blir barnet till toppnivåfönstret." + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "Därefter lägger vi till två olika knappar till rutbehållaren." + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" +"Medan komponenter positioneras från vänster till höger med :meth:`Gtk.Box." +"pack_start`, så positioneras de från höger till vänster med :meth:`Gtk.Box." +"pack_end`." + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "Grid" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" +":class:`Gtk.Grid` är en behållare som arrangerar sina barnkomponenter i " +"rader och kolumner, men du behöver inte ange dimensionerna i konstruktorn. " +"Barn läggs till med :meth:`Gtk.Grid.attach`. De kan spänna över flera rader " +"eller kolumner. Metoden :meth:`Gtk.Grid.attach` tar fem parametrar:" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "Parametern ``child`` är den :class:`Gtk.Widget` som ska läggas till." + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "``left`` är kolumnnumret att fästa vänster sida av ``child`` till." + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "``top`` indikerar radnumret att fästa översidan av ``child`` till." + +#: ../../source/layout.txt:76 +msgid "" +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." +msgstr "" +"``width`` och ``height`` indikerar antalet kolumner respektive rader som " +"``child`` kommer spänna över." + +#: ../../source/layout.txt:79 +msgid "" +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +msgstr "" +"Det är också möjligt att lägga till ett barn intill ett befintligt barn, " +"med :meth:`Gtk.Grid.attach_next_to`, vilket också tar fem parametrar:" + +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +msgstr "``child`` är den :class:`Gtk.Widget` som ska läggas till, som ovan." + +#: ../../source/layout.txt:83 +msgid "" +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." +msgstr "" +"``sibling`` är en befintlig barnkomponent till ``self`` (en :class:`Gtk." +"Grid`-instans) eller ``None``. ``child``-komponenten kommer placeras intill " +"``sibling``, eller om ``sibling`` är ``None``, i början eller slutet av " +"rutnätet." + +#: ../../source/layout.txt:86 +msgid "" +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." +msgstr "" +"``side`` är en :class:`Gtk.PositionType` som indikerar vilken sida av " +"``sibling`` som ``child`` positioneras intill." + +#: ../../source/layout.txt:88 +msgid "" +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." +msgstr "" +"``width`` och ``height`` indikerar antalet kolumner respektive rader som " +"komponenten ``child`` kommer spänna över." + +#: ../../source/layout.txt:91 +msgid "" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." +msgstr "" +"Slutligen kan :class:`Gtk.Grid` användas som en :class:`Gtk.Box` genom att " +"helt enkelt använda :meth:`Gtk.Grid.add`, vilken kommer placera barn intill " +"varandra i den riktning som avgörs av egenskapen ”orientation” (har " +"standardvärdet :attr:`Gtk.Orientation.HORIZONTAL`)." + +#: ../../source/layout.txt:105 +msgid "ListBox" +msgstr "ListBox" + +#: ../../source/layout.txt:107 +msgid "" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." +msgstr "" +"En :class:`Gtk.ListBox` är en vertikal behållare som innehåller :class:`Gtk." +"ListBoxRow`-barn. Dessa rader kan sorteras och filtreras dynamiskt, och " +"rubriker kan läggas till dynamiskt beroende på radinnehållet. Den tillåter " +"också tangentbords- och musnavigering samt markering som en typisk lista." + +# TODO: ie -> eg ? +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." +msgstr "" +"Att använda :class:`Gtk.ListBox` är ofta ett alternativ till :class:`Gtk." +"TreeView`, särskilt när listinnehållet har en mer komplicerad layout än vad " +"som tillåts av en :class:`Gtk.CellRenderer`, eller när innehållet är " +"interaktivt (t.ex. har en knapp i sig)." + +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." +msgstr "" +"Även om en :class:`Gtk.ListBox` endast får ha barn som är :class:`Gtk." +"ListBoxRow`, så kan du lägga till valfri komponent till den med :meth:`Gtk." +"Container.add`, så kommer automatiskt en :class:`Gtk.ListBoxRow`-komponent " +"infogas mellan listan och komponenten." + +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" +msgstr "Stack och StackSwitcher" + +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." +msgstr "" +"En :class:`Gtk.Stack` är en behållare som bara visar ett av sina barn åt " +"gången. Till skillnad från :class:`Gtk.Notebook` så tillhandahåller :class:" +"`Gtk.Stack` inte något sätt för användare att ändra det synliga barnet. " +"Istället kan komponenten :class:`Gtk.StackSwitcher` användas med :class:`Gtk." +"Stack` för att tillhandahålla denna funktionalitet." + +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." +msgstr "" +"Övergångar mellan sidor kan animeras som bildspel eller toningar. Detta kan " +"styras med :meth:`Gtk.Stack.set_transition_type`. Dessa animeringar följer " +"inställningen ”gtk-enable-animations”." + +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" +msgstr "" +"Övergångshastighet kan justeras med :meth:`Gtk.Stack.set_transition_duration`" + +#: ../../source/layout.txt:145 +msgid "" +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." +msgstr "" +"Komponenten :class:`Gtk.StackSwitcher` agerar som en styrenhet för en :class:" +"`Gtk.Stack`; den visar en knapprad för att växla mellan de olika sidorna för " +"den associerade stackkomponenten." + +#: ../../source/layout.txt:149 +msgid "" +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." +msgstr "" +"Allt innehåll för knapparna kommer från barnegenskaperna för :class:`Gtk." +"Stack`." + +#: ../../source/layout.txt:152 +msgid "" +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." +msgstr "" +"Det är möjligt att associera flera :class:`Gtk.StackSwitcher`-komponenter " +"med samma :class:`Gtk.Stack`-komponent." + +#: ../../source/layout.txt:164 +msgid "HeaderBar" +msgstr "HeaderBar" + +#: ../../source/layout.txt:166 +msgid "" +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." +msgstr "" +"En :class:`Gtk.HeaderBar` liknar en horisontell :class:`Gtk.Box`, den " +"tillåter att barn placeras i början eller slutet. Dessutom tillåter den att " +"en titel visas. Titeln kommer centreras med avseende på rutans bredd, även " +"om barnen på endera sida tar upp olika mycket utrymme." + +#: ../../source/layout.txt:171 +msgid "" +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." +msgstr "" +"Eftersom GTK+ nu stöder dekoration på klientsidan (CSD) så kan en :class:" +"`Gtk.HeaderBar` användas istället för namnlisten (vilken renderas av " +"fönsterhanteraren)." + +#: ../../source/layout.txt:174 +msgid "" +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." +msgstr "" +"En :class:`Gtk.HeaderBar` placeras vanligen högst upp i ett fönster och bör " +"innehålla vanligen använda kontroller som påverkar innehållet nedan. De " +"tillhandahåller också åtkomst till fönsterstyrkomponenter, vilket inkluderar " +"knappen för att stänga fönstret och fönstermenyn." + +#: ../../source/layout.txt:188 +msgid "FlowBox" +msgstr "FlowBox" + +#: ../../source/layout.txt:190 +msgid "This example requires at least GTK+ 3.12." +msgstr "Detta exempel kräver åtminstone GTK+ 3.12." + +#: ../../source/layout.txt:192 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." +msgstr "" +"En :class:`Gtk.FlowBox` är en behållare som positionerar barnkomponenter i " +"ordning enligt sin orientering." + +#: ../../source/layout.txt:195 +msgid "" +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." +msgstr "" +"Exempelvis kommer komponenterna vid horisontell orientering att arrangeras " +"från vänster till höger, och starta en ny rad under föregående rad då detta " +"är nödvändigt. Att minska bredden kommer i detta fall kräva fler rader, så " +"en större höjd kommer begäras." + +#: ../../source/layout.txt:200 +msgid "" +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." +msgstr "" +"På samma sätt kommer komponenterna vid vertikal orientering att arrangeras " +"uppifrån och ner, och starta en ny kolumn till höger då detta är nödvändigt. " +"Att minska höjden kommer kräva fler kolumner, så en större bredd kommer " +"begäras." + +#: ../../source/layout.txt:204 +msgid "" +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." +msgstr "" +"Barnen till en :class:`Gtk.FlowBox` kan sorteras och filtreras dynamiskt." + +#: ../../source/layout.txt:206 +msgid "" +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" +"Även om en :class:`Gtk.FlowBox` endast får ha barn som är :class:`Gtk." +"FlowBoxChild`, så kan du lägga till valfri komponent till den med :meth:`Gtk." +"Container.add`, så kommer automatiskt en :class:`Gtk.FlowBoxChild`-komponent " +"infogas mellan rutan och komponenten." + +#: ../../source/layout.txt:220 +msgid "Notebook" +msgstr "Notebook" + +#: ../../source/layout.txt:222 +msgid "" +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." +msgstr "" +"Komponenten :class:`Gtk.Notebook` är en :class:`Gtk.Container` vars barn är " +"sidor som kan växlas mellan med fliketiketter längs en kant." + +# TODO: Missing ) +#: ../../source/layout.txt:224 +msgid "" +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." +msgstr "" +"Det finns många konfigurationsalternativ för GtkNotebook. Bland annat kan du " +"välja på vilken kant flikarna visas (se :meth:`Gtk.Notebook.set_tab_pos`), " +"huruvida anteckningsboken ska göras större eller om rullningspilar ska " +"läggas till då det finns för många flikar för att rymmas (se :meth:`Gtk." +"Notebook.set_scrollable`), och huruvida det ska finnas en poppuppmeny som " +"låter användarna växla sidor (se :meth:`Gtk.Notebook.popup_enable`, :meth:" +"`Gtk.Notebook.popup_disable`)." + +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "Table" + +#: ../../source/layout-table.txt:4 +msgid "" +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." +msgstr "" +":class:`Gtk.Table` är föråldrat sedan GTK+ version 3.4 och bör inte användas " +"i nyskriven kod. Använd klassen :ref:`layout-grid` istället." + +#: ../../source/layout-table.txt:8 +msgid "" +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +msgstr "" +"Tabeller låter oss placera komponenter i ett rutnät liknande :class:`Gtk." +"Grid`." + +#: ../../source/layout-table.txt:10 +msgid "" +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +msgstr "" +"Rutnätets dimensioner behöver anges i :class:`Gtk.Table`-konstruktorn. För " +"att placera en komponent i en ruta, använd :meth:`Gtk.Table.attach`." + +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." +msgstr "" +":meth:`Gtk.Table.set_row_spacing` och :meth:`Gtk.Table.set_col_spacing` " +"ställer in utrymmet mellan raderna vid den angivna raden eller kolumnen. " +"Observera att för kolumner hamnar utrymmet till höger om kolumnen, och för " +"rader hamnar utrymmet under raden." + +#: ../../source/layout-table.txt:18 +msgid "" +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." +msgstr "" +"Du kan också ställa in ett enhetligt avstånd för alla rader och/eller " +"kolumner med :meth:`Gtk.Table.set_row_spacings` och :meth:`Gtk.Table." +"set_col_spacings`. Observera att med dessa anrop placeras inget utrymme " +"efter den sista raden och sista kolumnen." + +# TODO: recommended +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +msgstr "Du rekommenderas använda :class:`Gtk.Grid` för ny kod." + +#: ../../source/menus.txt:4 +msgid "" +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." +msgstr "" +":class:`Gtk.UIManager`, :class:`Gtk.Action` och :class:`Gtk.ActionGroup` är " +"föråldrade sedan GTK+ version 3.4 och bör inte användas i nyskriven kod. " +"Använd ramverket :ref:`application` istället." + +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." +msgstr "" +"GTK+ kommer med två olika sorters menyer, :class:`Gtk.MenuBar` och :class:" +"`Gtk.Toolbar`. :class:`Gtk.MenuBar` är en standardmenyrad vilken innehåller " +"en eller flera instanser av :class:`Gtk.MenuItem` eller en av dess " +"underklasser. :class:`Gtk.Toolbar`-komponenter används för snabb åtkomst " +"till vanligen använda funktioner för ett program. Exempel inkluderar att " +"skapa ett nytt dokument, skriva ut en sida eller ångra en operation. Den " +"innehåller en eller flera instanser av :class:`Gtk.ToolItem` eller en av " +"dess underklasser." + +#: ../../source/menus.txt:19 +msgid "" +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." +msgstr "" +"Även om det finns specifika API:er för att skapa menyer och verktygsfält så " +"bör du använda :class:`Gtk.UIManager` och skapa :class:`Gtk.Action`-" +"instanser. Åtgärder organiseras i grupper. En :class:`Gtk.ActionGroup` är i " +"huvudsak en avbildning från namn till :class:`Gtk.Action`-objekt. Alla " +"åtgärder som skulle vara rimliga att använda i ett visst sammanhang bör vara " +"i en enskild grupp. Flera åtgärdsgrupper kan användas för ett specifikt " +"användargränssnitt. Det förväntas faktiskt att de flesta icke-triviala " +"programmen använder flera grupper. Exempelvis ett program som kan redigera " +"flera dokument, med en grupp som innehåller globala åtgärder (t.ex. avsluta, " +"om, nytt), och en grupp per dokument som innehåller åtgärder som agerar på " +"det dokumentet (t.ex. spara, klipp ut/kopiera/klistra in o.s.v.). Varje " +"fönsters menyer skulle då konstrueras från en kombination av två " +"åtgärdsgrupper." + +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" +msgstr "Det finns olika klasser som representerar olika typer av åtgärd:" + +#: ../../source/menus.txt:33 +msgid "" +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" +msgstr "" +":class:`Gtk.Action`: En åtgärd som kan utlösas genom ett meny- eller " +"verktygsfältsobjekt" + +#: ../../source/menus.txt:35 +msgid "" +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +msgstr "" +":class:`Gtk.ToggleAction`: En åtgärd som kan växlas mellan två tillstånd" + +#: ../../source/menus.txt:36 +msgid "" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" +msgstr "" +":class:`Gtk.RadioAction`: En åtgärd för vilken endast en i en grupp kan vara " +"aktiv" + +#: ../../source/menus.txt:38 +msgid "" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" +msgstr "" +":class:`Gtk.RecentAction`: En åtgärd som representerar en lista över senast " +"använda filer" + +# TODO: that the user can perform +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." +msgstr "" +"Åtgärder representerar operationer som användaren kan utföra, tillsammans " +"med lite information om hur det ska visas i gränssnittet, inklusive dess " +"namn (ej för visning), dess etikett (för visning), en snabbtangent, huruvida " +"en etikett indikerar en inforuta såväl som återanropet som anropas när " +"åtgärden aktiveras." + +#: ../../source/menus.txt:47 +msgid "" +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" +msgstr "" +"Du kan skapa åtgärder antingen genom att anropa en av konstruktorerna direkt " +"och lägga till dem till en :class:`Gtk.ActionGroup` genom att anropa :meth:" +"`Gtk.ActionGroup.add_action` eller :meth:`Gtk.ActionGroup." +"add_action_with_accel`, eller genom att anropa en av " +"bekvämlighetsfunktionerna:" + +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," +msgstr ":meth:`Gtk.ActionGroup.add_actions`," + +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +msgstr ":meth:`Gtk.ActionGroup.add_toggle_actions`" + +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +msgstr ":meth:`Gtk.ActionGroup.add_radio_actions`." + +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." +msgstr "" +"Observera att du måste ange åtgärder för undermenyer såväl som för " +"menyobjekt." + +#: ../../source/menus.txt:59 +msgid "UI Manager" +msgstr "Användargränssnittshanterare" + +#: ../../source/menus.txt:61 +msgid "" +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." +msgstr "" +":class:`Gtk.UIManager` tillhandahåller ett enkelt sätt att skapa menyer och " +"verktygsfält med en `XML-liknande beskrivning `_." + +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." +msgstr "" +"Först bör du lägga till :class:`Gtk.ActionGroup` till " +"användargränssnittshanteraren med :meth:`Gtk.UIManager.insert_action_group`. " +"Vid denna punkt är det också god idé att säga till föräldrafönstret att " +"svara på de angivna tangentbordsgenvägarna genom att använda :meth:`Gtk." +"UIManager.get_accel_group` och :meth:`Gtk.Window.add_accel_group`." + +#: ../../source/menus.txt:69 +msgid "" +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." +msgstr "" +"Sedan kan du definiera den faktiska synliga layouten för menyerna och " +"verktygsfälten, och lägga till användargränssnittslayouten. Denna ”ui-" +"sträng” använder ett XML-format, i vilket du bör nämna namnen på åtgärderna " +"som du redan skapat. Kom ihåg att dessa namn bara är identifierarna som vi " +"använde då vi skapade åtgärderna. De är inte texten som användaren kommer se " +"i menyerna och verktygsfälten. Vi tillhandahöll dessa mänskligt läsbara namn " +"då vi skapade åtgärderna." + +#: ../../source/menus.txt:76 +msgid "" +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." +msgstr "" +"Slutligen erhåller du rotkomponenten med :meth:`Gtk.UIManager.get_widget` " +"och lägger till komponenten till en behållare så som :class:`Gtk.Box`." + +#: ../../source/objects.txt:4 +msgid "Objects" +msgstr "Objekt" + +#: ../../source/objects.txt:6 +msgid "" +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." +msgstr "" +"GObject är den grundläggande typen som tillhandahåller de gemensamma " +"attributen och metoderna för alla objekttyper i GTK+, Pango och andra " +"bibliotek baserade på GObject. Klassen :class:`GObject.GObject` " +"tillhandahåller metoder för skapande och förstörande av objekt, " +"åtkomstmetoder för egenskaper samt stöd för signaler." + +#: ../../source/objects.txt:11 +msgid "" +"This section will introduce some important aspects about the GObject " +"implementation in Python." +msgstr "" +"Detta avsnitt kommer introducera några viktiga aspekter om GObject-" +"implementationen i Python." + +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "Ärv från GObject.GObject" + +#: ../../source/objects.txt:17 +msgid "" +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." +msgstr "" +"Ett inhemskt GObject är åtkomligt via :class:`GObject.GObject`. Det " +"instansieras sällan direkt, vi använder i allmänhet ärvda klasser. En :class:" +"`Gtk.Widget` är en ärvd klass av ett :class:`GObject.GObject`. Det kan vara " +"intressant att göra en ärvd klass för att skapa en ny komponent, exempelvis " +"en inställningsdialog." + +#: ../../source/objects.txt:22 +msgid "" +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" +msgstr "" +"För att ärva från :class:`GObject.GObject` måste du anropa :meth:`GObject." +"GObject.__init__` i din konstruktor (om klassen exempelvis ärver från :class:" +"`Gtk.Button` så måste den anropa :func:`Gtk.Button.__init__`), som i " +"exemplet nedan:" + +#: ../../source/objects.txt:37 +msgid "Signals" +msgstr "Signaler" + +#: ../../source/objects.txt:39 +msgid "" +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." +msgstr "" +"Signaler ansluter godtyckliga programspecifika händelser till ett valfritt " +"antal lyssnare. Till exempel så tas i GTK+ varje användarhändelse " +"(tangenttryckning eller musrörelse) emot från X-servern och genererar en GTK" +"+-händelse i form av en signalutsändning på en given objektinstans." + +#: ../../source/objects.txt:44 +msgid "" +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." +msgstr "" +"Varje signal registreras i typsystemet tillsammans med typen på vilken den " +"kan sändas ut: användare av typen sägs ansluta till signalen på en given " +"typinstans när de registrerar en funktion som ska anropas vid " +"signalutsändning. Användare kan också sända ut signalen själva eller stoppa " +"utsändningen av signalen inifrån en av funktionerna som är anslutna till " +"signalen." + +#: ../../source/objects.txt:51 +msgid "Receive signals" +msgstr "Ta emot signaler" + +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" +msgstr "Se :ref:`signals`" + +#: ../../source/objects.txt:56 +msgid "Create new signals" +msgstr "Skapa nya signaler" + +#: ../../source/objects.txt:58 +msgid "" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" +msgstr "" +"Nya signaler kan skapas genom att lägga till dem till :attr:`GObject.GObject." +"__gsignals__`, en ordbok:" + +#: ../../source/objects.txt:61 +msgid "" +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." +msgstr "" +"Då en ny signal skapas kan en metodhanterare också definieras, den kommer " +"anropas varje gång signalen sänds ut. Den kallas do_signalnamn." + +#: ../../source/objects.txt:75 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` indikerar att denna signal kommer anropa " +"objektets metodhanterare (här :meth:`do_my_signal`) i det första " +"utsändningssteget. Alternativ är :const:`GObject.SIGNAL_RUN_LAST` " +"(metodhanteraren kommer anropas i det tredje utsändningssteget) och :const:" +"`GObject.SIGNAL_RUN_CLEANUP` (anropa metodhanteraren i det sista " +"utsändningssteget)." + +#: ../../source/objects.txt:81 +msgid "" +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." +msgstr "" +"Den andra delen, ``None``, indikerar returtypen för signalen, vanligen " +"``None``." + +#: ../../source/objects.txt:84 +msgid "" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. Types of arguments required by signal are " +"declared as a sequence, here it is a one-element tuple." +msgstr "" +"``(int,)`` indikerar signalargumenten, här kommer signalen bara ta ett " +"argument, vars typ är int. Typer av argument som krävs av signalen " +"deklareras som en sekvens, här är det en tupel med ett argument." + +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +msgstr "Signaler kan sändas ut med :meth:`GObject.GObject.emit`:" + +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." +msgstr "" +"En av de trevliga funktionerna med GObject är dess allmäna get/set-mekanism " +"för objektegenskaper. Varje klass som ärver från :class:`GObject.GObject` " +"kan definiera nya egenskaper. Varje egenskap har en typ som aldrig ändras (t." +"ex. str, float, int…). De används exempelvis för :class:`Gtk.Button` där det " +"finns en egenskap ”label” som innehåller knappens text." + +#: ../../source/objects.txt:104 +msgid "Use existing properties" +msgstr "Använd befintliga egenskaper" + +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." +msgstr "" +"Klassen :class:`GObject.GObject` tillhandahåller flera användbara funktioner " +"för att hantera befintliga egenskaper, :func:`GObject.GObject.get_property` " +"och :func:`GObject.GObject.set_property`." + +#: ../../source/objects.txt:109 +msgid "" +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." +msgstr "" +"Vissa egenskaper har också avsedda get- och set-funktioner. För egenskapen " +"”label” för en knapp finns det två funktioner för att erhålla och ställa in " +"den, :func:`Gtk.Button.get_label` och :func:`Gtk.Button.set_label`." + +#: ../../source/objects.txt:114 +msgid "Create new properties" +msgstr "Skapa nya egenskaper" + +#: ../../source/objects.txt:116 +msgid "" +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." +msgstr "" +"En egenskap definieras med ett namn och en typ. Även om Python i sig är " +"dynamiskt typat så kan du inte ändra typen för en egenskap efter att den " +"definierats. En egenskap kan skapas med :class:`GObject.Property`." + +#: ../../source/objects.txt:131 +msgid "" +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" +msgstr "" +"Egenskaper kan också vara skrivskyddade om du vill att några egenskaper ska " +"vara läsbara men inte skrivbara. För att göra detta kan du lägga till några " +"flaggor till egenskapsdefinitionen för att styra läs/skriv-åtkomst. Flaggor " +"är :const:`GObject.ParamFlags.READABLE` (endast läsåtkomst för extern kod), :" +"const:`GObject.ParamFlags.WRITABLE` (endast skrivåtkomst), :const:`GObject." +"ParamFlags.READWRITE` (öppen):" + +#: ../../source/objects.txt:146 +msgid "" +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" +msgstr "" +"Du kan också definiera nya skrivskyddade egenskaper med en ny metod " +"dekorerad med :class:`GObject.Property`:" + +#: ../../source/objects.txt:162 +msgid "You can get this property using:" +msgstr "Du kan få denna egenskap med:" + +#: ../../source/objects.txt:170 +msgid "" +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" +msgstr "" +"API:t för :class:`GObject.Property` liknar den inbyggda :py:func:`property`. " +"Du kan skapa egenskapsinställare på ett sätt liknande Python-egenskaper:" + +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" +msgstr "" +"Det finns också ett sätt att definiera minsta och största värden för tal, " +"med en mer utförlig form:" + +#: ../../source/objects.txt:227 +msgid "" +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." +msgstr "" +"Egenskaper måste definieras i :attr:`GObject.GObject.__gproperties__`, en " +"ordbok, och hanteras i do_get_property och do_set_property." + +#: ../../source/objects.txt:231 +msgid "Watch properties" +msgstr "Bevaka egenskaper" + +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" +msgstr "" +"När en egenskap ändras sänds en signal ut, vars namn är ”notify::" +"egenskapsnamn”:" + +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" +msgstr "" +"Observera att du måste använda det kanoniska egenskapsnamnet då du ansluter " +"till notify-signalerna, som förklaras i :func:`GObject.Object.signals." +"notify`. För en Python-egenskap `foo_bar_baz` skulle du exempelvis ansluta " +"till signalen `notify::foo-bar-baz` med" + +#: ../../source/objects.txt:263 +msgid "API" +msgstr "API" + +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." +msgstr "Erhåller ett egenskapsvärde." + +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." +msgstr "Ställer in egenskapen *property_name* till *value*." + +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" +msgstr "" +"Sänd ut signalen *signal_name*. Signalargument måste följa, t.ex. om din " +"signal är av typen ``(int,)`` så måste den sändas ut med::" + +#: ../../source/objects.txt:284 +msgid "" +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." +msgstr "" +"Denna metod fryser alla ”notify::”-signalerna (som sänds ut då någon " +"egenskap ändras) till metoden :meth:`thaw_notify` anropas." + +# TODO: It is recommended +#: ../../source/objects.txt:288 +msgid "" +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" +msgstr "" +"Det rekommenderas att använda *with*-satsen vid anrop av :meth:" +"`freeze_notify`, på det viset säkerställs att :meth:`thaw_notify` anropas " +"implicit i slutet på blocket::" + +# TODO: which were frozen +#: ../../source/objects.txt:298 +msgid "" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +msgstr "Tina alla ”notify::”-signalerna som frystes av :meth:`freeze_notify`." + +#: ../../source/objects.txt:300 +msgid "" +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." +msgstr "" +"Det rekommenderas att inte anropa :meth:`thaw_notify` explicit utan anropa :" +"meth:`freeze_notify` tillsammans med *with*-satsen." + +#: ../../source/objects.txt:305 +msgid "" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." +msgstr "" +"Blockerar en hanterare av en instans så att den inte kommer att anropas " +"under några signalutsändningar om inte :meth:`handler_unblock` anropas för " +"detta *handler_id*. Att ”blockera” en signalhanterare betyder därmed att " +"tillfälligt inaktivera den, en signalhanterare behöver avblockeras exakt det " +"antal gånger som den har blockerats innan den blir aktiv igen." + +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" +msgstr "" +"Det rekommenderas att använda :meth:`handler_block` tillsammans med *with*-" +"satsen som kommer anropa :meth:`handler_unblock` implicit i slutet på " +"blocket::" + +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." +msgstr "" +"Gör effekten av :meth:`handler_block` ogjord. En blockerad hanterare hoppas " +"över under signalutsändningar och kommer inte anropas förrän den har " +"avblockerats exakt det antal gånger som den tidigare blockerats." + +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." +msgstr "" +"Det rekommenderas att inte anropa :meth:`handler_unblock` explicit utan " +"anropa :meth:`handler_block` tillsammans med *with*-satsen." + +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." +msgstr "En ordbok där en ärvd klass kan definiera nya signaler." + +#: ../../source/objects.txt:332 +msgid "" +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" +msgstr "" +"Varje element i ordboken är en ny signal. Nyckeln är signalnamnet. Värdet är " +"en tupel med formen::" + +#: ../../source/objects.txt:337 +msgid "" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the tuple of the parameters of the " +"signal." +msgstr "" +":const:`GObject.SIGNAL_RUN_FIRST` kan ersättas med :const:`GObject." +"SIGNAL_RUN_LAST` eller :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` är " +"returtypen för signalen. ``(int,)`` är parametertupeln för signalen." + +# TODO: not the recommended +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." +msgstr "" +"Ordboken :attr:`__gproperties__` är en klassegenskap där du definierar ditt " +"objekts egenskaper. Detta är inte det rekommenderade sättet att skapa nya " +"egenskaper, metoden ovan är mycket kortare. Fördelarna med denna metod är " +"att en egenskap kan definieras med fler inställningar, som minsta eller " +"största värde för tal." + +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" +msgstr "Nyckeln är namnet på egenskapen" + +#: ../../source/objects.txt:354 +msgid "" +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" +msgstr "" +"Värdet är en tupel som beskriver egenskapen. Antalet element i denna tupel " +"beror på dess första element, men tupeln kommer alltid innehålla åtminstone " +"följande objekt:" + +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +msgstr "Det första elementet är egenskapens typ (t.ex. ``int``, ``float``…)." + +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." +msgstr "" +"Det andra elementet är egenskapens smeknamn, vilket är en sträng med en kort " +"beskrivning av egenskapen. Detta används vanligen av program med starka " +"introspektionsförmågor, som den grafiska användargränssnittsbyggaren " +"`Glade`_." + +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." +msgstr "" +"Det tredje är egenskapens beskrivning eller blurb, vilket är en annan sträng " +"med en längre beskrivning av egenskapen. Används också av `Glade`_ och " +"liknande program." + +#: ../../source/objects.txt:369 +msgid "" +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +msgstr "" +"Det sista (vilket inte nödvändigtvis är det fjärde som vi kommer se senare) " +"är egenskapens flaggor: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." + +#: ../../source/objects.txt:373 +msgid "" +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" +msgstr "" +"Den absoluta längden på tupeln beror på egenskapstypen (tupelns första " +"element). Därmed har vi följande situationer:" + +#: ../../source/objects.txt:376 +msgid "" +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." +msgstr "" +"Om typen är ``bool`` eller ``str`` så är det fjärde elementet standardvärdet " +"för egenskapen." + +#: ../../source/objects.txt:379 +msgid "" +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." +msgstr "" +"Om typen är ``int`` eller ``float`` så är det fjärde elementet det minsta " +"accepterade värdet, det femte elementet det största accepterade värdet, och " +"det sjätte elementet är standardvärdet." + +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." +msgstr "Om typen inte är någon av dessa så finns det inget extra element." + +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." +msgstr "Anropa objektets metodhanterare i det första utsändningssteget." + +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." +msgstr "Anropa objektets metodhanterare i det tredje utsändningssteget." + +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." +msgstr "Anropa objektets metodhanterare i det sista utsändningssteget." + +#: ../../source/objects.txt:400 +msgid "The property is readable." +msgstr "Egenskapen är läsbar." + +#: ../../source/objects.txt:404 +msgid "The property is writable." +msgstr "Egenskapen är skrivbar." + +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." +msgstr "Egenskapen är läsbar och skrivbar." + +#: ../../source/popover.txt:2 +msgid "Popovers" +msgstr "Kontextfönster" + +# TODO: Popovers are visually connected +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a separate window used for displaying additional " +"information and is often used with button menus and context menus. Popovers " +"are visually connected to a related widget with a small triangle. Their uses " +"are similar to those of dialog windows with the advantage of being less " +"disruptive and having a connection with the widget the popover is pointing " +"to." +msgstr "" +":class:`Gtk.Popover` är ett separat fönster som används för att visa " +"ytterligare information och ofta används som en del av knappmenyer och " +"snabbvalsmenyer. Kontextfönster är visuellt anslutna till en relaterad " +"komponent med en liten triangel. Deras användning liknar de hos " +"dialogfönster med fördelen att de är mindre störande och har en anslutning " +"till komponenten som kontextfönstret pekar på." + +#: ../../source/popover.txt:10 +msgid "" +"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Popover.popup`." +msgstr "" +"Ett kontextfönster kan skapas med :class:`Gtk.Popover`; använd :meth:`Gtk." +"Popover.popup` för att öppna kontextfönstret." + +#: ../../source/popover.txt:14 +msgid "Custom Popover" +msgstr "Anpassat kontextfönster" + +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using :meth:`Gtk.Container.add`." +msgstr "" +"En komponent kan läggas till ett kontextfönster med :meth:`Gtk.Container." +"add`." + +#: ../../source/popover.txt:27 +msgid "Menu Popover" +msgstr "Menykontextfönster" + +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." +msgstr "" +"Ett kontextfönster kan skapas från en :class:`Gio.MenuModel` med :meth:`Gtk." +"Popover.new_from_model` och kan ändras efter att det skapats med :meth:`Gtk." +"Popover.bind_model`." + +#: ../../source/popover.txt:33 +msgid "" +"Passing a :class:`Gio.MenuModel` as a :data:`menu_model ` argument to the :class:`Gtk.MenuButton` constructor " +"implicitly creates a popover." +msgstr "" +"Att skicka en :class:`Gio.MenuModel` som ett :data:`menu_model `-argument till :class:`Gtk.MenuButton`-" +"konstruktorn skapar implicit ett kontextfönster." + +#: ../../source/popover.txt:47 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +msgstr "https://developer.gnome.org/hig/stable/popovers.html.sv" + +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" +msgstr "ProgressBar" + +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." +msgstr "" +":class:`Gtk.ProgressBar` används typiskt för att visa förloppet för en " +"operation som pågår länge. Den tillhandahåller en visuell ledtråd om att " +"bearbetning pågår. :class:`Gtk.ProgressBar` kan användas i två olika lägen: " +"*procentläge* och *aktivitetsläge*." + +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." +msgstr "" +"Då ett program kan avgöra hur mycket arbete som behöver utföras (t.ex. läsa " +"ett fast antal byte från en fil) och kan övervaka sina framsteg, så kan det " +"använda :class:`Gtk.ProgressBar` i *procentläge*, så ser användaren en " +"växande stapel som indikerar procentdelen av arbetet som har slutförts. I " +"detta läge behöver programmet anropa :meth:`Gtk.ProgressBar.set_fraction` " +"periodiskt för att uppdatera förloppsindikatorn, och skicka med ett flyttal " +"mellan 0 och 1 för att tillhandahålla det nya procentvärdet." + +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." +msgstr "" +"Då ett program inte har något exakt sätt att veta mängden arbete det måste " +"utföra, kan det använda *aktivitetsläge*, som visar aktivitet med ett block " +"som rör sig fram och tillbaka i förloppsområdet. I detta läget behöver " +"programmet anropa :meth:`Gtk.ProgressBar.pulse` periodiskt för att uppdatera " +"förloppsindikatorn. Du kan också välja stegstorleken, med metoden :meth:`Gtk." +"ProgressBar.set_pulse_step`." + +#: ../../source/progressbar.txt:24 +msgid "" +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." +msgstr "" +"Som standard är :class:`Gtk.ProgressBar` horisontell och vänster-till-höger, " +"men du kan ändra den till en vertikal förloppsindikator genom att använda " +"metoden :meth:`Gtk.ProgressBar.set_orientation`. Att ändra riktningen som " +"förloppsindikatorn växer kan göras med :meth:`Gtk.ProgressBar." +"set_inverted`. :class:`Gtk.ProgressBar` kan också innehålla text som kan " +"ställas in genom att anropa :meth:`Gtk.ProgressBar.set_text` och :meth:`Gtk." +"ProgressBar.set_show_text`." + +#: ../../source/spinner.txt:2 +msgid "Spinner" +msgstr "Spinner" + +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." +msgstr "" +":class:`Gtk.Spinner` visar en snurrande animering av ikonstorlek. Den " +"används ofta som ett alternativ till en :class:`GtkProgressBar` för att visa " +"aktivitet av obestämd längd, istället för det faktiska förloppet." + +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." +msgstr "" +"För att starta animeringen, använd :meth:`Gtk.Spinner.start`. För att stoppa " +"den, använd :meth:`Gtk.Spinner.stop`." + +#: ../../source/spinner.txt:20 +msgid "Extended example" +msgstr "Utökat exempel" + +#: ../../source/spinner.txt:22 +msgid "" +"An extended example that uses a timeout function to start and stop the " +"spinning animation. The :func:`on_timeout` function is called at regular " +"intervals until it returns ``False``, at which point the timeout is " +"automatically destroyed and the function will not be called again." +msgstr "" +"Ett utökat exempel som använder en tidsgränsfunktion för att starta och " +"stoppa den snurrande animeringen. Funktionen :func:`on_timeout` anropas med " +"regelbundna intervall till den returnerar ``False``, och vid denna tidpunkt " +"förstörs tidsgränsen automatiskt, och funktionen kommer inte anropas igen." + +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" +msgstr "Textredigerare med flera rader" + +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." +msgstr "" +"Komponenten :class:`Gtk.TextView` kan användas för att visa och redigera " +"stora mängder av formaterad text. Som :class:`Gtk.TreeView` har den en model/" +"view-design. I detta fall är :class:`Gtk.TextBuffer` modellen som " +"representerar texten som redigeras. Detta låter två eller fler :class:`Gtk." +"TextView`-komponenter dela på samma :class:`Gtk.TextBuffer`, och låter dessa " +"textbuffrar visas något annorlunda. Eller så kan du underhålla flera " +"textbuffrar och välja att visa var och en vid olika tider i samma :class:" +"`Gtk.TextView`-komponent." + +#: ../../source/textview.txt:13 ../../source/treeview.txt:144 +msgid "The View" +msgstr "Vyn" + +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." +msgstr "" +":class:`Gtk.TextView` är framänden med vilken användaren kan lägga till, " +"redigera och ta bort textdata. De används vanligen för att redigera flera " +"rader av text. Då du skapar en :class:`Gtk.TextView` innehåller den sin egen " +"standard-:class:`Gtk.TextBuffer`, vilken du kan komma åt via metoden :meth:" +"`Gtk.TextView.get_buffer`." + +#: ../../source/textview.txt:21 +msgid "" +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." +msgstr "" +"Som standard kan text läggas till, redigeras och tas bort från :class:`Gtk." +"TextView`. Du kan inaktivera detta genom att anropa :meth:`Gtk.TextView." +"set_editable`. Om texten inte är redigerbar vill du vanligen även dölja " +"textmarkören med :meth:`Gtk.TextView.set_cursor_visible`. I vissa fall kan " +"det vara användbart att ställa in justeringen av texten med :meth:`Gtk." +"TextView.set_justification`. Texten kan visas i vänstra kanten, (:attr:`Gtk." +"Justification.LEFT`), i högra kanten (:attr:`Gtk.Justification.RIGHT`), " +"centrerad (:attr:`Gtk.Justification.CENTER`) eller jämnt fördelad över hela " +"bredden (:attr:`Gtk.Justification.FILL`)." + +#: ../../source/textview.txt:31 +msgid "" +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." +msgstr "" +"En annan standardinställning för :class:`Gtk.TextView`-komponenten är att " +"långa textrader kommer fortsätta horisontellt till ett avbrott matas in. För " +"att radbryta texten och förhindra den från att försvinna utanför skärmens " +"kanter, anropa :meth:`Gtk.TextView.set_wrap_mode`." + +#: ../../source/textview.txt:36 ../../source/treeview.txt:21 +msgid "The Model" +msgstr "Modellen" + +#: ../../source/textview.txt:38 +msgid "" +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." +msgstr "" +":class:`Gtk.TextBuffer` är kärnan av :class:`Gtk.TextView`-komponenten, och " +"används för att hålla vadhelst för text som visas i :class:`Gtk.TextView`. " +"Att ställa in och erhålla innehållet är möjligt med :meth:`Gtk.TextBuffer." +"set_text` och :meth:`Gtk.TextBuffer.get_text`. Den mesta textmanipuleringen " +"utförs dock med *iteratorer*, representerade av en :class:`Gtk.TextIter`. En " +"iterator representerar en position mellan två tecken i textbufferten. " +"Iteratorer är inte giltiga för alltid, närhelst bufferten ändras på ett sätt " +"som påverkar buffertens innehåll så blir alla tidigare iteratorer ogiltiga." + +#: ../../source/textview.txt:48 +msgid "" +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." +msgstr "" +"På grund av detta kan iteratorer inte användas för att bevara positioner " +"över buffertändringar. För att bevara en position, använd :class:`Gtk." +"TextMark`. En textbuffert innehåller två inbyggda märken; ett ”insert”-märke " +"(som är markörens position) och märket ”selection_bound”. Båda av dem kan " +"erhållas med :meth:`Gtk.TextBuffer.get_insert` respektive :meth:`Gtk." +"TextBuffer.get_selection_bound`. Som standard visas inte platsen för en :" +"class:`Gtk.TextMark`. Detta kan ändras genom att anropa :meth:`Gtk.TextMark." +"set_visible`." + +#: ../../source/textview.txt:56 +msgid "" +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." +msgstr "" +"Många metoder finns för att erhålla en :class:`Gtk.TextIter`. Exempelvis " +"returnerar :meth:`Gtk.TextBuffer.get_start_iter` en iterator som pekar på " +"den första positionen i textbufferten, medan :meth:`Gtk.TextBuffer." +"get_end_iter` returnerar en iterator som pekar bortom det sista giltiga " +"tecknet. Att erhålla gränserna för den markerade texten kan åstadkommas " +"genom att anropa :meth:`Gtk.TextBuffer.get_selection_bounds`." + +#: ../../source/textview.txt:63 +msgid "" +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +msgstr "" +"För att infoga text på en specifik position, använd :meth:`Gtk.TextBuffer." +"insert`. En annan användbar metod är :meth:`Gtk.TextBuffer.insert_at_cursor` " +"som infogar text varhelst markören är placerad för tillfället. Använd :meth:" +"`Gtk.TextBuffer.delete` för att ta bort delar av textbufferten." + +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." +msgstr "" +"Dessutom kan :class:`Gtk.TextIter` användas för att hitta sökträffar på text " +"i bufferten med :meth:`Gtk.TextIter.forward_search` och :meth:`Gtk.TextIter." +"backward_search`. Start- och slutiteratorerna används som startpunkten för " +"sökningen och går framåt/bakåt beroende på kraven." + +#: ../../source/textview.txt:75 +msgid "Tags" +msgstr "Taggar" + +#: ../../source/textview.txt:77 +msgid "" +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." +msgstr "" +"Text i en buffert kan markeras med taggar. En tagg är ett attribut som kan " +"tillämpas på något textintervall. Exempelvis kan en tagg vara kallad ”bold” " +"och få texten i taggen att vara i fetstil. Taggkonceptet är dock mer allmänt " +"än så; taggar behöver inte påverka utseende. De kan istället påverka " +"beteendet för mus- och tangentryck, ”låsa” ett textintervall så att " +"användaren inte kan redigera det samt många andra saker. En tagg " +"representeras av ett :class:`Gtk.TextTag`-objekt. En :class:`Gtk.TextTag` " +"kan tillämpas på ett valfritt antal textintervall i ett valfritt antal " +"buffertar." + +#: ../../source/textview.txt:86 +msgid "" +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." +msgstr "" +"Varje tagg lagras i en :class:`Gtk.TextTagTable`. En taggtabell definierar " +"en uppsättning taggar som kan användas tillsammans. Varje buffert har en " +"taggtabell associerad med sig; endast taggar från den taggtabellen kan " +"användas med bufferten. En enda taggtabell kan dock delas mellan flera " +"buffertar." + +#: ../../source/textview.txt:91 +msgid "" +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" +msgstr "" +"För att ange att någon text i bufferten ska ha specifik formatering så måste " +"du definiera en tagg för att hålla den formateringsinformationen, och sedan " +"tillämpa den taggen på textregionen med :meth:`Gtk.TextBuffer.create_tag` " +"och :meth:`Gtk.TextBuffer.apply_tag`::" + +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" +msgstr "Följande är några av de vanliga stilarna som tillämpas på text:" + +# TODO: mixed up. Should be Foreground color +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" +msgstr "Förgrundsfärg (egenskapen ”foreground”)" + +# TODO: mixed up. Should be Background +# color +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" +msgstr "Bakgrundsfärg (egenskapen ”background”)" + +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" +msgstr "Understruken (egenskapen ”underline”)" + +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" +msgstr "Fet (egenskapen ”weight”)" + +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" +msgstr "Kursiv (egenskapen ”style”)" + +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" +msgstr "Genomstruken (egenskapen ”strikethrough”)" + +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" +msgstr "Justering (egenskapen ”justification”)" + +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" +msgstr "Storlek (egenskaperna ”size” och ”size-points”)" + +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" +msgstr "Radbrytning av text (egenskapen ”wrap-mode”)" + +#: ../../source/textview.txt:111 +msgid "" +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." +msgstr "" +"Du kan också ta bort specifika taggar senare med :meth:`Gtk.TextBuffer." +"remove_tag` eller ta bort alla taggar i en angiven region genom att anropa :" +"meth:`Gtk.TextBuffer.remove_all_tags`." + +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" +msgstr "Träd- och listkomponenter" + +#: ../../source/treeview.txt:4 +msgid "" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" +msgstr "" +"En :class:`Gtk.TreeView` och dess associerade komponenter är ett extremt " +"kraftfullt sätt att visa data. De används tillsammans med en :class:`Gtk." +"ListStore` eller :class:`Gtk.TreeStore` och tillhandahåller ett sätt att " +"visa och manipulera data på många sätt, inklusive:" + +#: ../../source/treeview.txt:9 +msgid "Automatic updates when data is added, removed or edited" +msgstr "Automatiska uppdateringar då data läggs till, tas bort eller redigeras" + +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" +msgstr "Stöd för dra-och-släpp" + +#: ../../source/treeview.txt:11 +msgid "Sorting data" +msgstr "Sortering av data" + +#: ../../source/treeview.txt:12 +msgid "Embedding widgets such as check boxes, progress bars, etc." +msgstr "" +"Inbäddning av komponenter så som kryssrutor, förloppsindikatorer o.s.v." + +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" +msgstr "Kolumner som går att ordna om och ändra storlek på" + +#: ../../source/treeview.txt:14 +msgid "Filtering data" +msgstr "Filtrering av data" + +#: ../../source/treeview.txt:16 +msgid "" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." +msgstr "" +"Med kraften och flexibiliteten hos en :class:`Gtk.TreeView` kommer " +"komplexitet. Det är ofta svårt för nybörjarutvecklare att kunna använda den " +"korrekt på grund av de antal metoder som krävs." + +#: ../../source/treeview.txt:22 +msgid "" +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." +msgstr "" +"Varje :class:`Gtk.TreeView` har en associerad :class:`Gtk.TreeModel` som " +"innehåller de data som visas av denna TreeView. Varje :class:`Gtk.TreeModel` " +"kan användas av mer än en :class:`Gtk.TreeView`. Exempelvis låter detta " +"samma underliggande data visas och redigeras på två olika sätt på samma " +"gång. Eller så kan de två vyerna visa olika kolumner från samma Model-data, " +"på samma sätt som två SQL-frågor (eller ”vyer”) kan visa olika fält från " +"samma databastabell." + +#: ../../source/treeview.txt:30 +msgid "" +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." +msgstr "" +"Även om du teoretiskt kan implementera din egen Model, så kommer du vanligen " +"använda antingen modellklasserna :class:`Gtk.ListStore` eller :class:`Gtk." +"TreeStore`. :class:`Gtk.ListStore` innehåller enkla rader med data, och " +"varje rad har inget barn, medan :class:`Gtk.TreeStore` innehåller rader av " +"data, och varje rad kan ha barnrader." + +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." +msgstr "" +"Då du konstruerar en modell måste du ange datatyperna för varje kolumn som " +"modellen innehåller." + +#: ../../source/treeview.txt:43 +msgid "" +"This creates a list store with three columns, two string columns, and a " +"float column." +msgstr "" +"Detta skapar en listlagring med tre kolumner, två strängkolumner och en " +"flyttalskolumn." + +#: ../../source/treeview.txt:46 +msgid "" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." +msgstr "" +"Att lägga till data till modellen görs med :meth:`Gtk.ListStore.append` " +"eller :meth:`Gtk.TreeStore.append`, beroende på vilken sorts modell som " +"skapades." + +#: ../../source/treeview.txt:49 +msgid "For a :class:`Gtk.ListStore`:" +msgstr "För en :class:`Gtk.ListStore`:" + +#: ../../source/treeview.txt:56 +msgid "" +"For a :class:`Gtk.TreeStore` you must specify an existing row to append the " +"new row to, using a :class:`Gtk.TreeIter`, or None for the top level of the " +"tree:" +msgstr "" +"För en :class:`Gtk.TreeStore` måste du ange en befintlig rad att lägga till " +"den nya raden till, med en :class:`Gtk.TreeIter`, eller None för toppnivån " +"på trädet:" + +#: ../../source/treeview.txt:64 +msgid "" +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." +msgstr "" +"Båda metoderna returnerar en :class:`Gtk.TreeIter`-instans, vilken pekar på " +"platsen för den nyligen infogade raden. Du kan erhålla en :class:`Gtk." +"TreeIter` genom att anropa :meth:`Gtk.TreeModel.get_iter`." + +#: ../../source/treeview.txt:68 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." +msgstr "" +"När data har infogats kan du erhålla eller ändra data med träditeratorn och " +"kolumnindexet." + +#: ../../source/treeview.txt:76 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." +msgstr "" +"Som med Pythons inbyggda :class:`list`-objekt kan du använda :func:`len` för " +"att få antalet rader och använda slicing för att få eller ställa in värden." + +#: ../../source/treeview.txt:90 +msgid "Iterating over all rows of a tree model is very simple as well." +msgstr "Att iterera över alla rader i en trädmodell är också väldigt enkelt." + +#: ../../source/treeview.txt:98 +msgid "" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows, use :meth:`Gtk.TreeModel.foreach`." +msgstr "" +"Tänk på att om du använder :class:`Gtk.TreeStore` kommer koden ovan endast " +"iterera över raderna på toppnivån, inte nodernas barn. För att iterera över " +"alla rader, använd :meth:`Gtk.TreeModel.foreach`." + +#: ../../source/treeview.txt:109 +msgid "" +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." +msgstr "" +"Förutom att komma åt värden lagrade i en :class:`Gtk.TreeModel` med den " +"listliknande metoden nämnd ovan, så är det också möjligt att använda " +"instanser av antingen :class:`Gtk.TreeIter` eller :class:`Gtk.TreePath`. " +"Båda hänvisar till en specifik rad i en trädmodell. Man kan konvertera en " +"stig till en iterator genom att anropa :meth:`Gtk.TreeModel.get_iter`. Då :" +"class:`Gtk.ListStore` innehåller endast en nivå, d.v.s. att noder inte har " +"några barnnoder, så är en stig helt enkelt indexet för raden som du vill " +"komma åt." + +#: ../../source/treeview.txt:126 +msgid "" +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." +msgstr "" +"I fallet för :class:`Gtk.TreeStore` är en stig en lista över index eller en " +"sträng. Strängformen är en lista över tal som skiljs åt av ett kolon. Varje " +"tal hänvisar till positionen på den nivån. Därmed hänvisar stigen ”0” till " +"rotnoden och stigen ”2:4” till det femte barnet till den tredje noden." + +#: ../../source/treeview.txt:139 +msgid "" +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." +msgstr "" +"Instanser av :class:`Gtk.TreePath` kan kommas åt som listor, d.v.s. " +"``len(treepath)`` returnerar djupet på objektet som ``treepath`` pekar på, " +"och ``treepath[i]`` returnerar barnets index på nivå *i*." + +#: ../../source/treeview.txt:145 +msgid "" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." +msgstr "" +"Medan det finns flera olika modeller att välja på, så finns det endast en " +"vykomponent att hantera, Den fungerar med antingen listan eller " +"trädlagringen. Att konfigurera en :class:`Gtk.TreeView` är inte svårt. Den " +"behöver en :class:`Gtk.TreeModel` för att veta var den ska erhålla sina data " +"från, antingen genom att skicka det till :class:`Gtk.TreeView`-konstruktorn, " +"eller genom att anropa :meth:`Gtk.TreeView.set_model`." + +#: ../../source/treeview.txt:156 +msgid "" +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." +msgstr "" +"Då komponenten :class:`Gtk.TreeView` har en modell kommer den behöva veta " +"hur den ska visa modellen. Den gör detta med kolumner och cellrenderare." + +#: ../../source/treeview.txt:159 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." +msgstr "" +"Cellrenderare används för att rita data i trädmodellen på ett sätt. Det " +"finns ett antal cellrenderare som kommer med GTK+, exempelvis :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` och :class:`Gtk." +"CellRendererToggle`. Vidare är det relativt enkelt att själv skriva en " +"anpassad renderare." + +#: ../../source/treeview.txt:165 +msgid "" +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." +msgstr "" +"En :class:`Gtk.TreeViewColumn` är objektet som :class:`Gtk.TreeView` " +"använder för att organisera de vertikala kolumnerna i trädvyn. Det behöver " +"veta namnet på kolumnen att etikettera för användaren, vilken typ av " +"cellrenderare som ska användas, och vilken bit data som ska erhållas från " +"modellen för en given rad." + +#: ../../source/treeview.txt:176 +msgid "" +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." +msgstr "" +"För att rendera mer än en modellkolumn i en vykolumn behöver du skapa en :" +"class:`Gtk.TreeViewColumn`-instans och använda :meth:`Gtk.TreeViewColumn." +"pack_start` för att lägga till modellkolumnerna till den." + +#: ../../source/treeview.txt:196 +msgid "The Selection" +msgstr "Valet" + +#: ../../source/treeview.txt:197 +msgid "" +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." +msgstr "" +"De flesta program kommer behöva inte bara arbeta med att visa data, utan " +"också ta emot inmatningshändelser från användare. För att göra detta, ta " +"helt enkelt en referens till ett valobjekt och anslut till ”changed”-" +"signalen." + +#: ../../source/treeview.txt:206 +msgid "Then to retrieve data for the row selected:" +msgstr "För att sedan erhålla data för den valda raden:" + +#: ../../source/treeview.txt:215 +msgid "" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +msgstr "" +"Du kan styra vilka val som tillåts genom att anropa :meth:`Gtk.TreeSelection." +"set_mode`. :meth:`Gtk.TreeSelection.get_selected` fungerar inte om valläget " +"är inställt till :attr:`Gtk.SelectionMode.MULTIPLE`, använd :meth:`Gtk." +"TreeSelection.get_selected_rows` istället." + +#: ../../source/treeview.txt:222 +msgid "Sorting" +msgstr "Sortering" + +#: ../../source/treeview.txt:223 +msgid "" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." +msgstr "" +"Sortering är en viktig funktion för trädvyer och stöds av " +"standardträdmodellerna (:class:`Gtk.TreeStore` och :class:`Gtk.ListStore`), " +"vilka implementerar gränssnittet :class:`Gtk.TreeSortable`." + +#: ../../source/treeview.txt:226 +msgid "Sorting by clicking on columns" +msgstr "Sortering genom att klicka på kolumner" + +#: ../../source/treeview.txt:227 +msgid "" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." +msgstr "" +"En kolumn för en :class:`Gtk.TreeView` kan lätt göras sorterbar med ett " +"anrop till :meth:`Gtk.TreeViewColumn.set_sort_column_id`. Efter det kan " +"kolumnen sorteras genom att klicka på dess rubrik." + +#: ../../source/treeview.txt:230 +msgid "" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." +msgstr "" +"Först behöver vi en enkel :class:`Gtk.TreeView` och en :class:`Gtk." +"ListStore` som en modell." + +#: ../../source/treeview.txt:249 +msgid "" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." +msgstr "" +"Nästa steg är att aktivera sortering. Observera att *column_id* (``0`` i " +"exemplet) hänvisar till modellens kolumn och **inte** till kolumnen för vår " +"TreeView." + +#: ../../source/treeview.txt:256 +msgid "Setting a custom sort function" +msgstr "Ställa in en anpassad sorteringsfunktion" + +#: ../../source/treeview.txt:257 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" +msgstr "" +"Det är också möjligt att ställa in en anpassad jämförelsefunktion för att " +"ändra sorteringsbeteendet. Som ett exempel kommer vi skapa en " +"jämförelsefunktion som sorterar skiftlägeskänsligt. I exemplet ovan såg " +"listan ut som::" + +#: ../../source/treeview.txt:270 +msgid "The case-sensitive sorted list will look like::" +msgstr "Den skiftlägeskänsliga sorterade listan kommer se ut som::" + +# TODO: should end with *if the second one should come before the first one.* +#: ../../source/treeview.txt:281 +msgid "" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." +msgstr "" +"Först av allt behövs en jämförelsefunktion. Denna funktion får två rader och " +"ska returnera ett negativt heltal om den första ska komma före den andra, " +"noll om de är lika, och ett positivt heltal om den andra ska komma före den " +"första." + +#: ../../source/treeview.txt:297 +msgid "" +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" +"Sedan måste sorteringsfunktionen ställas in med :meth:`Gtk.TreeSortable." +"set_sort_func`." + +#: ../../source/treeview.txt:304 +msgid "Filtering" +msgstr "Filtrering" + +#: ../../source/treeview.txt:305 +msgid "" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." +msgstr "" +"Till skillnad från sortering hanteras filtrering inte av de två modeller vi " +"tidigare såg, utan av klassen :class:`Gtk.TreeModelFilter`. Denna klass är " +"liksom :class:`Gtk.TreeStore` och :class:`Gtk.ListStore` en :class:`Gtk." +"TreeModel`. Den agerar som ett lager mellan den ”riktiga” modellen (en :" +"class:`Gtk.TreeStore` eller en :class:`Gtk.ListStore`) och döljer några " +"element för vyn. I praktiken tillhandahåller den en delmängd av den " +"underliggande modellen åt :class:`Gtk.TreeView`. Instanser av :class:`Gtk." +"TreeModelFilter` kan staplas på varandra, för att använda flera filter på " +"samma modell (på samma sätt som du skulle använda ”AND”-klausuler i en SQL-" +"förfrågan). De kan också sättas i en kedja med instanser av :class:`Gtk." +"TreeModelSort`." + +#: ../../source/treeview.txt:307 +msgid "" +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +msgstr "" +"Du kan skapa en ny instans av ett :class:`Gtk.TreeModelFilter` och ge det en " +"modell att filtrera, men det lättaste sättet är att starta det direkt från " +"den filtrerade modellen, med metoden :meth:`Gtk.TreeModel.filter_new`." + +#: ../../source/treeview.txt:313 +msgid "" +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"uses a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +msgstr "" +"På samma sätt som sorteringsfunktionen fungerar, så använder :class:`Gtk." +"TreeModelFilter` en ”synlighets”-funktion, som givet en rad från den " +"underliggande modellen, kommer returnera ett booleskt värde som indikerar om " +"denna rad ska filtreras ut eller inte. Den ställs in av :meth:`Gtk." +"TreeModelFilter.set_visible_func`:" + +#: ../../source/treeview.txt:319 +msgid "" +"The alternative to a \"visibility\" function is to use a boolean column in " +"the model to specify which rows to filter. Choose which column with :meth:" +"`Gtk.TreeModelFilter.set_visible_column`." +msgstr "" +"Alternativet till en ”synlighets”-funktion är att använda en boolesk kolumn " +"i modellen för att ange vilka rader som ska filtreras. Välj vilken kolumn " +"med :meth:`Gtk.TreeModelFilter.set_visible_column`." + +#: ../../source/treeview.txt:321 +msgid "" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." +msgstr "" +"Låt oss se ett fullständigt exempel som använder hela stacken :class:`Gtk." +"ListStore` - :class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :" +"class:`Gtk.TreeView`." + +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" +msgstr "Hur du hanterar strängar" + +#: ../../source/unicode.txt:4 +msgid "" +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." +msgstr "" +"Detta avsnitt förklarar hur strängar representeras i Python 2.x, Python 3.x " +"och GTK+ samt diskuterar vanliga fel som uppstår vid arbete med strängar." + +#: ../../source/unicode.txt:8 +msgid "Definitions" +msgstr "Definitioner" + +#: ../../source/unicode.txt:9 +msgid "" +"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." +msgstr "" +"Som ett koncept är en sträng en lista tecken så som ”A”, ”B”, ”C” or ”É”. " +"**Tecken** är abstrakta representationer och deras betydelse beror på " +"språket och sammanhanget de används i. Unicode-standarden beskriver hur " +"tecken representeras med **kodpunkter**. Exempelvis representeras tecknen " +"ovan med kodpunkterna U+0041, U+0042, U+0043 respektive U+00C9. Kodpunkter " +"är helt enkelt tal i intervallet 0 till 0x10FFFF." + +#: ../../source/unicode.txt:17 +msgid "" +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes, the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" +msgstr "" +"Som nämndes tidigare är representationen av en sträng som en lista med " +"kodpunkter abstrakt. För att konvertera denna abstrakta representation till " +"en sekvens byte så behöver Unicode-strängen **kodas**. Den enklaste formen " +"av kodning är ASCII och utförs som följer:" + +#: ../../source/unicode.txt:22 +msgid "" +"If the code point is < 128, each byte is the same as the value of the code " +"point." +msgstr "" +"Om kodpunkten är < 128 så är varje byte detsamma som värdet på kodpunkten." + +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" +msgstr "" +"Om kodpunkten är 128 eller större, så kan Unicode-strängen inte " +"representeras i denna kodning. (Python utfärdar ett :exc:" +"`UnicodeEncodeError`-undantag i detta fall.)" + +#: ../../source/unicode.txt:29 +msgid "" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." +msgstr "" +"Även om ASCII-kodning är lätt att tillämpa så kan den bara koda 128 olika " +"tecken vilket knappast är tillräckligt. En av de vanligast använda " +"kodningarna som tar itu med detta problem är UTF-8 (den kan hantera alla " +"Unicode-kodpunkter). UTF står för ”Unicode Transformation Format”, och ”8” " +"står för att 8-bitars tal används i kodningen." + +#: ../../source/unicode.txt:37 +msgid "Python 2" +msgstr "Python 2" + +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" +msgstr "Unicode-stöd i Python 2.x" + +#: ../../source/unicode.txt:41 +msgid "" +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" +msgstr "" +"Python 2 kommer med två olika sorters objekt som kan användas för att " +"representera strängar, :class:`str` och :class:`unicode`. Instanser av den " +"senare används för att uttrycka Unicode-strängar, medan instanser av typen :" +"class:`str` är byterepresentationer (den kodade strängen). Under huven " +"representerar Python Unicode-strängar antingen som 16- eller 32-bitars " +"heltal, beroende på hur Python-tolken kompilerades. Unicode-strängar kan " +"konverteras till 8-bitars strängar med :meth:`unicode.encode`::" + +#: ../../source/unicode.txt:58 +msgid "" +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" +msgstr "" +"Pythons 8-bitars strängar har en :meth:`str.decode`-metod som tolkar " +"strängen med given kodning::" + +#: ../../source/unicode.txt:68 +msgid "" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +msgstr "" +"Tyvärr låter Python 2.x dig mixa :class:`unicode` och :class:`str` om 8-" +"bitarssträngen råkade innehålla endast 7-bitars byte (ASCII), men skulle få :" +"exc:`UnicodeDecodeError` om den innehöll värden som inte var ASCII::" + +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" +msgstr "Unicode i GTK+" + +#: ../../source/unicode.txt:86 +msgid "" +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" +msgstr "" +"GTK+ använder UTF-8-kodade strängar för all text. Detta betyder att om du " +"anropar en metod som returnerar en sträng kommer du alltid erhålla en " +"instans av typen :class:`str`. Detsamma gäller metoder som förväntar sig en " +"eller flera strängar som parameter, de måste vara UTF-8-kodade. För " +"bekvämlighet kommer dock PyGObject automatiskt konvertera alla :class:" +"`unicode`-instanser till :class:`str` om de tillhandahålls som argument::" + +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." +msgstr "" +"Observera varningen i slutet. Även om vi anropade :meth:`Gtk.Label.set_text` " +"med en :class:`unicode`-instans som argument, så kommer :meth:`Gtk.Label." +"get_text` alltid returnera en :class:`str`-instans. Därmed är ``txt`` och " +"``unicode_string`` *inte* lika." + +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" +msgstr "" +"Detta är särskilt viktigt om du vill internationalisera ditt program med " +"`gettext `_. Du måste " +"säkerställa att gettext kommer returnera UTF-8-kodade 8-bitars strängar för " +"alla språk. I allmänhet rekommenderas det att inte använda :class:`unicode`-" +"objekt i GTK+-program överhuvudtaget och endast använda UTF-8-kodade :class:" +"`str`-objekt då GTK+ inte är helt integrerat med :class:`unicode`-objekt. I " +"annat fall kommer du behöva avkoda returvärdena till Unicode-strängar varje " +"gång du anropar en GTK+-metod::" + +#: ../../source/unicode.txt:122 +msgid "Python 3" +msgstr "Python 3" + +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" +msgstr "Unicode-stöd i Python 3.x" + +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +msgstr "" +"Sedan Python 3.0 lagras alla strängar som Unicode i en instans av typen :" +"class:`str`. *Kodade* strängar representeras å andra sidan som binärdata i " +"form av instanser av typen :class:`bytes`. Konceptuellt refererar :class:" +"`str` till *text*, medan :class:`bytes` refererar till *data*. Använd :meth:" +"`str.encode` för att gå från :class:`str` till :class:`bytes`, och :meth:" +"`bytes.decode` för att gå från :class:`bytes` till :class:`str`." + +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" +msgstr "" +"Vidare är det inte längre möjligt att mixa Unicode-strängar med kodade " +"strängar, eftersom det kommer resultera i ett :exc:`TypeError`::" + +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" +msgstr "" +"Som en följd av detta är saker mycket prydligare och mer konsekventa med " +"Python 3.x, för PyGObject kommer automatiskt koda/avkoda till/från UTF-8 om " +"du skickar med en sträng till en metod eller om en metod returnerar en " +"sträng. Strängar, eller *text*, kommer alltid endast att representeras som " +"instanser av :class:`str`::" + +#: ../../source/unicode.txt:165 +msgid "References" +msgstr "Referenser" + +#: ../../source/unicode.txt:166 +msgid "" +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." +msgstr "" +"`Vad är nytt i Python 3.0 `_ beskriver de nya koncept som tydligt " +"skiljer mellan text och data." + +#: ../../source/unicode.txt:169 +msgid "" +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." +msgstr "" +"`Unicode HOWTO `_ diskuterar " +"Unicode-stödet i Python 2.x, och förklarar olika problem som folk vanligen " +"stöter på då de försöker arbeta med Unicode." + +#: ../../source/unicode.txt:173 +msgid "" +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +msgstr "" +"`Unicode HOWTO för Python 3.x `_ diskuterar Unicode-stöd i Python 3.x." + +#: ../../source/unicode.txt:176 +msgid "" +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." +msgstr "" +"`UTF-8 encoding table and Unicode characters `_ innehåller en lista över Unicode-kodpunkter och deras respektive UTF-8-" +"kodning." From d3b01d97599ff633175b771c1151542c7c0acad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20P=C3=B6lsterl?= Date: Mon, 3 May 2021 22:49:57 +0200 Subject: [PATCH 151/209] Update POT for translators Fixes #194 --- translations/PythonGTK3Tutorial.pot | 4237 ++++++++++++++------------- 1 file changed, 2149 insertions(+), 2088 deletions(-) diff --git a/translations/PythonGTK3Tutorial.pot b/translations/PythonGTK3Tutorial.pot index c1ba566..dfd6aab 100644 --- a/translations/PythonGTK3Tutorial.pot +++ b/translations/PythonGTK3Tutorial.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-18 20:31+0200\n" +"POT-Creation-Date: 2021-05-03 22:49+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,629 +17,446 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../source/iconview.txt:2 -msgid "IconView" +#: ../../source/application.txt:4 +msgid "Application" msgstr "" -#: ../../source/iconview.txt:3 +#: ../../source/application.txt:6 msgid "" -"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " -"grid view. It supports features such as drag and drop, multiple selections " -"and item reordering." +":class:`Gtk.Application` encompasses many repetitive tasks that a modern " +"application needs such as handling multiple instances, D-Bus activation, " +"opening files, command line parsing, startup/shutdown, menu management, " +"window management, and more." msgstr "" -#: ../../source/iconview.txt:5 -msgid "" -"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." -"ListStore` for its model. Instead of using :ref:`cell renderers " -"`, :class:`Gtk.IconView` requires that one of the columns in " -"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." +#: ../../source/application.txt:12 ../../source/menus.txt:17 +msgid "Actions" msgstr "" -#: ../../source/iconview.txt:7 +#: ../../source/application.txt:14 msgid "" -":class:`Gtk.IconView` supports numerous selection modes to allow for either " -"selecting multiple icons at a time, restricting selections to just one item " -"or disallowing selecting items completely. To specify a selection mode, the :" -"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" -"`Gtk.SelectionMode` selection modes." +":class:`Gio.Action` is a way to expose any single task your application or " +"widget does by a name. These actions can be disabled/enabled at runtime and " +"they can either be activated or have a state changed (if they contain state)." msgstr "" -#: ../../source/iconview.txt:10 ../../source/layout.txt:40 -#: ../../source/layout.txt:97 ../../source/layout.txt:123 -#: ../../source/layout.txt:156 ../../source/layout.txt:180 -#: ../../source/layout.txt:212 ../../source/layout.txt:232 -#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 -#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 -#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 -#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 -#: ../../source/layout-table.txt:26 ../../source/combobox.txt:29 -#: ../../source/builder.txt:118 ../../source/entry.txt:32 -#: ../../source/clipboard.txt:17 ../../source/cellrenderers.txt:39 -#: ../../source/cellrenderers.txt:59 ../../source/cellrenderers.txt:74 -#: ../../source/cellrenderers.txt:98 ../../source/cellrenderers.txt:116 -#: ../../source/cellrenderers.txt:138 ../../source/menus.txt:80 -#: ../../source/textview.txt:115 ../../source/label.txt:48 -#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 -#: ../../source/dialogs.txt:130 ../../source/popover.txt:19 -#: ../../source/popover.txt:34 ../../source/drag_and_drop.txt:74 -#: ../../source/application.txt:61 ../../source/progressbar.txt:32 -msgid "Example" +#: ../../source/application.txt:18 +msgid "" +"The reason to use actions is to separate out the logic from the UI. For " +"example this allows using a menubar on OSX and a gear menu on GNOME both " +"simply referencing the name of an action. The main implementation of this " +"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " +"later." msgstr "" -#: ../../source/layout.txt:4 -msgid "Layout Containers" +#: ../../source/application.txt:23 +msgid "" +"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " +"support properties to set an action name." msgstr "" -#: ../../source/layout.txt:5 +#: ../../source/application.txt:26 msgid "" -"While many GUI toolkits require you to precisely place widgets in a window, " -"using absolute positioning, GTK+ uses a different approach. Rather than " -"specifying the position and size of each widget in the window, you can " -"arrange your widgets in rows, columns, and/or tables. The size of your " -"window can be determined automatically, based on the sizes of the widgets it " -"contains. And the sizes of the widgets are, in turn, determined by the " -"amount of text they contain, or the minimum and maximum sizes that you " -"specify, and/or how you have requested that the available space should be " -"shared between sets of widgets. You can perfect your layout by specifying " -"padding distance and centering values for each of your widgets. GTK+ then " -"uses all this information to resize and reposition everything sensibly and " -"smoothly when the user manipulates the window." +"These actions can be grouped together into a :class:`Gio.ActionGroup` and " +"when these groups are added to a widget with :meth:`Gtk.Widget." +"insert_action_group()` they will gain a prefix. Such as \"win\" when added " +"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " +"referencing it such as \"app.about\" but when you create the action it will " +"just be \"about\" until added to the application." msgstr "" -#: ../../source/layout.txt:19 +#: ../../source/application.txt:32 msgid "" -"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " -"to the end user and are inserted into a window, or placed within each other " -"to layout components. There are two flavours of containers: single-child " -"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" -"child containers, which are descendants of :class:`Gtk.Container`. The most " -"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " -"(:class:`Gtk.Grid`)." +"You can also very easily make keybindings for actions by setting the `accel` " +"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." +"set_accels_for_action()`." msgstr "" -#: ../../source/layout.txt:29 -msgid "Boxes" +#: ../../source/application.txt:36 ../../source/menus.txt:2 +msgid "Menus" msgstr "" -#: ../../source/layout.txt:31 +#: ../../source/application.txt:38 msgid "" -"Boxes are invisible containers into which we can pack our widgets. When " -"packing widgets into a horizontal box, the objects are inserted horizontally " -"from left to right or right to left depending on whether :meth:`Gtk.Box." -"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " -"are packed from top to bottom or vice versa. You may use any combination of " -"boxes inside or beside other boxes to create the desired effect." +"Your menus should be defined in XML using :class:`Gio.Menu` and would " +"reference the previously mentioned actions you defined. :class:`Gtk." +"Application` allows you to set a menu either via :meth:`Gtk.Application." +"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " +"of :class:`Gio.Resource` this can automatically use the correct menu based " +"on platform, otherwise you can set them manually. A detailed example is " +"shown below." msgstr "" -#: ../../source/layout.txt:42 -msgid "" -"Let's take a look at a slightly modified version of the extended example " -"with two buttons." +#: ../../source/application.txt:46 +msgid "Command Line" msgstr "" -#: ../../source/layout.txt:50 +#: ../../source/application.txt:48 msgid "" -"First, we create a horizontally orientated box container where 6 pixels are " -"placed between children. This box becomes the child of the top-level window." +"When creating your application it takes a flag property of :class:`Gio." +"ApplicationFlags`. Using this you can let it handle everything itself or " +"have more custom behavior." msgstr "" -#: ../../source/layout.txt:56 -msgid "Subsequently, we add two different buttons to the box container." +#: ../../source/application.txt:51 +msgid "" +"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." +"Application.do_command_line()`. In combination with :meth:`Gio.Application." +"add_main_option()` to add custom options." msgstr "" -#: ../../source/layout.txt:61 +#: ../../source/application.txt:54 msgid "" -"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " -"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " +"you and let you handle it in :meth:`Gio.Application.do_open()`." msgstr "" -#: ../../source/layout.txt:67 -msgid "Grid" +#: ../../source/application.txt:57 +msgid "" +"If your application is already open these will all be sent to the existing " +"instance unless you use `NON_UNIQUE` to allow multiple instances." msgstr "" -#: ../../source/layout.txt:68 -msgid "" -":class:`Gtk.Grid` is a container which arranges its child widgets in rows " -"and columns, but you do not need to specify the dimensions in the " -"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " -"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " -"parameters:" +#: ../../source/application.txt:61 ../../source/builder.txt:118 +#: ../../source/button_widgets.txt:18 ../../source/button_widgets.txt:39 +#: ../../source/button_widgets.txt:78 ../../source/button_widgets.txt:95 +#: ../../source/button_widgets.txt:131 ../../source/button_widgets.txt:150 +#: ../../source/cellrenderers.txt:39 ../../source/cellrenderers.txt:59 +#: ../../source/cellrenderers.txt:74 ../../source/cellrenderers.txt:98 +#: ../../source/cellrenderers.txt:116 ../../source/cellrenderers.txt:138 +#: ../../source/clipboard.txt:17 ../../source/combobox.txt:32 +#: ../../source/dialogs.txt:46 ../../source/dialogs.txt:66 +#: ../../source/dialogs.txt:130 ../../source/drag_and_drop.txt:74 +#: ../../source/entry.txt:32 ../../source/expander.txt:19 +#: ../../source/iconview.txt:10 ../../source/label.txt:48 +#: ../../source/layout.txt:40 ../../source/layout.txt:97 +#: ../../source/layout.txt:123 ../../source/layout.txt:156 +#: ../../source/layout.txt:180 ../../source/layout.txt:212 +#: ../../source/layout.txt:232 ../../source/layout-table.txt:26 +#: ../../source/menus.txt:80 ../../source/popover.txt:19 +#: ../../source/popover.txt:38 ../../source/progressbar.txt:32 +#: ../../source/spinner.txt:12 ../../source/spinner.txt:29 +#: ../../source/textview.txt:115 +msgid "Example" msgstr "" -#: ../../source/layout.txt:73 -msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +#: ../../source/application.txt:69 ../../source/popover.txt:45 +msgid "See Also" msgstr "" -#: ../../source/layout.txt:74 -msgid "``left`` is the column number to attach the left side of ``child`` to." +#: ../../source/application.txt:71 +msgid "https://wiki.gnome.org/HowDoI/GtkApplication" msgstr "" -#: ../../source/layout.txt:75 -msgid "" -"``top`` indicates the row number to attach the top side of ``child`` to." +#: ../../source/application.txt:72 +msgid "https://wiki.gnome.org/HowDoI/GAction" msgstr "" -#: ../../source/layout.txt:76 -msgid "" -"``width`` and ``height`` indicate the number of columns that the ``child`` " -"will span, and the number of rows that the ``child`` will span, respectively." +#: ../../source/application.txt:73 +msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" msgstr "" -#: ../../source/layout.txt:79 -msgid "" -"It is also possible to add a child next to an existing child, using :meth:" -"`Gtk.Grid.attach_next_to`, which also takes five parameters:" +#: ../../source/application.txt:74 +msgid "https://wiki.gnome.org/HowDoI/GMenu" msgstr "" -#: ../../source/layout.txt:82 -msgid "``child`` is the :class:`Gtk.Widget` to add, as above." +#: ../../source/basics.txt:4 +msgid "Basics" msgstr "" -#: ../../source/layout.txt:83 -msgid "" -"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " -"instance) or ``None``. The ``child`` widget will be placed next to " -"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " -"grid." +#: ../../source/basics.txt:5 +msgid "This section will introduce some of the most important aspects of GTK+." msgstr "" -#: ../../source/layout.txt:86 -msgid "" -"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " -"that ``child`` is positioned next to." +#: ../../source/basics.txt:12 +msgid "Main loop and Signals" msgstr "" -#: ../../source/layout.txt:88 +#: ../../source/basics.txt:13 msgid "" -"``width`` and ``height`` indicate the number of columns and rows the " -"``child`` widget will span, respectively." +"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " +"the user is doing nothing, GTK+ sits in the main loop and waits for input. " +"If the user performs some action - say, a mouse click - then the main loop " +"\"wakes up\" and delivers an event to GTK+." msgstr "" -#: ../../source/layout.txt:91 +#: ../../source/basics.txt:18 msgid "" -"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " -"using :meth:`Gtk.Grid.add`, which will place children next to each other in " -"the direction determined by the \"orientation\" property (defaults to :attr:" -"`Gtk.Orientation.HORIZONTAL`)." +"When widgets receive an event, they frequently emit one or more signals. " +"Signals notify your program that \"something interesting happened\" by " +"invoking functions you've connected to the signal. Such functions are " +"commonly known as *callbacks*. When your callbacks are invoked, you would " +"typically take some action - for example, when an Open button is clicked you " +"might display a file chooser dialog. After a callback finishes, GTK+ will " +"return to the main loop and await more user input." msgstr "" -#: ../../source/layout.txt:105 -msgid "ListBox" +#: ../../source/basics.txt:28 +msgid "A generic example is:" msgstr "" -#: ../../source/layout.txt:107 +#: ../../source/basics.txt:34 msgid "" -"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." -"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " -"headers can be added dynamically depending on the row content. It also " -"allows keyboard and mouse navigation and selection like a typical list." +"Firstly, *widget* is an instance of a widget we created earlier. Next, the " +"event we are interested in. Each widget has its own particular events which " +"can occur. For instance, if you have a button you usually want to connect to " +"the \"clicked\" event. This means that when the button is clicked, the " +"signal is issued. Thirdly, the *callback* argument is the name of the " +"callback function. It contains the code which runs when signals of the " +"specified type are issued. Finally, the *data* argument includes any data " +"which should be passed when the signal is issued. However, this argument is " +"completely optional and can be left out if not required." msgstr "" -#: ../../source/layout.txt:112 +#: ../../source/basics.txt:46 msgid "" -"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " -"especially when the list content has a more complicated layout than what is " -"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " -"(i.e. has a button in it)." +"The function returns a number that identifies this particular signal-" +"callback pair. It is required to disconnect from a signal such that the " +"callback function will not be called during any future or currently ongoing " +"emissions of the signal it has been connected to." msgstr "" -#: ../../source/layout.txt:117 +#: ../../source/basics.txt:56 msgid "" -"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " -"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " -"the list and the widget." +"If you have lost the \"handler_id\" for some reason (for example the " +"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " +"still disconnect a specific callback using the function :func:" +"`disconnect_by_func`:" msgstr "" -#: ../../source/layout.txt:131 -msgid "Stack and StackSwitcher" +#: ../../source/basics.txt:64 +msgid "" +"Applications should connect to the \"destroy\" signal of the top-level " +"window. It is emitted when an object is destroyed, so when a user requests " +"that a toplevel window is closed, the default handler for this signal " +"destroys the window, but does not terminate the application. Connecting the " +"\"destroy\" signal of the top-level window to the function :func:`Gtk." +"main_quit` will result in the desired behaviour." msgstr "" -#: ../../source/layout.txt:133 +#: ../../source/basics.txt:74 msgid "" -"A :class:`Gtk.Stack` is a container which only shows one of its children at " -"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " -"provide a means for users to change the visible child. Instead, the :class:" -"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " -"this functionality." +"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " +"return." msgstr "" -#: ../../source/layout.txt:139 -msgid "" -"Transitions between pages can be animated as slides or fades. This can be " -"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " -"respect the \"gtk-enable-animations\" setting." +#: ../../source/basics.txt:77 ../../source/objects.txt:96 +msgid "Properties" msgstr "" -#: ../../source/layout.txt:143 +#: ../../source/basics.txt:78 msgid "" -"Transition speed can be adjusted with :meth:`Gtk.Stack." -"set_transition_duration`" +"Properties describe the configuration and state of widgets. As for signals, " +"each widget has its own particular set of properties. For example, a button " +"has the property \"label\" which contains the text of the label widget " +"inside the button. You can specify the name and value of any number of " +"properties as keyword arguments when creating an instance of a widget. To " +"create a label aligned to the right with the text \"Hello World\" and an " +"angle of 25 degrees, use:" msgstr "" -#: ../../source/layout.txt:145 -msgid "" -"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." -"Stack`; it shows a row of buttons to switch between the various pages of the " -"associated stack widget." +#: ../../source/basics.txt:89 +msgid "which is equivalent to" msgstr "" -#: ../../source/layout.txt:149 +#: ../../source/basics.txt:98 msgid "" -"All the content for the buttons comes from the child properties of the :" -"class:`Gtk.Stack`." +"Instead of using getters and setters you can also get and set the gobject " +"properties through the \"props\" property such as ``widget.props.prop_name = " +"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" +"name\")`` and ``widget.set_property(\"prop-name\", value)``." msgstr "" -#: ../../source/layout.txt:152 +#: ../../source/basics.txt:103 msgid "" -"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " -"the same :class:`Gtk.Stack` widget." +"To see which properties are available for a widget in the running version of " +"GTK you can \"dir\" the \"props\" property:" msgstr "" -#: ../../source/layout.txt:164 -msgid "HeaderBar" +#: ../../source/basics.txt:110 +msgid "This will print in the console the list of properties a Gtk.Box has." msgstr "" -#: ../../source/layout.txt:166 -msgid "" -"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " -"allows to place children at the start or the end. In addition, it allows a " -"title to be displayed. The title will be centered with respect to the width " -"of the box, even if the children at either side take up different amounts of " -"space." +#: ../../source/builder.txt:2 +msgid "Glade and Gtk.Builder" msgstr "" -#: ../../source/layout.txt:171 +#: ../../source/builder.txt:3 msgid "" -"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " -"be used in place of the title bar (which is rendered by the Window Manager)." +"The :class:`Gtk.Builder` class offers you the opportunity to design user " +"interfaces without writing a single line of code. This is possible through " +"describing the interface by an XML file and then loading the XML description " +"at runtime and create the objects automatically, which the Builder class " +"does for you. For the purpose of not needing to write the XML manually the " +"`Glade `_ application lets you create the user " +"interface in a WYSIWYG (what you see is what you get) manner" msgstr "" -#: ../../source/layout.txt:174 -msgid "" -"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " -"should contain commonly used controls which affect the content below. They " -"also provide access to window controls, including the close window button " -"and window menu." +#: ../../source/builder.txt:7 +msgid "This method has several advantages:" msgstr "" -#: ../../source/layout.txt:188 -msgid "FlowBox" +#: ../../source/builder.txt:9 +msgid "Less code needs to be written." msgstr "" -#: ../../source/layout.txt:190 -msgid "This example requires at least GTK+ 3.12." +#: ../../source/builder.txt:10 +msgid "UI changes can be seen more quickly, so UIs are able to improve." msgstr "" -#: ../../source/layout.txt:192 -msgid "" -"A :class:`Gtk.FlowBox` is a container that positions child widgets in " -"sequence according to its orientation." +#: ../../source/builder.txt:11 +msgid "Designers without programming skills can create and edit UIs." msgstr "" -#: ../../source/layout.txt:195 +#: ../../source/builder.txt:12 msgid "" -"For instance, with the horizontal orientation, the widgets will be arranged " -"from left to right, starting a new row under the previous row when " -"necessary. Reducing the width in this case will require more rows, so a " -"larger height will be requested." +"The description of the user interface is independent from the programming " +"language being used." msgstr "" -#: ../../source/layout.txt:200 +#: ../../source/builder.txt:14 msgid "" -"Likewise, with the vertical orientation, the widgets will be arranged from " -"top to bottom, starting a new column to the right when necessary. Reducing " -"the height will require more columns, so a larger width will be requested." +"There is still code required for handling interface changes triggered by the " +"user, but :class:`Gtk.Builder` allows you to focus on implementing that " +"functionality." msgstr "" -#: ../../source/layout.txt:204 -msgid "" -"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " -"filtered." +#: ../../source/builder.txt:17 +msgid "Creating and loading the .glade file" msgstr "" -#: ../../source/layout.txt:206 +#: ../../source/builder.txt:18 msgid "" -"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " -"children, you can add any kind of widget to it via :meth:`Gtk.Container." -"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " -"between the box and the widget." +"First of all you have to download and install Glade. There are `several " +"tutorials `_ about " +"Glade, so this is not explained here in detail. Let's start by creating a " +"window with a button in it and saving it to a file named *example.glade*. " +"The resulting XML file should look like this." msgstr "" -#: ../../source/layout.txt:220 -msgid "Notebook" +#: ../../source/builder.txt:41 +msgid "To load this file in Python we need a :class:`Gtk.Builder` object." msgstr "" -#: ../../source/layout.txt:222 +#: ../../source/builder.txt:48 msgid "" -"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " -"are pages that can be switched between using tab labels along one edge." +"The second line loads all objects defined in *example.glade* into the " +"Builder object." msgstr "" -#: ../../source/layout.txt:224 +#: ../../source/builder.txt:50 msgid "" -"There are many configuration options for GtkNotebook. Among other things, " -"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." -"set_tab_pos`), whether, if there are too many tabs to fit the notebook " -"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." -"set_scrollable`, and whether there will be a popup menu allowing the users " -"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." -"popup_disable`)." +"It is also possible to load only some of the objects. The following line " +"would add only the objects (and their child objects) given in the tuple." msgstr "" -#: ../../source/gallery.txt:2 -msgid "Widget Gallery" +#: ../../source/builder.txt:57 +msgid "" +"These two methods exist also for loading from a string rather than a file. " +"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" +"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " +"instead of a file name." msgstr "" -#: ../../source/gallery.txt:5 -msgid ":class:`Gtk.AboutDialog`" +#: ../../source/builder.txt:61 +msgid "Accessing widgets" msgstr "" -#: ../../source/gallery.txt:6 -msgid ":class:`Gtk.AccelLabel`" +#: ../../source/builder.txt:62 +msgid "" +"Now that the window and the button are loaded we also want to show them. " +"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " +"window. But how do we access the associated object?" msgstr "" -#: ../../source/gallery.txt:7 -msgid ":class:`Gtk.ActionBar`" +#: ../../source/builder.txt:71 +msgid "" +"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." +"get_object` method and the widget's *id*. It is really *that* simple." msgstr "" -#: ../../source/gallery.txt:8 -msgid ":class:`Gtk.AppChooserButton`" +#: ../../source/builder.txt:74 +msgid "It is also possible to get a list of all objects with" msgstr "" -#: ../../source/gallery.txt:9 -msgid ":class:`Gtk.AppChooserDialog`" +#: ../../source/builder.txt:81 +msgid "Connecting Signals" msgstr "" -#: ../../source/gallery.txt:10 -msgid ":class:`Gtk.Assistant`" +#: ../../source/builder.txt:82 +msgid "" +"Glade also makes it possible to define signals which you can connect to " +"handlers in your code without extracting every object from the builder and " +"connecting to the signals manually. The first thing to do is to declare the " +"signal names in Glade. For this example we will act when the window is " +"closed and when the button was pressed, so we give the name \"onDestroy\" to " +"the callback handling the \"destroy\" signal of the window and " +"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " +"button. Now the XML file should look like this." msgstr "" -#: ../../source/gallery.txt:11 -msgid ":class:`Gtk.Button`" +#: ../../source/builder.txt:90 +msgid "" +"Now we have to define the handler functions in our code. The *onDestroy* " +"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " +"pressed we would like to print the string \"Hello World!\", so we define the " +"handler as follows" msgstr "" -#: ../../source/gallery.txt:12 -msgid ":class:`Gtk.CheckButton`" +#: ../../source/builder.txt:99 +msgid "" +"Next, we have to connect the signals and the handler functions. The easiest " +"way to do this is to define a *dict* with a mapping from the names to the " +"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." msgstr "" -#: ../../source/gallery.txt:13 -msgid ":class:`Gtk.ColorButton`" +#: ../../source/builder.txt:110 +msgid "" +"An alternative approach is to create a class which has methods that are " +"called like the signals. In our example the last code snippet could be " +"rewritten as:" msgstr "" -#: ../../source/gallery.txt:14 -msgid ":class:`Gtk.ColorChooserDialog`" +#: ../../source/builder.txt:119 +msgid "The final code of the example" msgstr "" -#: ../../source/gallery.txt:15 -msgid ":class:`Gtk.ComboBox`" +#: ../../source/button_widgets.txt:2 +msgid "Button Widgets" msgstr "" -#: ../../source/gallery.txt:16 -msgid ":class:`Gtk.ComboBoxText`" +#: ../../source/button_widgets.txt:5 +msgid "Button" msgstr "" -#: ../../source/gallery.txt:17 -msgid ":class:`Gtk.Entry`" +#: ../../source/button_widgets.txt:7 +msgid "" +"The Button widget is another commonly used widget. It is generally used to " +"attach a function that is called when the button is pressed." msgstr "" -#: ../../source/gallery.txt:18 -msgid ":class:`Gtk.FileChooserButton`" +#: ../../source/button_widgets.txt:10 +msgid "" +"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " +"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " +"child is the :class:`Gtk.Label`." msgstr "" -#: ../../source/gallery.txt:19 -msgid ":class:`Gtk.FileChooserDialog`" +#: ../../source/button_widgets.txt:14 +msgid "" +"Usually, you want to connect to the button's \"clicked\" signal which is " +"emitted when the button has been pressed and released." msgstr "" -#: ../../source/gallery.txt:20 -msgid ":class:`Gtk.FlowBox`" +#: ../../source/button_widgets.txt:26 +msgid "ToggleButton" msgstr "" -#: ../../source/gallery.txt:21 -msgid ":class:`Gtk.FontButton`" -msgstr "" - -#: ../../source/gallery.txt:22 -msgid ":class:`Gtk.FontChooserDialog`" -msgstr "" - -#: ../../source/gallery.txt:23 -msgid ":class:`Gtk.Frame`" -msgstr "" - -#: ../../source/gallery.txt:24 -msgid ":class:`Gtk.GLArea`" -msgstr "" - -#: ../../source/gallery.txt:25 -msgid ":class:`Gtk.Grid`" -msgstr "" - -#: ../../source/gallery.txt:26 -msgid ":class:`Gtk.HeaderBar`" -msgstr "" - -#: ../../source/gallery.txt:27 -msgid ":class:`Gtk.IconView`" -msgstr "" - -#: ../../source/gallery.txt:28 -msgid ":class:`Gtk.Image`" -msgstr "" - -#: ../../source/gallery.txt:29 -msgid ":class:`Gtk.InfoBar`" -msgstr "" - -#: ../../source/gallery.txt:30 -msgid ":class:`Gtk.Label`" -msgstr "" - -#: ../../source/gallery.txt:31 -msgid ":class:`Gtk.LevelBar`" -msgstr "" - -#: ../../source/gallery.txt:32 -msgid ":class:`Gtk.LinkButton`" -msgstr "" - -#: ../../source/gallery.txt:33 -msgid ":class:`Gtk.ListBox`" -msgstr "" - -#: ../../source/gallery.txt:34 -msgid ":class:`Gtk.LockButton`" -msgstr "" - -#: ../../source/gallery.txt:35 -msgid ":class:`Gtk.MenuBar`" -msgstr "" - -#: ../../source/gallery.txt:36 -msgid ":class:`Gtk.MenuButton`" -msgstr "" - -#: ../../source/gallery.txt:37 -msgid ":class:`Gtk.MessageDialog`" -msgstr "" - -#: ../../source/gallery.txt:38 -msgid ":class:`Gtk.Notebook`" -msgstr "" - -#: ../../source/gallery.txt:39 -msgid ":class:`Gtk.Paned`" -msgstr "" - -#: ../../source/gallery.txt:40 -msgid ":class:`Gtk.PlacesSidebar`" -msgstr "" - -#: ../../source/gallery.txt:41 -msgid ":class:`Gtk.ProgressBar`" -msgstr "" - -#: ../../source/gallery.txt:42 -msgid ":class:`Gtk.RadioButton`" -msgstr "" - -#: ../../source/gallery.txt:43 -msgid ":class:`Gtk.RecentChooserDialog`" -msgstr "" - -#: ../../source/gallery.txt:44 -msgid ":class:`Gtk.Scale`" -msgstr "" - -#: ../../source/gallery.txt:45 -msgid ":class:`Gtk.Scrollbar`" -msgstr "" - -#: ../../source/gallery.txt:46 -msgid ":class:`Gtk.ScrolledWindow`" -msgstr "" - -#: ../../source/gallery.txt:47 -msgid ":class:`Gtk.SearchBar`" -msgstr "" - -#: ../../source/gallery.txt:48 -msgid ":class:`Gtk.SearchEntry`" -msgstr "" - -#: ../../source/gallery.txt:49 -msgid ":class:`Gtk.Separator`" -msgstr "" - -#: ../../source/gallery.txt:50 -msgid ":class:`Gtk.SpinButton`" -msgstr "" - -#: ../../source/gallery.txt:51 -msgid ":class:`Gtk.Spinner`" -msgstr "" - -#: ../../source/gallery.txt:52 -msgid ":class:`Gtk.Stack`" -msgstr "" - -#: ../../source/gallery.txt:53 -msgid ":class:`Gtk.StackSwitcher`" -msgstr "" - -#: ../../source/gallery.txt:54 -msgid ":class:`Gtk.Statusbar`" -msgstr "" - -#: ../../source/gallery.txt:55 -msgid ":class:`Gtk.Switch`" -msgstr "" - -#: ../../source/gallery.txt:56 -msgid ":class:`Gtk.TextView`" -msgstr "" - -#: ../../source/gallery.txt:57 -msgid ":class:`Gtk.ToggleButton`" -msgstr "" - -#: ../../source/gallery.txt:58 -msgid ":class:`Gtk.ToolPalette`" -msgstr "" - -#: ../../source/gallery.txt:59 -msgid ":class:`Gtk.Toolbar`" -msgstr "" - -#: ../../source/gallery.txt:60 -msgid ":class:`Gtk.TreeView`" -msgstr "" - -#: ../../source/gallery.txt:61 -msgid ":class:`Gtk.VolumeButton`" -msgstr "" - -#: ../../source/gallery.txt:62 -msgid ":class:`Gtk.Window`" -msgstr "" - -#: ../../source/button_widgets.txt:2 -msgid "Button Widgets" -msgstr "" - -#: ../../source/button_widgets.txt:5 -msgid "Button" -msgstr "" - -#: ../../source/button_widgets.txt:7 -msgid "" -"The Button widget is another commonly used widget. It is generally used to " -"attach a function that is called when the button is pressed." -msgstr "" - -#: ../../source/button_widgets.txt:10 -msgid "" -"The :class:`Gtk.Button` widget can hold any valid child widget. That is it " -"can hold most any other standard :class:`Gtk.Widget`. The most commonly used " -"child is the :class:`Gtk.Label`." -msgstr "" - -#: ../../source/button_widgets.txt:14 -msgid "" -"Usually, you want to connect to the button's \"clicked\" signal which is " -"emitted when the button has been pressed and released." -msgstr "" - -#: ../../source/button_widgets.txt:26 -msgid "ToggleButton" -msgstr "" - -#: ../../source/button_widgets.txt:28 -msgid "" -"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " -"but when clicked they remain activated, or pressed, until clicked again. " -"When the state of the button is changed, the \"toggled\" signal is emitted." +#: ../../source/button_widgets.txt:28 +msgid "" +"A :class:`Gtk.ToggleButton` is very similar to a normal :class:`Gtk.Button`, " +"but when clicked they remain activated, or pressed, until clicked again. " +"When the state of the button is changed, the \"toggled\" signal is emitted." msgstr "" #: ../../source/button_widgets.txt:32 @@ -783,144 +600,193 @@ msgid "" "see the example here below." msgstr "" -#: ../../source/index.txt:7 -msgid "The Python GTK+ 3 Tutorial" +#: ../../source/cellrenderers.txt:4 +msgid "CellRenderers" msgstr "" -#: ../../source/index.txt:0 -msgid "Release" +#: ../../source/cellrenderers.txt:6 +msgid "" +":class:`Gtk.CellRenderer` widgets are used to display information within " +"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " +"work closely with the associated widgets and are very powerful, with lots of " +"configuration options for displaying a large amount of data in different " +"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " +"for different purposes:" msgstr "" -#: ../../source/index.txt:9 -msgid "|version|" +#: ../../source/cellrenderers.txt:12 +msgid ":class:`Gtk.CellRendererText`" msgstr "" -#: ../../source/index.txt:0 -msgid "Date" +#: ../../source/cellrenderers.txt:13 +msgid ":class:`Gtk.CellRendererToggle`" msgstr "" -#: ../../source/index.txt:10 -msgid "|today|" +#: ../../source/cellrenderers.txt:14 +msgid ":class:`Gtk.CellRendererPixbuf`" msgstr "" -#: ../../source/index.txt:0 -msgid "Copyright" +#: ../../source/cellrenderers.txt:15 +msgid ":class:`Gtk.CellRendererCombo`" msgstr "" -#: ../../source/index.txt:11 -msgid "" -"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" -"Cover Texts, and no Back-Cover Texts" +#: ../../source/cellrenderers.txt:16 +msgid ":class:`Gtk.CellRendererProgress`" msgstr "" -#: ../../source/index.txt:13 -msgid "" -"This tutorial gives an introduction to writing GTK+ 3 applications in Python." +#: ../../source/cellrenderers.txt:17 +msgid ":class:`Gtk.CellRendererSpinner`" msgstr "" -#: ../../source/index.txt:15 -msgid "" -"Prior to working through this tutorial, it is recommended that you have a " -"reasonable grasp of the Python programming language. GUI programming " -"introduces new problems compared to interacting with the standard output " -"(console / terminal). It is necessary for you to know how to create and run " -"Python files, understand basic interpreter errors, and work with strings, " -"integers, floats and Boolean values. For the more advanced widgets in this " -"tutorial, good knowledge of lists and tuples will be needed." +#: ../../source/cellrenderers.txt:18 +msgid ":class:`Gtk.CellRendererSpin`" msgstr "" -#: ../../source/index.txt:25 -msgid "" -"Although this tutorial describes the most important classes and methods " -"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " -"to the `GTK+ 3 Reference Manual `_ " -"for a detailed description of the API. Also there's a `Python-specific " -"reference `_ available." +#: ../../source/cellrenderers.txt:19 +msgid ":class:`Gtk.CellRendererAccel`" msgstr "" -#: ../../source/index.txt:31 -msgid "Contents:" +#: ../../source/cellrenderers.txt:22 +msgid "CellRendererText" msgstr "" -#: ../../source/index.txt:61 -msgid "Deprecated" +#: ../../source/cellrenderers.txt:24 +msgid "" +"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " +"font, color and style information provided by its properties. The text will " +"be ellipsized if it is too long and the \"ellipsize\" property allows it." msgstr "" -#: ../../source/index.txt:69 -msgid "Indices and tables" +#: ../../source/cellrenderers.txt:28 +msgid "" +"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " +"This can be changed by setting the value of the \"editable\" property to " +"``True``:" msgstr "" -#: ../../source/index.txt:71 -msgid ":ref:`search`" +#: ../../source/cellrenderers.txt:35 +msgid "" +"You can then connect to the \"edited\" signal and update your :class:`Gtk." +"TreeModel` accordingly." msgstr "" -#: ../../source/spinner.txt:2 -msgid "Spinner" +#: ../../source/cellrenderers.txt:47 +msgid "CellRendererToggle" msgstr "" -#: ../../source/spinner.txt:4 +#: ../../source/cellrenderers.txt:49 msgid "" -"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " -"often used as an alternative to a :class:`GtkProgressBar` for displaying " -"indefinite activity, instead of actual progress." +":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " +"button is drawn as a radio- or checkbutton, depending on the \"radio\" " +"property. When activated, it emits the \"toggled\" signal." msgstr "" -#: ../../source/spinner.txt:8 +#: ../../source/cellrenderers.txt:53 msgid "" -"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" -"`Gtk.Spinner.stop`." +"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " +"active, you most likely want to bind the \"active\" property on the cell " +"renderer to a boolean value in the model, thus causing the check button to " +"reflect the state of the model." msgstr "" -#: ../../source/spinner.txt:20 -msgid "Extended example" +#: ../../source/cellrenderers.txt:67 +msgid "CellRendererPixbuf" msgstr "" -#: ../../source/spinner.txt:22 +#: ../../source/cellrenderers.txt:69 msgid "" -"An extended example that uses a timeout function to start and stop the " -"spinning animation. The :func:`on_timeout` function is called at regular " -"intervals until it returns ``False``, at which point the timeout is " -"automatically destroyed and the function will not be called again." +"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " +"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" +"\" property) or a named icon (set via the \"icon-name\" property)." msgstr "" -#: ../../source/layout-table.txt:2 -msgid "Table" +#: ../../source/cellrenderers.txt:82 +msgid "CellRendererCombo" msgstr "" -#: ../../source/layout-table.txt:4 +#: ../../source/cellrenderers.txt:84 msgid "" -":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " -"be used in newly-written code. Use the :ref:`layout-grid` class instead." +":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" +"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " +"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" +"\" property." msgstr "" -#: ../../source/layout-table.txt:8 +#: ../../source/cellrenderers.txt:90 msgid "" -"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." +"The combo cell renderer takes care of adding a text cell renderer to the " +"combo box and sets it to display the column specified by its \"text-column\" " +"property." msgstr "" -#: ../../source/layout-table.txt:10 +#: ../../source/cellrenderers.txt:93 msgid "" -"The grid's dimensions need to be specified in the :class:`Gtk.Table` " -"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." +"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " +"with and without an associated :class:`Gtk.Entry` widget, depending on the " +"value of the \"has-entry\" property." msgstr "" -#: ../../source/layout-table.txt:13 +#: ../../source/cellrenderers.txt:106 +msgid "CellRendererProgress" +msgstr "" + +#: ../../source/cellrenderers.txt:108 msgid "" -":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " -"the spacing between the rows at the specified row or column. Note that for " -"columns, the space goes to the right of the column, and for rows, the space " -"goes below the row." +":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " +"in a cell. Additionally, it can display a text on top of the progress bar." msgstr "" -#: ../../source/layout-table.txt:18 +#: ../../source/cellrenderers.txt:111 msgid "" -"You can also set a consistent spacing for all rows and/or columns with :meth:" -"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " -"that with these calls, the last row and last column do not get any spacing." +"The percentage value of the progress bar can be modified by changing the " +"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " +"*activity mode* by incrementing the \"pulse\" property instead of the \"value" +"\" property." msgstr "" -#: ../../source/layout-table.txt:22 -msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." +#: ../../source/cellrenderers.txt:124 +msgid "CellRendererSpin" +msgstr "" + +#: ../../source/cellrenderers.txt:126 +msgid "" +":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." +"CellRendererText` from which it is derived. But while the latter offers a " +"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" +"`Gtk.SpinButton` widget. Of course, that means that the text has to be " +"parseable as a floating point number." +msgstr "" + +#: ../../source/cellrenderers.txt:132 +msgid "" +"The range of the spinbutton is taken from the adjustment property of the " +"cell renderer, which can be set explicitly or mapped to a column in the tree " +"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " +"also has properties for the climb rate and the number of digits to display." +msgstr "" + +#: ../../source/clipboard.txt:2 +msgid "Clipboard" +msgstr "" + +#: ../../source/clipboard.txt:4 +msgid "" +":class:`Gtk.Clipboard` provides a storage area for a variety of data, " +"including text and images. Using a clipboard allows this data to be shared " +"between applications through actions such as copying, cutting, and pasting. " +"These actions are usually done in three ways: using keyboard shortcuts, " +"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." +"Button` widgets." +msgstr "" + +#: ../../source/clipboard.txt:11 +msgid "" +"There are multiple clipboard selections for different purposes. In most " +"circumstances, the selection named ``CLIPBOARD`` is used for everyday " +"copying and pasting. ``PRIMARY`` is another common selection which stores " +"text selected by the user with the cursor." msgstr "" #: ../../source/combobox.txt:2 @@ -948,6 +814,12 @@ msgstr "" #: ../../source/combobox.txt:16 msgid "" +"A default value can be set by calling :meth:`Gtk.ComboBox.set_active` with " +"the index of the desired value." +msgstr "" + +#: ../../source/combobox.txt:19 +msgid "" "The :class:`Gtk.ComboBox` widget usually restricts the user to the available " "choices, but it can optionally have an :class:`Gtk.Entry`, allowing the user " "to enter arbitrary text if none of the available choices are suitable. To do " @@ -956,7 +828,7 @@ msgid "" "ComboBox` instance." msgstr "" -#: ../../source/combobox.txt:23 +#: ../../source/combobox.txt:26 msgid "" "For a simple list of textual choices, the model-view API of :class:`Gtk." "ComboBox` can be a bit overwhelming. In this case, :class:`Gtk.ComboBoxText` " @@ -964,332 +836,374 @@ msgid "" "ComboBoxText` can contain an entry." msgstr "" -#: ../../source/unicode.txt:2 -msgid "How to Deal With Strings" +#: ../../source/dialogs.txt:2 +msgid "Dialogs" msgstr "" -#: ../../source/unicode.txt:4 +#: ../../source/dialogs.txt:4 msgid "" -"This section explains how strings are represented in Python 2.x, Python 3.x " -"and GTK+ and discusses common errors that arise when working with strings." -msgstr "" - -#: ../../source/unicode.txt:8 -msgid "Definitions" +"Dialog windows are very similar to standard windows, and are used to provide " +"or retrieve information from the user. They are often used to provide a " +"preferences window, for example. The major difference a dialog has is some " +"prepacked widgets which layout the dialog automatically. From there, we can " +"simply add labels, buttons, check buttons, etc. Another big difference is " +"the handling of responses to control how the application should behave after " +"the dialog has been interacted with." msgstr "" -#: ../../source/unicode.txt:9 +#: ../../source/dialogs.txt:12 msgid "" -"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " -"**Characters** are abstract representations and their meaning depends on the " -"language and context they are used in. The Unicode standard describes how " -"characters are represented by **code points**. For example the characters " -"above are represented with the code points U+0041, U+0042, U+0043, and U" -"+00C9, respectively. Basically, code points are numbers in the range from 0 " -"to 0x10FFFF." +"There are several derived Dialog classes which you might find useful. :class:" +"`Gtk.MessageDialog` is used for most simple notifications. But at other " +"times you might need to derive your own dialog class to provide more complex " +"functionality." msgstr "" -#: ../../source/unicode.txt:17 -msgid "" -"As mentioned earlier, the representation of a string as a list of code " -"points is abstract. In order to convert this abstract representation into a " -"sequence of bytes, the Unicode string must be **encoded**. The simplest form " -"of encoding is ASCII and is performed as follows:" +#: ../../source/dialogs.txt:18 +msgid "Custom Dialogs" msgstr "" -#: ../../source/unicode.txt:22 +#: ../../source/dialogs.txt:20 msgid "" -"If the code point is < 128, each byte is the same as the value of the code " -"point." +"To pack widgets into a custom dialog, you should pack them into the :class:" +"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" +"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." +"Dialog.add_button` method." msgstr "" -#: ../../source/unicode.txt:25 +#: ../../source/dialogs.txt:25 msgid "" -"If the code point is 128 or greater, the Unicode string can't be represented " -"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " -"this case.)" +"A 'modal' dialog (that is, one which freezes the rest of the application " +"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " +"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " +"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." msgstr "" -#: ../../source/unicode.txt:29 +#: ../../source/dialogs.txt:30 msgid "" -"Although ASCII encoding is simple to apply it can only encode for 128 " -"different characters which is hardly enough. One of the most commonly used " -"encodings that addresses this problem is UTF-8 (it can handle any Unicode " -"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " -"means that 8-bit numbers are used in the encoding." +"Clicking a button will emit a signal called \"response\". If you want to " +"block waiting for a dialog to return before returning control flow to your " +"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " +"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " +"response value that you specified in the :class:`Gtk.Dialog` constructor or :" +"meth:`Gtk.Dialog.add_button`." msgstr "" -#: ../../source/unicode.txt:37 -msgid "Python 2" +#: ../../source/dialogs.txt:36 +msgid "" +"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " +"method removes the dialog from view, however keeps it stored in memory. This " +"is useful to prevent having to construct the dialog again if it needs to be " +"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " +"method can be used to delete the dialog from memory once it is no longer " +"needed. It should be noted that if the dialog needs to be accessed after it " +"has been destroyed, it will need to be constructed again otherwise the " +"dialog window will be empty." msgstr "" -#: ../../source/unicode.txt:40 -msgid "Python 2.x’s Unicode Support" +#: ../../source/dialogs.txt:53 +msgid "MessageDialog" msgstr "" -#: ../../source/unicode.txt:41 +#: ../../source/dialogs.txt:55 msgid "" -"Python 2 comes with two different kinds of objects that can be used to " -"represent strings, :class:`str` and :class:`unicode`. Instances of the " -"latter are used to express Unicode strings, whereas instances of the :class:" -"`str` type are byte representations (the encoded string). Under the hood, " -"Python represents Unicode strings as either 16- or 32-bit integers, " -"depending on how the Python interpreter was compiled. Unicode strings can be " -"converted to 8-bit strings with :meth:`unicode.encode`::" +":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " +"standard message dialogs, with a message, an icon, and buttons for user " +"response You can specify the type of message and the text in the :class:`Gtk." +"MessageDialog` constructor, as well as specifying standard buttons." msgstr "" -#: ../../source/unicode.txt:58 +#: ../../source/dialogs.txt:60 msgid "" -"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " -"string using the given encoding::" +"In some dialogs which require some further explanation of what has happened, " +"a secondary text can be added. In this case, the primary message entered " +"when creating the message dialog is made bigger and set to bold text. The " +"secondary message can be set by calling :meth:`Gtk.MessageDialog." +"format_secondary_text`." msgstr "" -#: ../../source/unicode.txt:68 -msgid "" -"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" -"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " -"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" +#: ../../source/dialogs.txt:74 +msgid "FileChooserDialog" msgstr "" -#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 -msgid "Unicode in GTK+" +#: ../../source/dialogs.txt:76 +msgid "" +"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " +"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " +"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." msgstr "" -#: ../../source/unicode.txt:86 +#: ../../source/dialogs.txt:80 msgid "" -"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " -"method that returns a string you will always obtain an instance of the :" -"class:`str` type. The same applies to methods that expect one or more " -"strings as parameter, they must be UTF-8 encoded. However, for convenience " -"PyGObject will automatically convert any :class:`unicode` instance to :class:" -"`str` if supplied as argument::" +"When creating a :class:`Gtk.FileChooserDialog` you have to define the " +"dialog's purpose:" msgstr "" -#: ../../source/unicode.txt:104 +#: ../../source/dialogs.txt:83 msgid "" -"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " -"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " -"will always return a :class:`str` instance. Accordingly, ``txt`` and " -"``unicode_string`` are *not* equal." +"To select a file for opening, as for a File/Open command, use :attr:`Gtk." +"FileChooserAction.OPEN`" msgstr "" -#: ../../source/unicode.txt:109 +#: ../../source/dialogs.txt:85 msgid "" -"This is especially important if you want to internationalize your program " -"using `gettext `_. You have " -"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " -"languages. In general it is recommended to not use :class:`unicode` objects " -"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " -"since GTK+ does not fully integrate with :class:`unicode` objects. " -"Otherwise, you would have to decode the return values to Unicode strings " -"each time you call a GTK+ method::" +"To save a file for the first time, as for a File/Save command, use :attr:" +"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" +"meth:`Gtk.FileChooser.set_current_name`." msgstr "" -#: ../../source/unicode.txt:122 -msgid "Python 3" +#: ../../source/dialogs.txt:88 +msgid "" +"To save a file under a different name, as for a File/Save As command, use :" +"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" +"`Gtk.FileChooser.set_filename`." msgstr "" -#: ../../source/unicode.txt:125 -msgid "Python 3.x's Unicode support" +#: ../../source/dialogs.txt:91 +msgid "" +"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." +"SELECT_FOLDER`." msgstr "" -#: ../../source/unicode.txt:126 +#: ../../source/dialogs.txt:93 msgid "" -"Since Python 3.0, all strings are stored as Unicode in an instance of the :" -"class:`str` type. *Encoded* strings on the other hand are represented as " -"binary data in the form of instances of the :class:`bytes` type. " -"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " -"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " -"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." +":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " +"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." +"ResponseType.CANCEL` which can be specified in the :class:`Gtk." +"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " +"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " +"expects that at least one button will have of the following response IDs:" msgstr "" -#: ../../source/unicode.txt:133 -msgid "" -"In addition, it is no longer possible to mix Unicode strings with encoded " -"strings, because it will result in a :exc:`TypeError`::" +#: ../../source/dialogs.txt:100 +msgid ":attr:`Gtk.ResponseType.ACCEPT`" msgstr "" -#: ../../source/unicode.txt:149 -msgid "" -"As a consequence, things are much cleaner and consistent with Python 3.x, " -"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " -"a string to a method or a method returns a string. Strings, or *text*, will " -"always be represented as instances of :class:`str` only::" +#: ../../source/dialogs.txt:101 +msgid ":attr:`Gtk.ResponseType.OK`" msgstr "" -#: ../../source/unicode.txt:165 -msgid "References" +#: ../../source/dialogs.txt:102 +msgid ":attr:`Gtk.ResponseType.YES`" msgstr "" -#: ../../source/unicode.txt:166 -msgid "" -"`What's new in Python 3.0 `_ describes the new concepts that " -"clearly distinguish between text and data." +#: ../../source/dialogs.txt:103 +msgid ":attr:`Gtk.ResponseType.APPLY`" msgstr "" -#: ../../source/unicode.txt:169 +#: ../../source/dialogs.txt:105 msgid "" -"The `Unicode HOWTO `_ " -"discusses Python 2.x’s support for Unicode, and explains various problems " -"that people commonly encounter when trying to work with Unicode." +"When the user is finished selecting files, your program can get the selected " +"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " +"(:meth:`Gtk.FileChooser.get_uri`)." msgstr "" -#: ../../source/unicode.txt:173 +#: ../../source/dialogs.txt:109 msgid "" -"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." +"By default, :class:`Gtk.FileChooser` only allows a single file to be " +"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." +"FileChooser.set_select_multiple`. Retrieving a list of selected files is " +"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." +"FileChooser.get_uris`." msgstr "" -#: ../../source/unicode.txt:176 +#: ../../source/dialogs.txt:115 msgid "" -"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " -"encoding." +":class:`Gtk.FileChooser` also supports a variety of options which make the " +"files and folders more configurable and accessible." msgstr "" -#: ../../source/builder.txt:2 -msgid "Glade and Gtk.Builder" +#: ../../source/dialogs.txt:118 +msgid "" +":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." msgstr "" -#: ../../source/builder.txt:3 +#: ../../source/dialogs.txt:119 msgid "" -"The :class:`Gtk.Builder` class offers you the opportunity to design user " -"interfaces without writing a single line of code. This is possible through " -"describing the interface by an XML file and then loading the XML description " -"at runtime and create the objects automatically, which the Builder class " -"does for you. For the purpose of not needing to write the XML manually the " -"`Glade `_ application lets you create the user " -"interface in a WYSIWYG (what you see is what you get) manner" +":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." msgstr "" -#: ../../source/builder.txt:7 -msgid "This method has several advantages:" +#: ../../source/dialogs.txt:120 +msgid "" +":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " +"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " +"confirmation dialog if the user types a file name that already exists." msgstr "" -#: ../../source/builder.txt:9 -msgid "Less code needs to be written." +#: ../../source/dialogs.txt:124 +msgid "" +"Furthermore, you can specify which kind of files are displayed by creating :" +"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." +"add_filter`. The user can then select one of the added filters from a combo " +"box at the bottom of the file chooser." msgstr "" -#: ../../source/builder.txt:10 -msgid "UI changes can be seen more quickly, so UIs are able to improve." +#: ../../source/drag_and_drop.txt:2 +msgid "Drag and Drop" msgstr "" -#: ../../source/builder.txt:11 -msgid "Designers without programming skills can create and edit UIs." +#: ../../source/drag_and_drop.txt:4 +msgid "" +"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " +"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " +"required for the following examples to work." msgstr "" -#: ../../source/builder.txt:12 +#: ../../source/drag_and_drop.txt:8 msgid "" -"The description of the user interface is independent from the programming " -"language being used." +"Setting up drag and drop between widgets consists of selecting a drag source " +"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." +"drag_source_set` method, selecting a drag destination (the widget which the " +"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " +"handling the relevant signals on both widgets." msgstr "" -#: ../../source/builder.txt:14 +#: ../../source/drag_and_drop.txt:14 msgid "" -"There is still code required for handling interface changes triggered by the " -"user, but :class:`Gtk.Builder` allows you to focus on implementing that " -"functionality." +"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." +"drag_dest_set` some specialised widgets require the use of specific " +"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." msgstr "" -#: ../../source/builder.txt:17 -msgid "Creating and loading the .glade file" +#: ../../source/drag_and_drop.txt:18 +msgid "" +"A basic drag and drop only requires the source to connect to the \"drag-data-" +"get\" signal and the destination to connect to the \"drag-data-received\" " +"signal. More complex things such as specific drop areas and custom drag " +"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." msgstr "" -#: ../../source/builder.txt:18 +#: ../../source/drag_and_drop.txt:24 msgid "" -"First of all you have to download and install Glade. There are `several " -"tutorials `_ about " -"Glade, so this is not explained here in detail. Let's start by creating a " -"window with a button in it and saving it to a file named *example.glade*. " -"The resulting XML file should look like this." +"In order to transfer data between the source and destination, you must " +"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" +"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." msgstr "" -#: ../../source/builder.txt:41 -msgid "To load this file in Python we need a :class:`Gtk.Builder` object." +#: ../../source/drag_and_drop.txt:30 +msgid "Target Entries" msgstr "" -#: ../../source/builder.txt:48 +#: ../../source/drag_and_drop.txt:31 msgid "" -"The second line loads all objects defined in *example.glade* into the " -"Builder object." +"To allow the drag source and destination to know what data they are " +"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " +"data that will be sent by the drag source and received by the drag " +"destination." msgstr "" -#: ../../source/builder.txt:50 +#: ../../source/drag_and_drop.txt:36 msgid "" -"It is also possible to load only some of the objects. The following line " -"would add only the objects (and their child objects) given in the tuple." +"There are two ways of adding :class:`Gtk.TargetEntry's ` to " +"a source and destination. If the drag and drop is simple and each target " +"entry is of a different type, you can use the group of methods :meth:" +"`mentioned here `." msgstr "" -#: ../../source/builder.txt:57 +#: ../../source/drag_and_drop.txt:41 msgid "" -"These two methods exist also for loading from a string rather than a file. " -"Their corresponding names are :meth:`Gtk.Builder.add_from_string` and :meth:" -"`Gtk.Builder.add_objects_from_string` and they simply take a XML string " -"instead of a file name." +"If you require more than one type of data or wish to do more complex things " +"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." msgstr "" -#: ../../source/builder.txt:61 -msgid "Accessing widgets" +#: ../../source/drag_and_drop.txt:48 +msgid "Drag Source Signals" msgstr "" -#: ../../source/builder.txt:62 -msgid "" -"Now that the window and the button are loaded we also want to show them. " -"Therefore the :meth:`Gtk.Window.show_all` method has to be called on the " -"window. But how do we access the associated object?" +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Name" msgstr "" -#: ../../source/builder.txt:71 -msgid "" -"Every widget can be retrieved from the builder by the :meth:`Gtk.Builder." -"get_object` method and the widget's *id*. It is really *that* simple." +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "When it is emitted" msgstr "" -#: ../../source/builder.txt:74 -msgid "It is also possible to get a list of all objects with" -msgstr "" +#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 +msgid "Common Purpose" +msgstr "" -#: ../../source/builder.txt:81 -msgid "Connecting Signals" +#: ../../source/drag_and_drop.txt:52 +msgid "drag-begin" msgstr "" -#: ../../source/builder.txt:82 -msgid "" -"Glade also makes it possible to define signals which you can connect to " -"handlers in your code without extracting every object from the builder and " -"connecting to the signals manually. The first thing to do is to declare the " -"signal names in Glade. For this example we will act when the window is " -"closed and when the button was pressed, so we give the name \"onDestroy\" to " -"the callback handling the \"destroy\" signal of the window and " -"\"onButtonPressed\" to the callback handling the \"pressed\" signal of the " -"button. Now the XML file should look like this." +#: ../../source/drag_and_drop.txt:52 +msgid "User starts a drag" msgstr "" -#: ../../source/builder.txt:90 -msgid "" -"Now we have to define the handler functions in our code. The *onDestroy* " -"should simply result in a call to :meth:`Gtk.main_quit`. When the button is " -"pressed we would like to print the string \"Hello World!\", so we define the " -"handler as follows" +#: ../../source/drag_and_drop.txt:52 +msgid "Set-up drag icon" msgstr "" -#: ../../source/builder.txt:99 -msgid "" -"Next, we have to connect the signals and the handler functions. The easiest " -"way to do this is to define a *dict* with a mapping from the names to the " -"handlers and then pass it to the :meth:`Gtk.Builder.connect_signals` method." +#: ../../source/drag_and_drop.txt:54 +msgid "drag-data-get" msgstr "" -#: ../../source/builder.txt:110 -msgid "" -"An alternative approach is to create a class which has methods that are " -"called like the signals. In our example the last code snippet could be " -"rewritten as:" +#: ../../source/drag_and_drop.txt:54 +msgid "When drag data is requested by the destination" msgstr "" -#: ../../source/builder.txt:119 -msgid "The final code of the example" +#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 +msgid "Transfer drag data from source to destination" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "drag-data-delete" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +msgstr "" + +#: ../../source/drag_and_drop.txt:56 +msgid "Delete data from the source to complete the 'move'" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "drag-end" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "When the drag is complete" +msgstr "" + +#: ../../source/drag_and_drop.txt:58 +msgid "Undo anything done in drag-begin" +msgstr "" + +#: ../../source/drag_and_drop.txt:62 +msgid "Drag Destination Signals" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "drag-motion" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 +msgid "Drag icon moves over a drop area" +msgstr "" + +#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 +msgid "Allow only certain areas to be dropped onto" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "drag-drop" +msgstr "" + +#: ../../source/drag_and_drop.txt:68 +msgid "Icon is dropped onto a drag area" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "drag-data-received" +msgstr "" + +#: ../../source/drag_and_drop.txt:70 +msgid "When drag data is received by the destination" msgstr "" #: ../../source/entry.txt:2 @@ -1338,2146 +1252,2293 @@ msgid "" "set_icon_tooltip_text` or the corresponding function for markup." msgstr "" -#: ../../source/basics.txt:4 -msgid "Basics" +#: ../../source/expander.txt:2 +msgid "Expander" msgstr "" -#: ../../source/basics.txt:5 -msgid "This section will introduce some of the most important aspects of GTK+." +#: ../../source/expander.txt:4 +msgid "" +"Expanders allow to dynamically hide or show information within a window or " +"dialog. An expander can take a single widget that will be displayed when " +"expanded." msgstr "" -#: ../../source/basics.txt:12 -msgid "Main loop and Signals" +#: ../../source/expander.txt:8 +msgid "" +"Expanders remain expanded until clicked again. When the state of an expander " +"is changed, the \"activate\" signal is emitted." msgstr "" -#: ../../source/basics.txt:13 +#: ../../source/expander.txt:11 msgid "" -"Like most GUI toolkits, GTK+ uses an event-driven programming model. When " -"the user is doing nothing, GTK+ sits in the main loop and waits for input. " -"If the user performs some action - say, a mouse click - then the main loop " -"\"wakes up\" and delivers an event to GTK+." +"An expander can be programmatically expanded or collapsed by passing `True` " +"or `False` to :meth:`Gtk.Expander.set_expanded`. Note that doing so causes " +"the \"activate\" signal to be emitted." msgstr "" -#: ../../source/basics.txt:18 +#: ../../source/expander.txt:15 msgid "" -"When widgets receive an event, they frequently emit one or more signals. " -"Signals notify your program that \"something interesting happened\" by " -"invoking functions you've connected to the signal. Such functions are " -"commonly known as *callbacks*. When your callbacks are invoked, you would " -"typically take some action - for example, when an Open button is clicked you " -"might display a file chooser dialog. After a callback finishes, GTK+ will " -"return to the main loop and await more user input." +"More than one widget, such as a :class:`Gtk.Label` and :class:`Gtk.Button`, " +"can be added by appending them to a :class:`Gtk.Box`." msgstr "" -#: ../../source/basics.txt:28 -msgid "A generic example is:" +#: ../../source/gallery.txt:2 +msgid "Widget Gallery" msgstr "" -#: ../../source/basics.txt:34 -msgid "" -"Firstly, *widget* is an instance of a widget we created earlier. Next, the " -"event we are interested in. Each widget has its own particular events which " -"can occur. For instance, if you have a button you usually want to connect to " -"the \"clicked\" event. This means that when the button is clicked, the " -"signal is issued. Thirdly, the *callback* argument is the name of the " -"callback function. It contains the code which runs when signals of the " -"specified type are issued. Finally, the *data* argument includes any data " -"which should be passed when the signal is issued. However, this argument is " -"completely optional and can be left out if not required." +#: ../../source/gallery.txt:5 +msgid ":class:`Gtk.AboutDialog`" msgstr "" -#: ../../source/basics.txt:46 -msgid "" -"The function returns a number that identifies this particular signal-" -"callback pair. It is required to disconnect from a signal such that the " -"callback function will not be called during any future or currently ongoing " -"emissions of the signal it has been connected to." +#: ../../source/gallery.txt:6 +msgid ":class:`Gtk.AccelLabel`" msgstr "" -#: ../../source/basics.txt:56 -msgid "" -"If you have lost the \"handler_id\" for some reason (for example the " -"handlers were installed using :func:`Gtk.Builder.connect_signals`), you can " -"still disconnect a specific callback using the function :func:" -"`disconnect_by_func`:" +#: ../../source/gallery.txt:7 +msgid ":class:`Gtk.ActionBar`" msgstr "" -#: ../../source/basics.txt:64 -msgid "" -"Applications should connect to the \"destroy\" signal of the top-level " -"window. It is emitted when an object is destroyed, so when a user requests " -"that a toplevel window is closed, the default handler for this signal " -"destroys the window, but does not terminate the application. Connecting the " -"\"destroy\" signal of the top-level window to the function :func:`Gtk." -"main_quit` will result in the desired behaviour." +#: ../../source/gallery.txt:8 +msgid ":class:`Gtk.AppChooserButton`" msgstr "" -#: ../../source/basics.txt:74 -msgid "" -"Calling :func:`Gtk.main_quit` makes the main loop inside of :func:`Gtk.main` " -"return." +#: ../../source/gallery.txt:9 +msgid ":class:`Gtk.AppChooserDialog`" msgstr "" -#: ../../source/basics.txt:77 ../../source/objects.txt:96 -msgid "Properties" +#: ../../source/gallery.txt:10 +msgid ":class:`Gtk.Assistant`" msgstr "" -#: ../../source/basics.txt:78 -msgid "" -"Properties describe the configuration and state of widgets. As for signals, " -"each widget has its own particular set of properties. For example, a button " -"has the property \"label\" which contains the text of the label widget " -"inside the button. You can specify the name and value of any number of " -"properties as keyword arguments when creating an instance of a widget. To " -"create a label aligned to the right with the text \"Hello World\" and an " -"angle of 25 degrees, use:" +#: ../../source/gallery.txt:11 +msgid ":class:`Gtk.Button`" msgstr "" -#: ../../source/basics.txt:89 -msgid "which is equivalent to" +#: ../../source/gallery.txt:12 +msgid ":class:`Gtk.CheckButton`" msgstr "" -#: ../../source/basics.txt:98 -msgid "" -"Instead of using getters and setters you can also get and set the gobject " -"properties through the \"props\" property such as ``widget.props.prop_name = " -"value``. This is equivalent to the more verbose ``widget.get_property(\"prop-" -"name\")`` and ``widget.set_property(\"prop-name\", value)``." +#: ../../source/gallery.txt:13 +msgid ":class:`Gtk.ColorButton`" msgstr "" -#: ../../source/basics.txt:103 -msgid "" -"To see which properties are available for a widget in the running version of " -"GTK you can \"dir\" the \"props\" property:" +#: ../../source/gallery.txt:14 +msgid ":class:`Gtk.ColorChooserDialog`" msgstr "" -#: ../../source/basics.txt:110 -msgid "This will print in the console the list of properties a Gtk.Box has." +#: ../../source/gallery.txt:15 +msgid ":class:`Gtk.ComboBox`" msgstr "" -#: ../../source/clipboard.txt:2 -msgid "Clipboard" +#: ../../source/gallery.txt:16 +msgid ":class:`Gtk.ComboBoxText`" msgstr "" -#: ../../source/clipboard.txt:4 -msgid "" -":class:`Gtk.Clipboard` provides a storage area for a variety of data, " -"including text and images. Using a clipboard allows this data to be shared " -"between applications through actions such as copying, cutting, and pasting. " -"These actions are usually done in three ways: using keyboard shortcuts, " -"using a :class:`Gtk.MenuItem`, and connecting the functions to :class:`Gtk." -"Button` widgets." +#: ../../source/gallery.txt:17 +msgid ":class:`Gtk.Entry`" msgstr "" -#: ../../source/clipboard.txt:11 -msgid "" -"There are multiple clipboard selections for different purposes. In most " -"circumstances, the selection named ``CLIPBOARD`` is used for everyday " -"copying and pasting. ``PRIMARY`` is another common selection which stores " -"text selected by the user with the cursor." +#: ../../source/gallery.txt:18 +msgid ":class:`Gtk.FileChooserButton`" msgstr "" -#: ../../source/cellrenderers.txt:4 -msgid "CellRenderers" +#: ../../source/gallery.txt:19 +msgid ":class:`Gtk.FileChooserDialog`" msgstr "" -#: ../../source/cellrenderers.txt:6 -msgid "" -":class:`Gtk.CellRenderer` widgets are used to display information within " -"widgets such as the :class:`Gtk.TreeView` or :class:`Gtk.ComboBox`. They " -"work closely with the associated widgets and are very powerful, with lots of " -"configuration options for displaying a large amount of data in different " -"ways. There are seven :class:`Gtk.CellRenderer` widgets which can be used " -"for different purposes:" +#: ../../source/gallery.txt:20 +msgid ":class:`Gtk.FlowBox`" msgstr "" -#: ../../source/cellrenderers.txt:12 -msgid ":class:`Gtk.CellRendererText`" +#: ../../source/gallery.txt:21 +msgid ":class:`Gtk.FontButton`" msgstr "" -#: ../../source/cellrenderers.txt:13 -msgid ":class:`Gtk.CellRendererToggle`" +#: ../../source/gallery.txt:22 +msgid ":class:`Gtk.FontChooserDialog`" msgstr "" -#: ../../source/cellrenderers.txt:14 -msgid ":class:`Gtk.CellRendererPixbuf`" +#: ../../source/gallery.txt:23 +msgid ":class:`Gtk.Frame`" msgstr "" -#: ../../source/cellrenderers.txt:15 -msgid ":class:`Gtk.CellRendererCombo`" -msgstr "" - -#: ../../source/cellrenderers.txt:16 -msgid ":class:`Gtk.CellRendererProgress`" +#: ../../source/gallery.txt:24 +msgid ":class:`Gtk.GLArea`" msgstr "" -#: ../../source/cellrenderers.txt:17 -msgid ":class:`Gtk.CellRendererSpinner`" +#: ../../source/gallery.txt:25 +msgid ":class:`Gtk.Grid`" msgstr "" -#: ../../source/cellrenderers.txt:18 -msgid ":class:`Gtk.CellRendererSpin`" +#: ../../source/gallery.txt:26 +msgid ":class:`Gtk.HeaderBar`" msgstr "" -#: ../../source/cellrenderers.txt:19 -msgid ":class:`Gtk.CellRendererAccel`" +#: ../../source/gallery.txt:27 +msgid ":class:`Gtk.IconView`" msgstr "" -#: ../../source/cellrenderers.txt:22 -msgid "CellRendererText" +#: ../../source/gallery.txt:28 +msgid ":class:`Gtk.Image`" msgstr "" -#: ../../source/cellrenderers.txt:24 -msgid "" -"A :class:`Gtk.CellRendererText` renders a given text in its cell, using the " -"font, color and style information provided by its properties. The text will " -"be ellipsized if it is too long and the \"ellipsize\" property allows it." +#: ../../source/gallery.txt:29 +msgid ":class:`Gtk.InfoBar`" msgstr "" -#: ../../source/cellrenderers.txt:28 -msgid "" -"By default, text in :class:`Gtk.CellRendererText` widgets is not editable. " -"This can be changed by setting the value of the \"editable\" property to " -"``True``:" +#: ../../source/gallery.txt:30 +msgid ":class:`Gtk.Label`" msgstr "" -#: ../../source/cellrenderers.txt:35 -msgid "" -"You can then connect to the \"edited\" signal and update your :class:`Gtk." -"TreeModel` accordingly." +#: ../../source/gallery.txt:31 +msgid ":class:`Gtk.LevelBar`" msgstr "" -#: ../../source/cellrenderers.txt:47 -msgid "CellRendererToggle" +#: ../../source/gallery.txt:32 +msgid ":class:`Gtk.LinkButton`" msgstr "" -#: ../../source/cellrenderers.txt:49 -msgid "" -":class:`Gtk.CellRendererToggle` renders a toggle button in a cell. The " -"button is drawn as a radio- or checkbutton, depending on the \"radio\" " -"property. When activated, it emits the \"toggled\" signal." +#: ../../source/gallery.txt:33 +msgid ":class:`Gtk.ListBox`" msgstr "" -#: ../../source/cellrenderers.txt:53 -msgid "" -"As a :class:`Gtk.CellRendererToggle` can have two states, active and not " -"active, you most likely want to bind the \"active\" property on the cell " -"renderer to a boolean value in the model, thus causing the check button to " -"reflect the state of the model." +#: ../../source/gallery.txt:34 +msgid ":class:`Gtk.LockButton`" msgstr "" -#: ../../source/cellrenderers.txt:67 -msgid "CellRendererPixbuf" +#: ../../source/gallery.txt:35 +msgid ":class:`Gtk.MenuBar`" msgstr "" -#: ../../source/cellrenderers.txt:69 -msgid "" -"A :class:`Gtk.CellRendererPixbuf` can be used to render an image in a cell. " -"It allows to render either a given :class:`Gdk.Pixbuf` (set via the \"pixbuf" -"\" property) or a named icon (set via the \"icon-name\" property)." +#: ../../source/gallery.txt:36 +msgid ":class:`Gtk.MenuButton`" msgstr "" -#: ../../source/cellrenderers.txt:82 -msgid "CellRendererCombo" +#: ../../source/gallery.txt:37 +msgid ":class:`Gtk.MessageDialog`" msgstr "" -#: ../../source/cellrenderers.txt:84 -msgid "" -":class:`Gtk.CellRendererCombo` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererCombo` offers a :" -"class:`Gtk.ComboBox` widget to edit the text. The values to display in the " -"combo box are taken from the :class:`Gtk.TreeModel` specified in the \"model" -"\" property." +#: ../../source/gallery.txt:38 +msgid ":class:`Gtk.Notebook`" msgstr "" -#: ../../source/cellrenderers.txt:90 -msgid "" -"The combo cell renderer takes care of adding a text cell renderer to the " -"combo box and sets it to display the column specified by its \"text-column\" " -"property." +#: ../../source/gallery.txt:39 +msgid ":class:`Gtk.Paned`" msgstr "" -#: ../../source/cellrenderers.txt:93 -msgid "" -"A :class:`Gtk.CellRendererCombo` can operate in two modes. It can be used " -"with and without an associated :class:`Gtk.Entry` widget, depending on the " -"value of the \"has-entry\" property." +#: ../../source/gallery.txt:40 +msgid ":class:`Gtk.PlacesSidebar`" msgstr "" -#: ../../source/cellrenderers.txt:106 -msgid "CellRendererProgress" +#: ../../source/gallery.txt:41 +msgid ":class:`Gtk.ProgressBar`" msgstr "" -#: ../../source/cellrenderers.txt:108 -msgid "" -":class:`Gtk.CellRendererProgress` renders a numeric value as a progress bar " -"in a cell. Additionally, it can display a text on top of the progress bar." +#: ../../source/gallery.txt:42 +msgid ":class:`Gtk.RadioButton`" msgstr "" -#: ../../source/cellrenderers.txt:111 -msgid "" -"The percentage value of the progress bar can be modified by changing the " -"\"value\" property. Similar to :class:`Gtk.ProgressBar`, you can enable the " -"*activity mode* by incrementing the \"pulse\" property instead of the \"value" -"\" property." +#: ../../source/gallery.txt:43 +msgid ":class:`Gtk.RecentChooserDialog`" msgstr "" -#: ../../source/cellrenderers.txt:124 -msgid "CellRendererSpin" +#: ../../source/gallery.txt:44 +msgid ":class:`Gtk.Scale`" msgstr "" -#: ../../source/cellrenderers.txt:126 -msgid "" -":class:`Gtk.CellRendererSpin` renders text in a cell like :class:`Gtk." -"CellRendererText` from which it is derived. But while the latter offers a " -"simple entry to edit the text, :class:`Gtk.CellRendererSpin` offers a :class:" -"`Gtk.SpinButton` widget. Of course, that means that the text has to be " -"parseable as a floating point number." +#: ../../source/gallery.txt:45 +msgid ":class:`Gtk.Scrollbar`" msgstr "" -#: ../../source/cellrenderers.txt:132 -msgid "" -"The range of the spinbutton is taken from the adjustment property of the " -"cell renderer, which can be set explicitly or mapped to a column in the tree " -"model, like all properties of cell renders. :class:`Gtk.CellRendererSpin` " -"also has properties for the climb rate and the number of digits to display." +#: ../../source/gallery.txt:46 +msgid ":class:`Gtk.ScrolledWindow`" msgstr "" -#: ../../source/menus.txt:2 ../../source/application.txt:36 -msgid "Menus" +#: ../../source/gallery.txt:47 +msgid ":class:`Gtk.SearchBar`" msgstr "" -#: ../../source/menus.txt:4 -msgid "" -":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " -"have been deprecated since GTK+ version 3.10 and should not be used in newly-" -"written code. Use the :ref:`application` framework instead." +#: ../../source/gallery.txt:48 +msgid ":class:`Gtk.SearchEntry`" msgstr "" -#: ../../source/menus.txt:8 -msgid "" -"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" -"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " -"contains one or more :class:`Gtk.MenuItem` instances or one of its " -"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " -"commonly used functions of an application. Examples include creating a new " -"document, printing a page or undoing an operation. It contains one or more " -"instances of :class:`Gtk.ToolItem` or one of its subclasses." +#: ../../source/gallery.txt:49 +msgid ":class:`Gtk.Separator`" msgstr "" -#: ../../source/menus.txt:17 ../../source/application.txt:12 -msgid "Actions" +#: ../../source/gallery.txt:50 +msgid ":class:`Gtk.SpinButton`" msgstr "" -#: ../../source/menus.txt:19 -msgid "" -"Although, there are specific APIs to create menus and toolbars, you should " -"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " -"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " -"from names to :class:`Gtk.Action` objects. All actions that would make sense " -"to use in a particular context should be in a single group. Multiple action " -"groups may be used for a particular user interface. In fact, it is expected " -"that most non-trivial applications will make use of multiple groups. For " -"example, in an application that can edit multiple documents, one group " -"holding global actions (e.g. quit, about, new), and one group per document " -"holding actions that act on that document (eg. save, cut/copy/paste, etc). " -"Each window's menus would be constructed from a combination of two action " -"groups." +#: ../../source/gallery.txt:51 +msgid ":class:`Gtk.Spinner`" msgstr "" -#: ../../source/menus.txt:31 -msgid "Different classes representing different types of actions exist:" +#: ../../source/gallery.txt:52 +msgid ":class:`Gtk.Stack`" msgstr "" -#: ../../source/menus.txt:33 -msgid "" -":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " -"item" +#: ../../source/gallery.txt:53 +msgid ":class:`Gtk.StackSwitcher`" msgstr "" -#: ../../source/menus.txt:35 -msgid "" -":class:`Gtk.ToggleAction`: An action which can be toggled between two states" +#: ../../source/gallery.txt:54 +msgid ":class:`Gtk.Statusbar`" msgstr "" -#: ../../source/menus.txt:36 -msgid "" -":class:`Gtk.RadioAction`: An action of which only one in a group can be " -"active" +#: ../../source/gallery.txt:55 +msgid ":class:`Gtk.Switch`" msgstr "" -#: ../../source/menus.txt:38 -msgid "" -":class:`Gtk.RecentAction`: An action of which represents a list of recently " -"used files" +#: ../../source/gallery.txt:56 +msgid ":class:`Gtk.TextView`" msgstr "" -#: ../../source/menus.txt:41 -msgid "" -"Actions represent operations that the user can be perform, along with some " -"information how it should be presented in the interface, including its name " -"(not for display), its label (for display), an accelerator, whether a label " -"indicates a tooltip as well as the callback that is called when the action " -"gets activated." +#: ../../source/gallery.txt:57 +msgid ":class:`Gtk.ToggleButton`" msgstr "" -#: ../../source/menus.txt:47 -msgid "" -"You can create actions by either calling one of the constructors directly " -"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." -"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " -"by calling one of the convenience functions:" +#: ../../source/gallery.txt:58 +msgid ":class:`Gtk.ToolPalette`" msgstr "" -#: ../../source/menus.txt:52 -msgid ":meth:`Gtk.ActionGroup.add_actions`," +#: ../../source/gallery.txt:59 +msgid ":class:`Gtk.Toolbar`" msgstr "" -#: ../../source/menus.txt:53 -msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" +#: ../../source/gallery.txt:60 +msgid ":class:`Gtk.TreeView`" msgstr "" -#: ../../source/menus.txt:54 -msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." +#: ../../source/gallery.txt:61 +msgid ":class:`Gtk.VolumeButton`" msgstr "" -#: ../../source/menus.txt:56 -msgid "Note that you must specify actions for sub menus as well as menu items." +#: ../../source/gallery.txt:62 +msgid ":class:`Gtk.Window`" msgstr "" -#: ../../source/menus.txt:59 -msgid "UI Manager" +#: ../../source/iconview.txt:2 +msgid "IconView" msgstr "" -#: ../../source/menus.txt:61 +#: ../../source/iconview.txt:3 msgid "" -":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " -"using an `XML-like description `_." +"A :class:`Gtk.IconView` is a widget that displays a collection of icons in a " +"grid view. It supports features such as drag and drop, multiple selections " +"and item reordering." msgstr "" -#: ../../source/menus.txt:64 +#: ../../source/iconview.txt:5 msgid "" -"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " -"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " -"idea to tell the parent window to respond to the specified keyboard " -"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." -"Window.add_accel_group`." +"Similarly to :class:`Gtk.TreeView`, :class:`Gtk.IconView` uses a :class:`Gtk." +"ListStore` for its model. Instead of using :ref:`cell renderers " +"`, :class:`Gtk.IconView` requires that one of the columns in " +"its :class:`Gtk.ListStore` contains :class:`GdkPixbuf.Pixbuf` objects." msgstr "" -#: ../../source/menus.txt:69 +#: ../../source/iconview.txt:7 msgid "" -"Then, you can define the actual visible layout of the menus and toolbars, " -"and add the UI layout. This \"ui string\" uses an XML format, in which you " -"should mention the names of the actions that you have already created. " -"Remember that these names are just the identifiers that we used when " -"creating the actions. They are not the text that the user will see in the " -"menus and toolbars. We provided those human-readable names when we created " -"the actions." +":class:`Gtk.IconView` supports numerous selection modes to allow for either " +"selecting multiple icons at a time, restricting selections to just one item " +"or disallowing selecting items completely. To specify a selection mode, the :" +"meth:`Gtk.IconView.set_selection_mode` method is used with one of the :class:" +"`Gtk.SelectionMode` selection modes." msgstr "" -#: ../../source/menus.txt:76 -msgid "" -"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " -"and add the widget to a container such as :class:`Gtk.Box`." +#: ../../source/index.txt:62 +msgid "Deprecated" msgstr "" -#: ../../source/textview.txt:2 -msgid "Multiline Text Editor" +#: ../../source/index.txt:7 +msgid "The Python GTK+ 3 Tutorial" msgstr "" -#: ../../source/textview.txt:4 -msgid "" -"The :class:`Gtk.TextView` widget can be used to display and edit large " -"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" -"view design. In this case the :class:`Gtk.TextBuffer` is the model which " -"represents the text being edited. This allows two or more :class:`Gtk." -"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " -"those text buffers to be displayed slightly differently. Or you could " -"maintain several text buffers and choose to display each one at different " -"times in the same :class:`Gtk.TextView` widget." +#: ../../source/index.txt:0 +msgid "Release" msgstr "" -#: ../../source/textview.txt:13 ../../source/treeview.txt:141 -msgid "The View" +#: ../../source/index.txt:9 +msgid "|version|" msgstr "" -#: ../../source/textview.txt:15 +#: ../../source/index.txt:0 +msgid "Date" +msgstr "" + +#: ../../source/index.txt:10 +msgid "|today|" +msgstr "" + +#: ../../source/index.txt:0 +msgid "Copyright" +msgstr "" + +#: ../../source/index.txt:11 msgid "" -"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " -"and delete textual data. They are commonly used to edit multiple lines of " -"text. When creating a :class:`Gtk.TextView` it contains its own default :" -"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." -"get_buffer` method." +"GNU Free Documentation License 1.3 with no Invariant Sections, no Front-" +"Cover Texts, and no Back-Cover Texts" msgstr "" -#: ../../source/textview.txt:21 +#: ../../source/index.txt:13 msgid "" -"By default, text can be added, edited and removed from the :class:`Gtk." -"TextView`. You can disable this by calling :meth:`Gtk.TextView." -"set_editable`. If the text is not editable, you usually want to hide the " -"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " -"cases it may be useful to set the justification of the text with :meth:`Gtk." -"TextView.set_justification`. The text can be displayed at the left edge, (:" -"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." -"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " -"the complete width (:attr:`Gtk.Justification.FILL`)." +"This tutorial gives an introduction to writing GTK+ 3 applications in Python." msgstr "" -#: ../../source/textview.txt:31 +#: ../../source/index.txt:15 msgid "" -"Another default setting of the :class:`Gtk.TextView` widget is long lines of " -"text will continue horizontally until a break is entered. To wrap the text " -"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." -"set_wrap_mode`." +"Prior to working through this tutorial, it is recommended that you have a " +"reasonable grasp of the Python programming language. GUI programming " +"introduces new problems compared to interacting with the standard output " +"(console / terminal). It is necessary for you to know how to create and run " +"Python files, understand basic interpreter errors, and work with strings, " +"integers, floats and Boolean values. For the more advanced widgets in this " +"tutorial, good knowledge of lists and tuples will be needed." msgstr "" -#: ../../source/textview.txt:36 ../../source/treeview.txt:21 -msgid "The Model" +#: ../../source/index.txt:25 +msgid "" +"Although this tutorial describes the most important classes and methods " +"within GTK+ 3, it is not supposed to serve as an API reference. Please refer " +"to the `GTK+ 3 Reference Manual `_ " +"for a detailed description of the API. Also there's a `Python-specific " +"reference `_ available." msgstr "" -#: ../../source/textview.txt:38 +#: ../../source/index.txt:31 +msgid "Contents:" +msgstr "" + +#: ../../source/index.txt:70 +msgid "Indices and tables" +msgstr "" + +#: ../../source/index.txt:72 +msgid ":ref:`search`" +msgstr "" + +#: ../../source/install.txt:4 +msgid "Installation" +msgstr "" + +#: ../../source/install.txt:5 msgid "" -"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " -"and is used to hold whatever text is being displayed in the :class:`Gtk." -"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." -"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " -"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." -"TextIter`. An iterator represents a position between two characters in the " -"text buffer. Iterators are not valid indefinitely; whenever the buffer is " -"modified in a way that affects the contents of the buffer, all outstanding " -"iterators become invalid." +"The first step before we start with actual coding consists of setting up " +"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " +"developers to access GObject-based libraries such as GTK+ within Python. It " +"exclusively supports GTK+ version 3 or later." msgstr "" -#: ../../source/textview.txt:48 +#: ../../source/install.txt:12 +msgid "Dependencies" +msgstr "" + +#: ../../source/install.txt:14 +msgid "GTK+3" +msgstr "" + +#: ../../source/install.txt:16 +msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +msgstr "" + +#: ../../source/install.txt:18 +msgid "gobject-introspection" +msgstr "" + +#: ../../source/install.txt:21 +msgid "Prebuilt Packages" +msgstr "" + +#: ../../source/install.txt:22 msgid "" -"Because of this, iterators can't be used to preserve positions across buffer " -"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " -"buffer contains two built-in marks; an \"insert\" mark (which is the " -"position of the cursor) and the \"selection_bound\" mark. Both of them can " -"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." -"TextBuffer.get_selection_bound`, respectively. By default, the location of " -"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" -"`Gtk.TextMark.set_visible`." +"Recent versions of PyGObject and its dependencies are packaged by nearly all " +"major Linux distributions. So, if you use Linux, you can probably get " +"started by installing the package from the official repository for your " +"distribution." msgstr "" -#: ../../source/textview.txt:56 +#: ../../source/install.txt:28 +msgid "Installing From Source" +msgstr "" + +#: ../../source/install.txt:29 msgid "" -"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" -"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " -"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " -"returns an iterator pointing past the last valid character. Retrieving the " -"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." -"get_selection_bounds`." +"The easiest way to install PyGObject from source is using `JHBuild`_. It is " +"designed to easily build source packages and discover what dependencies need " +"to be build and in what order. To setup JHBuild, please follow the `JHBuild " +"manual`_." msgstr "" -#: ../../source/textview.txt:63 +#: ../../source/install.txt:33 msgid "" -"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " -"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " -"inserts text wherever the cursor may be currently positioned. To remove " -"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." +"Once you have installed JHBuild successfully, download the latest " +"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " +"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." msgstr "" -#: ../../source/textview.txt:68 +#: ../../source/install.txt:37 msgid "" -"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " -"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." -"backward_search`. The start and end iters are used as the starting point of " -"the search and move forwards/backwards depending on requirements." +"If you have not done it before, verify that your build environment is setup " +"correctly by running::" msgstr "" -#: ../../source/textview.txt:75 -msgid "Tags" +#: ../../source/install.txt:42 +msgid "" +"It will print any applications and libraries that are currently missing on " +"your system but required for building. You should install those using your " +"distribution's package repository. A list of `package names `_ for different " +"distributions is maintained on the GNOME wiki. Run the command above again " +"to ensure the required tools are present." msgstr "" -#: ../../source/textview.txt:77 +#: ../../source/install.txt:48 msgid "" -"Text in a buffer can be marked with tags. A tag is an attribute that can be " -"applied to some range of text. For example, a tag might be called \"bold\" " -"and make the text inside the tag bold. However, the tag concept is more " -"general than that; tags don't have to affect appearance. They can instead " -"affect the behaviour of mouse and key presses, \"lock\" a range of text so " -"the user can't edit it, or countless other things. A tag is represented by " -"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " -"any number of text ranges in any number of buffers." +"Executing the following command will build PyGObject and all its " +"dependencies::" msgstr "" -#: ../../source/textview.txt:86 +#: ../../source/install.txt:52 +msgid "Finally, you might want to install GTK+ from source as well::" +msgstr "" + +#: ../../source/install.txt:56 +msgid "To start a shell with the same environment as used by JHBuild, run::" +msgstr "" + +#: ../../source/install.txt:64 +msgid "https://download.gnome.org/teams/releng/" +msgstr "" + +#: ../../source/introduction.txt:4 +msgid "Getting Started" +msgstr "" + +#: ../../source/introduction.txt:7 +msgid "Simple Example" +msgstr "" + +#: ../../source/introduction.txt:9 msgid "" -"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " -"of tags that can be used together. Each buffer has one tag table associated " -"with it; only tags from that tag table can be used with the buffer. A single " -"tag table can be shared between multiple buffers, however." +"To start with our tutorial we create the simplest program possible. This " +"program will create an empty 200 x 200 pixel window." msgstr "" -#: ../../source/textview.txt:91 +#: ../../source/introduction.txt:17 +msgid "We will now explain each line of the example." +msgstr "" + +#: ../../source/introduction.txt:22 msgid "" -"To specify that some text in the buffer should have specific formatting, you " -"must define a tag to hold that formatting information, and then apply that " -"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" -"`Gtk.TextBuffer.apply_tag`::" +"In the beginning, we have to import the Gtk module to be able to access GTK" +"+'s classes and functions. Since a user's system can have multiple versions " +"of GTK+ installed at the same, we want to make sure that when we import Gtk " +"that it refers to GTK+ 3 and not any other version of the library, which is " +"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." msgstr "" -#: ../../source/textview.txt:99 -msgid "The following are some of the common styles applied to text:" +#: ../../source/introduction.txt:29 +msgid "The next line creates an empty window." msgstr "" -#: ../../source/textview.txt:101 -msgid "Background colour (\"foreground\" property)" +#: ../../source/introduction.txt:34 +msgid "" +"Followed by connecting to the window's delete event to ensure that the " +"application is terminated if we click on the *x* to close the window." msgstr "" -#: ../../source/textview.txt:102 -msgid "Foreground colour (\"background\" property)" +#: ../../source/introduction.txt:40 +msgid "In the next step we display the window." msgstr "" -#: ../../source/textview.txt:103 -msgid "Underline (\"underline\" property)" +#: ../../source/introduction.txt:45 +msgid "" +"Finally, we start the GTK+ processing loop which we quit when the window is " +"closed (see line 6)." msgstr "" -#: ../../source/textview.txt:104 -msgid "Bold (\"weight\" property)" +#: ../../source/introduction.txt:51 +msgid "" +"To run the program, open a terminal, change to the directory of the file, " +"and enter::" msgstr "" -#: ../../source/textview.txt:105 -msgid "Italics (\"style\" property)" +#: ../../source/introduction.txt:57 +msgid "Extended Example" msgstr "" -#: ../../source/textview.txt:106 -msgid "Strikethrough (\"strikethrough\" property)" +#: ../../source/introduction.txt:58 +msgid "" +"For something a little more useful, here's the PyGObject version of the " +"classic \"Hello World\" program." msgstr "" -#: ../../source/textview.txt:107 -msgid "Justification (\"justification\" property)" +#: ../../source/introduction.txt:66 +msgid "" +"This example differs from the simple example as we sub-class :class:`Gtk." +"Window` to define our own :class:`MyWindow` class." msgstr "" -#: ../../source/textview.txt:108 -msgid "Size (\"size\" and \"size-points\" properties)" +#: ../../source/introduction.txt:72 +msgid "" +"In the class's constructor we have to call the constructor of the super " +"class. In addition, we tell it to set the value of the property `title` to " +"`Hello World`." msgstr "" -#: ../../source/textview.txt:109 -msgid "Text wrapping (\"wrap-mode\" property)" +#: ../../source/introduction.txt:78 +msgid "" +"The next three lines are used to create a button widget, connect to its " +"`clicked` signal and add it as child to the top-level window." msgstr "" -#: ../../source/textview.txt:111 +#: ../../source/introduction.txt:84 msgid "" -"You can also delete particular tags later using :meth:`Gtk.TextBuffer." -"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." -"TextBuffer.remove_all_tags`." +"Accordingly, the method :meth:`on_button_clicked` will be called if you " +"click on the button." +msgstr "" + +#: ../../source/introduction.txt:89 +msgid "" +"The last block, outside of the class, is very similar to the simple example " +"above, but instead of creating an instance of the generic :class:`Gtk." +"Window` class, we create an instance of :class:`MyWindow`." msgstr "" #: ../../source/label.txt:2 msgid "Label" msgstr "" -#: ../../source/label.txt:4 +#: ../../source/label.txt:4 +msgid "" +"Labels are the main method of placing non-editable text in windows, for " +"instance to place a title next to a :class:`Gtk.Entry` widget. You can " +"specify the text in the constructor, or later with the :meth:`Gtk.Label." +"set_text` or :meth:`Gtk.Label.set_markup` methods." +msgstr "" + +#: ../../source/label.txt:9 +msgid "" +"The width of the label will be adjusted automatically. You can produce multi-" +"line labels by putting line breaks (\"\\\\n\") in the label string." +msgstr "" + +#: ../../source/label.txt:12 +msgid "" +"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " +"Selectable labels allow the user to copy the label contents to the " +"clipboard. Only labels that contain useful-to-copy information — such as " +"error messages — should be made selectable." +msgstr "" + +#: ../../source/label.txt:17 +msgid "" +"The label text can be justified using the :meth:`Gtk.Label.set_justify` " +"method. The widget is also capable of word-wrapping, which can be activated " +"with :meth:`Gtk.Label.set_line_wrap`." +msgstr "" + +#: ../../source/label.txt:21 +msgid "" +":class:`Gtk.Label` support some simple formatting, for instance allowing you " +"to make some text bold, colored, or larger. You can do this by providing a " +"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " +"[#pango]_. For instance, ``bold text and strikethrough text``. " +"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " +"for links is borrowed from HTML, using the a with href and title attributes. " +"GTK+ renders links similar to the way they appear in web browsers, with " +"colored, underlined text. The title attribute is displayed as a tooltip on " +"the link." +msgstr "" + +#: ../../source/label.txt:37 +msgid "" +"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " +"label, used for keyboard navigation. Mnemonics are created by providing a " +"string with an underscore before the mnemonic character, such as \"_File\", " +"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." +"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " +"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " +"not inside the mnemonic's target widget, you have to tell the label about " +"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +msgstr "" + +#: ../../source/label.txt:55 +msgid "" +"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." +"html" +msgstr "" + +#: ../../source/layout.txt:4 +msgid "Layout Containers" +msgstr "" + +#: ../../source/layout.txt:5 +msgid "" +"While many GUI toolkits require you to precisely place widgets in a window, " +"using absolute positioning, GTK+ uses a different approach. Rather than " +"specifying the position and size of each widget in the window, you can " +"arrange your widgets in rows, columns, and/or tables. The size of your " +"window can be determined automatically, based on the sizes of the widgets it " +"contains. And the sizes of the widgets are, in turn, determined by the " +"amount of text they contain, or the minimum and maximum sizes that you " +"specify, and/or how you have requested that the available space should be " +"shared between sets of widgets. You can perfect your layout by specifying " +"padding distance and centering values for each of your widgets. GTK+ then " +"uses all this information to resize and reposition everything sensibly and " +"smoothly when the user manipulates the window." +msgstr "" + +#: ../../source/layout.txt:19 +msgid "" +"GTK+ arranges widgets hierarchically, using *containers*. They are invisible " +"to the end user and are inserted into a window, or placed within each other " +"to layout components. There are two flavours of containers: single-child " +"containers, which are all descendants of :class:`Gtk.Bin`, and multiple-" +"child containers, which are descendants of :class:`Gtk.Container`. The most " +"commonly used are vertical or horizontal boxes (:class:`Gtk.Box`) and grids " +"(:class:`Gtk.Grid`)." +msgstr "" + +#: ../../source/layout.txt:29 +msgid "Boxes" +msgstr "" + +#: ../../source/layout.txt:31 +msgid "" +"Boxes are invisible containers into which we can pack our widgets. When " +"packing widgets into a horizontal box, the objects are inserted horizontally " +"from left to right or right to left depending on whether :meth:`Gtk.Box." +"pack_start` or :meth:`Gtk.Box.pack_end` is used. In a vertical box, widgets " +"are packed from top to bottom or vice versa. You may use any combination of " +"boxes inside or beside other boxes to create the desired effect." +msgstr "" + +#: ../../source/layout.txt:42 +msgid "" +"Let's take a look at a slightly modified version of the extended example " +"with two buttons." +msgstr "" + +#: ../../source/layout.txt:50 +msgid "" +"First, we create a horizontally orientated box container where 6 pixels are " +"placed between children. This box becomes the child of the top-level window." +msgstr "" + +#: ../../source/layout.txt:56 +msgid "Subsequently, we add two different buttons to the box container." +msgstr "" + +#: ../../source/layout.txt:61 +msgid "" +"While with :meth:`Gtk.Box.pack_start` widgets are positioned from left to " +"right, :meth:`Gtk.Box.pack_end` positions them from right to left." +msgstr "" + +#: ../../source/layout.txt:67 +msgid "Grid" +msgstr "" + +#: ../../source/layout.txt:68 +msgid "" +":class:`Gtk.Grid` is a container which arranges its child widgets in rows " +"and columns, but you do not need to specify the dimensions in the " +"constructor. Children are added using :meth:`Gtk.Grid.attach`. They can span " +"multiple rows or columns. The :meth:`Gtk.Grid.attach` method takes five " +"parameters:" +msgstr "" + +#: ../../source/layout.txt:73 +msgid "The ``child`` parameter is the :class:`Gtk.Widget` to add." +msgstr "" + +#: ../../source/layout.txt:74 +msgid "``left`` is the column number to attach the left side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:75 +msgid "" +"``top`` indicates the row number to attach the top side of ``child`` to." +msgstr "" + +#: ../../source/layout.txt:76 msgid "" -"Labels are the main method of placing non-editable text in windows, for " -"instance to place a title next to a :class:`Gtk.Entry` widget. You can " -"specify the text in the constructor, or later with the :meth:`Gtk.Label." -"set_text` or :meth:`Gtk.Label.set_markup` methods." +"``width`` and ``height`` indicate the number of columns that the ``child`` " +"will span, and the number of rows that the ``child`` will span, respectively." msgstr "" -#: ../../source/label.txt:9 +#: ../../source/layout.txt:79 msgid "" -"The width of the label will be adjusted automatically. You can produce multi-" -"line labels by putting line breaks (\"\\\\n\") in the label string." +"It is also possible to add a child next to an existing child, using :meth:" +"`Gtk.Grid.attach_next_to`, which also takes five parameters:" msgstr "" -#: ../../source/label.txt:12 -msgid "" -"Labels can be made selectable with :meth:`Gtk.Label.set_selectable`. " -"Selectable labels allow the user to copy the label contents to the " -"clipboard. Only labels that contain useful-to-copy information — such as " -"error messages — should be made selectable." +#: ../../source/layout.txt:82 +msgid "``child`` is the :class:`Gtk.Widget` to add, as above." msgstr "" -#: ../../source/label.txt:17 +#: ../../source/layout.txt:83 msgid "" -"The label text can be justified using the :meth:`Gtk.Label.set_justify` " -"method. The widget is also capable of word-wrapping, which can be activated " -"with :meth:`Gtk.Label.set_line_wrap`." +"``sibling`` is an existing child widget of ``self`` (a :class:`Gtk.Grid` " +"instance) or ``None``. The ``child`` widget will be placed next to " +"``sibling``, or if ``sibling`` is ``None``, at the beginning or end of the " +"grid." msgstr "" -#: ../../source/label.txt:21 +#: ../../source/layout.txt:86 msgid "" -":class:`Gtk.Label` support some simple formatting, for instance allowing you " -"to make some text bold, colored, or larger. You can do this by providing a " -"string to :meth:`Gtk.Label.set_markup`, using the Pango Markup syntax " -"[#pango]_. For instance, ``bold text and strikethrough text``. " -"In addition, :class:`Gtk.Label` supports clickable hyperlinks. The markup " -"for links is borrowed from HTML, using the a with href and title attributes. " -"GTK+ renders links similar to the way they appear in web browsers, with " -"colored, underlined text. The title attribute is displayed as a tooltip on " -"the link." +"``side`` is a :class:`Gtk.PositionType` indicating the side of ``sibling`` " +"that ``child`` is positioned next to." msgstr "" -#: ../../source/label.txt:37 +#: ../../source/layout.txt:88 msgid "" -"Labels may contain *mnemonics*. Mnemonics are underlined characters in the " -"label, used for keyboard navigation. Mnemonics are created by providing a " -"string with an underscore before the mnemonic character, such as \"_File\", " -"to the functions :meth:`Gtk.Label.new_with_mnemonic` or :meth:`Gtk.Label." -"set_text_with_mnemonic`. Mnemonics automatically activate any activatable " -"widget the label is inside, such as a :class:`Gtk.Button`; if the label is " -"not inside the mnemonic's target widget, you have to tell the label about " -"the target using :meth:`Gtk.Label.set_mnemonic_widget`." +"``width`` and ``height`` indicate the number of columns and rows the " +"``child`` widget will span, respectively." msgstr "" -#: ../../source/label.txt:55 +#: ../../source/layout.txt:91 msgid "" -"Pango Markup Syntax, https://developer.gnome.org/pango/stable/pango-Markup." -"html" +"Finally, :class:`Gtk.Grid` can be used like a :class:`Gtk.Box` by just " +"using :meth:`Gtk.Grid.add`, which will place children next to each other in " +"the direction determined by the \"orientation\" property (defaults to :attr:" +"`Gtk.Orientation.HORIZONTAL`)." msgstr "" -#: ../../source/treeview.txt:2 -msgid "Tree and List Widgets" +#: ../../source/layout.txt:105 +msgid "ListBox" msgstr "" -#: ../../source/treeview.txt:4 +#: ../../source/layout.txt:107 msgid "" -"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " -"way of displaying data. They are used in conjunction with a :class:`Gtk." -"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " -"manipulating data in many ways, including:" +"A :class:`Gtk.ListBox` is a vertical container that contains :class:`Gtk." +"ListBoxRow` children. These rows can be dynamically sorted and filtered, and " +"headers can be added dynamically depending on the row content. It also " +"allows keyboard and mouse navigation and selection like a typical list." msgstr "" -#: ../../source/treeview.txt:9 -msgid "Automatic updates when data is added, removed or edited" +#: ../../source/layout.txt:112 +msgid "" +"Using :class:`Gtk.ListBox` is often an alternative to :class:`Gtk.TreeView`, " +"especially when the list content has a more complicated layout than what is " +"allowed by a :class:`Gtk.CellRenderer`, or when the content is interactive " +"(i.e. has a button in it)." msgstr "" -#: ../../source/treeview.txt:10 -msgid "Drag and drop support" +#: ../../source/layout.txt:117 +msgid "" +"Although a :class:`Gtk.ListBox` must have only :class:`Gtk.ListBoxRow` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container.add` " +"and a :class:`Gtk.ListBoxRow` widget will automatically be inserted between " +"the list and the widget." msgstr "" -#: ../../source/treeview.txt:11 -msgid "Sorting data" +#: ../../source/layout.txt:131 +msgid "Stack and StackSwitcher" msgstr "" -#: ../../source/treeview.txt:12 -msgid "Embedding widgets such as check boxes, progress bars, etc." +#: ../../source/layout.txt:133 +msgid "" +"A :class:`Gtk.Stack` is a container which only shows one of its children at " +"a time. In contrast to :class:`Gtk.Notebook`, :class:`Gtk.Stack` does not " +"provide a means for users to change the visible child. Instead, the :class:" +"`Gtk.StackSwitcher` widget can be used with :class:`Gtk.Stack` to provide " +"this functionality." msgstr "" -#: ../../source/treeview.txt:13 -msgid "Reorderable and resizable columns" +#: ../../source/layout.txt:139 +msgid "" +"Transitions between pages can be animated as slides or fades. This can be " +"controlled with :meth:`Gtk.Stack.set_transition_type`. These animations " +"respect the \"gtk-enable-animations\" setting." msgstr "" -#: ../../source/treeview.txt:14 -msgid "Filtering data" +#: ../../source/layout.txt:143 +msgid "" +"Transition speed can be adjusted with :meth:`Gtk.Stack." +"set_transition_duration`" msgstr "" -#: ../../source/treeview.txt:16 +#: ../../source/layout.txt:145 msgid "" -"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " -"It is often difficult for beginner developers to be able to utilize it " -"correctly due to the number of methods which are required." +"The :class:`Gtk.StackSwitcher` widget acts as a controller for a :class:`Gtk." +"Stack`; it shows a row of buttons to switch between the various pages of the " +"associated stack widget." msgstr "" -#: ../../source/treeview.txt:22 +#: ../../source/layout.txt:149 msgid "" -"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " -"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " -"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " -"the same underlying data to be displayed and edited in 2 different ways at " -"the same time. Or the 2 Views might display different columns from the same " -"Model data, in the same way that 2 SQL queries (or \"views\") might show " -"different fields from the same database table." +"All the content for the buttons comes from the child properties of the :" +"class:`Gtk.Stack`." msgstr "" -#: ../../source/treeview.txt:30 +#: ../../source/layout.txt:152 msgid "" -"Although you can theoretically implement your own Model, you will normally " -"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " -"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " -"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " -"each row may have child rows." +"It is possible to associate multiple :class:`Gtk.StackSwitcher` widgets with " +"the same :class:`Gtk.Stack` widget." msgstr "" -#: ../../source/treeview.txt:36 -msgid "" -"When constructing a model you have to specify the data types for each column " -"the model holds." +#: ../../source/layout.txt:164 +msgid "HeaderBar" msgstr "" -#: ../../source/treeview.txt:43 +#: ../../source/layout.txt:166 msgid "" -"This creates a list store with three columns, two string columns, and a " -"float column." +"A :class:`Gtk.HeaderBar` is similar to a horizontal :class:`Gtk.Box`, it " +"allows to place children at the start or the end. In addition, it allows a " +"title to be displayed. The title will be centered with respect to the width " +"of the box, even if the children at either side take up different amounts of " +"space." msgstr "" -#: ../../source/treeview.txt:46 +#: ../../source/layout.txt:171 msgid "" -"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" -"`Gtk.TreeStore.append`, depending upon which sort of model was created." +"Since GTK+ now supports Client Side Decoration, a :class:`Gtk.HeaderBar` can " +"be used in place of the title bar (which is rendered by the Window Manager)." msgstr "" -#: ../../source/treeview.txt:54 +#: ../../source/layout.txt:174 msgid "" -"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " -"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " -"by calling :meth:`Gtk.TreeModel.get_iter`." +"A :class:`Gtk.HeaderBar` is usually located across the top of a window and " +"should contain commonly used controls which affect the content below. They " +"also provide access to window controls, including the close window button " +"and window menu." msgstr "" -#: ../../source/treeview.txt:58 -msgid "" -"Once data has been inserted, you can retrieve or modify data using the tree " -"iter and column index." +#: ../../source/layout.txt:188 +msgid "FlowBox" msgstr "" -#: ../../source/treeview.txt:66 -msgid "" -"As with Python's built-in :class:`list` object you can use :func:`len` to " -"get the number of rows and use slices to retrieve or set values." +#: ../../source/layout.txt:190 +msgid "This example requires at least GTK+ 3.12." msgstr "" -#: ../../source/treeview.txt:80 -msgid "Iterating over all rows of a tree model is very simple as well." +#: ../../source/layout.txt:192 +msgid "" +"A :class:`Gtk.FlowBox` is a container that positions child widgets in " +"sequence according to its orientation." msgstr "" -#: ../../source/treeview.txt:88 +#: ../../source/layout.txt:195 msgid "" -"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " -"only iterate over the rows of the top level, but not the children of the " -"nodes. To iterate over all rows and its children, use the " -"``print_tree_store`` function." +"For instance, with the horizontal orientation, the widgets will be arranged " +"from left to right, starting a new row under the previous row when " +"necessary. Reducing the width in this case will require more rows, so a " +"larger height will be requested." msgstr "" -#: ../../source/treeview.txt:106 +#: ../../source/layout.txt:200 msgid "" -"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" -"like method mentioned above, it is also possible to either use :class:`Gtk." -"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " -"row in a tree model. One can convert a path to an iterator by calling :meth:" -"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " -"i.e. nodes do not have any child nodes, a path is essentially the index of " -"the row you want to access." +"Likewise, with the vertical orientation, the widgets will be arranged from " +"top to bottom, starting a new column to the right when necessary. Reducing " +"the height will require more columns, so a larger width will be requested." msgstr "" -#: ../../source/treeview.txt:123 +#: ../../source/layout.txt:204 msgid "" -"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " -"string. The string form is a list of numbers separated by a colon. Each " -"number refers to the offset at that level. Thus, the path \"0\" refers to " -"the root node and the path \"2:4\" refers to the fifth child of the third " -"node." +"The children of a :class:`Gtk.FlowBox` can be dynamically sorted and " +"filtered." msgstr "" -#: ../../source/treeview.txt:136 +#: ../../source/layout.txt:206 msgid "" -"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " -"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " -"and ``treepath[i]`` returns the child's index on the *i*-th level." +"Although a :class:`Gtk.FlowBox` must have only :class:`Gtk.FlowBoxChild` " +"children, you can add any kind of widget to it via :meth:`Gtk.Container." +"add`, and a :class:`Gtk.FlowBoxChild` widget will automatically be inserted " +"between the box and the widget." +msgstr "" + +#: ../../source/layout.txt:220 +msgid "Notebook" msgstr "" -#: ../../source/treeview.txt:142 +#: ../../source/layout.txt:222 msgid "" -"While there are several different models to choose from, there is only one " -"view widget to deal with. It works with either the list or the tree store. " -"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" -"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " -"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" -"`Gtk.TreeView.set_model`." +"The :class:`Gtk.Notebook` widget is a :class:`Gtk.Container` whose children " +"are pages that can be switched between using tab labels along one edge." msgstr "" -#: ../../source/treeview.txt:153 +#: ../../source/layout.txt:224 msgid "" -"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " -"to display the model. It does this with columns and cell renderers." +"There are many configuration options for GtkNotebook. Among other things, " +"you can choose on which edge the tabs appear (see :meth:`Gtk.Notebook." +"set_tab_pos`), whether, if there are too many tabs to fit the notebook " +"should be made bigger or scrolling arrows added (see :meth:`Gtk.Notebook." +"set_scrollable`, and whether there will be a popup menu allowing the users " +"to switch pages (see :meth:`Gtk.Notebook.popup_enable`, :meth:`Gtk.Notebook." +"popup_disable`)." msgstr "" -#: ../../source/treeview.txt:156 +#: ../../source/layout-table.txt:2 +msgid "Table" +msgstr "" + +#: ../../source/layout-table.txt:4 msgid "" -"Cell renderers are used to draw the data in the tree model in a way. There " -"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." -"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." -"CellRendererToggle`. In addition, it is relatively easy to write a custom " -"renderer yourself." +":class:`Gtk.Table` has been deprecated since GTK+ version 3.4 and should not " +"be used in newly-written code. Use the :ref:`layout-grid` class instead." msgstr "" -#: ../../source/treeview.txt:162 +#: ../../source/layout-table.txt:8 msgid "" -"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " -"to organize the vertical columns in the tree view. It needs to know the name " -"of the column to label for the user, what type of cell renderer to use, and " -"which piece of data to retrieve from the model for a given row." +"Tables allows us to place widgets in a grid similar to :class:`Gtk.Grid`." msgstr "" -#: ../../source/treeview.txt:173 +#: ../../source/layout-table.txt:10 msgid "" -"To render more than one model column in a view column, you need to create a :" -"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." -"pack_start` to add the model columns to it." +"The grid's dimensions need to be specified in the :class:`Gtk.Table` " +"constructor. To place a widget into a box, use :meth:`Gtk.Table.attach`." msgstr "" -#: ../../source/treeview.txt:193 -msgid "The Selection" +#: ../../source/layout-table.txt:13 +msgid "" +":meth:`Gtk.Table.set_row_spacing` and :meth:`Gtk.Table.set_col_spacing` set " +"the spacing between the rows at the specified row or column. Note that for " +"columns, the space goes to the right of the column, and for rows, the space " +"goes below the row." msgstr "" -#: ../../source/treeview.txt:194 +#: ../../source/layout-table.txt:18 msgid "" -"Most applications will need to not only deal with displaying data, but also " -"receiving input events from users. To do this, simply get a reference to a " -"selection object and connect to the \"changed\" signal." +"You can also set a consistent spacing for all rows and/or columns with :meth:" +"`Gtk.Table.set_row_spacings` and :meth:`Gtk.Table.set_col_spacings`. Note " +"that with these calls, the last row and last column do not get any spacing." msgstr "" -#: ../../source/treeview.txt:203 -msgid "Then to retrieve data for the row selected:" +#: ../../source/layout-table.txt:22 +msgid "It is reccomened that you use the :class:`Gtk.Grid` for new code." msgstr "" -#: ../../source/treeview.txt:212 +#: ../../source/menus.txt:4 msgid "" -"You can control what selections are allowed by calling :meth:`Gtk." -"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " -"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " -"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." +":class:`Gtk.UIManager`, :class:`Gtk.Action`, and :class:`Gtk.ActionGroup` " +"have been deprecated since GTK+ version 3.10 and should not be used in newly-" +"written code. Use the :ref:`application` framework instead." msgstr "" -#: ../../source/treeview.txt:219 -msgid "Sorting" +#: ../../source/menus.txt:8 +msgid "" +"GTK+ comes with two different types of menus, :class:`Gtk.MenuBar` and :" +"class:`Gtk.Toolbar`. :class:`Gtk.MenuBar` is a standard menu bar which " +"contains one or more :class:`Gtk.MenuItem` instances or one of its " +"subclasses. :class:`Gtk.Toolbar` widgets are used for quick accessibility to " +"commonly used functions of an application. Examples include creating a new " +"document, printing a page or undoing an operation. It contains one or more " +"instances of :class:`Gtk.ToolItem` or one of its subclasses." msgstr "" -#: ../../source/treeview.txt:220 +#: ../../source/menus.txt:19 msgid "" -"Sorting is an important feature for tree views and is supported by the " -"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " -"which implement the :class:`Gtk.TreeSortable` interface." +"Although, there are specific APIs to create menus and toolbars, you should " +"use :class:`Gtk.UIManager` and create :class:`Gtk.Action` instances. Actions " +"are organised into groups. A :class:`Gtk.ActionGroup` is essentially a map " +"from names to :class:`Gtk.Action` objects. All actions that would make sense " +"to use in a particular context should be in a single group. Multiple action " +"groups may be used for a particular user interface. In fact, it is expected " +"that most non-trivial applications will make use of multiple groups. For " +"example, in an application that can edit multiple documents, one group " +"holding global actions (e.g. quit, about, new), and one group per document " +"holding actions that act on that document (eg. save, cut/copy/paste, etc). " +"Each window's menus would be constructed from a combination of two action " +"groups." msgstr "" -#: ../../source/treeview.txt:223 -msgid "Sorting by clicking on columns" +#: ../../source/menus.txt:31 +msgid "Different classes representing different types of actions exist:" msgstr "" -#: ../../source/treeview.txt:224 +#: ../../source/menus.txt:33 msgid "" -"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" -"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " -"sorted by clicking on its header." +":class:`Gtk.Action`: An action which can be triggered by a menu or toolbar " +"item" msgstr "" -#: ../../source/treeview.txt:227 +#: ../../source/menus.txt:35 msgid "" -"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " -"a model." +":class:`Gtk.ToggleAction`: An action which can be toggled between two states" msgstr "" -#: ../../source/treeview.txt:246 +#: ../../source/menus.txt:36 msgid "" -"The next step is to enable sorting. Note that the *column_id* (``0`` in the " -"example) refers to the column of the model and **not** to the TreeView's " -"column." -msgstr "" - -#: ../../source/treeview.txt:253 -msgid "Setting a custom sort function" +":class:`Gtk.RadioAction`: An action of which only one in a group can be " +"active" msgstr "" -#: ../../source/treeview.txt:254 +#: ../../source/menus.txt:38 msgid "" -"It is also possible to set a custom comparison function in order to change " -"the sorting behaviour. As an example we will create a comparison function " -"that sorts case-sensitive. In the example above the sorted list looked like::" +":class:`Gtk.RecentAction`: An action of which represents a list of recently " +"used files" msgstr "" -#: ../../source/treeview.txt:267 -msgid "The case-sensitive sorted list will look like::" +#: ../../source/menus.txt:41 +msgid "" +"Actions represent operations that the user can be perform, along with some " +"information how it should be presented in the interface, including its name " +"(not for display), its label (for display), an accelerator, whether a label " +"indicates a tooltip as well as the callback that is called when the action " +"gets activated." msgstr "" -#: ../../source/treeview.txt:278 +#: ../../source/menus.txt:47 msgid "" -"First of all a comparison function is needed. This function gets two rows " -"and has to return a negative integer if the first one should come before the " -"second one, zero if they are equal and a positive integer if the second one " -"should come before the second one." +"You can create actions by either calling one of the constructors directly " +"and adding them to a :class:`Gtk.ActionGroup` by calling :meth:`Gtk." +"ActionGroup.add_action` or :meth:`Gtk.ActionGroup.add_action_with_accel`, or " +"by calling one of the convenience functions:" msgstr "" -#: ../../source/treeview.txt:294 -msgid "" -"Then the sort function has to be set by :meth:`Gtk.TreeSortable." -"set_sort_func`." +#: ../../source/menus.txt:52 +msgid ":meth:`Gtk.ActionGroup.add_actions`," msgstr "" -#: ../../source/treeview.txt:301 -msgid "Filtering" +#: ../../source/menus.txt:53 +msgid ":meth:`Gtk.ActionGroup.add_toggle_actions`" msgstr "" -#: ../../source/treeview.txt:302 -msgid "" -"Unlike sorting, filtering is not handled by the two models we previously " -"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" -"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " -"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" -"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " -"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " -"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " -"to use multiple filters on the same model (in the same way you'd use \"AND\" " -"clauses in a SQL request). They can also be chained with :class:`Gtk." -"TreeModelSort` instances." +#: ../../source/menus.txt:54 +msgid ":meth:`Gtk.ActionGroup.add_radio_actions`." msgstr "" -#: ../../source/treeview.txt:304 -msgid "" -"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " -"a model to filter, but the easiest way is to spawn it directly from the " -"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." +#: ../../source/menus.txt:56 +msgid "Note that you must specify actions for sub menus as well as menu items." msgstr "" -#: ../../source/treeview.txt:310 -msgid "" -"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " -"needs a \"visibility\" function, which, given a row from the underlying " -"model, will return a boolean indicating if this row should be filtered out " -"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" +#: ../../source/menus.txt:59 +msgid "UI Manager" msgstr "" -#: ../../source/treeview.txt:316 +#: ../../source/menus.txt:61 msgid "" -"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" -"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." -"TreeView` stack." +":class:`Gtk.UIManager` provides an easy way of creating menus and toolbars " +"using an `XML-like description `_." msgstr "" -#: ../../source/dialogs.txt:2 -msgid "Dialogs" +#: ../../source/menus.txt:64 +msgid "" +"First of all, you should add the :class:`Gtk.ActionGroup` to the UI Manager " +"with :meth:`Gtk.UIManager.insert_action_group`. At this point is also a good " +"idea to tell the parent window to respond to the specified keyboard " +"shortcuts, by using :meth:`Gtk.UIManager.get_accel_group` and :meth:`Gtk." +"Window.add_accel_group`." msgstr "" -#: ../../source/dialogs.txt:4 +#: ../../source/menus.txt:69 msgid "" -"Dialog windows are very similar to standard windows, and are used to provide " -"or retrieve information from the user. They are often used to provide a " -"preferences window, for example. The major difference a dialog has is some " -"prepacked widgets which layout the dialog automatically. From there, we can " -"simply add labels, buttons, check buttons, etc. Another big difference is " -"the handling of responses to control how the application should behave after " -"the dialog has been interacted with." +"Then, you can define the actual visible layout of the menus and toolbars, " +"and add the UI layout. This \"ui string\" uses an XML format, in which you " +"should mention the names of the actions that you have already created. " +"Remember that these names are just the identifiers that we used when " +"creating the actions. They are not the text that the user will see in the " +"menus and toolbars. We provided those human-readable names when we created " +"the actions." msgstr "" -#: ../../source/dialogs.txt:12 +#: ../../source/menus.txt:76 msgid "" -"There are several derived Dialog classes which you might find useful. :class:" -"`Gtk.MessageDialog` is used for most simple notifications. But at other " -"times you might need to derive your own dialog class to provide more complex " -"functionality." +"Finally, you retrieve the root widget with :meth:`Gtk.UIManager.get_widget` " +"and add the widget to a container such as :class:`Gtk.Box`." msgstr "" -#: ../../source/dialogs.txt:18 -msgid "Custom Dialogs" +#: ../../source/objects.txt:4 +msgid "Objects" msgstr "" -#: ../../source/dialogs.txt:20 +#: ../../source/objects.txt:6 msgid "" -"To pack widgets into a custom dialog, you should pack them into the :class:" -"`Gtk.Box`, available via :meth:`Gtk.Dialog.get_content_area`. To just add a :" -"class:`Gtk.Button` to the bottom of the dialog, you could use the :meth:`Gtk." -"Dialog.add_button` method." +"GObject is the fundamental type providing the common attributes and methods " +"for all object types in GTK+, Pango and other libraries based on GObject. " +"The :class:`GObject.GObject` class provides methods for object construction " +"and destruction, property access methods, and signal support." msgstr "" -#: ../../source/dialogs.txt:25 +#: ../../source/objects.txt:11 msgid "" -"A 'modal' dialog (that is, one which freezes the rest of the application " -"from user input), can be created by calling :class:`Gtk.Dialog.set_modal` on " -"the dialog or set the ``flags`` argument of the :class:`Gtk.Dialog` " -"constructor to include the :attr:`Gtk.DialogFlags.MODAL` flag." +"This section will introduce some important aspects about the GObject " +"implementation in Python." msgstr "" -#: ../../source/dialogs.txt:30 +#: ../../source/objects.txt:15 +msgid "Inherit from GObject.GObject" +msgstr "" + +#: ../../source/objects.txt:17 msgid "" -"Clicking a button will emit a signal called \"response\". If you want to " -"block waiting for a dialog to return before returning control flow to your " -"code, you can call :meth:`Gtk.Dialog.run`. This method returns an int which " -"may be a value from the :class:`Gtk.ResponseType` or it could be the custom " -"response value that you specified in the :class:`Gtk.Dialog` constructor or :" -"meth:`Gtk.Dialog.add_button`." +"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " +"instantiated directly, we generally use inherited class. A :class:`Gtk." +"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " +"interesting to make an inherited class to create a new widget, like a " +"settings dialog." msgstr "" -#: ../../source/dialogs.txt:36 +#: ../../source/objects.txt:22 msgid "" -"Finally, there are two ways to remove a dialog. The :meth:`Gtk.Widget.hide` " -"method removes the dialog from view, however keeps it stored in memory. This " -"is useful to prevent having to construct the dialog again if it needs to be " -"accessed at a later time. Alternatively, the :meth:`Gtk.Widget.destroy` " -"method can be used to delete the dialog from memory once it is no longer " -"needed. It should be noted that if the dialog needs to be accessed after it " -"has been destroyed, it will need to be constructed again otherwise the " -"dialog window will be empty." +"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." +"GObject.__init__` in your constructor (if the class inherits from :class:" +"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " +"in the example below:" msgstr "" -#: ../../source/dialogs.txt:53 -msgid "MessageDialog" +#: ../../source/objects.txt:37 +msgid "Signals" msgstr "" -#: ../../source/dialogs.txt:55 +#: ../../source/objects.txt:39 msgid "" -":class:`Gtk.MessageDialog` is a convenience class, used to create simple, " -"standard message dialogs, with a message, an icon, and buttons for user " -"response You can specify the type of message and the text in the :class:`Gtk." -"MessageDialog` constructor, as well as specifying standard buttons." +"Signals connect arbitrary application-specific events with any number of " +"listeners. For example, in GTK+, every user event (keystroke or mouse move) " +"is received from the X server and generates a GTK+ event under the form of a " +"signal emission on a given object instance." msgstr "" -#: ../../source/dialogs.txt:60 +#: ../../source/objects.txt:44 msgid "" -"In some dialogs which require some further explanation of what has happened, " -"a secondary text can be added. In this case, the primary message entered " -"when creating the message dialog is made bigger and set to bold text. The " -"secondary message can be set by calling :meth:`Gtk.MessageDialog." -"format_secondary_text`." +"Each signal is registered in the type system together with the type on which " +"it can be emitted: users of the type are said to connect to the signal on a " +"given type instance when they register a function to be invoked upon the " +"signal emission. Users can also emit the signal by themselves or stop the " +"emission of the signal from within one of the functions connected to the " +"signal." msgstr "" -#: ../../source/dialogs.txt:74 -msgid "FileChooserDialog" +#: ../../source/objects.txt:51 +msgid "Receive signals" msgstr "" -#: ../../source/dialogs.txt:76 -msgid "" -"The :class:`Gtk.FileChooserDialog` is suitable for use with \"File/Open\" or " -"\"File/Save\" menu items. You can use all of the :class:`Gtk.FileChooser` " -"methods on the file chooser dialog as well as those for :class:`Gtk.Dialog`." +#: ../../source/objects.txt:53 +msgid "See :ref:`signals`" msgstr "" -#: ../../source/dialogs.txt:80 -msgid "" -"When creating a :class:`Gtk.FileChooserDialog` you have to define the " -"dialog's purpose:" +#: ../../source/objects.txt:56 +msgid "Create new signals" msgstr "" -#: ../../source/dialogs.txt:83 +#: ../../source/objects.txt:58 msgid "" -"To select a file for opening, as for a File/Open command, use :attr:`Gtk." -"FileChooserAction.OPEN`" +"New signals can be created by adding them to :attr:`GObject.GObject." +"__gsignals__`, a dictionary:" msgstr "" -#: ../../source/dialogs.txt:85 +#: ../../source/objects.txt:61 msgid "" -"To save a file for the first time, as for a File/Save command, use :attr:" -"`Gtk.FileChooserAction.SAVE`, and suggest a name such as \"Untitled\" with :" -"meth:`Gtk.FileChooser.set_current_name`." +"When a new signal is created, a method handler can also be defined, it will " +"be called each time the signal is emitted. It is called do_signal_name." msgstr "" -#: ../../source/dialogs.txt:88 +#: ../../source/objects.txt:75 msgid "" -"To save a file under a different name, as for a File/Save As command, use :" -"attr:`Gtk.FileChooserAction.SAVE`, and set the existing filename with :meth:" -"`Gtk.FileChooser.set_filename`." +":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " +"object method handler (:meth:`do_my_signal` here) in the first emission " +"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " +"will be invoked in the third emission stage) and :const:`GObject." +"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." msgstr "" -#: ../../source/dialogs.txt:91 +#: ../../source/objects.txt:81 msgid "" -"To choose a folder instead of a file, use :attr:`Gtk.FileChooserAction." -"SELECT_FOLDER`." +"The second part, ``None``, indicates the return type of the signal, usually " +"``None``." msgstr "" -#: ../../source/dialogs.txt:93 +#: ../../source/objects.txt:84 msgid "" -":class:`Gtk.FileChooserDialog` inherits from :class:`Gtk.Dialog`, so buttons " -"have response IDs such as :attr:`Gtk.ResponseType.ACCEPT` and :attr:`Gtk." -"ResponseType.CANCEL` which can be specified in the :class:`Gtk." -"FileChooserDialog` constructor. In contrast to :class:`Gtk.Dialog`, you can " -"not use custom response codes with :class:`Gtk.FileChooserDialog`. It " -"expects that at least one button will have of the following response IDs:" +"``(int,)`` indicates the signal arguments, here, the signal will only take " +"one argument, whose type is int. Types of arguments required by signal are " +"declared as a sequence, here it is a one-element tuple." msgstr "" -#: ../../source/dialogs.txt:100 -msgid ":attr:`Gtk.ResponseType.ACCEPT`" +#: ../../source/objects.txt:88 +msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" msgstr "" -#: ../../source/dialogs.txt:101 -msgid ":attr:`Gtk.ResponseType.OK`" +#: ../../source/objects.txt:97 +msgid "" +"One of GObject's nice features is its generic get/set mechanism for object " +"properties. Each class inherited from :class:`GObject.GObject` can define " +"new properties. Each property has a type which never changes (e.g. str, " +"float, int...). For instance, they are used for :class:`Gtk.Button` where " +"there is a \"label\" property which contains the text of the button." msgstr "" -#: ../../source/dialogs.txt:102 -msgid ":attr:`Gtk.ResponseType.YES`" +#: ../../source/objects.txt:104 +msgid "Use existing properties" msgstr "" -#: ../../source/dialogs.txt:103 -msgid ":attr:`Gtk.ResponseType.APPLY`" +#: ../../source/objects.txt:106 +msgid "" +"The class :class:`GObject.GObject` provides several useful functions to " +"manage existing properties, :func:`GObject.GObject.get_property` and :func:" +"`GObject.GObject.set_property`." msgstr "" -#: ../../source/dialogs.txt:105 +#: ../../source/objects.txt:109 msgid "" -"When the user is finished selecting files, your program can get the selected " -"names either as filenames (:meth:`Gtk.FileChooser.get_filename`) or as URIs " -"(:meth:`Gtk.FileChooser.get_uri`)." +"Some properties also have functions dedicated to them, called getter and " +"setter. For the property \"label\" of a button, there are two functions to " +"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." +"set_label`." msgstr "" -#: ../../source/dialogs.txt:109 -msgid "" -"By default, :class:`Gtk.FileChooser` only allows a single file to be " -"selected at a time. To enable multiple files to be selected, use :meth:`Gtk." -"FileChooser.set_select_multiple`. Retrieving a list of selected files is " -"possible with either :meth:`Gtk.FileChooser.get_filenames` or :meth:`Gtk." -"FileChooser.get_uris`." +#: ../../source/objects.txt:114 +msgid "Create new properties" msgstr "" -#: ../../source/dialogs.txt:115 +#: ../../source/objects.txt:116 msgid "" -":class:`Gtk.FileChooser` also supports a variety of options which make the " -"files and folders more configurable and accessible." +"A property is defined with a name and a type. Even if Python itself is " +"dynamically typed, you can't change the type of a property once it is " +"defined. A property can be created using :class:`GObject.Property`." msgstr "" -#: ../../source/dialogs.txt:118 +#: ../../source/objects.txt:131 msgid "" -":meth:`Gtk.FileChooser.set_local_only`: Only local files can be selected." +"Properties can also be read-only, if you want some properties to be readable " +"but not writable. To do so, you can add some flags to the property " +"definition, to control read/write access. Flags are :const:`GObject." +"ParamFlags.READABLE` (only read access for external code), :const:`GObject." +"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." +"READWRITE` (public):" msgstr "" -#: ../../source/dialogs.txt:119 +#: ../../source/objects.txt:146 msgid "" -":meth:`Gtk.FileChooser.show_hidden`: Hidden files and folders are displayed." +"You can also define new read-only properties with a new method decorated " +"with :class:`GObject.Property`:" msgstr "" -#: ../../source/dialogs.txt:120 -msgid "" -":meth:`Gtk.FileChooser.set_do_overwrite_confirmation`: If the file chooser " -"was configured in :attr:`Gtk.FileChooserAction.SAVE` mode, it will present a " -"confirmation dialog if the user types a file name that already exists." +#: ../../source/objects.txt:162 +msgid "You can get this property using:" msgstr "" -#: ../../source/dialogs.txt:124 +#: ../../source/objects.txt:170 msgid "" -"Furthermore, you can specify which kind of files are displayed by creating :" -"class:`Gtk.FileFilter` objects and calling :meth:`Gtk.FileChooser." -"add_filter`. The user can then select one of the added filters from a combo " -"box at the bottom of the file chooser." +"The API of :class:`GObject.Property` is similar to the builtin :py:func:" +"`property`. You can create property setter in a way similar to Python " +"property:" msgstr "" -#: ../../source/install.txt:4 -msgid "Installation" +#: ../../source/objects.txt:191 +msgid "" +"There is also a way to define minimum and maximum values for numbers, using " +"a more verbose form:" msgstr "" -#: ../../source/install.txt:5 +#: ../../source/objects.txt:227 msgid "" -"The first step before we start with actual coding consists of setting up " -"`PyGObject`_ and its dependencies. PyGObject is a Python module that enables " -"developers to access GObject-based libraries such as GTK+ within Python. It " -"exclusively supports GTK+ version 3 or later." +"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " +"dictionary, and handled in do_get_property and do_set_property." msgstr "" -#: ../../source/install.txt:12 -msgid "Dependencies" +#: ../../source/objects.txt:231 +msgid "Watch properties" msgstr "" -#: ../../source/install.txt:14 -msgid "GTK+3" +#: ../../source/objects.txt:233 +msgid "" +"When a property is modified, a signal is emitted, whose name is \"notify::" +"property-name\":" msgstr "" -#: ../../source/install.txt:16 -msgid "Python 2 (2.6 or later) or Python 3 (3.1 or later)" +#: ../../source/objects.txt:248 +msgid "" +"Note that you have to use the canonical property name when connecting to the " +"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " +"instance, for a Python property `foo_bar_baz` you would connect to the " +"signal `notify::foo-bar-baz` using" msgstr "" -#: ../../source/install.txt:18 -msgid "gobject-introspection" +#: ../../source/objects.txt:263 +msgid "API" msgstr "" -#: ../../source/install.txt:21 -msgid "Prebuilt Packages" +#: ../../source/objects.txt:269 +msgid "Retrieves a property value." msgstr "" -#: ../../source/install.txt:22 -msgid "" -"Recent versions of PyGObject and its dependencies are packaged by nearly all " -"major Linux distributions. So, if you use Linux, you can probably get " -"started by installing the package from the official repository for your " -"distribution." +#: ../../source/objects.txt:273 +msgid "Set property *property_name* to *value*." msgstr "" -#: ../../source/install.txt:28 -msgid "Installing From Source" +#: ../../source/objects.txt:277 +msgid "" +"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " +"is of type ``(int,)``, it must be emitted with::" msgstr "" -#: ../../source/install.txt:29 +#: ../../source/objects.txt:284 msgid "" -"The easiest way to install PyGObject from source is using `JHBuild`_. It is " -"designed to easily build source packages and discover what dependencies need " -"to be build and in what order. To setup JHBuild, please follow the `JHBuild " -"manual`_." +"This method freezes all the \"notify::\" signals (which are emitted when any " +"property is changed) until the :meth:`thaw_notify` method is called." msgstr "" -#: ../../source/install.txt:33 +#: ../../source/objects.txt:288 msgid "" -"Once you have installed JHBuild successfully, download the latest " -"configuration from [#]_. Copy files with the suffix `.modules` to JHBuild's " -"module directory and the file `sample-tarball.jhbuildrc` to `~/.jhbuildrc`." +"It recommended to use the *with* statement when calling :meth:" +"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " +"implicitly at the end of the block::" msgstr "" -#: ../../source/install.txt:37 +#: ../../source/objects.txt:298 msgid "" -"If you have not done it before, verify that your build environment is setup " -"correctly by running::" +"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." msgstr "" -#: ../../source/install.txt:42 +#: ../../source/objects.txt:300 msgid "" -"It will print any applications and libraries that are currently missing on " -"your system but required for building. You should install those using your " -"distribution's package repository. A list of `package names `_ for different " -"distributions is maintained on the GNOME wiki. Run the command above again " -"to ensure the required tools are present." +"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" +"`freeze_notify` together with the *with* statement." msgstr "" -#: ../../source/install.txt:48 +#: ../../source/objects.txt:305 msgid "" -"Executing the following command will build PyGObject and all its " -"dependencies::" +"Blocks a handler of an instance so it will not be called during any signal " +"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " +"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " +"signal handler has to be unblocked exactly the same amount of times it has " +"been blocked before to become active again." msgstr "" -#: ../../source/install.txt:52 -msgid "Finally, you might want to install GTK+ from source as well::" +#: ../../source/objects.txt:311 +msgid "" +"It is recommended to use :meth:`handler_block` in conjunction with the " +"*with* statement which will call :meth:`handler_unblock` implicitly at the " +"end of the block::" msgstr "" -#: ../../source/install.txt:56 -msgid "To start a shell with the same environment as used by JHBuild, run::" +#: ../../source/objects.txt:321 +msgid "" +"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " +"during signal emissions and will not be invoked until it has been unblocked " +"exactly the amount of times it has been blocked before." msgstr "" -#: ../../source/install.txt:64 -msgid "https://download.gnome.org/teams/releng/" +#: ../../source/objects.txt:325 +msgid "" +"It is recommended to not call :meth:`handler_unblock` explicitly but use :" +"meth:`handler_block` together with the *with* statement." msgstr "" -#: ../../source/popover.txt:2 -msgid "Popovers" +#: ../../source/objects.txt:330 +msgid "A dictionary where inherited class can define new signals." msgstr "" -#: ../../source/popover.txt:4 +#: ../../source/objects.txt:332 msgid "" -"The :class:`Gtk.Popover` is a seperate window used for displaying additional " -"information and are often used as a part of button menus and context menus. " -"Their uses are similar to those of dialog windows with the advantage of " -"being less disruptive and having a connection with the widget the popover is " -"pointing to. Popovers have are visually connected to a related widget with a " -"small triangle." +"Each element in the dictionary is a new signal. The key is the signal name. " +"The value is a tuple, with the form::" msgstr "" -#: ../../source/popover.txt:10 +#: ../../source/objects.txt:337 msgid "" -"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " -"use :meth:`Gtk.Widget.show_all`." -msgstr "" - -#: ../../source/popover.txt:14 -msgid "Custom Popover" +":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." +"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " +"return type of the signal. ``(int,)`` is the tuple of the parameters of the " +"signal." msgstr "" -#: ../../source/popover.txt:16 -msgid "A widget can be added to a popover using the :meth:`Gtk.Container.add`." +#: ../../source/objects.txt:346 +msgid "" +"The :attr:`__gproperties__` dictionary is a class property where you define " +"the properties of your object. This is not the recommend way to define new " +"properties, the method written above is much less verbose. The benefits of " +"this method is that a property can be defined with more settings, like the " +"minimum or the maximum for numbers." msgstr "" -#: ../../source/popover.txt:27 -msgid "Menu Popover" +#: ../../source/objects.txt:352 +msgid "The key is the name of the property" msgstr "" -#: ../../source/popover.txt:29 +#: ../../source/objects.txt:354 msgid "" -"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." -"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." -"Popover.bind_model`." +"The value is a tuple which describe the property. The number of elements of " +"this tuple depends on its first element but the tuple will always contain at " +"least the following items:" msgstr "" -#: ../../source/popover.txt:41 ../../source/application.txt:69 -msgid "See Also" +#: ../../source/objects.txt:358 +msgid "The first element is the property's type (e.g. ``int``, ``float``...)." msgstr "" -#: ../../source/popover.txt:43 -msgid "https://developer.gnome.org/hig/stable/popovers.html.en" +#: ../../source/objects.txt:360 +msgid "" +"The second element is the property's nick name, which is a string with a " +"short description of the property. This is generally used by programs with " +"strong introspection capabilities, like the graphical user interface builder " +"`Glade`_." msgstr "" -#: ../../source/drag_and_drop.txt:2 -msgid "Drag and Drop" +#: ../../source/objects.txt:365 +msgid "" +"The third one is the property's description or blurb, which is another " +"string with a longer description of the property. Also used by `Glade`_ and " +"similar programs." msgstr "" -#: ../../source/drag_and_drop.txt:4 +#: ../../source/objects.txt:369 msgid "" -"Versions of PyGObject < 3.0.3 contain a bug which does not allow drag and " -"drop to function correctly. Therefore a version of PyGObject >= 3.0.3 is " -"required for the following examples to work." +"The last one (which is not necessarily the forth one as we will see later) " +"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." +"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." msgstr "" -#: ../../source/drag_and_drop.txt:8 +#: ../../source/objects.txt:373 msgid "" -"Setting up drag and drop between widgets consists of selecting a drag source " -"(the widget which the user starts the drag from) with the :meth:`Gtk.Widget." -"drag_source_set` method, selecting a drag destination (the widget which the " -"user drops onto) with the :meth:`Gtk.Widget.drag_dest_set` method and then " -"handling the relevant signals on both widgets." +"The absolute length of the tuple depends on the property type (the first " +"element of the tuple). Thus we have the following situations:" msgstr "" -#: ../../source/drag_and_drop.txt:14 +#: ../../source/objects.txt:376 msgid "" -"Instead of using :meth:`Gtk.Widget.drag_source_set` and :meth:`Gtk.Widget." -"drag_dest_set` some specialised widgets require the use of specific " -"functions (such as :class:`Gtk.TreeView` and :class:`Gtk.IconView`)." +"If the type is ``bool`` or ``str``, the forth element is the default value " +"of the property." msgstr "" -#: ../../source/drag_and_drop.txt:18 +#: ../../source/objects.txt:379 msgid "" -"A basic drag and drop only requires the source to connect to the \"drag-data-" -"get\" signal and the destination to connect to the \"drag-data-received\" " -"signal. More complex things such as specific drop areas and custom drag " -"icons will require you to connect to :ref:`additional signals ` and interact with the :class:`Gdk.DragContext` object it supplies." +"If the type is ``int`` or ``float``, the forth element is the minimum " +"accepted value, the fifth element is the maximum accepted value and the " +"sixth element is the default value." msgstr "" -#: ../../source/drag_and_drop.txt:24 -msgid "" -"In order to transfer data between the source and destination, you must " -"interact with the :class:`Gtk.SelectionData` variable supplied in the :ref:`" -"\"drag-data-get\" ` and :ref:`\"drag-data-received\" ` signals using the :class:`Gtk.SelectionData` get and set methods." +#: ../../source/objects.txt:383 +msgid "If the type is not one of these, there is no extra element." msgstr "" -#: ../../source/drag_and_drop.txt:30 -msgid "Target Entries" +#: ../../source/objects.txt:388 +msgid "Invoke the object method handler in the first emission stage." msgstr "" -#: ../../source/drag_and_drop.txt:31 -msgid "" -"To allow the drag source and destination to know what data they are " -"receiving and sending, a common list of :class:`Gtk.TargetEntry's ` are required. A :class:`Gtk.TargetEntry` describes a piece of " -"data that will be sent by the drag source and received by the drag " -"destination." +#: ../../source/objects.txt:392 +msgid "Invoke the object method handler in the third emission stage." msgstr "" -#: ../../source/drag_and_drop.txt:36 -msgid "" -"There are two ways of adding :class:`Gtk.TargetEntry's ` to " -"a source and destination. If the drag and drop is simple and each target " -"entry is of a different type, you can use the group of methods :meth:" -"`mentioned here `." +#: ../../source/objects.txt:396 +msgid "Invoke the object method handler in the last emission stage." msgstr "" -#: ../../source/drag_and_drop.txt:41 -msgid "" -"If you require more than one type of data or wish to do more complex things " -"with the data, you will need to create the :class:`Gtk.TargetEntry's ` using the :meth:`Gtk.TargetEntry.new` method." +#: ../../source/objects.txt:400 +msgid "The property is readable." msgstr "" -#: ../../source/drag_and_drop.txt:48 -msgid "Drag Source Signals" +#: ../../source/objects.txt:404 +msgid "The property is writable." msgstr "" -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Name" +#: ../../source/objects.txt:408 +msgid "The property is readable and writable." msgstr "" -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "When it is emitted" +#: ../../source/popover.txt:2 +msgid "Popovers" msgstr "" -#: ../../source/drag_and_drop.txt:50 ../../source/drag_and_drop.txt:64 -msgid "Common Purpose" +#: ../../source/popover.txt:4 +msgid "" +"The :class:`Gtk.Popover` is a separate window used for displaying additional " +"information and is often used with button menus and context menus. Popovers " +"are visually connected to a related widget with a small triangle. Their uses " +"are similar to those of dialog windows with the advantage of being less " +"disruptive and having a connection with the widget the popover is pointing " +"to." msgstr "" -#: ../../source/drag_and_drop.txt:52 -msgid "drag-begin" +#: ../../source/popover.txt:10 +msgid "" +"A Popover can be created with :class:`Gtk.Popover`; for opening the popover " +"use :meth:`Gtk.Popover.popup`." msgstr "" -#: ../../source/drag_and_drop.txt:52 -msgid "User starts a drag" +#: ../../source/popover.txt:14 +msgid "Custom Popover" msgstr "" -#: ../../source/drag_and_drop.txt:52 -msgid "Set-up drag icon" +#: ../../source/popover.txt:16 +msgid "A widget can be added to a popover using :meth:`Gtk.Container.add`." msgstr "" -#: ../../source/drag_and_drop.txt:54 -msgid "drag-data-get" +#: ../../source/popover.txt:27 +msgid "Menu Popover" msgstr "" -#: ../../source/drag_and_drop.txt:54 -msgid "When drag data is requested by the destination" +#: ../../source/popover.txt:29 +msgid "" +"A popover can be created from a :class:`Gio.MenuModel` using :meth:`Gtk." +"Popover.new_from_model` and can be changed after creation with :meth:`Gtk." +"Popover.bind_model`." msgstr "" -#: ../../source/drag_and_drop.txt:54 ../../source/drag_and_drop.txt:70 -msgid "Transfer drag data from source to destination" +#: ../../source/popover.txt:33 +msgid "" +"Passing a :class:`Gio.MenuModel` as a :data:`menu_model ` argument to the :class:`Gtk.MenuButton` constructor " +"implicitly creates a popover." msgstr "" -#: ../../source/drag_and_drop.txt:56 -msgid "drag-data-delete" +#: ../../source/popover.txt:47 +msgid "https://developer.gnome.org/hig/stable/popovers.html.en" msgstr "" -#: ../../source/drag_and_drop.txt:56 -msgid "When a drag with the action Gdk.DragAction.MOVE is completed" +#: ../../source/progressbar.txt:2 +msgid "ProgressBar" msgstr "" -#: ../../source/drag_and_drop.txt:56 -msgid "Delete data from the source to complete the 'move'" +#: ../../source/progressbar.txt:4 +msgid "" +"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " +"long running operation. It provides a visual clue that processing is " +"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " +"*percentage mode* and *activity mode*." msgstr "" -#: ../../source/drag_and_drop.txt:58 -msgid "drag-end" +#: ../../source/progressbar.txt:9 +msgid "" +"When an application can determine how much work needs to take place (e.g. " +"read a fixed number of bytes from a file) and can monitor its progress, it " +"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " +"a growing bar indicating the percentage of the work that has been completed. " +"In this mode, the application is required to call :meth:`Gtk.ProgressBar." +"set_fraction` periodically to update the progress bar, passing a float " +"between 0 and 1 to provide the new percentage value." msgstr "" -#: ../../source/drag_and_drop.txt:58 -msgid "When the drag is complete" +#: ../../source/progressbar.txt:17 +msgid "" +"When an application has no accurate way of knowing the amount of work to do, " +"it can use *activity mode*, which shows activity by a block moving back and " +"forth within the progress area. In this mode, the application is required to " +"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " +"You can also choose the step size, with the :meth:`Gtk.ProgressBar." +"set_pulse_step` method." msgstr "" -#: ../../source/drag_and_drop.txt:58 -msgid "Undo anything done in drag-begin" +#: ../../source/progressbar.txt:24 +msgid "" +"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " +"you can change it to a vertical progress bar by using the :meth:`Gtk." +"ProgressBar.set_orientation` method. Changing the direction the progress bar " +"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." +"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." +"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." msgstr "" -#: ../../source/drag_and_drop.txt:62 -msgid "Drag Destination Signals" +#: ../../source/spinner.txt:2 +msgid "Spinner" msgstr "" -#: ../../source/drag_and_drop.txt:66 -msgid "drag-motion" +#: ../../source/spinner.txt:4 +msgid "" +"The :class:`Gtk.Spinner` displays an icon-size spinning animation. It is " +"often used as an alternative to a :class:`GtkProgressBar` for displaying " +"indefinite activity, instead of actual progress." msgstr "" -#: ../../source/drag_and_drop.txt:66 -msgid "Drag icon moves over a drop area" +#: ../../source/spinner.txt:8 +msgid "" +"To start the animation, use :meth:`Gtk.Spinner.start`, to stop it use :meth:" +"`Gtk.Spinner.stop`." msgstr "" -#: ../../source/drag_and_drop.txt:66 ../../source/drag_and_drop.txt:68 -msgid "Allow only certain areas to be dropped onto" +#: ../../source/spinner.txt:20 +msgid "Extended example" msgstr "" -#: ../../source/drag_and_drop.txt:68 -msgid "drag-drop" +#: ../../source/spinner.txt:22 +msgid "" +"An extended example that uses a timeout function to start and stop the " +"spinning animation. The :func:`on_timeout` function is called at regular " +"intervals until it returns ``False``, at which point the timeout is " +"automatically destroyed and the function will not be called again." msgstr "" -#: ../../source/drag_and_drop.txt:68 -msgid "Icon is dropped onto a drag area" +#: ../../source/textview.txt:2 +msgid "Multiline Text Editor" msgstr "" -#: ../../source/drag_and_drop.txt:70 -msgid "drag-data-received" +#: ../../source/textview.txt:4 +msgid "" +"The :class:`Gtk.TextView` widget can be used to display and edit large " +"amounts of formatted text. Like the :class:`Gtk.TreeView`, it has a model/" +"view design. In this case the :class:`Gtk.TextBuffer` is the model which " +"represents the text being edited. This allows two or more :class:`Gtk." +"TextView` widgets to share the same :class:`Gtk.TextBuffer`, and allows " +"those text buffers to be displayed slightly differently. Or you could " +"maintain several text buffers and choose to display each one at different " +"times in the same :class:`Gtk.TextView` widget." msgstr "" -#: ../../source/drag_and_drop.txt:70 -msgid "When drag data is received by the destination" +#: ../../source/textview.txt:13 ../../source/treeview.txt:144 +msgid "The View" msgstr "" -#: ../../source/application.txt:4 -msgid "Application" +#: ../../source/textview.txt:15 +msgid "" +"The :class:`Gtk.TextView` is the frontend with which the user can add, edit " +"and delete textual data. They are commonly used to edit multiple lines of " +"text. When creating a :class:`Gtk.TextView` it contains its own default :" +"class:`Gtk.TextBuffer`, which you can access via the :meth:`Gtk.TextView." +"get_buffer` method." msgstr "" -#: ../../source/application.txt:6 +#: ../../source/textview.txt:21 msgid "" -":class:`Gtk.Application` encompasses many repetitive tasks that a modern " -"application needs such as handling multiple instances, D-Bus activation, " -"opening files, command line parsing, startup/shutdown, menu management, " -"window management, and more." +"By default, text can be added, edited and removed from the :class:`Gtk." +"TextView`. You can disable this by calling :meth:`Gtk.TextView." +"set_editable`. If the text is not editable, you usually want to hide the " +"text cursor with :meth:`Gtk.TextView.set_cursor_visible` as well. In some " +"cases it may be useful to set the justification of the text with :meth:`Gtk." +"TextView.set_justification`. The text can be displayed at the left edge, (:" +"attr:`Gtk.Justification.LEFT`), at the right edge (:attr:`Gtk.Justification." +"RIGHT`), centered (:attr:`Gtk.Justification.CENTER`), or distributed across " +"the complete width (:attr:`Gtk.Justification.FILL`)." msgstr "" -#: ../../source/application.txt:14 +#: ../../source/textview.txt:31 msgid "" -":class:`Gio.Action` is a way to expose any single task your application or " -"widget does by a name. These actions can be disabled/enabled at runtime and " -"they can either be activated or have a state changed (if they contain state)." +"Another default setting of the :class:`Gtk.TextView` widget is long lines of " +"text will continue horizontally until a break is entered. To wrap the text " +"and prevent it going off the edges of the screen call :meth:`Gtk.TextView." +"set_wrap_mode`." msgstr "" -#: ../../source/application.txt:18 -msgid "" -"The reason to use actions is to separate out the logic from the UI. For " -"example this allows using a menubar on OSX and a gear menu on GNOME both " -"simply referencing the name of an action. The main implementation of this " -"you will be using is :class:`Gio.SimpleAction` which will be demonstrated " -"later." +#: ../../source/textview.txt:36 ../../source/treeview.txt:21 +msgid "The Model" msgstr "" -#: ../../source/application.txt:23 +#: ../../source/textview.txt:38 msgid "" -"Many classes such as :class:`Gio.MenuItem` and :class:`Gtk.ModelButton` " -"support properties to set an action name." +"The :class:`Gtk.TextBuffer` is the core of the :class:`Gtk.TextView` widget, " +"and is used to hold whatever text is being displayed in the :class:`Gtk." +"TextView`. Setting and retrieving the contents is possible with :meth:`Gtk." +"TextBuffer.set_text` and :meth:`Gtk.TextBuffer.get_text`. However, most text " +"manipulation is accomplished with *iterators*, represented by a :class:`Gtk." +"TextIter`. An iterator represents a position between two characters in the " +"text buffer. Iterators are not valid indefinitely; whenever the buffer is " +"modified in a way that affects the contents of the buffer, all outstanding " +"iterators become invalid." msgstr "" -#: ../../source/application.txt:26 +#: ../../source/textview.txt:48 msgid "" -"These actions can be grouped together into a :class:`Gio.ActionGroup` and " -"when these groups are added to a widget with :meth:`Gtk.Widget." -"insert_action_group()` they will gain a prefix. Such as \"win\" when added " -"to a :class:`Gtk.ApplicationWindow`. You will use the full action name when " -"referencing it such as \"app.about\" but when you create the action it will " -"just be \"about\" until added to the application." +"Because of this, iterators can't be used to preserve positions across buffer " +"modifications. To preserve a position, use :class:`Gtk.TextMark`. A text " +"buffer contains two built-in marks; an \"insert\" mark (which is the " +"position of the cursor) and the \"selection_bound\" mark. Both of them can " +"be retrieved using :meth:`Gtk.TextBuffer.get_insert` and :meth:`Gtk." +"TextBuffer.get_selection_bound`, respectively. By default, the location of " +"a :class:`Gtk.TextMark` is not shown. This can be changed by calling :meth:" +"`Gtk.TextMark.set_visible`." msgstr "" -#: ../../source/application.txt:32 +#: ../../source/textview.txt:56 msgid "" -"You can also very easily make keybindings for actions by setting the `accel` " -"property in the :class:`Gio.Menu` file or by using :meth:`Gtk.Application." -"add_accelerator()`." +"Many methods exist to retrieve a :class:`Gtk.TextIter`. For instance, :meth:" +"`Gtk.TextBuffer.get_start_iter` returns an iterator pointing to the first " +"position in the text buffer, whereas :meth:`Gtk.TextBuffer.get_end_iter` " +"returns an iterator pointing past the last valid character. Retrieving the " +"bounds of the selected text can be achieved by calling :meth:`Gtk.TextBuffer." +"get_selection_bounds`." msgstr "" -#: ../../source/application.txt:38 +#: ../../source/textview.txt:63 msgid "" -"Your menus should be defined in XML using :class:`Gio.Menu` and would " -"reference the previously mentioned actions you defined. :class:`Gtk." -"Application` allows you to set a menu either via :meth:`Gtk.Application." -"set_app_menu()` or :meth:`Gtk.Application.set_menubar()`. If you make use " -"of :class:`Gio.Resource` this can automatically use the correct menu based " -"on platform, otherwise you can set them manually. A detailed example is " -"shown below." +"To insert text at a specific position use :meth:`Gtk.TextBuffer.insert`. " +"Another useful method is :meth:`Gtk.TextBuffer.insert_at_cursor` which " +"inserts text wherever the cursor may be currently positioned. To remove " +"portions of the text buffer use :meth:`Gtk.TextBuffer.delete`." msgstr "" -#: ../../source/application.txt:46 -msgid "Command Line" +#: ../../source/textview.txt:68 +msgid "" +"In addition, :class:`Gtk.TextIter` can be used to locate textual matches in " +"the buffer using :meth:`Gtk.TextIter.forward_search` and :meth:`Gtk.TextIter." +"backward_search`. The start and end iters are used as the starting point of " +"the search and move forwards/backwards depending on requirements." msgstr "" -#: ../../source/application.txt:48 -msgid "" -"When creating your application it takes a flag property of :class:`Gio." -"ApplicationFlags`. Using this you can let it handle everything itself or " -"have more custom behavior." +#: ../../source/textview.txt:75 +msgid "Tags" msgstr "" -#: ../../source/application.txt:51 +#: ../../source/textview.txt:77 msgid "" -"You can use `HANDLES_COMMAND_LINE` to allow custom behavior in :meth:`Gio." -"Application.do_command_line()`. In combination with :meth:`Gio.Application." -"add_main_option()` to add custom options." +"Text in a buffer can be marked with tags. A tag is an attribute that can be " +"applied to some range of text. For example, a tag might be called \"bold\" " +"and make the text inside the tag bold. However, the tag concept is more " +"general than that; tags don't have to affect appearance. They can instead " +"affect the behaviour of mouse and key presses, \"lock\" a range of text so " +"the user can't edit it, or countless other things. A tag is represented by " +"a :class:`Gtk.TextTag` object. One :class:`Gtk.TextTag` can be applied to " +"any number of text ranges in any number of buffers." msgstr "" -#: ../../source/application.txt:54 +#: ../../source/textview.txt:86 msgid "" -"Using `HANDLES_OPEN` will do the work of simply taking file arguments for " -"you and let you handle it in :meth:`Gio.Application.do_open()`." +"Each tag is stored in a :class:`Gtk.TextTagTable`. A tag table defines a set " +"of tags that can be used together. Each buffer has one tag table associated " +"with it; only tags from that tag table can be used with the buffer. A single " +"tag table can be shared between multiple buffers, however." msgstr "" -#: ../../source/application.txt:57 +#: ../../source/textview.txt:91 msgid "" -"If your application is already open these will all be sent to the existing " -"instance unless you use `NON_UNIQUE` to allow multiple instances." +"To specify that some text in the buffer should have specific formatting, you " +"must define a tag to hold that formatting information, and then apply that " +"tag to the region of text using :meth:`Gtk.TextBuffer.create_tag` and :meth:" +"`Gtk.TextBuffer.apply_tag`::" msgstr "" -#: ../../source/application.txt:71 -msgid "https://wiki.gnome.org/HowDoI/GtkApplication" +#: ../../source/textview.txt:99 +msgid "The following are some of the common styles applied to text:" msgstr "" -#: ../../source/application.txt:72 -msgid "https://wiki.gnome.org/HowDoI/GAction" +#: ../../source/textview.txt:101 +msgid "Background colour (\"foreground\" property)" msgstr "" -#: ../../source/application.txt:73 -msgid "https://wiki.gnome.org/HowDoI/ApplicationMenu" +#: ../../source/textview.txt:102 +msgid "Foreground colour (\"background\" property)" msgstr "" -#: ../../source/application.txt:74 -msgid "https://wiki.gnome.org/HowDoI/GMenu" +#: ../../source/textview.txt:103 +msgid "Underline (\"underline\" property)" msgstr "" -#: ../../source/introduction.txt:4 -msgid "Getting Started" +#: ../../source/textview.txt:104 +msgid "Bold (\"weight\" property)" msgstr "" -#: ../../source/introduction.txt:7 -msgid "Simple Example" +#: ../../source/textview.txt:105 +msgid "Italics (\"style\" property)" msgstr "" -#: ../../source/introduction.txt:9 -msgid "" -"To start with our tutorial we create the simplest program possible. This " -"program will create an empty 200 x 200 pixel window." +#: ../../source/textview.txt:106 +msgid "Strikethrough (\"strikethrough\" property)" msgstr "" -#: ../../source/introduction.txt:17 -msgid "We will now explain each line of the example." +#: ../../source/textview.txt:107 +msgid "Justification (\"justification\" property)" msgstr "" -#: ../../source/introduction.txt:22 -msgid "" -"In the beginning, we have to import the Gtk module to be able to access GTK" -"+'s classes and functions. Since a user's system can have multiple versions " -"of GTK+ installed at the same, we want to make sure that when we import Gtk " -"that it refers to GTK+ 3 and not any other version of the library, which is " -"the purpose of the statement ``gi.require_version('Gtk', '3.0')``." +#: ../../source/textview.txt:108 +msgid "Size (\"size\" and \"size-points\" properties)" msgstr "" -#: ../../source/introduction.txt:29 -msgid "The next line creates an empty window." +#: ../../source/textview.txt:109 +msgid "Text wrapping (\"wrap-mode\" property)" msgstr "" -#: ../../source/introduction.txt:34 +#: ../../source/textview.txt:111 msgid "" -"Followed by connecting to the window's delete event to ensure that the " -"application is terminated if we click on the *x* to close the window." -msgstr "" - -#: ../../source/introduction.txt:40 -msgid "In the next step we display the window." +"You can also delete particular tags later using :meth:`Gtk.TextBuffer." +"remove_tag` or delete all tags in a given region by calling :meth:`Gtk." +"TextBuffer.remove_all_tags`." msgstr "" -#: ../../source/introduction.txt:45 -msgid "" -"Finally, we start the GTK+ processing loop which we quit when the window is " -"closed (see line 6)." +#: ../../source/treeview.txt:2 +msgid "Tree and List Widgets" msgstr "" -#: ../../source/introduction.txt:51 +#: ../../source/treeview.txt:4 msgid "" -"To run the program, open a terminal, change to the directory of the file, " -"and enter::" +"A :class:`Gtk.TreeView` and its associated widgets are an extremely powerful " +"way of displaying data. They are used in conjunction with a :class:`Gtk." +"ListStore` or :class:`Gtk.TreeStore` and provide a way of displaying and " +"manipulating data in many ways, including:" msgstr "" -#: ../../source/introduction.txt:57 -msgid "Extended Example" +#: ../../source/treeview.txt:9 +msgid "Automatic updates when data is added, removed or edited" msgstr "" -#: ../../source/introduction.txt:58 -msgid "" -"For something a little more useful, here's the PyGObject version of the " -"classic \"Hello World\" program." +#: ../../source/treeview.txt:10 +msgid "Drag and drop support" msgstr "" -#: ../../source/introduction.txt:66 -msgid "" -"This example differs from the simple example as we sub-class :class:`Gtk." -"Window` to define our own :class:`MyWindow` class." +#: ../../source/treeview.txt:11 +msgid "Sorting data" msgstr "" -#: ../../source/introduction.txt:72 -msgid "" -"In the class's constructor we have to call the constructor of the super " -"class. In addition, we tell it to set the value of the property `title` to " -"`Hello World`." +#: ../../source/treeview.txt:12 +msgid "Embedding widgets such as check boxes, progress bars, etc." msgstr "" -#: ../../source/introduction.txt:78 -msgid "" -"The next three lines are used to create a button widget, connect to its " -"`clicked` signal and add it as child to the top-level window." +#: ../../source/treeview.txt:13 +msgid "Reorderable and resizable columns" msgstr "" -#: ../../source/introduction.txt:84 -msgid "" -"Accordingly, the method :meth:`on_button_clicked` will be called if you " -"click on the button." +#: ../../source/treeview.txt:14 +msgid "Filtering data" msgstr "" -#: ../../source/introduction.txt:89 +#: ../../source/treeview.txt:16 msgid "" -"The last block, outside of the class, is very similar to the simple example " -"above, but instead of creating an instance of the generic :class:`Gtk." -"Window` class, we create an instance of :class:`MyWindow`." -msgstr "" - -#: ../../source/objects.txt:4 -msgid "Objects" +"With the power and flexibility of a :class:`Gtk.TreeView` comes complexity. " +"It is often difficult for beginner developers to be able to utilize it " +"correctly due to the number of methods which are required." msgstr "" -#: ../../source/objects.txt:6 +#: ../../source/treeview.txt:22 msgid "" -"GObject is the fundamental type providing the common attributes and methods " -"for all object types in GTK+, Pango and other libraries based on GObject. " -"The :class:`GObject.GObject` class provides methods for object construction " -"and destruction, property access methods, and signal support." +"Each :class:`Gtk.TreeView` has an associated :class:`Gtk.TreeModel`, which " +"contains the data displayed by the TreeView. Each :class:`Gtk.TreeModel` can " +"be used by more than one :class:`Gtk.TreeView`. For instance, this allows " +"the same underlying data to be displayed and edited in 2 different ways at " +"the same time. Or the 2 Views might display different columns from the same " +"Model data, in the same way that 2 SQL queries (or \"views\") might show " +"different fields from the same database table." msgstr "" -#: ../../source/objects.txt:11 +#: ../../source/treeview.txt:30 msgid "" -"This section will introduce some important aspects about the GObject " -"implementation in Python." +"Although you can theoretically implement your own Model, you will normally " +"use either the :class:`Gtk.ListStore` or :class:`Gtk.TreeStore` model " +"classes. :class:`Gtk.ListStore` contains simple rows of data, and each row " +"has no children, whereas :class:`Gtk.TreeStore` contains rows of data, and " +"each row may have child rows." msgstr "" -#: ../../source/objects.txt:15 -msgid "Inherit from GObject.GObject" +#: ../../source/treeview.txt:36 +msgid "" +"When constructing a model you have to specify the data types for each column " +"the model holds." msgstr "" -#: ../../source/objects.txt:17 +#: ../../source/treeview.txt:43 msgid "" -"A native GObject is accessible via :class:`GObject.GObject`. It is rarely " -"instantiated directly, we generally use inherited class. A :class:`Gtk." -"Widget` is an inherited class of a :class:`GObject.GObject`. It may be " -"interesting to make an inherited class to create a new widget, like a " -"settings dialog." +"This creates a list store with three columns, two string columns, and a " +"float column." msgstr "" -#: ../../source/objects.txt:22 +#: ../../source/treeview.txt:46 msgid "" -"To inherit from :class:`GObject.GObject`, you must call :meth:`GObject." -"GObject.__init__` in your constructor (if the class inherits from :class:" -"`Gtk.Button`, it must call :func:`Gtk.Button.__init__` for instance), like " -"in the example below:" +"Adding data to the model is done using :meth:`Gtk.ListStore.append` or :meth:" +"`Gtk.TreeStore.append`, depending upon which sort of model was created." msgstr "" -#: ../../source/objects.txt:37 -msgid "Signals" +#: ../../source/treeview.txt:49 +msgid "For a :class:`Gtk.ListStore`:" msgstr "" -#: ../../source/objects.txt:39 +#: ../../source/treeview.txt:56 msgid "" -"Signals connect arbitrary application-specific events with any number of " -"listeners. For example, in GTK+, every user event (keystroke or mouse move) " -"is received from the X server and generates a GTK+ event under the form of a " -"signal emission on a given object instance." +"For a :class:`Gtk.TreeStore` you must specify an existing row to append the " +"new row to, using a :class:`Gtk.TreeIter`, or None for the top level of the " +"tree:" msgstr "" -#: ../../source/objects.txt:44 +#: ../../source/treeview.txt:64 msgid "" -"Each signal is registered in the type system together with the type on which " -"it can be emitted: users of the type are said to connect to the signal on a " -"given type instance when they register a function to be invoked upon the " -"signal emission. Users can also emit the signal by themselves or stop the " -"emission of the signal from within one of the functions connected to the " -"signal." +"Both methods return a :class:`Gtk.TreeIter` instance, which points to the " +"location of the newly inserted row. You can retrieve a :class:`Gtk.TreeIter` " +"by calling :meth:`Gtk.TreeModel.get_iter`." msgstr "" -#: ../../source/objects.txt:51 -msgid "Receive signals" +#: ../../source/treeview.txt:68 +msgid "" +"Once data has been inserted, you can retrieve or modify data using the tree " +"iter and column index." msgstr "" -#: ../../source/objects.txt:53 -msgid "See :ref:`signals`" +#: ../../source/treeview.txt:76 +msgid "" +"As with Python's built-in :class:`list` object you can use :func:`len` to " +"get the number of rows and use slices to retrieve or set values." msgstr "" -#: ../../source/objects.txt:56 -msgid "Create new signals" +#: ../../source/treeview.txt:90 +msgid "Iterating over all rows of a tree model is very simple as well." msgstr "" -#: ../../source/objects.txt:58 +#: ../../source/treeview.txt:98 msgid "" -"New signals can be created by adding them to :attr:`GObject.GObject." -"__gsignals__`, a dictionary:" +"Keep in mind, that if you use :class:`Gtk.TreeStore`, the above code will " +"only iterate over the rows of the top level, but not the children of the " +"nodes. To iterate over all rows, use :meth:`Gtk.TreeModel.foreach`." msgstr "" -#: ../../source/objects.txt:61 +#: ../../source/treeview.txt:109 msgid "" -"When a new signal is created, a method handler can also be defined, it will " -"be called each time the signal is emitted. It is called do_signal_name." +"Apart from accessing values stored in a :class:`Gtk.TreeModel` with the list-" +"like method mentioned above, it is also possible to either use :class:`Gtk." +"TreeIter` or :class:`Gtk.TreePath` instances. Both reference a particular " +"row in a tree model. One can convert a path to an iterator by calling :meth:" +"`Gtk.TreeModel.get_iter`. As :class:`Gtk.ListStore` contains only one level, " +"i.e. nodes do not have any child nodes, a path is essentially the index of " +"the row you want to access." msgstr "" -#: ../../source/objects.txt:75 +#: ../../source/treeview.txt:126 msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` indicates that this signal will invoke the " -"object method handler (:meth:`do_my_signal` here) in the first emission " -"stage. Alternatives are :const:`GObject.SIGNAL_RUN_LAST` (the method handler " -"will be invoked in the third emission stage) and :const:`GObject." -"SIGNAL_RUN_CLEANUP` (invoke the method handler in the last emission stage)." +"In the case of :class:`Gtk.TreeStore`, a path is a list of indexes or a " +"string. The string form is a list of numbers separated by a colon. Each " +"number refers to the offset at that level. Thus, the path \"0\" refers to " +"the root node and the path \"2:4\" refers to the fifth child of the third " +"node." msgstr "" -#: ../../source/objects.txt:81 +#: ../../source/treeview.txt:139 msgid "" -"The second part, ``None``, indicates the return type of the signal, usually " -"``None``." +"Instances of :class:`Gtk.TreePath` can be accessed like lists, i.e. " +"``len(treepath)`` returns the depth of the item ``treepath`` is pointing to, " +"and ``treepath[i]`` returns the child's index on the *i*-th level." msgstr "" -#: ../../source/objects.txt:84 +#: ../../source/treeview.txt:145 msgid "" -"``(int,)`` indicates the signal arguments, here, the signal will only take " -"one argument, whose type is int. This argument type list must end with a " -"comma." -msgstr "" - -#: ../../source/objects.txt:88 -msgid "Signals can be emitted using :meth:`GObject.GObject.emit`:" +"While there are several different models to choose from, there is only one " +"view widget to deal with. It works with either the list or the tree store. " +"Setting up a :class:`Gtk.TreeView` is not a difficult matter. It needs a :" +"class:`Gtk.TreeModel` to know where to retrieve its data from, either by " +"passing it to the :class:`Gtk.TreeView` constructor, or by calling :meth:" +"`Gtk.TreeView.set_model`." msgstr "" -#: ../../source/objects.txt:97 +#: ../../source/treeview.txt:156 msgid "" -"One of GObject's nice features is its generic get/set mechanism for object " -"properties. Each class inherited from :class:`GObject.GObject` can define " -"new properties. Each property has a type which never changes (e.g. str, " -"float, int...). For instance, they are used for :class:`Gtk.Button` where " -"there is a \"label\" property which contains the text of the button." +"Once the :class:`Gtk.TreeView` widget has a model, it will need to know how " +"to display the model. It does this with columns and cell renderers." msgstr "" -#: ../../source/objects.txt:104 -msgid "Use existing properties" +#: ../../source/treeview.txt:159 +msgid "" +"Cell renderers are used to draw the data in the tree model in a way. There " +"are a number of cell renderers that come with GTK+, for instance :class:`Gtk." +"CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk." +"CellRendererToggle`. In addition, it is relatively easy to write a custom " +"renderer yourself." msgstr "" -#: ../../source/objects.txt:106 +#: ../../source/treeview.txt:165 msgid "" -"The class :class:`GObject.GObject` provides several useful functions to " -"manage existing properties, :func:`GObject.GObject.get_property` and :func:" -"`GObject.GObject.set_property`." +"A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses " +"to organize the vertical columns in the tree view. It needs to know the name " +"of the column to label for the user, what type of cell renderer to use, and " +"which piece of data to retrieve from the model for a given row." msgstr "" -#: ../../source/objects.txt:109 +#: ../../source/treeview.txt:176 msgid "" -"Some properties also have functions dedicated to them, called getter and " -"setter. For the property \"label\" of a button, there are two functions to " -"get and set them, :func:`Gtk.Button.get_label` and :func:`Gtk.Button." -"set_label`." +"To render more than one model column in a view column, you need to create a :" +"class:`Gtk.TreeViewColumn` instance and use :meth:`Gtk.TreeViewColumn." +"pack_start` to add the model columns to it." msgstr "" -#: ../../source/objects.txt:114 -msgid "Create new properties" +#: ../../source/treeview.txt:196 +msgid "The Selection" msgstr "" -#: ../../source/objects.txt:116 +#: ../../source/treeview.txt:197 msgid "" -"A property is defined with a name and a type. Even if Python itself is " -"dynamically typed, you can't change the type of a property once it is " -"defined. A property can be created using :class:`GObject.Property`." +"Most applications will need to not only deal with displaying data, but also " +"receiving input events from users. To do this, simply get a reference to a " +"selection object and connect to the \"changed\" signal." msgstr "" -#: ../../source/objects.txt:131 -msgid "" -"Properties can also be read-only, if you want some properties to be readable " -"but not writable. To do so, you can add some flags to the property " -"definition, to control read/write access. Flags are :const:`GObject." -"ParamFlags.READABLE` (only read access for external code), :const:`GObject." -"ParamFlags.WRITABLE` (only write access), :const:`GObject.ParamFlags." -"READWRITE` (public):" +#: ../../source/treeview.txt:206 +msgid "Then to retrieve data for the row selected:" msgstr "" -#: ../../source/objects.txt:146 +#: ../../source/treeview.txt:215 msgid "" -"You can also define new read-only properties with a new method decorated " -"with :class:`GObject.Property`:" +"You can control what selections are allowed by calling :meth:`Gtk." +"TreeSelection.set_mode`. :meth:`Gtk.TreeSelection.get_selected` does not " +"work if the selection mode is set to :attr:`Gtk.SelectionMode.MULTIPLE`, " +"use :meth:`Gtk.TreeSelection.get_selected_rows` instead." msgstr "" -#: ../../source/objects.txt:162 -msgid "You can get this property using:" +#: ../../source/treeview.txt:222 +msgid "Sorting" msgstr "" -#: ../../source/objects.txt:170 +#: ../../source/treeview.txt:223 msgid "" -"The API of :class:`GObject.Property` is similar to the builtin :py:func:" -"`property`. You can create property setter in a way similar to Python " -"property:" +"Sorting is an important feature for tree views and is supported by the " +"standard tree models (:class:`Gtk.TreeStore` and :class:`Gtk.ListStore`), " +"which implement the :class:`Gtk.TreeSortable` interface." msgstr "" -#: ../../source/objects.txt:191 -msgid "" -"There is also a way to define minimum and maximum values for numbers, using " -"a more verbose form:" +#: ../../source/treeview.txt:226 +msgid "Sorting by clicking on columns" msgstr "" -#: ../../source/objects.txt:227 +#: ../../source/treeview.txt:227 msgid "" -"Properties must be defined in :attr:`GObject.GObject.__gproperties__`, a " -"dictionary, and handled in do_get_property and do_set_property." -msgstr "" - -#: ../../source/objects.txt:231 -msgid "Watch properties" +"A column of a :class:`Gtk.TreeView` can easily made sortable with a call to :" +"meth:`Gtk.TreeViewColumn.set_sort_column_id`. Afterwards the column can be " +"sorted by clicking on its header." msgstr "" -#: ../../source/objects.txt:233 +#: ../../source/treeview.txt:230 msgid "" -"When a property is modified, a signal is emitted, whose name is \"notify::" -"property-name\":" +"First we need a simple :class:`Gtk.TreeView` and a :class:`Gtk.ListStore` as " +"a model." msgstr "" -#: ../../source/objects.txt:248 +#: ../../source/treeview.txt:249 msgid "" -"Note that you have to use the canonical property name when connecting to the " -"notify signals, as explained in :func:`GObject.Object.signals.notify`. For " -"instance, for a Python property `foo_bar_baz` you would connect to the " -"signal `notify::foo-bar-baz` using" +"The next step is to enable sorting. Note that the *column_id* (``0`` in the " +"example) refers to the column of the model and **not** to the TreeView's " +"column." msgstr "" -#: ../../source/objects.txt:263 -msgid "API" +#: ../../source/treeview.txt:256 +msgid "Setting a custom sort function" msgstr "" -#: ../../source/objects.txt:269 -msgid "Retrieves a property value." +#: ../../source/treeview.txt:257 +msgid "" +"It is also possible to set a custom comparison function in order to change " +"the sorting behaviour. As an example we will create a comparison function " +"that sorts case-sensitive. In the example above the sorted list looked like::" msgstr "" -#: ../../source/objects.txt:273 -msgid "Set property *property_name* to *value*." +#: ../../source/treeview.txt:270 +msgid "The case-sensitive sorted list will look like::" msgstr "" -#: ../../source/objects.txt:277 +#: ../../source/treeview.txt:281 msgid "" -"Emit signal *signal_name*. Signal arguments must follow, e.g. if your signal " -"is of type ``(int,)``, it must be emitted with::" +"First of all a comparison function is needed. This function gets two rows " +"and has to return a negative integer if the first one should come before the " +"second one, zero if they are equal and a positive integer if the second one " +"should come before the second one." msgstr "" -#: ../../source/objects.txt:284 +#: ../../source/treeview.txt:297 msgid "" -"This method freezes all the \"notify::\" signals (which are emitted when any " -"property is changed) until the :meth:`thaw_notify` method is called." +"Then the sort function has to be set by :meth:`Gtk.TreeSortable." +"set_sort_func`." +msgstr "" + +#: ../../source/treeview.txt:304 +msgid "Filtering" msgstr "" -#: ../../source/objects.txt:288 +#: ../../source/treeview.txt:305 msgid "" -"It recommended to use the *with* statement when calling :meth:" -"`freeze_notify`, that way it is ensured that :meth:`thaw_notify` is called " -"implicitly at the end of the block::" +"Unlike sorting, filtering is not handled by the two models we previously " +"saw, but by the :class:`Gtk.TreeModelFilter` class. This class, like :class:" +"`Gtk.TreeStore` and :class:`Gtk.ListStore`, is a :class:`Gtk.TreeModel`. It " +"acts as a layer between the \"real\" model (a :class:`Gtk.TreeStore` or a :" +"class:`Gtk.ListStore`), hiding some elements to the view. In practice, it " +"supplies the :class:`Gtk.TreeView` with a subset of the underlying model. " +"Instances of :class:`Gtk.TreeModelFilter` can be stacked one onto another, " +"to use multiple filters on the same model (in the same way you'd use \"AND\" " +"clauses in a SQL request). They can also be chained with :class:`Gtk." +"TreeModelSort` instances." msgstr "" -#: ../../source/objects.txt:298 +#: ../../source/treeview.txt:307 msgid "" -"Thaw all the \"notify::\" signals which were thawed by :meth:`freeze_notify`." +"You can create a new instance of a :class:`Gtk.TreeModelFilter` and give it " +"a model to filter, but the easiest way is to spawn it directly from the " +"filtered model, using the :meth:`Gtk.TreeModel.filter_new` method." msgstr "" -#: ../../source/objects.txt:300 +#: ../../source/treeview.txt:313 msgid "" -"It is recommended to not call :meth:`thaw_notify` explicitly but use :meth:" -"`freeze_notify` together with the *with* statement." +"In the same way the sorting function works, the :class:`Gtk.TreeModelFilter` " +"uses a \"visibility\" function, which, given a row from the underlying " +"model, will return a boolean indicating if this row should be filtered out " +"or not. It's set by :meth:`Gtk.TreeModelFilter.set_visible_func`:" msgstr "" -#: ../../source/objects.txt:305 +#: ../../source/treeview.txt:319 msgid "" -"Blocks a handler of an instance so it will not be called during any signal " -"emissions unless :meth:`handler_unblock` is called for that *handler_id*. " -"Thus \"blocking\" a signal handler means to temporarily deactivate it, a " -"signal handler has to be unblocked exactly the same amount of times it has " -"been blocked before to become active again." +"The alternative to a \"visibility\" function is to use a boolean column in " +"the model to specify which rows to filter. Choose which column with :meth:" +"`Gtk.TreeModelFilter.set_visible_column`." msgstr "" -#: ../../source/objects.txt:311 +#: ../../source/treeview.txt:321 msgid "" -"It is recommended to use :meth:`handler_block` in conjunction with the " -"*with* statement which will call :meth:`handler_unblock` implicitly at the " -"end of the block::" +"Let's look at a full example which uses the whole :class:`Gtk.ListStore` - :" +"class:`Gtk.TreeModelFilter` - :class:`Gtk.TreeModelFilter` - :class:`Gtk." +"TreeView` stack." msgstr "" -#: ../../source/objects.txt:321 -msgid "" -"Undoes the effect of :meth:`handler_block`. A blocked handler is skipped " -"during signal emissions and will not be invoked until it has been unblocked " -"exactly the amount of times it has been blocked before." +#: ../../source/unicode.txt:2 +msgid "How to Deal With Strings" msgstr "" -#: ../../source/objects.txt:325 +#: ../../source/unicode.txt:4 msgid "" -"It is recommended to not call :meth:`handler_unblock` explicitly but use :" -"meth:`handler_block` together with the *with* statement." +"This section explains how strings are represented in Python 2.x, Python 3.x " +"and GTK+ and discusses common errors that arise when working with strings." msgstr "" -#: ../../source/objects.txt:330 -msgid "A dictionary where inherited class can define new signals." +#: ../../source/unicode.txt:8 +msgid "Definitions" msgstr "" -#: ../../source/objects.txt:332 +#: ../../source/unicode.txt:9 msgid "" -"Each element in the dictionary is a new signal. The key is the signal name. " -"The value is a tuple, with the form::" +"Conceptually, a string is a list of characters such as 'A', 'B', 'C' or 'É'. " +"**Characters** are abstract representations and their meaning depends on the " +"language and context they are used in. The Unicode standard describes how " +"characters are represented by **code points**. For example the characters " +"above are represented with the code points U+0041, U+0042, U+0043, and U" +"+00C9, respectively. Basically, code points are numbers in the range from 0 " +"to 0x10FFFF." msgstr "" -#: ../../source/objects.txt:337 +#: ../../source/unicode.txt:17 msgid "" -":const:`GObject.SIGNAL_RUN_FIRST` can be replaced with :const:`GObject." -"SIGNAL_RUN_LAST` or :const:`GObject.SIGNAL_RUN_CLEANUP`. ``None`` is the " -"return type of the signal. ``(int,)`` is the list of the parameters of the " -"signal, it must end with a comma." +"As mentioned earlier, the representation of a string as a list of code " +"points is abstract. In order to convert this abstract representation into a " +"sequence of bytes, the Unicode string must be **encoded**. The simplest form " +"of encoding is ASCII and is performed as follows:" msgstr "" -#: ../../source/objects.txt:346 +#: ../../source/unicode.txt:22 msgid "" -"The :attr:`__gproperties__` dictionary is a class property where you define " -"the properties of your object. This is not the recommend way to define new " -"properties, the method written above is much less verbose. The benefits of " -"this method is that a property can be defined with more settings, like the " -"minimum or the maximum for numbers." +"If the code point is < 128, each byte is the same as the value of the code " +"point." msgstr "" -#: ../../source/objects.txt:352 -msgid "The key is the name of the property" +#: ../../source/unicode.txt:25 +msgid "" +"If the code point is 128 or greater, the Unicode string can't be represented " +"in this encoding. (Python raises a :exc:`UnicodeEncodeError` exception in " +"this case.)" msgstr "" -#: ../../source/objects.txt:354 +#: ../../source/unicode.txt:29 msgid "" -"The value is a tuple which describe the property. The number of elements of " -"this tuple depends on its first element but the tuple will always contain at " -"least the following items:" +"Although ASCII encoding is simple to apply it can only encode for 128 " +"different characters which is hardly enough. One of the most commonly used " +"encodings that addresses this problem is UTF-8 (it can handle any Unicode " +"code point). UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit numbers are used in the encoding." msgstr "" -#: ../../source/objects.txt:358 -msgid "The first element is the property's type (e.g. ``int``, ``float``...)." +#: ../../source/unicode.txt:37 +msgid "Python 2" msgstr "" -#: ../../source/objects.txt:360 -msgid "" -"The second element is the property's nick name, which is a string with a " -"short description of the property. This is generally used by programs with " -"strong introspection capabilities, like the graphical user interface builder " -"`Glade`_." +#: ../../source/unicode.txt:40 +msgid "Python 2.x’s Unicode Support" msgstr "" -#: ../../source/objects.txt:365 +#: ../../source/unicode.txt:41 msgid "" -"The third one is the property's description or blurb, which is another " -"string with a longer description of the property. Also used by `Glade`_ and " -"similar programs." +"Python 2 comes with two different kinds of objects that can be used to " +"represent strings, :class:`str` and :class:`unicode`. Instances of the " +"latter are used to express Unicode strings, whereas instances of the :class:" +"`str` type are byte representations (the encoded string). Under the hood, " +"Python represents Unicode strings as either 16- or 32-bit integers, " +"depending on how the Python interpreter was compiled. Unicode strings can be " +"converted to 8-bit strings with :meth:`unicode.encode`::" msgstr "" -#: ../../source/objects.txt:369 +#: ../../source/unicode.txt:58 msgid "" -"The last one (which is not necessarily the forth one as we will see later) " -"is the property's flags: :const:`GObject.PARAM_READABLE`, :const:`GObject." -"PARAM_WRITABLE`, :const:`GObject.PARAM_READWRITE`." +"Python’s 8-bit strings have a :meth:`str.decode` method that interprets the " +"string using the given encoding::" msgstr "" -#: ../../source/objects.txt:373 +#: ../../source/unicode.txt:68 msgid "" -"The absolute length of the tuple depends on the property type (the first " -"element of the tuple). Thus we have the following situations:" +"Unfortunately, Python 2.x allows you to mix :class:`unicode` and :class:" +"`str` if the 8-bit string happened to contain only 7-bit (ASCII) bytes, but " +"would get :exc:`UnicodeDecodeError` if it contained non-ASCII values::" msgstr "" -#: ../../source/objects.txt:376 -msgid "" -"If the type is ``bool`` or ``str``, the forth element is the default value " -"of the property." +#: ../../source/unicode.txt:85 ../../source/unicode.txt:148 +msgid "Unicode in GTK+" msgstr "" -#: ../../source/objects.txt:379 +#: ../../source/unicode.txt:86 msgid "" -"If the type is ``int`` or ``float``, the forth element is the minimum " -"accepted value, the fifth element is the maximum accepted value and the " -"sixth element is the default value." +"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a " +"method that returns a string you will always obtain an instance of the :" +"class:`str` type. The same applies to methods that expect one or more " +"strings as parameter, they must be UTF-8 encoded. However, for convenience " +"PyGObject will automatically convert any :class:`unicode` instance to :class:" +"`str` if supplied as argument::" msgstr "" -#: ../../source/objects.txt:383 -msgid "If the type is not one of these, there is no extra element." +#: ../../source/unicode.txt:104 +msgid "" +"Note the warning at the end. Although we called :meth:`Gtk.Label.set_text` " +"with a :class:`unicode` instance as argument, :meth:`Gtk.Label.get_text` " +"will always return a :class:`str` instance. Accordingly, ``txt`` and " +"``unicode_string`` are *not* equal." msgstr "" -#: ../../source/objects.txt:388 -msgid "Invoke the object method handler in the first emission stage." +#: ../../source/unicode.txt:109 +msgid "" +"This is especially important if you want to internationalize your program " +"using `gettext `_. You have " +"to make sure that gettext will return UTF-8 encoded 8-bit strings for all " +"languages. In general it is recommended to not use :class:`unicode` objects " +"in GTK+ applications at all and only use UTF-8 encoded :class:`str` objects " +"since GTK+ does not fully integrate with :class:`unicode` objects. " +"Otherwise, you would have to decode the return values to Unicode strings " +"each time you call a GTK+ method::" msgstr "" -#: ../../source/objects.txt:392 -msgid "Invoke the object method handler in the third emission stage." +#: ../../source/unicode.txt:122 +msgid "Python 3" msgstr "" -#: ../../source/objects.txt:396 -msgid "Invoke the object method handler in the last emission stage." +#: ../../source/unicode.txt:125 +msgid "Python 3.x's Unicode support" msgstr "" -#: ../../source/objects.txt:400 -msgid "The property is readable." +#: ../../source/unicode.txt:126 +msgid "" +"Since Python 3.0, all strings are stored as Unicode in an instance of the :" +"class:`str` type. *Encoded* strings on the other hand are represented as " +"binary data in the form of instances of the :class:`bytes` type. " +"Conceptually, :class:`str` refers to *text*, whereas :class:`bytes` refers " +"to *data*. Use :meth:`str.encode` to go from :class:`str` to :class:`bytes`, " +"and :meth:`bytes.decode` to go from :class:`bytes` to :class:`str`." msgstr "" -#: ../../source/objects.txt:404 -msgid "The property is writable." +#: ../../source/unicode.txt:133 +msgid "" +"In addition, it is no longer possible to mix Unicode strings with encoded " +"strings, because it will result in a :exc:`TypeError`::" msgstr "" -#: ../../source/objects.txt:408 -msgid "The property is readable and writable." +#: ../../source/unicode.txt:149 +msgid "" +"As a consequence, things are much cleaner and consistent with Python 3.x, " +"because PyGObject will automatically encode/decode to/from UTF-8 if you pass " +"a string to a method or a method returns a string. Strings, or *text*, will " +"always be represented as instances of :class:`str` only::" msgstr "" -#: ../../source/progressbar.txt:2 -msgid "ProgressBar" +#: ../../source/unicode.txt:165 +msgid "References" msgstr "" -#: ../../source/progressbar.txt:4 +#: ../../source/unicode.txt:166 msgid "" -"The :class:`Gtk.ProgressBar` is typically used to display the progress of a " -"long running operation. It provides a visual clue that processing is " -"underway. The :class:`Gtk.ProgressBar` can be used in two different modes: " -"*percentage mode* and *activity mode*." +"`What's new in Python 3.0 `_ describes the new concepts that " +"clearly distinguish between text and data." msgstr "" -#: ../../source/progressbar.txt:9 +#: ../../source/unicode.txt:169 msgid "" -"When an application can determine how much work needs to take place (e.g. " -"read a fixed number of bytes from a file) and can monitor its progress, it " -"can use the :class:`Gtk.ProgressBar` in *percentage mode* and the user sees " -"a growing bar indicating the percentage of the work that has been completed. " -"In this mode, the application is required to call :meth:`Gtk.ProgressBar." -"set_fraction` periodically to update the progress bar, passing a float " -"between 0 and 1 to provide the new percentage value." +"The `Unicode HOWTO `_ " +"discusses Python 2.x’s support for Unicode, and explains various problems " +"that people commonly encounter when trying to work with Unicode." msgstr "" -#: ../../source/progressbar.txt:17 +#: ../../source/unicode.txt:173 msgid "" -"When an application has no accurate way of knowing the amount of work to do, " -"it can use *activity mode*, which shows activity by a block moving back and " -"forth within the progress area. In this mode, the application is required to " -"call :meth:`Gtk.ProgressBar.pulse` periodically to update the progress bar. " -"You can also choose the step size, with the :meth:`Gtk.ProgressBar." -"set_pulse_step` method." +"The `Unicode HOWTO for Python 3.x `_ discusses Unicode support in Python 3.x." msgstr "" -#: ../../source/progressbar.txt:24 +#: ../../source/unicode.txt:176 msgid "" -"By default, :class:`Gtk.ProgressBar` is horizontal and left-to-right, but " -"you can change it to a vertical progress bar by using the :meth:`Gtk." -"ProgressBar.set_orientation` method. Changing the direction the progress bar " -"grows can be done using :meth:`Gtk.ProgressBar.set_inverted`. :class:`Gtk." -"ProgressBar` can also contain text which can be set by calling :meth:`Gtk." -"ProgressBar.set_text` and :meth:`Gtk.ProgressBar.set_show_text`." +"`UTF-8 encoding table and Unicode characters `_ contains a list of Unicode code points and their respective UTF-8 " +"encoding." msgstr "" From 94935795d91dad697012de8824d4c81c24bab1cd Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 10 May 2021 19:32:17 +0100 Subject: [PATCH 152/209] Expand the description of Gtk.TreeViewColumn Mention column headers being optional, some pointers on custom renderers and more on the mapping from model to view column. --- source/conf.py | 1 + source/treeview.txt | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/source/conf.py b/source/conf.py index 1b1e43f..d67b540 100644 --- a/source/conf.py +++ b/source/conf.py @@ -38,6 +38,7 @@ "gobject": ("https://lazka.github.io/pgi-docs/GObject-2.0", None), "gio": ("https://lazka.github.io/pgi-docs/Gio-2.0", None), "gtk": ("https://lazka.github.io/pgi-docs/Gtk-3.0", None), + "pygobject": ("https://pygobject.readthedocs.io/en/latest", None), } # Add any paths that contain templates here, relative to this directory. diff --git a/source/treeview.txt b/source/treeview.txt index efb81da..f0c9214 100644 --- a/source/treeview.txt +++ b/source/treeview.txt @@ -155,22 +155,36 @@ passing it to the :class:`Gtk.TreeView` constructor, or by calling Once the :class:`Gtk.TreeView` widget has a model, it will need to know how to display the model. It does this with columns and cell renderers. +:data:`headers_visible ` controls whether +it displays column headers. -Cell renderers are used to draw the data in the tree model in a way. There are a -number of cell renderers that come with GTK+, for instance +Cell renderers are used to draw the data in the tree model in a specific way. +There are a number of cell renderers that come with GTK+, for instance :class:`Gtk.CellRendererText`, :class:`Gtk.CellRendererPixbuf` and :class:`Gtk.CellRendererToggle`. -In addition, it is relatively easy to write a custom renderer yourself. +In addition, it is relatively easy to write a custom renderer yourself by +subclassing a :class:`Gtk.CellRenderer`, and adding properties with +:func:`GObject.Property`. A :class:`Gtk.TreeViewColumn` is the object that :class:`Gtk.TreeView` uses to -organize the vertical columns in the tree view. It needs to know the name of the -column to label for the user, what type of cell renderer to use, and which piece -of data to retrieve from the model for a given row. +organize the vertical columns in the tree view and hold one or more cell renderers. +Each column may have a :data:`title ` that will +be visible if the :class:`Gtk.TreeView` is showing column headers. The model +is mapped to the column by using keyword arguments with properties of the +renderer as the identifiers and indexes of the model columns as the arguments. + +.. code-block:: python + + renderer = Gtk.CellRendererPixbuf() + column = Gtk.TreeViewColumn(cell_renderer=renderer, icon_name=3) + tree.append_column(column) + +Positional arguments can be used for the column title and renderer. .. code-block:: python renderer = Gtk.CellRendererText() - column = Gtk.TreeViewColumn("Title", renderer, text=0) + column = Gtk.TreeViewColumn("Title", renderer, text=0, weight=1) tree.append_column(column) To render more than one model column in a view column, you need to create a From 6200f8994b7e3ef1fe9faaf97d16f79c1f4ddee7 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 10 May 2021 19:32:38 +0100 Subject: [PATCH 153/209] Improve Builder introduction Mention "UI definition" to align with GTK documentation. --- source/builder.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/builder.txt b/source/builder.txt index 4d4c9a2..fbb6b21 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -1,8 +1,8 @@ Glade and Gtk.Builder ===================== The :class:`Gtk.Builder` class offers you the opportunity to design user interfaces without writing a single line of code. -This is possible through describing the interface by an XML file and then loading the XML description at runtime and create the objects automatically, which the Builder class does for you. -For the purpose of not needing to write the XML manually the `Glade `_ application lets you create the user interface in a WYSIWYG (what you see is what you get) manner +This is achieved by defining the interface in an XML file and then loading that XML UI definition at runtime using the Builder class which creates the objects automatically. +To avoid writing the XML manually use the `Glade `_ application which lets you create the user interface in a WYSIWYG (what you see is what you get) manner This method has several advantages: From bdd2dbbac3e047568109fbd92ecb881b969d9d41 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 10 May 2021 19:32:38 +0100 Subject: [PATCH 154/209] Glade uses - not _ for property names in UI definitions --- examples/builder_example.glade | 10 +++++----- source/builder.txt | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/builder_example.glade b/examples/builder_example.glade index 0c977f7..f70fb36 100644 --- a/examples/builder_example.glade +++ b/examples/builder_example.glade @@ -2,16 +2,16 @@ - False + False button - False + False True - True - True - False + True + True + False diff --git a/source/builder.txt b/source/builder.txt index fbb6b21..4458420 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -29,10 +29,10 @@ The resulting XML file should look like this. button - False + False True - True - True + True + True From 21024108cfdd0542b0b5fd871494d352d2756d81 Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 10 May 2021 19:32:38 +0100 Subject: [PATCH 155/209] Add an implementation of the Builder example using Gtk.Template --- examples/template_example.py | 23 +++++++++++++++++++++++ examples/template_example.ui | 18 ++++++++++++++++++ source/builder.txt | 17 +++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 examples/template_example.py create mode 100644 examples/template_example.ui diff --git a/examples/template_example.py b/examples/template_example.py new file mode 100644 index 0000000..4b4e686 --- /dev/null +++ b/examples/template_example.py @@ -0,0 +1,23 @@ +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk + + +@Gtk.Template(filename="template_example.ui") +class Window1(Gtk.Window): + __gtype_name__ = "window1" + + @Gtk.Template.Callback() + def onDestroy(self, *args): + Gtk.main_quit() + + @Gtk.Template.Callback() + def onButtonPressed(self, button): + print("Hello World!") + + +window = Window1() +window.show() + +Gtk.main() diff --git a/examples/template_example.ui b/examples/template_example.ui new file mode 100644 index 0000000..b35044e --- /dev/null +++ b/examples/template_example.ui @@ -0,0 +1,18 @@ + + + + + diff --git a/source/builder.txt b/source/builder.txt index 4458420..38c0329 100644 --- a/source/builder.txt +++ b/source/builder.txt @@ -120,3 +120,20 @@ The final code of the example .. literalinclude:: ../examples/builder_example.py :linenos: + +Gtk.Template +------------ +:class:`Gtk.WidgetClass` allows UI definition files to be used to extend a widget, +PyGObject provides Gtk.Template as a way of accessing this from Python. + +The UI definition file used in the example needs a small change to include a *

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 diff --git a/translations/.doctrees/cellrenderers.doctree b/translations/.doctrees/cellrenderers.doctree deleted file mode 100644 index ca624c8bf224049757448f6ad91b127f9f6944cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81293 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 F`UktX6ypx{b37kW_zlutE;N3tEzi? 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 diff --git a/translations/.doctrees/combobox.doctree b/translations/.doctrees/combobox.doctree deleted file mode 100644 index 2475c597b1addbcb4a7ae4a2d5ecf3660e79a895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45377 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 L6qn&|*B<*H{-ypn diff --git a/translations/.doctrees/dialogs.doctree b/translations/.doctrees/dialogs.doctree deleted file mode 100644 index 61c59a664df8d3a1da6e5c8bd577eb16ec3c0153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142133 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 diff --git a/translations/.doctrees/drag_and_drop.doctree b/translations/.doctrees/drag_and_drop.doctree deleted file mode 100644 index 086a120f05327804a0671f02b3f81898b2416e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71652 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 N2fjOqzin^q{{h>P!=3;D diff --git a/translations/.doctrees/environment.pickle b/translations/.doctrees/environment.pickle deleted file mode 100644 index a49c433efc0a0322410ce45db247c764d1f6a134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132363 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 z 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 diff --git a/translations/.doctrees/iconview.doctree b/translations/.doctrees/iconview.doctree deleted file mode 100644 index 99d2223c182f37e081ec58f81a878b7d5d4f477d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140825 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 diff --git a/translations/.doctrees/install.doctree b/translations/.doctrees/install.doctree deleted file mode 100644 index b1821f6520b01c5c96ffcfbe0567220601ce22bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16375 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 diff --git a/translations/.doctrees/label.doctree b/translations/.doctrees/label.doctree deleted file mode 100644 index 84bb6715535d17c3a69e4eaba8c12fd21f2f0377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47867 zcmeHw2Y4ID(Y9<^5(PC&ZgJc$v?WtAMWWoH$g&d4af@uZ2{s*@rmhlzKmfM~h+>jU z>?BU4^xk{#)#<(W-h1!8_vC+P_7*r4GGb!qPrgT1!o%Ip&d%=6&d$!x&fa{q?bPj7 zvs?|vYIVmA67)Lb)|v_bsLi+dM~D8>k>bjlIpa3x8gAep6Z*?WCRQ$4vgG3CzOl