removing bool8_32 type
[drnoksnes] / gui / settings.c
index 6176b0b..a87a339 100644 (file)
@@ -26,6 +26,8 @@
 
 #if MAEMO_VERSION >= 5
 #include <hildon/hildon-gtk.h>
+#include <hildon/hildon-pannable-area.h>
+#include <hildon/hildon-button.h>
 #include <hildon/hildon-check-button.h>
 #include <hildon/hildon-picker-button.h>
 #include <hildon/hildon-touch-selector.h>
@@ -34,8 +36,8 @@
 #include <hildon/hildon-caption.h>
 #endif
 
-#include "../platform/hgw.h"
 #include "plugin.h"
+#include "gconf.h"
 #include "i18n.h"
 
 struct scaler {
@@ -46,32 +48,37 @@ struct scaler {
 static struct scaler scalers[] = {
 #if MAEMO_VERSION == 5
 #ifdef __arm__
-       {"hdarm2x", N_("Simple 2x zoom (fast)")},
-#else
-       {"hdsoft2x", N_("Simple 2x zoom")},
+       {"arm2x", N_("2x zoom")},
 #endif /* __arm__ */
-       {"hdfill", N_("Fill the entire screen")},
+       {"haasq", N_("Scale to fit")},
+       {"haafill", N_("Fill the entire screen")},
 #elif MAEMO_VERSION == 4
 #ifdef __arm__
-       {"xsp", N_("Antialiased 2x zoom (fast)")},
-       {"arm2x", N_("Simple 2x zoom")},
+       {"xsp", N_("Antialiased 2x zoom")},
+       {"arm2x", N_("2x zoom")},
 #else
-       {"soft2x", N_("Simple 2x zoom")},
+       {"soft2x", N_("2x zoom")},
 #endif /* __arm__ */
 #endif /* MAEMO_VERSION */
-       {"none", N_("Original size")},
+       {"none", N_("No zoom")},
 };
 
 static GtkDialog* dialog;
 #if MAEMO_VERSION >= 5
+static HildonButton* player1_btn, * player2_btn;
 static HildonCheckButton* accu_check;
+static HildonCheckButton* saver_check;
 static HildonPickerButton* scaler_picker;
+static HildonPickerButton* speedhacks_picker;
 #else
 static GtkComboBox* scaler_combo;
+static GtkCheckButton* saver_check;
 #endif
 
 static int find_scaler(const char * id)
 {
+       if (!id) return -1;
+
        gchar* lid = g_ascii_strdown(id, -1);
        
        for (int i = 0; i < sizeof(scalers)/sizeof(struct scaler); i++) {
@@ -97,6 +104,20 @@ static void fill_scaler_list(GtkWidget* w)
        }
 }
 
+void settings_update_controls(int player)
+{
+#if MAEMO_VERSION >= 5
+       switch (player) {
+               case 1:
+                       hildon_button_set_value(player1_btn, controls_describe(1));
+                       break;
+               case 2:
+                       hildon_button_set_value(player2_btn, controls_describe(2));
+                       break;
+       }
+#endif
+}
+
 static void load_settings()
 {
        gchar* scaler_id = gconf_client_get_string(gcc, kGConfScaler, NULL);
@@ -104,23 +125,40 @@ static void load_settings()
        if (scaler_num < 0) scaler_num = 0;
 
 #if MAEMO_VERSION >= 5
+       settings_update_controls(1);
+       settings_update_controls(2);
        hildon_check_button_set_active(accu_check,
                gconf_client_get_bool(gcc, kGConfTransparency, NULL));
+       hildon_check_button_set_active(saver_check,
+               gconf_client_get_bool(gcc, kGConfSaver, NULL));
        hildon_picker_button_set_active(scaler_picker, scaler_num);
+       hildon_picker_button_set_active(speedhacks_picker,
+               gconf_client_get_int(gcc, kGConfSpeedhacks, NULL));
 #else
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saver_check),
+               gconf_client_get_bool(gcc, kGConfSaver, NULL));
        gtk_combo_box_set_active(scaler_combo, scaler_num);
 #endif
 }
 
 static void save_settings()
 {
+       int scaler_num = 0;
 #if MAEMO_VERSION >= 5
        gconf_client_set_bool(gcc, kGConfTransparency,
                hildon_check_button_get_active(accu_check), NULL);
+       gconf_client_set_bool(gcc, kGConfSaver,
+               hildon_check_button_get_active(saver_check), NULL);
+       scaler_num = hildon_picker_button_get_active(scaler_picker);
+       gconf_client_set_int(gcc, kGConfSpeedhacks,
+               hildon_picker_button_get_active(speedhacks_picker), NULL);
 #else
-       gconf_client_set_bool(gcc, kGConfXSP,
-               gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(xsp_check)), NULL);
+       scaler_num = gtk_combo_box_get_active(scaler_combo);
+       gconf_client_set_bool(gcc, kGConfSaver,
+               gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(saver_check)), NULL);
 #endif
