-GtkWindow* PatchInspector::BuildDialog()
-{
- GtkWindow* window = create_floating_window("Patch Properties", m_parent);
-
- m_position_tracker.connect(window);
-
- global_accel_connect_window(window);
-
- window_connect_focus_in_clear_focus_widget(window);
-
-
- {
- GtkVBox* vbox = GTK_VBOX(gtk_vbox_new(FALSE, 5));
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
- gtk_widget_show(GTK_WIDGET(vbox));
- gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(vbox));
- {
- GtkHBox* hbox = GTK_HBOX(gtk_hbox_new(FALSE, 5));
- gtk_widget_show(GTK_WIDGET(hbox));
- gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), TRUE, TRUE, 0);
- {
- GtkVBox* vbox2 = GTK_VBOX(gtk_vbox_new(FALSE, 0));
- gtk_container_set_border_width(GTK_CONTAINER(vbox2), 0);
- gtk_widget_show(GTK_WIDGET(vbox2));
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox2), TRUE, TRUE, 0);
- {
- GtkFrame* frame = GTK_FRAME(gtk_frame_new("Details"));
- gtk_widget_show(GTK_WIDGET(frame));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(frame), TRUE, TRUE, 0);
- {
- GtkVBox* vbox3 = GTK_VBOX(gtk_vbox_new(FALSE, 5));
- gtk_container_set_border_width(GTK_CONTAINER(vbox3), 5);
- gtk_widget_show(GTK_WIDGET(vbox3));
- gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(vbox3));
- {
- GtkTable* table = GTK_TABLE(gtk_table_new(2, 2, FALSE));
- gtk_widget_show(GTK_WIDGET(table));
- gtk_box_pack_start(GTK_BOX(vbox3), GTK_WIDGET(table), TRUE, TRUE, 0);
- gtk_table_set_row_spacings(table, 5);
- gtk_table_set_col_spacings(table, 5);
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Row:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Column:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 1, 2, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkComboBox* combo = GTK_COMBO_BOX(gtk_combo_box_new_text());
- g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(OnSelchangeComboColRow), this);
- AddDialogData(*combo, m_nRow);
-
- gtk_widget_show(GTK_WIDGET(combo));
- gtk_table_attach(table, GTK_WIDGET(combo), 0, 1, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(combo), 60, -1);
- m_pRowCombo = combo;
- }
-
- {
- GtkComboBox* combo = GTK_COMBO_BOX(gtk_combo_box_new_text());
- g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(OnSelchangeComboColRow), this);
- AddDialogData(*combo, m_nCol);
-
- gtk_widget_show(GTK_WIDGET(combo));
- gtk_table_attach(table, GTK_WIDGET(combo), 1, 2, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(combo), 60, -1);
- m_pColCombo = combo;
- }
- }
- GtkTable* table = GTK_TABLE(gtk_table_new(5, 2, FALSE));
- gtk_widget_show(GTK_WIDGET(table));
- gtk_box_pack_start(GTK_BOX(vbox3), GTK_WIDGET(table), TRUE, TRUE, 0);
- gtk_table_set_row_spacings(table, 5);
- gtk_table_set_col_spacings(table, 5);
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("X:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Y:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Z:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("S:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 3, 4,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("T:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 4, 5,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- AddDialogData(*entry, m_fX);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- AddDialogData(*entry, m_fY);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 2, 3,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- AddDialogData(*entry, m_fZ);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 3, 4,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- AddDialogData(*entry, m_fS);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 4, 5,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- AddDialogData(*entry, m_fT);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- }
- }
- if(g_pGameDescription->mGameType == "doom3")
- {
- GtkFrame* frame = GTK_FRAME(gtk_frame_new("Tesselation"));
- gtk_widget_show(GTK_WIDGET(frame));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(frame), TRUE, TRUE, 0);
- {
- GtkVBox* vbox3 = GTK_VBOX(gtk_vbox_new(FALSE, 5));
- gtk_container_set_border_width(GTK_CONTAINER(vbox3), 5);
- gtk_widget_show(GTK_WIDGET(vbox3));
- gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(vbox3));
- {
- GtkTable* table = GTK_TABLE(gtk_table_new(3, 2, FALSE));
- gtk_widget_show(GTK_WIDGET(table));
- gtk_box_pack_start(GTK_BOX(vbox3), GTK_WIDGET(table), TRUE, TRUE, 0);
- gtk_table_set_row_spacings(table, 5);
- gtk_table_set_col_spacings(table, 5);
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Fixed"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkCheckButton* check = GTK_CHECK_BUTTON(gtk_check_button_new());
- gtk_widget_show(GTK_WIDGET(check));
- gtk_table_attach(table, GTK_WIDGET(check), 1, 2, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- m_subdivisions.m_enabled = check;
- guint handler_id = g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(&Subdivisions::applyGtk), &m_subdivisions);
- g_object_set_data(G_OBJECT(check), "handler", gint_to_pointer(handler_id));
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Horizontal"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 1, 2,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- m_subdivisions.m_horizontal = entry;
- m_horizontalSubdivisionsEntry.connect(entry);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Vertical"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 1, 2, 2, 3,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- m_subdivisions.m_vertical = entry;
- m_verticalSubdivisionsEntry.connect(entry);
- }
- }
- }
- }
- }
- {
- GtkFrame* frame = GTK_FRAME(gtk_frame_new("Texturing"));
- gtk_widget_show(GTK_WIDGET(frame));
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(frame), TRUE, TRUE, 0);
- {
- GtkVBox* vbox2 = GTK_VBOX(gtk_vbox_new(FALSE, 5));
- gtk_widget_show(GTK_WIDGET(vbox2));
- gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(vbox2));
- gtk_container_set_border_width(GTK_CONTAINER(vbox2), 5);
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Name:"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(label), TRUE, TRUE, 0);
- gtk_label_set_justify(label, GTK_JUSTIFY_LEFT);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- // gtk_entry_set_editable (GTK_ENTRY (entry), false);
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(entry), TRUE, TRUE, 0);
- AddDialogData(*entry, m_strName);
-
- g_signal_connect(G_OBJECT(entry), "key_press_event", G_CALLBACK(OnDialogKey), 0);
- }
- {
- GtkTable* table = GTK_TABLE(gtk_table_new(5, 3, FALSE));
- gtk_widget_show(GTK_WIDGET(table));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(table), TRUE, TRUE, 0);
- gtk_table_set_row_spacings(table, 5);
- gtk_table_set_col_spacings(table, 5);
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Horizontal Shift Step"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 2, 3, 0, 1,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Vertical Shift Step"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 2, 3, 1, 2,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Horizontal Stretch Step"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 2, 3, 2, 3,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Vertical Stretch Step"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 2, 3, 3, 4,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkLabel* label = GTK_LABEL(gtk_label_new("Rotate Step"));
- gtk_widget_show(GTK_WIDGET(label));
- gtk_table_attach(table, GTK_WIDGET(label), 2, 3, 4, 5,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 0, 1, 0, 1,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(entry), 50, -2);
- g_object_set_data(G_OBJECT(window), "hshift_entry", entry);
- // we fill in this data, if no patch is selected the widgets are unmodified when the inspector is raised
- // so we need to have at least one initialisation somewhere
- entry_set_float(entry, g_pi_globals.shift[0]);
-
- GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -8192, 8192, 1, 1, 0));
- g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(OnSpinChanged), entry);
- g_object_set_data(G_OBJECT(window), "hshift_adj", adj);
-
- GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
- gtk_widget_show(GTK_WIDGET(spin));
- gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 0, 1,
- (GtkAttachOptions)(0),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(spin), 10, -2);
- GTK_WIDGET_UNSET_FLAGS(spin, GTK_CAN_FOCUS);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 0, 1, 1, 2,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(entry), 50, -2);
- entry_set_float(entry, g_pi_globals.shift[1]);
-
- GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -8192, 8192, 1, 1, 0));
- g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(OnSpinChanged), entry);
- g_object_set_data(G_OBJECT(window), "vshift_adj", adj);
-
- GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
- gtk_widget_show(GTK_WIDGET(spin));
- gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 1, 2,
- (GtkAttachOptions)(0),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(spin), 10, -2);
- GTK_WIDGET_UNSET_FLAGS(spin, GTK_CAN_FOCUS);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 0, 1, 2, 3,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(entry), 50, -2);
- entry_set_float(entry, g_pi_globals.scale[0]);
-
- GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -1000, 1000, 1, 1, 0));
- g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(OnSpinChanged), entry);
- g_object_set_data(G_OBJECT(window), "hscale_adj", adj);
-
- GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
- gtk_widget_show(GTK_WIDGET(spin));
- gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 2, 3,
- (GtkAttachOptions)(0),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(spin), 10, -2);
- GTK_WIDGET_UNSET_FLAGS(spin, GTK_CAN_FOCUS);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 0, 1, 3, 4,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(entry), 50, -2);
- entry_set_float(entry, g_pi_globals.scale[1]);
-
- GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -1000, 1000, 1, 1, 0));
- g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(OnSpinChanged), entry);
- g_object_set_data(G_OBJECT(window), "vscale_adj", adj);
-
- GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
- gtk_widget_show(GTK_WIDGET(spin));
- gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 3, 4,
- (GtkAttachOptions)(0),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(spin), 10, -2);
- GTK_WIDGET_UNSET_FLAGS(spin, GTK_CAN_FOCUS);
- }
- {
- GtkEntry* entry = GTK_ENTRY(gtk_entry_new());
- gtk_widget_show(GTK_WIDGET(entry));
- gtk_table_attach(table, GTK_WIDGET(entry), 0, 1, 4, 5,
- (GtkAttachOptions)(GTK_FILL),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(entry), 50, -2);
- entry_set_float(entry, g_pi_globals.rotate);
-
- GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -1000, 1000, 1, 1, 0)); // NOTE: Arnout - this really should be 360 but can't change it anymore as it could break existing maps
- g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(OnSpinChanged), entry);
- g_object_set_data(G_OBJECT(window), "rotate_adj", adj);
-
- GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
- gtk_widget_show(GTK_WIDGET(spin));
- gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 4, 5,
- (GtkAttachOptions)(0),
- (GtkAttachOptions)(0), 0, 0);
- gtk_widget_set_usize(GTK_WIDGET(spin), 10, -2);
- GTK_WIDGET_UNSET_FLAGS(spin, GTK_CAN_FOCUS);
- }
- }
- GtkHBox* hbox2 = GTK_HBOX(gtk_hbox_new(TRUE, 5));
- gtk_widget_show(GTK_WIDGET(hbox2));
- gtk_box_pack_start(GTK_BOX(vbox2), GTK_WIDGET(hbox2), TRUE, FALSE, 0);
- {
- GtkButton* button = GTK_BUTTON(gtk_button_new_with_label("CAP"));
- gtk_widget_show(GTK_WIDGET(button));
- gtk_box_pack_end(GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, FALSE, 0);
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(OnBtnPatchdetails), 0);
- gtk_widget_set_usize(GTK_WIDGET(button), 60, -1);
- }
- {
- GtkButton* button = GTK_BUTTON(gtk_button_new_with_label("Set..."));
- gtk_widget_show(GTK_WIDGET(button));
- gtk_box_pack_end(GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, FALSE, 0);
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(OnBtnPatchreset), 0);
- gtk_widget_set_usize(GTK_WIDGET(button), 60, -1);
- }
- {
- GtkButton* button = GTK_BUTTON(gtk_button_new_with_label("Natural"));
- gtk_widget_show(GTK_WIDGET(button));
- gtk_box_pack_end(GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, FALSE, 0);
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(OnBtnPatchnatural), 0);
- gtk_widget_set_usize(GTK_WIDGET(button), 60, -1);
- }
- {
- GtkButton* button = GTK_BUTTON(gtk_button_new_with_label("Fit"));
- gtk_widget_show(GTK_WIDGET(button));
- gtk_box_pack_end(GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, FALSE, 0);
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(OnBtnPatchfit), 0);
- gtk_widget_set_usize(GTK_WIDGET(button), 60, -1);
- }
- }
- }
- }
- }
-
- return window;
+ui::Window PatchInspector::BuildDialog(){
+ ui::Window window = ui::Window(create_floating_window( "Patch Properties", m_parent ));
+
+ m_position_tracker.connect( window );
+
+ global_accel_connect_window( window );
+
+ window_connect_focus_in_clear_focus_widget( window );
+
+
+ {
+ auto vbox = ui::VBox( FALSE, 5 );
+ gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 );
+ vbox.show();
+ window.add(vbox);
+ {
+ auto hbox = ui::HBox( FALSE, 5 );
+ hbox.show();
+ vbox.pack_start( hbox, TRUE, TRUE, 0 );
+ {
+ auto vbox2 = ui::VBox( FALSE, 0 );
+ gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 0 );
+ vbox2.show();
+ hbox.pack_start( vbox2, TRUE, TRUE, 0 );
+ {
+ auto frame = ui::Frame( "Details" );
+ frame.show();
+ vbox2.pack_start( frame, TRUE, TRUE, 0 );
+ {
+ auto vbox3 = ui::VBox( FALSE, 5 );
+ gtk_container_set_border_width( GTK_CONTAINER( vbox3 ), 5 );
+ vbox3.show();
+ frame.add(vbox3);
+ {
+ auto table = ui::Table( 2, 2, FALSE );
+ table.show();
+ vbox3.pack_start( table, TRUE, TRUE, 0 );
+ gtk_table_set_row_spacings( table, 5 );
+ gtk_table_set_col_spacings( table, 5 );
+ {
+ auto label = ui::Label( "Row:" );
+ label.show();
+ table.attach(label, {0, 1, 0, 1}, {(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0)}, {0, 0});
+ }
+ {
+ auto label = ui::Label( "Column:" );
+ label.show();
+ table.attach(label, {1, 2, 0, 1}, {(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0)}, {0, 0});
+ }
+ {
+ auto combo = ui::ComboBoxText(ui::New);
+ combo.connect( "changed", G_CALLBACK( OnSelchangeComboColRow ), this );
+ AddDialogData( *GTK_COMBO_BOX(combo), m_nRow );
+
+ combo.show();
+ table.attach(combo, {0, 1, 1, 2}, {(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0)}, {0, 0});
+ combo.dimensions(60, -1);
+ m_pRowCombo = combo;
+ }
+
+ {
+ auto combo = ui::ComboBoxText(ui::New);
+ combo.connect( "changed", G_CALLBACK( OnSelchangeComboColRow ), this );
+ AddDialogData( *GTK_COMBO_BOX(combo), m_nCol );
+
+ combo.show();
+ table.attach(combo, {1, 2, 1, 2}, {(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0)}, {0, 0});
+ combo.dimensions(60, -1);
+ m_pColCombo = combo;
+ }
+ }
+ auto table = ui::Table( 5, 2, FALSE );
+ table.show();
+ vbox3.pack_start( table, TRUE, TRUE, 0 );
+ gtk_table_set_row_spacings( table, 5 );
+ gtk_table_set_col_spacings( table, 5 );
+ {
+ auto label = ui::Label( "X:" );
+ label.show();
+ table.attach(label, {0, 1, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto label = ui::Label( "Y:" );
+ label.show();
+ table.attach(label, {0, 1, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto label = ui::Label( "Z:" );
+ label.show();
+ table.attach(label, {0, 1, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto label = ui::Label( "S:" );
+ label.show();
+ table.attach(label, {0, 1, 3, 4}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto label = ui::Label( "T:" );
+ label.show();
+ table.attach(label, {0, 1, 4, 5}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+ AddDialogData( *GTK_ENTRY(entry), m_fX );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+ AddDialogData( *GTK_ENTRY(entry), m_fY );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
+ AddDialogData( *GTK_ENTRY(entry), m_fZ );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 3, 4}, {GTK_EXPAND | GTK_FILL, 0});
+ AddDialogData( *GTK_ENTRY(entry), m_fS );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 4, 5}, {GTK_EXPAND | GTK_FILL, 0});
+ AddDialogData( *GTK_ENTRY(entry), m_fT );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ }
+ }
+ if ( g_pGameDescription->mGameType == "doom3" ) {
+ auto frame = ui::Frame( "Tesselation" );
+ frame.show();
+ vbox2.pack_start( frame, TRUE, TRUE, 0 );
+ {
+ auto vbox3 = ui::VBox( FALSE, 5 );
+ gtk_container_set_border_width( GTK_CONTAINER( vbox3 ), 5 );
+ vbox3.show();
+ frame.add(vbox3);
+ {
+ auto table = ui::Table( 3, 2, FALSE );
+ table.show();
+ vbox3.pack_start( table, TRUE, TRUE, 0 );
+ gtk_table_set_row_spacings( table, 5 );
+ gtk_table_set_col_spacings( table, 5 );
+ {
+ auto label = ui::Label( "Fixed" );
+ label.show();
+ table.attach(label, {0, 1, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto check = ui::CheckButton(GTK_CHECK_BUTTON( gtk_check_button_new() ));
+ check.show();
+ table.attach(check, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+ m_subdivisions.m_enabled = check;
+ guint handler_id = check.connect( "toggled", G_CALLBACK( &Subdivisions::applyGtk ), &m_subdivisions );
+ g_object_set_data( G_OBJECT( check ), "handler", gint_to_pointer( handler_id ) );
+ }
+ {
+ auto label = ui::Label( "Horizontal" );
+ label.show();
+ table.attach(label, {0, 1, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+ m_subdivisions.m_horizontal = entry;
+ m_horizontalSubdivisionsEntry.connect( entry );
+ }
+ {
+ auto label = ui::Label( "Vertical" );
+ label.show();
+ table.attach(label, {0, 1, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
+ m_subdivisions.m_vertical = entry;
+ m_verticalSubdivisionsEntry.connect( entry );
+ }
+ }
+ }
+ }
+ }
+ {
+ auto frame = ui::Frame( "Texturing" );
+ frame.show();
+ hbox.pack_start( frame, TRUE, TRUE, 0 );
+ {
+ auto vbox2 = ui::VBox( FALSE, 5 );
+ vbox2.show();
+ frame.add(vbox2);
+ gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 5 );
+ {
+ auto label = ui::Label( "Name:" );
+ label.show();
+ vbox2.pack_start( label, TRUE, TRUE, 0 );
+ gtk_label_set_justify( label, GTK_JUSTIFY_LEFT );
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ // gtk_editable_set_editable (GTK_ENTRY (entry), false);
+ entry.show();
+ vbox2.pack_start( entry, TRUE, TRUE, 0 );
+ AddDialogData( *GTK_ENTRY(entry), m_strName );
+
+ entry.connect( "key_press_event", G_CALLBACK( OnDialogKey ), 0 );
+ }
+ {
+ auto table = ui::Table( 5, 4, FALSE );
+ table.show();
+ vbox2.pack_start( table, TRUE, TRUE, 0 );
+ gtk_table_set_row_spacings( table, 5 );
+ gtk_table_set_col_spacings( table, 5 );
+ {
+ auto label = ui::Label( "Horizontal Shift Step" );
+ label.show();
+ table.attach(label, {2, 4, 0, 1}, {GTK_FILL | GTK_EXPAND, 0});
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto label = ui::Label( "Vertical Shift Step" );
+ label.show();
+ table.attach(label, {2, 4, 1, 2}, {GTK_FILL | GTK_EXPAND, 0});
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto label = ui::Label( "Horizontal Stretch Step" );
+ label.show();
+ table.attach(label, {2, 3, 2, 3}, {GTK_FILL | GTK_EXPAND, 0});
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto button = ui::Button( "Flip" );
+ button.show();
+ table.attach(button, {3, 4, 2, 3}, {GTK_FILL, 0});
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchFlipX ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto label = ui::Label( "Vertical Stretch Step" );
+ label.show();
+ table.attach(label, {2, 3, 3, 4}, {GTK_FILL | GTK_EXPAND, 0});
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto button = ui::Button( "Flip" );
+ button.show();
+ table.attach(button, {3, 4, 3, 4}, {GTK_FILL, 0});
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchFlipY ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto label = ui::Label( "Rotate Step" );
+ label.show();
+ table.attach(label, {2, 4, 4, 5}, {GTK_FILL | GTK_EXPAND, 0});
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {0, 1, 0, 1}, {GTK_FILL, 0});
+ entry.dimensions(50, -1);
+ g_object_set_data( G_OBJECT( window ), "hshift_entry", (void *) entry );
+ // we fill in this data, if no patch is selected the widgets are unmodified when the inspector is raised
+ // so we need to have at least one initialisation somewhere
+ entry_set_float( entry, g_pi_globals.shift[0] );
+
+ auto adj = ui::Adjustment( 0, -8192, 8192, 1, 1, 0 );
+ adj.connect( "value_changed", G_CALLBACK( OnSpinChanged ), (gpointer) entry );
+ g_object_set_data( G_OBJECT( window ), "hshift_adj", (gpointer) adj );
+
+ auto spin = ui::SpinButton( adj, 1, 0 );
+ spin.show();
+ table.attach(spin, {1, 2, 0, 1}, {0, 0});
+ spin.dimensions(10, -1);
+ gtk_widget_set_can_focus( spin, false );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {0, 1, 1, 2}, {GTK_FILL, 0});
+ entry.dimensions(50, -1);
+ entry_set_float( entry, g_pi_globals.shift[1] );
+
+ auto adj = ui::Adjustment( 0, -8192, 8192, 1, 1, 0 );
+ adj.connect( "value_changed", G_CALLBACK( OnSpinChanged ), entry );
+ g_object_set_data( G_OBJECT( window ), "vshift_adj", (gpointer) adj );
+
+ auto spin = ui::SpinButton( adj, 1, 0 );
+ spin.show();
+ table.attach(spin, {1, 2, 1, 2}, {0, 0});
+ spin.dimensions(10, -1);
+ gtk_widget_set_can_focus( spin, false );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {0, 1, 2, 3}, {GTK_FILL, 0});
+ entry.dimensions(50, -1);
+ entry_set_float( entry, g_pi_globals.scale[0] );
+
+ auto adj = ui::Adjustment( 0, -1000, 1000, 1, 1, 0 );
+ adj.connect( "value_changed", G_CALLBACK( OnSpinChanged ), entry );
+ g_object_set_data( G_OBJECT( window ), "hscale_adj", (gpointer) adj );
+
+ auto spin = ui::SpinButton( adj, 1, 0 );
+ spin.show();
+ table.attach(spin, {1, 2, 2, 3}, {0, 0});
+ spin.dimensions(10, -1);
+ gtk_widget_set_can_focus( spin, false );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {0, 1, 3, 4}, {GTK_FILL, 0});
+ entry.dimensions(50, -1);
+ entry_set_float( entry, g_pi_globals.scale[1] );
+
+ auto adj = ui::Adjustment( 0, -1000, 1000, 1, 1, 0 );
+ adj.connect( "value_changed", G_CALLBACK( OnSpinChanged ), entry );
+ g_object_set_data( G_OBJECT( window ), "vscale_adj", (gpointer) adj );
+
+ auto spin = ui::SpinButton( adj, 1, 0 );
+ spin.show();
+ table.attach(spin, {1, 2, 3, 4}, {0, 0});
+ spin.dimensions(10, -1);
+ gtk_widget_set_can_focus( spin, false );
+ }
+ {
+ auto entry = ui::Entry(ui::New);
+ entry.show();
+ table.attach(entry, {0, 1, 4, 5}, {GTK_FILL, 0});
+ entry.dimensions(50, -1);
+ entry_set_float( entry, g_pi_globals.rotate );
+
+ auto adj = ui::Adjustment( 0, -1000, 1000, 1, 1, 0 ); // NOTE: Arnout - this really should be 360 but can't change it anymore as it could break existing maps
+ adj.connect( "value_changed", G_CALLBACK( OnSpinChanged ), entry );
+ g_object_set_data( G_OBJECT( window ), "rotate_adj", (gpointer) adj );
+
+ auto spin = ui::SpinButton( adj, 1, 0 );
+ spin.show();
+ table.attach(spin, {1, 2, 4, 5}, {0, 0});
+ spin.dimensions(10, -1);
+ gtk_widget_set_can_focus( spin, false );
+ }
+ }
+ auto hbox2 = ui::HBox( TRUE, 5 );
+ hbox2.show();
+ vbox2.pack_start( hbox2, TRUE, FALSE, 0 );
+ {
+ auto button = ui::Button( "Auto Cap" );
+ button.show();
+ hbox2.pack_end(button, TRUE, FALSE, 0);
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchAutoCap ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto button = ui::Button( "CAP" );
+ button.show();
+ hbox2.pack_end(button, TRUE, FALSE, 0);
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchdetails ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto button = ui::Button( "Set..." );
+ button.show();
+ hbox2.pack_end(button, TRUE, FALSE, 0);
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchreset ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto button = ui::Button( "Natural" );
+ button.show();
+ hbox2.pack_end(button, TRUE, FALSE, 0);
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchnatural ), 0 );
+ button.dimensions(60, -1);
+ }
+ {
+ auto button = ui::Button( "Fit" );
+ button.show();
+ hbox2.pack_end(button, TRUE, FALSE, 0);
+ button.connect( "clicked", G_CALLBACK( OnBtnPatchfit ), 0 );
+ button.dimensions(60, -1);
+ }
+ }
+ }
+ }
+ }
+
+ return window;