[easytag/wip/musicbrainz-dialog: 1/3] Add skeleton MusicBrainz search dialog



commit 4b0df08595e3429e37567ca844dbc3c940452011
Author: David King <amigadave amigadave com>
Date:   Sun Nov 2 00:42:41 2014 +0000

    Add skeleton MusicBrainz search dialog

 Makefile.am                          |    2 +
 data/menus.ui                        |    5 +
 data/musicbrainz_dialog.ui           |  136 ++++++++++++++++++++++++++++++++++
 data/org.gnome.EasyTAG.gresource.xml |    1 +
 data/toolbar.ui                      |   13 +++
 po/POTFILES.in                       |    1 +
 src/application_window.c             |   46 ++++++++++++
 src/musicbrainz_dialog.c             |   62 +++++++++++++++
 src/musicbrainz_dialog.h             |   50 ++++++++++++
 9 files changed, 316 insertions(+), 0 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index f76ba68..d1e525a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,6 +60,7 @@ easytag_SOURCES = \
        src/log.c \
        src/main.c \
        src/misc.c \
+       src/musicbrainz_dialog.c \
        src/picture.c \
        src/playlist_dialog.c \
        src/preferences_dialog.c \
@@ -121,6 +122,7 @@ easytag_headers = \
        src/load_files_dialog.h \
        src/log.h \
        src/misc.h \
+       src/musicbrainz_dialog.h \
        src/picture.h \
        src/playlist_dialog.h \
        src/preferences_dialog.h \
diff --git a/data/menus.ui b/data/menus.ui
index 365e7fd..80ae914 100644
--- a/data/menus.ui
+++ b/data/menus.ui
@@ -454,6 +454,11 @@
                 <attribute name="label" translatable="yes">CDD_B Search…</attribute>
             </item>
             <item>
+                <attribute name="accel">&lt;Primary&gt;m</attribute>
+                <attribute name="action">win.show-musicbrainz</attribute>
+                <attribute name="label" translatable="yes">MusicBrainz Search…</attribute>
+            </item>
+            <item>
                 <attribute name="accel">&lt;Primary&gt;t</attribute>
                 <attribute name="action">win.show-load-filenames</attribute>
                 <attribute name="label" translatable="yes">Load Filenames From a Text File…</attribute>
diff --git a/data/musicbrainz_dialog.ui b/data/musicbrainz_dialog.ui
new file mode 100644
index 0000000..a364597
--- /dev/null
+++ b/data/musicbrainz_dialog.ui
@@ -0,0 +1,136 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.10"/>
+    <template class="EtMusicbrainzDialog" parent="GtkDialog">
+        <property name="destroy-with-parent">True</property>
+        <property name="title" translatable="yes">MusicBrainz Search</property>
+        <signal name="delete-event" handler="gtk_widget_hide_on_delete"/>
+        <child internal-child="vbox">
+            <object class="GtkBox" id="musicbrainz_box">
+                <property name="border-width">6</property>
+                <property name="spacing">6</property>
+                <child>
+                    <object class="GtkGrid" id="musicbrainz_grid">
+                        <property name="column-spacing">6</property>
+                        <property name="row-spacing">6</property>
+                        <child>
+                            <object class="GtkLabel" id="search_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Search</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="search_combo">
+                                <items>
+                                    <item id="release_group" translatable="yes">Release Group</item>
+                                    <item id="artist" translatable="yes">Artist</item>
+                                </items>
+                                <property name="active-id">release_group</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Select the type of 
search</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="search_entry">
+                                <property name="tooltip-text" translatable="yes">Enter the search 
terms</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkBox" id="search_buttons_box">
+                                <property name="orientation">horizontal</property>
+                                <property name="visible">True</property>
+                                <style>
+                                    <class name="linked"/>
+                                </style>
+                                <child>
+                                    <object class="GtkButton" id="search_button">
+                                        <property name="label" translatable="yes">_Search</property>
+                                        <property name="use-underline">True</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkButton" id="stop_button">
+                                        <property name="label" translatable="yes">S_top</property>
+                                        <property name="sensitive">False</property>
+                                        <property name="tooltip-text" translatable="yes">Stop the 
search</property>
+                                        <property name="use-underline">True</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="results_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Results</property>
+                                <property name="margin-top">6</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkScrolledWindow" id="results_scrolled">
+                                <property name="expand">True</property>
+                                <property name="margin-left">12</property>
+                                <property name="min-content-height">225</property>
+                                <property name="min-content-width">225</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="results_view">
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">3</property>
+                                <property name="width">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="dlm_check">
+                                <property name="label" translatable="yes">Match lines with the Levenshtein 
algorithm</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to use the DLM 
algorithm to match MusicBrainz results to files</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">4</property>
+                                <property name="width">4</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+    </template>
+</interface>
diff --git a/data/org.gnome.EasyTAG.gresource.xml b/data/org.gnome.EasyTAG.gresource.xml
index 21418a4..828a329 100644
--- a/data/org.gnome.EasyTAG.gresource.xml
+++ b/data/org.gnome.EasyTAG.gresource.xml
@@ -9,6 +9,7 @@
         <file preprocess='xml-stripblanks'>log_area.ui</file>
         <file preprocess='xml-stripblanks'>load_files_dialog.ui</file>
         <file preprocess='xml-stripblanks'>menus.ui</file>