+       if (scaler_num < 0) scaler_num = 0;
+       gconf_client_set_string(gcc, kGConfScaler, scalers[scaler_num].id, NULL);
 }
 
 static void cb_dialog_response(GtkWidget * button, gint response, gpointer data)
@@ -133,13 +171,17 @@ static void cb_dialog_response(GtkWidget * button, gint response, gpointer data)
 }
 
 #if MAEMO_VERSION >= 5
-static void set_button_layout(HildonButton* button, GtkSizeGroup* sizegroup)
+static void controls_btn_callback(GtkWidget * button, gpointer data)
+{
+       controls_dialog(GTK_WINDOW(dialog), GPOINTER_TO_INT(data));
+}
+
+static void set_button_layout(HildonButton* button,
+ GtkSizeGroup* titles_size_group, GtkSizeGroup* values_size_group)
 {
-       hildon_button_add_title_size_group(button, sizegroup);
-       hildon_button_add_value_size_group(button, sizegroup);
+       hildon_button_add_title_size_group(button, titles_size_group);
+       hildon_button_add_value_size_group(button, values_size_group);
        hildon_button_set_alignment(button, 0.0, 0.5, 1.0, 0.0);
-       hildon_button_set_title_alignment(button, 0.0, 0.5);
-       hildon_button_set_value_alignment(button, 0.0, 0.5);
 }
 #endif
 
