more properly handling new haa semantics
[drnoksnes] / gui / controls.c
index 7bfa6de..b5608da 100644 (file)
@@ -47,12 +47,18 @@ static HildonCheckButton* keys_chk;
 static HildonButton* keys_btn;
 static HildonCheckButton* touch_chk;
 static HildonCheckButton* touch_show_chk;
-#else
+#if CONF_ZEEMOTE
+static HildonCheckButton* zeemote_chk;
+#endif
+#else /* MAEMO_VERSION < 5 */
 static GtkCheckButton* keys_chk;
 static GtkButton* keys_btn;
 static GtkCheckButton* touch_chk;
 static GtkCheckButton* touch_show_chk;
+#if CONF_ZEEMOTE
+static GtkCheckButton* zeemote_chk;
 #endif
+#endif /* MAEMO_VERSION */
 
 static void load_settings()
 {
@@ -61,14 +67,44 @@ static void load_settings()
        gchar *key = key_base + key_len;
 
 #if MAEMO_VERSION >= 5
+       // Keyboard
        strcpy(key, kGConfPlayerKeyboardEnable);
        hildon_check_button_set_active(keys_chk,
                gconf_client_get_bool(gcc, key_base, NULL));
-#else
+
+       // Touchscreen
+       strcpy(key, kGConfPlayerTouchscreenEnable);
+       hildon_check_button_set_active(touch_chk,
+               gconf_client_get_bool(gcc, key_base, NULL));
+       strcpy(key, kGConfPlayerTouchscreenShow);
+       hildon_check_button_set_active(touch_show_chk,
+               gconf_client_get_bool(gcc, key_base, NULL));
+
+#if CONF_ZEEMOTE
+       strcpy(key, kGConfPlayerZeemoteEnable);
+       hildon_check_button_set_active(zeemote_chk,
+               gconf_client_get_bool(gcc, key_base, NULL));
+#endif
+#else /* MAEMO_VERSION < 5 */
+       // Keyboard
        strcpy(key, kGConfPlayerKeyboardEnable);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(keys_chk),
                gconf_client_get_bool(gcc, key_base, NULL));
+
+       // Touchscreen
+       strcpy(key, kGConfPlayerTouchscreenEnable);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(touch_chk),
+               gconf_client_get_bool(gcc, key_base, NULL));
+       strcpy(key, kGConfPlayerTouchscreenShow);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(touch_show_chk),
+               gconf_client_get_bool(gcc, key_base, NULL));
+
+#if CONF_ZEEMOTE
+       strcpy(key, kGConfPlayerZeemoteEnable);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(zeemote_chk),
+               gconf_client_get_bool(gcc, key_base, NULL));
 #endif
+#endif /* MAEMO_VERSION */
 }
 
 static void save_settings()
@@ -78,14 +114,44 @@ static void save_settings()
        gchar *key = key_base + key_len;
 
 #if MAEMO_VERSION >= 5
+       // Keyboard
        strcpy(key, kGConfPlayerKeyboardEnable);
        gconf_client_set_bool(gcc, key_base,
                hildon_check_button_get_active(keys_chk), NULL);
-#else
+
+       // Touchscreen
+       strcpy(key, kGConfPlayerTouchscreenEnable);
+       gconf_client_set_bool(gcc, key_base,
+               hildon_check_button_get_active(touch_chk), NULL);
+       strcpy(key, kGConfPlayerTouchscreenShow);
+       gconf_client_set_bool(gcc, key_base,
+               hildon_check_button_get_active(touch_show_chk), NULL);
+
+#if CONF_ZEEMOTE
+       strcpy(key, kGConfPlayerZeemoteEnable);
+       gconf_client_set_bool(gcc, key_base,
+               hildon_check_button_get_active(zeemote_chk), NULL);
+#endif
+#else /* MAEMO_VERSION < 5 */
+       // Keyboard
        strcpy(key, kGConfPlayerKeyboardEnable);
        gconf_client_set_bool(gcc, key_base,
                gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(keys_chk)), NULL);
+
+       // Touchscreen
+       strcpy(key, kGConfPlayerTouchscreenEnable);
+       gconf_client_set_bool(gcc, key_base,
+               gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(touch_chk)), NULL);
+       strcpy(key, kGConfPlayerTouchscreenShow);
+       gconf_client_set_bool(gcc, key_base,
+               gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(touch_show_chk)), NULL);
+
+#if CONF_ZEEMOTE
+       strcpy(key, kGConfPlayerZeemoteEnable);
+       gconf_client_set_bool(gcc, key_base,
+               gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(zeemote_chk)), NULL);
 #endif
+#endif /* MAEMO_VERSION */
 }
 
 static void keys_btn_callback(GtkWidget * button, gpointer data)
