diff --git a/plugins/onepad/Linux/linux.cpp b/plugins/onepad/Linux/linux.cpp index 45de28a607..12c5b69fef 100644 --- a/plugins/onepad/Linux/linux.cpp +++ b/plugins/onepad/Linux/linux.cpp @@ -336,12 +336,8 @@ void OnConf_Key(GtkButton *button, gpointer user_data) init_tree_view(); } -EXPORT_C_(void) PADconfigure() +void populate_joysticks() { - LoadConfig(); - - Conf = create_Conf(); - // recreate JoystickInfo::EnumerateJoysticks(s_vjoysticks); @@ -363,6 +359,223 @@ EXPORT_C_(void) PADconfigure() gtk_combo_box_append_text(GTK_COMBO_BOX(s_devicecombo), "No Gamepad"); UpdateConf(0); +} + +int Get_Current_Joystick() +{ + // check bounds + int joyid = _GetJoystickIdFromPAD(0); + + if (JoystickIdWithinBounds(joyid)) + return joyid + 1; // select the combo + else + return 0; //s_vjoysticks.size(); // no gamepad +} + +void populate_new_joysticks(GtkComboBox *box) +{ + char str[255]; + JoystickInfo::EnumerateJoysticks(s_vjoysticks); + + gtk_combo_box_append_text(box, "No Gamepad"); + + vector::iterator it = s_vjoysticks.begin(); + + // Delete everything in the vector vjoysticks. + while (it != s_vjoysticks.end()) + { + sprintf(str, "%d: %s - but: %d, axes: %d, hats: %d", (*it)->GetId(), (*it)->GetName().c_str(), + (*it)->GetNumButtons(), (*it)->GetNumAxes(), (*it)->GetNumHats()); + gtk_combo_box_append_text(box, str); + it++; + } +} + +typedef struct +{ + GtkWidget *widget; + void put(char* lbl, GtkFixed *fix, int x, int y) + { + widget = gtk_button_new_with_label(lbl); + gtk_fixed_put(fix, widget, x, y); + gtk_widget_set_size_request(widget, 64, 24); + } +} dialog_buttons; + +void DisplayDialog() +{ + int return_value; + + GtkWidget *dialog; + GtkWidget *main_frame, *main_box; + + GtkWidget *pad_choose_frame, *pad_choose_box; + GtkWidget *pad_choose_cbox; + + GtkWidget *joy_choose_frame, *joy_choose_box; + GtkWidget *joy_choose_cbox; + + GtkWidget *keys_frame, *keys_box; + + GtkWidget *keys_tree_frame, *keys_tree_box; + GtkWidget *keys_tree_view; + GtkWidget *keys_tree_clear_btn, *keys_tree_remove_btn; + GtkWidget *keys_btn_box, *keys_btn_frame; + + GtkWidget *keys_static_frame, *keys_static_box; + GtkWidget *keys_static_area; + dialog_buttons btn[29]; + GtkWidget *rev_lx_check, *rev_ly_check, *force_feedback_check, *rev_rx_check, *rev_ry_check; + + /* Create the widgets */ + dialog = gtk_dialog_new_with_buttons ( + "OnePAD Config", + NULL, /* parent window*/ + (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + pad_choose_cbox = gtk_combo_box_new_text (); + gtk_combo_box_append_text(GTK_COMBO_BOX(pad_choose_cbox), "Pad 1"); + gtk_combo_box_append_text(GTK_COMBO_BOX(pad_choose_cbox), "Pad 2"); + gtk_combo_box_append_text(GTK_COMBO_BOX(pad_choose_cbox), "Pad 1 (alt)"); + gtk_combo_box_append_text(GTK_COMBO_BOX(pad_choose_cbox), "Pad 2 (alt)"); + gtk_combo_box_set_active(GTK_COMBO_BOX(pad_choose_cbox), 0); + + joy_choose_cbox = gtk_combo_box_new_text (); + populate_new_joysticks(GTK_COMBO_BOX(joy_choose_cbox)); + gtk_combo_box_set_active(GTK_COMBO_BOX(joy_choose_cbox), Get_Current_Joystick()); + + keys_tree_view = gtk_tree_view_new(); + keys_tree_clear_btn = gtk_button_new_with_label("Clear All"); + keys_tree_remove_btn = gtk_button_new_with_label("Remove"); + + main_box = gtk_vbox_new(false, 5); + main_frame = gtk_frame_new ("Onepad Config"); + gtk_container_add (GTK_CONTAINER(main_frame), main_box); + + pad_choose_box = gtk_vbox_new(false, 5); + pad_choose_frame = gtk_frame_new ("Choose a Pad to modify:"); + gtk_container_add (GTK_CONTAINER(pad_choose_frame), pad_choose_box); + + joy_choose_box = gtk_vbox_new(false, 5); + joy_choose_frame = gtk_frame_new ("Joystick to use for this pad"); + gtk_container_add (GTK_CONTAINER(joy_choose_frame), joy_choose_box); + + keys_btn_box = gtk_hbox_new(false, 5); + keys_btn_frame = gtk_frame_new (""); + gtk_container_add (GTK_CONTAINER(keys_btn_frame), keys_btn_box); + + keys_tree_box = gtk_vbox_new(false, 5); + keys_tree_frame = gtk_frame_new (""); + gtk_container_add (GTK_CONTAINER(keys_tree_frame), keys_tree_box); + + keys_static_box = gtk_hbox_new(false, 5); + keys_static_frame = gtk_frame_new (""); + gtk_container_add (GTK_CONTAINER(keys_static_frame), keys_static_box); + + keys_static_area = gtk_fixed_new(); + + u32 static_offset = 0; //320 + btn[0].put("L1", GTK_FIXED(keys_static_area), static_offset + 64, 32); + btn[1].put("L2", GTK_FIXED(keys_static_area), static_offset + 64, 8); + btn[2].put("L3", GTK_FIXED(keys_static_area), static_offset + 200, 8); + btn[3].put("R1", GTK_FIXED(keys_static_area), static_offset + 392, 32); + btn[4].put("R2", GTK_FIXED(keys_static_area), static_offset + 392, 8); + btn[5].put("R3", GTK_FIXED(keys_static_area), static_offset + 272, 8); + + btn[6].put("Select", GTK_FIXED(keys_static_area), static_offset + 200, 48); + btn[7].put("Start", GTK_FIXED(keys_static_area), static_offset + 272, 48); + + // Arrow pad + btn[8].put("Up", GTK_FIXED(keys_static_area), static_offset + 64, 80); + btn[9].put("Down", GTK_FIXED(keys_static_area), static_offset + 64, 128); + btn[10].put("Left", GTK_FIXED(keys_static_area), static_offset + 0, 104); + btn[11].put("Right", GTK_FIXED(keys_static_area), static_offset + 128, 104); + + btn[12].put("Analog", GTK_FIXED(keys_static_area), static_offset + 232, 104); + + btn[13].put("Triangle", GTK_FIXED(keys_static_area), static_offset + 392, 80); + btn[14].put("Square", GTK_FIXED(keys_static_area), static_offset + 328, 104); + btn[15].put("Circle", GTK_FIXED(keys_static_area), static_offset + 456, 104); + btn[16].put("Cross", GTK_FIXED(keys_static_area), static_offset + 392,128); + + // Joy 1 + btn[17].put("Up", GTK_FIXED(keys_static_area), static_offset + 64, 240); + btn[18].put("Down", GTK_FIXED(keys_static_area), static_offset + 64, 312); + btn[19].put("Left", GTK_FIXED(keys_static_area), static_offset + 0, 272); + btn[20].put("Right", GTK_FIXED(keys_static_area), static_offset + 128, 272); + btn[21].put("LX", GTK_FIXED(keys_static_area), static_offset + 64, 264); + btn[22].put("LY", GTK_FIXED(keys_static_area), static_offset + 64, 288); + + // Joy 2 + btn[23].put("Up", GTK_FIXED(keys_static_area), static_offset + 392, 240); + btn[24].put("Down", GTK_FIXED(keys_static_area), static_offset + 392, 312); + btn[25].put("Left", GTK_FIXED(keys_static_area), static_offset + 328, 272); + btn[26].put("Right", GTK_FIXED(keys_static_area), static_offset + 456, 272); + btn[27].put("RX", GTK_FIXED(keys_static_area), static_offset + 392, 264); + btn[28].put("RY", GTK_FIXED(keys_static_area), static_offset + 392, 288); + + keys_box = gtk_hbox_new(false, 5); + keys_frame = gtk_frame_new ("Key Settings"); + gtk_container_add (GTK_CONTAINER(keys_frame), keys_box); + + gtk_box_pack_start (GTK_BOX (keys_tree_box), keys_tree_view, true, true, 0); + gtk_box_pack_end (GTK_BOX (keys_btn_box), keys_tree_clear_btn, false, false, 0); + gtk_box_pack_end (GTK_BOX (keys_btn_box), keys_tree_remove_btn, false, false, 0); + + gtk_container_add(GTK_CONTAINER(pad_choose_box), pad_choose_cbox); + gtk_container_add(GTK_CONTAINER(joy_choose_box), joy_choose_cbox); + gtk_container_add(GTK_CONTAINER(keys_tree_box), keys_btn_frame); + gtk_box_pack_start (GTK_BOX (keys_box), keys_tree_frame, true, true, 0); + gtk_container_add(GTK_CONTAINER(keys_box), keys_static_area); + + gtk_container_add(GTK_CONTAINER(main_box), pad_choose_frame); + gtk_container_add(GTK_CONTAINER(main_box), joy_choose_frame); + gtk_container_add(GTK_CONTAINER(main_box), keys_frame); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), main_frame); + gtk_widget_show_all (dialog); + + return_value = gtk_dialog_run (GTK_DIALOG (dialog)); + + if (return_value == GTK_RESPONSE_ACCEPT) + { +// DebugEnabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(debug_check)); +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(int_box)) != -1) +// Interpolation = gtk_combo_box_get_active(GTK_COMBO_BOX(int_box)); +// +// EffectsDisabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(effects_check)); +// +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(reverb_box)) != -1) +// ReverbBoost = gtk_combo_box_get_active(GTK_COMBO_BOX(reverb_box)); +// +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(mod_box)) != 1) +// OutputModule = 0; +// else +// OutputModule = FindOutputModuleById( PortaudioOut->GetIdent() ); +// +// SndOutLatencyMS = gtk_range_get_value(GTK_RANGE(latency_slide)); +// +// if (gtk_combo_box_get_active(GTK_COMBO_BOX(sync_box)) != -1) +// SynchMode = gtk_combo_box_get_active(GTK_COMBO_BOX(sync_box)); + } + + gtk_widget_destroy (dialog); +} + +EXPORT_C_(void) PADconfigure() +{ + LoadConfig(); + + //DisplayDialog(); + //return; + Conf = create_Conf(); + + populate_joysticks(); gtk_widget_show_all(Conf); gtk_main();