]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/select.cpp
Merge commit '3a78d902017a780e65f21f12c709aa746dfcab84' into garux-merge
[xonotic/netradiant.git] / radiant / select.cpp
index 240c05f49e8e1ad62aba91da0a804fa4d7645d25..8e749542975c5d62dcab68f6f6784ab4a4dcc0cb 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "select.h"
 
+#include <gtk/gtk.h>
+
 #include "debugging/debugging.h"
 
 #include "ientity.h"
@@ -420,7 +422,7 @@ void Selection_UpdateWorkzone(){
                Select_GetBounds( g_select_workzone.d_work_min, g_select_workzone.d_work_max );
        }
 }
-typedef FreeCaller<Selection_UpdateWorkzone> SelectionUpdateWorkzoneCaller;
+typedef FreeCaller<void(), Selection_UpdateWorkzone> SelectionUpdateWorkzoneCaller;
 
 IdleDraw g_idleWorkzone = IdleDraw( SelectionUpdateWorkzoneCaller() );
 }
@@ -829,7 +831,8 @@ inline void hide_node( scene::Node& node, bool hide ){
 
 bool g_nodes_be_hidden = false;
 
-BoolExportCaller g_hidden_caller( g_nodes_be_hidden );
+ConstReferenceCaller<bool, void(const Callback<void(bool)> &), PropertyImpl<bool>::Export> g_hidden_caller( g_nodes_be_hidden );
+
 ToggleItem g_hidden_item( g_hidden_caller );
 
 class HideSelectedWalker : public scene::Graph::Walker
@@ -987,21 +990,21 @@ void Selection_RotateAnticlockwise(){
 
 
 void Select_registerCommands(){
-       GlobalCommands_insert( "ShowHidden", FreeCaller<Select_ShowAllHidden>(), Accelerator( 'H', (GdkModifierType)GDK_SHIFT_MASK ) );
-       GlobalToggles_insert( "HideSelected", FreeCaller<HideSelected>(), ToggleItem::AddCallbackCaller( g_hidden_item ), Accelerator( 'H' ) );
+       GlobalCommands_insert( "ShowHidden", makeCallbackF( Select_ShowAllHidden ), Accelerator( 'H', (GdkModifierType)GDK_SHIFT_MASK ) );
+       GlobalToggles_insert( "HideSelected", makeCallbackF( HideSelected ), ToggleItem::AddCallbackCaller( g_hidden_item ), Accelerator( 'H' ) );
 
-       GlobalCommands_insert( "MirrorSelectionX", FreeCaller<Selection_Flipx>() );
-       GlobalCommands_insert( "RotateSelectionX", FreeCaller<Selection_Rotatex>() );
-       GlobalCommands_insert( "MirrorSelectionY", FreeCaller<Selection_Flipy>() );
-       GlobalCommands_insert( "RotateSelectionY", FreeCaller<Selection_Rotatey>() );
-       GlobalCommands_insert( "MirrorSelectionZ", FreeCaller<Selection_Flipz>() );
-       GlobalCommands_insert( "RotateSelectionZ", FreeCaller<Selection_Rotatez>() );
+       GlobalCommands_insert( "MirrorSelectionX", makeCallbackF( Selection_Flipx ) );
+       GlobalCommands_insert( "RotateSelectionX", makeCallbackF( Selection_Rotatex ) );
+       GlobalCommands_insert( "MirrorSelectionY", makeCallbackF( Selection_Flipy ) );
+       GlobalCommands_insert( "RotateSelectionY", makeCallbackF( Selection_Rotatey ) );
+       GlobalCommands_insert( "MirrorSelectionZ", makeCallbackF( Selection_Flipz ) );
+       GlobalCommands_insert( "RotateSelectionZ", makeCallbackF( Selection_Rotatez ) );
 
-       GlobalCommands_insert( "MirrorSelectionHorizontally", FreeCaller<Selection_FlipHorizontally>() );
-       GlobalCommands_insert( "MirrorSelectionVertically", FreeCaller<Selection_FlipVertically>() );
+       GlobalCommands_insert( "MirrorSelectionHorizontally", makeCallbackF( Selection_FlipHorizontally ) );
+       GlobalCommands_insert( "MirrorSelectionVertically", makeCallbackF( Selection_FlipVertically ) );
 
-       GlobalCommands_insert( "RotateSelectionClockwise", FreeCaller<Selection_RotateClockwise>() );
-       GlobalCommands_insert( "RotateSelectionAnticlockwise", FreeCaller<Selection_RotateAnticlockwise>() );
+       GlobalCommands_insert( "RotateSelectionClockwise", makeCallbackF( Selection_RotateClockwise ) );
+       GlobalCommands_insert( "RotateSelectionAnticlockwise", makeCallbackF( Selection_RotateAnticlockwise ) );
 }
 
 
@@ -1035,11 +1038,11 @@ void SceneSelectionChange( const Selectable& selectable ){
 SignalHandlerId Selection_boundsChanged;
 
 void Selection_construct(){
-       typedef FreeCaller1<const Selectable&, SceneSelectionChange> SceneSelectionChangeCaller;
+       typedef FreeCaller<void(const Selectable&), SceneSelectionChange> SceneSelectionChangeCaller;
        GlobalSelectionSystem().addSelectionChangeCallback( SceneSelectionChangeCaller() );
-       typedef FreeCaller1<const Selectable&, UpdateWorkzone_ForSelectionChanged> UpdateWorkzoneForSelectionChangedCaller;
+       typedef FreeCaller<void(const Selectable&), UpdateWorkzone_ForSelectionChanged> UpdateWorkzoneForSelectionChangedCaller;
        GlobalSelectionSystem().addSelectionChangeCallback( UpdateWorkzoneForSelectionChangedCaller() );
-       typedef FreeCaller<UpdateWorkzone_ForSelection> UpdateWorkzoneForSelectionCaller;
+       typedef FreeCaller<void(), UpdateWorkzone_ForSelection> UpdateWorkzoneForSelectionCaller;
        Selection_boundsChanged = GlobalSceneGraph().addBoundsChangedCallback( UpdateWorkzoneForSelectionCaller() );
 }
 
@@ -1049,10 +1052,6 @@ void Selection_destroy(){
 
 
 #include "gtkdlgs.h"
-#include <gtk/gtkbox.h>
-#include <gtk/gtkspinbutton.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtklabel.h>
 #include <gdk/gdkkeysyms.h>
 
 
@@ -1086,13 +1085,13 @@ inline Quaternion quaternion_for_euler_xyz_degrees( const Vector3& eulerXYZ ){
 
 struct RotateDialog
 {
-       GtkSpinButton* x;
-       GtkSpinButton* y;
-       GtkSpinButton* z;
-       GtkWindow *window;
+       ui::SpinButton x{ui::null};
+       ui::SpinButton y{ui::null};
+       ui::SpinButton z{ui::null};
+       ui::Window window{ui::null};
 };
 
-static gboolean rotatedlg_apply( GtkWidget *widget, RotateDialog* rotateDialog ){
+static gboolean rotatedlg_apply( ui::Widget widget, RotateDialog* rotateDialog ){
        Vector3 eulerXYZ;
 
        gtk_spin_button_update ( rotateDialog->x );
@@ -1110,8 +1109,8 @@ static gboolean rotatedlg_apply( GtkWidget *widget, RotateDialog* rotateDialog )
        return TRUE;
 }
 
-static gboolean rotatedlg_cancel( GtkWidget *widget, RotateDialog* rotateDialog ){
-       gtk_widget_hide( GTK_WIDGET( rotateDialog->window ) );
+static gboolean rotatedlg_cancel( ui::Widget widget, RotateDialog* rotateDialog ){
+       rotateDialog->window.hide();
 
        gtk_spin_button_set_value( rotateDialog->x, 0.0f ); // reset to 0 on close
        gtk_spin_button_set_value( rotateDialog->y, 0.0f );
@@ -1120,115 +1119,103 @@ static gboolean rotatedlg_cancel( GtkWidget *widget, RotateDialog* rotateDialog
        return TRUE;
 }
 
-static gboolean rotatedlg_ok( GtkWidget *widget, RotateDialog* rotateDialog ){
+static gboolean rotatedlg_ok( ui::Widget widget, RotateDialog* rotateDialog ){
        rotatedlg_apply( widget, rotateDialog );
 //     rotatedlg_cancel( widget, rotateDialog );
-       gtk_widget_hide( GTK_WIDGET( rotateDialog->window ) );
+       rotateDialog->window.hide();
        return TRUE;
 }
 
-static gboolean rotatedlg_delete( GtkWidget *widget, GdkEventAny *event, RotateDialog* rotateDialog ){
+static gboolean rotatedlg_delete( ui::Widget widget, GdkEventAny *event, RotateDialog* rotateDialog ){
        rotatedlg_cancel( widget, rotateDialog );
        return TRUE;
 }
 
 RotateDialog g_rotate_dialog;
 void DoRotateDlg(){
-       if ( g_rotate_dialog.window == NULL ) {
-               g_rotate_dialog.window = create_dialog_window( MainFrame_getWindow(), "Arbitrary rotation", G_CALLBACK( rotatedlg_delete ), &g_rotate_dialog );
+       if ( !g_rotate_dialog.window ) {
+               g_rotate_dialog.window = MainFrame_getWindow().create_dialog_window("Arbitrary rotation", G_CALLBACK(rotatedlg_delete ), &g_rotate_dialog );
 
-               GtkAccelGroup* accel = gtk_accel_group_new();
-               gtk_window_add_accel_group( g_rotate_dialog.window, accel );
+               auto accel = ui::AccelGroup(ui::New);
+               g_rotate_dialog.window.add_accel_group( accel );
 
                {
-                       GtkHBox* hbox = create_dialog_hbox( 4, 4 );
-                       gtk_container_add( GTK_CONTAINER( g_rotate_dialog.window ), GTK_WIDGET( hbox ) );
+                       auto hbox = create_dialog_hbox( 4, 4 );
+                       g_rotate_dialog.window.add(hbox);
                        {
-                               GtkTable* table = create_dialog_table( 3, 2, 4, 4 );
-                               gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( table ), TRUE, TRUE, 0 );
+                               auto table = create_dialog_table( 3, 2, 4, 4 );
+                               hbox.pack_start( table, TRUE, TRUE, 0 );
                                {
-                                       GtkWidget* label = gtk_label_new( "  X  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 0, 1,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  X  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 0, 1}, {0, 0});
                                }
                                {
-                                       GtkWidget* label = gtk_label_new( "  Y  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 1, 2,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  Y  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 1, 2}, {0, 0});
                                }
                                {
-                                       GtkWidget* label = gtk_label_new( "  Z  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 2, 3,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  Z  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 2, 3}, {0, 0});
                                }
                                {
-                                       GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0, -359, 359, 1, 10, 0 ) );
-                                       GtkSpinButton* spin = GTK_SPIN_BUTTON( gtk_spin_button_new( adj, 1, 1 ) );
-                                       gtk_widget_show( GTK_WIDGET( spin ) );
-                                       gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 0, 1,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
-                                       gtk_widget_set_size_request( GTK_WIDGET( spin ), 64, -1 );
+                                       auto adj = ui::Adjustment( 0, -359, 359, 1, 10, 0 );
+                                       auto spin = ui::SpinButton( adj, 1, 1 );
+                                       spin.show();
+                    table.attach(spin, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
+                    spin.dimensions(64, -1);
                                        gtk_spin_button_set_wrap( spin, TRUE );
 
-                                       gtk_widget_grab_focus( GTK_WIDGET( spin ) );
+                                       gtk_widget_grab_focus( spin  );
 
                                        g_rotate_dialog.x = spin;
                                }
                                {
-                                       GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0, -359, 359, 1, 10, 0 ) );
-                                       GtkSpinButton* spin = GTK_SPIN_BUTTON( gtk_spin_button_new( adj, 1, 1 ) );
-                                       gtk_widget_show( GTK_WIDGET( spin ) );
-                                       gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 1, 2,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
-                                       gtk_widget_set_size_request( GTK_WIDGET( spin ), 64, -1 );
+                                       auto adj = ui::Adjustment( 0, -359, 359, 1, 10, 0 );
+                                       auto spin = ui::SpinButton( adj, 1, 1 );
+                                       spin.show();
+                    table.attach(spin, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
+                    spin.dimensions(64, -1);
                                        gtk_spin_button_set_wrap( spin, TRUE );
 
                                        g_rotate_dialog.y = spin;
                                }
                                {
-                                       GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0, -359, 359, 1, 10, 0 ) );
-                                       GtkSpinButton* spin = GTK_SPIN_BUTTON( gtk_spin_button_new( adj, 1, 1 ) );
-                                       gtk_widget_show( GTK_WIDGET( spin ) );
-                                       gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 2, 3,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
-                                       gtk_widget_set_size_request( GTK_WIDGET( spin ), 64, -1 );
+                                       auto adj = ui::Adjustment( 0, -359, 359, 1, 10, 0 );
+                                       auto spin = ui::SpinButton( adj, 1, 1 );
+                                       spin.show();
+                    table.attach(spin, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
+                    spin.dimensions(64, -1);
                                        gtk_spin_button_set_wrap( spin, TRUE );
 
                                        g_rotate_dialog.z = spin;
                                }
                        }
                        {
-                               GtkVBox* vbox = create_dialog_vbox( 4 );
-                               gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), TRUE, TRUE, 0 );
+                               auto vbox = create_dialog_vbox( 4 );
+                               hbox.pack_start( vbox, TRUE, TRUE, 0 );
                                {
-                                       GtkButton* button = create_dialog_button( "OK", G_CALLBACK( rotatedlg_ok ), &g_rotate_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
-                                       widget_make_default( GTK_WIDGET( button ) );
-                                       gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+                                       auto button = create_dialog_button( "OK", G_CALLBACK( rotatedlg_ok ), &g_rotate_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
+                                       widget_make_default( button );
+                                       gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
                                }
                                {
-                                       GtkButton* button = create_dialog_button( "Cancel", G_CALLBACK( rotatedlg_cancel ), &g_rotate_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
-                                       gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+                                       auto button = create_dialog_button( "Cancel", G_CALLBACK( rotatedlg_cancel ), &g_rotate_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
+                                       gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
                                }
                                {
-                                       GtkButton* button = create_dialog_button( "Apply", G_CALLBACK( rotatedlg_apply ), &g_rotate_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
+                                       auto button = create_dialog_button( "Apply", G_CALLBACK( rotatedlg_apply ), &g_rotate_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
                                }
                        }
                }
        }
 
-       gtk_widget_show( GTK_WIDGET( g_rotate_dialog.window ) );
+       g_rotate_dialog.window.show();
 }
 
 
@@ -1241,13 +1228,13 @@ void DoRotateDlg(){
 
 struct ScaleDialog
 {
-       GtkWidget* x;
-       GtkWidget* y;
-       GtkWidget* z;
-       GtkWindow *window;
+       ui::Entry x{ui::null};
+       ui::Entry y{ui::null};
+       ui::Entry z{ui::null};
+       ui::Window window{ui::null};
 };
 
-static gboolean scaledlg_apply( GtkWidget *widget, ScaleDialog* scaleDialog ){
+static gboolean scaledlg_apply( ui::Widget widget, ScaleDialog* scaleDialog ){
        float sx, sy, sz;
 
        sx = static_cast<float>( atof( gtk_entry_get_text( GTK_ENTRY( scaleDialog->x ) ) ) );
@@ -1263,24 +1250,24 @@ static gboolean scaledlg_apply( GtkWidget *widget, ScaleDialog* scaleDialog ){
        return TRUE;
 }
 
-static gboolean scaledlg_cancel( GtkWidget *widget, ScaleDialog* scaleDialog ){
-       gtk_widget_hide( GTK_WIDGET( scaleDialog->window ) );
+static gboolean scaledlg_cancel( ui::Widget widget, ScaleDialog* scaleDialog ){
+       scaleDialog->window.hide();
 
-       gtk_entry_set_text( GTK_ENTRY( scaleDialog->x ), "1.0" );
-       gtk_entry_set_text( GTK_ENTRY( scaleDialog->y ), "1.0" );
-       gtk_entry_set_text( GTK_ENTRY( scaleDialog->z ), "1.0" );
+       scaleDialog->x.text("1.0");
+       scaleDialog->y.text("1.0");
+       scaleDialog->z.text("1.0");
 
        return TRUE;
 }
 
-static gboolean scaledlg_ok( GtkWidget *widget, ScaleDialog* scaleDialog ){
+static gboolean scaledlg_ok( ui::Widget widget, ScaleDialog* scaleDialog ){
        scaledlg_apply( widget, scaleDialog );
        //scaledlg_cancel( widget, scaleDialog );
-       gtk_widget_hide( GTK_WIDGET( scaleDialog->window ) );
+       scaleDialog->window.hide();
        return TRUE;
 }
 
-static gboolean scaledlg_delete( GtkWidget *widget, GdkEventAny *event, ScaleDialog* scaleDialog ){
+static gboolean scaledlg_delete( ui::Widget widget, GdkEventAny *event, ScaleDialog* scaleDialog ){
        scaledlg_cancel( widget, scaleDialog );
        return TRUE;
 }
@@ -1288,91 +1275,79 @@ static gboolean scaledlg_delete( GtkWidget *widget, GdkEventAny *event, ScaleDia
 ScaleDialog g_scale_dialog;
 
 void DoScaleDlg(){
-       if ( g_scale_dialog.window == NULL ) {
-               g_scale_dialog.window = create_dialog_window( MainFrame_getWindow(), "Arbitrary scale", G_CALLBACK( scaledlg_delete ), &g_scale_dialog );
+       if ( !g_scale_dialog.window ) {
+               g_scale_dialog.window = MainFrame_getWindow().create_dialog_window("Arbitrary scale", G_CALLBACK(scaledlg_delete ), &g_scale_dialog );
 
-               GtkAccelGroup* accel = gtk_accel_group_new();
-               gtk_window_add_accel_group( g_scale_dialog.window, accel );
+               auto accel = ui::AccelGroup(ui::New);
+               g_scale_dialog.window.add_accel_group( accel );
 
                {
-                       GtkHBox* hbox = create_dialog_hbox( 4, 4 );
-                       gtk_container_add( GTK_CONTAINER( g_scale_dialog.window ), GTK_WIDGET( hbox ) );
+                       auto hbox = create_dialog_hbox( 4, 4 );
+                       g_scale_dialog.window.add(hbox);
                        {
-                               GtkTable* table = create_dialog_table( 3, 2, 4, 4 );
-                               gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( table ), TRUE, TRUE, 0 );
+                               auto table = create_dialog_table( 3, 2, 4, 4 );
+                               hbox.pack_start( table, TRUE, TRUE, 0 );
                                {
-                                       GtkWidget* label = gtk_label_new( "  X  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 0, 1,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  X  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 0, 1}, {0, 0});
                                }
                                {
-                                       GtkWidget* label = gtk_label_new( "  Y  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 1, 2,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  Y  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 1, 2}, {0, 0});
                                }
                                {
-                                       GtkWidget* label = gtk_label_new( "  Z  " );
-                                       gtk_widget_show( label );
-                                       gtk_table_attach( table, label, 0, 1, 2, 3,
-                                                                         (GtkAttachOptions) ( 0 ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       ui::Widget label = ui::Label( "  Z  " );
+                                       label.show();
+                    table.attach(label, {0, 1, 2, 3}, {0, 0});
                                }
                                {
-                                       GtkWidget* entry = gtk_entry_new();
-                                       gtk_entry_set_text( GTK_ENTRY( entry ), "1.0" );
-                                       gtk_widget_show( entry );
-                                       gtk_table_attach( table, entry, 1, 2, 0, 1,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       auto entry = ui::Entry(ui::New);
+                                       entry.text("1.0");
+                                       entry.show();
+                    table.attach(entry, {1, 2, 0, 1}, {GTK_EXPAND | GTK_FILL, 0});
 
                                        g_scale_dialog.x = entry;
                                }
                                {
-                                       GtkWidget* entry = gtk_entry_new();
-                                       gtk_entry_set_text( GTK_ENTRY( entry ), "1.0" );
-                                       gtk_widget_show( entry );
-                                       gtk_table_attach( table, entry, 1, 2, 1, 2,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       auto entry = ui::Entry(ui::New);
+                                       entry.text("1.0");
+                                       entry.show();
+                    table.attach(entry, {1, 2, 1, 2}, {GTK_EXPAND | GTK_FILL, 0});
 
                                        g_scale_dialog.y = entry;
                                }
                                {
-                                       GtkWidget* entry = gtk_entry_new();
-                                       gtk_entry_set_text( GTK_ENTRY( entry ), "1.0" );
-                                       gtk_widget_show( entry );
-                                       gtk_table_attach( table, entry, 1, 2, 2, 3,
-                                                                         (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
-                                                                         (GtkAttachOptions) ( 0 ), 0, 0 );
+                                       auto entry = ui::Entry(ui::New);
+                                       entry.text("1.0");
+                                       entry.show();
+                    table.attach(entry, {1, 2, 2, 3}, {GTK_EXPAND | GTK_FILL, 0});
 
                                        g_scale_dialog.z = entry;
                                }
                        }
                        {
-                               GtkVBox* vbox = create_dialog_vbox( 4 );
-                               gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), TRUE, TRUE, 0 );
+                               auto vbox = create_dialog_vbox( 4 );
+                               hbox.pack_start( vbox, TRUE, TRUE, 0 );
                                {
-                                       GtkButton* button = create_dialog_button( "OK", G_CALLBACK( scaledlg_ok ), &g_scale_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
-                                       widget_make_default( GTK_WIDGET( button ) );
-                                       gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+                                       auto button = create_dialog_button( "OK", G_CALLBACK( scaledlg_ok ), &g_scale_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
+                                       widget_make_default( button );
+                                       gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
                                }
                                {
-                                       GtkButton* button = create_dialog_button( "Cancel", G_CALLBACK( scaledlg_cancel ), &g_scale_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
-                                       gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+                                       auto button = create_dialog_button( "Cancel", G_CALLBACK( scaledlg_cancel ), &g_scale_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
+                                       gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
                                }
                                {
-                                       GtkButton* button = create_dialog_button( "Apply", G_CALLBACK( scaledlg_apply ), &g_scale_dialog );
-                                       gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
+                                       auto button = create_dialog_button( "Apply", G_CALLBACK( scaledlg_apply ), &g_scale_dialog );
+                                       vbox.pack_start( button, FALSE, FALSE, 0 );
                                }
                        }
                }
        }
 
-       gtk_widget_show( GTK_WIDGET( g_scale_dialog.window ) );
+       g_scale_dialog.window.show();
 }