[easytag/wip/future-gtk: 10/17] Convert EtTagArea to a template widget
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/future-gtk: 10/17] Convert EtTagArea to a template widget
- Date: Mon, 4 May 2015 19:36:45 +0000 (UTC)
commit 98f38206b774617505ce398ba0ded24ed81d9b20
Author: David King <amigadave amigadave com>
Date: Sat May 2 11:36:59 2015 +0100
Convert EtTagArea to a template widget
data/image_properties_dialog.ui | 84 +++
data/org.gnome.EasyTAG.gresource.xml | 1 +
data/tag_area.ui | 1021 ++++++++++++++++------------------
src/tag_area.c | 401 ++++++--------
4 files changed, 740 insertions(+), 767 deletions(-)
---
diff --git a/data/image_properties_dialog.ui b/data/image_properties_dialog.ui
new file mode 100644
index 0000000..e7af316
--- /dev/null
+++ b/data/image_properties_dialog.ui
@@ -0,0 +1,84 @@
+<interface domain="easytag">
+ <requires lib="gtk+" version="3.4"/>
+ <object class="GtkDialog" id="image_properties_dialog">
+ <property name="border-width">12</property>
+ <property name="destroy-with-parent">True</property>
+ <property name="modal">True</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="vbox">
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkGrid" id="properties_grid">
+ <property name="column-spacing">12</property>
+ <property name="orientation">vertical</property>
+ <property name="row-spacing">6</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="types_scrolled">
+ <property name="min-content-height">300</property>
+ <property name="min-content-width">400</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkTreeView" id="types_view">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkTreeViewColumn" id="types_column">
+ <property name="title" translatable="yes">Image
Type</property>
+ <child>
+ <object class="GtkCellRendererText" id="types_renderer"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Description</property>
+ <property name="margin-top">12</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="description_entry">
+ <property name="margin-left">12</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="button_box">
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="accept_button">
+ <property name="can-default">True</property>
+ <property name="label" translatable="yes">_Accept</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-3">accept_button</action-widget>
+ <action-widget response="-2">cancel_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/data/org.gnome.EasyTAG.gresource.xml b/data/org.gnome.EasyTAG.gresource.xml
index b49f6fd..4f2a829 100644
--- a/data/org.gnome.EasyTAG.gresource.xml
+++ b/data/org.gnome.EasyTAG.gresource.xml
@@ -4,6 +4,7 @@
<file preprocess='xml-stripblanks'>browser.ui</file>
<file preprocess='xml-stripblanks'>cddb_dialog.ui</file>
<file preprocess='xml-stripblanks'>file_area.ui</file>
+ <file preprocess='xml-stripblanks'>image_properties_dialog.ui</file>
<file preprocess='xml-stripblanks'>log_area.ui</file>
<file preprocess='xml-stripblanks'>load_files_dialog.ui</file>
<file preprocess='xml-stripblanks'>menus.ui</file>
diff --git a/data/tag_area.ui b/data/tag_area.ui
index 6281f8d..8b14243 100644
--- a/data/tag_area.ui
+++ b/data/tag_area.ui
@@ -1,5 +1,5 @@
<interface domain="easytag">
- <requires lib="gtk+" version="3.4"/>
+ <requires lib="gtk+" version="3.10"/>
<object class="GtkListStore" id="genre_combo_model">
<columns>
<column type="gchararray"/>
@@ -17,591 +17,536 @@
<column type="gchararray"/>
</columns>
</object>
- <object class="GtkDialog" id="image_properties_dialog">
- <property name="border-width">12</property>
- <property name="destroy-with-parent">True</property>
- <property name="modal">True</property>
- <child internal-child="vbox">
- <object class="GtkBox" id="vbox">
- <property name="spacing">12</property>
+ <template class="EtTagArea" parent="GtkBin">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkNotebook" id="tag_notebook">
+ <property name="border-width">2</property>
+ <property name="visible">True</property>
+ <child type="action-start">
+ <object class="GtkBox" id="tag_label_box">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="tag_label">
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Tag</property>
+ <property name="margin-left">6</property>
+ <property name="margin-right">6</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
<child>
- <object class="GtkGrid" id="properties_grid">
- <property name="column-spacing">12</property>
- <property name="orientation">vertical</property>
- <property name="row-spacing">6</property>
+ <object class="GtkGrid" id="common_grid">
+ <property name="border-width">2</property>
+ <property name="column-spacing">2</property>
+ <property name="row-spacing">2</property>
<property name="visible">True</property>
<child>
- <object class="GtkScrolledWindow" id="types_scrolled">
- <property name="min-content-height">300</property>
- <property name="min-content-width">400</property>
+ <object class="GtkLabel" id="title_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Title:</property>
<property name="visible">True</property>
- <child>
- <object class="GtkTreeView" id="types_view">
- <property name="visible">True</property>
- <child>
- <object class="GtkTreeViewColumn" id="types_column">
- <property name="title" translatable="yes">Image
Type</property>
- <child>
- <object class="GtkCellRendererText" id="types_renderer"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- </child>
- </object>
- </child>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
</child>
<child>
- <object class="GtkLabel" id="description_label">
- <property name="halign">start</property>
- <property name="label" translatable="yes">Description</property>
- <property name="margin-top">12</property>
+ <object class="GtkEntry" id="title_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this title</property>
<property name="visible">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">8</property>
+ </packing>
</child>
<child>
- <object class="GtkEntry" id="description_entry">
- <property name="margin-left">12</property>
+ <object class="GtkLabel" id="artist_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Artist:</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
</child>
- </object>
- </child>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="button_box">
<child>
- <object class="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="use-underline">True</property>
+ <object class="GtkEntry" id="artist_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this artist</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ <property name="width">8</property>
+ </packing>
</child>
<child>
- <object class="GtkButton" id="accept_button">
- <property name="can-default">True</property>
- <property name="label" translatable="yes">_Accept</property>
- <property name="use-underline">True</property>
+ <object class="GtkLabel" id="album_artist_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Album artist:</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ </packing>
</child>
- </object>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-3">accept_button</action-widget>
- <action-widget response="-2">cancel_button</action-widget>
- </action-widgets>
- </object>
- <object class="GtkNotebook" id="tag_notebook">
- <property name="border-width">2</property>
- <property name="visible">True</property>
- <child type="action-start">
- <object class="GtkBox" id="tag_label_box">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="tag_label">
- <property name="halign">start</property>
- <property name="label" translatable="yes">Tag</property>
- <property name="margin-left">6</property>
- <property name="margin-right">6</property>
- <property name="visible">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkGrid" id="common_grid">
- <property name="border-width">2</property>
- <property name="column-spacing">2</property>
- <property name="row-spacing">2</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="title_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Title:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="title_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this title</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="artist_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Artist:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="artist_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this artist</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">1</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="album_artist_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Album artist:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="album_artist_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this album artist</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="album_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Album:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="album_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this album name</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">3</property>
- <property name="width">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="disc_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">CD:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">7</property>
- <property name="top-attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="disc_entry">
- <property name="hexpand">True</property>
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this disc number</property>
- <property name="visible">True</property>
- <property name="width-chars">3</property>
- </object>
- <packing>
- <property name="left-attach">8</property>
- <property name="top-attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="year_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Year:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="year_entry">
- <property name="hexpand">True</property>
- <property name="max-length">4</property>
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this year</property>
- <property name="visible">True</property>
- <property name="width-chars">5</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparator" id="tag_separator">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">2</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="track_sequence_button">
- <property name="tooltip-text" translatable="yes">Number selected tracks
sequentially. Starts at 01 in each subdirectory</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">3</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="track_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Track #:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">4</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="track_combo">
- <property name="has-entry">True</property>
- <property name="model">track_combo_model</property>
- <property name="entry-text-column">0</property>
- <property name="hexpand">True</property>
- <property name="visible">True</property>
- <property name="wrap-width">3</property>
- </object>
- <packing>
- <property name="left-attach">5</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="track_separator_label">
- <property name="label">/</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">6</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="track_number_button">
- <property name="tooltip-text" translatable="yes">Set the number of files, in the
same directory of the displayed file, to the selected tracks</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">7</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="track_total_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this number of tracks</property>
- <property name="visible">True</property>
- <property name="width-chars">3</property>
- </object>
- <packing>
- <property name="left-attach">8</property>
- <property name="top-attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="genre_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Genre:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="genre_combo">
- <property name="has-entry">True</property>
- <property name="model">genre_combo_model</property>
- <property name="entry-text-column">0</property>
- <property name="visible">True</property>
- <property name="wrap-width">2</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">5</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="comment_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Comment:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="comment_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this comment</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">6</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="composer_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Composer:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">7</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="composer_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this composer</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">7</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="orig_artist_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Orig. artist:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="orig_artist_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this original artist</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">8</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="copyright_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Copyright:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">9</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="copyright_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this copyright</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">9</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="url_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">URL:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">10</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="url_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this URL</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">10</property>
- <property name="width">8</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="encoded_by_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Encoded by:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">11</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="encoded_by_entry">
- <property name="secondary-icon-name">insert-text</property>
- <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files
with this encoder name</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">11</property>
- <property name="width">8</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="common_label">
- <property name="label" translatable="yes">Common</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkGrid" id="images_grid">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkScrolledWindow" id="images_scrolled">
- <property name="shadow-type">etched-in</property>
- <property name="tooltip-text" translatable="yes">You can use drag and drop to add an
image</property>
- <property name="visible">True</property>
<child>
- <object class="GtkTreeView" id="images_view">
- <property name="expand">True</property>
- <property name="model">images_model</property>
- <property name="headers-visible">False</property>
+ <object class="GtkEntry" id="album_artist_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this album artist</property>
<property name="visible">True</property>
- <child>
- <object class="GtkTreeViewColumn" id="images_column">
- <property name="sizing">autosize</property>
- <child>
- <object class="GtkCellRendererPixbuf"
id="images_thumbnail_renderer"/>
- <attributes>
- <attribute name="surface">0</attribute>
- </attributes>
- </child>
- <child>
- <object class="GtkCellRendererText" id="images_text_renderer"/>
- <attributes>
- <attribute name="text">1</attribute>
- </attributes>
- </child>
- </object>
- </child>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="album_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Album:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="album_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this album name</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ <property name="width">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="disc_number_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">CD:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">7</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="disc_number_entry">
+ <property name="hexpand">True</property>
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this disc number</property>
+ <property name="visible">True</property>
+ <property name="width-chars">3</property>
+ </object>
+ <packing>
+ <property name="left-attach">8</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="year_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Year:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="year_entry">
+ <property name="hexpand">True</property>
+ <property name="max-length">4</property>
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this year</property>
+ <property name="visible">True</property>
+ <property name="width-chars">5</property>
+ <signal name="activate" handler="on_year_entry_activate"/>
+ <signal name="focus-out-event" handler="on_year_entry_focus_out_event"/>
+ <signal name="insert-text" handler="Insert_Only_Digit"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="tag_separator">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="track_sequence_button">
+ <property name="tooltip-text" translatable="yes">Number selected tracks
sequentially. Starts at 01 in each subdirectory</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_apply_to_selection"/>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="track_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Track #:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">4</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="track_combo_entry">
+ <property name="has-entry">True</property>
+ <property name="model">track_combo_model</property>
+ <property name="entry-text-column">0</property>
+ <property name="hexpand">True</property>
+ <property name="visible">True</property>
+ <property name="wrap-width">3</property>
+ </object>
+ <packing>
+ <property name="left-attach">5</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="track_separator_label">
+ <property name="label">/</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">6</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="track_number_button">
+ <property name="tooltip-text" translatable="yes">Set the number of files, in
the same directory of the displayed file, to the selected tracks</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_apply_to_selection"/>
+ </object>
+ <packing>
+ <property name="left-attach">7</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="track_total_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this number of tracks</property>
+ <property name="visible">True</property>
+ <property name="width-chars">3</property>
+ <signal name="insert-text" handler="Insert_Only_Digit"/>
+ </object>
+ <packing>
+ <property name="left-attach">8</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="genre_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Genre:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">5</property>
+ </packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkToolbar" id="images_toolbar">
- <property name="visible">True</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
<child>
- <object class="GtkToolButton" id="image_add_button">
- <property name="icon-name">list-add</property>
- <property name="tooltip-text" translatable="yes">Add images to the
tag</property>
+ <object class="GtkComboBox" id="genre_combo_entry">
+ <property name="has-entry">True</property>
+ <property name="model">genre_combo_model</property>
+ <property name="entry-text-column">0</property>
<property name="visible">True</property>
+ <property name="wrap-width">2</property>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">5</property>
+ <property name="width">8</property>
+ </packing>
</child>
<child>
- <object class="GtkToolButton" id="image_remove_button">
- <property name="icon-name">list-remove</property>
- <property name="sensitive">False</property>
- <property name="tooltip-text" translatable="yes">Remove selected images from
the tag</property>
+ <object class="GtkLabel" id="comment_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Comment:</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">6</property>
+ </packing>
</child>
<child>
- <object class="GtkToolButton" id="image_save_button">
- <property name="icon-name">document-save</property>
- <property name="sensitive">False</property>
- <property name="tooltip-text" translatable="yes">Save the selected images to
files</property>
+ <object class="GtkEntry" id="comment_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this comment</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">6</property>
+ <property name="width">8</property>
+ </packing>
</child>
<child>
- <object class="GtkToolButton" id="image_properties_button">
- <property name="icon-name">document-properties</property>
- <property name="sensitive">False</property>
- <property name="tooltip-text" translatable="yes">Edit image
properties</property>
+ <object class="GtkLabel" id="composer_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Composer:</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">7</property>
+ </packing>
</child>
<child>
- <object class="GtkToolButton" id="image_apply_button">
- <property name="icon-name">insert-image</property>
- <property name="tooltip-text" translatable="yes">Tag selected files with
these images</property>
+ <object class="GtkEntry" id="composer_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this composer</property>
<property name="visible">True</property>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">7</property>
+ <property name="width">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="orig_artist_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Orig. artist:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="orig_artist_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this original artist</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">8</property>
+ <property name="width">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="copyright_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Copyright:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">9</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="copyright_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this copyright</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">9</property>
+ <property name="width">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="url_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">URL:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">10</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="url_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this URL</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">10</property>
+ <property name="width">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="encoded_by_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Encoded by:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">11</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="encoded_by_entry">
+ <property name="secondary-icon-name">insert-text</property>
+ <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected
files with this encoder name</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">11</property>
+ <property name="width">8</property>
+ </packing>
</child>
</object>
</child>
+ <child type="tab">
+ <object class="GtkLabel" id="common_label">
+ <property name="label" translatable="yes">Common</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="images_grid">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="images_scrolled">
+ <property name="shadow-type">etched-in</property>
+ <property name="tooltip-text" translatable="yes">You can use drag and drop
to add an image</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkTreeView" id="images_view">
+ <property name="expand">True</property>
+ <property name="model">images_model</property>
+ <property name="headers-visible">False</property>
+ <property name="visible">True</property>
+ <signal name="button-press-event"
handler="on_picture_view_button_pressed"/>
+ <signal name="drag-data-received"
handler="on_picture_view_drag_data"/>
+ <signal name="key-press-event"
handler="on_picture_view_key_pressed"/>
+ <child>
+ <object class="GtkTreeViewColumn" id="images_column">
+ <property name="sizing">autosize</property>
+ <child>
+ <object class="GtkCellRendererPixbuf"
id="images_thumbnail_renderer"/>
+ <attributes>
+ <attribute name="surface">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText"
id="images_text_renderer"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="selection">
+ <property name="mode">multiple</property>
+ <signal name="changed"
handler="on_picture_view_selection_changed"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="images_toolbar">
+ <property name="visible">True</property>
+ <style>
+ <class name="inline-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolButton" id="add_image_toolitem">
+ <property name="icon-name">list-add</property>
+ <property name="tooltip-text" translatable="yes">Add images to the
tag</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_picture_add_button_clicked"/>
+ <signal name="drag-data-received"
handler="on_picture_view_drag_data"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="remove_image_toolitem">
+ <property name="icon-name">list-remove</property>
+ <property name="sensitive">False</property>
+ <property name="tooltip-text" translatable="yes">Remove selected
images from the tag</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_picture_clear_button_clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="save_image_toolitem">
+ <property name="icon-name">document-save</property>
+ <property name="sensitive">False</property>
+ <property name="tooltip-text" translatable="yes">Save the selected
images to files</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_picture_save_button_clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="image_properties_toolitem">
+ <property name="icon-name">document-properties</property>
+ <property name="sensitive">False</property>
+ <property name="tooltip-text" translatable="yes">Edit image
properties</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_picture_properties_button_clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="apply_image_toolitem">
+ <property name="icon-name">insert-image</property>
+ <property name="tooltip-text" translatable="yes">Tag selected files
with these images</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="on_apply_to_selection"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="images_label">
+ <property name="label" translatable="yes">Images</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
</object>
</child>
- <child type="tab">
- <object class="GtkLabel" id="images_label">
- <property name="label" translatable="yes">Images</property>
- <property name="visible">True</property>
- </object>
- </child>
- </object>
+ </template>
</interface>
diff --git a/src/tag_area.c b/src/tag_area.c
index 970f686..6b889b6 100644
--- a/src/tag_area.c
+++ b/src/tag_area.c
@@ -35,8 +35,10 @@
typedef struct
{
- GtkWidget *label;
- GtkWidget *notebook;
+ GtkWidget *tag_label;
+ GtkWidget *tag_notebook;
+
+ GtkWidget *common_grid;
GtkWidget *title_label;
GtkWidget *title_entry;
@@ -71,7 +73,7 @@ typedef struct
GtkListStore *genre_combo_model;
GtkListStore *track_combo_model;
- GtkWidget *picture_entry_view;
+ GtkWidget *images_view;
/* Other for picture. */
GtkWidget *remove_image_toolitem;
@@ -80,7 +82,7 @@ typedef struct
GtkWidget *image_properties_toolitem;
/* Notebook tabs. */
- GtkWidget *images_tab;
+ GtkWidget *images_grid;
/* Image treeview model. */
GtkListStore *images_model;
@@ -110,7 +112,7 @@ enum
TARGET_URI_LIST
};
-enum /* Columns for picture_entry_view. */
+enum /* Columns for images_view. */
{
PICTURE_COLUMN_SURFACE,
PICTURE_COLUMN_TEXT,
@@ -648,7 +650,8 @@ on_apply_to_selection (GObject *object,
GtkTreeModel *model;
GtkTreeIter iter;
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->picture_entry_view));
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->images_view));
+
if (gtk_tree_model_get_iter_first(model, &iter))
{
do
@@ -1283,7 +1286,7 @@ PictureEntry_Update (EtTagArea *self,
g_error_free (error);
}
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
if (pixbuf)
@@ -1305,7 +1308,7 @@ PictureEntry_Update (EtTagArea *self,
pic->height = gdk_pixbuf_get_height(pixbuf);
/* TODO: Connect to notify:scale-factor and update when the
* scale changes. */
- scale_factor = gtk_widget_get_scale_factor (priv->picture_entry_view);
+ scale_factor = gtk_widget_get_scale_factor (priv->images_view);
if (pic->width > pic->height)
{
@@ -1327,7 +1330,7 @@ PictureEntry_Update (EtTagArea *self,
/* This ties the model to the view, so if the model is to be
* shared in the future, the surface should be per-view. */
- view_window = gtk_widget_get_window (priv->picture_entry_view);
+ view_window = gtk_widget_get_window (priv->images_view);
surface = gdk_cairo_surface_create_from_pixbuf (scaled_pixbuf,
scale_factor,
view_window);
@@ -1581,7 +1584,7 @@ on_picture_add_button_clicked (GObject *object,
GtkTreeSelection *selection;
GSList *list;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
gtk_tree_selection_unselect_all (selection);
list = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (FileSelectionWindow));
@@ -1638,7 +1641,7 @@ on_picture_properties_button_clicked (GObject *object,
}
model = GTK_TREE_MODEL (priv->images_model);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
selection_list = gtk_tree_selection_get_selected_rows (selection, NULL);
selection_nbr = gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection));
@@ -1669,7 +1672,7 @@ on_picture_properties_button_clicked (GObject *object,
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder,
- "/org/gnome/EasyTAG/tag_area.ui",
+ "/org/gnome/EasyTAG/image_properties_dialog.ui",
&error);
if (error != NULL)
@@ -1844,7 +1847,7 @@ on_picture_save_button_clicked (GObject *object,
}
model = GTK_TREE_MODEL (priv->images_model);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
selection_list = gtk_tree_selection_get_selected_rows (selection, NULL);
selection_nbr = gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection));
@@ -1997,7 +2000,7 @@ on_picture_view_button_pressed (GtkTreeView *treeview,
{
GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
if (gtk_tree_selection_count_selected_rows (selection) >= 1)
{
@@ -2034,7 +2037,7 @@ on_picture_view_drag_data (GtkWidget *widget, GdkDragContext *dc,
self = ET_TAG_AREA (user_data);
priv = et_tag_area_get_instance_private (self);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
gtk_tree_selection_unselect_all(selection);
uri = uri_list = g_strsplit ((const gchar *)gtk_selection_data_get_data (selection_data),
@@ -2069,7 +2072,7 @@ on_picture_clear_button_clicked (GObject *object,
priv = et_tag_area_get_instance_private (self);
model = GTK_TREE_MODEL (priv->images_model);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
paths = gtk_tree_selection_get_selected_rows (selection, NULL);
/* List of items to delete. */
@@ -2146,138 +2149,43 @@ create_tag_area (EtTagArea *self)
EtTagAreaPrivate *priv;
GtkWidget *image;
GList *focus_chain = NULL;
- GtkWidget *grid;
GtkEntryCompletion *completion;
- GtkBuilder *builder;
- GError *error = NULL;
/* For Picture. Ignore const string warning. */
static const GtkTargetEntry drops[] = { { (gchar *)"text/uri-list", 0,
TARGET_URI_LIST } };
- GtkTreeSelection *selection;
priv = et_tag_area_get_instance_private (self);
- /* Ensure that the boxed type is registered before using it in
- * GtkBuilder. */
- et_picture_get_type ();
-
- /* Main Frame */
- builder = gtk_builder_new ();
- gtk_builder_add_from_resource (builder,
- "/org/gnome/EasyTAG/tag_area.ui",
- &error);
-
- if (error != NULL)
- {
- g_error ("Unable to get tag area from resource: %s",
- error->message);
- }
-
- /* Note book. */
- priv->notebook = GTK_WIDGET (gtk_builder_get_object (builder,
- "tag_notebook"));
- gtk_container_add (GTK_CONTAINER (self), priv->notebook);
- priv->label = GTK_WIDGET (gtk_builder_get_object (builder, "tag_label"));
-
/* Page for common tag fields. */
- /* Title */
- priv->title_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "title_label"));
- priv->title_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "title_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->title_entry), self);
-
- /* Artist */
- priv->artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "artist_label"));
- priv->artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "artist_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->artist_entry), self);
-
- /* Album Artist */
- priv->album_artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "album_artist_label"));
- priv->album_artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "album_artist_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->album_artist_entry), self);
-
- /* Album */
- priv->album_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "album_label"));
- priv->album_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "album_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->album_entry), self);
-
- /* Disc Number */
- priv->disc_number_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "disc_label"));
- priv->disc_number_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "disc_entry"));
/* FIXME should allow to type only something like : 1/3. */
et_tag_field_connect_signals (GTK_ENTRY (priv->disc_number_entry), self);
-
/* Year */
- priv->year_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "year_label"));
- priv->year_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "year_entry"));
- g_signal_connect (priv->year_entry, "insert-text", G_CALLBACK (Insert_Only_Digit),
- NULL);
- g_signal_connect (priv->year_entry, "activate",
- G_CALLBACK (on_year_entry_activate), self);
- g_signal_connect (priv->year_entry, "focus-out-event",
- G_CALLBACK (on_year_entry_focus_out_event), self);
et_tag_field_connect_signals (GTK_ENTRY (priv->year_entry), self);
/* Track and Track total */
- priv->track_sequence_button = GTK_WIDGET (gtk_builder_get_object (builder,
- "track_sequence_button"));
- g_signal_connect (priv->track_sequence_button, "clicked",
- G_CALLBACK (on_apply_to_selection), self);
/* Pixmap into priv->track_sequence_button button. */
image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/sequence-track.png");
gtk_container_add (GTK_CONTAINER (priv->track_sequence_button), image);
- priv->track_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "track_label"));
-
- priv->track_combo_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
- "track_combo_model"));
-
populate_track_combo (self);
- priv->track_combo_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "track_combo"));
-
gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
2);
g_signal_connect (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
"insert-text", G_CALLBACK (Insert_Only_Digit), NULL);
- priv->track_number_button = GTK_WIDGET (gtk_builder_get_object (builder,
- "track_number_button"));
- g_signal_connect (priv->track_number_button, "clicked",
- G_CALLBACK (on_apply_to_selection), self);
/* Pixmap into priv->track_number_button button. */
image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/sequence-track.png");
gtk_container_add (GTK_CONTAINER (priv->track_number_button), image);
- priv->track_total_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "track_total_entry"));
- g_signal_connect (GTK_ENTRY (priv->track_total_entry), "insert-text",
- G_CALLBACK (Insert_Only_Digit), NULL);
et_tag_field_connect_signals (GTK_ENTRY (priv->track_total_entry), self);
/* Genre */
- priv->genre_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "genre_label"));
-
- priv->genre_combo_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
- "genre_combo_model"));
-
- priv->genre_combo_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "genre_combo"));
completion = gtk_entry_completion_new ();
gtk_entry_set_icon_from_icon_name (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
GTK_ENTRY_ICON_SECONDARY, "insert-text");
@@ -2300,50 +2208,17 @@ create_tag_area (EtTagArea *self)
GTK_ENTRY_ICON_SECONDARY,
_("Tag selected files with this genre"));
- /* Comment */
- priv->comment_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "comment_label"));
- priv->comment_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "comment_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->comment_entry), self);
-
- /* Composer (name of the composers) */
- priv->composer_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "composer_label"));
- priv->composer_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "composer_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->composer_entry), self);
-
/* Translators: Original Artist / Performer. Please try to keep this string
* as short as possible, as it must fit into a narrow column. */
- priv->orig_artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "orig_artist_label"));
- priv->orig_artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "orig_artist_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->orig_artist_entry), self);
-
- /* Copyright */
- priv->copyright_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "copyright_label"));
- priv->copyright_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "copyright_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->copyright_entry), self);
-
- /* URL */
- priv->url_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "url_label"));
- priv->url_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "url_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->url_entry), self);
-
- /* Encoded by */
- priv->encoded_by_label = GTK_WIDGET (gtk_builder_get_object (builder,
- "encoded_by_label"));
- priv->encoded_by_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "encoded_by_entry"));
et_tag_field_connect_signals (GTK_ENTRY (priv->encoded_by_entry), self);
/* Set focus chain. */
+ /* TODO: Use focus-chain GtkBuilder element in GTK+ 3.16. */
focus_chain = g_list_prepend (focus_chain, priv->title_entry);
focus_chain = g_list_prepend (focus_chain, priv->artist_entry);
focus_chain = g_list_prepend (focus_chain, priv->album_artist_entry);
@@ -2362,86 +2237,153 @@ create_tag_area (EtTagArea *self)
/* More efficient than using g_list_append(), which must traverse the
* whole list. */
focus_chain = g_list_reverse (focus_chain);
- grid = GTK_WIDGET (gtk_builder_get_object (builder, "common_grid"));
- gtk_container_set_focus_chain (GTK_CONTAINER (grid), focus_chain);
+ gtk_container_set_focus_chain (GTK_CONTAINER (priv->common_grid),
+ focus_chain);
g_list_free (focus_chain);
- /* Page for extra tag fields. */
- priv->images_tab = GTK_WIDGET (gtk_builder_get_object (builder,
- "images_grid"));
-
- /* Scroll window for priv->picture_entry_view. */
- priv->images_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
- "images_model"));
- priv->picture_entry_view = GTK_WIDGET (gtk_builder_get_object (builder,
- "images_view"));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
-
- /* Activate Drag'n'Drop for the priv->picture_entry_view. */
- gtk_drag_dest_set(GTK_WIDGET(priv->picture_entry_view),
- GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
- drops, sizeof(drops) / sizeof(GtkTargetEntry),
- GDK_ACTION_COPY);
- g_signal_connect (priv->picture_entry_view, "drag-data-received",
- G_CALLBACK (on_picture_view_drag_data), self);
- g_signal_connect (selection, "changed",
- G_CALLBACK (on_picture_view_selection_changed), self);
- g_signal_connect (priv->picture_entry_view, "button-press-event",
- G_CALLBACK (on_picture_view_button_pressed), self);
- g_signal_connect (priv->picture_entry_view, "key-press-event",
- G_CALLBACK (on_picture_view_key_pressed), self);
-
- /* Picture action toolbar. */
- /* TODO: Make the icons use the symbolic variants. */
- priv->add_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
- "image_add_button"));
- g_signal_connect (priv->add_image_toolitem, "clicked",
- G_CALLBACK (on_picture_add_button_clicked), self);
+ /* Activate Drag'n'Drop for the priv->images_view. */
+ gtk_drag_dest_set (GTK_WIDGET (priv->images_view),
+ GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+ drops, sizeof(drops) / sizeof(GtkTargetEntry),
+ GDK_ACTION_COPY);
/* Activate Drag'n'Drop for the add_image_toolitem. */
gtk_drag_dest_set (GTK_WIDGET (priv->add_image_toolitem),
GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
drops, sizeof(drops) / sizeof(GtkTargetEntry),
GDK_ACTION_COPY);
- g_signal_connect (priv->add_image_toolitem, "drag-data-received",
- G_CALLBACK (on_picture_view_drag_data), self);
-
- priv->remove_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
- "image_remove_button"));
- g_signal_connect (priv->remove_image_toolitem, "clicked",
- G_CALLBACK (on_picture_clear_button_clicked), self);
-
- priv->save_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
- "image_save_button"));
- g_signal_connect (priv->save_image_toolitem, "clicked",
- G_CALLBACK (on_picture_save_button_clicked), self);
-
- priv->image_properties_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
- "image_properties_button"));
- g_signal_connect (priv->image_properties_toolitem, "clicked",
- G_CALLBACK (on_picture_properties_button_clicked), self);
-
- priv->apply_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
- "image_apply_button"));
- g_signal_connect (priv->apply_image_toolitem, "clicked",
- G_CALLBACK (on_apply_to_selection), self);
-
- g_object_unref (builder);
}
static void
et_tag_area_init (EtTagArea *self)
{
- create_tag_area (self);
+ /* Ensure that the boxed type is registered before using it in
+ * GtkBuilder. */
+ et_picture_get_type ();
- gtk_widget_show_all (GTK_WIDGET (self));
+ gtk_widget_init_template (GTK_WIDGET (self));
+ create_tag_area (self);
}
static void
et_tag_area_class_init (EtTagAreaClass *klass)
{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+ "/org/gnome/EasyTAG/tag_area.ui");
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ tag_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ tag_notebook);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ title_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ common_grid);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ title_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ artist_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ artist_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ album_artist_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ album_artist_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ album_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ album_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ disc_number_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ disc_number_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ year_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ year_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_combo_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_total_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ genre_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ genre_combo_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ comment_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ comment_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ composer_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ composer_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ orig_artist_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ orig_artist_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ copyright_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ copyright_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ url_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ url_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ encoded_by_label);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ encoded_by_entry);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ genre_combo_model);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_combo_model);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ images_view);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ add_image_toolitem);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ apply_image_toolitem);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ remove_image_toolitem);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ save_image_toolitem);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ image_properties_toolitem);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ images_grid);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ images_model);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_number_button);
+ gtk_widget_class_bind_template_child_private (widget_class, EtTagArea,
+ track_sequence_button);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_add_button_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_clear_button_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_save_button_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_properties_button_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_apply_to_selection);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_view_button_pressed);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_view_drag_data);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_view_key_pressed);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_picture_view_selection_changed);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_year_entry_activate);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_year_entry_focus_out_event);
+ gtk_widget_class_bind_template_callback (widget_class,
+ Insert_Only_Digit);
}
/*
@@ -2464,7 +2406,7 @@ et_tag_area_hide_images_tab (EtTagArea *self)
priv = et_tag_area_get_instance_private (self);
- gtk_widget_hide (priv->images_tab);
+ gtk_widget_hide (priv->images_grid);
}
static void
@@ -2474,7 +2416,7 @@ et_tag_area_show_images_tab (EtTagArea *self)
priv = et_tag_area_get_instance_private (self);
- gtk_widget_show (priv->images_tab);
+ gtk_widget_show (priv->images_grid);
}
/*
@@ -2989,7 +2931,7 @@ et_tag_area_create_file_tag (EtTagArea *self)
et_file_tag_set_picture (FileTag, NULL);
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->picture_entry_view));
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->images_view));
if (gtk_tree_model_get_iter_first (model, &iter))
{
@@ -3037,35 +2979,35 @@ et_tag_area_display_et_file (EtTagArea *self,
{
#ifdef ENABLE_MP3
case ID3_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("ID3 Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("ID3 Tag"));
break;
#endif
#ifdef ENABLE_OGG
case OGG_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("Ogg Vorbis Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("Ogg Vorbis Tag"));
break;
#endif
#ifdef ENABLE_FLAC
case FLAC_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("FLAC Vorbis Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("FLAC Vorbis Tag"));
break;
#endif
case APE_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("APE Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("APE Tag"));
break;
#ifdef ENABLE_MP4
case MP4_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("MP4/M4A/AAC Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("MP4/M4A/AAC Tag"));
break;
#endif
#ifdef ENABLE_WAVPACK
case WAVPACK_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("Wavpack Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("Wavpack Tag"));
break;
#endif
#ifdef ENABLE_OPUS
case OPUS_TAG:
- gtk_label_set_text (GTK_LABEL (priv->label), _("Opus Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("Opus Tag"));
break;
#endif
#ifndef ENABLE_MP3
@@ -3088,7 +3030,7 @@ et_tag_area_display_et_file (EtTagArea *self,
#endif
case UNKNOWN_TAG:
default:
- gtk_label_set_text (GTK_LABEL (priv->label), _("Tag"));
+ gtk_label_set_text (GTK_LABEL (priv->tag_label), _("Tag"));
/* FIXME: Translatable string. */
Log_Print (LOG_ERROR,
"FileTag: Undefined tag type %d for file %s.",
@@ -3322,13 +3264,13 @@ et_tag_area_display_et_file (EtTagArea *self,
}
/* Get page "Images" of the notebook. */
- page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 1);
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->tag_notebook), 1);
string = g_strdup_printf (_("Images (%u)"), nbr_pic);
/* Update the notebook tab. */
- gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->notebook), page,
+ gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->tag_notebook), page,
string);
/* Update the notebook menu. */
- gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->notebook), page,
+ gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->tag_notebook), page,
string);
g_free (string);
@@ -3338,13 +3280,14 @@ et_tag_area_display_et_file (EtTagArea *self,
GtkWidget *page;
/* Get page "Images" of the notebook. */
- page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 1);
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->tag_notebook),
+ 1);
/* Update the notebook tab. */
- gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->notebook), page,
- _("Images"));
+ gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->tag_notebook),
+ page, _("Images"));
/* Update the notebook menu. */
- gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->notebook), page,
- _("Images"));
+ gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->tag_notebook),
+ page, _("Images"));
}
return TRUE;
@@ -3360,11 +3303,11 @@ et_tag_area_select_all_if_focused (EtTagArea *self,
priv = et_tag_area_get_instance_private (self);
- if (focused == priv->picture_entry_view)
+ if (focused == priv->images_view)
{
GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
gtk_tree_selection_select_all (selection);
return TRUE;
}
@@ -3382,11 +3325,11 @@ et_tag_area_unselect_all_if_focused (EtTagArea *self,
priv = et_tag_area_get_instance_private (self);
- if (focused == priv->picture_entry_view)
+ if (focused == priv->images_view)
{
GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->images_view));
gtk_tree_selection_unselect_all (selection);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]