+        <file preprocess='xml-stripblanks'>musicbrainz_dialog.ui</file>
         <file preprocess='xml-stripblanks'>playlist_dialog.ui</file>
         <file preprocess='xml-stripblanks'>preferences_dialog.ui</file>
         <file preprocess='xml-stripblanks'>scan_dialog.ui</file>
diff --git a/data/toolbar.ui b/data/toolbar.ui
index f1d9eb6..8d8a534 100644
--- a/data/toolbar.ui
+++ b/data/toolbar.ui
@@ -7,6 +7,10 @@
         <property name="resource">/org/gnome/EasyTAG/images/invert-selection.png</property>
         <property name="visible">True</property>
     </object>
+    <object class="GtkImage" id="musicbrainz_image">
+        <property name="resource">/org/gnome/EasyTAG/images/musicbrainz.png</property>
+        <property name="visible">True</property>
+    </object>
     <object class="GtkToolbar" id="main_toolbar">
         <property name="visible">True</property>
         <style>
@@ -153,6 +157,15 @@
             </object>
         </child>
         <child>
+            <object class="GtkToolButton" id="musicbrainz_button">
+                <property name="action-name">win.show-musicbrainz</property>
+                <property name="icon-widget">musicbrainz_image</property>
+                <property name="label" translatable="yes">MusicBrainz Search…</property>
+                <property name="tooltip-text" translatable="yes">MusicBrainz Search</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
             <object class="GtkToolButton" id="playlist_button">
                 <property name="action-name">win.show-playlist</property>
                 <property name="icon-name">document-save-as</property>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 55b46d7..64e0ca6 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,6 +9,7 @@ data/easytag-nautilus.metainfo.xml.in
 [type: gettext/glade]data/log_area.ui
 [type: gettext/glade]data/load_files_dialog.ui
 [type: gettext/glade]data/menus.ui
+[type: gettext/glade]data/musicbrainz_dialog.ui
 [type: gettext/glade]data/playlist_dialog.ui
 [type: gettext/glade]data/preferences_dialog.ui
 [type: gettext/glade]data/scan_dialog.ui
diff --git a/src/application_window.c b/src/application_window.c
index 92da371..fb6f3b3 100644
--- a/src/application_window.c
+++ b/src/application_window.c
@@ -46,6 +46,7 @@
 #ifdef ENABLE_OPUS
 #include "opus_header.h"
 #endif
+#include "musicbrainz_dialog.h"
 #include "picture.h"
 #include "playlist_dialog.h"
 #include "preferences_dialog.h"
@@ -72,6 +73,9 @@ typedef struct
 
     GtkWidget *cddb_dialog;
     GtkWidget *load_files_dialog;
+#ifdef ENABLE_MUSICBRAINZ
+    GtkWidget *musicbrainz_dialog;
+#endif /* ENABLE_MUSICBRAINZ */
     GtkWidget *playlist_dialog;
     GtkWidget *preferences_dialog;
     GtkWidget *scan_dialog;
@@ -329,6 +333,27 @@ et_application_window_show_cddb_dialog (EtApplicationWindow *self)
     }
 }
 
