summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Lipovský <janlipovsky@gmail.com>2010-12-30 14:40:25 +0100
committerJan Lipovský <janlipovsky@gmail.com>2010-12-30 14:40:25 +0100
commit2bb2ae388ce3d1417017db976463a357033b6158 (patch)
treeeb3bc113c0a48d0d5f6cbf38635f7a0de6fbf67f
parent8b3aa75c5407d4917c6c54484f07c5472894def5 (diff)
downloadgncpmount-2bb2ae388ce3d1417017db976463a357033b6158.tar.gz
gncpmount-2bb2ae388ce3d1417017db976463a357033b6158.tar.xz
gncpmount-2bb2ae388ce3d1417017db976463a357033b6158.zip
ncpmount wrapper success message; tools - show command; enabling mount button
-rw-r--r--dialogs.c138
-rw-r--r--dialogs.h6
-rw-r--r--globals.c19
-rw-r--r--globals.h9
-rw-r--r--gncpmount.c99
-rw-r--r--ncpwrapper.c23
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 <gtk/gtk.h>
#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, "<Branch>" },
- { "/File/_New", "<control>N", NULL, 0, "<StockItem>", GTK_STOCK_NEW },
- { "/File/_Load", "<control>L", NULL, 0, "<StockItem>", GTK_STOCK_OPEN },
- { "/File/_Save", "<control>S", NULL, 0, "<StockItem>", GTK_STOCK_SAVE },
- { "/File/sep1", NULL, NULL, 0, "<Separator>" },
- { "/File/_Quit", "<CTRL>Q", gtk_main_quit, 0, "<StockItem>", GTK_STOCK_QUIT },
- { "/Tools", NULL, NULL, 0, "<Branch>" },
- { "/_Tools/Options", "<control>O", run_options_dialog, 0, "<Item>" },
- { "/_Help", NULL, NULL, 0, "<Branch>" },
- { "/_Help/About", NULL, NULL, 0, "<Item>" },
+static GtkItemFactoryEntry menu_items[] =
+{
+ { "/_File", NULL, NULL, 0, "<Branch>" },
+ { "/File/_New", "<control>N", NULL, 0, "<StockItem>", GTK_STOCK_NEW },
+ { "/File/_Load", "<control>L", NULL, 0, "<StockItem>", GTK_STOCK_OPEN },
+ { "/File/_Save", "<control>S", NULL, 0, "<StockItem>", GTK_STOCK_SAVE },
+ { "/File/sep1", NULL, NULL, 0, "<Separator>" },
+ { "/File/_Quit", "<CTRL>Q", gtk_main_quit, 0, "<StockItem>", GTK_STOCK_QUIT },
+ { "/Tools", NULL, NULL, 0, "<Branch>" },
+ { "/_Tools/Options", "<control>O", run_options_dialog, 0, "<Item>" },
+ { "/_Tools/Show command", NULL, run_command_dialog, 0, "<Item>" },
+ { "/_Help", NULL, NULL, 0, "<Branch>" },
+ { "/_Help/About", NULL, NULL, 0, "<Item>" },
};
+
/** 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, "<main>",
- accel_group);
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ 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, "<main>");
+ return gtk_item_factory_get_widget (item_factory, "<main>");
}
-
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);
}