1
1

began adding new add window. Will finish it later tonight...

-Jonathan
Этот коммит содержится в:
Jonathan Blandford 1999-04-09 22:57:47 +00:00
родитель d2d6cd224a
Коммит 1bf4926ff7
8 изменённых файлов: 179 добавлений и 22 удалений

Просмотреть файл

@ -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) \

Просмотреть файл

@ -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);

Просмотреть файл

@ -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);

Просмотреть файл

@ -19,6 +19,6 @@ typedef struct {
GtkWidget *get_mime_clist (void);
void init_mime_type (void);
void add_clicked (GtkWidget *widget, gpointer data);
#endif

Просмотреть файл

@ -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;

Просмотреть файл

@ -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);

109
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);
}

14
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 <jrb@redhat.com>
*/
#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