From 1bf4926ff7f4300f997af71544cd43746bc39c8a Mon Sep 17 00:00:00 2001 From: Jonathan Blandford Date: Fri, 9 Apr 1999 22:57:47 +0000 Subject: [PATCH] began adding new add window. Will finish it later tonight... -Jonathan --- gnome/mime-type/Makefile.am | 3 +- gnome/mime-type/edit-window.c | 2 +- gnome/mime-type/mime-data.c | 37 +++++++--- gnome/mime-type/mime-data.h | 2 +- gnome/mime-type/mime-info.c | 2 +- gnome/mime-type/mime-type-capplet.c | 32 ++++++-- gnome/mime-type/new-mime-window.c | 109 ++++++++++++++++++++++++++++ gnome/mime-type/new-mime-window.h | 14 ++++ 8 files changed, 179 insertions(+), 22 deletions(-) create mode 100644 gnome/mime-type/new-mime-window.c create mode 100644 gnome/mime-type/new-mime-window.h diff --git a/gnome/mime-type/Makefile.am b/gnome/mime-type/Makefile.am index 08a54335c..c2fd6bfdf 100644 --- a/gnome/mime-type/Makefile.am +++ b/gnome/mime-type/Makefile.am @@ -8,7 +8,8 @@ bin_PROGRAMS = mime-type-capplet mime_type_capplet_SOURCES = mime-type-capplet.c\ mime-data.h mime-data.c edit-window.c\ - edit-window.h mime-info.c mime-info.h + edit-window.h mime-info.c mime-info.h \ + new-mime-window.h new-mime-window.c mime_type_capplet_LDADD = ../../control-center/libcapplet.la \ $(GNOME_LIBDIR) $(ORB_LIBS) \ diff --git a/gnome/mime-type/edit-window.c b/gnome/mime-type/edit-window.c index 5c37a2632..4229c2d05 100644 --- a/gnome/mime-type/edit-window.c +++ b/gnome/mime-type/edit-window.c @@ -145,7 +145,7 @@ initialize_main_win () gtk_box_pack_start (GTK_BOX (hbox), main_win->regexp2_label, FALSE, FALSE, 0); /* Actions box */ - frame = gtk_frame_new (_("Mime-Type Actions")); + frame = gtk_frame_new (_("Mime Type Actions")); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); table = gtk_table_new (3, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), GNOME_PAD_SMALL); diff --git a/gnome/mime-type/mime-data.c b/gnome/mime-type/mime-data.c index 648857464..eb1a63a1b 100644 --- a/gnome/mime-type/mime-data.c +++ b/gnome/mime-type/mime-data.c @@ -13,16 +13,19 @@ #include "edit-window.h" #include "mime-data.h" #include "mime-info.h" +#include "new-mime-window.h" /* Prototypes */ -static void mime_fill_from_file (const char *filename); +static void mime_fill_from_file (const char *filename, gboolean init_user); static void mime_load_from_dir (const char *mime_info_dir, gboolean system_dir); -static void add_to_key (char *mime_type, char *def); +static void add_to_key (char *mime_type, char *def, GHashTable *table); static char *get_priority (char *def, int *priority); /* Global variables */ static char *current_lang; static GHashTable *mime_types = NULL; +static GHashTable *initial_user_mime_types = NULL; +static GHashTable *user_mime_types = NULL; static GtkWidget *clist = NULL; /* Initialization functions */ @@ -48,14 +51,14 @@ get_priority (char *def, int *priority) return def; } static void -add_to_key (char *mime_type, char *def) +add_to_key (char *mime_type, char *def, GHashTable *table) { int priority = 1; char *s, *p, *ext; int used; MimeInfo *info; - - info = g_hash_table_lookup (mime_types, (const void *) mime_type); + + info = g_hash_table_lookup (table, (const void *) mime_type); if (info == NULL) { info = g_malloc (sizeof (MimeInfo)); info->mime_type = g_strdup (mime_type); @@ -68,7 +71,7 @@ add_to_key (char *mime_type, char *def) info->ext_readable[0] = NULL; info->ext_readable[1] = NULL; info->keys = gnome_mime_get_keys (mime_type); - g_hash_table_insert (mime_types, mime_type, info); + g_hash_table_insert (table, mime_type, info); } if (strncmp (def, "ext", 3) == 0){ char *tokp; @@ -111,7 +114,7 @@ add_to_key (char *mime_type, char *def) } } static void -mime_fill_from_file (const char *filename) +mime_fill_from_file (const char *filename, gboolean init_user) { FILE *f; char buf [1024]; @@ -152,8 +155,11 @@ mime_fill_from_file (const char *filename) if (*p == 0) continue; - - add_to_key (current_key, p); + add_to_key (current_key, p, mime_types); + if (init_user) { + add_to_key (current_key, p, initial_user_mime_types); + add_to_key (current_key, p, user_mime_types); + } used = TRUE; } } else { @@ -182,7 +188,7 @@ mime_load_from_dir (const char *mime_info_dir, gboolean system_dir) return; if (system_dir) { filename = g_concat_dir_and_file (mime_info_dir, "gnome.mime"); - mime_fill_from_file (filename); + mime_fill_from_file (filename, FALSE); g_free (filename); } while ((dent = readdir (dir)) != NULL){ @@ -200,12 +206,12 @@ mime_load_from_dir (const char *mime_info_dir, gboolean system_dir) continue; filename = g_concat_dir_and_file (mime_info_dir, dent->d_name); - mime_fill_from_file (filename); + mime_fill_from_file (filename, FALSE); g_free (filename); } if (!system_dir) { filename = g_concat_dir_and_file (mime_info_dir, "user.mime"); - mime_fill_from_file (filename); + mime_fill_from_file (filename, TRUE); g_free (filename); } closedir (dir); @@ -285,6 +291,11 @@ edit_clicked () if (mi) launch_edit_window (mi); } +void +add_clicked (GtkWidget *widget, gpointer data) +{ + launch_new_mime_window (); +} GtkWidget * get_mime_clist (void) @@ -318,6 +329,8 @@ init_mime_type (void) char *mime_info_dir; mime_types = g_hash_table_new (g_str_hash, g_str_equal); + initial_user_mime_types = g_hash_table_new (g_str_hash, g_str_equal); + user_mime_types = g_hash_table_new (g_str_hash, g_str_equal); mime_info_dir = gnome_unconditional_datadir_file ("mime-info"); mime_load_from_dir (mime_info_dir, TRUE); diff --git a/gnome/mime-type/mime-data.h b/gnome/mime-type/mime-data.h index 940ccec47..4f4c927b5 100644 --- a/gnome/mime-type/mime-data.h +++ b/gnome/mime-type/mime-data.h @@ -19,6 +19,6 @@ typedef struct { GtkWidget *get_mime_clist (void); void init_mime_type (void); - +void add_clicked (GtkWidget *widget, gpointer data); #endif diff --git a/gnome/mime-type/mime-info.c b/gnome/mime-type/mime-info.c index 5ad81cdcc..7ea244ab6 100644 --- a/gnome/mime-type/mime-info.c +++ b/gnome/mime-type/mime-info.c @@ -103,7 +103,7 @@ release_key_and_value (gpointer key, gpointer value, gpointer user_data) static gboolean remove_this_key (gpointer key, gpointer value, gpointer user_data) { - if (strcmp (key, user_data) == 0){ + if (strcmp ((gchar *)key, (gchar *)user_data) == 0){ g_free (key); g_free (value); return TRUE; diff --git a/gnome/mime-type/mime-type-capplet.c b/gnome/mime-type/mime-type-capplet.c index a2ef68c1e..5b9b6d118 100644 --- a/gnome/mime-type/mime-type-capplet.c +++ b/gnome/mime-type/mime-type-capplet.c @@ -20,6 +20,19 @@ static void ok_callback (); static void cancel_callback (); static void help_callback (); GtkWidget *capplet; +GtkWidget *delete_button; + +static GtkWidget * +left_aligned_button (gchar *label) +{ + GtkWidget *button = gtk_button_new_with_label (label); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (button)->child), + 0.0, 0.5); + gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), + GNOME_PAD_SMALL, 0); + + return button; +} static void try_callback () @@ -56,15 +69,22 @@ init_mime_capplet () GtkWidget *button; capplet = capplet_widget_new (); + hbox = gtk_hbox_new (FALSE, GNOME_PAD); + gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD_SMALL); + gtk_container_add (GTK_CONTAINER (capplet), hbox); + gtk_box_pack_start (GTK_BOX (hbox), get_mime_clist (), TRUE, TRUE, 0); vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (capplet), vbox); - gtk_box_pack_start (GTK_BOX (vbox), get_mime_clist (), TRUE, TRUE, 0); - hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - button = gtk_button_new_with_label (_("Edit")); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); + button = left_aligned_button (_("Add...")); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + add_clicked, NULL); + button = left_aligned_button (_("Edit...")); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", edit_clicked, NULL); + delete_button = left_aligned_button (_("Delete")); + gtk_box_pack_start (GTK_BOX (vbox), delete_button, FALSE, FALSE, 0); gtk_widget_show_all (capplet); gtk_signal_connect(GTK_OBJECT(capplet), "try", GTK_SIGNAL_FUNC(try_callback), NULL); diff --git a/gnome/mime-type/new-mime-window.c b/gnome/mime-type/new-mime-window.c new file mode 100644 index 000000000..508298d35 --- /dev/null +++ b/gnome/mime-type/new-mime-window.c @@ -0,0 +1,109 @@ +#include "new-mime-window.h" + +static GtkWidget *add_dialog = NULL; + +/*Public functions */ +void +launch_new_mime_window (void) +{ + GtkWidget *mime_entry; + GtkWidget *label; + GtkWidget *frame; + GtkWidget *ext_entry; + GtkWidget *regex1_entry; + GtkWidget *regex2_entry; + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *table; + + add_dialog = gnome_dialog_new (_("Add Mime Type"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); + label = gtk_label_new (_("Add a new Mime Type\n\nFor example: image/png")); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (add_dialog)->vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new (_("Mime Type:")); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + mime_entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), mime_entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (add_dialog)->vbox), hbox, FALSE, FALSE, 0); + + frame = gtk_frame_new (_("Extensions")); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (add_dialog)->vbox), frame, FALSE, FALSE, 0); + vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); + gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL); + label = gtk_label_new (_("Type in the extensions for this mime-type.\nFor example: .html, .htm")); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); + gtk_box_pack_start (GTK_BOX (hbox), gtk_label_new (_("Extension:")), FALSE, FALSE, 0); + ext_entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), ext_entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + frame = gtk_frame_new (_("Regular Expresions")); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (add_dialog)->vbox), frame, FALSE, FALSE, 0); + vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); + gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL); + label = gtk_label_new (_("You can set up two regular expressions here to identify the Mime Type\nby. These fields are optional.")); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 0); + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), GNOME_PAD_SMALL); +/* gtk_container_set_border_width (GTK_CONTAINER (table), GNOME_PAD_SMALL);*/ + label = gtk_label_new (_("First Regular Expression: ")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_table_attach (GTK_TABLE (table), + label, + 0, 1, 0, 1, + GTK_FILL, GTK_FILL, 0, 0); + regex1_entry = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), + regex1_entry, + 1, 2, 0, 1); + label = gtk_label_new (_("Second Regular Expression: ")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_table_attach (GTK_TABLE (table), + label, + 0, 1, 1, 2, + GTK_FILL, GTK_FILL, 0, 0); + regex2_entry = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), + regex2_entry, + 1, 2, 1, 2); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); + + + gtk_widget_show_all (GNOME_DIALOG (add_dialog)->vbox); + switch (gnome_dialog_run (GNOME_DIALOG (add_dialog))) { + case 0: + + case 1: + gtk_widget_destroy (add_dialog); + default:; + } + add_dialog = NULL; +} +void +hide_new_mime_window (void) +{ + if (add_dialog != NULL) + gtk_widget_hide (add_dialog); +} +void +show_new_mime_window (void) +{ + if (add_dialog != NULL) + gtk_widget_show (add_dialog); +} diff --git a/gnome/mime-type/new-mime-window.h b/gnome/mime-type/new-mime-window.h new file mode 100644 index 000000000..3071ab3fd --- /dev/null +++ b/gnome/mime-type/new-mime-window.h @@ -0,0 +1,14 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ +/* Copyright (C) 1998 Redhat Software Inc. + * Authors: Jonathan Blandford + */ +#include "mime-data.h" +#ifndef _NEW_MIME_WINDOW_H_ +#define _NEW_MIME_WINDOW_H_ + +void launch_new_mime_window (void); +void hide_new_mime_window (void); +void show_new_mime_window (void); + +#endif +