예제 #1
0
Gobby::PreferencesDialog::Editor::Editor(
	const Glib::RefPtr<Gtk::Builder>& builder,
	Preferences& preferences)
{
	builder->get_widget("tab-width", m_ent_tab_width);
	builder->get_widget("insert-spaces", m_btn_tab_spaces);
	builder->get_widget("automatic-indentation", m_btn_indentation_auto);
	builder->get_widget("smart-home-end", m_btn_homeend_smart);
	builder->get_widget("enable-autosave", m_btn_autosave_enabled);
	builder->get_widget("grid-autosave-interval",
	                    m_grid_autosave_interval);
	builder->get_widget("autosave-interval", m_ent_autosave_interval);

	const unsigned int tab_width = preferences.editor.tab_width;
	const bool tab_spaces = preferences.editor.tab_spaces;
	const bool indentation_auto = preferences.editor.indentation_auto;
	const bool homeend_smart = preferences.editor.homeend_smart;
	const unsigned int autosave_enabled =
		preferences.editor.autosave_enabled;
	const unsigned int autosave_interval =
		preferences.editor.autosave_interval;

	m_btn_autosave_enabled->signal_toggled().connect(
		sigc::mem_fun(*this, &Editor::on_autosave_enabled_toggled));

	m_ent_tab_width->set_range(1, 8);
	m_ent_tab_width->set_value(tab_width);
	m_ent_tab_width->set_increments(1, 1);
	connect_option(*m_ent_tab_width, preferences.editor.tab_width);

	m_btn_tab_spaces->set_active(tab_spaces);
	connect_option(*m_btn_tab_spaces, preferences.editor.tab_spaces);

	m_btn_indentation_auto->set_active(indentation_auto);
	connect_option(*m_btn_indentation_auto,
	               preferences.editor.indentation_auto);

	m_btn_homeend_smart->set_active(homeend_smart);
	connect_option(*m_btn_homeend_smart,
	               preferences.editor.homeend_smart);

	m_btn_autosave_enabled->set_active(autosave_enabled);
	connect_option(*m_btn_autosave_enabled,
	               preferences.editor.autosave_enabled);

	m_ent_autosave_interval->set_range(1, 60);
	m_ent_autosave_interval->set_value(autosave_interval);
	m_ent_autosave_interval->set_increments(1, 10);
	connect_option(*m_ent_autosave_interval,
	               preferences.editor.autosave_interval);

	// Initial sensitivity
	on_autosave_enabled_toggled();
}
예제 #2
0
Gobby::PreferencesDialog::Security::Security(Gtk::Window& parent,
                                             FileChooser& file_chooser,
                                             Preferences& preferences,
                                             CertificateManager& cert_manager):
	m_preferences(preferences), m_parent(parent), m_file_chooser(file_chooser),
	m_cert_manager(cert_manager),
	m_group_trust_file(_("Trusted CAs")),
	m_group_connection_policy(_("Secure Connection")),
	m_group_authentication(_("Authentication")),
	m_btn_path_trust_file(_("Select a file containing trusted CAs")),
	m_conn_path_trust_file(m_btn_path_trust_file,
	                       preferences.security.trust_file),
	m_error_trust_file("", GtkCompat::ALIGN_LEFT),
	m_cmb_connection_policy(preferences.security.policy),
	m_btn_auth_none(_("None")),
	m_btn_auth_cert(_("Use a certificate")),
	m_lbl_key_file(_("Private key:"), GtkCompat::ALIGN_LEFT),
	m_btn_key_file(_("Select a private key file")),
	m_conn_path_key_file(m_btn_key_file, preferences.security.key_file),
	m_btn_key_file_create(_("Create New...")),
	m_box_key_file(false, 6),
	m_error_key_file("", GtkCompat::ALIGN_LEFT),
	m_lbl_cert_file(_("Certificate:"), GtkCompat::ALIGN_LEFT),
	m_btn_cert_file(_("Select a certificate file")),
	m_conn_path_cert_file(m_btn_cert_file,
	                      preferences.security.certificate_file),
	m_btn_cert_file_create(_("Create New...")),
	m_box_cert_file(false, 6),
	m_error_cert_file("", GtkCompat::ALIGN_LEFT),
	m_size_group(Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL)),
	m_key_generator_handle(NULL), m_cert_generator_handle(NULL)
{
	m_cert_manager.signal_credentials_changed().connect(
		sigc::mem_fun(*this, &Security::on_credentials_changed));
	m_btn_auth_cert.signal_toggled().connect(
		sigc::mem_fun(*this, &Security::on_auth_cert_toggled));

	m_btn_path_trust_file.set_width_chars(20);
	const std::string& trust_file = preferences.security.trust_file;
	if(!trust_file.empty())
		m_btn_path_trust_file.set_filename(trust_file);

	m_btn_path_trust_file.show();
	m_group_trust_file.add(m_btn_path_trust_file);
	m_group_trust_file.add(m_error_trust_file);
	m_group_trust_file.show();

/*	m_cmb_connection_policy.add(
		_("Never use a secure connection"),
		INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED);*/
	m_cmb_connection_policy.add(
		_("Use TLS if possible"),
		INF_XMPP_CONNECTION_SECURITY_BOTH_PREFER_TLS);
	m_cmb_connection_policy.add(
		_("Always use TLS"),
		INF_XMPP_CONNECTION_SECURITY_ONLY_TLS);
	m_cmb_connection_policy.show();
	m_group_connection_policy.add(m_cmb_connection_policy);
	m_group_connection_policy.show();

	Gtk::RadioButton::Group group;
	m_btn_auth_none.set_group(group);
	m_btn_auth_none.show();
	m_btn_auth_cert.set_group(group);
	m_btn_auth_cert.show();
	if(preferences.security.authentication_enabled)
		m_btn_auth_cert.set_active(true);
	else
		m_btn_auth_none.set_active(true);
	connect_option(m_btn_auth_cert,
	               preferences.security.authentication_enabled);

	m_lbl_key_file.show();
	m_btn_key_file.set_width_chars(20);
	const std::string& key_file = preferences.security.key_file;
	if(!key_file.empty())
	{
		m_conn_path_key_file.block();
		m_btn_key_file.set_filename(key_file);
		m_conn_path_key_file.unblock();
	}
	m_btn_key_file.show();

	m_btn_key_file_create.signal_clicked().connect(
		sigc::mem_fun(*this, &Security::on_create_key_clicked));
	m_btn_key_file_create.show();

	m_box_key_file.pack_start(m_lbl_key_file, Gtk::PACK_SHRINK);
	m_box_key_file.pack_start(m_btn_key_file, Gtk::PACK_SHRINK);
	m_box_key_file.pack_start(m_btn_key_file_create, Gtk::PACK_SHRINK);
	m_box_key_file.set_sensitive(
		preferences.security.authentication_enabled);
	m_box_key_file.show();

	m_lbl_cert_file.show();
	m_btn_cert_file.set_width_chars(20);
	const std::string& cert_file = preferences.security.certificate_file;
	if(!cert_file.empty())
	{
		m_conn_path_cert_file.block();
		m_btn_cert_file.set_filename(cert_file);
		m_conn_path_cert_file.unblock();
	}
	m_btn_cert_file.show();

	m_btn_cert_file_create.signal_clicked().connect(
		sigc::mem_fun(*this, &Security::on_create_cert_clicked));
	m_btn_cert_file_create.show();

	m_box_cert_file.pack_start(m_lbl_cert_file, Gtk::PACK_SHRINK);
	m_box_cert_file.pack_start(m_btn_cert_file, Gtk::PACK_SHRINK);
	m_box_cert_file.pack_start(m_btn_cert_file_create, Gtk::PACK_SHRINK);
	m_box_cert_file.set_sensitive(
		preferences.security.authentication_enabled);
	m_box_cert_file.show();

	m_size_group->add_widget(m_lbl_key_file);
	m_size_group->add_widget(m_lbl_cert_file);

	m_group_authentication.add(m_btn_auth_none);
	m_group_authentication.add(m_btn_auth_cert);
	m_group_authentication.add(*indent(m_box_key_file));
	m_group_authentication.add(*indent(m_error_key_file));
	m_group_authentication.add(*indent(m_box_cert_file));
	m_group_authentication.add(*indent(m_error_cert_file));
	m_group_authentication.show();

	on_credentials_changed();

	add(m_group_trust_file, false);
	add(m_group_connection_policy, false);
	add(m_group_authentication, false);
}
예제 #3
0
Gobby::PreferencesDialog::View::View(Preferences& preferences):
	m_group_wrap(_("Text Wrapping") ),
	m_group_linenum(_("Line Numbers") ),
	m_group_curline(_("Current Line") ),
	m_group_margin(_("Right Margin") ),
	m_group_bracket(_("Bracket Matching") ),
	m_group_spaces(_("Whitespace Display") ),
	m_btn_wrap_text(_("Enable text wrapping") ),
	m_btn_wrap_words(_("Do not split words over two lines") ),
	m_btn_linenum_display(_("Display line numbers") ),
	m_btn_curline_highlight(_("Highlight current line") ),
	m_btn_margin_display(_("Display right margin") ),
	m_lbl_margin_pos(_("Right margin at column:") ),
	m_btn_bracket_highlight(_("Highlight matching bracket") ),
	m_cmb_spaces_display(preferences.view.whitespace_display)
{
	Gtk::WrapMode mode = preferences.view.wrap_mode;
	bool linenum_display = preferences.view.linenum_display;
	bool curline_highlight = preferences.view.curline_highlight;
	bool margin_display = preferences.view.margin_display;
	unsigned int margin_pos = preferences.view.margin_pos;
	bool bracket_highlight = preferences.view.bracket_highlight;

	m_btn_margin_display.signal_toggled().connect(
		sigc::mem_fun(*this, &View::on_margin_display_toggled));
	m_btn_wrap_text.signal_toggled().connect(
		sigc::mem_fun(*this, &View::on_wrap_text_toggled));

	m_lbl_margin_pos.show();
	m_ent_margin_pos.set_range(1, 1024);
	m_ent_margin_pos.set_value(margin_pos);
	m_ent_margin_pos.set_increments(1, 16);
	m_ent_margin_pos.show();
	connect_option(m_ent_margin_pos, preferences.view.margin_pos);

	m_btn_wrap_text.set_active(mode != Gtk::WRAP_NONE);
	m_btn_wrap_text.show();
	m_btn_wrap_words.set_active(mode == Gtk::WRAP_WORD_CHAR);
	m_btn_wrap_words.set_sensitive(mode != Gtk::WRAP_NONE);
	m_btn_wrap_words.show();
	connect_wrap_option(m_btn_wrap_text,
	                    m_btn_wrap_words,
                            preferences.view.wrap_mode);
	m_btn_linenum_display.set_active(linenum_display);
	m_btn_linenum_display.show();
	connect_option(m_btn_linenum_display,
	               preferences.view.linenum_display);
	m_btn_curline_highlight.set_active(curline_highlight);
	m_btn_curline_highlight.show();
	connect_option(m_btn_curline_highlight,
	               preferences.view.curline_highlight);
	m_btn_margin_display.set_active(margin_display);
	m_btn_margin_display.show();
	connect_option(m_btn_margin_display,
	               preferences.view.margin_display);
	m_btn_bracket_highlight.set_active(bracket_highlight);
	m_btn_bracket_highlight.show();
	connect_option(m_btn_bracket_highlight,
	               preferences.view.bracket_highlight);

	// TODO: When we require a higher version of GtkSourceView, then
	// we should add GTK_SOURCE_DRAW_SPACES_NBSP here.
	const int SOURCE_DRAW_SPACES = GTK_SOURCE_DRAW_SPACES_SPACE;

	m_cmb_spaces_display.add(
		_("Display no whitespace"),
		static_cast<GtkSourceDrawSpacesFlags>(0));
	m_cmb_spaces_display.add(
		_("Display spaces"),
		static_cast<GtkSourceDrawSpacesFlags>(
			SOURCE_DRAW_SPACES));
	m_cmb_spaces_display.add(
		_("Display tabs"),
		static_cast<GtkSourceDrawSpacesFlags>(
			GTK_SOURCE_DRAW_SPACES_TAB));
	m_cmb_spaces_display.add(
		_("Display tabs and spaces"),
		static_cast<GtkSourceDrawSpacesFlags>(
			SOURCE_DRAW_SPACES | GTK_SOURCE_DRAW_SPACES_TAB));
	m_cmb_spaces_display.show();

	m_box_margin_pos.set_spacing(6);
	m_box_margin_pos.set_sensitive(margin_display);
	m_box_margin_pos.pack_start(m_lbl_margin_pos, Gtk::PACK_SHRINK);
	m_box_margin_pos.pack_start(*indent(m_ent_margin_pos),
	                            Gtk::PACK_SHRINK);
	m_box_margin_pos.show();

	m_group_wrap.add(m_btn_wrap_text);
	m_group_wrap.add(*indent(m_btn_wrap_words));
	m_group_wrap.show();

	m_group_linenum.add(m_btn_linenum_display);
	m_group_linenum.show();

	m_group_curline.add(m_btn_curline_highlight);
	m_group_curline.show();

	m_group_margin.add(m_btn_margin_display);
	m_group_margin.add(m_box_margin_pos);
	m_group_margin.show();

	m_group_bracket.add(m_btn_bracket_highlight);
	m_group_bracket.show();

	m_group_spaces.add(m_cmb_spaces_display);
	m_group_spaces.show();

	add(m_group_wrap, false);
	add(m_group_linenum, false);
	add(m_group_curline, false);
	add(m_group_margin, false);
	add(m_group_bracket, false);
	add(m_group_spaces, false);
}
예제 #4
0
Gobby::PreferencesDialog::Editor::Editor(Preferences& preferences):
	m_group_tab(_("Tab Stops")),
	m_group_indentation(_("Indentation")),
	m_group_homeend(_("Home/End Behavior")),
	m_group_saving(_("File Saving")),
	m_lbl_tab_width(_("_Tab width:"), GtkCompat::ALIGN_RIGHT,
	                Gtk::ALIGN_CENTER, true),
	m_btn_tab_spaces(_("Insert _spaces instead of tabs"), true),
	m_btn_indentation_auto(_("Enable automatic _indentation"), true),
	m_btn_homeend_smart(_("Smart _home/end"), true),
	m_btn_autosave_enabled(_("Enable _automatic saving of documents"),
	                       true),
	m_lbl_autosave_interval(_("Autosave interval in _minutes:"), true)
{
	unsigned int tab_width = preferences.editor.tab_width;
	bool tab_spaces = preferences.editor.tab_spaces;
	bool indentation_auto = preferences.editor.indentation_auto;
	bool homeend_smart = preferences.editor.homeend_smart;
	unsigned int autosave_enabled = preferences.editor.autosave_enabled;
	unsigned int autosave_interval = preferences.editor.autosave_interval;

	m_btn_autosave_enabled.signal_toggled().connect(
		sigc::mem_fun(*this, &Editor::on_autosave_enabled_toggled));

	m_lbl_tab_width.set_mnemonic_widget(m_ent_tab_width);
	m_lbl_tab_width.show();
	m_ent_tab_width.set_range(1, 8);
	m_ent_tab_width.set_value(tab_width);
	m_ent_tab_width.set_increments(1, 1);
	m_ent_tab_width.show();
	connect_option(m_ent_tab_width, preferences.editor.tab_width);

	m_btn_homeend_smart.set_tooltip_text(
		_("With this option enabled, Home/End keys move to "
		  "first/last character before going to the start/end of the "
		  "line.")
	);

	m_box_tab_width.set_spacing(6);
	m_box_tab_width.pack_start(m_lbl_tab_width, Gtk::PACK_SHRINK);
	m_box_tab_width.pack_start(m_ent_tab_width, Gtk::PACK_SHRINK);
	m_box_tab_width.show();

	m_btn_tab_spaces.set_active(tab_spaces);
	m_btn_tab_spaces.show();
	connect_option(m_btn_tab_spaces, preferences.editor.tab_spaces);
	m_btn_indentation_auto.set_active(indentation_auto);
	m_btn_indentation_auto.show();
	connect_option(m_btn_indentation_auto,
	               preferences.editor.indentation_auto);
	m_btn_homeend_smart.set_active(homeend_smart);
	m_btn_homeend_smart.show();
	connect_option(m_btn_homeend_smart, preferences.editor.homeend_smart);

	m_btn_autosave_enabled.set_active(autosave_enabled);
	m_btn_autosave_enabled.show();
	connect_option(m_btn_autosave_enabled,
	               preferences.editor.autosave_enabled);

	m_lbl_autosave_interval.set_mnemonic_widget(m_ent_autosave_interval);
	m_lbl_autosave_interval.show();
	m_ent_autosave_interval.set_range(1,60);
	m_ent_autosave_interval.set_value(autosave_interval);
	m_ent_autosave_interval.set_increments(1,10);
	m_ent_autosave_interval.show();
	connect_option(m_ent_autosave_interval,
	               preferences.editor.autosave_interval);

	m_box_autosave_interval.set_spacing(6);
	m_box_autosave_interval.pack_start(m_lbl_autosave_interval,
	                                   Gtk::PACK_SHRINK);
	m_box_autosave_interval.pack_start(m_ent_autosave_interval,
	                                   Gtk::PACK_SHRINK);
	m_box_autosave_interval.set_sensitive(autosave_enabled);
	m_box_autosave_interval.show();

	m_group_tab.add(m_box_tab_width);
	m_group_tab.add(m_btn_tab_spaces);
	m_group_tab.show();

	m_group_indentation.add(m_btn_indentation_auto);
	m_group_indentation.show();

	m_group_homeend.add(m_btn_homeend_smart);
	m_group_homeend.show();

	m_group_saving.add(m_btn_autosave_enabled);
	m_group_saving.add(*indent(m_box_autosave_interval));
	m_group_saving.show();

	add(m_group_tab, false);
	add(m_group_indentation, false);
	add(m_group_homeend, false);
	add(m_group_saving, false);
}
예제 #5
0
Gobby::PreferencesDialog::User::User(Gtk::Window& parent,
                                     Preferences& preferences):
	m_group_settings(_("Settings")),
	m_group_remote(_("Remote Users")),
	m_group_local(_("Local Documents")),
	m_box_user_name(false, 6),
	m_lbl_user_name(_("User name:"), GtkCompat::ALIGN_LEFT),
	m_box_user_color(false, 6),
	m_lbl_user_color(_("User color:"), GtkCompat::ALIGN_LEFT),
	m_box_user_alpha(false, 6),
	m_lbl_user_alpha(_("Color intensity:"), GtkCompat::ALIGN_LEFT),
	m_scl_user_alpha(0.0, 1.0, 0.025),
	m_btn_user_color(_("Choose a new user color"), parent),
	m_btn_remote_show_cursors(_("Show cursors of remote users")),
	m_btn_remote_show_selections(_("Show selections of remote users")),
	m_btn_remote_show_current_lines(
		_("Highlight current line of remote users")),
	m_btn_remote_show_cursor_positions(
		_("Indicate cursor position of remote users "
		  "in the scrollbar")),
	m_btn_local_allow_connections(
		_("Allow remote users to edit local documents")),
	m_btn_local_require_password(
		_("Require remote users to enter a password")),
	m_lbl_local_password(_("Password:"******"Port:"), GtkCompat::ALIGN_LEFT),
	m_box_local_port(false, 6),
	m_box_local_connections(false, 6),
	m_btn_local_keep_documents(
		_("Remember local documents after Gobby restart")),
	m_lbl_local_documents_directory(_("Local documents directory:")),
	m_btn_local_documents_directory(
		Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER),
	m_conn_local_documents_directory(m_btn_local_documents_directory,
	                                 preferences.user.host_directory),
	m_box_local_documents_directory(false, 6),
	m_size_group(Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL))
{
	m_btn_local_allow_connections.signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_allow_connections_toggled));
	m_btn_local_require_password.signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_require_password_toggled));
	m_btn_local_keep_documents.signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_keep_documents_toggled));

	m_lbl_user_name.show();
	m_ent_user_name.set_text(preferences.user.name);
	m_ent_user_name.show();
	connect_option(m_ent_user_name, preferences.user.name);

	m_box_user_name.pack_start(m_lbl_user_name, Gtk::PACK_SHRINK);
	m_box_user_name.pack_start(m_ent_user_name, Gtk::PACK_SHRINK);
	m_box_user_name.show();

	m_btn_user_color.set_hue(preferences.user.hue);
	m_btn_user_color.set_saturation(0.35);
	m_btn_user_color.set_value(1.0);
	m_btn_user_color.set_size_request(150, -1);
	m_lbl_user_color.show();
	m_btn_user_color.show();
	connect_hue_option(m_btn_user_color, preferences.user.hue);

	m_box_user_color.pack_start(m_lbl_user_color, Gtk::PACK_SHRINK);
	m_box_user_color.pack_start(
		m_btn_user_color, Gtk::PACK_SHRINK);
	m_box_user_color.show();

	m_lbl_user_alpha.show();
	m_scl_user_alpha.set_value(preferences.user.alpha);
	m_scl_user_alpha.set_show_fill_level(false);
	m_scl_user_alpha.set_draw_value(false);
	m_scl_user_alpha.show();
	connect_option(m_scl_user_alpha, preferences.user.alpha);

	m_box_user_alpha.pack_start(m_lbl_user_alpha, Gtk::PACK_SHRINK);
	m_box_user_alpha.pack_start(
		m_scl_user_alpha, Gtk::PACK_EXPAND_WIDGET);
	m_box_user_alpha.show();

	m_group_settings.add(m_box_user_name);
	m_group_settings.add(m_box_user_color);
	m_group_settings.add(m_box_user_alpha);

	m_size_group->add_widget(m_lbl_user_name);
	m_size_group->add_widget(m_lbl_user_color);
	m_size_group->add_widget(m_lbl_user_alpha);
	m_group_settings.show();

	m_btn_remote_show_cursors.set_active(
		preferences.user.show_remote_cursors);
	m_btn_remote_show_cursors.show();
	connect_option(m_btn_remote_show_cursors,
	               preferences.user.show_remote_cursors);

	m_btn_remote_show_selections.set_active(
		preferences.user.show_remote_selections);
	m_btn_remote_show_selections.show();
	connect_option(m_btn_remote_show_selections,
	               preferences.user.show_remote_selections);

	m_btn_remote_show_current_lines.set_active(
		preferences.user.show_remote_current_lines);
	m_btn_remote_show_current_lines.show();
	connect_option(m_btn_remote_show_current_lines,
	               preferences.user.show_remote_current_lines);

	m_btn_remote_show_cursor_positions.set_active(
		preferences.user.show_remote_cursor_positions);
	m_btn_remote_show_cursor_positions.show();
	connect_option(m_btn_remote_show_cursor_positions,
	               preferences.user.show_remote_cursor_positions);

	m_group_remote.add(m_btn_remote_show_cursors);
	m_group_remote.add(m_btn_remote_show_selections);
	m_group_remote.add(m_btn_remote_show_current_lines);
	m_group_remote.add(m_btn_remote_show_cursor_positions);
	m_group_remote.show();

	// TODO: Set mnemonics
	// m_lbl_autosave_interval.set_mnemonic_widget(m_ent_autosave_interval);

	m_btn_local_allow_connections.set_active(
		preferences.user.allow_remote_access);
	m_btn_local_allow_connections.show();
	connect_option(m_btn_local_allow_connections,
	               preferences.user.allow_remote_access);

	m_btn_local_require_password.set_active(
		preferences.user.require_password);
	m_btn_local_require_password.show();
	connect_option(m_btn_local_require_password,
	               preferences.user.require_password);

	m_lbl_local_password.show();
	m_ent_local_password.set_visibility(false);
	m_ent_local_password.set_text(
		static_cast<std::string>(preferences.user.password));
	m_ent_local_password.show();
	connect_option(m_ent_local_password,
	               preferences.user.password);

	m_box_local_password.pack_start(m_lbl_local_password,
	                                Gtk::PACK_SHRINK);
	m_box_local_password.pack_start(m_ent_local_password,
	                                Gtk::PACK_SHRINK);
	m_box_local_password.set_sensitive(preferences.user.require_password);
	m_box_local_password.show();

	m_lbl_local_port.show();
	m_ent_local_port.set_range(1, 65535);
	m_ent_local_port.set_value(preferences.user.port);
	m_ent_local_port.set_increments(1, 1);
	m_ent_local_port.show();
	connect_option(m_ent_local_port, preferences.user.port);

	m_box_local_port.pack_start(m_lbl_local_port,
	                            Gtk::PACK_SHRINK);
	m_box_local_port.pack_start(m_ent_local_port,
	                            Gtk::PACK_SHRINK);
	m_box_local_port.show();

	m_box_local_connections.pack_start(m_btn_local_require_password,
	                                   Gtk::PACK_SHRINK);
	m_box_local_connections.pack_start(*indent(m_box_local_password),
	                                   Gtk::PACK_SHRINK);
	m_box_local_connections.pack_start(m_box_local_port,
	                                   Gtk::PACK_SHRINK);
	m_box_local_connections.set_sensitive(
		preferences.user.allow_remote_access);
	m_box_local_connections.show();

	m_btn_local_keep_documents.set_active(
		preferences.user.keep_local_documents);
	m_btn_local_keep_documents.show();
	connect_option(m_btn_local_keep_documents,
	               preferences.user.keep_local_documents);

	m_lbl_local_documents_directory.show();
	m_btn_local_documents_directory.set_width_chars(20);
	m_btn_local_documents_directory.set_filename(
		static_cast<std::string>(preferences.user.host_directory));
	m_btn_local_documents_directory.show();

	m_box_local_documents_directory.pack_start(
		m_lbl_local_documents_directory,
		Gtk::PACK_SHRINK);
	m_box_local_documents_directory.pack_start(
		m_btn_local_documents_directory,
		Gtk::PACK_SHRINK);
	m_box_local_documents_directory.set_sensitive(
		preferences.user.keep_local_documents);
	m_box_local_documents_directory.show();

	m_group_local.add(m_btn_local_allow_connections);
	m_group_local.add(*indent(m_box_local_connections));
	m_group_local.add(m_btn_local_keep_documents);
	m_group_local.add(*indent(m_box_local_documents_directory));
	m_group_local.show();

	add(m_group_settings, false);
	add(m_group_remote, false);
	add(m_group_local, false);
}
예제 #6
0
Gobby::PreferencesDialog::Security::Security(
	const Glib::RefPtr<Gtk::Builder>& builder,
	FileChooser& file_chooser, Preferences& preferences,
	CertificateManager& cert_manager)
