#include <gtk/gtk.h>
#include <string.h>
#include <assert.h>
int g_argc=0;
char** g_argv=0;
char g_FileName[512]={0};
static void file_ok_sel( GtkWidget *w,
GtkFileSelection *fs ) {
strcpy(g_FileName,gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
}
int OpenFileDialog(char FileName[]) {
GtkWidget *filew;
g_FileName[0] = '\0';
gtk_init (&g_argc, &g_argv);
filew = gtk_file_selection_new ("File selection");
g_signal_connect (G_OBJECT (filew), "destroy",
G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
"clicked", G_CALLBACK (file_ok_sel), (gpointer) filew);
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
"clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (filew));
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
"clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (filew));
gtk_widget_show (filew);
gtk_main ();
if(g_FileName[0] != '\0') {
strcpy(FileName,g_FileName);
return 1;
}
return 0;
}
int SaveFileDialog(char FileName[]) {
return OpenFileDialog(FileName);
}
int main(int argc,char **argv) {
// annoying gtk thing...
g_argc = argc;
g_argv = argv;
// to use...
char filename[512];
if(OpenFileDialog(filename)) {
FILE* fp = fopen(filename,"rb");
// read file
fclose(fp);
}
else {
// cancel pressed...
}
return 0;
}