2 * This file is part of Resource Organizer.
4 * Copyright (C) 2014 Nikita Zlobin <nick87720z@gmail.com>
6 * Resource Organizer is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * Resource Organizer is distributed in the hope that it will be
12 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Resource Organizer. If not, see
18 * <http://www.gnu.org/licenses/>.
33 GtkTreeModelFilter
* filter
;
34 GtkTreeModelSort
* sort
;
36 GtkEntryBuffer
* filterBuffer
;
37 GtkCheckButton
* ladspaCheck
,
42 void on_win_close (void)
47 void column_clicked (GtkTreeViewColumn
* col
)
49 static GtkTreeViewColumn
* prev
;
53 GList
* list
= gtk_tree_view_get_columns (view
);
54 for (GList
* c
= list
; c
&& c
->data
!= col
; c
= c
->next
, col_i
++);
59 typeof (col
->sort_order
) order
= (prev
== col
) ?
60 (col
->sort_order
== GTK_SORT_ASCENDING
? GTK_SORT_DESCENDING
: GTK_SORT_ASCENDING
) :
62 gtk_tree_view_column_set_sort_order (col
, order
);
63 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort
), col_i
, order
);
68 void view_drag_data_get (
70 UNUSED GdkDragContext
* context
,
71 GtkSelectionData
* sel_data
,
78 GValue path_val
= G_VALUE_INIT
;
80 GtkTreeSelection
* sel
= gtk_tree_view_get_selection (GTK_TREE_VIEW (w
));
81 if (! gtk_tree_selection_get_selected (sel
, &mod
, &i
))
83 fprintf (stderr
, "Can't drag, because nothing selected\n");
87 gtk_tree_model_get_value (mod
, &i
, COL_URL
, & path_val
);
88 const char * path
= g_value_get_string (& path_val
);
90 gtk_selection_data_set_text (sel_data
, path
, -1);
93 gboolean
filter_visible (
96 __attribute__((unused
)) gpointer user_data
98 gboolean ret_val
= TRUE
;
105 gtk_tree_model_get (model
, iter
,
107 COL_TYPE_NAME
, &type
,
109 COL_FILE
, &file
, -1);
110 if (!name
|| !type
|| !author
|| !file
)
113 if (strcmp (type
, "LADSPA") == 0 && !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ladspaCheck
)))
116 if (strcmp (type
, "DSSI") == 0 && !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dssiCheck
)))
119 if (strcmp (type
, "LV2") == 0 && !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lv2Check
)))
122 if( gtk_entry_buffer_get_length (filterBuffer
))
123 entry_text
= (char *) gtk_entry_buffer_get_text (filterBuffer
);
126 (!g_strrstr( name
, entry_text
) &&
127 !g_strrstr( type
, entry_text
) &&
128 !g_strrstr( author
, entry_text
))
144 int ui_init (int argc
, char ** argv
)
146 GError
* gErr
= NULL
;
147 gtk_init (& argc
, & argv
);
149 builder
= gtk_builder_new ();
150 gtk_builder_add_from_file (builder
, DATADIR
"/resorg/browser.ui", & gErr
);
153 gErrorReport (& gErr
);
157 list
= GTK_LIST_STORE (gtk_builder_get_object (builder
, "listStore"));
158 filter
= GTK_TREE_MODEL_FILTER (gtk_builder_get_object (builder
, "listFilter"));
159 sort
= GTK_TREE_MODEL_SORT (gtk_builder_get_object (builder
, "listSort"));
160 view
= GTK_TREE_VIEW (gtk_builder_get_object (builder
, "treeView"));
161 filterBuffer
= gtk_entry_get_buffer (GTK_ENTRY (gtk_builder_get_object (builder
, "filterEntry")));
162 ladspaCheck
= GTK_CHECK_BUTTON (gtk_builder_get_object (builder
, "ladspaCheck"));
163 dssiCheck
= GTK_CHECK_BUTTON (gtk_builder_get_object (builder
, "dssiCheck"));
164 lv2Check
= GTK_CHECK_BUTTON (gtk_builder_get_object (builder
, "lv2Check"));
165 vstCheck
= GTK_CHECK_BUTTON (gtk_builder_get_object (builder
, "vstCheck"));
166 win
= GTK_WIDGET (gtk_builder_get_object (builder
, "mainWin"));
169 GtkTargetEntry entry
= {
171 .flags
= GTK_TARGET_OTHER_APP
,
175 gtk_drag_source_set (GTK_WIDGET (view
), GDK_BUTTON1_MASK
, & entry
, 1, GDK_ACTION_COPY
);
176 gtk_tree_view_enable_model_drag_source (view
, GDK_BUTTON1_MASK
, & entry
, 1, GDK_ACTION_COPY
);
179 gtk_tree_model_filter_set_visible_func (filter
, filter_visible
, NULL
, NULL
);
180 gtk_builder_connect_signals (builder
, NULL
);
181 gtk_tree_view_column_clicked (gtk_tree_view_get_column (view
, COL_NAME
));