367 lines
12 KiB
C
367 lines
12 KiB
C
/* vim: set foldmethod=marker : */
|
|
/* {{{ Legal info
|
|
* This program 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 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program 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 Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
}}} */
|
|
/* {{{ Author and file info
|
|
* setup.c
|
|
*
|
|
* Wed Nov 09 22:16:59 2005
|
|
* Copyright (C) 2005 Gergely POLONKAI
|
|
* polesz@techinfo.hu
|
|
*
|
|
* Preferences dialog
|
|
}}} */
|
|
|
|
/* {{{ Defines */
|
|
#define CB_ALL 0
|
|
#define CB_SCROLL 1
|
|
#define CB_TRANSBG 2
|
|
#define CB_BGSAT 3
|
|
#define CB_FONT 4
|
|
#define CB_RESET 5
|
|
/* }}} */
|
|
|
|
/* {{{ Includes */
|
|
#include <libintl.h>
|
|
#include <gtk/gtk.h>
|
|
#include <string.h>
|
|
#include <vte/vte.h>
|
|
|
|
#include "variables.h"
|
|
#include "functions.h"
|
|
/* }}} */
|
|
|
|
/* {{{ Typedefs */
|
|
typedef struct _t_which {
|
|
gint which;
|
|
gboolean bool_value;
|
|
gfloat float_value;
|
|
gchar *string_value;
|
|
} t_which;
|
|
/* }}} */
|
|
|
|
/* {{{ Variables */
|
|
#ifdef DEBUG
|
|
GtkWidget *debug_cb;
|
|
#endif /* DEBUG */
|
|
GtkWidget *cmode_cb;
|
|
GtkWidget *prefsave_cb;
|
|
GtkWidget *scroll_cb;
|
|
GtkWidget *transbg_cb;
|
|
GtkWidget *font_button;
|
|
GtkWidget *historylen_spin;
|
|
GtkWidget *satur_scale;
|
|
GtkWidget *changetab_cb;
|
|
t_config_data backup_data;
|
|
/* }}} */
|
|
|
|
/* {{{ debug_cb_toggled() */
|
|
#ifdef DEBUG
|
|
static void
|
|
debug_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
backup_data.debug = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
}
|
|
#endif /* DEBUG */
|
|
/* }}} */
|
|
|
|
/* {{{ cmode_cb_toggled() */
|
|
static void
|
|
cmode_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
backup_data.change_to_message = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ prefsave_cb_toggled() */
|
|
static void
|
|
prefsave_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
backup_data.save_prefs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ changetab_cb_toggled() */
|
|
static void
|
|
changetab_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
backup_data.change_to_new_tab = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ set_tab_vt_prefs() */
|
|
static void
|
|
set_tab_vt_prefs(gpointer data, gpointer user_data)
|
|
{
|
|
t_tab_data *tab = (t_tab_data *)data;
|
|
t_which *which = (t_which *)user_data;
|
|
|
|
if ((which->which == CB_SCROLL) || (which->which == CB_ALL))
|
|
vte_terminal_set_scroll_on_output(VTE_TERMINAL(tab->vt), which->bool_value);
|
|
if ((which->which == CB_TRANSBG) || (which->which == CB_ALL))
|
|
vte_terminal_set_background_transparent(VTE_TERMINAL(tab->vt), which->bool_value);
|
|
if ((which->which == CB_BGSAT) || (which->which == CB_ALL))
|
|
vte_terminal_set_background_saturation(VTE_TERMINAL(tab->vt), which->float_value / 100.0);
|
|
if ((which->which == CB_FONT) || (which->which == CB_ALL))
|
|
vte_terminal_set_font_from_string(VTE_TERMINAL(tab->vt), which->string_value);
|
|
if (which->which == CB_RESET)
|
|
{
|
|
vte_terminal_set_scroll_on_output(VTE_TERMINAL(tab->vt), config_data.scroll_on_output);
|
|
vte_terminal_set_background_transparent(VTE_TERMINAL(tab->vt), config_data.transparent_background);
|
|
vte_terminal_set_background_saturation(VTE_TERMINAL(tab->vt), config_data.background_saturation);
|
|
vte_terminal_set_font_from_string(VTE_TERMINAL(tab->vt), config_data.vte_font);
|
|
}
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ scroll_cb_toggled() */
|
|
static void
|
|
scroll_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
t_which which;
|
|
|
|
backup_data.scroll_on_output = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
|
|
which.which = CB_SCROLL;
|
|
which.bool_value = backup_data.scroll_on_output;
|
|
|
|
g_list_foreach(tab_list, set_tab_vt_prefs, &which);
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ transbg_cb_toggled() */
|
|
static void
|
|
transbg_cb_toggled(GtkWidget *widget, gpointer data)
|
|
{
|
|
t_which which;
|
|
|
|
backup_data.transparent_background = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
|
|
|
|
which.which = CB_TRANSBG;
|
|
which.bool_value = backup_data.transparent_background;
|
|
|
|
g_list_foreach(tab_list, set_tab_vt_prefs, &which);
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ satur_bar_changed() */
|
|
static void
|
|
satur_bar_changed(GtkWidget *widget, gpointer data)
|
|
{
|
|
t_which which;
|
|
|
|
backup_data.background_saturation = gtk_range_get_value(GTK_RANGE(widget));
|
|
|
|
which.which = CB_BGSAT;
|
|
which.float_value = backup_data.background_saturation;
|
|
|
|
g_list_foreach(tab_list, set_tab_vt_prefs, &which);
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ historylen_spin_changed() */
|
|
static void
|
|
historylen_spin_changed(GtkWidget *widget, gpointer data)
|
|
{
|
|
backup_data.history_len = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ font_changed() */
|
|
static void
|
|
font_changed(GtkWidget *widget, gpointer data)
|
|
{
|
|
t_which which;
|
|
|
|
if (backup_data.vte_font)
|
|
g_free(backup_data.vte_font);
|
|
backup_data.vte_font = g_strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget)));
|
|
|
|
which.which = CB_FONT;
|
|
which.string_value = backup_data.vte_font;
|
|
|
|
g_list_foreach(tab_list, set_tab_vt_prefs, &which);
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ setup_response() */
|
|
static void
|
|
setup_response(GtkDialog *dialog, int id, gpointer data)
|
|
{
|
|
switch (id)
|
|
{
|
|
case GTK_RESPONSE_OK:
|
|
g_free(config_data.vte_font);
|
|
memcpy(&config_data, &backup_data, sizeof(t_config_data));
|
|
config_data.vte_font = g_strdup(backup_data.vte_font);
|
|
/* TODO: Change the command line history buffer's size!! */
|
|
gtk_widget_hide(GTK_WIDGET(dialog));
|
|
break;
|
|
case GTK_RESPONSE_CANCEL:
|
|
case GTK_RESPONSE_DELETE_EVENT:
|
|
{
|
|
t_which which;
|
|
|
|
which.which = CB_RESET;
|
|
g_list_foreach(tab_list, set_tab_vt_prefs, &which);
|
|
gtk_widget_hide(GTK_WIDGET(dialog));
|
|
}
|
|
break;
|
|
case GTK_RESPONSE_YES:
|
|
/* Itt minden pref beallitast el kell menteni az aktualis backendbe */
|
|
break;
|
|
default:
|
|
#ifdef DEBUG
|
|
if (config_data.debug)
|
|
fprintf(stderr, "Unknown response!\n");
|
|
#endif /* DEBUG */
|
|
break;
|
|
}
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ display_setup_window() */
|
|
void
|
|
display_setup_window(void)
|
|
{
|
|
static GtkWidget *setup_window = NULL;
|
|
|
|
memcpy(&backup_data, &config_data, sizeof(t_config_data));
|
|
backup_data.vte_font = g_strdup(config_data.vte_font);
|
|
|
|
if (!GTK_IS_WINDOW(setup_window))
|
|
{
|
|
GtkWidget *frame;
|
|
GtkWidget *content;
|
|
GtkWidget *satur_label;
|
|
GtkWidget *font_label;
|
|
GtkWidget *historylen_label;
|
|
gint row;
|
|
#ifdef DEBUG
|
|
# define CONTENT_ROW_NUMBER 5
|
|
#else
|
|
# define CONTENT_ROW_NUMBER 4
|
|
#endif
|
|
|
|
setup_window = gtk_dialog_new_with_buttons((const gchar *)_("Setup"), GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_SAVE, GTK_RESPONSE_YES, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
|
|
gtk_dialog_set_response_sensitive(GTK_DIALOG(setup_window), GTK_RESPONSE_OK, TRUE);
|
|
|
|
gtk_signal_connect(GTK_OBJECT(setup_window), "response", GTK_SIGNAL_FUNC(setup_response), NULL);
|
|
|
|
frame = gtk_frame_new("BotCommander");
|
|
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
|
|
|
content = gtk_table_new(CONTENT_ROW_NUMBER, 2, TRUE);
|
|
|
|
row = 0;
|
|
#ifdef DEBUG
|
|
debug_cb = gtk_check_button_new_with_label(_("Debug mode"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(debug_cb), config_data.debug);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), debug_cb, 0, 2, row, row + 1);
|
|
gtk_signal_connect(GTK_OBJECT(debug_cb), "toggled", GTK_SIGNAL_FUNC(debug_cb_toggled), NULL);
|
|
row++;
|
|
#endif
|
|
|
|
cmode_cb = gtk_check_button_new_with_label(_("Change to message mode after connect"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cmode_cb), config_data.change_to_message);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), cmode_cb, 0, 2, row, row + 1);
|
|
gtk_signal_connect(GTK_OBJECT(cmode_cb), "toggled", GTK_SIGNAL_FUNC(cmode_cb_toggled), NULL);
|
|
row++;
|
|
|
|
changetab_cb = gtk_check_button_new_with_label(_("Change to newly created tab"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(changetab_cb), config_data.change_to_new_tab);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), changetab_cb, 0, 2, row, row + 1);
|
|
gtk_signal_connect(GTK_OBJECT(changetab_cb), "toggled", GTK_SIGNAL_FUNC(changetab_cb_toggled), NULL);
|
|
row++;
|
|
|
|
prefsave_cb = gtk_check_button_new_with_label(_("Save preferences on exit"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefsave_cb), config_data.save_prefs);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), prefsave_cb, 0, 2, row, row + 1);
|
|
gtk_signal_connect(GTK_OBJECT(prefsave_cb), "toggled", GTK_SIGNAL_FUNC(prefsave_cb_toggled), NULL);
|
|
row++;
|
|
|
|
historylen_label = gtk_label_new(_("Command line history length"));
|
|
gtk_table_attach(GTK_TABLE(content), historylen_label, 0, 1, row, row + 1, GTK_FILL, 0, 4, 0);
|
|
|
|
historylen_spin = gtk_spin_button_new_with_range(0, 5000, 1);
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(historylen_spin), config_data.history_len);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), historylen_spin, 1, 2, row, row + 1);
|
|
gtk_signal_connect(GTK_OBJECT(historylen_spin), "value-changed", GTK_SIGNAL_FUNC(historylen_spin_changed), NULL);
|
|
row++;
|
|
|
|
gtk_container_add(GTK_CONTAINER(frame), content);
|
|
|
|
gtk_widget_show_all(frame);
|
|
|
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(setup_window)->vbox), frame, TRUE, TRUE, 0);
|
|
|
|
frame = gtk_frame_new(_("Terminal"));
|
|
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
|
|
|
|
content = gtk_table_new(5, 3, TRUE);
|
|
|
|
scroll_cb = gtk_check_button_new_with_label(_("Scroll on output"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(scroll_cb), config_data.scroll_on_output);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), scroll_cb, 0, 3, 0, 1);
|
|
gtk_signal_connect(GTK_OBJECT(scroll_cb), "toggled", GTK_SIGNAL_FUNC(scroll_cb_toggled), NULL);
|
|
|
|
transbg_cb = gtk_check_button_new_with_label(_("Transparent background"));
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(transbg_cb), config_data.transparent_background);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), transbg_cb, 0, 3, 1, 2);
|
|
gtk_signal_connect(GTK_OBJECT(transbg_cb), "toggled", GTK_SIGNAL_FUNC(transbg_cb_toggled), NULL);
|
|
|
|
satur_label = gtk_label_new(_("Saturation"));
|
|
gtk_table_attach(GTK_TABLE(content), satur_label, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
|
|
|
|
satur_scale = gtk_hscale_new_with_range(0, 100, 1);
|
|
gtk_scale_set_digits(GTK_SCALE(satur_scale), 0);
|
|
gtk_scale_set_draw_value(GTK_SCALE(satur_scale), TRUE);
|
|
gtk_scale_set_value_pos(GTK_SCALE(satur_scale), GTK_POS_RIGHT);
|
|
gtk_range_set_value(GTK_RANGE(satur_scale), config_data.background_saturation * 100);
|
|
gtk_signal_connect(GTK_OBJECT(satur_scale), "value-changed", GTK_SIGNAL_FUNC(satur_bar_changed), NULL);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), satur_scale, 0, 3, 3, 4);
|
|
|
|
font_label = gtk_label_new(_("Font"));
|
|
gtk_table_attach(GTK_TABLE(content), font_label, 0, 1, 4, 5, GTK_FILL, 0, 0, 0);
|
|
|
|
font_button = gtk_font_button_new_with_font(config_data.vte_font);
|
|
gtk_table_attach_defaults(GTK_TABLE(content), font_button, 1, 3, 4, 5);
|
|
gtk_signal_connect(GTK_OBJECT(font_button), "font-set", GTK_SIGNAL_FUNC(font_changed), NULL);
|
|
|
|
gtk_container_add(GTK_CONTAINER(frame), content);
|
|
|
|
gtk_widget_show_all(frame);
|
|
|
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(setup_window)->vbox), frame, TRUE, TRUE, 0);
|
|
}
|
|
else
|
|
{
|
|
#ifdef DEBUG
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(debug_cb), config_data.debug);
|
|
#endif /* DEBUG */
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cmode_cb), config_data.change_to_message);
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefsave_cb), config_data.save_prefs);
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(scroll_cb), config_data.scroll_on_output);
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(transbg_cb), config_data.transparent_background);
|
|
gtk_font_button_set_font_name(GTK_FONT_BUTTON(font_button), config_data.vte_font);
|
|
gtk_range_set_value(GTK_RANGE(satur_scale), config_data.background_saturation * 100);
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(historylen_spin), config_data.history_len);
|
|
}
|
|
|
|
gtk_dialog_run(GTK_DIALOG(setup_window));
|
|
}
|
|
/* }}} */
|
|
|