/* * dialogs.c * * This file is part of gncpmount. * * gncpmount is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * gncpmount is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with gncpmount. If not, see . * * Author: Jan Lipovsky * */ #include "dialogs.h" #include "about.xmp.h" /** Signature level type */ typedef enum lvl { NOT_USED = 0, NEVER, SUPPORTED, PREFERED, REQUIRED } TLevel; /** * Save options to cmd_params */ void save_options_to_cmdparams() { gint tmp; set_parameter_text ((options.entry_charset), &cmd_params.charset); set_parameter_text ((options.entry_codepage), &cmd_params.codepage); set_parameter_text ((options.entry_dmode), &cmd_params.dmode); set_parameter_text ((options.entry_fmode), &cmd_params.fmode); set_parameter_text ((options.entry_gid), &cmd_params.gid); set_parameter_text ((options.entry_retrycount), &cmd_params.retry_count); set_parameter_text ((options.entry_timeout), &cmd_params.time_out); set_parameter_text ((options.entry_uid), &cmd_params.uid); set_parameter_text ((options.entry_volume), &cmd_params.volume); set_parameter_text ((options.entry_extraoptions), &cmd_params.extraoptions); /* Checkboxes */ set_parameter_bool ((options.check_b), &cmd_params.b); set_parameter_bool ((options.check_C), &cmd_params.C); set_parameter_bool ((options.check_m), &cmd_params.m); set_parameter_bool ((options.check_s), &cmd_params.s); tmp = gtk_combo_box_get_active (GTK_COMBO_BOX (options.combo_signature)); /* 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; } } /** * Prefill set options to dialog */ static void set_options_from_cmdparams () { if(cmd_params.charset != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_charset), g_shell_unquote(cmd_params.charset, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_charset), ""); if(cmd_params.codepage != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_codepage), g_shell_unquote(cmd_params.codepage, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_codepage), ""); if(cmd_params.dmode != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_dmode), g_shell_unquote(cmd_params.dmode, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_dmode), ""); if(cmd_params.fmode != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_fmode), g_shell_unquote(cmd_params.fmode, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_fmode), ""); if(cmd_params.gid != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_gid), g_shell_unquote(cmd_params.gid, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_gid), ""); if(cmd_params.retry_count != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_retrycount), g_shell_unquote(cmd_params.retry_count, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_retrycount), ""); if(cmd_params.time_out != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_timeout), g_shell_unquote(cmd_params.time_out, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_timeout), ""); if(cmd_params.uid != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_uid), g_shell_unquote(cmd_params.uid, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_uid), ""); if(cmd_params.volume != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_volume), g_shell_unquote(cmd_params.volume, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_volume), ""); if(cmd_params.extraoptions != NULL) gtk_entry_set_text(GTK_ENTRY(options.entry_extraoptions), g_shell_unquote(cmd_params.extraoptions, NULL)); else gtk_entry_set_text(GTK_ENTRY(options.entry_extraoptions), ""); /* Checkboxes */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (options.check_b), cmd_params.b); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (options.check_C), cmd_params.C); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (options.check_m), cmd_params.m); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (options.check_s), cmd_params.s); /* ComboBox */ if(cmd_params.level != NULL) { if(cmd_params.level[0] == '0') gtk_combo_box_set_active (GTK_COMBO_BOX (options.combo_signature), 1); else if(cmd_params.level[0] == '1') gtk_combo_box_set_active (GTK_COMBO_BOX (options.combo_signature), 2); else if(cmd_params.level[0] == '2') gtk_combo_box_set_active (GTK_COMBO_BOX (options.combo_signature), 3); else if(cmd_params.level[0] == '3') gtk_combo_box_set_active (GTK_COMBO_BOX (options.combo_signature), 4); } else gtk_combo_box_set_active (GTK_COMBO_BOX (options.combo_signature), 0); } /** * Function opens option dialog box */ void show_options_dialog () { GtkWidget *label, *content_area, *halign, *hsep, *table; gint result, row; row = 0; /* Create the widgets */ options.dialog = gtk_dialog_new_with_buttons (_("Options"), GTK_WINDOW (gui.win), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); content_area = gtk_dialog_get_content_area (GTK_DIALOG (options.dialog)); table = gtk_table_new (21, 2, FALSE); gtk_container_add (GTK_CONTAINER (content_area), table); label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), _("Set ncpmount options:")); gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Codepage [-p]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_codepage = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_codepage, 1, 2, row, row+1); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Charset [-y]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL, GTK_FILL | GTK_EXPAND, 6, 0); options.entry_charset = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_charset, 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2,row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Signature level [-i]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL, GTK_FILL | GTK_EXPAND, 6, 0); options.combo_signature = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(options.combo_signature), _("Do not use signature level")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(options.combo_signature), _("Level 0 - never")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(options.combo_signature), _("Level 1 - supported")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(options.combo_signature), _("Level 2 - preferred")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(options.combo_signature), _("Level 3 - required")); gtk_combo_box_set_active(GTK_COMBO_BOX(options.combo_signature), 0); gtk_table_attach_defaults (GTK_TABLE (table), options.combo_signature, 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Volume to mount [-V]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_volume = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_volume, 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Mounted files uid [-u]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_uid = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_uid , 1, 2, row, row+1); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Mounted files gid [-g]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_gid = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_gid , 1, 2, row, row+1); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Files permission [-f]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_fmode = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_fmode , 1, 2, row, row+1); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Dirs permission [-d]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_dmode = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_dmode , 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Timeout [-t]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_timeout = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_timeout , 1, 2, row, row+1); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Retry count [-r]:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_retrycount = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_retrycount , 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; options.check_C = gtk_check_button_new_with_label (_("Don't convert password to uppercase [-C]")); gtk_table_attach_defaults (GTK_TABLE (table), options.check_C, 0, 2, row, row+1); row++; options.check_m = gtk_check_button_new_with_label (_("Allow multiple logins to server [-m]")); gtk_table_attach_defaults (GTK_TABLE (table), options.check_m, 0, 2, row, row+1); row++; options.check_s = gtk_check_button_new_with_label (_("Enable renaming/deletion of read-only files [-s]")); gtk_table_attach_defaults (GTK_TABLE (table), options.check_s, 0, 2, row, row+1); row++; options.check_b = gtk_check_button_new_with_label (_("Force bindery login to NDS servers [-b]")); gtk_table_attach_defaults (GTK_TABLE (table), options.check_b, 0, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; halign = gtk_alignment_new(0, 0, 0, 1); label = gtk_label_new (_("Extra options:")); gtk_container_add(GTK_CONTAINER(halign), label); gtk_table_attach(GTK_TABLE(table), halign, 0, 1, row, row+1, GTK_FILL , GTK_FILL | GTK_EXPAND, 6, 0); options.entry_extraoptions = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), options.entry_extraoptions , 1, 2, row, row+1); row++; /* ----- */ hsep = gtk_hseparator_new(); gtk_table_attach (GTK_TABLE(table), hsep, 0, 2, row, row+1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 6, 6); row++; /* Prefill set options */ set_options_from_cmdparams(); gtk_widget_show_all (table); result = gtk_dialog_run (GTK_DIALOG(options.dialog)); if(result == GTK_RESPONSE_OK) { save_options_to_cmdparams(); } gtk_widget_destroy (options.dialog); } /** * Show info, error or warning message */ void show_message (GtkMessageType type, const gchar *format, gchar *msgtxt, const gchar *format_sec, gchar *msgtxt_sec) { GtkWidget *dialog; dialog = gtk_message_dialog_new ( GTK_WINDOW (gui.win), 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); 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(FALSE,&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_editable_set_editable (GTK_EDITABLE(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); } /** * Function shows about dialog */ void show_about () { GtkWidget *dialog; GtkAboutDialog *about; GdkPixbuf *xpm; const gchar *auth[] = { "Jan Lipovský ", NULL }; /* const gchar *trans = "Jan Lipovský";*/ const gchar *license = "This program is licensed under the terms of the GNU General Public License version 3\r\n" \ "Available online under:\r\n\r\n" \ "http://www.gnu.org/licenses/gpl-3.0.html"; dialog = gtk_about_dialog_new(); gtk_window_set_transient_for( GTK_WINDOW( dialog ), GTK_WINDOW( gui.win ) ); about = GTK_ABOUT_DIALOG( dialog ); gtk_about_dialog_set_program_name( about, "gncpmount" ); gtk_about_dialog_set_version( about, PROG_VERSION ); gtk_about_dialog_set_copyright( about, "Copyright 2010 - 2011 © Jan Lipovský" ); gtk_about_dialog_set_website( about, "http://gncpmount.lipoja.net" ); gtk_about_dialog_set_website_label ( about, "gncpmount.lipoja.net" ); gtk_about_dialog_set_authors( about, auth); gtk_about_dialog_set_comments( about, "graphical user interface (GUI) for ncpmount" ); gtk_about_dialog_set_license (about, license); gtk_about_dialog_set_wrap_license (about, TRUE); gtk_about_dialog_set_license_type (about, GTK_LICENSE_GPL_3_0); gtk_about_dialog_set_logo_icon_name(about, "gncpmount"); /* gtk_about_dialog_set_translator_credits( about, trans ); */ xpm = gdk_pixbuf_new_from_xpm_data(about_xpm); gtk_about_dialog_set_logo( about, xpm ); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG( dialog )); gtk_widget_destroy (dialog); }