+static void
+et_application_window_show_musicbrainz_dialog (EtApplicationWindow *self)
+{
+#ifdef ENABLE_MUSICBRAINZ
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->musicbrainz_dialog)
+    {
+        gtk_widget_show (priv->musicbrainz_dialog);
+    }
+    else
+    {
+        priv->musicbrainz_dialog = GTK_WIDGET (et_musicbrainz_dialog_new (GTK_WINDOW (self)));
+        gtk_widget_show_all (priv->musicbrainz_dialog);
+    }
+#endif /* ENABLE_MUSICBRAINZ */
+    /* FIXME: Show an error message, or remove the action entirely. */
+}
+
 /*
  * Delete the file ETFile
  */
@@ -1160,6 +1185,18 @@ on_show_cddb (GSimpleAction *action,
 }
 
 static void
+on_show_musicbrainz (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+
+    et_application_window_show_musicbrainz_dialog (self);
+}
+
+static void
 on_show_load_filenames (GSimpleAction *action,
                         GVariant *variant,
                         gpointer user_data)
@@ -1552,6 +1589,7 @@ static const GActionEntry actions[] =
     /* { "browse-subdir", on_browse_subdir }, Created from GSetting. */
     /* Miscellaneous menu. */
     { "show-cddb", on_show_cddb },
+    { "show-musicbrainz", on_show_musicbrainz },
     { "show-load-filenames", on_show_load_filenames },
     { "show-playlist", on_show_playlist },
     /* Go menu. */
@@ -1604,6 +1642,14 @@ et_application_window_dispose (GObject *object)
         priv->load_files_dialog = NULL;
     }
 
+#ifdef ENABLE_MUSICBRAINZ
+    if (priv->musicbrainz_dialog)
+    {
+        gtk_widget_destroy (priv->musicbrainz_dialog);
+        priv->musicbrainz_dialog = NULL;
+    }
+#endif /* ENABLE_MUSICBRAINZ */
+
     if (priv->playlist_dialog)
     {
         gtk_widget_destroy (priv->playlist_dialog);
diff --git a/src/musicbrainz_dialog.c b/src/musicbrainz_dialog.c
new file mode 100644
index 0000000..28a661f
--- /dev/null
+++ b/src/musicbrainz_dialog.c
@@ -0,0 +1,62 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2015  David King <amigadave amigadave com>
+ * Copyright (C) 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 "musicbrainz_dialog.h"
+
+#include <glib/gi18n.h>
+
+typedef struct
+{
+    gpointer unused;
+} EtMusicbrainzDialogPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (EtMusicbrainzDialog, et_musicbrainz_dialog, GTK_TYPE_DIALOG)
+
+static void
+et_musicbrainz_dialog_init (EtMusicbrainzDialog *self)
+{
+    gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+static void
+et_musicbrainz_dialog_class_init (EtMusicbrainzDialogClass *klass)
+{
+    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+    gtk_widget_class_set_template_from_resource (widget_class,
+                                                 "/org/gnome/EasyTAG/musicbrainz_dialog.ui");
+}
+
+/*
+ * et_musicbrainz_dialog_new:
+ *
+ * Create a new EtMusicbrainzDialog instance.
+ *
+ * Returns: a new #EtMusicbrainzDialog
+ */
+EtMusicbrainzDialog *
+et_musicbrainz_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_MUSICBRAINZ_DIALOG, "transient-for", parent,
+                         NULL);
+}
diff --git a/src/musicbrainz_dialog.h b/src/musicbrainz_dialog.h
new file mode 100644
index 0000000..72947de
--- /dev/null
+++ b/src/musicbrainz_dialog.h
@@ -0,0 +1,50 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2015  David King <amigadave amigadave com>
+ * Copyright (C) 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 ET_MUSICBRAINZ_DIALOG_H_
+#define ET_MUSICBRAINZ_DIALOG_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_MUSICBRAINZ_DIALOG (et_musicbrainz_dialog_get_type ())
+#define ET_MUSICBRAINZ_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_MUSICBRAINZ_DIALOG, 
EtMusicbrainzDialog))
+
+typedef struct _EtMusicbrainzDialog EtMusicbrainzDialog;
+typedef struct _EtMusicbrainzDialogClass EtMusicbrainzDialogClass;
+
+struct _EtMusicbrainzDialog
+{
+    /*< private >*/
+    GtkDialog parent_instance;
+};
+
+struct _EtMusicbrainzDialogClass
+{
+    /*< private >*/
+    GtkDialogClass parent_class;
+};
+
+GType et_musicbrainz_dialog_get_type (void);
+EtMusicbrainzDialog *et_musicbrainz_dialog_new (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* !ET_MUSICBRAINZ_DIALOG_H_ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]