GtkWidget*
gtk_show_file_add_filter(
GtkWidget*
dialog,
const
gchar *
description,
gchar *
pattern)
{
GtkWidget *
filter;
filter=
GTK_WIDGET(
gtk_file_filter_new(
)
)
;
gtk_file_filter_set_name(
GTK_FILE_FILTER(
filter)
,
description)
;
gtk_file_filter_add_pattern(
GTK_FILE_FILTER(
filter)
,
pattern)
;
gtk_file_chooser_add_filter(
GTK_FILE_CHOOSER(
dialog)
,
GTK_FILE_FILTER(
filter)
)
;
return
filter;
}
gchar*
gtk_show_file_open(
GtkWidget*
parent_window,
const
gchar *
title,
const
gchar *
filters)
{
GtkWidget *
dialog,*
FF[
16
]
;
gchar *
filename,
des[
256
]
,
pattern[
64
]
;
long
i,
j,
FFc=
0
;
dialog =
gtk_file_chooser_dialog_new (
title,
GTK_WINDOW(
parent_window)
,
GTK_FILE_CHOOSER_ACTION_OPEN,
/*GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,*/
GTK_STOCK_OPEN,
GTK_RESPONSE_ACCEPT,
NULL)
;
//filters
for
(
i=
0
;
i<
strlen(
filters)
;
i++
)
{
j=
0
;
while
(
i<
strlen(
filters)
&&
filters[
i]
!=
'|'
)
des[
j++
]
=
filters[
i++
]
;
if
(
j>=
256
)
break
;
des[
j]
=
0
;
j=
0
;
i++;
if
(
i>=
strlen(
filters)
)
break
;
while
(
i<
strlen(
filters)
&&
filters[
i]
!=
'|'
)
pattern[
j++
]
=
filters[
i++
]
;
if
(
j>=
64
)
break
;
pattern[
j]
=
0
;
FF[
FFc++
]
=
gtk_show_file_add_filter(
dialog,
des,
pattern)
;
if
(
FFc>=
16
)
break
;
}
if
(
gtk_dialog_run (
GTK_DIALOG (
dialog)
)
==
GTK_RESPONSE_ACCEPT)
{
filename =
gtk_file_chooser_get_filename (
GTK_FILE_CHOOSER (
dialog)
)
;
gtk_object_destroy(
GTK_OBJECT(
dialog)
)
;
return
filename;
}
return
NULL;
}
gchar*
gtk_show_file_save(
GtkWidget*
parent_window,
const
gchar *
title,
const
gchar *
default_folder,
const
gchar *
default_name,
const
gchar *
filters)
{
GtkWidget *
dialog,*
FF[
16
]
;
gchar *
filename,
des[
256
]
,
pattern[
64
]
;
long
i,
j,
FFc=
0
;
dialog =
gtk_file_chooser_dialog_new (
title,
GTK_WINDOW(
parent_window)
,
GTK_FILE_CHOOSER_ACTION_SAVE,
/*GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,*/
GTK_STOCK_SAVE,
GTK_RESPONSE_ACCEPT,
NULL)
;
gtk_file_chooser_set_do_overwrite_confirmation (
GTK_FILE_CHOOSER (
dialog)
,
TRUE)
;
if
(
default_folder[
0
]
!=
0
)
gtk_file_chooser_set_current_folder (
GTK_FILE_CHOOSER (
dialog)
,
default_folder)
;
gtk_file_chooser_set_current_name (
GTK_FILE_CHOOSER (
dialog)
,
default_name)
;
//filters
for
(
i=
0
;
i<
strlen(
filters)
;
i++
)
{
j=
0
;
while
(
i<
strlen(
filters)
&&
filters[
i]
!=
'|'
)
des[
j++
]
=
filters[
i++
]
;
if
(
j>=
256
)
break
;
des[
j]
=
0
;
j=
0
;
i++;
if
(
i>=
strlen(
filters)
)
break
;
while
(
i<
strlen(
filters)
&&
filters[
i]
!=
'|'
)
pattern[
j++
]
=
filters[
i++
]
;
if
(
j>=
64
)
break
;
pattern[
j]
=
0
;
FF[
FFc++
]
=
gtk_show_file_add_filter(
dialog,
des,
pattern)
;
if
(
FFc>=
16
)
break
;
}
if
(
gtk_dialog_run (
GTK_DIALOG (
dialog)
)
==
GTK_RESPONSE_ACCEPT)
{
filename =
gtk_file_chooser_get_filename (
GTK_FILE_CHOOSER (
dialog)
)
;
gtk_widget_destroy (
dialog)
;
return
filename;
}
//destroy
gtk_widget_destroy (
dialog)
;
for
(
i=
0
;
i<
FFc;
i++
)
gtk_object_destroy(
GTK_OBJECT(
FF[
i]
)
)
;
return
NULL;
}
|