:
	m_preferences(preferences),
	m_file_chooser(file_chooser),
	m_cert_manager(cert_manager)
{
	builder->get_widget("trust-default-cas", m_btn_use_system_trust);
	builder->get_widget("additionally-trusted-cas", m_btn_path_trust_file);
	builder->get_widget("ca-error-message", m_error_trust_file);
	builder->get_widget_derived("secure-connection",
	                            m_cmb_connection_policy);
	builder->get_widget("authentication-none", m_btn_auth_none);
	builder->get_widget("authentication-certificate", m_btn_auth_cert);
	builder->get_widget("grid-auth-certificate", m_grid_auth_cert);

	builder->get_widget("private-key-file", m_btn_key_file);
	builder->get_widget("create-private-key", m_btn_key_file_create);
	builder->get_widget("key-error-message", m_error_key_file);

	builder->get_widget("certificate-file", m_btn_cert_file);
	builder->get_widget("create-certificate", m_btn_cert_file_create);
	builder->get_widget("cert-error-message", m_error_cert_file);

	m_cert_manager.signal_credentials_changed().connect(
		sigc::mem_fun(*this, &Security::on_credentials_changed));
	m_btn_auth_cert->signal_toggled().connect(
		sigc::mem_fun(*this, &Security::on_auth_cert_toggled));

	m_btn_use_system_trust->set_active(
		m_preferences.security.use_system_trust);
	m_btn_use_system_trust->signal_toggled().connect(
		sigc::mem_fun(*this, &Security::on_use_system_trust_toggled));

	const std::string& trust_file = preferences.security.trusted_cas;
	if(!trust_file.empty())
		m_btn_path_trust_file->set_filename(trust_file);
	m_conn_path_trust_file.reset(new PathConnection(
		*m_btn_path_trust_file, preferences.security.trusted_cas));

	m_cmb_connection_policy->set_option(preferences.security.policy);
/*	m_cmb_connection_policy->add(
		_("Never use a secure connection"),
		INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED);*/
	m_cmb_connection_policy->add(
		_("Use TLS if possible"),
		INF_XMPP_CONNECTION_SECURITY_BOTH_PREFER_TLS);
	m_cmb_connection_policy->add(
		_("Always use TLS"),
		INF_XMPP_CONNECTION_SECURITY_ONLY_TLS);

	if(preferences.security.authentication_enabled)
		m_btn_auth_cert->set_active(true);
	else
		m_btn_auth_none->set_active(true);
	connect_option(*m_btn_auth_cert,
	               preferences.security.authentication_enabled);

	const std::string& key_file = preferences.security.key_file;
	if(!key_file.empty())
		m_btn_key_file->set_filename(key_file);
	m_conn_path_key_file.reset(new PathConnection(
		*m_btn_key_file, preferences.security.key_file));
	m_btn_key_file_create->signal_clicked().connect(
		sigc::mem_fun(*this, &Security::on_create_key_clicked));

	const std::string& cert_file = preferences.security.certificate_file;
	if(!cert_file.empty())
		m_btn_cert_file->set_filename(cert_file);
	m_conn_path_cert_file.reset(new PathConnection(
		*m_btn_cert_file, preferences.security.certificate_file));
	m_btn_cert_file_create->signal_clicked().connect(
		sigc::mem_fun(*this, &Security::on_create_cert_clicked));

	// Initial sensitivity and content
	on_auth_cert_toggled();
	on_credentials_changed();
}
예제 #7
0
Gobby::PreferencesDialog::View::View(
	const Glib::RefPtr<Gtk::Builder>& builder,Preferences& preferences)
{
	builder->get_widget("enable-wrapping", m_btn_wrap_text);
	builder->get_widget("do-not-split-words", m_btn_wrap_words);
	builder->get_widget("display-line-numbers", m_btn_linenum_display);
	builder->get_widget("highlight-current-line",
	                    m_btn_curline_highlight);
	builder->get_widget("display-right-margin", m_btn_margin_display);
	builder->get_widget("grid-margin-position", m_grid_margin_pos);
	builder->get_widget("right-margin-column", m_ent_margin_pos);
	builder->get_widget("highlight-matching-brackets",
	                    m_btn_bracket_highlight);
	builder->get_widget_derived("display-whitespace",
	                            m_cmb_spaces_display);

	const Gtk::WrapMode mode = preferences.view.wrap_mode;
	const bool linenum_display = preferences.view.linenum_display;
	const bool curline_highlight = preferences.view.curline_highlight;
	const bool margin_display = preferences.view.margin_display;
	const unsigned int margin_pos = preferences.view.margin_pos;
	const bool bracket_highlight = preferences.view.bracket_highlight;

	m_btn_margin_display->signal_toggled().connect(
		sigc::mem_fun(*this, &View::on_margin_display_toggled));
	m_btn_wrap_text->signal_toggled().connect(
		sigc::mem_fun(*this, &View::on_wrap_text_toggled));

	m_ent_margin_pos->set_range(1, 1024);
	m_ent_margin_pos->set_value(margin_pos);
	m_ent_margin_pos->set_increments(1, 16);
	connect_option(*m_ent_margin_pos, preferences.view.margin_pos);

	m_btn_wrap_text->set_active(mode != Gtk::WRAP_NONE);
	m_btn_wrap_words->set_active(mode == Gtk::WRAP_WORD_CHAR);
	connect_wrap_option(*m_btn_wrap_text, *m_btn_wrap_words,
                            preferences.view.wrap_mode);

	m_btn_linenum_display->set_active(linenum_display);
	connect_option(*m_btn_linenum_display,
	               preferences.view.linenum_display);

	m_btn_curline_highlight->set_active(curline_highlight);
	connect_option(*m_btn_curline_highlight,
	               preferences.view.curline_highlight);

	m_btn_margin_display->set_active(margin_display);
	connect_option(*m_btn_margin_display,
	               preferences.view.margin_display);

	m_btn_bracket_highlight->set_active(bracket_highlight);
	connect_option(*m_btn_bracket_highlight,
	               preferences.view.bracket_highlight);

	// TODO: When we require a higher version of GtkSourceView, then
	// we should add GTK_SOURCE_DRAW_SPACES_NBSP here.
	const int SOURCE_DRAW_SPACES = GTK_SOURCE_DRAW_SPACES_SPACE;

	m_cmb_spaces_display->set_option(preferences.view.whitespace_display);
	m_cmb_spaces_display->add(
		_("Display no whitespace"),
		static_cast<GtkSourceDrawSpacesFlags>(0));
	m_cmb_spaces_display->add(
		_("Display spaces"),
		static_cast<GtkSourceDrawSpacesFlags>(
			SOURCE_DRAW_SPACES));
	m_cmb_spaces_display->add(
		_("Display tabs"),
		static_cast<GtkSourceDrawSpacesFlags>(
			GTK_SOURCE_DRAW_SPACES_TAB));
	m_cmb_spaces_display->add(
		_("Display tabs and spaces"),
		static_cast<GtkSourceDrawSpacesFlags>(
			SOURCE_DRAW_SPACES | GTK_SOURCE_DRAW_SPACES_TAB));

	// Initial sensitivity
	on_wrap_text_toggled();
	on_margin_display_toggled();
}
예제 #8
0
Gobby::PreferencesDialog::User::User(
	const Glib::RefPtr<Gtk::Builder>& builder,
	Preferences& preferences)
{
	builder->get_widget("user-name", m_ent_user_name);
	builder->get_widget_derived("user-color", m_btn_user_color);
	builder->get_widget("color-intensity", m_scl_user_alpha);
	builder->get_widget("remote-show-cursors", m_btn_remote_show_cursors);
	builder->get_widget("remote-show-selections",
	                    m_btn_remote_show_selections);
	builder->get_widget("remote-show-current-line",
	                    m_btn_remote_show_current_lines);
	builder->get_widget("remote-show-in-scrollbar",
	                    m_btn_remote_show_cursor_positions);
	builder->get_widget("grid-local-connections",
	                    m_grid_local_connections);
	builder->get_widget("remote-allow-edit",
	                    m_btn_local_allow_connections);
	builder->get_widget("require-password",
	                    m_btn_local_require_password);
	builder->get_widget("grid-password", m_grid_password);
	builder->get_widget("password-entry", m_ent_local_password);
	builder->get_widget("port-number", m_ent_local_port);
	builder->get_widget("remember-local-documents",
	                    m_btn_local_keep_documents);
	builder->get_widget("grid-local-documents-directory",
	                    m_grid_local_documents_directory);
	builder->get_widget("local-documents-directory",
	                    m_btn_local_documents_directory);

	m_conn_local_documents_directory.reset(new PathConnection(
		*m_btn_local_documents_directory,
		preferences.user.host_directory));

	m_btn_local_allow_connections->signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_allow_connections_toggled));
	m_btn_local_require_password->signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_require_password_toggled));
	m_btn_local_keep_documents->signal_toggled().connect(
		sigc::mem_fun(
			*this, &User::on_local_keep_documents_toggled));

	m_ent_user_name->set_text(preferences.user.name);
	connect_option(*m_ent_user_name, preferences.user.name);

	m_btn_user_color->set_hue(preferences.user.hue);
	m_btn_user_color->set_saturation(0.35);
	m_btn_user_color->set_value(1.0);
	connect_hue_option(*m_btn_user_color, preferences.user.hue);

	m_scl_user_alpha->set_range(0.0, 1.0);
	m_scl_user_alpha->set_increments(0.0025, 0.1);
	m_scl_user_alpha->set_value(preferences.user.alpha);
	connect_option(*m_scl_user_alpha, preferences.user.alpha);

	m_btn_remote_show_cursors->set_active(
		preferences.user.show_remote_cursors);
	connect_option(*m_btn_remote_show_cursors,
	               preferences.user.show_remote_cursors);

	m_btn_remote_show_selections->set_active(
		preferences.user.show_remote_selections);
	connect_option(*m_btn_remote_show_selections,
	               preferences.user.show_remote_selections);

	m_btn_remote_show_current_lines->set_active(
		preferences.user.show_remote_current_lines);
	connect_option(*m_btn_remote_show_current_lines,
	               preferences.user.show_remote_current_lines);

	m_btn_remote_show_cursor_positions->set_active(
		preferences.user.show_remote_cursor_positions);
	connect_option(*m_btn_remote_show_cursor_positions,
	               preferences.user.show_remote_cursor_positions);

	m_btn_local_allow_connections->set_active(
		preferences.user.allow_remote_access);
	connect_option(*m_btn_local_allow_connections,
	               preferences.user.allow_remote_access);

	m_btn_local_require_password->set_active(
		preferences.user.require_password);
	connect_option(*m_btn_local_require_password,
	               preferences.user.require_password);

	m_ent_local_password->set_text(
		static_cast<std::string>(preferences.user.password));
	connect_option(*m_ent_local_password,
	               preferences.user.password);

	m_ent_local_port->set_range(1, 65535);
	m_ent_local_port->set_value(preferences.user.port);
	m_ent_local_port->set_increments(1, 1);
	connect_option(*m_ent_local_port, preferences.user.port);

	m_btn_local_keep_documents->set_active(
		preferences.user.keep_local_documents);
	connect_option(*m_btn_local_keep_documents,
	               preferences.user.keep_local_documents);

	m_btn_local_documents_directory->set_filename(
		static_cast<std::string>(preferences.user.host_directory));

	// Initial sensitivity
	on_local_allow_connections_toggled();
	on_local_require_password_toggled();
	on_local_keep_documents_toggled();
}