1 |
/* GTKtalog. |
2 |
* Copyright (C) 1999-2000 Mathieu VILLEGAS |
3 |
* |
4 |
* This program is free software; you can redistribute it and/or modify |
5 |
* it under the terms of the GNU General Public License as published by |
6 |
* the Free Software Foundation; either version 2 of the License, or |
7 |
* (at your option) any later version. |
8 |
* |
9 |
* This program is distributed in the hope that it will be useful, |
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 |
* GNU General Public License for more details. |
13 |
* |
14 |
* You should have received a copy of the GNU General Public License |
15 |
* along with this program; if not, write to the Free Software |
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
17 |
*/ |
18 |
|
19 |
#include <config.h> |
20 |
#include <gnome.h> |
21 |
#include <stdio.h> |
22 |
#include <stdlib.h> |
23 |
|
24 |
#include "selectdir.h" |
25 |
#include "edit.h" |
26 |
#include "categories.h" |
27 |
#include "interface.h" |
28 |
#include "config_common.h" |
29 |
#include "folder.h" |
30 |
#include "io.h" |
31 |
#include "fastaddisk.h" |
32 |
#include "addisk.h" |
33 |
#include "exit.h" |
34 |
#include "thread_utils.h" |
35 |
|
36 |
static GtkWidget *edit_window; |
37 |
static GtkWidget *fold_entry; |
38 |
static GtkWidget *cat_box; |
39 |
static GtkWidget *cat_combo; |
40 |
static GtkWidget *cat_ed; |
41 |
static GtkWidget *desc_combo; |
42 |
static GtkWidget *recursive_category; |
43 |
static GtkWidget *recursive_description; |
44 |
static GtkWidget *widget_is_description_empty; |
45 |
static GtkWidget *widget_is_category_empty; |
46 |
|
47 |
struct _gnode_and_string |
48 |
{ |
49 |
GNode *gn; |
50 |
gchar *s; |
51 |
}; |
52 |
|
53 |
gboolean |
54 |
is_file_with_the_same_name (GNode * gn, gpointer data) |
55 |
{ |
56 |
FILE_DATA *fd; |
57 |
struct _gnode_and_string *gns = data; |
58 |
|
59 |
if (G_NODE_IS_ROOT (gn)) |
60 |
return (FALSE); |
61 |
fd = get_file_data_from_gnode (gn); |
62 |
if (strcmp (gns->s, fd->name->str) == 0) |
63 |
{ |
64 |
gns->gn = gn; |
65 |
return (TRUE); |
66 |
} |
67 |
return (FALSE); |
68 |
|
69 |
} |
70 |
|
71 |
gboolean |
72 |
_change_category (GNode * gn, gpointer data) |
73 |
{ |
74 |
g_assert (!G_NODE_IS_ROOT (gn)); |
75 |
if (is_link (gn->parent) == FALSE) |
76 |
{ |
77 |
change_category (gn, GPOINTER_TO_UINT (data)); |
78 |
} |
79 |
return (FALSE); |
80 |
} |
81 |
|
82 |
gboolean |
83 |
_change_description (GNode * gn, gpointer data) |
84 |
{ |
85 |
g_assert (!G_NODE_IS_ROOT (gn)); |
86 |
if (is_link (gn->parent) == FALSE) |
87 |
{ |
88 |
change_description (gn, GPOINTER_TO_UINT (data)); |
89 |
} |
90 |
return (FALSE); |
91 |
} |
92 |
|
93 |
gint |
94 |
description_add (GPtrArray * description_array, gchar * text) |
95 |
{ |
96 |
gint i; |
97 |
i = string_to_index (description_array, text); |
98 |
if (i) |
99 |
return (i); |
100 |
g_ptr_array_add (description_array, g_string_new (text)); |
101 |
return (description_array->len); |
102 |
} |
103 |
|
104 |
static void |
105 |
ok_clicked (GtkWidget * w, gpointer data) |
106 |
{ |
107 |
FOLDER *racine = data; |
108 |
G_CONST_RETURN gchar *entry_text, *entry_text2, *entry_text3; |
109 |
GNode *gn; |
110 |
FILE_DATA *fd; |
111 |
GtkCTreeNode *gtknode; |
112 |
PIX *pix; |
113 |
GNode *tmpgn; |
114 |
gboolean gc_descriptions_flag; |
115 |
|
116 |
gn = racine->selected_folder; |
117 |
fd = get_file_data_from_gnode (gn); |
118 |
|
119 |
entry_text = gtk_entry_get_text (GTK_ENTRY (fold_entry)); |
120 |
entry_text2 = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (cat_combo)->entry)); |
121 |
entry_text3 = |
122 |
gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (desc_combo)->entry)); |
123 |
|
124 |
if (strlen (entry_text) == 0) |
125 |
{ |
126 |
ERROR_DIALOG (_("Name field is empty.\nType a file name or cancel."), |
127 |
edit_window); |
128 |
return; |
129 |
} |
130 |
/* Is there a filename with the same name as entry_text ? */ |
131 |
if (strcmp (fd->name->str, entry_text)) |
132 |
{ |
133 |
static struct _gnode_and_string gns; |
134 |
gns.gn = NULL; |
135 |
gns.s = (gchar *) entry_text; |
136 |
|
137 |
g_node_traverse (gn->parent, G_POST_ORDER, G_TRAVERSE_ALL, 2, |
138 |
is_file_with_the_same_name, &gns); |
139 |
tmpgn = gns.gn; |
140 |
if ((tmpgn) && (tmpgn != gn->parent)) |
141 |
{ |
142 |
ERROR_DIALOG (_("A file/dir with the same name " |
143 |
"already exists in this directory"), edit_window); |
144 |
return; |
145 |
} |
146 |
} |
147 |
|
148 |
/* Change the category */ |
149 |
if (gtk_toggle_button_get_active |
150 |
(GTK_TOGGLE_BUTTON (widget_is_category_empty))) |
151 |
{ |
152 |
fd->categorie = |
153 |
string_to_index (racine->categories, (gchar *) entry_text2); |
154 |
} |
155 |
else |
156 |
fd->categorie = 0; |
157 |
|
158 |
my_config->edit_category_is_recursive = FALSE; |
159 |
|
160 |
if ((is_file (racine->selected_folder) == FALSE) |
161 |
&& (is_link (racine->selected_folder) == FALSE)) |
162 |
{ |
163 |
my_config->edit_category_is_recursive = TRUE; |
164 |
if (gtk_toggle_button_get_active |
165 |
(GTK_TOGGLE_BUTTON (recursive_category))) |
166 |
{ |
167 |
g_node_traverse (gn, G_PRE_ORDER, G_TRAVERSE_ALL, -1, |
168 |
_change_category, |
169 |
GUINT_TO_POINTER (0 + fd->categorie)); |
170 |
} |
171 |
} |
172 |
|
173 |
/* Change the descriptions ? */ |
174 |
gc_descriptions_flag = FALSE; |
175 |
if (gtk_toggle_button_get_active |
176 |
(GTK_TOGGLE_BUTTON (widget_is_description_empty))) |
177 |
{ |
178 |
fd->description = |
179 |
description_add (racine->descriptions, (gchar *) entry_text3); |
180 |
} |
181 |
else |
182 |
{ |
183 |
fd->description = 0; |
184 |
gc_descriptions_flag = TRUE; |
185 |
} |
186 |
|
187 |
my_config->edit_description_is_recursive = FALSE; |
188 |
|
189 |
if ((is_file (racine->selected_folder) == FALSE) |
190 |
&& (is_link (racine->selected_folder) == FALSE)) |
191 |
{ |
192 |
my_config->edit_description_is_recursive = TRUE; |
193 |
if (gtk_toggle_button_get_active |
194 |
(GTK_TOGGLE_BUTTON (recursive_description))) |
195 |
{ |
196 |
g_node_traverse (gn, G_PRE_ORDER, G_TRAVERSE_ALL, -1, |
197 |
_change_description, |
198 |
GUINT_TO_POINTER (0 + fd->description)); |
199 |
} |
200 |
} |
201 |
if (gc_descriptions_flag) |
202 |
description_garbage_collection (); |
203 |
|
204 |
|
205 |
/* Change the name ? */ |
206 |
if (strcmp (fd->name->str, entry_text)) |
207 |
{ |
208 |
g_string_free (fd->name, TRUE); |
209 |
fd->name = g_string_new (entry_text); |
210 |
if ((is_dir (gn)) || (is_disk (gn)) || (is_vfs_any (gn))) |
211 |
{ |
212 |
gtknode = fd->ctree_node; |
213 |
if (g_node_depth (gn) == 2) |
214 |
pix = my_config->default_disk_pix; |
215 |
else |
216 |
pix = my_config->default_dir_pix; |
217 |
gtk_ctree_set_node_info (GTK_CTREE (racine->ctree), |
218 |
gtknode, fd->name->str, 4, |
219 |
pix->pixmap, *(pix->mask), pix->pixmap, |
220 |
*(pix->mask), |
221 |
GTK_CTREE_ROW (gtknode)->is_leaf, |
222 |
GTK_CTREE_ROW (gtknode)->expanded); |
223 |
} |
224 |
|
225 |
|
226 |
} |
227 |
gtk_widget_destroy (edit_window); |
228 |
list_folder (racine->selected_folder->parent, TRUE); |
229 |
racine->selected_folder = NULL; |
230 |
my_config->update_edit_window = FALSE; |
231 |
racine->is_modified = TRUE; |
232 |
} |
233 |
|
234 |
void |
235 |
delete_folder (GtkWidget * w, FOLDER * racine) |
236 |
{ |
237 |
GNode *parent; |
238 |
GNode *gn; |
239 |
GList *gl; |
240 |
GList *gl_del = NULL; |
241 |
|
242 |
if (yes_no_dialog (_("Deletion confirmation"), _("Really delete?"))) |
243 |
return; |
244 |
|
245 |
parent = racine->selected_folder->parent; |
246 |
gtk_clist_freeze (GTK_CLIST (racine->ctree)); |
247 |
gl = (GTK_CLIST (clist))->selection; |
248 |
if (g_list_length (gl) > 1) |
249 |
{ |
250 |
while (gl) |
251 |
{ |
252 |
gn = |
253 |
gtk_clist_get_row_data (GTK_CLIST (clist), |
254 |
GPOINTER_TO_INT (gl->data)); |
255 |
gl_del = g_list_append (gl_del, gn); |
256 |
gl = g_list_next (gl); |
257 |
} |
258 |
gl = gl_del; |
259 |
while (gl) |
260 |
{ |
261 |
gn = gl->data; |
262 |
suppress_dir (gn, TRUE); |
263 |
gl = g_list_next (gl); |
264 |
} |
265 |
g_list_free (gl_del); |
266 |
} |
267 |
else |
268 |
{ |
269 |
suppress_dir (racine->selected_folder, TRUE); |
270 |
} |
271 |
description_garbage_collection (); |
272 |
gtk_clist_thaw (GTK_CLIST (racine->ctree)); |
273 |
list_folder (parent, TRUE); |
274 |
} |
275 |
|
276 |
static void |
277 |
cancel_clicked (GtkWidget * w, gpointer data) |
278 |
{ |
279 |
gtk_widget_destroy (edit_window); |
280 |
my_config->update_edit_window = FALSE; |
281 |
return; |
282 |
} |
283 |
|
284 |
static void |
285 |
destroy_window (GtkWidget * w, GdkEventKey * event, gpointer data) |
286 |
{ |
287 |
cancel_clicked (w, data); |
288 |
} |
289 |
|
290 |
void |
291 |
update_category_combo (FOLDER * racine) |
292 |
{ |
293 |
FILE_DATA *fd; |
294 |
GList *cat_list; |
295 |
gint i; |
296 |
|
297 |
cat_list = NULL; |
298 |
for (i = 0; i < racine->categories->len; i++) |
299 |
cat_list = g_list_append (cat_list, ((GString *) |
300 |
g_ptr_array_index |
301 |
(racine->categories, i))->str); |
302 |
if (cat_list) |
303 |
gtk_combo_set_popdown_strings (GTK_COMBO (cat_combo), cat_list); |
304 |
gtk_editable_set_editable (GTK_EDITABLE (GTK_COMBO (cat_combo)->entry), |
305 |
FALSE); |
306 |
fd = get_file_data_from_gnode (racine->selected_folder); |
307 |
if (fd->categorie) |
308 |
{ |
309 |
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (cat_combo)->entry), |
310 |
get_categorie (racine, fd->categorie)); |
311 |
} |
312 |
gtk_widget_show (cat_combo); |
313 |
|
314 |
} |
315 |
|
316 |
void |
317 |
_edit_categories (GtkWidget * w, FOLDER * racine) |
318 |
{ |
319 |
edit_categories (racine); |
320 |
} |
321 |
|
322 |
void |
323 |
desc_sw_clicked (GtkWidget * w, gpointer data) |
324 |
{ |
325 |
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))) |
326 |
{ |
327 |
gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE); |
328 |
} |
329 |
else |
330 |
{ |
331 |
gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE); |
332 |
} |
333 |
} |
334 |
|
335 |
void |
336 |
edit_folder (GtkWidget * w, FOLDER * racine) |
337 |
{ |
338 |
GtkWidget *vbox, *hbox, *the_box; |
339 |
GtkWidget *hboxdc; |
340 |
GtkWidget *ok, *cancel; |
341 |
GtkWidget *frame; |
342 |
FILE_DATA *fd; |
343 |
|
344 |
|
345 |
GList *cat_list; |
346 |
|
347 |
GList *desc_list; |
348 |
int i; |
349 |
GtkAccelGroup *accel_group; |
350 |
|
351 |
accel_group = gtk_accel_group_new (); |
352 |
|
353 |
if (racine->selected_folder != NULL) |
354 |
{ |
355 |
|
356 |
fd = get_file_data_from_gnode (racine->selected_folder); |
357 |
/* Window */ |
358 |
edit_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
359 |
|
360 |
gtk_window_set_modal (GTK_WINDOW (edit_window), TRUE); |
361 |
gtk_window_set_transient_for (GTK_WINDOW (edit_window), |
362 |
GTK_WINDOW (main_window)); |
363 |
|
364 |
gtk_window_set_position (GTK_WINDOW (edit_window), GTK_WIN_POS_MOUSE); |
365 |
if ((is_file (racine->selected_folder)) |
366 |
|| (is_link (racine->selected_folder))) |
367 |
gtk_widget_set_usize (GTK_WIDGET (edit_window), 300, 170); |
368 |
else |
369 |
gtk_widget_set_usize (GTK_WIDGET (edit_window), 300, 210); |
370 |
if (is_disk (racine->selected_folder)) |
371 |
{ |
372 |
gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit disk")); |
373 |
gtk_window_set_wmclass (GTK_WINDOW (edit_window), _("Edit disk"), |
374 |
"GTKtalog"); |
375 |
} |
376 |
else if (is_vfs_any (racine->selected_folder)) |
377 |
{ |
378 |
gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit vfs")); |
379 |
gtk_window_set_wmclass (GTK_WINDOW (edit_window), _("Edit vfs"), |
380 |
"GTKtalog"); |
381 |
} |
382 |
else if (is_link (racine->selected_folder)) |
383 |
{ |
384 |
gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit link")); |
385 |
gtk_window_set_wmclass (GTK_WINDOW (edit_window), _("Edit link"), |
386 |
"GTKtalog"); |
387 |
} |
388 |
else if (is_dir (racine->selected_folder)) |
389 |
{ |
390 |
gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit folder")); |
391 |
gtk_window_set_wmclass (GTK_WINDOW (edit_window), _("Edit folder"), |
392 |
"GTKtalog"); |
393 |
} |
394 |
else if (is_file (racine->selected_folder)) |
395 |
{ |
396 |
gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit file")); |
397 |
gtk_window_set_wmclass (GTK_WINDOW (edit_window), _("Edit file"), |
398 |
"GTKtalog"); |
399 |
} |
400 |
gtk_window_set_policy (GTK_WINDOW (edit_window), TRUE, TRUE, TRUE); |
401 |
gtk_container_border_width (GTK_CONTAINER (edit_window), 10); |
402 |
gtk_signal_connect (GTK_OBJECT (edit_window), |
403 |
"delete_event", G_CALLBACK (destroy_window), NULL); |
404 |
|
405 |
vbox = gtk_vbox_new (FALSE, 0); |
406 |
gtk_container_add (GTK_CONTAINER (edit_window), vbox); |
407 |
gtk_widget_show (vbox); |
408 |
|
409 |
/* First frame (edit label) */ |
410 |
frame = gtk_frame_new (NULL); |
411 |
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); |
412 |
if (is_disk (racine->selected_folder)) |
413 |
gtk_frame_set_label (GTK_FRAME (frame), _("Edit disk label")); |
414 |
else if (is_vfs_any (racine->selected_folder)) |
415 |
gtk_frame_set_label (GTK_FRAME (frame), _("Vfs label")); |
416 |
else if (is_link (racine->selected_folder)) |
417 |
gtk_frame_set_label (GTK_FRAME (frame), _("Link label")); |
418 |
else if (is_dir (racine->selected_folder)) |
419 |
gtk_frame_set_label (GTK_FRAME (frame), _("Directory label")); |
420 |
else if (is_file (racine->selected_folder)) |
421 |
gtk_frame_set_label (GTK_FRAME (frame), _("File label")); |
422 |
gtk_frame_set_label_align (GTK_FRAME (frame), 0.0, 0.0); |
423 |
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); |
424 |
gtk_widget_show (frame); |
425 |
|
426 |
fold_entry = gtk_entry_new_with_max_length (80); |
427 |
gtk_signal_connect (GTK_OBJECT (fold_entry), "activate", |
428 |
GTK_SIGNAL_FUNC (ok_clicked), racine); |
429 |
gtk_entry_set_text (GTK_ENTRY (fold_entry), fd->name->str); |
430 |
gtk_entry_select_region (GTK_ENTRY (fold_entry), |
431 |
0, GTK_ENTRY (fold_entry)->text_length); |
432 |
gtk_container_add (GTK_CONTAINER (frame), fold_entry); |
433 |
|
434 |
gtk_widget_show (fold_entry); |
435 |
|
436 |
/* Second entry (category combo box) */ |
437 |
frame = gtk_frame_new (NULL); |
438 |
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); |
439 |
if (is_disk (racine->selected_folder)) |
440 |
gtk_frame_set_label (GTK_FRAME (frame), _("Change disk category")); |
441 |
else if (is_vfs (racine->selected_folder)) |
442 |
gtk_frame_set_label (GTK_FRAME (frame), _("Change vfs category")); |
443 |
else if (is_link (racine->selected_folder)) |
444 |
gtk_frame_set_label (GTK_FRAME (frame), _("Change link category")); |
445 |
else if (is_dir (racine->selected_folder)) |
446 |
gtk_frame_set_label (GTK_FRAME (frame), |
447 |
_("Change directory category")); |
448 |
else if (is_file (racine->selected_folder)) |
449 |
gtk_frame_set_label (GTK_FRAME (frame), _("Change file category")); |
450 |
gtk_frame_set_label_align (GTK_FRAME (frame), 0.0, 0.0); |
451 |
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); |
452 |
gtk_widget_show (frame); |
453 |
|
454 |
cat_box = gtk_hbox_new (FALSE, 0); |
455 |
gtk_container_add (GTK_CONTAINER (frame), cat_box); |
456 |
gtk_widget_show (cat_box); |
457 |
|
458 |
widget_is_category_empty = gtk_check_button_new (); |
459 |
if (fd->categorie) |
460 |
{ |
461 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
462 |
(widget_is_category_empty), TRUE); |
463 |
} |
464 |
else |
465 |
{ |
466 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
467 |
(widget_is_category_empty), FALSE); |
468 |
} |
469 |
gtk_box_pack_start (GTK_BOX (cat_box), widget_is_category_empty, |
470 |
FALSE, TRUE, 0); |
471 |
gtk_widget_show (widget_is_category_empty); |
472 |
|
473 |
cat_combo = gtk_combo_new (); |
474 |
gtk_combo_set_value_in_list (GTK_COMBO (cat_combo), FALSE, TRUE); |
475 |
gtk_combo_set_use_arrows_always (GTK_COMBO (cat_combo), TRUE); |
476 |
gtk_combo_disable_activate (GTK_COMBO (cat_combo)); |
477 |
gtk_box_pack_start (GTK_BOX (cat_box), cat_combo, TRUE, TRUE, 0); |
478 |
cat_list = NULL; |
479 |
for (i = 0; i < racine->categories->len; i++) |
480 |
cat_list = g_list_append (cat_list, ((GString *) |
481 |
g_ptr_array_index |
482 |
(racine->categories, i))->str); |
483 |
if (cat_list) |
484 |
{ |
485 |
gtk_combo_set_popdown_strings (GTK_COMBO (cat_combo), cat_list); |
486 |
g_list_free (cat_list); |
487 |
} |
488 |
gtk_editable_set_editable (GTK_EDITABLE (GTK_COMBO (cat_combo)->entry), |
489 |
FALSE); |
490 |
if (fd->categorie) |
491 |
{ |
492 |
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (cat_combo)->entry), |
493 |
get_categorie (racine, fd->categorie)); |
494 |
gtk_widget_set_sensitive (GTK_WIDGET (cat_combo), TRUE); |
495 |
} |
496 |
else |
497 |
{ |
498 |
gtk_widget_set_sensitive (GTK_WIDGET (cat_combo), FALSE); |
499 |
} |
500 |
gtk_widget_show (cat_combo); |
501 |
|
502 |
|
503 |
cat_ed = gtk_button_new_with_label ("..."); |
504 |
gtk_box_pack_start (GTK_BOX (cat_box), cat_ed, FALSE, FALSE, 0); |
505 |
gtk_signal_connect (GTK_OBJECT (cat_ed), "clicked", |
506 |
GTK_SIGNAL_FUNC (_edit_categories), racine); |
507 |
gtk_widget_show (cat_ed); |
508 |
gtk_signal_connect (GTK_OBJECT (widget_is_category_empty), "clicked", |
509 |
GTK_SIGNAL_FUNC (desc_sw_clicked), cat_combo); |
510 |
|
511 |
|
512 |
/* Third entry (description combo box) */ |
513 |
|
514 |
frame = gtk_frame_new (NULL); |
515 |
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); |
516 |
gtk_frame_set_label (GTK_FRAME (frame), _("Edit description")); |
517 |
gtk_frame_set_label_align (GTK_FRAME (frame), 0.0, 0.0); |
518 |
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); |
519 |
gtk_widget_show (frame); |
520 |
|
521 |
hboxdc = gtk_hbox_new (FALSE, 0); |
522 |
gtk_container_add (GTK_CONTAINER (frame), hboxdc); |
523 |
gtk_widget_show (hboxdc); |
524 |
|
525 |
widget_is_description_empty = gtk_check_button_new (); |
526 |
if (fd->description) |
527 |
{ |
528 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
529 |
(widget_is_description_empty), TRUE); |
530 |
} |
531 |
else |
532 |
{ |
533 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
534 |
(widget_is_description_empty), FALSE); |
535 |
} |
536 |
gtk_box_pack_start (GTK_BOX (hboxdc), widget_is_description_empty, |
537 |
FALSE, TRUE, 0); |
538 |
gtk_widget_show (widget_is_description_empty); |
539 |
|
540 |
|
541 |
desc_combo = gtk_combo_new (); |
542 |
gtk_combo_set_value_in_list (GTK_COMBO (desc_combo), FALSE, TRUE); |
543 |
gtk_combo_set_use_arrows_always (GTK_COMBO (desc_combo), TRUE); |
544 |
gtk_combo_disable_activate (GTK_COMBO (desc_combo)); |
545 |
gtk_container_add (GTK_CONTAINER (hboxdc), desc_combo); |
546 |
desc_list = NULL; |
547 |
for (i = 0; i < racine->descriptions->len; i++) |
548 |
{ |
549 |
desc_list = g_list_append (desc_list, ((GString *) |
550 |
g_ptr_array_index |
551 |
(racine->descriptions, |
552 |
i))->str); |
553 |
} |
554 |
if (desc_list) |
555 |
gtk_combo_set_popdown_strings (GTK_COMBO (desc_combo), desc_list); |
556 |
if (fd->description) |
557 |
{ |
558 |
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (desc_combo)->entry), |
559 |
get_description (racine, fd->description)); |
560 |
} |
561 |
gtk_widget_show (desc_combo); |
562 |
|
563 |
|
564 |
if (fd->description) |
565 |
{ |
566 |
gtk_widget_set_sensitive (GTK_WIDGET (desc_combo), TRUE); |
567 |
} |
568 |
else |
569 |
{ |
570 |
gtk_widget_set_sensitive (GTK_WIDGET (desc_combo), FALSE); |
571 |
} |
572 |
gtk_signal_connect (GTK_OBJECT (widget_is_description_empty), "clicked", |
573 |
GTK_SIGNAL_FUNC (desc_sw_clicked), desc_combo); |
574 |
|
575 |
if ((is_file (racine->selected_folder) == FALSE) |
576 |
&& (is_link (racine->selected_folder) == FALSE)) |
577 |
{ |
578 |
frame = gtk_frame_new (NULL); |
579 |
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); |
580 |
gtk_frame_set_label (GTK_FRAME (frame), |
581 |
_("Propagate in subdirs and files")); |
582 |
gtk_frame_set_label_align (GTK_FRAME (frame), 0.0, 0.0); |
583 |
gtk_frame_set_shadow_type (GTK_FRAME (frame), |
584 |
GTK_SHADOW_ETCHED_OUT); |
585 |
gtk_widget_show (frame); |
586 |
|
587 |
the_box = gtk_hbox_new (FALSE, 0); |
588 |
gtk_container_add (GTK_CONTAINER (frame), the_box); |
589 |
gtk_widget_show (the_box); |
590 |
|
591 |
recursive_category = |
592 |
gtk_check_button_new_with_label (_("Category")); |
593 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
594 |
(recursive_category), |
595 |
my_config-> |
596 |
edit_category_is_recursive); |
597 |
gtk_box_pack_start (GTK_BOX (the_box), recursive_category, FALSE, |
598 |
TRUE, 0); |
599 |
gtk_widget_show (recursive_category); |
600 |
|
601 |
recursive_description = |
602 |
gtk_check_button_new_with_label (_("Description")); |
603 |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON |
604 |
(recursive_description), |
605 |
my_config-> |
606 |
edit_description_is_recursive); |
607 |
gtk_box_pack_start (GTK_BOX (the_box), recursive_description, FALSE, |
608 |
TRUE, 0); |
609 |
gtk_widget_show (recursive_description); |
610 |
} |
611 |
|
612 |
/* Buttons */ |
613 |
hbox = gtk_hbutton_box_new (); |
614 |
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); |
615 |
gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 5); |
616 |
|
617 |
#ifdef GNOME1 |
618 |
ok = gnome_stock_button (GNOME_STOCK_BUTTON_OK); |
619 |
#else |
620 |
ok = gtk_button_new_from_stock (GNOME_STOCK_BUTTON_OK); |
621 |
#endif |
622 |
GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT); |
623 |
gtk_window_set_default (GTK_WINDOW (edit_window), ok); |
624 |
gtk_box_pack_start (GTK_BOX (hbox), ok, TRUE, TRUE, 0); |
625 |
gtk_signal_connect (GTK_OBJECT (ok), "clicked", |
626 |
GTK_SIGNAL_FUNC (ok_clicked), racine); |
627 |
gtk_widget_show (ok); |
628 |
|
629 |
#ifdef GNOME1 |
630 |
cancel = gnome_stock_button (GNOME_STOCK_BUTTON_CANCEL); |
631 |
#else |
632 |
cancel = gtk_button_new_from_stock (GNOME_STOCK_BUTTON_CANCEL); |
633 |
#endif |
634 |
GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); |
635 |
gtk_box_pack_start (GTK_BOX (hbox), cancel, TRUE, TRUE, 0); |
636 |
gtk_signal_connect (GTK_OBJECT (cancel), "clicked", |
637 |
G_CALLBACK (cancel_clicked), NULL); |
638 |
gtk_widget_show (cancel); |
639 |
|
640 |
gtk_widget_add_accelerator (cancel, "clicked", accel_group, |
641 |
GDK_Escape, 0, GTK_ACCEL_VISIBLE); |
642 |
|
643 |
gtk_window_add_accel_group (GTK_WINDOW (edit_window), accel_group); |
644 |
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); |
645 |
gtk_widget_show (hbox); |
646 |
|
647 |
gtk_widget_show (edit_window); |
648 |
my_config->update_edit_window = TRUE; |
649 |
|
650 |
} |
651 |
} |
652 |
|
653 |
void |
654 |
update_disk (GtkWidget * w, FOLDER * racine) |
655 |
{ |
656 |
GNode *parent; |
657 |
gchar *folder_name, *disk_name; |
658 |
const gchar *fn; |
659 |
|
660 |
reset_added_disk (); |
661 |
parent = racine->selected_folder; |
662 |
disk_name = g_strdup (folder_get_name (parent)); |
663 |
if (is_cd (parent)) |
664 |
{ |
665 |
folder_name = g_strdup (my_config->mount_point->str); |
666 |
} |
667 |
else |
668 |
{ |
669 |
if ((fn = folder_get_informations (parent))) |
670 |
folder_name = g_strdup (fn); |
671 |
else |
672 |
folder_name = NULL; |
673 |
} |
674 |
if (folder_name) |
675 |
{ |
676 |
if (is_cd (parent)) |
677 |
{ |
678 |
do_not_forget_to_mount (TRUE); |
679 |
if (!mount_disk_if_necessary ()) |
680 |
{ |
681 |
g_free (folder_name); |
682 |
g_free (disk_name); |
683 |
display_message_if_necessary (); |
684 |
reinit_thread_status (); |
685 |
return; |
686 |
} |
687 |
} |
688 |
suppress_dir (racine->selected_folder, TRUE); |
689 |
gtk_clist_clear (GTK_CLIST (clist)); |
690 |
gtk_widget_hide (GTK_WIDGET (clist)); |
691 |
gtk_clist_columns_autosize (GTK_CLIST (clist)); |
692 |
gtk_widget_show (GTK_WIDGET (clist)); |
693 |
if (is_cd (parent)) |
694 |
{ |
695 |
start_add_cd_for_update (folder_name, disk_name, racine); |
696 |
} |
697 |
else |
698 |
{ |
699 |
start_add_disk (folder_name, disk_name, racine); |
700 |
} |
701 |
g_free (folder_name); |
702 |
} |
703 |
else |
704 |
{ |
705 |
ERROR_DIALOG (_ |
706 |
("The disk has an invalid path. Report the bug to the authors."), |
707 |
main_window); |
708 |
} |
709 |
g_free (disk_name); |
710 |
} |