@@ -115,7 +181,8 @@ static void set_button_layout(HildonButton* button,
 
 gchar* controls_describe(int player)
 {
-       static gchar description[128];
+       static gchar description[256];
+       unsigned char count = 0;
 
        gchar key_base[kGConfPlayerPathBufferLen];
        const int key_len = sprintf(key_base, kGConfPlayerPath, player);
@@ -126,9 +193,27 @@ gchar* controls_describe(int player)
        strcpy(key, kGConfPlayerKeyboardEnable);
        if (gconf_client_get_bool(gcc, key_base, NULL)) {
                strcpy(description, _("Keyboard"));
+               count++;
        }
 
-       if (description[0] == '\0') {
+       strcpy(key, kGConfPlayerTouchscreenEnable);
+       if (gconf_client_get_bool(gcc, key_base, NULL)) {
+               if (count > 0) strcat(description, ", ");
+               strcat(description, _("Touchscreen"));
+               count++;
+       }
+
+#if CONF_ZEEMOTE
+       strcpy(key, kGConfPlayerZeemoteEnable);
+       if (gconf_client_get_bool(gcc, key_base, NULL)) {
+               if (count > 0) strcat(description, ", ");
+               strcat(description, _("Zeemote"));
+               count++;
+       }
+#endif
+
+       if (count == 0) {
+               /* Add some text if there are no enabled controls */
                strcpy(description, _("Disabled"));
        }
 
@@ -197,6 +282,7 @@ void controls_dialog(GtkWindow* parent, int player)
        set_button_layout(HILDON_BUTTON(touch_show_chk),
                titles_size_group, values_size_group);
 
+#if 0
        GtkLabel* separator_3 = GTK_LABEL(gtk_label_new(_("Accelerometer")));
        gtk_label_set_attributes(separator_3, pattrlist);
        gtk_label_set_justify(separator_3, GTK_JUSTIFY_CENTER);
@@ -204,11 +290,18 @@ void controls_dialog(GtkWindow* parent, int player)
        GtkLabel* separator_4 = GTK_LABEL(gtk_label_new(_("Wiimote")));
        gtk_label_set_attributes(separator_4, pattrlist);
        gtk_label_set_justify(separator_4, GTK_JUSTIFY_CENTER);
-       
+#endif
+#if CONF_ZEEMOTE
        GtkLabel* separator_5 = GTK_LABEL(gtk_label_new(_("Zeemote")));
        gtk_label_set_attributes(separator_5, pattrlist);
        gtk_label_set_justify(separator_5, GTK_JUSTIFY_CENTER);
 
+       zeemote_chk = HILDON_CHECK_BUTTON(hildon_check_button_new(
+               HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
+       gtk_button_set_label(GTK_BUTTON(zeemote_chk), _("Enable Zeemote joystick"));
+       set_button_layout(HILDON_BUTTON(zeemote_chk),
+               titles_size_group, values_size_group);
+#endif
        gtk_box_pack_start(box, GTK_WIDGET(separator_1),
                FALSE, FALSE, HILDON_MARGIN_HALF);
        gtk_box_pack_start(box, GTK_WIDGET(keys_chk),
@@ -221,12 +314,18 @@ void controls_dialog(GtkWindow* parent, int player)
                FALSE, FALSE, 0);
        gtk_box_pack_start(box, GTK_WIDGET(touch_show_chk),
                FALSE, FALSE, 0);
+#if 0
        gtk_box_pack_start(box, GTK_WIDGET(separator_3),
                FALSE, FALSE, HILDON_MARGIN_HALF);
        gtk_box_pack_start(box, GTK_WIDGET(separator_4),
                FALSE, FALSE, HILDON_MARGIN_HALF);
+#endif
+#if CONF_ZEEMOTE
        gtk_box_pack_start(box, GTK_WIDGET(separator_5),
                FALSE, FALSE, HILDON_MARGIN_HALF);
+       gtk_box_pack_start(box, GTK_WIDGET(zeemote_chk),
+               FALSE, FALSE, 0);
+#endif
 
        hildon_pannable_area_add_with_viewport(pannable, GTK_WIDGET(box));
        gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(pannable));
@@ -247,7 +346,6 @@ void controls_dialog(GtkWindow* parent, int player)
        gtk_box_pack_start_defaults(keys_box, GTK_WIDGET(keys_btn));
 
        GtkWidget* sep_1 = GTK_WIDGET(gtk_hseparator_new());
-
        GtkBox* touch_box = GTK_BOX(gtk_vbox_new(FALSE, HILDON_MARGIN_HALF));
 
        touch_chk = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(
@@ -258,17 +356,27 @@ void controls_dialog(GtkWindow* parent, int player)
        gtk_box_pack_start_defaults(touch_box, GTK_WIDGET(touch_chk));
        gtk_box_pack_start_defaults(touch_box, GTK_WIDGET(touch_show_chk));
 
+#if CONF_ZEEMOTE
+       GtkWidget* sep_2 = GTK_WIDGET(gtk_hseparator_new());
+       zeemote_chk = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(
+               _("Enable Zeemote joystick")));
+#endif
+
        gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(keys_box));
        gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), sep_1);
        gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(touch_box));
+#if CONF_ZEEMOTE
+       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), sep_2);
+       gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(zeemote_chk));
 #endif
+#endif /* MAEMO_VERSION */
 
        load_settings();
 
 #if MAEMO_VERSION >= 5
        gtk_window_resize(GTK_WINDOW(dialog), 800, 360);
 #else
-       gtk_window_resize(GTK_WINDOW(dialog), 400, 200);
+       gtk_window_resize(GTK_WINDOW(dialog), 450, 250);
 #endif
 
        g_signal_connect(G_OBJECT(dialog), "response",