X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fprtview%2FLoadPortalFileDialog.cpp;h=890658e14733d2929a1d9c627da74ddfe0aad447;hb=a9e5bfdf2a458e89978ee52ebbd3711884b54b29;hp=03d8439777e08e01c6282f91a5af79900d3a9f10;hpb=b56637074830f2a4df0ce319033b9089bc900add;p=xonotic%2Fnetradiant.git diff --git a/contrib/prtview/LoadPortalFileDialog.cpp b/contrib/prtview/LoadPortalFileDialog.cpp index 03d84397..890658e1 100644 --- a/contrib/prtview/LoadPortalFileDialog.cpp +++ b/contrib/prtview/LoadPortalFileDialog.cpp @@ -1,21 +1,21 @@ /* -PrtView plugin for GtkRadiant -Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com + PrtView plugin for GtkRadiant + Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ // LoadPortalFileDialog.cpp : implementation file // @@ -33,170 +33,133 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #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; +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; +} - gtk_widget_hide (widget); - loop = (int*)g_object_get_data (G_OBJECT (widget), "loop"); - *loop = 0; +static void change_clicked( GtkWidget *widget, gpointer data ){ + GtkWidget* file_sel; + char* filename = NULL; - return TRUE; -} + 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); -static void file_sel_callback (GtkWidget *widget, gpointer data) -{ - GtkWidget *parent; - int *loop; - char **filename; - - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - filename = (char**)g_object_get_data (G_OBJECT (parent), "filename"); - - *loop = 0; - if (gpointer_to_int(data) == IDOK) - *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent))); -} + 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)); + } + ui::Widget(file_sel).destroy(); -static void change_clicked (GtkWidget *widget, gpointer data) -{ - GtkWidget* file_sel; - char* filename = NULL; - int loop = 1; - - file_sel = gtk_file_selection_new ("Locate portal (.prt) file"); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->ok_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDOK)); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_sel)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (file_sel_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_signal_connect (GTK_OBJECT (file_sel), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (file_sel)); - - g_object_set_data (G_OBJECT (file_sel), "loop", &loop); - g_object_set_data (G_OBJECT (file_sel), "filename", &filename); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_sel), portals.fn); - - gtk_grab_add (file_sel); - gtk_widget_show (file_sel); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (file_sel); - gtk_widget_destroy (file_sel); - - 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 *dlg, *vbox, *hbox, *button, *entry, *check2d, *check3d; - int loop = 1, ret = IDCANCEL; - - dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (dlg), "Load .prt"); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - g_object_set_data (G_OBJECT (dlg), "loop", &loop); - g_object_set_data (G_OBJECT (dlg), "ret", &ret); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - gtk_container_add (GTK_CONTAINER (dlg), vbox); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_entry_set_editable (GTK_ENTRY (entry), FALSE); - gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - check3d = gtk_check_button_new_with_label ("Show 3D"); - gtk_widget_show (check3d); - gtk_box_pack_start (GTK_BOX (hbox), check3d, FALSE, FALSE, 0); - - check2d = gtk_check_button_new_with_label ("Show 2D"); - gtk_widget_show (check2d); - gtk_box_pack_start (GTK_BOX (hbox), check2d, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Change"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (change_clicked), entry); - gtk_widget_set_usize (button, 60, -2); - - hbox = gtk_hbox_new (FALSE, 5); - gtk_widget_show (hbox); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - button = gtk_button_new_with_label ("Cancel"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL)); - gtk_widget_set_usize (button, 60, -2); - - button = gtk_button_new_with_label ("OK"); - gtk_widget_show (button); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK)); - gtk_widget_set_usize (button, 60, -2); - - 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; }