[easytag/wip/musicbrainz-support-appwin-merge: 1/82] Added MusicBrainz dialog
- From: Abhinav Jangda <abhijangda src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/musicbrainz-support-appwin-merge: 1/82] Added MusicBrainz dialog
- Date: Thu, 21 Aug 2014 17:27:22 +0000 (UTC)
commit 36c696537e0286128d8e8ae6ad290fc44f9037a8
Author: Abhinav <abhijangda hotmail com>
Date: Fri May 9 20:55:56 2014 +0530
Added MusicBrainz dialog
Added libmusicbrainz compilation flags
Added musicbrainz_dialog.ui containing MusicBrainz Dialog
Modified bar.c, ui_manager.h and bar.h to replace CDDB Action with MusicBrainz Action
Added new file mbentityview.c containing EtMbEntityView widget
Makefile.am | 24 ++
configure.ac | 7 -
data/musicbrainz_dialog.ui | 759 ++++++++++++++++++++++++++++++++++
data/org.gnome.EasyTAG.gresource.xml | 1 +
po/POTFILES.in | 1 +
src/bar.c | 742 +++++++++++++++++++++++++++++++++
src/bar.h | 174 ++++++++
src/mbentityview.c | 142 +++++++
src/mbentityview.h | 76 ++++
src/musicbrainz_dialog.c | 81 ++++
src/musicbrainz_dialog.h | 31 ++
src/ui_manager.h | 352 ++++++++++++++++
12 files changed, 2383 insertions(+), 7 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index ef45dc9..361c235 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,6 +18,9 @@ SUBDIRS = help po
bin_PROGRAMS = easytag
+BUILT_SOURCES = \
+ $(nodist_easytag_SOURCES)
+
localedir = $(prefix)/$(DATADIRNAME)/locale
easytag_CPPFLAGS = \
-I$(top_srcdir) \
@@ -54,6 +57,16 @@ easytag_SOURCES = \
src/log.c \
src/main.c \
src/misc.c \
+ src/monkeyaudio_header.c \
+ src/mpeg_header.c \
+ src/mp4_tag.cc \
+ src/musepack_header.c \
+ src/musicbrainz_dialog.c \
+ src/mbentityview.c \
+ src/ogg_header.c \
+ src/ogg_tag.c \
+ src/opus_header.c \
+ src/opus_tag.c \
src/picture.c \
src/playlist_dialog.c \
src/preferences_dialog.c \
@@ -105,7 +118,18 @@ easytag_headers = \
src/genres.h \
src/load_files_dialog.h \
src/log.h \
+ src/mbentityview.h \
src/misc.h \
+ src/monkeyaudio_header.h \
+ src/mpeg_header.h \
+ src/mp4_header.h \
+ src/mp4_tag.h \
+ src/musepack_header.h \
+ src/musicbrainz_dialog.h \
+ src/ogg_header.h \
+ src/ogg_tag.h \
+ src/opus_header.h \
+ src/opus_tag.h \
src/picture.h \
src/playlist_dialog.h \
src/preferences_dialog.h \
diff --git a/configure.ac b/configure.ac
index 152b2ac..52c7210 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,13 +48,6 @@ PKG_PROG_PKG_CONFIG([0.24])
AC_SUBST([GLIB_COMPILE_RESOURCES], [`$PKG_CONFIG --variable glib_compile_resources gio-2.0`])
-AC_MSG_CHECKING([for glib-mkenums script])
-GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-AS_IF([test "x$GLIB_MKENUMS" = "x"],
- [AC_MSG_ERROR([glib-mkenums not listed in glib-2.0 pkg-config file])],
- [AC_SUBST([GLIB_MKENUMS])
- AC_MSG_RESULT([$GLIB_MKENUMS])])
-
dnl Man page, generated with xsltproc from DocBook XML.
AC_ARG_ENABLE([man],
[AS_HELP_STRING([--disable-man], [Disable building the man page])])
diff --git a/data/musicbrainz_dialog.ui b/data/musicbrainz_dialog.ui
new file mode 100755
index 0000000..415f3cf
--- /dev/null
+++ b/data/musicbrainz_dialog.ui
@@ -0,0 +1,759 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkImage" id="image12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find</property>
+ </object>
+ <object class="GtkImage" id="image13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-stop</property>
+ </object>
+ <object class="GtkImage" id="image8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find</property>
+ </object>
+ <object class="GtkImage" id="image9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-stop</property>
+ </object>
+ <object class="GtkImage" id="findimage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find</property>
+ </object>
+ <object class="GtkImage" id="image14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon-size">5</property>
+ </object>
+ <object class="GtkImage" id="img_invert_selection">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">easytag-invert-selection</property>
+ </object>
+ <object class="GtkImage" id="img_red_lines">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">easytag-red-lines</property>
+ </object>
+ <object class="GtkImage" id="img_unselect_all">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">easytag-unselect-all</property>
+ </object>
+ <object class="GtkImage" id="image10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find</property>
+ </object>
+ <object class="GtkImage" id="image11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-stop</property>
+ </object>
+ <object class="GtkDialog" id="mbDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Music Brainz Search</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">1</property>
+ <child>
+ <object class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">2</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Search:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="cbAutomaticSearch">
+ <property name="width_request">240</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnAutomaticFind">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image8</property>
+ <property name="image_position">top</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnAutomaticStop">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image9</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Automatic Search in MusicBrainz
Database</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Automatic Search</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0.0099999997764825821</property>
+ <property name="label" translatable="yes">Manually Search MusicBrainz
Database</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">3</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Search:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="cbManualSearch">
+ <property name="width_request">240</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Through:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="cbManualSearchIn">
+ <property name="width_request">120</property>
+ <property name="height_request">26</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnManualFind">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">findimage</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnManualStop">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">stopimage</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Manual Search</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="box6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"> Scan Selected Files from MusicBrainz
Database based on their album:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnSelectedFind">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image10</property>
+ <property name="image_position">right</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnSelectedStop">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image11</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">4</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">1</property>
+ <property name="label" translatable="yes">Scan Selected Files</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">1</property>
+ <child>
+ <object class="GtkBox" id="box5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0.019999999552965164</property>
+ <property name="label" translatable="yes"> Insert Disc into Disc Drive to search
into MusicBrainz Data Base with DiscID: </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnDiscFind">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image12</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="btnDiscStop">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image13</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">4</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Disc Lookup</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">1</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="width_request">555</property>
+ <property name="height_request">216</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="width_request">551</property>
+ <property name="height_request">193</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="centralBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkToolbar" id="toolbar1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolItem" id="toolbutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Search:</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolItem" id="toolbutton2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkComboBoxText" id="comboboxtext1">
+ <property name="width_request">131</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbtnUp">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton3</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-go-up</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton3</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-go-down</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="toolbutton4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton5</property>
+ <property name="use_underline">True</property>
+ <property name="icon_widget">img_invert_selection</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton6</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-select-all</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton7</property>
+ <property name="use_underline">True</property>
+ <property name="icon_widget">img_unselect_all</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton8</property>
+ <property name="use_underline">True</property>
+ <property name="icon_widget">img_red_lines</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="toolbutton9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">toolbutton9</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-refresh</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Results:</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="box10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkButton" id="button9">
+ <property name="label" translatable="yes">Close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button10">
+ <property name="label" translatable="yes">Apply Tag Changes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkStatusbar" id="statusbar1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkImage" id="stopimage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-stop</property>
+ </object>
+ <object class="GtkTreeStore" id="treestore1">
+ <columns>
+ <!-- column-name Entities -->
+ <column type="guchar"/>
+ </columns>
+ </object>
+</interface>
diff --git a/data/org.gnome.EasyTAG.gresource.xml b/data/org.gnome.EasyTAG.gresource.xml
index af477d4..d5c274a 100644
--- a/data/org.gnome.EasyTAG.gresource.xml
+++ b/data/org.gnome.EasyTAG.gresource.xml
@@ -21,5 +21,6 @@
<file preprocess='to-pixdata'>images/red-lines.png</file>
<file preprocess='to-pixdata'>images/sequence-track.png</file>
<file preprocess='to-pixdata'>images/unselect-all.png</file>
+ <file preprocess='xml-stripblanks'>musicbrainz_dialog.ui</file>
</gresource>
</gresources>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0861842..f2eb8a0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,6 +7,7 @@ data/easytag.desktop.in
[type: gettext/glade]data/toolbar.ui
data/org.gnome.EasyTAG.gschema.xml
nautilus-extension/nautilus-easytag.c
+[type: gettext/glade]data/musicbrainz_dialog.ui
src/about.c
src/application.c
src/application_window.c
diff --git a/src/bar.c b/src/bar.c
new file mode 100644
index 0000000..719ba7d
--- /dev/null
+++ b/src/bar.c
@@ -0,0 +1,742 @@
+/* bar.c - 2000/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2003 Jerome Couderc <easytag gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <config.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include "bar.h"
+#include "easytag.h"
+#include "about.h"
+#include "prefs.h"
+#include "setting.h"
+#include "browser.h"
+#include "scan_dialog.h"
+#include "cddb.h"
+#include "log.h"
+#include "misc.h"
+#include "charset.h"
+#include "ui_manager.h"
+#include "gtk2_compat.h"
+#include "musicbrainz_dialog.h"
+
+/***************
+ * Declaration *
+ ***************/
+static GtkWidget *StatusBar = NULL;
+static guint StatusBarContext;
+static guint timer_cid;
+static guint tooltip_cid;
+static guint StatusbarTimerId = 0;
+static GList *ActionPairsList = NULL;
+
+/**************
+ * Prototypes *
+ **************/
+
+static void Check_Menu_Item_Toggled_Browse_Hidden_Dir (GtkWidget *checkmenuitem);
+static void Check_Menu_Item_Toggled_Browse_Subdir (GtkWidget *checkmenuitem);
+static void Init_Menu_Bar (void);
+static void Statusbar_Remove_Timer (void);
+
+static void et_statusbar_push_tooltip (const gchar *message);
+static void et_statusbar_pop_tooltip (void);
+static void et_ui_manager_on_connect_proxy (GtkUIManager *manager,
+ GtkAction *action,
+ GtkWidget *proxy,
+ gpointer user_data);
+static void et_ui_manager_on_disconnect_proxy (GtkUIManager *manager,
+ GtkAction *action,
+ GtkWidget *proxy,
+ gpointer user_data);
+static void on_menu_item_select (GtkMenuItem *item, gpointer user_data);
+static void on_menu_item_deselect (GtkMenuItem *item, gpointer user_data);
+
+/*************
+ * Functions o
+ *************/
+
+/*
+ * Dynamic reimplementation of switch macros
+ */
+#define QCASE(string,callback) if (quark == g_quark_from_string((string))) { (callback)(); }
+#define QCASE_DATA(string,callback,data) if (quark == g_quark_from_string((string))) { (callback)((data)); }
+
+/*
+ * Menu bar
+ */
+static void
+Menu_Sort_Action (GtkAction *item, gpointer data)
+{
+ const gchar *action = gtk_action_get_name(item);
+ GQuark quark = g_quark_from_string(action);
+
+ QCASE_DATA(AM_SORT_ASCENDING_FILENAME, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILENAME);
+ QCASE_DATA(AM_SORT_DESCENDING_FILENAME, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILENAME);
+ QCASE_DATA(AM_SORT_ASCENDING_CREATION_DATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_CREATION_DATE);
+ QCASE_DATA(AM_SORT_DESCENDING_CREATION_DATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_CREATION_DATE);
+ QCASE_DATA(AM_SORT_ASCENDING_TRACK_NUMBER, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_TRACK_NUMBER);
+ QCASE_DATA(AM_SORT_DESCENDING_TRACK_NUMBER, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_TRACK_NUMBER);
+ QCASE_DATA(AM_SORT_ASCENDING_TITLE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_TITLE);
+ QCASE_DATA(AM_SORT_DESCENDING_TITLE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_TITLE);
+ QCASE_DATA(AM_SORT_ASCENDING_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_ARTIST);
+ QCASE_DATA(AM_SORT_DESCENDING_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_ARTIST);
+ QCASE_DATA(AM_SORT_ASCENDING_ALBUM_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_ALBUM_ARTIST);
+ QCASE_DATA(AM_SORT_DESCENDING_ALBUM_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_ALBUM_ARTIST);
+ QCASE_DATA(AM_SORT_ASCENDING_ALBUM, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_ALBUM);
+ QCASE_DATA(AM_SORT_DESCENDING_ALBUM, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_ALBUM);
+ QCASE_DATA(AM_SORT_ASCENDING_YEAR, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_YEAR);
+ QCASE_DATA(AM_SORT_DESCENDING_YEAR, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_YEAR);
+ QCASE_DATA(AM_SORT_ASCENDING_GENRE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_GENRE);
+ QCASE_DATA(AM_SORT_DESCENDING_GENRE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_GENRE);
+ QCASE_DATA(AM_SORT_ASCENDING_COMMENT, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_COMMENT);
+ QCASE_DATA(AM_SORT_DESCENDING_COMMENT, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_COMMENT);
+ QCASE_DATA(AM_SORT_ASCENDING_COMPOSER, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_COMPOSER);
+ QCASE_DATA(AM_SORT_DESCENDING_COMPOSER, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_COMPOSER);
+ QCASE_DATA(AM_SORT_ASCENDING_ORIG_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_ORIG_ARTIST);
+ QCASE_DATA(AM_SORT_DESCENDING_ORIG_ARTIST, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_ORIG_ARTIST);
+ QCASE_DATA(AM_SORT_ASCENDING_COPYRIGHT, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_COPYRIGHT);
+ QCASE_DATA(AM_SORT_DESCENDING_COPYRIGHT, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_COPYRIGHT);
+ QCASE_DATA(AM_SORT_ASCENDING_URL, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_URL);
+ QCASE_DATA(AM_SORT_DESCENDING_URL, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_URL);
+ QCASE_DATA(AM_SORT_ASCENDING_ENCODED_BY, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_ENCODED_BY);
+ QCASE_DATA(AM_SORT_DESCENDING_ENCODED_BY, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_ENCODED_BY);
+ QCASE_DATA(AM_SORT_ASCENDING_FILE_TYPE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILE_TYPE);
+ QCASE_DATA(AM_SORT_DESCENDING_FILE_TYPE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILE_TYPE);
+ QCASE_DATA(AM_SORT_ASCENDING_FILE_SIZE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILE_SIZE);
+ QCASE_DATA(AM_SORT_DESCENDING_FILE_SIZE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILE_SIZE);
+ QCASE_DATA(AM_SORT_ASCENDING_FILE_DURATION, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILE_DURATION);
+ QCASE_DATA(AM_SORT_DESCENDING_FILE_DURATION, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILE_DURATION);
+ QCASE_DATA(AM_SORT_ASCENDING_FILE_BITRATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILE_BITRATE);
+ QCASE_DATA(AM_SORT_DESCENDING_FILE_BITRATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILE_BITRATE);
+ QCASE_DATA(AM_SORT_ASCENDING_FILE_SAMPLERATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_ASCENDING_FILE_SAMPLERATE);
+ QCASE_DATA(AM_SORT_DESCENDING_FILE_SAMPLERATE, ET_Sort_Displayed_File_List_And_Update_UI,
SORTING_BY_DESCENDING_FILE_SAMPLERATE);
+ QCASE_DATA(AM_INITIALIZE_TREE, Browser_Tree_Rebuild, NULL);
+ Browser_List_Refresh_Sort ();
+}
+
+void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
+{
+ GtkWidget *menubar;
+ GtkWidget *toolbar;
+
+ /*
+ * Structure :
+ * - name
+ * - stock_id
+ * - label
+ * - accelerator
+ * - tooltip
+ * - callback
+ */
+ GtkActionEntry ActionEntries[] =
+ {
+
+ /*
+ * Main Menu Actions
+ */
+ { MENU_FILE, NULL, _("_File"),
NULL, NULL, NULL},
+ { MENU_FILE_SORT_TAG, GTK_STOCK_SORT_ASCENDING, _("Sort List by Tag"),
+ NULL, NULL, NULL },
+ { MENU_FILE_SORT_PROP, GTK_STOCK_SORT_ASCENDING,
+ _("Sort List by Property"), NULL, NULL, NULL },
+ { AM_SORT_ASCENDING_FILENAME, GTK_STOCK_SORT_ASCENDING, _("Ascending by filename"),
NULL, _("Ascending by filename"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILENAME, GTK_STOCK_SORT_DESCENDING, _("Descending by filename"),
NULL, _("Descending by filename"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_CREATION_DATE, GTK_STOCK_SORT_ASCENDING, _("Ascending by creation date"),
NULL, _("Ascending by creation date"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_CREATION_DATE, GTK_STOCK_SORT_DESCENDING, _("Descending by creation date"),
NULL, _("Descending by creation date"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_TRACK_NUMBER, GTK_STOCK_SORT_ASCENDING, _("Ascending by track number"),
NULL, _("Ascending by track number"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_TRACK_NUMBER, GTK_STOCK_SORT_DESCENDING, _("Descending by track number"),
NULL, _("Descending by track number"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_TITLE, GTK_STOCK_SORT_ASCENDING, _("Ascending by title"),
NULL, _("Ascending by title"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_TITLE, GTK_STOCK_SORT_DESCENDING, _("Descending by title"),
NULL, _("Descending by title"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_ARTIST, GTK_STOCK_SORT_ASCENDING, _("Ascending by artist"),
NULL, _("Ascending by artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_ARTIST, GTK_STOCK_SORT_DESCENDING, _("Descending by artist"),
NULL, _("Descending by artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_ALBUM_ARTIST, GTK_STOCK_SORT_ASCENDING, _("Ascending by album artist"),
NULL, _("Ascending by album artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_ALBUM_ARTIST, GTK_STOCK_SORT_DESCENDING, _("Descending by album artist"),
NULL, _("Descending by album artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_ALBUM, GTK_STOCK_SORT_ASCENDING, _("Ascending by album"),
NULL, _("Ascending by album"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_ALBUM, GTK_STOCK_SORT_DESCENDING, _("Descending by album"),
NULL, _("Descending by album"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_YEAR, GTK_STOCK_SORT_ASCENDING, _("Ascending by year"),
NULL, _("Ascending by year"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_YEAR, GTK_STOCK_SORT_DESCENDING, _("Descending by year"),
NULL, _("Descending by year"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_GENRE, GTK_STOCK_SORT_ASCENDING, _("Ascending by genre"),
NULL, _("Ascending by genre"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_GENRE, GTK_STOCK_SORT_DESCENDING, _("Descending by genre"),
NULL, _("Descending by genre"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_COMMENT, GTK_STOCK_SORT_ASCENDING, _("Ascending by comment"),
NULL, _("Ascending by comment"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_COMMENT, GTK_STOCK_SORT_DESCENDING, _("Descending by comment"),
NULL, _("Descending by comment"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_COMPOSER, GTK_STOCK_SORT_ASCENDING, _("Ascending by composer"),
NULL, _("Ascending by composer"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_COMPOSER, GTK_STOCK_SORT_DESCENDING, _("Descending by composer"),
NULL, _("Descending by composer"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_ORIG_ARTIST, GTK_STOCK_SORT_ASCENDING, _("Ascending by original artist"),
NULL, _("Ascending by original artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_ORIG_ARTIST, GTK_STOCK_SORT_DESCENDING, _("Descending by original artist"),
NULL, _("Descending by original artist"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_COPYRIGHT, GTK_STOCK_SORT_ASCENDING, _("Ascending by copyright"),
NULL, _("Ascending by copyright"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_COPYRIGHT, GTK_STOCK_SORT_DESCENDING, _("Descending by copyright"),
NULL, _("Descending by copyright"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_URL, GTK_STOCK_SORT_ASCENDING, _("Ascending by URL"),
NULL, _("Ascending by URL"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_URL, GTK_STOCK_SORT_DESCENDING, _("Descending by URL"),
NULL, _("Descending by URL"), G_CALLBACK(Menu_Sort_Action) },
+ /* Translators: the encoder name is supposed to be the name of a person
+ * or organisation, but can sometimes be the name of an application. */
+ { AM_SORT_ASCENDING_ENCODED_BY, GTK_STOCK_SORT_ASCENDING, _("Ascending by encoder name"),
NULL, _("Ascending by encoder name"), G_CALLBACK(Menu_Sort_Action) },
+ /* Translators: the encoder name is supposed to be the name of a person
+ * or organisation, but can sometimes be the name of an application. */
+ { AM_SORT_DESCENDING_ENCODED_BY, GTK_STOCK_SORT_DESCENDING, _("Descending by encoder name"),
NULL, _("Descending by encoder name"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_FILE_TYPE, GTK_STOCK_SORT_ASCENDING, _("Ascending by file type"),
NULL, _("Ascending by file type"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILE_TYPE, GTK_STOCK_SORT_DESCENDING, _("Descending by file type"),
NULL, _("Descending by file type"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_FILE_SIZE, GTK_STOCK_SORT_ASCENDING, _("Ascending by file size"),
NULL, _("Ascending by file size"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILE_SIZE, GTK_STOCK_SORT_DESCENDING, _("Descending by file size"),
NULL, _("Descending by file size"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_FILE_DURATION, GTK_STOCK_SORT_ASCENDING, _("Ascending by duration"),
NULL, _("Ascending by duration"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILE_DURATION, GTK_STOCK_SORT_DESCENDING, _("Descending by duration"),
NULL, _("Descending by duration"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_FILE_BITRATE, GTK_STOCK_SORT_ASCENDING, _("Ascending by bitrate"),
NULL, _("Ascending by bitrate"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILE_BITRATE, GTK_STOCK_SORT_DESCENDING, _("Descending by bitrate"),
NULL, _("Descending by bitrate"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_ASCENDING_FILE_SAMPLERATE, GTK_STOCK_SORT_ASCENDING, _("Ascending by samplerate"),
NULL, _("Ascending by samplerate"), G_CALLBACK(Menu_Sort_Action) },
+ { AM_SORT_DESCENDING_FILE_SAMPLERATE, GTK_STOCK_SORT_DESCENDING, _("Descending by samplerate"),
NULL, _("Descending by samplerate"), G_CALLBACK(Menu_Sort_Action) },
+
+ { AM_OPEN_FILE_WITH, GTK_STOCK_OPEN, _("Open Files With…"),
+ "<Primary><Shift>O", _("Run a command on the selected files"),
+ G_CALLBACK (Browser_Open_Run_Program_List_Window) },
+ { AM_SELECT_ALL, GTK_STOCK_SELECT_ALL, NULL, "<Primary>A",
+ _("Select all"), G_CALLBACK (et_on_action_select_all) },
+ { AM_UNSELECT_ALL, "easytag-unselect-all", _("Unselect All"),
+ "<Primary><Shift>A", _("Clear the current selection"),
+ G_CALLBACK (et_on_action_unselect_all) },
+ { AM_INVERT_SELECTION, "easytag-invert-selection",
+ _("Invert File Selection"), "<Primary>I",
+ _("Invert file selection"),
+ G_CALLBACK (Action_Invert_Files_Selection) },
+ { AM_DELETE_FILE, GTK_STOCK_DELETE, _("Delete Files"), NULL,
_("Delete files"), G_CALLBACK(Action_Delete_Selected_Files) },
+ { AM_FIRST, GTK_STOCK_GOTO_FIRST, _("_First File"), "<Primary>Home",
+ _("First file"), G_CALLBACK (Action_Select_First_File) },
+ { AM_PREV, GTK_STOCK_GO_BACK, _("_Previous File"), "Page_Up",
_("Previous file"), G_CALLBACK(Action_Select_Prev_File) },
+ { AM_NEXT, GTK_STOCK_GO_FORWARD, _("_Next File"), "Page_Down",
_("Next file"), G_CALLBACK(Action_Select_Next_File) },
+ { AM_LAST, GTK_STOCK_GOTO_LAST, _("_Last File"), "<Primary>End",
+ _("Last file"), G_CALLBACK (Action_Select_Last_File) },
+ { AM_SCAN_FILES, GTK_STOCK_APPLY, _("S_can Files"), NULL,
+ _("Scan selected files"), G_CALLBACK (Action_Scan_Selected_Files) },
+ { AM_REMOVE, GTK_STOCK_CLEAR, _("_Remove Tags"), "<Primary>E",
+ _("Remove tags"), G_CALLBACK (Action_Remove_Selected_Tags) },
+ { AM_UNDO, GTK_STOCK_UNDO, _("_Undo Last Files Changes"), "<Primary>Z",
+ _("Undo last files changes"),
+ G_CALLBACK(Action_Undo_Selected_Files) },
+ { AM_REDO, GTK_STOCK_REDO, _("R_edo Last Files Changes"),
+ "<Primary><Shift>Z", _("Redo last files changes"),
+ G_CALLBACK (Action_Redo_Selected_File) },
+ { AM_SAVE, GTK_STOCK_SAVE, _("_Save Files"), "<Primary>S",
+ _("Save changes to selected files"),
+ G_CALLBACK(Action_Save_Selected_Files) },
+ { AM_SAVE_FORCED, GTK_STOCK_SAVE, _("_Force Save Files"),
+ "<Primary><Shift>S", _("Force saving files"),
+ G_CALLBACK (Action_Force_Saving_Selected_Files) },
+ { AM_UNDO_HISTORY, GTK_STOCK_UNDO, _("Undo Last Changes"), NULL,
_("Undo last changes"), G_CALLBACK(Action_Undo_From_History_List) },
+ { AM_REDO_HISTORY, GTK_STOCK_REDO, _("Redo Last Changes"), NULL,
_("Redo last changes"), G_CALLBACK(Action_Redo_From_History_List) },
+ { AM_QUIT, GTK_STOCK_QUIT, _("_Quit"), "<Primary>Q", _("Quit"),
+ G_CALLBACK (Quit_MainWindow) },
+
+ { MENU_BROWSER, NULL, _("_Browser"), NULL,
NULL, NULL },
+ { AM_LOAD_HOME_DIR, GTK_STOCK_HOME, _("_Home Directory"), "<Alt>Home",
+ _("Go to home directory"),
+ G_CALLBACK (Browser_Load_Home_Directory) },
+ { AM_LOAD_DESKTOP_DIR, "user-desktop", _("Desktop Directory"), NULL,
+ _("Go to desktop directory"),
+ G_CALLBACK (Browser_Load_Desktop_Directory) },
+ { AM_LOAD_DOCUMENTS_DIR, "folder-documents", _("Documents Directory"),
+ NULL, _("Go to documents directory"),
+ G_CALLBACK (Browser_Load_Documents_Directory) },
+ { AM_LOAD_DOWNLOADS_DIR, "folder-download", _("Downloads Directory"),
+ NULL, _("Go to downloads directory"),
+ G_CALLBACK (Browser_Load_Downloads_Directory) },
+ { AM_LOAD_MUSIC_DIR, "folder-music", _("Music Directory"), NULL,
+ _("Go to music directory"),
+ G_CALLBACK (Browser_Load_Music_Directory) },
+ { AM_LOAD_PARENT_DIR, GTK_STOCK_GO_UP, _("_Parent Directory"),
+ "<Alt>Up", _("Go to parent directory"),
+ G_CALLBACK (et_browser_on_action_parent_directory) },
+ { AM_LOAD_DEFAULT_DIR, GTK_STOCK_JUMP_TO, _("_Default Directory"),
+ "<Primary>D", _("Go to default directory"),
+ G_CALLBACK (Browser_Load_Default_Directory) },
+ { AM_SET_PATH_AS_DEFAULT, GTK_STOCK_DIRECTORY, _("Set _Current Path as Default"), NULL,
_("Set current path as default"), G_CALLBACK(Set_Current_Path_As_Default) },
+ { AM_RENAME_DIR, GTK_STOCK_INDEX, _("Rename Directory…"), "F2",
_("Rename directory"), G_CALLBACK(Browser_Open_Rename_Directory_Window) },
+ { AM_RELOAD_DIRECTORY, GTK_STOCK_REFRESH, _("Reload Directory"),
+ "<Primary>R", _("Reload directory"),
+ G_CALLBACK (Browser_Reload_Directory) },
+ { AM_BROWSE_DIRECTORY_WITH, GTK_STOCK_EXECUTE,
+ _("Browse Directory With…"), NULL,
+ _("Run a command on the directory"),
+ G_CALLBACK (Browser_Open_Run_Program_Tree_Window) },
+ { AM_COLLAPSE_TREE, NULL, _("_Collapse Tree"), "<Primary><Shift>C",
+ _("Collapse directory tree"), G_CALLBACK (Browser_Tree_Collapse) },
+ { AM_INITIALIZE_TREE, GTK_STOCK_REFRESH, _("_Reload Tree"),
+ "<Primary><Shift>R", _("Reload directory tree"),
+ G_CALLBACK (Browser_Tree_Rebuild) },
+
+ { MENU_SCANNER, NULL, _("S_canner Mode"), NULL, NULL, NULL },
+
+ { MENU_MISC, NULL, _("_Miscellaneous"),
NULL, NULL, NULL },
+ { AM_SEARCH_FILE, GTK_STOCK_FIND, _("_Find…"), "<Primary>F",
+ _("Search filenames and tags"),
+ G_CALLBACK (Open_Search_File_Window) },
+ { AM_MB_SEARCH, GTK_STOCK_CDROM, _("MusicBrainz_ Search…"), "<Primary>B",
+ _("MusicBrainz search"), G_CALLBACK (et_open_musicbrainz_dialog) },
+ { AM_FILENAME_FROM_TXT, GTK_STOCK_OPEN,
+ _("Load Filenames From a Text File…"), "<Primary>T",
+ _("Load filenames from a text file"),
+ G_CALLBACK (Open_Load_Filename_Window) },
+ { AM_WRITE_PLAYLIST, GTK_STOCK_SAVE_AS, _("Generate Playlist…"),
+ "<Primary>W", _("Generate a playlist"),
+ G_CALLBACK (Open_Write_Playlist_Window) },
+ { AM_RUN_AUDIO_PLAYER, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"),
+ "<Primary>M", _("Run audio player"),
+ G_CALLBACK (Run_Audio_Player_Using_Selection) },
+
+ { MENU_EDIT, NULL, _("_Edit"), NULL, NULL, NULL },
+ { AM_OPEN_OPTIONS_WINDOW, GTK_STOCK_PREFERENCES, _("_Preferences"),
+ NULL, _("Preferences"), G_CALLBACK (Open_OptionsWindow) },
+
+ { MENU_VIEW, NULL, _("_View"), NULL, NULL, NULL },
+ { MENU_GO, NULL, _("_Go"), NULL, NULL, NULL },
+
+ { MENU_HELP, NULL, _("_Help"), NULL,
NULL, NULL },
+/* TODO: Link to help.gnome.org, or locally-installed help, on Windows. */
+#ifndef G_OS_WIN32
+ { AM_OPEN_HELP_CONTENTS, GTK_STOCK_HELP, _("_Contents"), "F1",
+ _("Show help"), G_CALLBACK (et_show_help) },
+#endif
+ { AM_OPEN_ABOUT_WINDOW, GTK_STOCK_ABOUT, _("_About"), NULL,
_("About"), G_CALLBACK(Show_About_Window) },
+
+
+ /*
+ * Following items are on toolbar but not on menu
+ */
+ { AM_STOP, GTK_STOCK_STOP, _("Stop the current action"), NULL, _("Stop the current action"),
G_CALLBACK(Action_Main_Stop_Button_Pressed) },
+
+
+ /*
+ * Popup menu's Actions
+ */
+ { POPUP_FILE, NULL, _("_File Operations"), NULL, NULL,
NULL },
+ { POPUP_SUBMENU_SCANNER, "document-properties", _("S_canner"), NULL,
NULL, NULL },
+ { POPUP_DIR_RUN_AUDIO, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"), NULL, _("Run
audio player"), G_CALLBACK(Run_Audio_Player_Using_Directory) },
+ { AM_ARTIST_RUN_AUDIO_PLAYER, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"), NULL, _("Run
audio player"), G_CALLBACK(Run_Audio_Player_Using_Browser_Artist_List) },
+ { AM_ALBUM_RUN_AUDIO_PLAYER, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"), NULL, _("Run
audio player"), G_CALLBACK(Run_Audio_Player_Using_Browser_Album_List) },
+ { AM_MB_SEARCH_FILE, GTK_STOCK_CDROM, _("MusicBrainz Search Files…"), NULL,
_("MusicBrainz search files…"), G_CALLBACK(Cddb_Popup_Menu_Search_Selected_File) },
+ //{ AM_ARTIST_OPEN_FILE_WITH, GTK_STOCK_OPEN, _("Open File(s) with…"), NULL, _("Open
File(s) with…"), G_CALLBACK(Browser_Open_Run_Program_List_Window???
Browser_Open_Run_Program_Tree_Window???) },
+ //{ AM_ALBUM_OPEN_FILE_WITH, GTK_STOCK_OPEN, _("Open File(s) with…"), NULL, _("Open
File(s) with…"), G_CALLBACK(Browser_Open_Run_Program_List_Window???
Browser_Open_Run_Program_Tree_Window???) },
+
+ { AM_LOG_CLEAN, GTK_STOCK_CLEAR, _("Clear log"), NULL, _("Clear
log"), G_CALLBACK(Log_Clean_Log_List) }
+
+ };
+
+ GtkToggleActionEntry ToggleActionEntries[] =
+ {
+ //{ AM_BROWSE_SUBDIR, GTK_STOCK_INDEX, _("Browse _Subdirectories"),
NULL, _("Browse _Sub-directories"), NULL, FALSE
},
+ { AM_BROWSE_SUBDIR, NULL, _("Browse _Subdirectories"),
NULL, _("Browse subdirectories"), NULL,
BROWSE_SUBDIR },
+#ifndef G_OS_WIN32 /* No sense here for Win32, "hidden" means : starts with a
+ * '.'
+ */
+ { AM_BROWSER_HIDDEN_DIR, NULL, _("Show Hidden Directories"),
NULL, _("Show hidden directories"), G_CALLBACK(Browser_Tree_Rebuild),
BROWSE_HIDDEN_DIR },
+#endif /* !G_OS_WIN32 */
+ { AM_SCANNER_SHOW, "document-properties", _("_Show Scanner"), NULL,
+ _("Show scanner"), G_CALLBACK (et_scan_show),
+ OPEN_SCANNER_WINDOW_ON_STARTUP },
+ };
+
+ GtkRadioActionEntry view_mode_entries[] =
+ {
+ { AM_TREE_VIEW_MODE, "audio-x-generic", _("Tree Browser"), NULL,
+ _("View by directory tree"), 0 },
+ { AM_ARTIST_VIEW_MODE, "easytag-artist-album",
+ _("Artist and Album"), NULL,
+ _("View by artist and album"), 1 }
+ };
+
+ GtkRadioActionEntry scanner_mode_entries[] =
+ {
+ { AM_SCANNER_FILL_TAG, "document-properties", _("_Fill Tags…"), NULL,
+ _("Fill tags"), SCANNER_FILL_TAG },
+ { AM_SCANNER_RENAME_FILE, "document-properties",
+ _("_Rename Files and Directories…"), NULL,
+ _("Rename files and directories"), SCANNER_RENAME_FILE },
+ { AM_SCANNER_PROCESS_FIELDS, "document-properties",
+ _("_Process Fields…"), NULL, _("Process Fields"),
+ SCANNER_PROCESS_FIELDS }
+ };
+
+ GError *error = NULL;
+ guint num_menu_entries;
+ guint num_toggle_entries;
+ guint n_view_mode_entries;
+ guint n_scanner_mode_entries;
+ guint i;
+
+ /* Calculate number of items into the menu */
+ num_menu_entries = G_N_ELEMENTS(ActionEntries);
+ num_toggle_entries = G_N_ELEMENTS(ToggleActionEntries);
+ n_view_mode_entries = G_N_ELEMENTS (view_mode_entries);
+ n_scanner_mode_entries = G_N_ELEMENTS (scanner_mode_entries);
+
+ /* Populate quarks list with the entries */
+ for(i = 0; i < num_menu_entries; i++)
+ {
+ Action_Pair* ActionPair = g_malloc0(sizeof(Action_Pair));
+ ActionPair->action = ActionEntries[i].name;
+ ActionPair->quark = g_quark_from_string(ActionPair->action);
+ ActionPairsList = g_list_prepend (ActionPairsList, ActionPair);
+ }
+
+ for(i = 0; i < num_toggle_entries; i++)
+ {
+ Action_Pair* ActionPair = g_malloc0(sizeof(Action_Pair));
+ ActionPair->action = ToggleActionEntries[i].name;
+ ActionPair->quark = g_quark_from_string(ActionPair->action);
+ ActionPairsList = g_list_prepend (ActionPairsList, ActionPair);
+ }
+
+ ActionPairsList = g_list_reverse (ActionPairsList);
+
+ /* UI Management */
+ ActionGroup = gtk_action_group_new("actions");
+ gtk_action_group_set_translation_domain (ActionGroup, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(ActionGroup, ActionEntries, num_menu_entries, NULL);
+ gtk_action_group_add_toggle_actions(ActionGroup, ToggleActionEntries, num_toggle_entries, NULL);
+ gtk_action_group_add_radio_actions (ActionGroup, view_mode_entries,
+ n_view_mode_entries, 0,
+ Action_Select_Browser_Style, NULL);
+ gtk_action_group_add_radio_actions (ActionGroup, scanner_mode_entries,
+ n_scanner_mode_entries, 0,
+ G_CALLBACK (et_on_action_select_scan_mode),
+ NULL);
+
+ UIManager = gtk_ui_manager_new();
+
+ g_signal_connect (UIManager, "connect-proxy",
+ G_CALLBACK (et_ui_manager_on_connect_proxy), NULL);
+ g_signal_connect (UIManager, "disconnect-proxy",
+ G_CALLBACK (et_ui_manager_on_disconnect_proxy), NULL);
+
+ if (!gtk_ui_manager_add_ui_from_string(UIManager, ui_xml, -1, &error))
+ {
+ g_error(_("Could not merge UI, error was: %s\n"), error->message);
+ g_error_free(error);
+ }
+ gtk_ui_manager_insert_action_group(UIManager, ActionGroup, 0);
+ gtk_window_add_accel_group(GTK_WINDOW(MainWindow), gtk_ui_manager_get_accel_group(UIManager));
+
+ menubar = gtk_ui_manager_get_widget(UIManager, "/MenuBar");
+ Init_Menu_Bar();
+ gtk_widget_show_all(menubar);
+
+ toolbar = gtk_ui_manager_get_widget (UIManager, "/ToolBar");
+ gtk_widget_show_all(toolbar);
+ gtk_style_context_add_class (gtk_widget_get_style_context (toolbar),
+ GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+
+ *pptoolbar = toolbar;
+ *ppmenubar = menubar;
+}
+
+
+/*
+ * Initialize some items of the main menu
+ */
+static void
+Init_Menu_Bar (void)
+{
+
+ CheckMenuItemBrowseSubdirMainMenu = gtk_ui_manager_get_widget(UIManager,
"/MenuBar/BrowserMenu/BrowseSubdir");
+ if (CheckMenuItemBrowseSubdirMainMenu)
+ {
+ // Link to update BROWSE_SUBDIR when changed
+ g_signal_connect(G_OBJECT(CheckMenuItemBrowseSubdirMainMenu),"toggled",
+ G_CALLBACK(Check_Menu_Item_Toggled_Browse_Subdir),NULL);
+ }
+
+ CheckMenuItemBrowseHiddenDirMainMenu = gtk_ui_manager_get_widget (UIManager,
+ "/MenuBar/ViewMenu/BrowseHiddenDir");
+ if (CheckMenuItemBrowseHiddenDirMainMenu)
+ {
+ // Link to update BROWSE_HIDDEN_DIR when changed
+ g_signal_connect(G_OBJECT(CheckMenuItemBrowseHiddenDirMainMenu),"toggled",
+ G_CALLBACK(Check_Menu_Item_Toggled_Browse_Hidden_Dir),NULL);
+ }
+
+ /* If entry not implemented */
+ //{GtkWidget *widget = gtk_item_factory_get_widget_by_action(ItemFactory,FILENAME_FROM_TXT);
+ //if (widget) gtk_widget_set_sensitive(widget,FALSE);}
+}
+
+/*
+ * Callback to update state of check button to browse subdir into menu
+ */
+static void
+Check_Menu_Item_Toggled_Browse_Subdir (GtkWidget *checkmenuitem)
+{
+ BROWSE_SUBDIR = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkmenuitem));
+ Check_Menu_Item_Update_Browse_Subdir();
+}
+void Check_Menu_Item_Update_Browse_Subdir (void)
+{
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(CheckMenuItemBrowseSubdirMainMenu),BROWSE_SUBDIR);
+}
+
+/*
+ * Callback to update state of check button to show hiddendirectories into menu
+ */
+static void
+Check_Menu_Item_Toggled_Browse_Hidden_Dir (GtkWidget *checkmenuitem)
+{
+ BROWSE_HIDDEN_DIR = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkmenuitem));
+ Check_Menu_Item_Update_Browse_Hidden_Dir();
+
+ // Reload directory, in case we have changed BROWSE_HIDDEN_DIR
+ //Browser_Tree_Rebuild(NULL); // Commented, as already done in GtkToggleActionEntry for
AM_BROWSER_HIDDEN_DIR
+}
+
+void
+Check_Menu_Item_Update_Browse_Hidden_Dir (void)
+{
+#ifndef G_OS_WIN32
+
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(CheckMenuItemBrowseHiddenDirMainMenu),BROWSE_HIDDEN_DIR);
+#endif /* !G_OS_WIN32 */
+}
+
+
+
+
+
+
+
+
+
+/*
+ * Status bar functions
+ */
+GtkWidget *Create_Status_Bar (void)
+{
+ StatusBar = gtk_statusbar_new();
+ /* Specify a size to avoid statubar resizing if the message is too long */
+ gtk_widget_set_size_request(StatusBar, 200, -1);
+ /* Create serie */
+ StatusBarContext = gtk_statusbar_get_context_id(GTK_STATUSBAR(StatusBar),"Messages");
+ timer_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (StatusBar),
+ "timer");
+ tooltip_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (StatusBar),
+ "tooltip");
+
+ Statusbar_Message (_("Ready to start"), TRUE);
+
+ gtk_widget_show(StatusBar);
+ return StatusBar;
+}
+
+static gboolean
+Statusbar_Stop_Timer (void)
+{
+ gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), timer_cid);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+et_statusbar_reset_timer (void)
+{
+ StatusbarTimerId = 0;
+}
+
+static void
+Statusbar_Start_Timer (void)
+{
+ Statusbar_Remove_Timer ();
+ StatusbarTimerId = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, 4,
+ (GSourceFunc)Statusbar_Stop_Timer,
+ NULL,
+ (GDestroyNotify)et_statusbar_reset_timer);
+ g_source_set_name_by_id (StatusbarTimerId, "Statusbar stop timer");
+}
+
+static void
+Statusbar_Remove_Timer (void)
+{
+ if (StatusbarTimerId)
+ {
+ Statusbar_Stop_Timer ();
+ g_source_remove(StatusbarTimerId);
+ et_statusbar_reset_timer ();
+ }
+}
+
+/*
+ * Send a message to the status bar
+ * - with_timer: if TRUE, the message will be displayed during 4s
+ * if FALSE, the message will be displayed up to the next posted message
+ */
+void
+Statusbar_Message (const gchar *message, gboolean with_timer)
+{
+ gchar *msg_temp;
+
+ g_return_if_fail (StatusBar != NULL);
+
+ msg_temp = Try_To_Validate_Utf8_String(message);
+
+ /* Push the given message */
+ if (with_timer)
+ {
+ Statusbar_Start_Timer ();
+ gtk_statusbar_push (GTK_STATUSBAR (StatusBar), timer_cid, msg_temp);
+ }
+ else
+ {
+ gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), StatusBarContext);
+ gtk_statusbar_push (GTK_STATUSBAR (StatusBar), StatusBarContext,
+ msg_temp);
+ }
+
+ g_free(msg_temp);
+}
+
+/*
+ * et_statusbar_push_tooltip:
+ * @message: a tooltip to display in the status bar
+ *
+ * Display a tooltip in the status bar of the main window. Call
+ * et_statusbar_pop_tooltip() to stop displaying the tooltip message.
+ */
+static void
+et_statusbar_push_tooltip (const gchar *message)
+{
+ g_return_if_fail (StatusBar != NULL && message != NULL);
+
+ gtk_statusbar_push (GTK_STATUSBAR (StatusBar), tooltip_cid, message);
+}
+
+/*
+ * et_statusbar_pop_tooltip:
+ *
+ * Pop a tooltip message from the status bar. et_statusbar_push_tooltip() must
+ * have been called first.
+ */
+static void
+et_statusbar_pop_tooltip (void)
+{
+ g_return_if_fail (StatusBar != NULL);
+
+ gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), tooltip_cid);
+}
+
+
+
+
+/*
+ * Progress bar
+ */
+GtkWidget *Create_Progress_Bar (void)
+{
+ ProgressBar = et_progress_bar_new ();
+
+ gtk_widget_show(ProgressBar);
+ return ProgressBar;
+}
+
+/*
+ * et_ui_manager_on_connect_proxy:
+ * @manager: the UI manager which generated the signal
+ * @action: the action which was connected to @proxy
+ * @proxy: the widget which was connected to @action
+ * @user_data: user data set when the signal was connected
+ *
+ * Connect handlers for selection and deselection of menu items, in order to
+ * set tooltips for the menu items as status bar messages.
+ */
+static void
+et_ui_manager_on_connect_proxy (GtkUIManager *manager, GtkAction *action,
+ GtkWidget *proxy, gpointer user_data)
+{
+ if (GTK_IS_MENU_ITEM (proxy))
+ {
+ guint id;
+
+ id = g_signal_connect (proxy, "select",
+ G_CALLBACK (on_menu_item_select), action);
+ g_object_set_data (G_OBJECT (proxy), "select-id",
+ GUINT_TO_POINTER (id));
+ id = g_signal_connect (proxy, "deselect",
+ G_CALLBACK (on_menu_item_deselect), NULL);
+ g_object_set_data (G_OBJECT (proxy), "deselect-id",
+ GUINT_TO_POINTER (id));
+ }
+}
+
+/*
+ * et_ui_manager_on_disconnect_proxy:
+ * @manager: the UI manager which generated the signal
+ * @action: the action which was connected to @proxy
+ * @proxy: the widget which was connected to @action
+ * @user_data: user data set when the signal was connected
+ *
+ * Disconnect handlers for selecting and deselecting menu items.
+ */
+static void
+et_ui_manager_on_disconnect_proxy (GtkUIManager *manager, GtkAction *action,
+ GtkWidget *proxy, gpointer user_data)
+{
+ if (GTK_IS_MENU_ITEM (proxy))
+ {
+ guint id;
+
+ id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (proxy),
+ "select-id"));
+ g_signal_handler_disconnect (proxy, id);
+ id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (proxy),
+ "deselect-id"));
+ g_signal_handler_disconnect (proxy, id);
+ }
+}
+
+/*
+ * on_menu_item_select:
+ * @item: the menu item which was selected
+ * @user_data: the #GtkAction corresponding to @item
+ *
+ * Set the current status bar message to the tooltip of the menu @item which
+ * was selected.
+ */
+static void
+on_menu_item_select (GtkMenuItem *item, gpointer user_data)
+{
+ GtkAction *action;
+ const gchar *message;
+
+ g_return_if_fail (user_data != NULL);
+
+ action = GTK_ACTION (user_data);
+ message = gtk_action_get_tooltip (action);
+
+ if (message)
+ {
+ et_statusbar_push_tooltip (message);
+ }
+}
+
+/*
+ * on_menu_item_deselect:
+ * @item: the menu item which was deselected
+ * @user_data: user data set when the signal was connected
+ *
+ * Clear the current tooltip status bar message when the menu item is
+ * deselected.
+ */
+static void
+on_menu_item_deselect (GtkMenuItem *item, gpointer user_data)
+{
+ et_statusbar_pop_tooltip ();
+}
diff --git a/src/bar.h b/src/bar.h
new file mode 100644
index 0000000..cbfca35
--- /dev/null
+++ b/src/bar.h
@@ -0,0 +1,174 @@
+/* bar.h - 2000/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2003 Jerome Couderc <easytag gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __BAR_H__
+#define __BAR_H__
+
+/***************
+ * Declaration *
+ ***************/
+GtkWidget *MenuBar;
+GtkWidget *ProgressBar;
+GtkUIManager *UIManager;
+GtkActionGroup *ActionGroup;
+
+GtkWidget *CheckMenuItemBrowseSubdirMainMenu;
+GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
+
+#define MENU_FILE "FileMenu"
+#define MENU_EDIT "EditMenu"
+#define MENU_VIEW "ViewMenu"
+#define MENU_GO "GoMenu"
+#define MENU_BROWSER "BrowserMenu"
+#define MENU_SCANNER "ScannerMenu"
+#define MENU_MISC "MiscMenu"
+#define MENU_HELP "HelpMenu"
+
+#define MENU_FILE_SORT_TAG "SortTagMenu"
+#define MENU_FILE_SORT_PROP "SortPropMenu"
+#define MENU_SORT_TAG_PATH "ViewMenu/SortTagMenu"
+#define MENU_SORT_PROP_PATH "ViewMenu/SortPropMenu"
+
+#define MENU_SCANNER_PATH MENU_VIEW "/" MENU_SCANNER
+#define POPUP_FILE "FilePopup"
+#define POPUP_DIR "DirPopup"
+#define POPUP_SUBMENU_SCANNER "ScannerSubpopup"
+#define POPUP_DIR_RUN_AUDIO "DirPopupRunAudio"
+#define POPUP_LOG "LogPopup"
+
+#define AM_PREV "PreviousFile"
+#define AM_NEXT "NextFile"
+#define AM_FIRST "FirstFile"
+#define AM_LAST "LastFile"
+#define AM_SCAN_FILES "ScanFiles"
+#define AM_REMOVE "RemoveTag"
+#define AM_UNDO "UndoFile"
+#define AM_REDO "RedoFile"
+#define AM_UNDO_HISTORY "Undo"
+#define AM_REDO_HISTORY "Redo"
+#define AM_SAVE "SaveFile"
+#define AM_SAVE_FORCED "SaveFileForced"
+#define AM_SELECT_ALL "SelAll"
+#define AM_UNSELECT_ALL "UnselAll"
+#define AM_INVERT_SELECTION "SelInv"
+#define AM_DELETE_FILE "DeleteFile"
+#define AM_LOAD_HOME_DIR "GoToHome"
+#define AM_LOAD_DESKTOP_DIR "GoToDesktop"
+#define AM_LOAD_DOCUMENTS_DIR "GoToDocument"
+#define AM_LOAD_DOWNLOADS_DIR "GoToDownload"
+#define AM_LOAD_MUSIC_DIR "GoToMusic"
+#define AM_LOAD_PARENT_DIR "GoToParent"
+#define AM_LOAD_DEFAULT_DIR "GoToDefaultPath"
+#define AM_SET_PATH_AS_DEFAULT "SetDefaultPath"
+#define AM_RENAME_DIR "RenameDir"
+#define AM_BROWSE_SUBDIR "BrowseSubdir"
+#define AM_BROWSER_HIDDEN_DIR "BrowseHiddenDir"
+#define AM_COLLAPSE_TREE "CollapseTree"
+#define AM_INITIALIZE_TREE "RefreshTree"
+#define AM_RELOAD_DIRECTORY "ReloadDir"
+#define AM_TREE_VIEW_MODE "TreeViewMode"
+#define AM_ARTIST_VIEW_MODE "ArtistViewMode"
+#define AM_BROWSE_DIRECTORY_WITH "BrowseDir"
+#define AM_OPEN_FILE_WITH "OpenFile"
+#define AM_OPEN_OPTIONS_WINDOW "Preferences"
+#define AM_SCANNER_FILL_TAG "FillTag"
+#define AM_SCANNER_RENAME_FILE "RenameFile"
+#define AM_SCANNER_PROCESS_FIELDS "ProcessFields"
+#define AM_SCANNER_SHOW "ShowScanner"
+#define AM_SEARCH_FILE "SearchFile"
+#define AM_MB_SEARCH_FILE "MBSearchFile"
+#define AM_MB_SEARCH "MBSearch"
+#define AM_FILENAME_FROM_TXT "LoadFilenames"
+#define AM_WRITE_PLAYLIST "WritePlaylist"
+#define AM_RUN_AUDIO_PLAYER "RunAudio"
+#define AM_OPEN_ABOUT_WINDOW "About"
+#define AM_OPEN_HELP_CONTENTS "HelpContents"
+#define AM_QUIT "Quit"
+
+#define AM_ARTIST_RUN_AUDIO_PLAYER "ArtistRunAudio"
+#define AM_ARTIST_OPEN_FILE_WITH "ArtistOpenFile"
+#define AM_ALBUM_RUN_AUDIO_PLAYER "AlbumRunAudio"
+#define AM_ALBUM_OPEN_FILE_WITH "AlbumOpenFile"
+
+#define AM_LOG_CLEAN "CleanLog"
+
+#define AM_STOP "Stop"
+
+#define AM_SORT_ASCENDING_FILENAME "SortFilenameAsc"
+#define AM_SORT_DESCENDING_FILENAME "SortFilenameDesc"
+#define AM_SORT_ASCENDING_CREATION_DATE "SortDateAsc"
+#define AM_SORT_DESCENDING_CREATION_DATE "SortDateDesc"
+#define AM_SORT_ASCENDING_TRACK_NUMBER "SortTrackNumAsc"
+#define AM_SORT_DESCENDING_TRACK_NUMBER "SortTrackNumDesc"
+#define AM_SORT_ASCENDING_TITLE "SortTitleAsc"
+#define AM_SORT_DESCENDING_TITLE "SortTitleDesc"
+#define AM_SORT_ASCENDING_ARTIST "SortArtistAsc"
+#define AM_SORT_DESCENDING_ARTIST "SortArtistDesc"
+#define AM_SORT_ASCENDING_ALBUM_ARTIST "SortAlbumArtistAsc"
+#define AM_SORT_DESCENDING_ALBUM_ARTIST "SortAlbumArtistDesc"
+#define AM_SORT_ASCENDING_ALBUM "SortAlbumAsc"
+#define AM_SORT_DESCENDING_ALBUM "SortAlbumDesc"
+#define AM_SORT_ASCENDING_YEAR "SortYearAsc"
+#define AM_SORT_DESCENDING_YEAR "SortYearDesc"
+#define AM_SORT_ASCENDING_GENRE "SortGenreAsc"
+#define AM_SORT_DESCENDING_GENRE "SortGenreDesc"
+#define AM_SORT_ASCENDING_COMMENT "SortCommentAsc"
+#define AM_SORT_DESCENDING_COMMENT "SortCommentDesc"
+#define AM_SORT_ASCENDING_COMPOSER "SortComposerAsc"
+#define AM_SORT_DESCENDING_COMPOSER "SortComposerDesc"
+#define AM_SORT_ASCENDING_ORIG_ARTIST "SortOrigArtistAsc"
+#define AM_SORT_DESCENDING_ORIG_ARTIST "SortOrigArtistDesc"
+#define AM_SORT_ASCENDING_COPYRIGHT "SortCopyrightAsc"
+#define AM_SORT_DESCENDING_COPYRIGHT "SortCopyrightDesc"
+#define AM_SORT_ASCENDING_URL "SortUrlAsc"
+#define AM_SORT_DESCENDING_URL "SortUrlDesc"
+#define AM_SORT_ASCENDING_ENCODED_BY "SortEncodedByAsc"
+#define AM_SORT_DESCENDING_ENCODED_BY "SortEncodedByDesc"
+#define AM_SORT_ASCENDING_FILE_TYPE "SortTypeAsc"
+#define AM_SORT_DESCENDING_FILE_TYPE "SortTypeDesc"
+#define AM_SORT_ASCENDING_FILE_SIZE "SortSizeAsc"
+#define AM_SORT_DESCENDING_FILE_SIZE "SortSizeDesc"
+#define AM_SORT_ASCENDING_FILE_DURATION "SortDurationAsc"
+#define AM_SORT_DESCENDING_FILE_DURATION "SortDurationDesc"
+#define AM_SORT_ASCENDING_FILE_BITRATE "SortBitrateAsc"
+#define AM_SORT_DESCENDING_FILE_BITRATE "SortBitrateDesc"
+#define AM_SORT_ASCENDING_FILE_SAMPLERATE "SortSamplerateAsc"
+#define AM_SORT_DESCENDING_FILE_SAMPLERATE "SortSamplerateDesc"
+
+typedef struct _Action_Pair Action_Pair;
+struct _Action_Pair {
+ const gchar *action;
+ GQuark quark;
+};
+
+/**************
+ * Prototypes *
+ **************/
+
+void Create_UI (GtkWidget **menubar, GtkWidget **toolbar);
+GtkWidget *Create_Status_Bar (void);
+void Statusbar_Message (const gchar *message, gboolean with_timer);
+GtkWidget *Create_Progress_Bar (void);
+
+void Check_Menu_Item_Update_Browse_Subdir (void);
+void Check_Menu_Item_Update_Browse_Hidden_Dir (void);
+
+#endif /* __BAR_H__ */
diff --git a/src/mbentityview.c b/src/mbentityview.c
new file mode 100644
index 0000000..f792a00
--- /dev/null
+++ b/src/mbentityview.c
@@ -0,0 +1,142 @@
+/* mbentityview.c - 2014/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2014 Abhinav Jangda <abhijangda hotmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "mbentityview.h"
+
+#define ET_MB_ENTITY_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
+ ET_MB_ENTITY_VIEW_TYPE, \
+ EtMbEntityViewPrivate))
+
+/***************
+ * Declaration *
+ ***************/
+
+/*
+ * EtMbEntityViewPrivate:
+ * @breadCrumbBox: GtkToolbar which represents the BreadCrumbWidget
+ * @treeView: GtkTreeView to display the recieved music brainz data
+ * @listStore: GtkListStore for treeView
+ * @scrolledWindow: GtkScrolledWindow for treeView
+ *
+ * Private data for EtMbEntityView.
+ */
+typedef struct
+{
+ GtkWidget *breadCrumbBox;
+ GtkWidget *treeView;
+ GtkListStore *listStore;
+ GtkWidget *scrolledWindow;
+} EtMbEntityViewPrivate;
+
+/**************
+ * Prototypes *
+ **************/
+
+static void
+et_mb_entity_view_class_init (EtMbEntityViewClass *klass);
+
+static void
+et_mb_entity_view_init (EtMbEntityView *proj_notebook);
+
+/*************
+ * Functions *
+ *************/
+
+/*
+ * et_mb_entity_view_get_type
+ *
+ * Returns: A GType, type of EtMbEntityView.
+ */
+GType
+et_mb_entity_view_get_type (void)
+{
+ static GType et_mb_entity_view_type = 0;
+
+ if (!et_mb_entity_view_type)
+ {
+ static const GTypeInfo et_mb_entity_view_type_info =
+ {
+ sizeof (EtMbEntityViewClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) et_mb_entity_view_class_init,
+ NULL,
+ NULL,
+ sizeof (EtMbEntityView),
+ 0,
+ (GInstanceInitFunc) et_mb_entity_view_init,
+ };
+ et_mb_entity_view_type = g_type_register_static (GTK_TYPE_BOX,
+ "EtMbEntityView",
+ &et_mb_entity_view_type_info,
+ 0);
+ }
+ return et_mb_entity_view_type;
+}
+
+/*
+ * et_mb_entity_view_class_init:
+ * klass: EtMbEntityViewClass to initialize.
+ *
+ * Initializes an EtMbEntityViewClass class.
+ */
+static void
+et_mb_entity_view_class_init (EtMbEntityViewClass *klass)
+{
+ g_type_class_add_private (klass, sizeof (EtMbEntityViewPrivate));
+}
+
+/*
+ * et_mb_entity_view_init:
+ * @entity_view: EtMbEntityView to initialize.
+ *
+ * Initializes an EtMbEntityView.
+ */
+static void
+et_mb_entity_view_init (EtMbEntityView *entity_view)
+{
+ EtMbEntityViewPrivate *priv = ET_MB_ENTITY_VIEW_GET_PRIVATE (entity_view);
+
+ /* Adding child widgets */
+ priv->breadCrumbBox = gtk_toolbar_new ();
+ priv->listStore = gtk_list_store_new (0);
+ priv->treeView = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->listStore));
+ priv->scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (priv->scrolledWindow), priv->treeView);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolledWindow),
+ GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
+ gtk_box_pack_start (GTK_BOX (entity_view), priv->breadCrumbBox,
+ FALSE, FALSE, 2);
+ gtk_box_pack_start (GTK_BOX (entity_view), priv->scrolledWindow,
+ TRUE, TRUE, 2);
+}
+
+/*
+ * et_mb_entity_view_new:
+ *
+ * Creates a new EtMbEntityView.
+ *
+ * Returns: GtkWidget, a new EtMbEntityView.
+ */
+GtkWidget *
+et_mb_entity_view_new ()
+{
+ return GTK_WIDGET (g_object_new (et_mb_entity_view_get_type (), NULL));
+}
\ No newline at end of file
diff --git a/src/mbentityview.h b/src/mbentityview.h
new file mode 100644
index 0000000..7eb5f9d
--- /dev/null
+++ b/src/mbentityview.h
@@ -0,0 +1,76 @@
+/* mbentityview.h - 2014/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2014 Abhinav Jangda <abhijangda hotmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __MB_ENTITY_VIEW_H__
+#define __MB_ENTITY_VIEW_H__
+
+#include <gtk/gtk.h>
+
+#define ET_MB_ENTITY_VIEW_TYPE (et_mb_entity_view_get_type ())
+#define ET_MB_ENTITY_VIEW (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ ET_MB_ENTITY_VIEW_TYPE, \
+ EtMbEntityView))
+
+#define ET_MB_ENTITY_VIEW_CLASS (klass) (G_TYPE_CHECK_INSTANCE_CAST ((klass), \
+ ET_MB_ENTITY_VIEW_TYPE, \
+ EtMbEntityView))
+
+#define IS_ET_MB_ENTITY_VIEW (obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ ET_MB_ENTITY_VIEW_TYPE))
+
+#define IS_ET_MB_ENTITY_VIEW_CLASS (klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ ET_MB_ENTITY_VIEW_TYPE))
+
+/***************
+ * Declaration *
+ ***************/
+
+/*
+ * EtMbEntityView:
+ * @vbox: GtkBox, parent class of EtMbEntityView
+ *
+ * This widget is used to show data recieved from music brainz and helps to
+ * navigate in it using breadcrumb widget.
+ */
+typedef struct
+{
+ GtkBox vbox;
+} EtMbEntityView;
+
+/*
+ * EtMbEntityViewClass:
+ * @parent: GtkBoxClass, parent class of EtMbEntityViewClass
+ *
+ * Class of EtMbEntityView.
+ */
+typedef struct
+{
+ GtkBoxClass parent;
+} EtMbEntityViewClass;
+
+/**************
+ * Prototypes *
+ **************/
+
+GType
+et_mb_entity_view_get_type (void) G_GNUC_CONST;
+GtkWidget *
+et_mb_entity_view_new (void);
+#endif /* __MB_ENTITY_VIEW_H__ */
\ No newline at end of file
diff --git a/src/musicbrainz_dialog.c b/src/musicbrainz_dialog.c
new file mode 100644
index 0000000..1667b51
--- /dev/null
+++ b/src/musicbrainz_dialog.c
@@ -0,0 +1,81 @@
+/* musicbrainz_dialog.c - 2014/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2014 Abhinav Jangda <abhijangda hotmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+
+#include "gtk2_compat.h"
+#include "cddb.h"
+#include "easytag.h"
+#include "et_core.h"
+#include "browser.h"
+#include "scan_dialog.h"
+#include "log.h"
+#include "misc.h"
+#include "setting.h"
+#include "id3_tag.h"
+#include "setting.h"
+#include "charset.h"
+#include "musicbrainz_dialog.h"
+#include "mbentityview.h"
+
+/***************
+ * Declaration *
+ ***************/
+
+static GtkBuilder *builder;
+static GtkWidget *mbDialog;
+static GtkWidget *entityView;
+
+/*************
+ * Functions *
+ *************/
+
+/*
+ * et_open_musicbrainz_dialog:
+ *
+ * This function will open the musicbrainz dialog.
+ */
+void
+et_open_musicbrainz_dialog ()
+{
+ entityView = et_mb_entity_view_new ();
+ builder = gtk_builder_new ();
+ /* TODO: Check the error. */
+ gtk_builder_add_from_resource (builder,
+ "/org/gnome/EasyTAG/musicbrainz_dialog.ui",
+ NULL);
+
+ mbDialog = GTK_WIDGET (gtk_builder_get_object (builder, "mbDialog"));
+
+ gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "centralBox")),
+ entityView, TRUE, TRUE, 2);
+ /* FIXME: This should not be needed. */
+ gtk_box_reorder_child (GTK_BOX (gtk_builder_get_object (builder, "centralBox")),
+ entityView, 0);
+
+ gtk_widget_show_all (mbDialog);
+ gtk_dialog_run (GTK_DIALOG (mbDialog));
+ gtk_widget_destroy (mbDialog);
+ g_object_unref (G_OBJECT (builder));
+}
diff --git a/src/musicbrainz_dialog.h b/src/musicbrainz_dialog.h
new file mode 100644
index 0000000..32e5cad
--- /dev/null
+++ b/src/musicbrainz_dialog.h
@@ -0,0 +1,31 @@
+/* musicbrainz_dialog.h - 2014/05/05 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2014 Abhinav Jangda <abhijangda hotmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __MUSICBRAINZ_DIALOG_H__
+#define __MUSICBRAINZ_DIALOG_H__
+
+/**************
+ * Prototypes *
+ **************/
+
+void
+et_open_musicbrainz_dialog (void);
+
+#endif /* __MUSICBRAINZ_DIALOG_H__ */
diff --git a/src/ui_manager.h b/src/ui_manager.h
new file mode 100644
index 0000000..a976ffe
--- /dev/null
+++ b/src/ui_manager.h
@@ -0,0 +1,352 @@
+/*
+ * - bar.h : defines constant associated to the action "<menuitem action="
+ * - bar.c : Create_UI() does the actions
+ */
+
+static const gchar *ui_xml =
+"<ui>"
+
+/*
+ * Menu bar
+ */
+" <menubar name='MenuBar'>"
+" <menu action='FileMenu'>"
+
+" <menuitem action='OpenFile' />"
+" <menuitem action='RunAudio' />"
+" <separator />"
+
+" <menuitem action='SelInv' />"
+" <separator />"
+
+" <menuitem action='DeleteFile' />"
+" <separator />"
+
+" <menuitem action='UndoFile' />"
+" <menuitem action='RedoFile' />"
+" <menuitem action='SaveFile' />"
+" <menuitem action='SaveFileForced' />"
+" <separator />"
+
+" <menuitem action='Quit' />"
+" </menu>"
+
+
+" <menu action='EditMenu'>"
+" <menuitem action='SearchFile' />"
+" <menuitem action='SelAll' />"
+" <menuitem action='UnselAll' />"
+" <separator />"
+
+" <menuitem action='Undo' />"
+" <menuitem action='Redo' />"
+" <separator />"
+
+" <menuitem action='RemoveTag' />"
+" <separator />"
+
+" <menuitem action='Preferences' />"
+" </menu>"
+
+" <menu action='ViewMenu'>"
+" <menuitem action='ShowScanner' />"
+" <menu action='ScannerMenu'>"
+" <menuitem action='FillTag' />"
+" <menuitem action='RenameFile' />"
+" <menuitem action='ProcessFields' />"
+" </menu>"
+" <separator />"
+
+" <menuitem action='TreeViewMode'/>"
+" <menuitem action='ArtistViewMode'/>"
+" <separator />"
+
+" <menu action='SortTagMenu'>"
+" <menuitem action='SortTrackNumAsc' />"
+" <menuitem action='SortTrackNumDesc' />"
+" <separator />"
+" <menuitem action='SortTitleAsc' />"
+" <menuitem action='SortTitleDesc' />"
+" <separator />"
+" <menuitem action='SortArtistAsc' />"
+" <menuitem action='SortArtistDesc' />"
+" <separator />"
+" <menuitem action='SortAlbumArtistAsc' />"
+" <menuitem action='SortAlbumArtistDesc' />"
+" <separator />"
+" <menuitem action='SortAlbumAsc' />"
+" <menuitem action='SortAlbumDesc' />"
+" <separator />"
+" <menuitem action='SortYearAsc' />"
+" <menuitem action='SortYearDesc' />"
+" <separator />"
+" <menuitem action='SortYearAsc' />"
+" <menuitem action='SortYearDesc' />"
+" <separator />"
+" <menuitem action='SortGenreAsc' />"
+" <menuitem action='SortGenreDesc' />"
+" <separator />"
+" <menuitem action='SortCommentAsc' />"
+" <menuitem action='SortCommentDesc' />"
+" <separator />"
+" <menuitem action='SortComposerAsc' />"
+" <menuitem action='SortComposerDesc' />"
+" <separator />"
+" <menuitem action='SortOrigArtistAsc' />"
+" <menuitem action='SortOrigArtistDesc' />"
+" <separator />"
+" <menuitem action='SortCopyrightAsc' />"
+" <menuitem action='SortCopyrightDesc' />"
+" <separator />"
+" <menuitem action='SortUrlAsc' />"
+" <menuitem action='SortUrlDesc' />"
+" <separator />"
+" <menuitem action='SortEncodedByAsc' />"
+" <menuitem action='SortEncodedByDesc' />"
+" </menu>"
+
+" <menu action='SortPropMenu'>"
+" <menuitem action='SortFilenameAsc' />"
+" <menuitem action='SortFilenameDesc' />"
+" <separator />"
+" <menuitem action='SortDateAsc' />"
+" <menuitem action='SortDateDesc' />"
+" <separator />"
+" <menuitem action='SortTypeAsc' />"
+" <menuitem action='SortTypeDesc' />"
+" <separator />"
+" <menuitem action='SortSizeAsc' />"
+" <menuitem action='SortSizeDesc' />"
+" <separator />"
+" <menuitem action='SortDurationAsc' />"
+" <menuitem action='SortDurationDesc' />"
+" <separator />"
+" <menuitem action='SortBitrateAsc' />"
+" <menuitem action='SortBitrateDesc' />"
+" <separator />"
+" <menuitem action='SortSamplerateAsc' />"
+" <menuitem action='SortSamplerateDesc' />"
+" </menu>"
+" <separator />"
+
+" <menuitem action='CollapseTree' />"
+" <menuitem action='RefreshTree' />"
+" <separator />"
+
+" <menuitem action='ReloadDir' />"
+" <separator />"
+
+#ifndef G_OS_WIN32
+" <menuitem action='BrowseHiddenDir' />"
+#endif /* !G_OS_WIN32 */
+" </menu>"
+
+" <menu action='BrowserMenu'>"
+" <menuitem action='SetDefaultPath' />"
+" <separator />"
+
+" <menuitem action='RenameDir' />"
+" <menuitem action='BrowseDir' />"
+" <separator />"
+
+" <menuitem action='BrowseSubdir' />"
+" </menu>"
+
+" <menu action='MiscMenu'>"
+" <menuitem action='MBSearch' />"
+" <separator />"
+
+" <menuitem action='LoadFilenames' />"
+" <menuitem action='WritePlaylist' />"
+" </menu>"
+
+" <menu action='GoMenu'>"
+" <menuitem action='GoToHome' />"
+" <menuitem action='GoToDesktop' />"
+" <menuitem action='GoToDocument' />"
+" <menuitem action='GoToDownload' />"
+" <menuitem action='GoToMusic' />"
+" <menuitem action='GoToParent' />"
+" <menuitem action='GoToDefaultPath' />"
+" <separator />"
+
+" <menuitem action='FirstFile' />"
+" <menuitem action='PreviousFile' />"
+" <menuitem action='NextFile' />"
+" <menuitem action='LastFile' />"
+" </menu>"
+
+" <menu action='HelpMenu'>"
+#ifndef G_OS_WIN32
+" <menuitem action='HelpContents' />"
+#endif /* !G_OS_WIN32 */
+" <menuitem action='About' />"
+" </menu>"
+
+" </menubar>"
+
+
+/*
+ * Tool bar
+ */
+" <toolbar name='ToolBar'>"
+" <toolitem action='FirstFile'/>"
+" <toolitem action='PreviousFile'/>"
+" <toolitem action='NextFile'/>"
+" <toolitem action='LastFile'/>"
+" <separator />"
+
+" <toolitem action='ShowScanner'/>"
+" <toolitem action='RemoveTag'/>"
+" <toolitem action='UndoFile'/>"
+" <toolitem action='RedoFile'/>"
+" <toolitem action='SaveFile'/>"
+" <separator />"
+
+" <toolitem action='TreeViewMode'/>"
+" <toolitem action='ArtistViewMode'/>"
+" <separator />"
+
+" <toolitem action='SelInv'/>"
+" <separator />"
+
+" <toolitem action='SearchFile' />"
+" <toolitem action='MBSearch' />"
+" <toolitem action='WritePlaylist' />"
+" <separator />"
+
+" <toolitem action='Stop'/>"
+" </toolbar>"
+
+
+/*
+ * Popup menus
+ */
+// Popup in file list
+" <popup name='FilePopup'>"
+" <menuitem action='SelAll' />"
+" <menuitem action='UnselAll' />"
+" <menuitem action='SelInv' />"
+" <separator />"
+" <menuitem action='RunAudio' />"
+" <separator />"
+" <menu action='ScannerSubpopup'>"
+" <menuitem action='ShowScanner' />"
+" </menu>"
+" <menuitem action='MBSearchFile' />"
+" <menuitem action='SearchFile' />"
+" <menuitem action='DeleteFile' />"
+" <menuitem action='ReloadDir' />"
+" <menuitem action='OpenFile' />"
+" <separator />"
+
+" <menu action='SortTagMenu'>"
+" <menuitem action='SortTrackNumAsc' />"
+" <menuitem action='SortTrackNumDesc' />"
+" <separator />"
+" <menuitem action='SortTitleAsc' />"
+" <menuitem action='SortTitleDesc' />"
+" <separator />"
+" <menuitem action='SortArtistAsc' />"
+" <menuitem action='SortArtistDesc' />"
+" <separator />"
+" <menuitem action='SortAlbumArtistAsc' />"
+" <menuitem action='SortAlbumArtistDesc' />"
+" <separator />"
+" <menuitem action='SortAlbumAsc' />"
+" <menuitem action='SortAlbumDesc' />"
+" <separator />"
+" <menuitem action='SortYearAsc' />"
+" <menuitem action='SortYearDesc' />"
+" <separator />"
+" <menuitem action='SortYearAsc' />"
+" <menuitem action='SortYearDesc' />"
+" <separator />"
+" <menuitem action='SortGenreAsc' />"
+" <menuitem action='SortGenreDesc' />"
+" <separator />"
+" <menuitem action='SortCommentAsc' />"
+" <menuitem action='SortCommentDesc' />"
+" <separator />"
+" <menuitem action='SortComposerAsc' />"
+" <menuitem action='SortComposerDesc' />"
+" <separator />"
+" <menuitem action='SortOrigArtistAsc' />"
+" <menuitem action='SortOrigArtistDesc' />"
+" <separator />"
+" <menuitem action='SortCopyrightAsc' />"
+" <menuitem action='SortCopyrightDesc' />"
+" <separator />"
+" <menuitem action='SortUrlAsc' />"
+" <menuitem action='SortUrlDesc' />"
+" <separator />"
+" <menuitem action='SortEncodedByAsc' />"
+" <menuitem action='SortEncodedByDesc' />"
+" <separator />"
+" </menu>"
+
+" <menu action='SortPropMenu'>"
+" <menuitem action='SortFilenameAsc' />"
+" <menuitem action='SortFilenameDesc' />"
+" <separator />"
+" <menuitem action='SortDateAsc' />"
+" <menuitem action='SortDateDesc' />"
+" <separator />"
+" <menuitem action='SortTypeAsc' />"
+" <menuitem action='SortTypeDesc' />"
+" <separator />"
+" <menuitem action='SortSizeAsc' />"
+" <menuitem action='SortSizeDesc' />"
+" <separator />"
+" <menuitem action='SortDurationAsc' />"
+" <menuitem action='SortDurationDesc' />"
+" <separator />"
+" <menuitem action='SortBitrateAsc' />"
+" <menuitem action='SortBitrateDesc' />"
+" <separator />"
+" <menuitem action='SortSamplerateAsc' />"
+" <menuitem action='SortSamplerateDesc' />"
+" </menu>"
+" </popup>"
+
+// Popup in browser tree
+" <popup name='DirPopup'>"
+" <menuitem action='DirPopupRunAudio' />"
+" <separator />"
+" <menuitem action='GoToHome' />"
+" <menuitem action='GoToDefaultPath' />"
+" <menuitem action='SetDefaultPath' />"
+" <separator />"
+" <menuitem action='RenameDir' />"
+" <menuitem action='ReloadDir' />"
+" <menuitem action='BrowseDir' />"
+" <separator />"
+" <menuitem action='BrowseSubdir' />"
+#ifndef G_OS_WIN32
+" <menuitem action='BrowseHiddenDir' />"
+#endif /* !G_OS_WIN32 */
+" <separator />"
+" <menuitem action='CollapseTree' />"
+" <menuitem action='RefreshTree' />"
+" </popup>"
+
+// Popup in browser artist list
+" <popup name='DirArtistPopup'>"
+" <menuitem action='ArtistRunAudio' />"
+//" <separator />"
+//" <menuitem action='ArtistOpenFile' />"
+" </popup>"
+
+// Popup in browser album list
+" <popup name='DirAlbumPopup'>"
+" <menuitem action='AlbumRunAudio' />"
+//" <separator />"
+//" <menuitem action='AlbumOpenFile' />"
+" </popup>"
+
+// Popup in Log list
+" <popup name='LogPopup'>"
+" <menuitem action='CleanLog' />"
+" </popup>"
+
+"</ui>";
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]