1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include <gtk/gtk.h>
typedef struct {
GtkWidget *edit1;
GtkWidget *edit2;
GtkWidget *filesel;
} gData, *PGDATA;
gData myWidgets = {0};
void OnWindowDestroy(GtkWidget *widget, gpointer data) {
gtk_main_quit();
}
void OnFileSelCancel(GtkWidget *w, gpointer fs) {
gtk_widget_destroy(GTK_WIDGET(fs));
}
void OnFileSelOk(GtkWidget *w, gpointer data) {
gchar *file;
gchar *command;
gchar *outmd5;
file = g_strdup_printf("%s", gtk_file_selection_get_filename(GTK_FILE_SELECTION(((PGDATA)data)->filesel)));
gtk_entry_set_text(GTK_ENTRY(((PGDATA)data)->edit1), file);
gtk_widget_destroy(GTK_WIDGET(((PGDATA)data)->filesel));
command = g_strdup_printf("md5sum \"%s\"", file);
g_spawn_command_line_sync(command, &outmd5, 0, 0, 0);
gtk_entry_set_text(GTK_ENTRY(((PGDATA)data)->edit2), outmd5);
g_free(outmd5);
g_free(command);
g_free(file);
}
void OnButton1Clicked(GtkWidget *widget, gpointer data) {
((gData*)data)->filesel = gtk_file_selection_new("");
g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(((gData*)data)->filesel)), "destroy", G_CALLBACK(OnFileSelCancel), ((gData*)data)->filesel);
g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(((gData*)data)->filesel)->cancel_button), "clicked", G_CALLBACK(OnFileSelCancel), ((gData*)data)->filesel);
g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(((gData*)data)->filesel)->ok_button), "clicked", G_CALLBACK(OnFileSelOk), data);
gtk_widget_show(((gData*)data)->filesel);
}
int main(int argc, char *argv[]) {
GtkWidget *Window;
GtkWidget *panel;
GtkWidget *label1;
GtkWidget *part1;
GtkWidget *button1;
GtkWidget *label2;
gtk_init(&argc, &argv);
Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(Window), GTK_WIN_POS_CENTER);
//gtk_window_set_default_size(GTK_WINDOW(Window), 350, 120); // This doesn't worlk
gtk_window_set_resizable(GTK_WINDOW(Window), FALSE);
gtk_window_set_title(GTK_WINDOW(Window), "md5 - chica");
g_signal_connect(G_OBJECT(Window), "destroy", G_CALLBACK(OnWindowDestroy), NULL);
panel = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(Window), panel);
label1 = gtk_label_new("Ingresa el fichero a obtener MD5:");
gtk_box_pack_start(GTK_BOX(panel), label1, TRUE, TRUE, 0);
part1 = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(panel), part1, TRUE, TRUE, 0);
myWidgets.edit1 = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(part1), myWidgets.edit1, TRUE, TRUE, 0);
button1 = gtk_button_new_from_stock("gtk-find");
g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(OnButton1Clicked), &myWidgets);
gtk_box_pack_start(GTK_BOX(part1), button1, TRUE, FALSE, 0);
label2 = gtk_label_new("Salida:");
gtk_box_pack_start(GTK_BOX(panel), label2, FALSE, FALSE, 0);
myWidgets.edit2 = gtk_entry_new_with_max_length(32);
gtk_box_pack_start(GTK_BOX(panel), myWidgets.edit2, FALSE, FALSE, 0);
gtk_widget_show_all(Window);
gtk_main();
}
|