X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fbrushexport%2Finterface.cpp;h=068325ea2bbf88b6a56d00026bfaa5806e162822;hb=0908af4bcf48cb2ee8da1dbb4480bcea821c3f60;hp=580b8dec24e13ed23a5ddc568207ad7fa8ff1c1f;hpb=6e9818d9cddf3880d001a544770c8c2c5187676f;p=xonotic%2Fnetradiant.git diff --git a/contrib/brushexport/interface.cpp b/contrib/brushexport/interface.cpp index 580b8dec..068325ea 100644 --- a/contrib/brushexport/interface.cpp +++ b/contrib/brushexport/interface.cpp @@ -4,6 +4,7 @@ #include "debugging/debugging.h" #include "callbacks.h" #include "support.h" +#include "gtkutil/dialog.h" #define GLADE_HOOKUP_OBJECT( component,widget,name ) \ g_object_set_data_full( G_OBJECT( component ), name, \ @@ -13,101 +14,87 @@ g_object_set_data( G_OBJECT( component ), name, (void *) widget ) // created by glade -GtkWidget* -create_w_plugplug2( void ){ - GtkWidget *hbox2; - GtkWidget *vbox4; - GtkWidget *r_collapse; +ui::Widget create_w_plugplug2( ui::Window main_window ){ GSList *r_collapse_group = NULL; - GtkWidget *r_collapsebymaterial; - GtkWidget *r_nocollapse; - GtkWidget *vbox3; - GtkWidget *vbox2; - GtkWidget *label1; - GtkWidget *ed_materialname; - GtkWidget *hbox1; - GtkWidget *t_limitmatnames; - GtkWidget *t_objects; - - auto w_plugplug2 = ui::Window( ui::window_type::TOP ); + ModalDialog dialog; + + auto w_plugplug2 = main_window.create_dialog_window( "BrushExport", G_CALLBACK( dialog_delete_callback ), &dialog ); gtk_widget_set_name( w_plugplug2, "w_plugplug2" ); - gtk_window_set_title( GTK_WINDOW( w_plugplug2 ), "BrushExport-Plugin 3.0 by namespace" ); - gtk_window_set_position( GTK_WINDOW( w_plugplug2 ), GTK_WIN_POS_CENTER ); - gtk_window_set_destroy_with_parent( GTK_WINDOW( w_plugplug2 ), TRUE ); + gtk_window_set_destroy_with_parent( w_plugplug2, TRUE ); auto vbox1 = ui::VBox( FALSE, 0 ); gtk_widget_set_name( vbox1, "vbox1" ); - gtk_widget_show( vbox1 ); + vbox1.show(); w_plugplug2.add(vbox1); gtk_container_set_border_width( GTK_CONTAINER( vbox1 ), 5 ); - hbox2 = ui::HBox( TRUE, 5 ); + auto hbox2 = ui::HBox( TRUE, 5 ); gtk_widget_set_name( hbox2, "hbox2" ); - gtk_widget_show( hbox2 ); - gtk_box_pack_start( GTK_BOX( vbox1 ), hbox2, FALSE, FALSE, 0 ); + hbox2.show(); + vbox1.pack_start( hbox2, FALSE, FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( hbox2 ), 5 ); - vbox4 = ui::VBox( TRUE, 0 ); + auto vbox4 = ui::VBox( TRUE, 0 ); gtk_widget_set_name( vbox4, "vbox4" ); - gtk_widget_show( vbox4 ); - gtk_box_pack_start( GTK_BOX( hbox2 ), vbox4, TRUE, FALSE, 0 ); + vbox4.show(); + hbox2.pack_start( vbox4, TRUE, FALSE, 0 ); - r_collapse = gtk_radio_button_new_with_mnemonic( NULL, "Collapse mesh" ); + auto r_collapse = ui::Widget::from(gtk_radio_button_new_with_mnemonic( NULL, "Collapse mesh" )); gtk_widget_set_name( r_collapse, "r_collapse" ); gtk_widget_set_tooltip_text(r_collapse, "Collapse all brushes into a single group"); - gtk_widget_show( r_collapse ); - gtk_box_pack_start( GTK_BOX( vbox4 ), r_collapse, FALSE, FALSE, 0 ); + r_collapse.show(); + vbox4.pack_start( r_collapse, FALSE, FALSE, 0 ); gtk_radio_button_set_group( GTK_RADIO_BUTTON( r_collapse ), r_collapse_group ); r_collapse_group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( r_collapse ) ); - r_collapsebymaterial = gtk_radio_button_new_with_mnemonic( NULL, "Collapse by material" ); + auto r_collapsebymaterial = ui::Widget::from(gtk_radio_button_new_with_mnemonic( NULL, "Collapse by material" )); gtk_widget_set_name( r_collapsebymaterial, "r_collapsebymaterial" ); gtk_widget_set_tooltip_text(r_collapsebymaterial, "Collapse into groups by material"); - gtk_widget_show( r_collapsebymaterial ); - gtk_box_pack_start( GTK_BOX( vbox4 ), r_collapsebymaterial, FALSE, FALSE, 0 ); + r_collapsebymaterial.show(); + vbox4.pack_start( r_collapsebymaterial, FALSE, FALSE, 0 ); gtk_radio_button_set_group( GTK_RADIO_BUTTON( r_collapsebymaterial ), r_collapse_group ); r_collapse_group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( r_collapsebymaterial ) ); - r_nocollapse = gtk_radio_button_new_with_mnemonic( NULL, "Don't collapse" ); + auto r_nocollapse = ui::Widget::from(gtk_radio_button_new_with_mnemonic( NULL, "Don't collapse" )); gtk_widget_set_name( r_nocollapse, "r_nocollapse" ); gtk_widget_set_tooltip_text(r_nocollapse, "Every brush is stored in its own group"); - gtk_widget_show( r_nocollapse ); - gtk_box_pack_start( GTK_BOX( vbox4 ), r_nocollapse, FALSE, FALSE, 0 ); + r_nocollapse.show(); + vbox4.pack_start( r_nocollapse, FALSE, FALSE, 0 ); gtk_radio_button_set_group( GTK_RADIO_BUTTON( r_nocollapse ), r_collapse_group ); r_collapse_group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( r_nocollapse ) ); - vbox3 = ui::VBox( FALSE, 0 ); + auto vbox3 = ui::VBox( FALSE, 0 ); gtk_widget_set_name( vbox3, "vbox3" ); - gtk_widget_show( vbox3 ); - gtk_box_pack_start( GTK_BOX( hbox2 ), vbox3, FALSE, FALSE, 0 ); + vbox3.show(); + hbox2.pack_start( vbox3, FALSE, FALSE, 0 ); - auto b_export = ui::Button(GTK_BUTTON(gtk_button_new_from_stock( "gtk-save" ))); + auto b_export = ui::Button::from(gtk_button_new_from_stock( "gtk-save" )); gtk_widget_set_name( b_export, "b_export" ); - gtk_widget_show( b_export ); - gtk_box_pack_start( GTK_BOX( vbox3 ), b_export, TRUE, FALSE, 0 ); + b_export.show(); + vbox3.pack_start( b_export, TRUE, FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( b_export ), 5 ); - auto b_close = ui::Button(GTK_BUTTON(gtk_button_new_from_stock( "gtk-cancel" ))); + auto b_close = ui::Button::from(gtk_button_new_from_stock( "gtk-cancel" )); gtk_widget_set_name( b_close, "b_close" ); - gtk_widget_show( b_close ); - gtk_box_pack_start( GTK_BOX( vbox3 ), b_close, TRUE, FALSE, 0 ); + b_close.show(); + vbox3.pack_start( b_close, TRUE, FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( b_close ), 5 ); - vbox2 = ui::VBox( FALSE, 5 ); + auto vbox2 = ui::VBox( FALSE, 5 ); gtk_widget_set_name( vbox2, "vbox2" ); - gtk_widget_show( vbox2 ); - gtk_box_pack_start( GTK_BOX( vbox1 ), vbox2, TRUE, TRUE, 0 ); + vbox2.show(); + vbox1.pack_start( vbox2, TRUE, TRUE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( vbox2 ), 2 ); - label1 = ui::Label( "Ignored materials:" ); + auto label1 = ui::Label( "Ignored materials:" ); gtk_widget_set_name( label1, "label1" ); - gtk_widget_show( label1 ); - gtk_box_pack_start( GTK_BOX( vbox2 ), label1, FALSE, FALSE, 0 ); + label1.show(); + vbox2.pack_start( label1, FALSE, FALSE, 0 ); auto scrolledwindow1 = ui::ScrolledWindow(ui::New); gtk_widget_set_name( scrolledwindow1, "scrolledwindow1" ); scrolledwindow1.show(); - gtk_box_pack_start( GTK_BOX( vbox2 ), scrolledwindow1, TRUE, TRUE, 0 ); + vbox2.pack_start( scrolledwindow1, TRUE, TRUE, 0 ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledwindow1 ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledwindow1 ), GTK_SHADOW_IN ); @@ -115,44 +102,44 @@ create_w_plugplug2( void ){ gtk_widget_set_name( t_materialist, "t_materialist" ); t_materialist.show(); scrolledwindow1.add(t_materialist); - gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( t_materialist ), FALSE ); - gtk_tree_view_set_enable_search( GTK_TREE_VIEW( t_materialist ), FALSE ); + gtk_tree_view_set_headers_visible(t_materialist, FALSE ); + gtk_tree_view_set_enable_search(t_materialist, FALSE ); - ed_materialname = ui::Entry(ui::New); + auto ed_materialname = ui::Entry(ui::New); gtk_widget_set_name( ed_materialname, "ed_materialname" ); - gtk_widget_show( ed_materialname ); - gtk_box_pack_start( GTK_BOX( vbox2 ), ed_materialname, FALSE, FALSE, 0 ); + ed_materialname.show(); + vbox2.pack_start( ed_materialname, FALSE, FALSE, 0 ); - hbox1 = ui::HBox( TRUE, 0 ); + auto hbox1 = ui::HBox( TRUE, 0 ); gtk_widget_set_name( hbox1, "hbox1" ); - gtk_widget_show( hbox1 ); - gtk_box_pack_start( GTK_BOX( vbox2 ), hbox1, FALSE, FALSE, 0 ); + hbox1.show(); + vbox2.pack_start( hbox1, FALSE, FALSE, 0 ); - auto b_addmaterial = ui::Button(GTK_BUTTON(gtk_button_new_from_stock( "gtk-add" ))); + auto b_addmaterial = ui::Button::from(gtk_button_new_from_stock( "gtk-add" )); gtk_widget_set_name( b_addmaterial, "b_addmaterial" ); - gtk_widget_show( b_addmaterial ); - gtk_box_pack_start( GTK_BOX( hbox1 ), b_addmaterial, FALSE, FALSE, 0 ); + b_addmaterial.show(); + hbox1.pack_start( b_addmaterial, FALSE, FALSE, 0 ); - auto b_removematerial = ui::Button(GTK_BUTTON(gtk_button_new_from_stock( "gtk-remove" ))); + auto b_removematerial = ui::Button::from(gtk_button_new_from_stock( "gtk-remove" )); gtk_widget_set_name( b_removematerial, "b_removematerial" ); - gtk_widget_show( b_removematerial ); - gtk_box_pack_start( GTK_BOX( hbox1 ), b_removematerial, FALSE, FALSE, 0 ); + b_removematerial.show(); + hbox1.pack_start( b_removematerial, FALSE, FALSE, 0 ); - t_limitmatnames = gtk_check_button_new_with_mnemonic( "Use short material names (max. 20 chars)" ); + auto t_limitmatnames = ui::Widget::from(gtk_check_button_new_with_mnemonic( "Use short material names (max. 20 chars)" )); gtk_widget_set_name( t_limitmatnames, "t_limitmatnames" ); - gtk_widget_show( t_limitmatnames ); - gtk_box_pack_end( GTK_BOX( vbox2 ), t_limitmatnames, FALSE, FALSE, 0 ); + t_limitmatnames.show(); + vbox2.pack_end( t_limitmatnames, FALSE, FALSE, 0 ); - t_objects = gtk_check_button_new_with_mnemonic( "Create (o)bjects instead of (g)roups" ); + auto t_objects = ui::Widget::from(gtk_check_button_new_with_mnemonic( "Create (o)bjects instead of (g)roups" )); gtk_widget_set_name( t_objects, "t_objects" ); - gtk_widget_show( t_objects ); - gtk_box_pack_end( GTK_BOX( vbox2 ), t_objects, FALSE, FALSE, 0 ); + t_objects.show(); + vbox2.pack_end(t_objects, FALSE, FALSE, 0); - auto t_exportmaterials = ui::CheckButton(GTK_CHECK_BUTTON(gtk_check_button_new_with_mnemonic( "Create material information (.mtl file)" ))); + auto t_exportmaterials = ui::CheckButton::from(gtk_check_button_new_with_mnemonic( "Create material information (.mtl file)" )); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( t_exportmaterials ), true ); gtk_widget_set_name( t_exportmaterials, "t_exportmaterials" ); - gtk_widget_show( t_exportmaterials ); - gtk_box_pack_end( GTK_BOX( vbox2 ), t_exportmaterials, FALSE, FALSE, 10 ); + t_exportmaterials.show(); + vbox2.pack_end(t_exportmaterials, FALSE, FALSE, 10); using namespace callbacks; w_plugplug2.connect( "destroy", G_CALLBACK( OnDestroy ), NULL ); @@ -190,36 +177,37 @@ create_w_plugplug2( void ){ } // global main window, is 0 when not created -GtkWidget* g_brushexp_window = 0; +ui::Widget g_brushexp_window{ui::null}; // spawn plugin window (and make sure it got destroyed first or never created) -void CreateWindow( void ){ +void CreateWindow( ui::Window main_window ){ ASSERT_TRUE( !g_brushexp_window ); - GtkWidget* wnd = create_w_plugplug2(); + ui::Widget wnd = create_w_plugplug2( main_window ); // column & renderer - GtkTreeViewColumn* col = gtk_tree_view_column_new(); + auto col = ui::TreeViewColumn::from(gtk_tree_view_column_new()); gtk_tree_view_column_set_title( col, "materials" ); - gtk_tree_view_append_column( GTK_TREE_VIEW( lookup_widget( wnd, "t_materialist" ) ), col ); + auto view = ui::TreeView::from(lookup_widget(wnd, "t_materialist")); + gtk_tree_view_append_column(view, col ); auto renderer = ui::CellRendererText(ui::New); - gtk_tree_view_insert_column_with_attributes( GTK_TREE_VIEW( lookup_widget( wnd, "t_materialist" ) ), -1, "", renderer, "text", 0, NULL ); + gtk_tree_view_insert_column_with_attributes(view, -1, "", renderer, "text", 0, NULL ); // list store - ui::ListStore ignorelist = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING )); - gtk_tree_view_set_model( GTK_TREE_VIEW( lookup_widget( wnd, "t_materialist" ) ), GTK_TREE_MODEL( ignorelist ) ); + auto ignorelist = ui::ListStore::from(gtk_list_store_new( 1, G_TYPE_STRING )); + gtk_tree_view_set_model(view, ignorelist ); ignorelist.unref(); gtk_widget_show_all( wnd ); g_brushexp_window = wnd; } -void DestroyWindow( void ){ - ASSERT_NOTNULL( g_brushexp_window ); +void DestroyWindow(){ + ASSERT_TRUE( g_brushexp_window ); ui::Widget(g_brushexp_window).destroy(); - g_brushexp_window = 0; + g_brushexp_window = ui::Widget(ui::null); } -bool IsWindowOpen( void ){ - return g_brushexp_window != 0; +bool IsWindowOpen(){ + return g_brushexp_window; }