@@ -147,11 +189,17 @@ void settings_dialog(GtkWindow* parent)
 {
        dialog = GTK_DIALOG(gtk_dialog_new_with_buttons(_("Settings"),
                parent, GTK_DIALOG_MODAL,
-               GTK_STOCK_OK, GTK_RESPONSE_OK,
+               GTK_STOCK_SAVE, GTK_RESPONSE_OK,
                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL));
 
 #if MAEMO_VERSION >= 5
-       GtkSizeGroup * size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+       GtkBox * box = GTK_BOX(gtk_vbox_new(FALSE, HILDON_MARGIN_HALF));
+       HildonPannableArea * pannable =
+               HILDON_PANNABLE_AREA(hildon_pannable_area_new());
+       GtkSizeGroup * titles_size_group =
+                gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+       GtkSizeGroup * values_size_group =
+                gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
        PangoAttrList *pattrlist = pango_attr_list_new();
        PangoAttribute *attr = pango_attr_size_new(22 * PANGO_SCALE);
        attr->start_index = 0;
@@ -162,51 +210,115 @@ void settings_dialog(GtkWindow* parent)
        gtk_label_set_attributes(separator_1, pattrlist);
        gtk_label_set_justify(separator_1, GTK_JUSTIFY_CENTER);
 
+       player1_btn = HILDON_BUTTON(hildon_button_new_with_text(
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
+               HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
+               _("Player 1"), NULL));
+       set_button_layout(HILDON_BUTTON(player1_btn),
+               titles_size_group, values_size_group);
+       g_signal_connect(G_OBJECT(player1_btn), "clicked",
+                                       G_CALLBACK(controls_btn_callback), GINT_TO_POINTER(1));
+
+       player2_btn = HILDON_BUTTON(hildon_button_new_with_text(
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
+               HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
+               _("Player 2"), NULL));
+       set_button_layout(HILDON_BUTTON(player2_btn),
+               titles_size_group, values_size_group);
+       g_signal_connect(G_OBJECT(player2_btn), "clicked",
+                                       G_CALLBACK(controls_btn_callback), GINT_TO_POINTER(2));
+
        GtkLabel* separator_2 = GTK_LABEL(gtk_label_new(_("Advanced")));
        gtk_label_set_attributes(separator_2, pattrlist);
        gtk_label_set_justify(separator_2, GTK_JUSTIFY_CENTER);
 
        accu_check = HILDON_CHECK_BUTTON(hildon_check_button_new(
-               HILDON_SIZE_FULLSCREEN_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
        gtk_button_set_label(GTK_BUTTON(accu_check), _("Accurate graphics"));
-       set_button_layout(HILDON_BUTTON(accu_check), size_group);
+       set_button_layout(HILDON_BUTTON(accu_check),
+               titles_size_group, values_size_group);
+
+       saver_check = HILDON_CHECK_BUTTON(hildon_check_button_new(
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
+       gtk_button_set_label(GTK_BUTTON(saver_check),
+               _("Pause game in the background"));
+       set_button_layout(HILDON_BUTTON(saver_check),
+               titles_size_group, values_size_group);
 
        scaler_picker = HILDON_PICKER_BUTTON(hildon_picker_button_new(
-               HILDON_SIZE_FULLSCREEN_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
-               HILDON_BUTTON_ARRANGEMENT_VERTICAL));
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
+               HILDON_BUTTON_ARRANGEMENT_HORIZONTAL));
        hildon_button_set_title(HILDON_BUTTON(scaler_picker), _("Zoom"));
-       set_button_layout(HILDON_BUTTON(scaler_picker), size_group);
+       set_button_layout(HILDON_BUTTON(scaler_picker),
+               titles_size_group, values_size_group);
 
        HildonTouchSelector* scaler_sel =
                HILDON_TOUCH_SELECTOR(hildon_touch_selector_new_text());
        fill_scaler_list(GTK_WIDGET(scaler_sel));
        hildon_picker_button_set_selector(scaler_picker, scaler_sel);
 
-       gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(separator_1),
-               FALSE, FALSE, HILDON_MARGIN_DEFAULT);
-       gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(separator_2),
-               FALSE, FALSE, HILDON_MARGIN_DEFAULT);
-       gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(accu_check),
+       speedhacks_picker = HILDON_PICKER_BUTTON(hildon_picker_button_new(
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
+               HILDON_BUTTON_ARRANGEMENT_HORIZONTAL));
+       hildon_button_set_title(HILDON_BUTTON(speedhacks_picker), _("Speedhacks"));
+       set_button_layout(HILDON_BUTTON(speedhacks_picker),
+               titles_size_group, values_size_group);
+
+       HildonTouchSelector* speedhacks_sel =
+               HILDON_TOUCH_SELECTOR(hildon_touch_selector_new_text());
+       hildon_touch_selector_append_text(speedhacks_sel, _("No speedhacks"));
+       hildon_touch_selector_append_text(speedhacks_sel, _("Safe hacks only"));
+       hildon_touch_selector_append_text(speedhacks_sel, _("All speedhacks"));
+       hildon_picker_button_set_selector(speedhacks_picker, speedhacks_sel);
+
+       gtk_box_pack_start(box, GTK_WIDGET(separator_1),
+               FALSE, FALSE, HILDON_MARGIN_HALF);
+       gtk_box_pack_start(box, GTK_WIDGET(player1_btn),
+               FALSE, FALSE, 0);
+       gtk_box_pack_start(box, GTK_WIDGET(player2_btn),
+               FALSE, FALSE, 0);
+       gtk_box_pack_start(box, GTK_WIDGET(separator_2),
+               FALSE, FALSE, HILDON_MARGIN_HALF);
+       gtk_box_pack_start(box, GTK_WIDGET(accu_check),
                FALSE, FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(scaler_picker),
+       gtk_box_pack_start(box, GTK_WIDGET(saver_check),
+               FALSE, FALSE, 0);
+       gtk_box_pack_start(box, GTK_WIDGET(scaler_picker),
+               FALSE, FALSE, 0);
+       gtk_box_pack_start(box, GTK_WIDGET(speedhacks_picker),
                FALSE, FALSE, 0);
 
+       hildon_pannable_area_add_with_viewport(pannable, GTK_WIDGET(box));
+       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(pannable));
+
        pango_attr_list_unref(pattrlist);
-       g_object_unref(size_group);
+       g_object_unref(titles_size_group);
+       g_object_unref(values_size_group);
 #else
-       xsp_check = GTK_CHECK_BUTTON(gtk_check_button_new());
-       GtkWidget* xsp_caption = hildon_caption_new(NULL, 
-               "Use hardware scaling", GTK_WIDGET(xsp_check), NULL, 
+       GtkSizeGroup * size_group =
+                gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+       scaler_combo = GTK_COMBO_BOX(gtk_combo_box_new_text());
+       fill_scaler_list(GTK_WIDGET(scaler_combo));
+       GtkWidget* scaler_caption = hildon_caption_new(size_group,
+               _("Zoom"), GTK_WIDGET(scaler_combo), NULL,
+               HILDON_CAPTION_OPTIONAL);
+
+       saver_check = GTK_CHECK_BUTTON(gtk_check_button_new());
+       GtkWidget* saver_caption = hildon_caption_new(size_group,
+               _("Pause game in the background"), GTK_WIDGET(saver_check), NULL,
                HILDON_CAPTION_OPTIONAL);
-       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(xsp_caption));
+
+       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), scaler_caption);
+       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), saver_caption);
+
+       g_object_unref(size_group);
 #endif
 
        load_settings();
 
 #if MAEMO_VERSION >= 5
-       gtk_window_resize(GTK_WINDOW(dialog), 800, 300);
-#else
-       gtk_window_resize(GTK_WINDOW(dialog), 400, 200);
+       gtk_window_resize(GTK_WINDOW(dialog), 800, 380);
 #endif
 
        g_signal_connect(G_OBJECT(dialog), "response",