2 * This file is part of DrNokSnes
4 * Copyright (C) 2009 Javier S. Pedro <maemo@javispedro.com>
6 * This software is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public License
8 * as published by the Free Software Foundation; either version 2.1 of
9 * the License, or (at your option) any later version.
11 * This software is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this software; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25 #include <hildon/hildon-helper.h>
27 #if MAEMO_VERSION >= 5
28 #include <hildon/hildon-gtk.h>
29 #include <hildon/hildon-pannable-area.h>
30 #include <hildon/hildon-button.h>
31 #include <hildon/hildon-check-button.h>
32 #include <hildon/hildon-picker-button.h>
33 #include <hildon/hildon-touch-selector.h>
34 #include <pango/pango-attributes.h>
36 #include <hildon/hildon-caption.h>
43 static GtkDialog* dialog;
44 static int current_player;
45 #if MAEMO_VERSION >= 5
46 static HildonCheckButton* keys_chk;
47 static HildonButton* keys_btn;
48 static HildonCheckButton* touch_chk;
49 static HildonCheckButton* touch_show_chk;
54 static void load_settings()
56 gchar key_base[kGConfPlayerPathBufferLen];
57 const int key_len = sprintf(key_base, kGConfPlayerPath, current_player);
58 gchar *key = key_base + key_len;
60 #if MAEMO_VERSION >= 5
61 strcpy(key, kGConfPlayerKeyboardEnable);
62 hildon_check_button_set_active(keys_chk,
63 gconf_client_get_bool(gcc, key_base, NULL));
68 static void save_settings()
70 gchar key_base[kGConfPlayerPathBufferLen];
71 const int key_len = sprintf(key_base, kGConfPlayerPath, current_player);
72 gchar *key = key_base + key_len;
74 #if MAEMO_VERSION >= 5
75 strcpy(key, kGConfPlayerKeyboardEnable);
76 gconf_client_set_bool(gcc, key_base,
77 hildon_check_button_get_active(keys_chk), NULL);
82 static void keys_btn_callback(GtkWidget * button, gpointer data)
84 keys_dialog(GTK_WINDOW(dialog), GPOINTER_TO_INT(data));
87 static void cb_dialog_response(GtkWidget * button, gint response, gpointer data)
89 if (response == GTK_RESPONSE_OK) {
91 settings_update_controls(current_player);
94 gtk_widget_destroy(GTK_WIDGET(dialog));
97 #if MAEMO_VERSION >= 5
98 static void set_button_layout(HildonButton* button,
99 GtkSizeGroup* titles_size_group, GtkSizeGroup* values_size_group)
101 hildon_button_add_title_size_group(button, titles_size_group);
102 hildon_button_add_value_size_group(button, values_size_group);
103 hildon_button_set_alignment(button, 0.0, 0.5, 1.0, 0.0);
107 gchar* controls_describe(int player)
109 static gchar description[128];
111 gchar key_base[kGConfPlayerPathBufferLen];
112 const int key_len = sprintf(key_base, kGConfPlayerPath, player);
113 gchar *key = key_base + key_len;
115 description[0] = '\0';
117 strcpy(key, kGConfPlayerKeyboardEnable);
118 if (gconf_client_get_bool(gcc, key_base, NULL)) {
119 strcpy(description, _("Keyboard"));
122 if (description[0] == '\0') {
123 strcpy(description, _("Disabled"));
129 void controls_dialog(GtkWindow* parent, int player)
131 gchar* title = g_strdup_printf(_("Player %d controls"), player);
132 dialog = GTK_DIALOG(gtk_dialog_new_with_buttons(title,
133 parent, GTK_DIALOG_MODAL,
134 GTK_STOCK_SAVE, GTK_RESPONSE_OK,
135 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL));
138 current_player = player;
140 #if MAEMO_VERSION >= 5
141 GtkBox * box = GTK_BOX(gtk_vbox_new(FALSE, HILDON_MARGIN_HALF));
142 HildonPannableArea * pannable =
143 HILDON_PANNABLE_AREA(hildon_pannable_area_new());
144 GtkSizeGroup * titles_size_group =
145 gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
146 GtkSizeGroup * values_size_group =
147 gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
148 PangoAttrList *pattrlist = pango_attr_list_new();
149 PangoAttribute *attr = pango_attr_size_new(22 * PANGO_SCALE);
150 attr->start_index = 0;
151 attr->end_index = G_MAXINT;
152 pango_attr_list_insert(pattrlist, attr);
154 GtkLabel* separator_1 = GTK_LABEL(gtk_label_new(_("Keys")));
155 gtk_label_set_attributes(separator_1, pattrlist);
156 gtk_label_set_justify(separator_1, GTK_JUSTIFY_CENTER);
158 keys_chk = HILDON_CHECK_BUTTON(hildon_check_button_new(
159 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
160 gtk_button_set_label(GTK_BUTTON(keys_chk), _("Enable keyboard"));
161 set_button_layout(HILDON_BUTTON(keys_chk),
162 titles_size_group, values_size_group);
164 keys_btn = HILDON_BUTTON(hildon_button_new_with_text(
165 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
166 HILDON_BUTTON_ARRANGEMENT_HORIZONTAL,
167 _("Configure keys..."), NULL));
168 set_button_layout(HILDON_BUTTON(keys_btn),
169 titles_size_group, values_size_group);
170 g_signal_connect(G_OBJECT(keys_btn), "clicked",
171 G_CALLBACK(keys_btn_callback), GINT_TO_POINTER(player));
173 GtkLabel* separator_2 = GTK_LABEL(gtk_label_new(_("Touchscreen")));
174 gtk_label_set_attributes(separator_2, pattrlist);
175 gtk_label_set_justify(separator_2, GTK_JUSTIFY_CENTER);
177 touch_chk = HILDON_CHECK_BUTTON(hildon_check_button_new(
178 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
179 gtk_button_set_label(GTK_BUTTON(touch_chk),
180 _("Enable touchscreen buttons"));
181 set_button_layout(HILDON_BUTTON(touch_chk),
182 titles_size_group, values_size_group);
184 touch_show_chk = HILDON_CHECK_BUTTON(hildon_check_button_new(
185 HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
186 gtk_button_set_label(GTK_BUTTON(touch_show_chk),
187 _("Show on-screen button grid"));
188 set_button_layout(HILDON_BUTTON(touch_show_chk),
189 titles_size_group, values_size_group);
191 GtkLabel* separator_3 = GTK_LABEL(gtk_label_new(_("Accelerometer")));
192 gtk_label_set_attributes(separator_3, pattrlist);
193 gtk_label_set_justify(separator_3, GTK_JUSTIFY_CENTER);
195 GtkLabel* separator_4 = GTK_LABEL(gtk_label_new(_("Wiimote")));
196 gtk_label_set_attributes(separator_4, pattrlist);
197 gtk_label_set_justify(separator_4, GTK_JUSTIFY_CENTER);
199 GtkLabel* separator_5 = GTK_LABEL(gtk_label_new(_("Zeemote")));
200 gtk_label_set_attributes(separator_5, pattrlist);
201 gtk_label_set_justify(separator_5, GTK_JUSTIFY_CENTER);
203 gtk_box_pack_start(box, GTK_WIDGET(separator_1),
204 FALSE, FALSE, HILDON_MARGIN_HALF);
205 gtk_box_pack_start(box, GTK_WIDGET(keys_chk),
207 gtk_box_pack_start(box, GTK_WIDGET(keys_btn),
209 gtk_box_pack_start(box, GTK_WIDGET(separator_2),
210 FALSE, FALSE, HILDON_MARGIN_HALF);
211 gtk_box_pack_start(box, GTK_WIDGET(touch_chk),
213 gtk_box_pack_start(box, GTK_WIDGET(touch_show_chk),
215 gtk_box_pack_start(box, GTK_WIDGET(separator_3),
216 FALSE, FALSE, HILDON_MARGIN_HALF);
217 gtk_box_pack_start(box, GTK_WIDGET(separator_4),
218 FALSE, FALSE, HILDON_MARGIN_HALF);
219 gtk_box_pack_start(box, GTK_WIDGET(separator_5),
220 FALSE, FALSE, HILDON_MARGIN_HALF);
222 hildon_pannable_area_add_with_viewport(pannable, GTK_WIDGET(box));
223 gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(pannable));
225 pango_attr_list_unref(pattrlist);
226 g_object_unref(titles_size_group);
227 g_object_unref(values_size_group);
233 #if MAEMO_VERSION >= 5
234 gtk_window_resize(GTK_WINDOW(dialog), 800, 360);
236 gtk_window_resize(GTK_WINDOW(dialog), 400, 200);
239 g_signal_connect(G_OBJECT(dialog), "response",
240 G_CALLBACK (cb_dialog_response), NULL);
242 gtk_widget_show_all(GTK_WIDGET(dialog));