forked from Mirrors/openclonk
477 lines
9.5 KiB
C
477 lines
9.5 KiB
C
/*
|
|
* mape - C4 Landscape.txt editor
|
|
*
|
|
* Copyright (c) 2005-2009, Armin Burgmeier
|
|
*
|
|
* Distributed under the terms of the ISC license; see accompanying file
|
|
* "COPYING" for details.
|
|
*
|
|
* "Clonk" is a registered trademark of Matthes Bender, used with permission.
|
|
* See accompanying file "TRADEMARK" for details.
|
|
*
|
|
* To redistribute this file separately, substitute the full license texts
|
|
* for the above references.
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "mape/preferences.h"
|
|
#include "mape/preferencesdialog.h"
|
|
|
|
static void mape_preferences_dialog_cb_fixed_seed_toggled(GtkWidget* widget,
|
|
gpointer user_data)
|
|
/*MapePreferencesDialog* dialog)*/
|
|
{
|
|
MapePreferencesDialog* dialog;
|
|
dialog = (MapePreferencesDialog*)user_data;
|
|
|
|
gtk_widget_set_sensitive(
|
|
GTK_WIDGET(dialog->hbox_random_seed),
|
|
gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_fixed_seed)
|
|
)
|
|
);
|
|
}
|
|
|
|
MapePreferencesDialog* mape_preferences_dialog_new(GtkWindow* parent,
|
|
MapePreferences* prefs)
|
|
{
|
|
MapePreferencesDialog* dialog;
|
|
GtkBox* content_area;
|
|
|
|
dialog = malloc(sizeof(MapePreferencesDialog) );
|
|
|
|
dialog->lbl_tab_width = gtk_label_new("Tab width:");
|
|
gtk_widget_show(dialog->lbl_tab_width);
|
|
|
|
dialog->ent_tab_width = gtk_spin_button_new_with_range(1, 8, 1);
|
|
gtk_widget_show(dialog->ent_tab_width);
|
|
|
|
dialog->hbox_tab_width = gtk_hbox_new(FALSE, 5);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_tab_width),
|
|
dialog->lbl_tab_width,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_tab_width),
|
|
dialog->ent_tab_width,
|
|
TRUE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_widget_show(dialog->hbox_tab_width);
|
|
|
|
/* Map width */
|
|
|
|
dialog->lbl_map_width = gtk_label_new("Map width:");
|
|
gtk_widget_show(dialog->lbl_map_width);
|
|
|
|
dialog->ent_map_width = gtk_spin_button_new_with_range(50, 500, 5);
|
|
gtk_widget_show(dialog->ent_map_width);
|
|
|
|
dialog->hbox_map_width = gtk_hbox_new(FALSE, 5);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_width),
|
|
dialog->lbl_map_width,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_width),
|
|
dialog->ent_map_width,
|
|
TRUE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_widget_show(dialog->hbox_map_width);
|
|
|
|
/* Map height */
|
|
|
|
dialog->lbl_map_height = gtk_label_new("Map height:");
|
|
gtk_widget_show(dialog->lbl_map_height);
|
|
|
|
dialog->ent_map_height = gtk_spin_button_new_with_range(50, 500, 5);
|
|
gtk_widget_show(dialog->ent_map_height);
|
|
|
|
dialog->hbox_map_height = gtk_hbox_new(FALSE, 5);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_height),
|
|
dialog->lbl_map_height,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_height),
|
|
dialog->ent_map_height,
|
|
TRUE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_widget_show(dialog->hbox_map_height);
|
|
|
|
/* Map zoom */
|
|
|
|
dialog->lbl_map_zoom = gtk_label_new("Map zoom:");
|
|
gtk_widget_show(dialog->lbl_map_zoom);
|
|
|
|
dialog->ent_map_zoom = gtk_spin_button_new_with_range(0.2, 5.0, 0.1);
|
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->ent_map_zoom), 2);
|
|
gtk_widget_show(dialog->ent_map_zoom);
|
|
|
|
dialog->hbox_map_zoom = gtk_hbox_new(FALSE, 5);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_zoom),
|
|
dialog->lbl_map_zoom,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_map_zoom),
|
|
dialog->ent_map_zoom,
|
|
TRUE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_widget_show(dialog->hbox_map_zoom);
|
|
|
|
/* Checkboxes */
|
|
|
|
dialog->cbx_tab_to_spaces = gtk_check_button_new_with_label(
|
|
"Insert spaces instead of tabs"
|
|
);
|
|
gtk_widget_show(dialog->cbx_tab_to_spaces);
|
|
|
|
dialog->cbx_auto_indentation = gtk_check_button_new_with_label(
|
|
"Automatic indentation"
|
|
);
|
|
gtk_widget_show(dialog->cbx_auto_indentation);
|
|
|
|
dialog->cbx_text_wrapping = gtk_check_button_new_with_label(
|
|
"Text wrapping"
|
|
);
|
|
gtk_widget_show(dialog->cbx_text_wrapping);
|
|
|
|
dialog->cbx_line_numbers = gtk_check_button_new_with_label(
|
|
"Display line numbers"
|
|
);
|
|
gtk_widget_show(dialog->cbx_line_numbers);
|
|
|
|
dialog->cbx_highlight_line = gtk_check_button_new_with_label(
|
|
"Highlight current line"
|
|
);
|
|
gtk_widget_show(dialog->cbx_highlight_line);
|
|
|
|
dialog->cbx_bracket_matching = gtk_check_button_new_with_label(
|
|
"Highlight matching brackets"
|
|
);
|
|
gtk_widget_show(dialog->cbx_bracket_matching);
|
|
|
|
dialog->cbx_fixed_seed = gtk_check_button_new_with_label(
|
|
"Fixed random seed"
|
|
);
|
|
gtk_widget_show(dialog->cbx_fixed_seed);
|
|
|
|
dialog->lbl_random_seed = gtk_label_new("Random seed:");
|
|
gtk_widget_show(dialog->lbl_random_seed);
|
|
|
|
dialog->ent_random_seed = gtk_spin_button_new_with_range(
|
|
0,
|
|
(1u << 31u) - 1,
|
|
1
|
|
);
|
|
gtk_widget_show(dialog->ent_random_seed);
|
|
|
|
dialog->hbox_random_seed = gtk_hbox_new(FALSE, 5);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_random_seed),
|
|
dialog->lbl_random_seed,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
GTK_BOX(dialog->hbox_random_seed),
|
|
dialog->ent_random_seed,
|
|
TRUE,
|
|
TRUE,
|
|
0
|
|
);
|
|
gtk_widget_show(dialog->hbox_random_seed);
|
|
|
|
g_signal_connect(
|
|
G_OBJECT(dialog->cbx_fixed_seed),
|
|
"toggled",
|
|
G_CALLBACK(mape_preferences_dialog_cb_fixed_seed_toggled),
|
|
dialog
|
|
);
|
|
|
|
/* Read values from preferences */
|
|
gtk_spin_button_set_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_tab_width),
|
|
prefs->tab_width
|
|
);
|
|
|
|
gtk_spin_button_set_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_width),
|
|
prefs->map_width
|
|
);
|
|
|
|
gtk_spin_button_set_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_height),
|
|
prefs->map_height
|
|
);
|
|
|
|
gtk_spin_button_set_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_zoom),
|
|
prefs->map_zoom
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_tab_to_spaces),
|
|
prefs->tab_to_spaces
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_auto_indentation),
|
|
prefs->auto_indentation
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_text_wrapping),
|
|
prefs->text_wrapping
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_line_numbers),
|
|
prefs->line_numbers
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_highlight_line),
|
|
prefs->highlight_line
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_bracket_matching),
|
|
prefs->bracket_matching
|
|
);
|
|
|
|
gtk_toggle_button_set_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_fixed_seed),
|
|
prefs->fixed_seed
|
|
);
|
|
|
|
/* Pseudo-emit toggled signal to hide the random seed entry if
|
|
* the fixed seed CheckButton is not active. */
|
|
mape_preferences_dialog_cb_fixed_seed_toggled(
|
|
dialog->cbx_fixed_seed,
|
|
dialog
|
|
);
|
|
|
|
gtk_spin_button_set_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_random_seed),
|
|
prefs->random_seed
|
|
);
|
|
|
|
dialog->dialog = gtk_dialog_new_with_buttons(
|
|
"Preferences",
|
|
parent,
|
|
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
GTK_STOCK_CANCEL,
|
|
GTK_RESPONSE_CANCEL,
|
|
GTK_STOCK_OK,
|
|
GTK_RESPONSE_OK,
|
|
NULL
|
|
);
|
|
|
|
content_area = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog->dialog)));
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->hbox_tab_width,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->hbox_map_width,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->hbox_map_height,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->hbox_map_zoom,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_tab_to_spaces,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_auto_indentation,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_text_wrapping,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_line_numbers,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_highlight_line,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_bracket_matching,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->cbx_fixed_seed,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_box_pack_start(
|
|
content_area,
|
|
dialog->hbox_random_seed,
|
|
FALSE,
|
|
TRUE,
|
|
0
|
|
);
|
|
|
|
gtk_container_set_border_width(
|
|
GTK_CONTAINER(content_area),
|
|
10
|
|
);
|
|
|
|
gtk_box_set_spacing(content_area, 5);
|
|
|
|
gtk_window_set_transient_for(GTK_WINDOW(dialog->dialog), parent);
|
|
gtk_window_set_resizable(GTK_WINDOW(dialog->dialog), FALSE);
|
|
|
|
return dialog;
|
|
}
|
|
|
|
void mape_preferences_dialog_destroy(MapePreferencesDialog* dialog)
|
|
{
|
|
gtk_widget_destroy(dialog->dialog);
|
|
free(dialog);
|
|
}
|
|
|
|
MapePreferences mape_preferences_dialog_get(MapePreferencesDialog* dialog)
|
|
{
|
|
MapePreferences prefs;
|
|
|
|
prefs.tab_width = gtk_spin_button_get_value_as_int(
|
|
GTK_SPIN_BUTTON(dialog->ent_tab_width)
|
|
);
|
|
|
|
prefs.map_width = gtk_spin_button_get_value_as_int(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_width)
|
|
);
|
|
|
|
prefs.map_zoom = gtk_spin_button_get_value(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_zoom)
|
|
);
|
|
|
|
prefs.map_height = gtk_spin_button_get_value_as_int(
|
|
GTK_SPIN_BUTTON(dialog->ent_map_height)
|
|
);
|
|
|
|
prefs.tab_to_spaces = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_tab_to_spaces)
|
|
);
|
|
|
|
prefs.auto_indentation = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_auto_indentation)
|
|
);
|
|
|
|
prefs.text_wrapping = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_text_wrapping)
|
|
);
|
|
|
|
prefs.line_numbers = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_line_numbers)
|
|
);
|
|
|
|
prefs.highlight_line = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_highlight_line)
|
|
);
|
|
|
|
prefs.bracket_matching = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_bracket_matching)
|
|
);
|
|
|
|
prefs.fixed_seed = gtk_toggle_button_get_active(
|
|
GTK_TOGGLE_BUTTON(dialog->cbx_fixed_seed)
|
|
);
|
|
|
|
prefs.random_seed = gtk_spin_button_get_value_as_int(
|
|
GTK_SPIN_BUTTON(dialog->ent_random_seed)
|
|
);
|
|
|
|
return prefs;
|
|
}
|