[easytag/wip/musicbrainz-support-appwin-merge: 1/82] Added MusicBrainz dialog



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">&lt;b&gt;Results:&lt;/b&gt;</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]