15 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
17 |
*/ |
*/ |
18 |
|
|
19 |
#include <config.h> |
#include <config.h> |
20 |
#include <gnome.h> |
#include <gnome.h> |
21 |
#include <libgnomevfs/gnome-vfs-mime-info.h> |
#include <libgnomevfs/gnome-vfs-mime-info.h> |
157 |
static GtkWidget *setup_vbox; |
static GtkWidget *setup_vbox; |
158 |
static GtkWidget **current_frame; |
static GtkWidget **current_frame; |
159 |
|
|
160 |
static GtkCTreeNode *setup_scan_mime; |
//wk: to remove static GtkCTreeNode *setup_scan_mime; |
161 |
static GtkCTreeNode *setup_scan_info; |
static GtkCTreeNode *setup_scan_info; |
162 |
static GtkCTreeNode *setup_scan_vfs; |
static GtkCTreeNode *setup_scan_vfs; |
163 |
|
|
171 |
GTree *local_ei_extensions; |
GTree *local_ei_extensions; |
172 |
|
|
173 |
GList *backupList; // GList used to backup a list in order to restore the original |
GList *backupList; // GList used to backup a list in order to restore the original |
174 |
// list if the cancel button is pressed |
// list if the cancel button is pressed |
175 |
|
|
176 |
mime_type_to_skip_t mime_type_to_skip_current_selection; |
mime_type_to_skip_t mime_type_to_skip_current_selection; |
177 |
|
vfs_t vfs_current_selection; |
178 |
|
|
179 |
gchar *date_format; |
gchar *date_format; |
180 |
gchar *mount_prog; |
gchar *mount_prog; |
1259 |
return (FALSE); |
return (FALSE); |
1260 |
} |
} |
1261 |
|
|
1262 |
|
//! Creates a model for the VFS treeView |
1263 |
|
static GtkTreeModel * |
1264 |
|
vfs_create_model (void) |
1265 |
|
{ |
1266 |
|
guint i = 0; |
1267 |
|
guint listLength=0; |
1268 |
|
GtkListStore *store; |
1269 |
|
GtkTreeIter iter; |
1270 |
|
vfs_t *tmp; |
1271 |
|
GList* item; |
1272 |
|
|
1273 |
|
store = gtk_list_store_new (VFS_NUM_COLUMNS, |
1274 |
|
G_TYPE_BOOLEAN, //State |
1275 |
|
G_TYPE_STRING, |
1276 |
|
G_TYPE_STRING, |
1277 |
|
G_TYPE_STRING); |
1278 |
|
|
1279 |
|
// *********** JUNK DATA ********************* |
1280 |
|
gtk_list_store_append (store, &iter); |
1281 |
|
g_print("adding junk data in the VFS section",tmp->file_type); |
1282 |
|
gtk_list_store_set (store, &iter, |
1283 |
|
VFS_COLUMN_STATE, 1 , |
1284 |
|
VFS_COLUMN_FILE_TYPE, "file type", |
1285 |
|
VFS_COLUMN_PLUGIN, "plugin", |
1286 |
|
VFS_COLUMN_OPTIONS, "options", |
1287 |
|
-1); |
1288 |
|
|
1289 |
|
// *********** JUNK DATA ********************* |
1290 |
|
gtk_list_store_append (store, &iter); |
1291 |
|
g_print("adding junk data in the VFS section",tmp->file_type); |
1292 |
|
gtk_list_store_set (store, &iter, |
1293 |
|
VFS_COLUMN_STATE, 0 , |
1294 |
|
VFS_COLUMN_FILE_TYPE, "file type again", |
1295 |
|
VFS_COLUMN_PLUGIN, "plugin of the death", |
1296 |
|
VFS_COLUMN_OPTIONS, "options fucking cool", |
1297 |
|
-1); |
1298 |
|
|
1299 |
|
/* |
1300 |
|
item=g_list_first(my_config->vfs_list); |
1301 |
|
while (item) |
1302 |
|
{ |
1303 |
|
gtk_list_store_append (store, &iter); |
1304 |
|
tmp=(vfs_t *)item->data; |
1305 |
|
g_print("adding %s in the model\n",tmp->file_type); |
1306 |
|
gtk_list_store_set (store, &iter, |
1307 |
|
VFS_COLUMN_STATE, tmp->state , |
1308 |
|
VFS_COLUMN_FILE_TYPE, g_strdup(tmp->file_type), |
1309 |
|
VFS_COLUMN_PLUGIN, g_strdup(tmp->plugin), |
1310 |
|
VFS_COLUMN_OPTIONS, g_strdup(tmp->options), |
1311 |
|
-1); |
1312 |
|
|
1313 |
|
item=g_list_next(item); |
1314 |
|
} |
1315 |
|
*/ |
1316 |
|
|
1317 |
|
return GTK_TREE_MODEL (store); |
1318 |
|
} |
1319 |
|
|
1320 |
|
|
1321 |
void |
void |
1322 |
vfs_extensions_free (GTree * vfsext) |
vfs_extensions_free (GTree * vfsext) |
1323 |
{ |
{ |
1512 |
gtk_widget_destroy (vfs_add_type_window); |
gtk_widget_destroy (vfs_add_type_window); |
1513 |
} |
} |
1514 |
|
|
1515 |
|
static void vfs_selection_changed(GtkTreeSelection *selection, |
1516 |
|
gpointer data) |
1517 |
|
{ |
1518 |
|
GtkTreeModel *model=(GtkTreeModel*)data; |
1519 |
|
GtkTreeIter iter; |
1520 |
|
gchar* file_type; |
1521 |
|
gchar* plugin; |
1522 |
|
gchar* options; |
1523 |
|
gint state; |
1524 |
|
gboolean res; |
1525 |
|
|
1526 |
|
res=gtk_tree_selection_get_selected(selection, |
1527 |
|
&model, |
1528 |
|
&iter); |
1529 |
|
|
1530 |
|
// if *data is NULL, it means the tree collapses and no data is available |
1531 |
|
// until the user selects a new row. |
1532 |
|
if (res) |
1533 |
|
{ |
1534 |
|
gtk_tree_model_get (model,&iter, |
1535 |
|
VFS_COLUMN_STATE, &state, |
1536 |
|
VFS_COLUMN_FILE_TYPE, &file_type, |
1537 |
|
VFS_COLUMN_PLUGIN, &plugin, |
1538 |
|
VFS_COLUMN_OPTIONS, &options, |
1539 |
|
-1); |
1540 |
|
gtk_widget_set_sensitive (GTK_WIDGET (ess_button_del), TRUE); |
1541 |
|
|
1542 |
|
//g_print ("\nselection : %s | %d | stamp = %d\n",mime_type, state, iter.stamp); |
1543 |
|
vfs_current_selection.file_type=file_type; |
1544 |
|
vfs_current_selection.state=state; |
1545 |
|
} |
1546 |
|
else |
1547 |
|
{ |
1548 |
|
g_print ("\nselection is empty"); |
1549 |
|
} |
1550 |
|
} |
1551 |
|
|
1552 |
|
|
1553 |
|
//! Change the state in the treeView and in the Glist |
1554 |
|
static void |
1555 |
|
vfs_state_toggled (GtkCellRendererToggle *cell, |
1556 |
|
gchar *path_str, |
1557 |
|
gpointer data) |
1558 |
|
{ |
1559 |
|
GtkTreeModel *model = (GtkTreeModel *)data; |
1560 |
|
GtkTreeIter iter; |
1561 |
|
GtkTreePath *path = gtk_tree_path_new_from_string (path_str); |
1562 |
|
gboolean state; |
1563 |
|
gchar *file_type; |
1564 |
|
gchar *plugin; |
1565 |
|
gchar *options; |
1566 |
|
|
1567 |
|
vfs_t *tmp; |
1568 |
|
gboolean done; |
1569 |
|
|
1570 |
|
GList* item; |
1571 |
|
|
1572 |
|
// get toggled iter |
1573 |
|
gtk_tree_model_get_iter (model, &iter, path); |
1574 |
|
gtk_tree_model_get (model, &iter, VFS_COLUMN_STATE, &state, -1); |
1575 |
|
gtk_tree_model_get (model, &iter, VFS_COLUMN_FILE_TYPE, &file_type, -1); |
1576 |
|
gtk_tree_model_get (model, &iter, VFS_COLUMN_PLUGIN, &plugin, -1); |
1577 |
|
gtk_tree_model_get (model, &iter, VFS_COLUMN_OPTIONS, &options, -1); |
1578 |
|
|
1579 |
|
state ^= 1; |
1580 |
|
|
1581 |
|
// set new value |
1582 |
|
gtk_list_store_set (GTK_LIST_STORE (model), &iter, VFS_COLUMN_STATE, state, -1); |
1583 |
|
|
1584 |
|
//update the glist |
1585 |
|
done=0; |
1586 |
|
item=g_list_first(my_config->vfs_list); |
1587 |
|
while (item && !done) |
1588 |
|
{ |
1589 |
|
tmp=(vfs_t *)item->data; |
1590 |
|
if (!strcmp(tmp->file_type,file_type)) |
1591 |
|
{ |
1592 |
|
tmp->state=state; |
1593 |
|
done=1; |
1594 |
|
g_print ("Lets change state for %s",tmp->file_type); |
1595 |
|
} |
1596 |
|
item=g_list_next(item); |
1597 |
|
} |
1598 |
|
|
1599 |
|
// clean up |
1600 |
|
gtk_tree_path_free (path); |
1601 |
|
} |
1602 |
|
|
1603 |
|
|
1604 |
|
static void |
1605 |
|
vfs_add_columns (GtkTreeView *treeview) |
1606 |
|
{ |
1607 |
|
GtkCellRenderer *renderer; |
1608 |
|
GtkTreeViewColumn *column; |
1609 |
|
GtkTreeModel *model = gtk_tree_view_get_model (treeview); |
1610 |
|
|
1611 |
|
/* column for fixed toggles */ |
1612 |
|
renderer = gtk_cell_renderer_toggle_new (); |
1613 |
|
g_signal_connect (G_OBJECT (renderer), "toggled", |
1614 |
|
G_CALLBACK (vfs_state_toggled), model); |
1615 |
|
|
1616 |
|
column = gtk_tree_view_column_new_with_attributes (_("State"), |
1617 |
|
renderer, |
1618 |
|
"active", MIME_TYPES_TO_SKIP_COLUMN_STATE, |
1619 |
|
NULL); |
1620 |
|
|
1621 |
|
/* set this column to a fixed sizing (of 30 pixels) */ |
1622 |
|
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), |
1623 |
|
GTK_TREE_VIEW_COLUMN_FIXED); |
1624 |
|
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 30); |
1625 |
|
gtk_tree_view_append_column (treeview, column); |
1626 |
|
|
1627 |
|
|
1628 |
|
/* column for file type */ |
1629 |
|
renderer = gtk_cell_renderer_text_new (); |
1630 |
|
column = gtk_tree_view_column_new_with_attributes (_("FILE type"), |
1631 |
|
renderer, "text", |
1632 |
|
VFS_COLUMN_FILE_TYPE, NULL); |
1633 |
|
gtk_tree_view_column_set_sort_column_id (column, VFS_COLUMN_FILE_TYPE); |
1634 |
|
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), |
1635 |
|
GTK_TREE_VIEW_COLUMN_FIXED); |
1636 |
|
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 300); |
1637 |
|
gtk_tree_view_append_column (treeview, column); |
1638 |
|
|
1639 |
|
/* column for plugin */ |
1640 |
|
renderer = gtk_cell_renderer_text_new (); |
1641 |
|
column = gtk_tree_view_column_new_with_attributes (_("Plugin"), |
1642 |
|
renderer, "text", |
1643 |
|
VFS_COLUMN_PLUGIN, NULL); |
1644 |
|
gtk_tree_view_column_set_sort_column_id (column, VFS_COLUMN_PLUGIN); |
1645 |
|
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), |
1646 |
|
GTK_TREE_VIEW_COLUMN_FIXED); |
1647 |
|
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 150); |
1648 |
|
gtk_tree_view_append_column (treeview, column); |
1649 |
|
|
1650 |
|
/* column for options */ |
1651 |
|
renderer = gtk_cell_renderer_text_new (); |
1652 |
|
column = gtk_tree_view_column_new_with_attributes (_("Options"), |
1653 |
|
renderer, "text", |
1654 |
|
VFS_COLUMN_OPTIONS, NULL); |
1655 |
|
gtk_tree_view_column_set_sort_column_id (column, VFS_COLUMN_OPTIONS); |
1656 |
|
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), |
1657 |
|
GTK_TREE_VIEW_COLUMN_FIXED); |
1658 |
|
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 150); |
1659 |
|
gtk_tree_view_append_column (treeview, column); |
1660 |
|
} |
1661 |
|
|
1662 |
|
|
1663 |
void |
void |
1664 |
vfs_add_type (GtkWidget * w, gpointer data) |
vfs_add_type (GtkWidget * w, gpointer data) |
2106 |
{ |
{ |
2107 |
gchar* str1; |
gchar* str1; |
2108 |
gchar* str2; |
gchar* str2; |
2109 |
|
|
2110 |
str1 = el1->mime_type; |
str1 = el1->mime_type; |
2111 |
str2 = el2->mime_type; |
str2 = el2->mime_type; |
2112 |
|
|
2379 |
ess_add_type (w, data); |
ess_add_type (w, data); |
2380 |
} |
} |
2381 |
|
|
2382 |
// This function dumps the content of a glist into stdout. |
//! This function dumps the content of a glist into stdout. |
2383 |
void |
void |
2384 |
disp_glist(GList* glist) |
disp_glist(GList* glist) |
2385 |
{ |
{ |
2618 |
extensions_free (my_config->mime_extensions); |
extensions_free (my_config->mime_extensions); |
2619 |
vfs_extensions_free (my_config->mime_vfs_extensions); |
vfs_extensions_free (my_config->mime_vfs_extensions); |
2620 |
ei_free (my_config->mime_icons); |
ei_free (my_config->mime_icons); |
2621 |
//ess_free (my_config->mime_to_skip_during_a_scan); |
//wk : to remove ess_free (my_config->mime_to_skip_during_a_scan); |
2622 |
|
|
2623 |
my_config->mime_extensions = local_extensions; |
my_config->mime_extensions = local_extensions; |
2624 |
my_config->mime_vfs_extensions = local_vfs_extensions; |
my_config->mime_vfs_extensions = local_vfs_extensions; |
2625 |
my_config->mime_icons = local_ei_extensions; |
my_config->mime_icons = local_ei_extensions; |
2626 |
//my_config->mime_to_skip_during_a_scan = local_ess_extensions; |
//wk: to remove my_config->mime_to_skip_during_a_scan = local_ess_extensions; |
2627 |
|
|
2628 |
eip_split_default_pix (&(my_config->default_file_pix), |
eip_split_default_pix (&(my_config->default_file_pix), |
2629 |
default_file_pix_string); |
default_file_pix_string); |
3380 |
return GTK_TREE_MODEL (store); |
return GTK_TREE_MODEL (store); |
3381 |
} |
} |
3382 |
|
|
3383 |
// Change the state in the treeView and in the Glist |
//! Change the state in the treeView and in the Glist |
|
// wk: lwh |
|
3384 |
static void |
static void |
3385 |
mime_types_to_skip_state_toggled (GtkCellRendererToggle *cell, |
mime_types_to_skip_state_toggled (GtkCellRendererToggle *cell, |
3386 |
gchar *path_str, |
gchar *path_str, |
3462 |
} |
} |
3463 |
|
|
3464 |
|
|
3465 |
|
//! Important function. This one draws the whole content of the setup dialog GUI. |
3466 |
void |
void |
3467 |
run_setup () |
run_setup () |
3468 |
{ |
{ |
4593 |
(scrolled_window), main_box); |
(scrolled_window), main_box); |
4594 |
gtk_widget_show (main_box); |
gtk_widget_show (main_box); |
4595 |
|
|
4596 |
/* The vfs plugin list */ |
/* setup box to associate vfs plugins to mimes */ |
4597 |
scrolled_window = gtk_scrolled_window_new (NULL, NULL); |
model=vfs_create_model(); |
4598 |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), |
vfs_include_list_box = gtk_tree_view_new_with_model (GTK_TREE_MODEL(model)); |
4599 |
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); |
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (vfs_include_list_box), TRUE); |
4600 |
|
gtk_tree_view_set_search_column (GTK_TREE_VIEW (vfs_include_list_box), VFS_COLUMN_FILE_TYPE); |
4601 |
|
|
4602 |
|
//g_object_unref (G_OBJECT (model)); |
4603 |
|
|
4604 |
|
// show the clist |
4605 |
|
// wk : changed scrolled_window -> main_box |
4606 |
|
gtk_container_add (GTK_CONTAINER (main_box), vfs_include_list_box); |
4607 |
|
vfs_add_columns(GTK_TREE_VIEW(vfs_include_list_box)); |
4608 |
|
gtk_widget_show (vfs_include_list_box); |
4609 |
|
|
4610 |
gtk_box_pack_start (GTK_BOX (main_box), scrolled_window, TRUE, TRUE, 0); |
g_signal_connect (G_OBJECT (gtk_tree_view_get_selection((GtkTreeView*)vfs_include_list_box)), |
4611 |
gtk_widget_show (scrolled_window); |
"changed", |
4612 |
|
GTK_SIGNAL_FUNC (vfs_selection_changed), model); |
4613 |
|
|
4614 |
|
|
4615 |
/* setup box to associate vfs plugins to mimes */ |
// wk: lwh |
4616 |
vfs_include_list_box = gtk_clist_new_with_titles (4, titles); |
//vfs_include_list_box = gtk_clist_new_with_titles (4, titles); |
4617 |
g_signal_connect (GTK_OBJECT (vfs_include_list_box), |
//g_signal_connect (GTK_OBJECT (vfs_include_list_box), |
4618 |
"select_row", |
// "select_row", |
4619 |
GTK_SIGNAL_FUNC (vfs_include_selection_made), NULL); |
// GTK_SIGNAL_FUNC (vfs_include_selection_made), NULL); |
4620 |
g_signal_connect (GTK_OBJECT (vfs_include_list_box), "unselect_row", |
//g_signal_connect (GTK_OBJECT (vfs_include_list_box), "unselect_row", |
4621 |
GTK_SIGNAL_FUNC (vfs_include_unselection_made), NULL); |
// GTK_SIGNAL_FUNC (vfs_include_unselection_made), NULL); |
4622 |
|
|
4623 |
gtk_clist_set_shadow_type (GTK_CLIST (vfs_include_list_box), |
//gtk_clist_set_shadow_type (GTK_CLIST (vfs_include_list_box), |
4624 |
GTK_SHADOW_OUT); |
// GTK_SHADOW_OUT); |
4625 |
|
|
4626 |
gtk_clist_set_column_justification (GTK_CLIST |
//gtk_clist_set_column_justification (GTK_CLIST |
4627 |
(vfs_include_list_box), 0, |
// (vfs_include_list_box), 0, |
4628 |
GTK_JUSTIFY_CENTER); |
// GTK_JUSTIFY_CENTER); |
4629 |
|
|
4630 |
gtk_clist_set_compare_func (GTK_CLIST (vfs_include_list_box), |
//gtk_clist_set_compare_func (GTK_CLIST (vfs_include_list_box), |
4631 |
_clist_g_strcasecmp); |
// _clist_g_strcasecmp); |
4632 |
|
|
4633 |
gtk_clist_set_sort_column (GTK_CLIST (vfs_include_list_box), 1); |
//gtk_clist_set_sort_column (GTK_CLIST (vfs_include_list_box), 1); |
4634 |
gtk_clist_set_sort_type (GTK_CLIST (vfs_include_list_box), |
//gtk_clist_set_sort_type (GTK_CLIST (vfs_include_list_box), |
4635 |
GTK_SORT_ASCENDING); |
// GTK_SORT_ASCENDING); |
4636 |
|
|
4637 |
/* fill the clist */ |
/* fill the clist */ |
4638 |
g_tree_traverse (local_vfs_extensions, vfs_extensions_traverse, G_PRE_ORDER, |
//g_tree_traverse (local_vfs_extensions, vfs_extensions_traverse, G_PRE_ORDER, |
4639 |
NULL); |
// NULL); |
4640 |
|
|
4641 |
/* show the clist */ |
/* show the clist */ |
4642 |
gtk_container_add (GTK_CONTAINER (scrolled_window), vfs_include_list_box); |
//gtk_container_add (GTK_CONTAINER (scrolled_window), vfs_include_list_box); |
4643 |
gtk_widget_show (vfs_include_list_box); |
//gtk_widget_show (vfs_include_list_box); |
4644 |
gtk_clist_sort (GTK_CLIST (vfs_include_list_box)); |
//gtk_clist_sort (GTK_CLIST (vfs_include_list_box)); |
4645 |
gtk_clist_columns_autosize (GTK_CLIST (vfs_include_list_box)); |
//gtk_clist_columns_autosize (GTK_CLIST (vfs_include_list_box)); |
4646 |
|
|
4647 |
hbox = gtk_hbutton_box_new (); |
hbox = gtk_hbutton_box_new (); |
4648 |
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); |
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); |