X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fprtview%2FLoadPortalFileDialog.cpp;h=f83b34ff97a31040b16f1ef185e034ffef7ec764;hb=3e2279821b1f73b7af46b0925090916c4e2f84f6;hp=9a5348f1dfdcb0f51a65dca70a32dc94188e45e2;hpb=0110e3a8f3ab54c17a1785e17c7246adf8e13a46;p=xonotic%2Fnetradiant.git diff --git a/contrib/prtview/LoadPortalFileDialog.cpp b/contrib/prtview/LoadPortalFileDialog.cpp index 9a5348f1..f83b34ff 100644 --- a/contrib/prtview/LoadPortalFileDialog.cpp +++ b/contrib/prtview/LoadPortalFileDialog.cpp @@ -33,138 +33,137 @@ #include "prtview.h" #include "portals.h" -static void dialog_button_callback( GtkWidget *widget, gpointer data ){ - GtkWidget *parent; - int *loop, *ret; +static void dialog_button_callback(ui::Widget widget, gpointer data) +{ + int *loop, *ret; - parent = gtk_widget_get_toplevel( widget ); - loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); - ret = (int*)g_object_get_data( G_OBJECT( parent ), "ret" ); + auto parent = widget.window(); + loop = (int *) g_object_get_data(G_OBJECT(parent), "loop"); + ret = (int *) g_object_get_data(G_OBJECT(parent), "ret"); - *loop = 0; - *ret = gpointer_to_int( data ); + *loop = 0; + *ret = gpointer_to_int(data); } -static gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ - int *loop; - - gtk_widget_hide( widget ); - loop = (int*)g_object_get_data( G_OBJECT( widget ), "loop" ); - *loop = 0; - - return TRUE; +static gint dialog_delete_callback(ui::Widget widget, GdkEvent *event, gpointer data) +{ + widget.hide(); + int *loop = (int *) g_object_get_data(G_OBJECT(widget), "loop"); + *loop = 0; + return TRUE; } -static void change_clicked( GtkWidget *widget, gpointer data ){ - GtkWidget* file_sel; - char* filename = NULL; +static void change_clicked(ui::Widget widget, gpointer data) +{ + char *filename = NULL; - file_sel = gtk_file_chooser_dialog_new ( "Locate portal (.prt) file", nullptr, GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - nullptr); + auto file_sel = ui::Widget::from( + gtk_file_chooser_dialog_new("Locate portal (.prt) file", nullptr, GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + nullptr)); - gtk_file_chooser_set_filename( GTK_FILE_CHOOSER(file_sel), portals.fn ); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_sel), portals.fn); - if (gtk_dialog_run (GTK_DIALOG (file_sel)) == GTK_RESPONSE_ACCEPT) - { - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_sel)); - } - gtk_widget_destroy (file_sel); + if (gtk_dialog_run(GTK_DIALOG (file_sel)) == GTK_RESPONSE_ACCEPT) { + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (file_sel)); + } + ui::Widget(file_sel).destroy(); - if ( filename != NULL ) { - strcpy( portals.fn, filename ); - gtk_entry_set_text( GTK_ENTRY( data ), filename ); - g_free( filename ); - } + if (filename != NULL) { + strcpy(portals.fn, filename); + gtk_entry_set_text(GTK_ENTRY(data), filename); + g_free(filename); + } } -int DoLoadPortalFileDialog(){ - GtkWidget *hbox, *entry, *check2d, *check3d; - int loop = 1, ret = IDCANCEL; - - auto dlg = ui::Window( ui::window_type::TOP ); - gtk_window_set_title( GTK_WINDOW( dlg ), "Load .prt" ); - dlg.connect( "delete_event", - G_CALLBACK( dialog_delete_callback ), NULL ); - dlg.connect( "destroy", - G_CALLBACK( gtk_widget_destroy ), NULL ); - g_object_set_data( G_OBJECT( dlg ), "loop", &loop ); - g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); - - auto vbox = ui::VBox( FALSE, 5 ); - vbox.show(); - dlg.add(vbox); - gtk_container_set_border_width( GTK_CONTAINER( vbox ), 5 ); - - entry = ui::Entry(ui::New); - gtk_widget_show( entry ); - gtk_editable_set_editable( GTK_EDITABLE( entry ), FALSE ); - gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 ); - - hbox = ui::HBox( FALSE, 5 ); - gtk_widget_show( hbox ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - - check3d = ui::CheckButton( "Show 3D" ); - gtk_widget_show( check3d ); - gtk_box_pack_start( GTK_BOX( hbox ), check3d, FALSE, FALSE, 0 ); - - check2d = ui::CheckButton( "Show 2D" ); - gtk_widget_show( check2d ); - gtk_box_pack_start( GTK_BOX( hbox ), check2d, FALSE, FALSE, 0 ); - - auto button = ui::Button( "Change" ); - gtk_widget_show( button ); - gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); - button.connect( "clicked", G_CALLBACK( change_clicked ), entry ); - gtk_widget_set_size_request( button, 60, -1 ); - - hbox = ui::HBox( FALSE, 5 ); - gtk_widget_show( hbox ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - - button = ui::Button( "Cancel" ); - gtk_widget_show( button ); - gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); - button.connect( "clicked", - G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( IDCANCEL ) ); - gtk_widget_set_size_request( button, 60, -1 ); - - button = ui::Button( "OK" ); - gtk_widget_show( button ); - gtk_box_pack_end( GTK_BOX( hbox ), button, FALSE, FALSE, 0 ); - button.connect( "clicked", - G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); - gtk_widget_set_size_request( button, 60, -1 ); - - strcpy( portals.fn, GlobalRadiant().getMapName() ); - char* fn = strrchr( portals.fn, '.' ); - if ( fn != NULL ) { - strcpy( fn, ".prt" ); - } - - StringOutputStream value( 256 ); - value << portals.fn; - gtk_entry_set_text( GTK_ENTRY( entry ), value.c_str() ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d ); - - gtk_grab_add( dlg ); - gtk_widget_show( dlg ); - - while ( loop ) - gtk_main_iteration(); - - if ( ret == IDOK ) { - portals.Purge(); - - portals.show_3d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check3d ) ) ? true : false; - portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) ) ? true : false; - } - - gtk_grab_remove( dlg ); - gtk_widget_destroy( dlg ); - - return ret; +int DoLoadPortalFileDialog() +{ + int loop = 1, ret = IDCANCEL; + + auto dlg = ui::Window(ui::window_type::TOP); + gtk_window_set_title(dlg, "Load .prt"); + dlg.connect("delete_event", + G_CALLBACK(dialog_delete_callback), NULL); + dlg.connect("destroy", + G_CALLBACK(gtk_widget_destroy), NULL); + g_object_set_data(G_OBJECT(dlg), "loop", &loop); + g_object_set_data(G_OBJECT(dlg), "ret", &ret); + + auto vbox = ui::VBox(FALSE, 5); + vbox.show(); + dlg.add(vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); + + auto entry = ui::Entry(ui::New); + entry.show(); + gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE); + vbox.pack_start(entry, FALSE, FALSE, 0); + + auto hbox = ui::HBox(FALSE, 5); + hbox.show(); + vbox.pack_start(hbox, FALSE, FALSE, 0); + + auto check3d = ui::CheckButton("Show 3D"); + check3d.show(); + hbox.pack_start(check3d, FALSE, FALSE, 0); + + auto check2d = ui::CheckButton("Show 2D"); + check2d.show(); + hbox.pack_start(check2d, FALSE, FALSE, 0); + + auto button = ui::Button("Change"); + button.show(); + hbox.pack_end(button, FALSE, FALSE, 0); + button.connect("clicked", G_CALLBACK(change_clicked), entry); + button.dimensions(60, -1); + + hbox = ui::HBox(FALSE, 5); + hbox.show(); + vbox.pack_start(hbox, FALSE, FALSE, 0); + + button = ui::Button("Cancel"); + button.show(); + hbox.pack_end(button, FALSE, FALSE, 0); + button.connect("clicked", + G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDCANCEL)); + button.dimensions(60, -1); + + button = ui::Button("OK"); + button.show(); + hbox.pack_end(button, FALSE, FALSE, 0); + button.connect("clicked", + G_CALLBACK(dialog_button_callback), GINT_TO_POINTER(IDOK)); + button.dimensions(60, -1); + + strcpy(portals.fn, GlobalRadiant().getMapName()); + char *fn = strrchr(portals.fn, '.'); + if (fn != NULL) { + strcpy(fn, ".prt"); + } + + StringOutputStream value(256); + value << portals.fn; + gtk_entry_set_text(GTK_ENTRY(entry), value.c_str()); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check2d), portals.show_2d); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check3d), portals.show_3d); + + gtk_grab_add(dlg); + dlg.show(); + + while (loop) { + gtk_main_iteration(); + } + + if (ret == IDOK) { + portals.Purge(); + + portals.show_3d = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check3d)) ? true : false; + portals.show_2d = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2d)) ? true : false; + } + + gtk_grab_remove(dlg); + dlg.destroy(); + + return ret; }