[easytag/wip/for-2.3.7: 16/20] Convert EtLoadFilesDialog to a template widget
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/for-2.3.7: 16/20] Convert EtLoadFilesDialog to a template widget
- Date: Fri, 15 May 2015 07:29:01 +0000 (UTC)
commit 45e12e2da65d3ac69253a4b396981e291259bc70
Author: David King <amigadave amigadave com>
Date: Sun May 3 22:05:19 2015 +0100
Convert EtLoadFilesDialog to a template widget
data/load_files_dialog.ui | 510 ++++++++++++++++++++++++---------------------
src/load_files_dialog.c | 428 ++++++++++++++++++++------------------
2 files changed, 505 insertions(+), 433 deletions(-)
---
diff --git a/data/load_files_dialog.ui b/data/load_files_dialog.ui
index aded0e1..f10f1aa 100644
--- a/data/load_files_dialog.ui
+++ b/data/load_files_dialog.ui
@@ -1,5 +1,5 @@
<interface domain="easytag">
- <requires lib="gtk+" version="3.4"/>
+ <requires lib="gtk+" version="3.10"/>
<object class="GtkListStore" id="file_content_model">
<columns>
<column type="gchararray"/>
@@ -11,270 +11,310 @@
<column type="gpointer"/>
</columns>
</object>
- <object class="GtkGrid" id="file_grid">
- <property name="column-spacing">6</property>
- <property name="row-spacing">6</property>
- <child>
- <object class="GtkLabel" id="file_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">File:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFileChooserButton" id="file_chooser">
- <property name="hexpand">True</property>
- <property name="title" translatable="yes">Choose a Text File</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="file_load_button">
- <property name="can-default">True</property>
- <property name="label" translatable="yes">_Load</property>
- <property name="use-underline">True</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">2</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkPaned" id="file_paned">
- <property name="orientation">horizontal</property>
- <property name="visible">True</property>
+ <template class="EtLoadFilesDialog" parent="GtkDialog">
+ <property name="destroy-with-parent">True</property>
+ <property name="title" translatable="yes">Load Filenames From a Text File</property>
+ <signal name="delete-event" handler="gtk_widget_hide_on_delete"/>
+ <signal name="response" handler="on_response"/>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="load_files_vbox">
+ <property name="border-width">6</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkGrid" id="file_content_grid">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
+ <object class="GtkGrid" id="file_grid">
+ <property name="column-spacing">6</property>
+ <property name="row-spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="file_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">File:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="file_chooser">
+ <property name="hexpand">True</property>
+ <property name="title" translatable="yes">Choose a Text File</property>
+ <property name="visible">True</property>
+ <signal name="file-set" handler="set_load_button_sensitivity"
swapped="true"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="file_load_button">
+ <property name="can-default">True</property>
+ <property name="label" translatable="yes">_Load</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ <signal name="clicked" handler="Load_File_Content"/>
+ </object>
+ <packing>
+ <property name="left-attach">2</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
<child>
- <object class="GtkScrolledWindow" id="file_content_scrolled">
- <property name="expand">True</property>
- <property name="min-content-height">275</property>
- <property name="min-content-width">275</property>
+ <object class="GtkPaned" id="file_paned">
+ <property name="orientation">horizontal</property>
<property name="visible">True</property>
<child>
- <object class="GtkTreeView" id="file_content_view">
- <property name="model">file_content_model</property>
- <property name="reorderable">True</property>
+ <object class="GtkGrid" id="file_content_grid">
+ <property name="orientation">vertical</property>
<property name="visible">True</property>
<child>
- <object class="GtkTreeViewColumn" id="file_content_column">
- <property name="title" translatable="yes">Content of Text
File</property>
+ <object class="GtkScrolledWindow" id="file_content_scrolled">
+ <property name="expand">True</property>
+ <property name="min-content-height">275</property>
+ <property name="min-content-width">275</property>
+ <property name="visible">True</property>
<child>
- <object class="GtkCellRendererText"
id="filecontent_renderer"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
+ <object class="GtkTreeView" id="file_content_view">
+ <property name="model">file_content_model</property>
+ <property name="reorderable">True</property>
+ <property name="visible">True</property>
+ <signal name="button-press-event"
handler="on_content_view_button_press_event"/>
+ <signal name="key-press-event"
handler="Load_Filename_List_Key_Press"/>
+ <signal name="popup-menu"
handler="on_content_view_popup_menu"/>
+ <child>
+ <object class="GtkTreeViewColumn"
id="file_content_column">
+ <property name="title"
translatable="yes">Content of Text File</property>
+ <child>
+ <object class="GtkCellRendererText"
id="filecontent_renderer"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection"
id="file_content_selection">
+ <signal name="changed"
handler="Load_Filename_Edit_Text_Line" swapped="yes"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="file_content_bar">
+ <property name="visible">True</property>
+ <style>
+ <class name="inline-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolButton" id="content_insert_blank">
+ <property name="icon-name">list-add</property>
+ <property name="tooltip-text"
translatable="yes">Insert a blank line before the selected line</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_content_insert_blank_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="content_remove">
+ <property name="icon-name">list-remove</property>
+ <property name="tooltip-text"
translatable="yes">Delete the selected line</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_content_remove_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="content_remove_blank">
+ <property name="icon-name">edit-delete</property>
+ <property name="tooltip-text"
translatable="yes">Delete all blank lines</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_content_delete_all_blank_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="content_up">
+ <property name="icon-name">go-up</property>
+ <property name="tooltip-text"
translatable="yes">Move the selected line up</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_content_move_up_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="content_down">
+ <property name="icon-name">go-down</property>
+ <property name="tooltip-text"
translatable="yes">Move the selected line down</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_content_move_down_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="content_reload">
+ <property name="icon-name">view-refresh</property>
+ <property name="tooltip-text"
translatable="yes">Reload</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_load_file_content_view_reload_clicked"/>
+ </object>
</child>
</object>
</child>
</object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">False</property>
+ </packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkToolbar" id="file_content_bar">
- <property name="visible">True</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="content_insert_blank">
- <property name="icon-name">list-add</property>
- <property name="tooltip-text" translatable="yes">Insert a blank line
before the selected line</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="content_remove">
- <property name="icon-name">list-remove</property>
- <property name="tooltip-text" translatable="yes">Delete the selected
line</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="content_remove_blank">
- <property name="icon-name">edit-delete</property>
- <property name="tooltip-text" translatable="yes">Delete all blank
lines</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="content_up">
- <property name="icon-name">go-up</property>
- <property name="tooltip-text" translatable="yes">Move the selected
line up</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="content_down">
- <property name="icon-name">go-down</property>
- <property name="tooltip-text" translatable="yes">Move the selected
line down</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="content_reload">
- <property name="icon-name">view-refresh</property>
- <property name="tooltip-text" translatable="yes">Reload</property>
- <property name="visible">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid" id="file_name_grid">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkScrolledWindow" id="file_name_scrolled">
- <property name="expand">True</property>
- <property name="min-content-height">275</property>
- <property name="min-content-width">275</property>
- <property name="visible">True</property>
<child>
- <object class="GtkTreeView" id="file_name_view">
- <property name="model">file_name_model</property>
- <property name="reorderable">True</property>
+ <object class="GtkGrid" id="file_name_grid">
+ <property name="orientation">vertical</property>
<property name="visible">True</property>
<child>
- <object class="GtkTreeViewColumn" id="file_name_column">
- <property name="title" translatable="yes">List of
Files</property>
+ <object class="GtkScrolledWindow" id="file_name_scrolled">
+ <property name="expand">True</property>
+ <property name="min-content-height">275</property>
+ <property name="min-content-width">275</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkTreeView" id="file_name_view">
+ <property name="model">file_name_model</property>
+ <property name="reorderable">True</property>
+ <property name="visible">True</property>
+ <signal name="button-press-event"
handler="on_name_view_button_press_event"/>
+ <signal name="key-press-event"
handler="Load_Filename_List_Key_Press"/>
+ <signal name="popup-menu"
handler="on_name_view_popup_menu"/>
+ <child>
+ <object class="GtkTreeViewColumn"
id="file_name_column">
+ <property name="title"
translatable="yes">List of Files</property>
+ <child>
+ <object class="GtkCellRendererText"
id="file_name_renderer"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="file_name_bar">
+ <property name="visible">True</property>
+ <style>
+ <class name="inline-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolButton" id="name_insert_blank">
+ <property name="icon-name">list-add</property>
+ <property name="tooltip-text"
translatable="yes">Insert a blank line before the selected line</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_name_insert_blank_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="name_remove">
+ <property name="icon-name">list-remove</property>
+ <property name="tooltip-text"
translatable="yes">Delete the selected line</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_name_remove_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="name_remove_blank">
+ <property name="icon-name">edit-delete</property>
+ <property name="tooltip-text"
translatable="yes">Delete all blank lines</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_name_delete_all_blank_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="name_up">
+ <property name="icon-name">go-up</property>
+ <property name="tooltip-text"
translatable="yes">Move the selected line up</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_name_move_up_clicked" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="name_down">
+ <property name="icon-name">go-down</property>
+ <property name="tooltip-text"
translatable="yes">Move the selected line down</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_name_move_down_clicked" swapped="yes"/>
+ </object>
+ </child>
<child>
- <object class="GtkCellRendererText"
id="file_name_renderer"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
+ <object class="GtkToolButton" id="name_reload">
+ <property name="icon-name">view-refresh</property>
+ <property name="tooltip-text"
translatable="yes">Reload</property>
+ <property name="visible">True</property>
+ <signal name="clicked"
handler="on_load_file_name_view_reload_clicked" swapped="yes"/>
+ </object>
</child>
</object>
</child>
</object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">False</property>
+ </packing>
</child>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ <property name="width">3</property>
+ </packing>
</child>
<child>
- <object class="GtkToolbar" id="file_name_bar">
+ <object class="GtkLabel" id="file_entry_label">
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Selected line:</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="file_entry">
+ <property name="visible">True</property>
+ <signal name="changed" handler="Load_Filename_Update_Text_Line"
swapped="yes"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="file_separator">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ <property name="width">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="file_scanner_check">
+ <property name="label" translatable="yes">Run the current scanner for each
file</property>
+ <property name="tooltip-text" translatable="yes">Whether to run the
currently selected scanner on filenames loaded from a text file</property>
<property name="visible">True</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="name_insert_blank">
- <property name="icon-name">list-add</property>
- <property name="tooltip-text" translatable="yes">Insert a blank line
before the selected line</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="name_remove">
- <property name="icon-name">list-remove</property>
- <property name="tooltip-text" translatable="yes">Delete the selected
line</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="name_remove_blank">
- <property name="icon-name">edit-delete</property>
- <property name="tooltip-text" translatable="yes">Delete all blank
lines</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="name_up">
- <property name="icon-name">go-up</property>
- <property name="tooltip-text" translatable="yes">Move the selected
line up</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="name_down">
- <property name="icon-name">go-down</property>
- <property name="tooltip-text" translatable="yes">Move the selected
line down</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="name_reload">
- <property name="icon-name">view-refresh</property>
- <property name="tooltip-text" translatable="yes">Reload</property>
- <property name="visible">True</property>
- </object>
- </child>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ <property name="width">3</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">False</property>
- </packing>
</child>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">1</property>
- <property name="width">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="file_entry_label">
- <property name="halign">end</property>
- <property name="label" translatable="yes">Selected line:</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="file_entry">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</property>
- <property name="width">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparator" id="file_separator">
- <property name="orientation">horizontal</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">3</property>
- <property name="width">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="file_scanner_check">
- <property name="label" translatable="yes">Run the current scanner for each file</property>
- <property name="tooltip-text" translatable="yes">Whether to run the currently selected
scanner on filenames loaded from a text file</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">4</property>
- <property name="width">3</property>
- </packing>
</child>
- </object>
+ </template>
</interface>
diff --git a/src/load_files_dialog.c b/src/load_files_dialog.c
index 87d1942..a070d51 100644
--- a/src/load_files_dialog.c
+++ b/src/load_files_dialog.c
@@ -1,5 +1,5 @@
/* EasyTAG - tag editor for audio files
- * Copyright (C) 2013,2014 David King <amigadave amigadave com>
+ * Copyright (C) 2013-2015 David King <amigadave amigadave 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
@@ -36,21 +36,21 @@
typedef struct
{
GtkWidget *file_chooser;
- GtkWidget *load_file_content_view;
- GtkListStore *load_file_content_model;
+ GtkWidget *file_load_button;
+ GtkWidget *file_content_view;
+ GtkListStore *file_content_model;
GtkWidget *load_file_content_menu;
- GtkWidget *load_file_name_view;
- GtkListStore *load_file_name_model;
+ GtkWidget *file_name_view;
+ GtkListStore *file_name_model;
GtkWidget *load_file_name_menu;
+ GtkWidget *file_scanner_check;
- GtkWidget *selected_line_entry;
+ GtkWidget *file_entry;
} EtLoadFilesDialogPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (EtLoadFilesDialog, et_load_files_dialog, GTK_TYPE_DIALOG)
-static const guint BOX_SPACING = 6;
-
enum
{
LOAD_FILE_CONTENT_TEXT,
@@ -66,7 +66,7 @@ enum
/*
* Set the new filename of each file.
- * Associate lines from priv->load_file_content_view with priv->load_file_name_view
+ * Associate lines from priv->file_content_view with priv->file_name_view
*/
static void
Load_Filename_Set_Filenames (EtLoadFilesDialog *self)
@@ -85,13 +85,13 @@ Load_Filename_Set_Filenames (EtLoadFilesDialog *self)
priv = et_load_files_dialog_get_instance_private (self);
- if ( !ETCore->ETFileList || !priv->load_file_content_view || !priv->load_file_name_view)
+ if ( !ETCore->ETFileList || !priv->file_content_view || !priv->file_name_view)
return;
et_application_window_update_et_file_from_ui (ET_APPLICATION_WINDOW (MainWindow));
- rowcount = MIN(gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->load_file_name_model), NULL),
- gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->load_file_content_model), NULL));
+ rowcount = MIN(gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_name_model), NULL),
+ gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_content_model), NULL));
for (row=0; row < rowcount; row++)
{
@@ -100,14 +100,14 @@ Load_Filename_Set_Filenames (EtLoadFilesDialog *self)
else
gtk_tree_path_next(currentPath);
- found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->load_file_name_model), &iter_name, currentPath);
+ found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_name_model), &iter_name, currentPath);
if (found)
- gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_name_model), &iter_name,
+ gtk_tree_model_get(GTK_TREE_MODEL(priv->file_name_model), &iter_name,
LOAD_FILE_NAME_POINTER, &ETFile, -1);
- found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->load_file_content_model), &iter_content,
currentPath);
+ found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_content_model), &iter_content,
currentPath);
if (found)
- gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_content_model), &iter_content,
+ gtk_tree_model_get(GTK_TREE_MODEL(priv->file_content_model), &iter_content,
LOAD_FILE_CONTENT_TEXT, &list_text, -1);
if (ETFile && !et_str_empty (list_text))
@@ -187,19 +187,23 @@ on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
* To enable/disable sensitivity of the button 'Load'
*/
static void
-set_load_button_sensitivity (GtkWidget *button, GtkWidget *chooser)
+set_load_button_sensitivity (EtLoadFilesDialog *self,
+ GtkWidget *chooser)
{
+ EtLoadFilesDialogPrivate *priv;
GFile *file;
GFileInfo *info;
GError *error = NULL;
- g_return_if_fail (button != NULL && chooser != NULL);
+ g_return_if_fail (self != NULL && chooser != NULL);
+
+ priv = et_load_files_dialog_get_instance_private (self);
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser));
if (!file)
{
- gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+ gtk_widget_set_sensitive (priv->file_load_button, FALSE);
return;
}
@@ -209,11 +213,11 @@ set_load_button_sensitivity (GtkWidget *button, GtkWidget *chooser)
if (info && G_FILE_TYPE_REGULAR == g_file_info_get_file_type (info))
{
- gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->file_load_button), TRUE);
}
else
{
- gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->file_load_button), FALSE);
if (!info)
{
@@ -228,7 +232,7 @@ set_load_button_sensitivity (GtkWidget *button, GtkWidget *chooser)
}
/*
- * Load content of the file into the priv->load_file_content_view list
+ * Load content of the file into the priv->file_content_view list
*/
static void
Load_File_Content (G_GNUC_UNUSED GtkButton *button, gpointer user_data)
@@ -270,7 +274,7 @@ Load_File_Content (G_GNUC_UNUSED GtkButton *button, gpointer user_data)
/* TODO: Find a safer alternative to _ANY. */
g_data_input_stream_set_newline_type (data,
G_DATA_STREAM_NEWLINE_TYPE_ANY);
- gtk_list_store_clear (priv->load_file_content_model);
+ gtk_list_store_clear (priv->file_content_model);
while ((line = g_data_input_stream_read_line (data, &size_read, NULL,
&error)))
@@ -279,7 +283,7 @@ Load_File_Content (G_GNUC_UNUSED GtkButton *button, gpointer user_data)
valid = Try_To_Validate_Utf8_String (line);
g_free (line);
- gtk_list_store_insert_with_values (priv->load_file_content_model, NULL,
+ gtk_list_store_insert_with_values (priv->file_content_model, NULL,
G_MAXINT, LOAD_FILE_CONTENT_TEXT,
valid, -1);
g_free (valid);
@@ -326,6 +330,26 @@ Load_Filename_List_Delete_Line (GtkWidget *treeview)
gtk_tree_selection_select_iter(selection, &itercopy);
}
+static void
+on_name_remove_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Delete_Line (priv->file_name_view);
+}
+
+static void
+on_content_remove_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Delete_Line (priv->file_content_view);
+}
+
/*
* Insert a blank line before the selected line in the treeview passed as parameter
*/
@@ -348,6 +372,26 @@ Load_Filename_List_Insert_Blank_Line (GtkWidget *treeview)
gtk_list_store_insert_before(GTK_LIST_STORE(model), temp, &selectedIter);
}
+static void
+on_name_insert_blank_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Insert_Blank_Line (priv->file_name_view);
+}
+
+static void
+on_content_insert_blank_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Insert_Blank_Line (priv->file_content_view);
+}
+
static gboolean
Load_Filename_List_Key_Press (GtkWidget *treeview, GdkEvent *event)
{
@@ -411,6 +455,26 @@ Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *treeview)
}
}
+static void
+on_content_delete_all_blank_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Delete_All_Blank_Lines (priv->file_content_view);
+}
+
+static void
+on_name_delete_all_blank_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Delete_All_Blank_Lines (priv->file_name_view);
+}
+
/*
* Move up the selected line in the treeview passed as parameter
*/
@@ -455,6 +519,26 @@ Load_Filename_List_Move_Up (GtkWidget *treeview)
g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
}
+static void
+on_content_move_up_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Move_Up (priv->file_content_view);
+}
+
+static void
+on_name_move_up_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Move_Up (priv->file_name_view);
+}
+
/*
* Move down the selected line in the treeview passed as parameter
*/
@@ -496,6 +580,26 @@ Load_Filename_List_Move_Down (GtkWidget *treeview)
g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
}
+static void
+on_content_move_down_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Move_Down (priv->file_content_view);
+}
+
+static void
+on_name_move_down_clicked (EtLoadFilesDialog *self,
+ GtkToolButton *button)
+{
+ EtLoadFilesDialogPrivate *priv;
+
+ priv = et_load_files_dialog_get_instance_private (self);
+ Load_Filename_List_Move_Down (priv->file_name_view);
+}
+
/*
* Load the names of the current list of files
*/
@@ -510,7 +614,7 @@ Load_File_List (EtLoadFilesDialog *self)
priv = et_load_files_dialog_get_instance_private (self);
- gtk_list_store_clear(priv->load_file_name_model);
+ gtk_list_store_clear(priv->file_name_model);
for (l = ETCore->ETFileList; l != NULL; l = g_list_next (l))
{
@@ -519,7 +623,7 @@ Load_File_List (EtLoadFilesDialog *self)
// Remove the extension ('filename' must be allocated to don't affect the initial value)
if ((pos=strrchr(filename_utf8,'.'))!=NULL)
*pos = 0;
- gtk_list_store_insert_with_values (priv->load_file_name_model, NULL,
+ gtk_list_store_insert_with_values (priv->file_name_model, NULL,
G_MAXINT, LOAD_FILE_NAME_TEXT,
filename_utf8,
LOAD_FILE_NAME_POINTER, l->data,
@@ -529,17 +633,17 @@ Load_File_List (EtLoadFilesDialog *self)
}
static void
-on_load_file_name_view_reload_clicked (G_GNUC_UNUSED GtkButton *button,
- gpointer user_data)
+on_load_file_name_view_reload_clicked (EtLoadFilesDialog *self,
+ G_GNUC_UNUSED GtkButton *button)
{
- Load_File_List (ET_LOAD_FILES_DIALOG (user_data));
+ Load_File_List (self);
}
static void
-on_load_file_content_view_reload_clicked (G_GNUC_UNUSED GtkButton *button,
- gpointer user_data)
+on_load_file_content_view_reload_clicked (EtLoadFilesDialog *self,
+ G_GNUC_UNUSED GtkButton *button)
{
- Load_File_Content (NULL, ET_LOAD_FILES_DIALOG (user_data));
+ Load_File_Content (NULL, self);
}
/*
@@ -622,7 +726,7 @@ create_load_file_content_view_popup (EtLoadFilesDialog *self)
GtkWidget *MenuItem;
priv = et_load_files_dialog_get_instance_private (self);
- list = priv->load_file_name_view;
+ list = priv->file_name_view;
BrowserPopupMenu = gtk_menu_new();
gtk_menu_attach_to_widget (GTK_MENU (BrowserPopupMenu), list, NULL);
@@ -725,7 +829,7 @@ create_load_file_name_view_popup (EtLoadFilesDialog *self)
GtkWidget *MenuItem;
priv = et_load_files_dialog_get_instance_private (self);
- list = priv->load_file_content_view;
+ list = priv->file_content_view;
BrowserPopupMenu = gtk_menu_new();
gtk_menu_attach_to_widget (GTK_MENU (BrowserPopupMenu), list, NULL);
@@ -823,16 +927,20 @@ on_content_view_button_press_event (GtkWidget *treeview,
* Update the text of the selected line into the list, with the text entered into the entry
*/
static void
-Load_Filename_Update_Text_Line(GtkWidget *entry, GtkWidget *list)
+Load_Filename_Update_Text_Line (EtLoadFilesDialog *self,
+ GtkWidget *entry)
{
+ EtLoadFilesDialogPrivate *priv;
GtkTreeIter SelectedRow;
GtkTreeSelection *selection;
GtkTreeModel *model;
gboolean hasSelectedRows;
- g_return_if_fail (entry != NULL || list != NULL);
+ g_return_if_fail (self != NULL && entry != NULL);
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ priv = et_load_files_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_content_view));
hasSelectedRows = gtk_tree_selection_get_selected(selection, &model, &SelectedRow);
if (hasSelectedRows)
{
@@ -845,7 +953,8 @@ Load_Filename_Update_Text_Line(GtkWidget *entry, GtkWidget *list)
* Set the text of the selected line of the list into the entry
*/
static void
-Load_Filename_Edit_Text_Line (GtkTreeSelection *selection, gpointer user_data)
+Load_Filename_Edit_Text_Line (EtLoadFilesDialog *self,
+ GtkTreeSelection *selection)
{
EtLoadFilesDialogPrivate *priv;
gchar *text;
@@ -853,14 +962,14 @@ Load_Filename_Edit_Text_Line (GtkTreeSelection *selection, gpointer user_data)
GtkEntry *entry;
gulong handler;
- priv = et_load_files_dialog_get_instance_private (ET_LOAD_FILES_DIALOG (user_data));
+ priv = et_load_files_dialog_get_instance_private (self);
- entry = GTK_ENTRY (priv->selected_line_entry);
+ entry = GTK_ENTRY (priv->file_entry);
if (gtk_tree_selection_get_selected(selection, NULL, &selectedIter) != TRUE)
return;
- gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_content_model), &selectedIter, LOAD_FILE_NAME_TEXT,
&text, -1);
+ gtk_tree_model_get(GTK_TREE_MODEL(priv->file_content_model), &selectedIter, LOAD_FILE_NAME_TEXT, &text,
-1);
handler = g_signal_handler_find(entry, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, Load_Filename_Update_Text_Line,
NULL);
g_signal_handler_block(entry, handler);
@@ -881,193 +990,43 @@ static void
create_load_files_dialog (EtLoadFilesDialog *self)
{
EtLoadFilesDialogPrivate *priv;
- GtkWidget *content_area;
- GtkBuilder *builder;
- GError *error = NULL;
- GtkWidget *grid;
- GtkWidget *button;
- GtkWidget *load_file_run_scanner;
const gchar *path;
priv = et_load_files_dialog_get_instance_private (self);
- gtk_window_set_title (GTK_WINDOW (self),
- _("Load Filenames From a Text File"));
- gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
gtk_dialog_add_buttons (GTK_DIALOG (self), _("_Close"),
GTK_RESPONSE_CANCEL, _("_Apply"),
GTK_RESPONSE_APPLY, NULL);
gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_APPLY);
- g_signal_connect (self, "response", G_CALLBACK (on_response), NULL);
- g_signal_connect (self, "delete-event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
-
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
- gtk_container_set_border_width (GTK_CONTAINER (self), BOX_SPACING);
- gtk_box_set_spacing (GTK_BOX (content_area), BOX_SPACING);
-
- builder = gtk_builder_new ();
- gtk_builder_add_from_resource (builder,
- "/org/gnome/EasyTAG/load_files_dialog.ui",
- &error);
- if (error != NULL)
- {
- g_error ("Unable to get scanner page from resource: %s",
- error->message);
- }
-
- grid = GTK_WIDGET (gtk_builder_get_object (builder, "file_grid"));
- gtk_container_add (GTK_CONTAINER (content_area), grid);
-
- /* File to load. */
- priv->file_chooser = GTK_WIDGET (gtk_builder_get_object (builder,
- "file_chooser"));
/* Initial value. */
if ((path = et_application_window_get_current_path (ET_APPLICATION_WINDOW (MainWindow))) != NULL)
{
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->file_chooser),
path);
}
- // the 'changed' signal is attached below to enable/disable the button to load
- /* Button 'load'
- * the signal attached to this button, to load the file, is placed after
- * the priv->load_file_content_view definition. */
- button = GTK_WIDGET (gtk_builder_get_object (builder, "file_load_button"));
- g_signal_connect_swapped (priv->file_chooser, "file-set",
- G_CALLBACK (set_load_button_sensitivity),
- button);
-
- /* Content of the loaded file. */
- priv->load_file_content_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
- "file_content_model"));
- priv->load_file_content_view = GTK_WIDGET (gtk_builder_get_object (builder,
- "file_content_view"));
-
- /* Signal to automatically load the file. */
- g_signal_connect (button, "clicked", G_CALLBACK (Load_File_Content), self);
- g_signal_connect (priv->load_file_content_view, "key-press-event",
- G_CALLBACK (Load_Filename_List_Key_Press), NULL);
-
- /* Commands (like the popup menu). */
- button = GTK_WIDGET (gtk_builder_get_object (builder,
- "content_insert_blank"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Insert_Blank_Line),
- G_OBJECT (priv->load_file_content_view));
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "content_remove"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Delete_Line),
- G_OBJECT (priv->load_file_content_view));
-
- button = GTK_WIDGET (gtk_builder_get_object (builder,
- "content_remove_blank"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Delete_All_Blank_Lines),
- G_OBJECT (priv->load_file_content_view));
- button = GTK_WIDGET (gtk_builder_get_object (builder, "content_up"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Move_Up),
- G_OBJECT (priv->load_file_content_view));
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "content_down"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Move_Down),
- G_OBJECT (priv->load_file_content_view));
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "content_reload"));
- g_signal_connect (button, "clicked",
- G_CALLBACK (on_load_file_content_view_reload_clicked),
- self);
-
- /* List of current filenames. */
- priv->load_file_name_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
- "file_name_model"));
- priv->load_file_name_view = GTK_WIDGET (gtk_builder_get_object (builder,
- "file_name_view"));
-
- g_signal_connect (priv->load_file_name_view, "key-press-event",
- G_CALLBACK (Load_Filename_List_Key_Press), NULL);
-
/* Signals to 'select' the same row into the other list (to show the
* corresponding filenames). */
- g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_content_view)),
+ g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_content_view)),
"changed",
G_CALLBACK (Load_Filename_Select_Row_In_Other_List),
- priv->load_file_name_view);
- g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_name_view)),
+ priv->file_name_view);
+ g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_name_view)),
"changed",
G_CALLBACK (Load_Filename_Select_Row_In_Other_List),
- priv->load_file_content_view);
-
- /* Commands (like the popup menu). */
- button = GTK_WIDGET (gtk_builder_get_object (builder,
- "name_insert_blank"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Insert_Blank_Line),
- priv->load_file_name_view);
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "name_remove"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Delete_Line),
- priv->load_file_name_view);
-
- button = GTK_WIDGET (gtk_builder_get_object (builder,
- "name_remove_blank"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Delete_All_Blank_Lines),
- priv->load_file_name_view);
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "name_up"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Move_Up),
- priv->load_file_name_view);
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "name_down"));
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (Load_Filename_List_Move_Down),
- priv->load_file_name_view);
-
- button = GTK_WIDGET (gtk_builder_get_object (builder, "name_reload"));
- g_signal_connect (button, "clicked",
- G_CALLBACK (on_load_file_name_view_reload_clicked),
- self);
-
+ priv->file_content_view);
+
/* Load the list of files in the list widget. */
Load_File_List (self);
/* Create popup menus. */
create_load_file_content_view_popup (self);
create_load_file_name_view_popup (self);
- g_signal_connect (priv->load_file_content_view, "button-press-event",
- G_CALLBACK (on_content_view_button_press_event), self);
- g_signal_connect (priv->load_file_content_view, "popup-menu",
- G_CALLBACK (on_content_view_popup_menu), self);
- g_signal_connect (priv->load_file_name_view, "button-press-event",
- G_CALLBACK (on_name_view_button_press_event), self);
- g_signal_connect (priv->load_file_name_view, "popup-menu",
- G_CALLBACK (on_name_view_popup_menu), self);
-
- /* Entry to edit a line in the list. */
- priv->selected_line_entry = GTK_WIDGET (gtk_builder_get_object (builder,
- "file_entry"));
- g_signal_connect (priv->selected_line_entry, "changed",
- G_CALLBACK (Load_Filename_Update_Text_Line),
- G_OBJECT (priv->load_file_content_view));
-
- /* Signal to load the line text in the editing entry. */
- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_content_view)),
- "changed", G_CALLBACK (Load_Filename_Edit_Text_Line),
- self);
- load_file_run_scanner = GTK_WIDGET (gtk_builder_get_object (builder,
- "file_scanner_check"));
g_settings_bind (MainSettings, "load-filenames-run-scanner",
- load_file_run_scanner, "active", G_SETTINGS_BIND_DEFAULT);
-
- g_object_unref (builder);
+ priv->file_scanner_check, "active",
+ G_SETTINGS_BIND_DEFAULT);
/* To initialize load button sensitivity. */
g_signal_emit_by_name (G_OBJECT (priv->file_chooser), "file-set");
@@ -1076,12 +1035,85 @@ create_load_files_dialog (EtLoadFilesDialog *self)
static void
et_load_files_dialog_init (EtLoadFilesDialog *self)
{
+ gtk_widget_init_template (GTK_WIDGET (self));
create_load_files_dialog (self);
}
static void
et_load_files_dialog_class_init (EtLoadFilesDialogClass *klass)
{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+ "/org/gnome/EasyTAG/load_files_dialog.ui");
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_chooser);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_load_button);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_content_view);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_content_model);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_name_view);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_name_model);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_scanner_check);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EtLoadFilesDialog,
+ file_entry);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_view_button_press_event);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_view_popup_menu);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_load_file_content_view_reload_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_load_file_name_view_reload_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_view_button_press_event);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_view_popup_menu);
+ gtk_widget_class_bind_template_callback (widget_class, on_response);
+ gtk_widget_class_bind_template_callback (widget_class,
+ set_load_button_sensitivity);
+ gtk_widget_class_bind_template_callback (widget_class, Load_File_Content);
+ gtk_widget_class_bind_template_callback (widget_class,
+ Load_Filename_Edit_Text_Line);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_insert_blank_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_insert_blank_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_delete_all_blank_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_delete_all_blank_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_remove_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_remove_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_move_up_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_move_up_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_content_move_down_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ on_name_move_down_clicked);
+ gtk_widget_class_bind_template_callback (widget_class,
+ Load_Filename_List_Move_Down);
+ gtk_widget_class_bind_template_callback (widget_class,
+ Load_Filename_List_Key_Press);
+ gtk_widget_class_bind_template_callback (widget_class,
+ Load_Filename_Update_Text_Line);
}
/*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]