/** * show_properties_dialog * * Description: * displays the properties dialog **/ void show_properties_dialog (void) { GtkWidget *notebook; GtkWidget *cpage; GtkWidget *gpage; GtkWidget *kpage; GtkWidget *label; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *typemenu; GtkWidget *pmapmenu; GtkWidget *chkbox; GtkWidget *table; GtkWidget *dbut; GtkWidget *frame; GtkWidget *w; GtkWidget *controls_list; if (propbox) return; propbox = gtk_dialog_new_with_buttons (_("Robots Preferences"), GTK_WINDOW (app), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_has_separator (GTK_DIALOG (propbox), FALSE); gtk_container_set_border_width (GTK_CONTAINER (propbox), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (propbox)->vbox), 2); /* Set up notebook and add it to hbox of the gtk_dialog */ g_signal_connect (G_OBJECT (propbox), "destroy", G_CALLBACK (gtk_widget_destroyed), &propbox); notebook = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (notebook), 5); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (propbox)->vbox), notebook, TRUE, TRUE, 0); /* The configuration page */ cpage = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (cpage), 12); frame = games_frame_new (_("Game Type")); gtk_box_pack_start (GTK_BOX (cpage), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); typemenu = gtk_combo_box_new_text (); g_signal_connect (G_OBJECT (typemenu), "changed", G_CALLBACK (type_selection), NULL); fill_typemenu (typemenu); gtk_box_pack_start (GTK_BOX (hbox), typemenu, TRUE, TRUE, 0); frame = games_frame_new (_("Options")); gtk_box_pack_start (GTK_BOX (cpage), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new (TRUE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); chkbox = gtk_check_button_new_with_mnemonic (_("_Use safe moves")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.safe_moves); g_signal_connect (G_OBJECT (chkbox), "clicked", (GCallback) safe_cb, NULL); gtk_box_pack_start (GTK_BOX (vbox), chkbox, TRUE, TRUE, 0); gtk_widget_set_tooltip_text (chkbox, _("Prevent accidental moves that result in getting killed.")); chkbox = gtk_check_button_new_with_mnemonic (_("U_se super safe moves")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.super_safe_moves); g_signal_connect (G_OBJECT (chkbox), "clicked", (GCallback) super_safe_cb, NULL); gtk_box_pack_start (GTK_BOX (vbox), chkbox, TRUE, TRUE, 0); gtk_widget_set_tooltip_text (chkbox, _("Prevents all moves that result in getting killed.")); frame = games_frame_new (_("Sound")); gtk_box_pack_start (GTK_BOX (cpage), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new (TRUE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); chkbox = gtk_check_button_new_with_mnemonic (_("_Enable sounds")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.sound); g_signal_connect (G_OBJECT (chkbox), "clicked", (GCallback) sound_cb, NULL); gtk_box_pack_start (GTK_BOX (vbox), chkbox, TRUE, TRUE, 0); gtk_widget_set_tooltip_text (chkbox, _("Play sounds for events like winning a level and dying.")); label = gtk_label_new_with_mnemonic (_("Game")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), cpage, label); /* The graphics page */ gpage = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (gpage), 12); frame = games_frame_new (_("Graphics Theme")); gtk_box_pack_start (GTK_BOX (gpage), frame, FALSE, FALSE, 0); table = gtk_table_new (2, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 12); gtk_container_add (GTK_CONTAINER (frame), table); label = gtk_label_new_with_mnemonic (_("_Image theme:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); pmapmenu = make_theme_menu (); g_signal_connect (G_OBJECT (pmapmenu), "changed", G_CALLBACK (pmap_selection), NULL); gtk_label_set_mnemonic_widget (GTK_LABEL (label), pmapmenu); gtk_table_attach_defaults (GTK_TABLE (table), pmapmenu, 1, 2, 0, 1); label = gtk_label_new_with_mnemonic (_("_Background color:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); w = gtk_color_button_new (); gtk_color_button_set_color (GTK_COLOR_BUTTON (w), &properties.bgcolour); g_signal_connect (G_OBJECT (w), "color_set", G_CALLBACK (bg_color_callback), NULL); gtk_label_set_mnemonic_widget (GTK_LABEL (label), w); gtk_table_attach_defaults (GTK_TABLE (table), w, 1, 2, 1, 2); label = gtk_label_new_with_mnemonic (_("Appearance")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), gpage, label); /* The keyboard page */ kpage = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (kpage), 12); frame = games_frame_new (_("Keyboard Controls")); gtk_box_pack_start (GTK_BOX (kpage), frame, TRUE, TRUE, 0); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); controls_list = games_controls_list_new (KEY_PREFERENCES_GROUP); games_controls_list_add_controls (GAMES_CONTROLS_LIST (controls_list), "key00", _("Key to move NW"), default_keys[0], "key01", _("Key to move N"), default_keys[1], "key02", _("Key to move NE"), default_keys[2], "key03", _("Key to move W"), default_keys[3], "key05", _("Key to move E"), default_keys[5], "key06", _("Key to move SW"), default_keys[6], "key07", _("Key to move S"), default_keys[7], "key08", _("Key to move SE"), default_keys[8], "key04", _("Key to hold"), default_keys[4], "key09", _("Key to teleport"), default_keys[9], "key10", _("Key to teleport randomly"), default_keys[10], "key11", _("Key to wait"), default_keys[11], NULL); gtk_box_pack_start (GTK_BOX (vbox), controls_list, TRUE, TRUE, 0); hbox = gtk_hbutton_box_new (); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_START); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); dbut = gtk_button_new_with_mnemonic (_("_Restore Defaults")); g_signal_connect (G_OBJECT (dbut), "clicked", G_CALLBACK (defkey_cb), (gpointer) default_keys); gtk_box_pack_start (GTK_BOX (hbox), dbut, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("Keyboard")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), kpage, label); g_signal_connect (G_OBJECT (propbox), "delete_event", G_CALLBACK (delete_cb), NULL); g_signal_connect (G_OBJECT (propbox), "response", G_CALLBACK (apply_cb), NULL); gtk_window_set_modal (GTK_WINDOW (propbox), TRUE); gtk_widget_show_all (propbox); }
int Tetris::gameProperties(GtkAction *action, void *d) { GtkWidget *notebook; GtkWidget *vbox; GtkWidget *label; GtkWidget *frame; GtkWidget *table; GtkWidget *fvbox; GtkObject *adj; GtkWidget *controls_list; Tetris *t = (Tetris*) d; if (t->setupdialog) { gtk_window_present (GTK_WINDOW(t->setupdialog)); return FALSE; } /* create the dialog */ t->setupdialog = gtk_dialog_new_with_buttons(_("Gnometris Preferences"), GTK_WINDOW (t->w), (GtkDialogFlags)0, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_set_has_separator (GTK_DIALOG (t->setupdialog), FALSE); gtk_container_set_border_width (GTK_CONTAINER (t->setupdialog), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (t->setupdialog)->vbox), 2); g_signal_connect (t->setupdialog, "close", G_CALLBACK (setupdialogDestroy), d); g_signal_connect (t->setupdialog, "response", G_CALLBACK (setupdialogResponse), d); notebook = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (notebook), 5); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(t->setupdialog)->vbox), notebook, TRUE, TRUE, 0); /* game page */ vbox = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); label = gtk_label_new (_("Game")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, label); frame = games_frame_new (_("Setup")); table = gtk_table_new (3, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 12); /* pre-filled rows */ label = gtk_label_new_with_mnemonic (_("_Number of pre-filled rows:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); adj = gtk_adjustment_new (t->line_fill_height, 0, LINES-1, 1, 5, 0); t->fill_height_spinner = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 10, 0); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (t->fill_height_spinner), GTK_UPDATE_ALWAYS); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (t->fill_height_spinner), TRUE); g_signal_connect (t->fill_height_spinner, "value_changed", G_CALLBACK (lineFillHeightChanged), t); gtk_table_attach_defaults (GTK_TABLE (table), t->fill_height_spinner, 1, 2, 0, 1); gtk_label_set_mnemonic_widget (GTK_LABEL (label), t->fill_height_spinner); /* pre-filled rows density */ label = gtk_label_new_with_mnemonic (_("_Density of blocks in a pre-filled row:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); adj = gtk_adjustment_new (t->line_fill_prob, 0, 10, 1, 5, 0); t->fill_prob_spinner = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 10, 0); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (t->fill_prob_spinner), GTK_UPDATE_ALWAYS); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (t->fill_prob_spinner), TRUE); g_signal_connect (t->fill_prob_spinner, "value_changed", G_CALLBACK (lineFillProbChanged), t); gtk_table_attach_defaults (GTK_TABLE (table), t->fill_prob_spinner, 1, 2, 1, 2); gtk_label_set_mnemonic_widget (GTK_LABEL (label), t->fill_prob_spinner); /* starting level */ label = gtk_label_new_with_mnemonic (_("_Starting level:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) 0, 0, 0); adj = gtk_adjustment_new (t->startingLevel, 1, 20, 1, 5, 0); t->sentry = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 10.0, 0); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (t->sentry), GTK_UPDATE_ALWAYS); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (t->sentry), TRUE); g_signal_connect (t->sentry, "value_changed", G_CALLBACK (startingLevelChanged), t); gtk_table_attach_defaults (GTK_TABLE (table), t->sentry, 1, 2, 2, 3); gtk_label_set_mnemonic_widget (GTK_LABEL (label), t->sentry); gtk_container_add (GTK_CONTAINER (frame), table); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = games_frame_new (_("Operation")); fvbox = gtk_vbox_new (FALSE, 6); /* sound */ t->sound_toggle = gtk_check_button_new_with_mnemonic (_("_Enable sounds")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (t->sound_toggle), games_sound_is_enabled ()); g_signal_connect (t->sound_toggle, "clicked", G_CALLBACK (setSound), d); gtk_box_pack_start (GTK_BOX (fvbox), t->sound_toggle, 0, 0, 0); /* preview next block */ t->do_preview_toggle = gtk_check_button_new_with_mnemonic (_("_Preview next block")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (t->do_preview_toggle), do_preview); g_signal_connect (t->do_preview_toggle, "clicked", G_CALLBACK (setSelectionPreview), d); gtk_box_pack_start (GTK_BOX (fvbox), t->do_preview_toggle, 0, 0, 0); /* random blocks */ t->random_block_colors_toggle = gtk_check_button_new_with_mnemonic (_("_Use random block colors")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t->random_block_colors_toggle), random_block_colors); g_signal_connect (t->random_block_colors_toggle, "clicked", G_CALLBACK (setSelectionBlocks), d); gtk_box_pack_start (GTK_BOX (fvbox), t->random_block_colors_toggle, 0, 0, 0); /* rotate counter clock wise */ t->rotate_counter_clock_wise_toggle = gtk_check_button_new_with_mnemonic (_("_Rotate blocks counterclockwise")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t->rotate_counter_clock_wise_toggle), rotateCounterClockWise); g_signal_connect (t->rotate_counter_clock_wise_toggle, "clicked", G_CALLBACK (setRotateCounterClockWise), d); gtk_box_pack_start (GTK_BOX (fvbox), t->rotate_counter_clock_wise_toggle, 0, 0, 0); t->useTargetToggle = gtk_check_button_new_with_mnemonic (_("Show _where the block will land")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (t->useTargetToggle), t->useTarget); g_signal_connect (t->useTargetToggle, "clicked", G_CALLBACK (setTarget), d); gtk_box_pack_start (GTK_BOX (fvbox), t->useTargetToggle, 0, 0, 0); gtk_container_add (GTK_CONTAINER (frame), fvbox); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); frame = games_frame_new (_("Theme")); table = gtk_table_new (2, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 0); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 12); /* controls page */ vbox = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); label = gtk_label_new (_("Controls")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, label); frame = games_frame_new (_("Keyboard Controls")); gtk_container_add (GTK_CONTAINER (vbox), frame); fvbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), fvbox); controls_list = games_controls_list_new (KEY_CONTROLS_GROUP); games_controls_list_add_controls (GAMES_CONTROLS_LIST (controls_list), KEY_MOVE_LEFT, _("Move left"), GDK_Left, KEY_MOVE_RIGHT, _("Move right"), GDK_Right, KEY_MOVE_DOWN, _("Move down"), GDK_Down, KEY_MOVE_DROP, _("Drop"), GDK_Pause, KEY_MOVE_ROTATE, _("Rotate"), GDK_Up, KEY_MOVE_PAUSE, _("Pause"), GDK_space, NULL); gtk_box_pack_start (GTK_BOX (fvbox), controls_list, TRUE, TRUE, 0); /* theme page */ vbox = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); label = gtk_label_new (_("Theme")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, label); frame = games_frame_new (_("Block Style")); gtk_container_add (GTK_CONTAINER (vbox), frame); fvbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), fvbox); GtkWidget *omenu = gtk_combo_box_new_text (); const ThemeTableEntry *entry = ThemeTable; while (entry->id) { gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), entry->name); entry++; } gtk_combo_box_set_active (GTK_COMBO_BOX (omenu), t->themeno); g_signal_connect (omenu, "changed", G_CALLBACK (setSelection), t); gtk_box_pack_start (GTK_BOX (fvbox), omenu, FALSE, FALSE, 0); t->theme_preview = new Preview(); t->theme_preview->setTheme (t->themeno); gtk_box_pack_start(GTK_BOX(fvbox), t->theme_preview->getWidget(), TRUE, TRUE, 0); t->theme_preview->previewBlock(4, 0, 0); gtk_widget_show_all (t->setupdialog); gtk_action_set_sensitive(t->new_game_action, FALSE); return TRUE; }
void prefsbox_open (void) { GtkWidget *notebook; GtkWidget *grid; GtkWidget *controls_list; GtkWidget *label; GtkCellRenderer *renderer; GtkListStore *model; GtkTreeIter iter; gint i; if (prefsbox != NULL) { gtk_window_present (GTK_WINDOW (prefsbox)); return; } prefsbox = gtk_dialog_new_with_buttons (_("Four-in-a-Row Preferences"), GTK_WINDOW (app), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL); gtk_container_set_border_width (GTK_CONTAINER (prefsbox), 5); gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (prefsbox))), 2); g_signal_connect (G_OBJECT (prefsbox), "destroy", G_CALLBACK (gtk_widget_destroyed), &prefsbox); notebook = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (notebook), 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (prefsbox))), notebook, TRUE, TRUE, 0); /* game tab */ grid = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 12); gtk_container_set_border_width (GTK_CONTAINER (grid), 12); label = gtk_label_new (_("Game")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), grid, label); label = gtk_label_new (_("Player One:")); gtk_widget_set_hexpand (label, TRUE); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); combobox1 = gtk_combo_box_new (); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox1), renderer, TRUE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox1), renderer, "text", 0); model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); gtk_combo_box_set_model (GTK_COMBO_BOX (combobox1), GTK_TREE_MODEL (model)); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Human"), 1, LEVEL_HUMAN, -1); if (p.level[PLAYER1] == LEVEL_HUMAN) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox1), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level one"), 1, LEVEL_WEAK, -1); if (p.level[PLAYER1] == LEVEL_WEAK) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox1), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level two"), 1, LEVEL_MEDIUM, -1); if (p.level[PLAYER1] == LEVEL_MEDIUM) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox1), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level three"), 1, LEVEL_STRONG, -1); if (p.level[PLAYER1] == LEVEL_STRONG) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox1), &iter); g_signal_connect (combobox1, "changed", G_CALLBACK (on_select_player1), NULL); gtk_grid_attach (GTK_GRID (grid), combobox1, 1, 0, 1, 1); label = gtk_label_new (_("Player Two:")); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); combobox2 = gtk_combo_box_new (); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox2), renderer, TRUE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox2), renderer, "text", 0); model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); gtk_combo_box_set_model (GTK_COMBO_BOX (combobox2), GTK_TREE_MODEL (model)); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Human"), 1, LEVEL_HUMAN, -1); if (p.level[PLAYER2] == LEVEL_HUMAN) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox2), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level one"), 1, LEVEL_WEAK, -1); if (p.level[PLAYER2] == LEVEL_WEAK) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox2), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level two"), 1, LEVEL_MEDIUM, -1); if (p.level[PLAYER2] == LEVEL_MEDIUM) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox2), &iter); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, 0, _("Level three"), 1, LEVEL_STRONG, -1); if (p.level[PLAYER2] == LEVEL_STRONG) gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox2), &iter); g_signal_connect (combobox2, "changed", G_CALLBACK (on_select_player2), NULL); gtk_grid_attach (GTK_GRID (grid), combobox2, 1, 1, 1, 1); label = gtk_label_new_with_mnemonic (_("_Theme:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); combobox_theme = gtk_combo_box_text_new (); for (i = 0; i < n_themes; i++) { gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combobox_theme), _(theme_get_title (i))); } gtk_label_set_mnemonic_widget (GTK_LABEL (label), combobox_theme); gtk_grid_attach (GTK_GRID (grid), combobox_theme, 1, 2, 1, 1); checkbutton_animate = gtk_check_button_new_with_mnemonic (_("Enable _animation")); gtk_grid_attach (GTK_GRID (grid), checkbutton_animate, 0, 3, 2, 1); checkbutton_sound = gtk_check_button_new_with_mnemonic (_("E_nable sounds")); gtk_grid_attach (GTK_GRID (grid), checkbutton_sound, 0, 4, 2, 1); /* keyboard tab */ label = gtk_label_new_with_mnemonic (_("Keyboard Controls")); controls_list = games_controls_list_new (settings); games_controls_list_add_controls (GAMES_CONTROLS_LIST (controls_list), "key-left", _("Move left"), DEFAULT_KEY_LEFT, "key-right", _("Move right"), DEFAULT_KEY_RIGHT, "key-drop", _("Drop marble"), DEFAULT_KEY_DROP, NULL); gtk_container_set_border_width (GTK_CONTAINER (controls_list), 12); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), controls_list, label); /* fill in initial values */ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox_theme), p.theme_id); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton_animate), p.do_animate); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton_sound), p.do_sound); /* connect signals */ g_signal_connect (prefsbox, "response", G_CALLBACK (on_dialog_close), &prefsbox); g_signal_connect (G_OBJECT (combobox_theme), "changed", G_CALLBACK (on_select_theme), NULL); g_signal_connect (G_OBJECT (checkbutton_animate), "toggled", G_CALLBACK (on_toggle_animate), NULL); g_signal_connect (G_OBJECT (checkbutton_sound), "toggled", G_CALLBACK (on_toggle_sound), NULL); gtk_widget_show_all (prefsbox); }
/** * show_properties_dialog * * Description: * displays the properties dialog **/ void show_properties_dialog (void) { GtkWidget *notebook; GtkWidget *cpage; GtkWidget *gpage; GtkWidget *kpage; GtkWidget *label; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *typemenu; GtkWidget *pmapmenu; GtkWidget *chkbox; GtkWidget *safe_chkbox; GtkWidget *grid; GtkWidget *dbut; GtkWidget *w; GtkWidget *controls_list; if (propbox) return; propbox = gtk_dialog_new_with_buttons (_("Preferences"), GTK_WINDOW (window), GTK_DIALOG_USE_HEADER_BAR, NULL); gtk_container_set_border_width (GTK_CONTAINER (propbox), 5); gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (propbox))), 2); /* Set up notebook and add it to hbox of the gtk_dialog */ g_signal_connect (G_OBJECT (propbox), "destroy", G_CALLBACK (gtk_widget_destroyed), &propbox); notebook = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (notebook), 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (propbox))), notebook, TRUE, TRUE, 0); /* The configuration page */ cpage = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18); gtk_container_set_border_width (GTK_CONTAINER (cpage), 12); grid = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 12); gtk_box_pack_start (GTK_BOX (cpage), grid, FALSE, FALSE, 0); label = gtk_label_new (_("Game Type")); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); typemenu = gtk_combo_box_text_new (); fill_typemenu (typemenu); gtk_grid_attach (GTK_GRID (grid), typemenu, 1, 0, 1, 1); g_signal_connect (G_OBJECT (typemenu), "changed", G_CALLBACK (type_selection), NULL); chkbox = gtk_check_button_new_with_mnemonic (_("_Use safe moves")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.safe_moves); gtk_grid_attach (GTK_GRID (grid), chkbox, 0, 1, 2, 1); gtk_widget_set_tooltip_text (chkbox, _("Prevent accidental moves that result in getting killed.")); safe_chkbox = chkbox; chkbox = gtk_check_button_new_with_mnemonic (_("U_se super safe moves")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.super_safe_moves); g_signal_connect (G_OBJECT (chkbox), "clicked", (GCallback) super_safe_cb, NULL); gtk_grid_attach (GTK_GRID (grid), chkbox, 0, 2, 2, 1); gtk_widget_set_tooltip_text (chkbox, _("Prevents all moves that result in getting killed.")); gtk_widget_set_sensitive (chkbox, properties.safe_moves); g_signal_connect (G_OBJECT (safe_chkbox), "clicked", (GCallback) safe_cb, (gpointer) chkbox); chkbox = gtk_check_button_new_with_mnemonic (_("_Enable sounds")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chkbox), properties.sound); g_signal_connect (G_OBJECT (chkbox), "clicked", (GCallback) sound_cb, NULL); gtk_grid_attach (GTK_GRID (grid), chkbox, 0, 3, 2, 1); gtk_widget_set_tooltip_text (chkbox, _("Play sounds for events like winning a level and dying.")); label = gtk_label_new_with_mnemonic (_("Game")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), cpage, label); /* The graphics page */ gpage = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18); gtk_container_set_border_width (GTK_CONTAINER (gpage), 12); grid = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 12); gtk_box_pack_start (GTK_BOX (gpage), grid, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("_Image theme:")); gtk_widget_set_hexpand (label, TRUE); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); pmapmenu = make_theme_menu (); g_signal_connect (G_OBJECT (pmapmenu), "changed", G_CALLBACK (pmap_selection), NULL); gtk_label_set_mnemonic_widget (GTK_LABEL (label), pmapmenu); gtk_grid_attach (GTK_GRID (grid), pmapmenu, 1, 0, 1, 1); label = gtk_label_new_with_mnemonic (_("_Background color:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); w = gtk_color_button_new (); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (w), &properties.bgcolour); g_signal_connect (G_OBJECT (w), "color_set", G_CALLBACK (bg_color_callback), NULL); gtk_label_set_mnemonic_widget (GTK_LABEL (label), w); gtk_grid_attach (GTK_GRID (grid), w, 1, 1, 1, 1); label = gtk_label_new_with_mnemonic (_("Appearance")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), gpage, label); /* The keyboard page */ kpage = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18); gtk_container_set_border_width (GTK_CONTAINER (kpage), 12); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start (GTK_BOX (kpage), vbox, TRUE, TRUE, 0); controls_list = games_controls_list_new (settings); games_controls_list_add_controls (GAMES_CONTROLS_LIST (controls_list), "key00", _("Key to move NW"), g_settings_get_default_value (settings, "key00"), "key01", _("Key to move N"), g_settings_get_default_value (settings, "key01"), "key02", _("Key to move NE"), g_settings_get_default_value (settings, "key02"), "key03", _("Key to move W"), g_settings_get_default_value (settings, "key03"), "key04", _("Key to hold"), g_settings_get_default_value (settings, "key04"), "key05", _("Key to move E"), g_settings_get_default_value (settings, "key05"), "key06", _("Key to move SW"), g_settings_get_default_value (settings, "key06"), "key07", _("Key to move S"), g_settings_get_default_value (settings, "key07"), "key08", _("Key to move SE"), g_settings_get_default_value (settings, "key08"), NULL); gtk_box_pack_start (GTK_BOX (vbox), controls_list, TRUE, TRUE, 0); hbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_START); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); dbut = gtk_button_new_with_mnemonic (_("_Restore Defaults")); g_signal_connect (G_OBJECT (dbut), "clicked", G_CALLBACK (defkey_cb), NULL); gtk_box_pack_start (GTK_BOX (hbox), dbut, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("Keyboard")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), kpage, label); g_signal_connect (G_OBJECT (propbox), "delete_event", G_CALLBACK (delete_cb), NULL); g_signal_connect (G_OBJECT (propbox), "response", G_CALLBACK (apply_cb), NULL); gtk_widget_show_all (propbox); }
void gnibbles_preferences_cb (GtkWidget * widget, gpointer data) { GtkWidget *notebook; GtkWidget *label; GtkWidget *frame; GtkWidget *button; GtkWidget *levelspinner; GtkWidget *vbox, *vbox2; GtkObject *adjustment; GtkWidget *label2; GtkWidget *table, *table2; GtkWidget *omenu; GtkWidget *controls; gchar *buffer; gint i; gint running = 0; if (pref_dialog) { gtk_window_present (GTK_WINDOW (pref_dialog)); return; } if (!paused) { unpause = 1; pause_game_cb (NULL, 0); } if (game_running ()) running = 1; pref_dialog = gtk_dialog_new_with_buttons (_("Nibbles Preferences"), GTK_WINDOW (window), 0, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_set_has_separator (GTK_DIALOG (pref_dialog), FALSE); gtk_container_set_border_width (GTK_CONTAINER (pref_dialog), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (pref_dialog)->vbox), 2); notebook = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (notebook), 5); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (pref_dialog)->vbox), notebook); label = gtk_label_new (_("Game")); table = gtk_table_new (1, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 18); gtk_container_set_border_width (GTK_CONTAINER (table), 12); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label); frame = games_frame_new (_("Speed")); if (running) gtk_widget_set_sensitive (frame, FALSE); gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 0, 1, 0, GTK_FILL | GTK_EXPAND, 0, 0); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); button = gtk_radio_button_new_with_label (NULL, _("Nibbles newbie")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (properties->gamespeed == 4) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (game_speed_cb), (gpointer) 4); button = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), _("My second day")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (properties->gamespeed == 3) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (game_speed_cb), (gpointer) 3); button = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), _("Not too shabby")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (properties->gamespeed == 2) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (game_speed_cb), (gpointer) 2); button = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), _("Finger-twitching good")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (properties->gamespeed == 1) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (game_speed_cb), (gpointer) 1); /* Options */ frame = games_frame_new (_("Options")); gtk_table_attach_defaults (GTK_TABLE (table), frame, 1, 2, 0, 1); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); button = gtk_check_button_new_with_mnemonic (_("_Play levels in random order")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (running || ggz_network_mode) gtk_widget_set_sensitive (button, FALSE); if (properties->random) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (random_order_cb), NULL); button = gtk_check_button_new_with_mnemonic (_("_Enable fake bonuses")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (running) gtk_widget_set_sensitive (button, FALSE); if (properties->fakes) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (fake_bonus_cb), NULL); button = gtk_check_button_new_with_mnemonic (_("E_nable sounds")); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (properties->sound) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_signal_connect (GTK_OBJECT (button), "toggled", G_CALLBACK (sound_cb), NULL); table2 = gtk_table_new (3, 2, FALSE); gtk_box_pack_start (GTK_BOX (vbox), table2, FALSE, FALSE, 0); gtk_table_set_row_spacings (GTK_TABLE (table2), 6); gtk_table_set_col_spacings (GTK_TABLE (table2), 12); gtk_container_set_border_width (GTK_CONTAINER (table2), 0); label2 = gtk_label_new_with_mnemonic (_("_Starting level:")); start_level_label = label2; gtk_widget_set_name (label2, "StartLevelLabel"); gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5); if (properties->random) gtk_widget_set_sensitive (GTK_WIDGET (label2), FALSE); if (running) gtk_widget_set_sensitive (GTK_WIDGET (label2), FALSE); gtk_table_attach (GTK_TABLE (table2), label2, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); adjustment = gtk_adjustment_new ((gfloat) properties->startlevel, 1.0, MAXLEVEL, 1.0, 5.0, 0.0); levelspinner = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 0, 0); start_level_spin_button = levelspinner; gtk_widget_set_name (levelspinner, "StartLevelSpinButton"); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (levelspinner), FALSE); gtk_label_set_mnemonic_widget (GTK_LABEL (label2), levelspinner); if (properties->random) gtk_widget_set_sensitive (GTK_WIDGET (levelspinner), FALSE); if (running) gtk_widget_set_sensitive (GTK_WIDGET (levelspinner), FALSE); gtk_table_attach_defaults (GTK_TABLE (table2), levelspinner, 1, 2, 0, 1); g_signal_connect (GTK_OBJECT (adjustment), "value_changed", G_CALLBACK (start_level_cb), levelspinner); label2 = gtk_label_new_with_mnemonic (_("Number of _human players:")); gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5); gtk_table_attach (GTK_TABLE (table2), label2, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); if (running || ggz_network_mode) gtk_widget_set_sensitive (label2, FALSE); adjustment = gtk_adjustment_new ((gfloat) properties->human, 0.0, NUMWORMS, 1.0, 1.0, 0.0); num_human = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 0, 0); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (num_human), FALSE); gtk_label_set_mnemonic_widget (GTK_LABEL (label2), num_human); gtk_table_attach_defaults (GTK_TABLE (table2), num_human, 1, 2, 1, 2); if (running || ggz_network_mode) gtk_widget_set_sensitive (num_human, FALSE); g_signal_connect (GTK_OBJECT (adjustment), "value_changed", G_CALLBACK (num_worms_cb), num_human); label2 = gtk_label_new_with_mnemonic (_("Number of _AI players:")); gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5); gtk_table_attach (GTK_TABLE (table2), label2, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); if (running || ggz_network_mode) gtk_widget_set_sensitive (label2, FALSE); adjustment = gtk_adjustment_new ((gfloat) properties->ai, 0.0, NUMWORMS, 1.0, 1.0, 0.0); num_ai = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 0, 0); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (num_ai), FALSE); gtk_label_set_mnemonic_widget (GTK_LABEL (label2), num_ai); gtk_table_attach_defaults (GTK_TABLE (table2), num_ai, 1, 2, 2, 3); if (running || ggz_network_mode) gtk_widget_set_sensitive (num_ai, FALSE); g_signal_connect (GTK_OBJECT (adjustment), "value_changed", G_CALLBACK (num_worms_cb), num_ai); for (i = 0; i < NUMWORMS; i++) { char up_key[64]; char down_key[64]; char left_key[64]; char right_key[64]; buffer = g_strdup_printf ("%s %d", _("Worm"), i + 1); label = gtk_label_new (buffer); g_free (buffer); vbox = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); frame = games_frame_new (_("Keyboard Controls")); controls = games_controls_list_new (KEY_PREFERENCES_GROUP); g_snprintf (left_key, sizeof (left_key), KEY_WORM_LEFT, i); g_snprintf (right_key, sizeof (right_key), KEY_WORM_RIGHT, i); g_snprintf (up_key, sizeof (up_key), KEY_WORM_UP, i); g_snprintf (down_key, sizeof (down_key), KEY_WORM_DOWN, i); games_controls_list_add_controls (GAMES_CONTROLS_LIST (controls), left_key, _("Move left"), GDK_Left, right_key, _("Move right"), GDK_Right, up_key, _("Move up"), GDK_Up, down_key, _("Move down"), GDK_Down, NULL); gtk_container_add (GTK_CONTAINER (frame), controls); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); frame = games_frame_new (_("Options")); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); vbox2 = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox2); button = gtk_check_button_new_with_mnemonic (_("_Use relative movement")); gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0); table2 = gtk_table_new (1, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table2), 12); gtk_box_pack_start (GTK_BOX (vbox2), table2, FALSE, FALSE, 0); label2 = gtk_label_new_with_mnemonic (_("_Worm color:")); gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5); gtk_table_attach (GTK_TABLE (table2), label2, 0, 1, 0, 1, 0, 0, 0, 0); omenu = gtk_combo_box_new_text (); gtk_label_set_mnemonic_widget (GTK_LABEL (label2), omenu); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Red")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Green")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Blue")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Yellow")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Cyan")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Purple")); gtk_combo_box_append_text (GTK_COMBO_BOX (omenu), _("Gray")); g_signal_connect (GTK_OBJECT (omenu), "changed", G_CALLBACK (set_worm_color_cb), GINT_TO_POINTER (i)); gtk_combo_box_set_active (GTK_COMBO_BOX (omenu), properties->wormprops[i]->color - WORMRED); gtk_table_attach_defaults (GTK_TABLE (table2), omenu, 1, 2, 0, 1); set_worm_controls_sensitivity (i, properties->wormprops[i]->relmove); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), properties->wormprops[i]->relmove); g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (worm_relative_movement_cb), GINT_TO_POINTER (i)); } g_signal_connect (G_OBJECT (pref_dialog), "response", G_CALLBACK (apply_cb), NULL); g_signal_connect (G_OBJECT (pref_dialog), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (pref_dialog), "close", G_CALLBACK (destroy_cb), NULL); gtk_widget_show_all (pref_dialog); }