From 2bb2ae388ce3d1417017db976463a357033b6158 Mon Sep 17 00:00:00 2001 From: Jan Lipovský Date: Thu, 30 Dec 2010 14:40:25 +0100 Subject: ncpmount wrapper success message; tools - show command; enabling mount button --- dialogs.c | 138 +++++++++++++++++++++++++++++++++++++++++++---------------- dialogs.h | 6 ++- globals.c | 19 +++++--- globals.h | 9 +++- gncpmount.c | 99 +++++++++++++++++++++++++++++------------- ncpwrapper.c | 23 ++++++---- 6 files changed, 213 insertions(+), 81 deletions(-) diff --git a/dialogs.c b/dialogs.c index cfc403e..34beacc 100644 --- a/dialogs.c +++ b/dialogs.c @@ -1,6 +1,7 @@ #include #include "dialogs.h" +/** Signature level type */ typedef enum lvl { NOT_USED = 0, @@ -10,6 +11,7 @@ typedef enum lvl REQUIRED } TLevel; +/** Signature leve combo box text */ gchar *sig_level_texts[] = { "Do not use signature level", @@ -19,7 +21,9 @@ gchar *sig_level_texts[] = "Level 3 - required" }; - +/** +* Save options to cmd_params +*/ void save_options_to_cmdparams() { gint tmp; @@ -43,32 +47,36 @@ void save_options_to_cmdparams() /* ComboBox */ switch(tmp) { - case NEVER: - g_free(cmd_params.level); - cmd_params.level = g_strdup("0"); - break; - case SUPPORTED: - g_free(cmd_params.level); - cmd_params.level = g_strdup("1"); - break; - case PREFERED: - g_free(cmd_params.level); - cmd_params.level = g_strdup("2"); - break; - case REQUIRED: - g_free(cmd_params.level); - cmd_params.level = g_strdup("3"); - break; - default: - if(cmd_params.level != NULL) - { - g_free(cmd_params.level); - cmd_params.level = NULL; - } - break; + case NEVER: + g_free(cmd_params.level); + cmd_params.level = g_strdup("0"); + break; + case SUPPORTED: + g_free(cmd_params.level); + cmd_params.level = g_strdup("1"); + break; + case PREFERED: + g_free(cmd_params.level); + cmd_params.level = g_strdup("2"); + break; + case REQUIRED: + g_free(cmd_params.level); + cmd_params.level = g_strdup("3"); + break; + default: + if(cmd_params.level != NULL) + { + g_free(cmd_params.level); + cmd_params.level = NULL; + } + break; } } + +/** +* Prefill set options to dialog +*/ static void set_options_from_cmdparams () { @@ -126,8 +134,10 @@ set_options_from_cmdparams () -/* Function to open a dialog box displaying the message provided. */ -void options_dialog () +/** +* Function opens option dialog box +*/ +void show_options_dialog () { GtkWidget *label, *content_area, *halign, *hsep, *table; gint result, row; @@ -143,8 +153,6 @@ void options_dialog () content_area = gtk_dialog_get_content_area (GTK_DIALOG (options.dialog)); - - /* Page OTIONS */ table = gtk_table_new (21, 2, FALSE); gtk_container_add (GTK_CONTAINER (content_area), table); @@ -301,7 +309,7 @@ void options_dialog () row++; - + /* Prefill set options */ set_options_from_cmdparams(); gtk_widget_show_all (table); @@ -325,17 +333,75 @@ show_message (GtkMessageType type, const gchar *format, gchar *msgtxt, const gch GtkWidget *dialog; dialog = gtk_message_dialog_new ( GTK_WINDOW (gui.win), - GTK_DIALOG_DESTROY_WITH_PARENT, - type, - GTK_BUTTONS_OK, - format, - msgtxt); + GTK_DIALOG_DESTROY_WITH_PARENT, + type, + GTK_BUTTONS_OK, + format, + msgtxt); gtk_window_set_title (GTK_WINDOW (dialog), GUI_TITLE ); gtk_message_dialog_format_secondary_text ( GTK_MESSAGE_DIALOG (dialog), - format_sec, - msgtxt_sec); + format_sec, + msgtxt_sec); gtk_dialog_run ( GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } + + + +/** +* Function shows ncpmount command with set options +*/ +void show_ncpmount_command () +{ + GtkWidget *dialog, *label, *content_area, *halign, *hsep, *entry_command, *vbox; + + gint strlen; + + gchar *command = get_ncpmount_command(&strlen); + + /* Create the widgets */ + dialog = gtk_dialog_new_with_buttons ("Show ncpmount command", + GTK_WINDOW (gui.win), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, + NULL); + + content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + + vbox = gtk_vbox_new(FALSE,6); + gtk_container_add (GTK_CONTAINER (content_area), vbox); + + gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); + + halign = gtk_alignment_new(0, 0, 0, 1); + label = gtk_label_new ("ncpmount command with selected options:"); + gtk_container_add(GTK_CONTAINER(halign), label); + gtk_box_pack_start (GTK_BOX (vbox), halign, FALSE, TRUE, 0); + + + /* ----- */ + hsep = gtk_hseparator_new(); + gtk_box_pack_start (GTK_BOX (vbox), hsep, FALSE, TRUE, 0); + + + entry_command = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (vbox), entry_command, FALSE, TRUE, 0); + gtk_entry_set_editable (GTK_ENTRY(entry_command), FALSE); + gtk_entry_set_text (GTK_ENTRY(entry_command), command); + gtk_entry_set_width_chars (GTK_ENTRY(entry_command), strlen); + + /* ----- */ + hsep = gtk_hseparator_new(); + gtk_box_pack_start (GTK_BOX (vbox), hsep, FALSE, TRUE, 0); + + + + + gtk_widget_show_all(dialog); + + gtk_dialog_run ( GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + +} diff --git a/dialogs.h b/dialogs.h index 5167b8c..d5ac0c7 100644 --- a/dialogs.h +++ b/dialogs.h @@ -4,9 +4,13 @@ #include "globals.h" /** Shows options dialog */ -void options_dialog (); +void show_options_dialog (); +/** Shows error, info or warning message */ void show_message (GtkMessageType type, const gchar *format, gchar *msgtxt, const gchar *format_sec, gchar *msgtxt_sec); +/** Function shows ncpmount command with set options */ +void show_ncpmount_command (); + #endif diff --git a/globals.c b/globals.c index d8044c2..21a89bc 100644 --- a/globals.c +++ b/globals.c @@ -2,7 +2,9 @@ #include "globals.h" - +/** +* Set text value in given parameter +*/ void set_parameter_text (GtkWidget *entry, gchar **param) { gchar *tmp; @@ -12,7 +14,7 @@ void set_parameter_text (GtkWidget *entry, gchar **param) if(!g_strcmp0(tmp,"")) { g_free(tmp); - tmp = NULL; + tmp = g_strdup(NULL);; } g_free(*param); @@ -21,8 +23,9 @@ void set_parameter_text (GtkWidget *entry, gchar **param) g_free(tmp); } + /** -* Boolean value in given parameter +* Set boolean value in given parameter */ void set_parameter_bool (GtkWidget *checkbox, gboolean *param) { @@ -31,8 +34,11 @@ void set_parameter_bool (GtkWidget *checkbox, gboolean *param) - -gchar *get_ncpmount_command () +/** +* Return ncpmount command with options and mountpoint +* if length != NULL return length of ret string +*/ +gchar *get_ncpmount_command (gint *length) { GString *command; gchar *ret; @@ -155,6 +161,9 @@ gchar *get_ncpmount_command () if(cmd_params.mount_point != NULL) command = g_string_append (command, cmd_params.mount_point); + if(length != NULL) + *length = command->len; + ret = command->str; g_string_free(command, FALSE); diff --git a/globals.h b/globals.h index ef8ed67..c2f79e0 100644 --- a/globals.h +++ b/globals.h @@ -26,6 +26,8 @@ typedef struct gui_struct GtkWidget *btn_mount; GtkWidget *btn_browse; + gboolean btn_mount_enable; + /* Entry */ GtkWidget *entry_username; GtkWidget *entry_password; @@ -115,8 +117,11 @@ void set_parameter_text (GtkWidget *entry, gchar **param); void set_parameter_bool (GtkWidget *checkbox, gboolean *param); -/** Return ncpmount command*/ -gchar * get_ncpmount_command (); +/** +* Return ncpmount command - set length = NULL +* if you do not wannt to know length of returnet string +*/ +gchar * get_ncpmount_command (gint *length); #endif diff --git a/gncpmount.c b/gncpmount.c index bd859ba..e508918 100644 --- a/gncpmount.c +++ b/gncpmount.c @@ -8,6 +8,7 @@ #define WIDTH 400 #define HEIGHT -1 + /** * Load savet options to GUI */ @@ -33,6 +34,7 @@ set_gui_from_cmdparams () gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gui.check_n), cmd_params.n); } + /** * Save options set in GUI by user to cmd_params */ @@ -50,6 +52,32 @@ save_gui_to_cmdparams() } +/** +* Check length of all entry and if they are filled enables mount button +*/ +void enable_mount_button () +{ + if (( gtk_entry_get_text_length (GTK_ENTRY(gui.entry_username)) * + gtk_entry_get_text_length (GTK_ENTRY(gui.entry_password)) * + gtk_entry_get_text_length (GTK_ENTRY(gui.entry_server)) * + gtk_entry_get_text_length (GTK_ENTRY(gui.entry_mount_point))) != 0) + { + if(!gui.btn_mount_enable) + { + gui.btn_mount_enable = TRUE; + gtk_widget_set_sensitive (gui.btn_mount, TRUE); + } + } + else + { + if(gui.btn_mount_enable) + { + gui.btn_mount_enable = FALSE; + gtk_widget_set_sensitive (gui.btn_mount, FALSE); + } + } +} + /** * Create Open folder dialog and let user select folder @@ -83,7 +111,6 @@ open_folder (GtkWidget *wid, GtkWidget *win) static void call_ncpmount (GtkWidget *wid, GtkWidget *win) { - /* TODO - kontrola vyplneni udaju */ save_gui_to_cmdparams(); run_ncpmount(); } @@ -120,25 +147,38 @@ passwd_usage (GtkWidget *wid, GtkWidget *win) static void run_options_dialog ( GtkWidget *w, gpointer data ) { - options_dialog(); + show_options_dialog(); } +/** +* Open Show command dialog +*/ +static void +run_command_dialog ( GtkWidget *w, gpointer data ) +{ + save_gui_to_cmdparams(); + show_ncpmount_command(); +} + /** Menu, an array of GtkItemFactoryEntry structures that defines each menu item */ -static GtkItemFactoryEntry menu_items[] = { - { "/_File", NULL, NULL, 0, "" }, - { "/File/_New", "N", NULL, 0, "", GTK_STOCK_NEW }, - { "/File/_Load", "L", NULL, 0, "", GTK_STOCK_OPEN }, - { "/File/_Save", "S", NULL, 0, "", GTK_STOCK_SAVE }, - { "/File/sep1", NULL, NULL, 0, "" }, - { "/File/_Quit", "Q", gtk_main_quit, 0, "", GTK_STOCK_QUIT }, - { "/Tools", NULL, NULL, 0, "" }, - { "/_Tools/Options", "O", run_options_dialog, 0, "" }, - { "/_Help", NULL, NULL, 0, "" }, - { "/_Help/About", NULL, NULL, 0, "" }, +static GtkItemFactoryEntry menu_items[] = +{ + { "/_File", NULL, NULL, 0, "" }, + { "/File/_New", "N", NULL, 0, "", GTK_STOCK_NEW }, + { "/File/_Load", "L", NULL, 0, "", GTK_STOCK_OPEN }, + { "/File/_Save", "S", NULL, 0, "", GTK_STOCK_SAVE }, + { "/File/sep1", NULL, NULL, 0, "" }, + { "/File/_Quit", "Q", gtk_main_quit, 0, "", GTK_STOCK_QUIT }, + { "/Tools", NULL, NULL, 0, "" }, + { "/_Tools/Options", "O", run_options_dialog, 0, "" }, + { "/_Tools/Show command", NULL, run_command_dialog, 0, "" }, + { "/_Help", NULL, NULL, 0, "" }, + { "/_Help/About", NULL, NULL, 0, "" }, }; + /** Menu items count */ static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); @@ -149,30 +189,22 @@ static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); static GtkWidget * get_menubar_menu( GtkWidget *window ) { - GtkItemFactory *item_factory; - GtkAccelGroup *accel_group; + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; - /* Make an accelerator group (shortcut keys) */ - accel_group = gtk_accel_group_new (); + accel_group = gtk_accel_group_new (); - /* Make an ItemFactory (that makes a menubar) */ - item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", - accel_group); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); - /* This function generates the menu items. Pass the item factory, - the number of items in the array, the array itself, and any - callback data for the the menu items. */ - gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); - /* Attach the new accelerator group to the window. */ - gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); + gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); - /* Finally, return the actual menu bar created by the item factory. */ - return gtk_item_factory_get_widget (item_factory, "
"); + return gtk_item_factory_get_widget (item_factory, "
"); } - int main (int argc, char *argv[]) { GtkWidget *label = NULL; @@ -237,6 +269,7 @@ int main (int argc, char *argv[]) gui.entry_username = gtk_entry_new (); + g_signal_connect (G_OBJECT (gui.entry_username), "changed", G_CALLBACK (enable_mount_button), NULL); gtk_table_attach_defaults (GTK_TABLE (gui.table), gui.entry_username, 1, 2, 0, 1); halign = gtk_alignment_new(0, 0, 0, 1); @@ -247,6 +280,7 @@ int main (int argc, char *argv[]) gui.entry_password = gtk_entry_new (); gtk_entry_set_visibility (GTK_ENTRY(gui.entry_password), FALSE); + g_signal_connect (G_OBJECT (gui.entry_password), "changed", G_CALLBACK (enable_mount_button), NULL); gtk_table_attach_defaults (GTK_TABLE (gui.table), gui.entry_password, 1, 2, 1, 2); /* Chcekbox */ @@ -270,6 +304,7 @@ int main (int argc, char *argv[]) hbox = gtk_hbox_new (FALSE, 2); gtk_table_attach_defaults (GTK_TABLE (gui.table), hbox, 1, 2, 0, 1); gui.entry_mount_point = gtk_entry_new (); + g_signal_connect (G_OBJECT (gui.entry_mount_point), "changed", G_CALLBACK (enable_mount_button), NULL); gtk_container_add(GTK_CONTAINER(hbox), gui.entry_mount_point); gui.btn_browse = gtk_button_new_with_label ("Browse"); @@ -286,6 +321,7 @@ int main (int argc, char *argv[]) gtk_table_attach(GTK_TABLE(gui.table), halign, 0, 1, 2, 3, GTK_FILL, GTK_FILL | GTK_EXPAND, 6, 0); gui.entry_server = gtk_entry_new (); + g_signal_connect (G_OBJECT (gui.entry_server), "changed", G_CALLBACK (enable_mount_button), NULL); gtk_table_attach_defaults (GTK_TABLE (gui.table), gui.entry_server, 1, 2, 2, 3); @@ -295,6 +331,7 @@ int main (int argc, char *argv[]) gtk_table_attach(GTK_TABLE(gui.table), halign, 0, 1, 3, 4, GTK_FILL, GTK_FILL | GTK_EXPAND, 6, 0); gui.entry_dns_server = gtk_entry_new (); + g_signal_connect (G_OBJECT (gui.entry_dns_server), "changed", G_CALLBACK (enable_mount_button), NULL); gtk_table_attach_defaults (GTK_TABLE (gui.table), gui.entry_dns_server, 1, 2, 3, 4); @@ -309,6 +346,10 @@ int main (int argc, char *argv[]) g_signal_connect (gui.btn_mount, "clicked", G_CALLBACK(call_ncpmount), NULL); gtk_box_pack_start (GTK_BOX (gui.btnbox), gui.btn_mount, TRUE, TRUE, 0); + + gui.btn_mount_enable = FALSE; + gtk_widget_set_sensitive (gui.btn_mount, FALSE); + gui.btn_close = gtk_button_new_from_stock (GTK_STOCK_CLOSE); g_signal_connect (gui.btn_close, "clicked", gtk_main_quit, NULL); gtk_box_pack_start (GTK_BOX (gui.btnbox), gui.btn_close, TRUE, TRUE, 0); diff --git a/ncpwrapper.c b/ncpwrapper.c index cdec0c5..0a7cf25 100644 --- a/ncpwrapper.c +++ b/ncpwrapper.c @@ -4,6 +4,7 @@ #include "ncpwrapper.h" #include "dialogs.h" +gboolean mounted = TRUE; static void cb_child_watch( GPid pid, @@ -38,6 +39,8 @@ cb_out_watch( GIOChannel *channel, g_free( tmp ); } + /* Receved some message - not mounted */ + mounted = FALSE; show_message( GTK_MESSAGE_INFO,"%s", "ncpmount output","%s",string->str); g_string_free(string, TRUE); @@ -57,6 +60,9 @@ cb_err_watch( GIOChannel *channel, if( cond == G_IO_HUP ) { g_io_channel_unref( channel ); + /* hangup signal - if mounted then show message */ + if(mounted) + show_message( GTK_MESSAGE_INFO,"Mounting succesfull", "","Mounted to \"%s\" directory.",cmd_params.mount_point); return( FALSE ); } /* @@ -77,16 +83,15 @@ cb_err_watch( GIOChannel *channel, } + /* Receved some message - not mounted */ + mounted = FALSE; + show_message( GTK_MESSAGE_ERROR,"%s", "ncpmount error","%s",string->str); g_string_free(string, TRUE); return( TRUE ); } -/* - TODO - jak odchytit uspesne mountnuti??? -*/ - void run_ncpmount() { @@ -95,8 +100,7 @@ void run_ncpmount() GPid pid; gint out, err; gboolean ret; - const gchar *command = get_ncpmount_command(); - + gchar *command = get_ncpmount_command(NULL); gchar **argv = g_strsplit(command, " ", 0); puts (command); @@ -106,6 +110,7 @@ void run_ncpmount() /* gchar *argv[] = {"/usr/bin/ncpmount", "-v", NULL};*/ + mounted = TRUE; /* Spawn child process */ ret = g_spawn_async_with_pipes( NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, @@ -114,7 +119,6 @@ void run_ncpmount() { g_warning( "SPAWN FAILED" ); show_message( GTK_MESSAGE_ERROR,"ERROR: %s", "Spawn failed!","%s",gerror->message); - g_error_free(gerror); return; } @@ -133,6 +137,9 @@ void run_ncpmount() #endif /* Add watches to channels */ - g_io_add_watch( out_ch, G_IO_IN | G_IO_HUP, (GIOFunc)cb_out_watch, NULL ); g_io_add_watch( err_ch, G_IO_IN | G_IO_HUP, (GIOFunc)cb_err_watch, NULL ); + g_io_add_watch( out_ch, G_IO_IN | G_IO_HUP, (GIOFunc)cb_out_watch, NULL ); + + g_strfreev(argv); + g_free(command); } -- cgit