diff options
Diffstat (limited to 'src/gncpmount.c')
-rw-r--r-- | src/gncpmount.c | 508 |
1 files changed, 508 insertions, 0 deletions
diff --git a/src/gncpmount.c b/src/gncpmount.c new file mode 100644 index 0000000..318b201 --- /dev/null +++ b/src/gncpmount.c @@ -0,0 +1,508 @@ +#include "globals.h" +#include "keyfile.h" +#include "ncpwrapper.h" +#include "dialogs.h" + +#include "logo.xpm.h" + +#define WIDTH 400 +#define HEIGHT -1 + + + +/** +* Load saved options to GUI +*/ +static void +set_gui_from_cmdparams () +{ + + if(cmd_params.username != NULL) + gtk_entry_set_text(GTK_ENTRY(gui.entry_username), g_shell_unquote(cmd_params.username, NULL)); + else + gtk_entry_set_text(GTK_ENTRY(gui.entry_username), ""); + + if(cmd_params.password != NULL) + gtk_entry_set_text(GTK_ENTRY(gui.entry_password), g_shell_unquote(cmd_params.password, NULL)); + else + gtk_entry_set_text(GTK_ENTRY(gui.entry_password), ""); + + if(cmd_params.server != NULL) + gtk_entry_set_text(GTK_ENTRY(gui.entry_server), g_shell_unquote(cmd_params.server, NULL)); + else + gtk_entry_set_text(GTK_ENTRY(gui.entry_server), ""); + + if(cmd_params.dns_name != NULL) + gtk_entry_set_text(GTK_ENTRY(gui.entry_dns_server), g_shell_unquote(cmd_params.dns_name, NULL)); + else + gtk_entry_set_text(GTK_ENTRY(gui.entry_dns_server), ""); + + if(cmd_params.mount_point != NULL) + gtk_entry_set_text(GTK_ENTRY(gui.entry_mount_point), g_shell_unquote(cmd_params.mount_point, NULL)); + else + gtk_entry_set_text(GTK_ENTRY(gui.entry_mount_point), ""); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gui.check_n), cmd_params.n); +} + + + +/** +* Save options set in GUI by user to cmd_params +*/ +static void +save_gui_to_cmdparams() +{ + set_parameter_text ((gui.entry_dns_server), &cmd_params.dns_name); + set_parameter_text ((gui.entry_mount_point), &cmd_params.mount_point); + set_parameter_text ((gui.entry_password), &cmd_params.password); + set_parameter_text ((gui.entry_server), &cmd_params.server); + set_parameter_text ((gui.entry_username), &cmd_params.username); + + /* Checkboxes */ + set_parameter_bool ((gui.check_n), &cmd_params.n); +} + + + +/** +* Check length of all entry and if they are filled enables mount button +*/ +static void +enable_mount_button () +{ + gint tmp = ( 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_mount_point))); + + if ( (tmp * gtk_entry_get_text_length (GTK_ENTRY(gui.entry_server)) != 0) || + (tmp * gtk_entry_get_text_length (GTK_ENTRY(gui.entry_dns_server))) != 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 +* for mount point +*/ +static void +open_folder () +{ + GtkWidget *dialog; + dialog = gtk_file_chooser_dialog_new (_("Select folder - mount point"), + GTK_WINDOW (gui.win), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *folder; + folder = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + + gtk_entry_set_text (GTK_ENTRY (gui.entry_mount_point), folder); + g_free (folder); + } + gtk_widget_destroy (dialog); + +} + + + +/** +* Create Open file dialog +* and load cmd_params from file +*/ +static void +open_file () +{ + GtkWidget *dialog; + dialog = gtk_file_chooser_dialog_new (_("Load options from file"), + GTK_WINDOW (gui.win), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + load_cmdparams_from_file (filename); + + /* Set gui */ + set_gui_from_cmdparams(); + + g_free (filename); + } + gtk_widget_destroy (dialog); +} + + + +/** +* Create Save file dialog +* and save cmd_params to file +*/ +static void +save_file () +{ + GtkWidget *dialog; + dialog = gtk_file_chooser_dialog_new (_("Save options to file"), + GTK_WINDOW (gui.win), + 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 (user_edited_a_new_document) + { + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), default_folder_for_saving); + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "Untitled document"); + } + else + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document); + */ + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + + save_gui_to_cmdparams(); + save_cmdparams_to_file (filename); + + g_free (filename); + } + gtk_widget_destroy (dialog); +} + + + +/** +* Call ncpmount command +*/ +static void +call_ncpmount () +{ + save_gui_to_cmdparams(); + run_ncpmount(); +} + + + +/** +* Set true if -P (password) is used or not +*/ +static void +passwd_usage () +{ + cmd_params.n = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gui.check_n)); + + gtk_editable_set_editable (GTK_EDITABLE(gui.entry_password), !cmd_params.n); + + if(cmd_params.n) + { + gtk_entry_set_visibility (GTK_ENTRY(gui.entry_password), TRUE); + set_parameter_text (gui.entry_password, &(cmd_params.password)); + gtk_entry_set_text (GTK_ENTRY(gui.entry_password), _("no password will be used")); + } + else + { + gtk_entry_set_visibility (GTK_ENTRY(gui.entry_password), FALSE); + if(cmd_params.password != NULL) + gtk_entry_set_text (GTK_ENTRY(gui.entry_password), cmd_params.password); + else + gtk_entry_set_text (GTK_ENTRY(gui.entry_password), ""); + } +} + + + +/** +* Open Options dialog +*/ +static void +run_options_dialog () +{ + show_options_dialog(); +} + + + +/** +* Open Show command dialog +*/ +static void +run_command_dialog () +{ + save_gui_to_cmdparams(); + show_ncpmount_command(); +} + + + +/** +* Clear cmd_params and set gui to default +*/ +static void +clear_gui () +{ + clear_cmdparams(); + set_gui_from_cmdparams(); +} + + + +int main (int argc, char *argv[]) +{ + GtkWidget *label = NULL; + GtkWidget *tmp = NULL; + GtkWidget *hbox = NULL; + GtkWidget *halign = NULL; + GtkWidget *logo = NULL; + GtkWidget *menu = NULL; + GtkWidget *submenu = NULL; + GtkWidget *menuitem = NULL; + + GdkPixbuf *xpm = NULL; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, GNOMELOCALEDIR); + textdomain(PACKAGE); + + /* Initialize GTK+ */ + g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); + gtk_init (&argc, &argv); + g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); + + /* Create the main window */ + gui.win = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (gui.win), GUI_TITLE ); + gtk_window_set_position (GTK_WINDOW (gui.win), GTK_WIN_POS_CENTER); + gtk_window_set_default_size (GTK_WINDOW (gui.win), WIDTH, HEIGHT); + gtk_window_set_resizable (GTK_WINDOW (gui.win), FALSE); + + gtk_widget_realize (gui.win); + g_signal_connect (gui.win, "destroy", gtk_main_quit, NULL); + + + tmp = gtk_vbox_new (FALSE, 1); + gtk_container_add (GTK_CONTAINER (gui.win), tmp); + + /* Create menu bar*/ + gui.menu = gtk_menu_bar_new(); + gtk_box_pack_start (GTK_BOX (tmp), gui.menu, FALSE, TRUE, 0); + + /* File menu */ + menu = gtk_menu_item_new_with_mnemonic (_("_File")); + gtk_menu_shell_append (GTK_MENU_SHELL(gui.menu), menu); + gtk_widget_show(menu); + + /*-- Create File submenu --*/ + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_New")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", clear_gui, NULL); + gtk_widget_show (menuitem); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_Load")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", open_file, NULL); + gtk_widget_show (menuitem); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_Save")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", save_file, NULL); + gtk_widget_show (menuitem); + + menuitem = gtk_separator_menu_item_new (); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + gtk_widget_show (menuitem); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_Quit")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", gtk_main_quit, NULL); + gtk_widget_show (menuitem); + + + /* Tools menu */ + menu = gtk_menu_item_new_with_mnemonic (_("_Tools")); + gtk_menu_shell_append (GTK_MENU_SHELL(gui.menu), menu); + gtk_widget_show(menu); + + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_Options")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", run_options_dialog, NULL); + gtk_widget_show (menuitem); + + menuitem = gtk_menu_item_new_with_mnemonic (_("Show _command")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", run_command_dialog, NULL); + gtk_widget_show (menuitem); + + + /* Help menu */ + menu = gtk_menu_item_new_with_mnemonic (_("_Help")); + gtk_menu_shell_append (GTK_MENU_SHELL(gui.menu), menu); + gtk_widget_show(menu); + + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); + + menuitem = gtk_menu_item_new_with_mnemonic (_("_About...")); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); + g_signal_connect (GTK_OBJECT (menuitem), "activate", show_about, NULL); + gtk_widget_show (menuitem); + + /* Create a vertical box */ + gui.vbox = gtk_vbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (tmp), gui.vbox, FALSE, TRUE, 0); + + gtk_container_set_border_width (GTK_CONTAINER (gui.vbox), 10); + + xpm = gdk_pixbuf_new_from_xpm_data(gncpmount_xpm); + + logo = gtk_image_new_from_pixbuf(xpm); + gtk_box_pack_start (GTK_BOX (gui.vbox), logo, TRUE, TRUE, 0); + + /* Create a notebook */ + gui.notebook = gtk_notebook_new (); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK (gui.notebook), GTK_POS_TOP); + gtk_box_pack_start (GTK_BOX (gui.vbox), gui.notebook, TRUE, TRUE, 0); + gtk_widget_set_size_request(gui.notebook, WIDTH,-1); + + + /* Page Login */ + + /* Create table */ + gui.table = gtk_table_new (3, 2, FALSE); + label = gtk_label_new (_("Login")); + gtk_notebook_prepend_page (GTK_NOTEBOOK (gui.notebook), gui.table, label); + + /* Labels */ + halign = gtk_alignment_new(0, 0, 0, 1); + + label = gtk_label_new (_("Username [-U]:")); + gtk_container_add(GTK_CONTAINER(halign), label); + gtk_table_attach(GTK_TABLE(gui.table), halign, 0, 1, 0, 1, GTK_FILL , GTK_FILL | GTK_EXPAND, 4, 0); + + + 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); + label = gtk_label_new (_("Password [-P]:")); + gtk_container_add(GTK_CONTAINER(halign), label); + gtk_table_attach(GTK_TABLE(gui.table), halign, 0, 1, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND, 4, 0); + + + 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 */ + gui.check_n = gtk_check_button_new_with_label (_("Do not use any password [-n]")); + g_signal_connect (G_OBJECT (gui.check_n), "toggled", G_CALLBACK (passwd_usage), NULL); + gtk_table_attach_defaults (GTK_TABLE (gui.table), gui.check_n, 1, 2, 2, 3); + + + + /* Page SERVER */ + gui.table = gtk_table_new (4, 2, FALSE); + + label = gtk_label_new (_("Server")); + gtk_notebook_append_page (GTK_NOTEBOOK (gui.notebook), gui.table, label); + + halign = gtk_alignment_new(0, 0, 0, 1); + label = gtk_label_new (_("Mount point:")); + gtk_container_add(GTK_CONTAINER(halign), label); + gtk_table_attach(GTK_TABLE(gui.table), halign, 0, 1, 0, 1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); + + 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_from_stock (GTK_STOCK_OPEN); + gtk_button_set_use_stock (GTK_BUTTON (gui.btn_browse), TRUE); + g_signal_connect (gui.btn_browse, "clicked", G_CALLBACK (open_folder), NULL); + gtk_container_add(GTK_CONTAINER(hbox), gui.btn_browse); + + tmp = gtk_hseparator_new(); + gtk_table_attach (GTK_TABLE(gui.table), tmp, 0, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); + + + halign = gtk_alignment_new(0, 0, 0, 1); + label = gtk_label_new (_("Server [-S]:")); + gtk_container_add(GTK_CONTAINER(halign), label); + 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); + + + halign = gtk_alignment_new(0, 0, 0, 1); + label = gtk_label_new (_("DNS name [-A]:")); + gtk_container_add(GTK_CONTAINER(halign), label); + 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); + + + + /* Button box */ + gui.btnbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout (GTK_BUTTON_BOX(gui.btnbox), GTK_BUTTONBOX_END); + gtk_box_pack_start (GTK_BOX (gui.vbox), gui.btnbox, TRUE, TRUE, 0); + + /* Buttons */ + gui.btn_mount = gtk_button_new_with_label (_("Mount")); + 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); + + + /* Fill in informations from cmd_params to widgets */ + clear_cmdparams (); + set_gui_from_cmdparams(); + + /* Enter the main loop */ + gtk_widget_show_all (gui.win); + gtk_main (); + return 0; +} |