X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=contrib%2Fbobtoolz%2Fdialogs%2Fdialogs-gtk.cpp;h=817a4e1ed646a0d6bc62fe50751de488414935d0;hp=57177ef41c01aef30712601c9bebf9ab17581f34;hb=2951e448a7f008f2438be4bd5feba2e4f4400eef;hpb=12b372f89ce109a4db9d510884fbe7d05af79870 diff --git a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp index 57177ef4..817a4e1e 100644 --- a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp +++ b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp @@ -1,135 +1,123 @@ /* -BobToolz plugin for GtkRadiant -Copyright (C) 2001 Gordon Biggans + BobToolz plugin for GtkRadiant + Copyright (C) 2001 Gordon Biggans -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. - -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 -*/ - -#include "../StdAfx.h" + 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 + */ #include "dialogs-gtk.h" #include "../funchandlers.h" #include "str.h" -#include "gtkr_list.h" +#include +#include +#include "gtkutil/pointer.h" #include "../lists.h" #include "../misc.h" /*-------------------------------- - Callback Functions ----------------------------------*/ + Callback Functions + ---------------------------------*/ typedef struct { - GtkWidget *cbTexChange; - GtkWidget *editTexOld, *editTexNew; + ui::Widget cbTexChange{ui::null}; + ui::Widget editTexOld{ui::null}, editTexNew{ui::null}; - GtkWidget *cbScaleHor, *cbScaleVert; - GtkWidget *editScaleHor, *editScaleVert; + ui::Widget cbScaleHor{ui::null}, cbScaleVert{ui::null}; + ui::Widget editScaleHor{ui::null}, editScaleVert{ui::null}; - GtkWidget *cbShiftHor, *cbShiftVert; - GtkWidget *editShiftHor, *editShiftVert; + ui::Widget cbShiftHor{ui::null}, cbShiftVert{ui::null}; + ui::Widget editShiftHor{ui::null}, editShiftVert{ui::null}; - GtkWidget *cbRotation; - GtkWidget *editRotation; + ui::Widget cbRotation{ui::null}; + ui::Widget editRotation{ui::null}; }dlg_texReset_t; dlg_texReset_t dlgTexReset; void Update_TextureReseter(); -static void dialog_button_callback_texreset_update (GtkWidget *widget, gpointer data) -{ - Update_TextureReseter(); +static void dialog_button_callback_texreset_update( GtkWidget *widget, gpointer data ){ + Update_TextureReseter(); } -void Update_TextureReseter() -{ - gboolean check; +void Update_TextureReseter(){ + gboolean check; - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexNew), check); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editTexOld), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexNew ), check ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editTexOld ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleHor), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleHor ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editScaleVert), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editScaleVert ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftHor), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftHor ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editShiftVert), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editShiftVert ), check ); - check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation )); - gtk_entry_set_editable (GTK_ENTRY (dlgTexReset.editRotation), check); + check = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) ); + gtk_editable_set_editable( GTK_EDITABLE( dlgTexReset.editRotation ), check ); } -static void dialog_button_callback (GtkWidget *widget, gpointer data) -{ +static void dialog_button_callback( GtkWidget *widget, gpointer data ){ GtkWidget *parent; int *loop; - EMessageBoxReturn *ret; - - parent = gtk_widget_get_toplevel (widget); - loop = (int*)g_object_get_data (G_OBJECT (parent), "loop"); - ret = (EMessageBoxReturn*)g_object_get_data (G_OBJECT (parent), "ret"); - + EMessageBoxReturn *ret; + + parent = gtk_widget_get_toplevel( widget ); + loop = (int*)g_object_get_data( G_OBJECT( parent ), "loop" ); + ret = (EMessageBoxReturn*)g_object_get_data( G_OBJECT( parent ), "ret" ); + *loop = 0; - *ret = (EMessageBoxReturn)GPOINTER_TO_INT(data); + *ret = (EMessageBoxReturn)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; +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 dialog_button_callback_settex (GtkWidget *widget, gpointer data) -{ +static void dialog_button_callback_settex( GtkWidget *widget, gpointer data ){ TwinWidget* tw = (TwinWidget*)data; GtkEntry* entry = GTK_ENTRY( tw->one ); - GtkCombo* combo = GTK_COMBO( tw->two ); + auto* combo = GTK_BIN(tw->two); - const gchar* tex = gtk_entry_get_text(GTK_ENTRY( combo->entry )); - gtk_entry_set_text( entry, tex); + const gchar *tex = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(combo))); + gtk_entry_set_text( entry, tex ); } /*-------------------------------- - Data validation Routines ----------------------------------*/ + Data validation Routines + ---------------------------------*/ -bool ValidateTextFloat(const char* pData, char* error_title, float* value) -{ - if(pData) - { - float testNum = (float)atof(pData); +bool ValidateTextFloat( const char* pData, const char* error_title, float* value ){ + if ( pData ) { + float testNum = (float)atof( pData ); - if((testNum == 0.0f) && strcmp(pData, "0")) - { - DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK); + if ( ( testNum == 0.0f ) && strcmp( pData, "0" ) ) { + DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK ); return FALSE; } else @@ -139,22 +127,19 @@ bool ValidateTextFloat(const char* pData, char* error_title, float* value) } } - DoMessageBox("Please Enter A Floating Point Number", error_title, eMB_OK); + DoMessageBox( "Please Enter A Floating Point Number", error_title, eMB_OK ); return FALSE; } -bool ValidateTextFloatRange(const char* pData, float min, float max, char* error_title, float* value) -{ +bool ValidateTextFloatRange( const char* pData, float min, float max, const char* error_title, float* value ){ char error_buffer[256]; - sprintf(error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max); + sprintf( error_buffer, "Please Enter A Floating Point Number Between %.3f and %.3f", min, max ); - if(pData) - { - float testNum = (float)atof(pData); + if ( pData ) { + float testNum = (float)atof( pData ); - if((testNum < min) || (testNum > max)) - { - DoMessageBox(error_buffer, error_title, eMB_OK); + if ( ( testNum < min ) || ( testNum > max ) ) { + DoMessageBox( error_buffer, error_title, eMB_OK ); return FALSE; } else @@ -164,22 +149,19 @@ bool ValidateTextFloatRange(const char* pData, float min, float max, char* error } } - DoMessageBox(error_buffer, error_title, eMB_OK); + DoMessageBox( error_buffer, error_title, eMB_OK ); return FALSE; } -bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title, int* value) -{ +bool ValidateTextIntRange( const char* pData, int min, int max, const char* error_title, int* value ){ char error_buffer[256]; - sprintf(error_buffer, "Please Enter An Integer Between %i and %i", min, max); + sprintf( error_buffer, "Please Enter An Integer Between %i and %i", min, max ); - if(pData) - { - int testNum = atoi(pData); + if ( pData ) { + int testNum = atoi( pData ); - if((testNum < min) || (testNum > max)) - { - DoMessageBox(error_buffer, error_title, eMB_OK); + if ( ( testNum < min ) || ( testNum > max ) ) { + DoMessageBox( error_buffer, error_title, eMB_OK ); return FALSE; } else @@ -189,19 +171,16 @@ bool ValidateTextIntRange(const char* pData, int min, int max, char* error_title } } - DoMessageBox(error_buffer, error_title, eMB_OK); + DoMessageBox( error_buffer, error_title, eMB_OK ); return FALSE; } -bool ValidateTextInt(const char* pData, char* error_title, int* value) -{ - if(pData) - { - int testNum = atoi(pData); +bool ValidateTextInt( const char* pData, const char* error_title, int* value ){ + if ( pData ) { + int testNum = atoi( pData ); - if((testNum == 0) && strcmp(pData, "0")) - { - DoMessageBox("Please Enter An Integer", error_title, eMB_OK); + if ( ( testNum == 0 ) && strcmp( pData, "0" ) ) { + DoMessageBox( "Please Enter An Integer", error_title, eMB_OK ); return FALSE; } else @@ -211,395 +190,374 @@ bool ValidateTextInt(const char* pData, char* error_title, int* value) } } - DoMessageBox("Please Enter An Integer", error_title, eMB_OK); + DoMessageBox( "Please Enter An Integer", error_title, eMB_OK ); return FALSE; } /*-------------------------------- - Modal Dialog Boxes ----------------------------------*/ + Modal Dialog Boxes + ---------------------------------*/ /* - Major clean up of variable names etc required, excluding Mars's ones, - which are nicely done :) + Major clean up of variable names etc required, excluding Mars's ones, + which are nicely done :) -*/ + */ -EMessageBoxReturn DoMessageBox (const char* lpText, const char* lpCaption, EMessageBoxType type) -{ - GtkWidget *window, *w, *vbox, *hbox; +EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMessageBoxType type ){ + ui::Widget w{ui::null}; EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - gtk_window_set_title (GTK_WINDOW (window), lpCaption); - gtk_container_border_width (GTK_CONTAINER (window), 10); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - gtk_widget_realize (window); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - - w = gtk_label_new (lpText); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - if (type == eMB_OK) - { - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + gtk_window_set_title( GTK_WINDOW( window ), lpCaption ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + gtk_widget_realize( window ); + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + gtk_widget_show( vbox ); + + w = ui::Label( lpText ); + vbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); + + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_widget_show( w ); + + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + if ( type == eMB_OK ) { + w = ui::Button( "Ok" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + gtk_widget_set_can_default(w, true); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); ret = eIDOK; } - else if (type == eMB_OKCANCEL) - { - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); + else if ( type == eMB_OKCANCEL ) { + w = ui::Button( "Ok" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); ret = eIDCANCEL; } - else if (type == eMB_YESNOCANCEL) - { - w = gtk_button_new_with_label ("Yes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("No"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO)); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); + else if ( type == eMB_YESNOCANCEL ) { + w = ui::Button( "Yes" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "No" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); ret = eIDCANCEL; } else /* if (mode == MB_YESNO) */ { - w = gtk_button_new_with_label ("Yes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES)); - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("No"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDNO)); - gtk_widget_show (w); + w = ui::Button( "Yes" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "No" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) ); + gtk_widget_show( w ); ret = eIDNO; } - - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - - while (loop) - gtk_main_iteration (); - - gtk_grab_remove (window); - gtk_widget_destroy (window); - + + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + + while ( loop ) + gtk_main_iteration(); + + gtk_grab_remove( window ); + window.destroy(); + return ret; } -EMessageBoxReturn DoIntersectBox (IntersectRS* rs) -{ - GtkWidget *window, *w, *vbox, *hbox; - GtkWidget *radio1, *radio2; - GtkWidget *check1, *check2; +EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){ EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - - gtk_window_set_title (GTK_WINDOW (window), "Intersect"); - gtk_container_border_width (GTK_CONTAINER (window), 10); - - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - - gtk_widget_realize (window); - - - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "Intersect" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + gtk_widget_show( vbox ); + // ---- vbox ---- - radio1 = gtk_radio_button_new_with_label(NULL, "Use Whole Map"); - gtk_box_pack_start (GTK_BOX (vbox), radio1, FALSE, FALSE, 2); - gtk_widget_show (radio1); - - radio2 = gtk_radio_button_new_with_label(((GtkRadioButton*)radio1)->group, "Use Selected Brushes"); - gtk_box_pack_start (GTK_BOX (vbox), radio2, FALSE, FALSE, 2); - gtk_widget_show (radio2); - - w = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); - gtk_widget_show (w); - - check1 = gtk_check_button_new_with_label("Include Detail Brushes"); - gtk_box_pack_start (GTK_BOX (vbox), check1, FALSE, FALSE, 0); - gtk_widget_show (check1); - - check2 = gtk_check_button_new_with_label("Select Duplicate Brushes Only"); - gtk_box_pack_start (GTK_BOX (vbox), check2, FALSE, FALSE, 0); - gtk_widget_show (check2); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- ok/cancel buttons - - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); - ret = eIDCANCEL; - // ---- /hbox ---- - + auto radio1 = ui::Widget(gtk_radio_button_new_with_label( NULL, "Use Whole Map" )); + vbox.pack_start( radio1, FALSE, FALSE, 2 ); + gtk_widget_show( radio1 ); + + auto radio2 = ui::Widget(gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio1)), "Use Selected Brushes" )); + vbox.pack_start( radio2, FALSE, FALSE, 2 ); + gtk_widget_show( radio2 ); + + auto hsep = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( hsep, FALSE, FALSE, 2 ); + hsep.show(); + + auto check1 = ui::CheckButton( "Include Detail Brushes" ); + vbox.pack_start( check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); + + auto check2 = ui::CheckButton( "Select Duplicate Brushes Only" ); + vbox.pack_start( check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); + + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- ok/cancel buttons + + auto w = ui::Button( "Ok" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + ret = eIDCANCEL; + + // ---- /hbox ---- + // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - - while (loop) - gtk_main_iteration (); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); - if(gtk_toggle_button_get_active((GtkToggleButton*)radio1)) + while ( loop ) + gtk_main_iteration(); + + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radio1) ) ) { rs->nBrushOptions = BRUSH_OPT_WHOLE_MAP; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radio2)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radio2) ) ) { rs->nBrushOptions = BRUSH_OPT_SELECTED; + } + + rs->bUseDetail = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(check1) ) ? true : false; + rs->bDuplicateOnly = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(check2) ) ? true : false; - rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false; - rs->bDuplicateOnly = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false; - - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; } -EMessageBoxReturn DoPolygonBox (PolygonRS* rs) -{ - GtkWidget *window, *w, *vbox, *hbox, *vbox2, *hbox2; +EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){ + EMessageBoxReturn ret; + int loop = 1; - GtkWidget *check1, *check2, *check3; - GtkWidget *text1, *text2; + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "Polygon Builder" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + vbox.show(); - EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - - gtk_window_set_title (GTK_WINDOW (window), "Polygon Builder"); - gtk_container_border_width (GTK_CONTAINER (window), 10); - - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - - gtk_widget_realize (window); - - - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - - vbox2 = gtk_vbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2); - gtk_widget_show (vbox2); - - // ---- vbox2 ---- - - hbox2 = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2); - gtk_widget_show (hbox2); - - // ---- hbox2 ---- - - text1 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text1, "3"); - gtk_box_pack_start (GTK_BOX (hbox2), text1, FALSE, FALSE, 2); - gtk_widget_show (text1); - - w = gtk_label_new ("Number Of Sides"); - gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - // ---- /hbox2 ---- - - hbox2 = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 2); - gtk_widget_show (hbox2); - - // ---- hbox2 ---- - - text2 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text2, "8"); - gtk_box_pack_start (GTK_BOX (hbox2), text2, FALSE, FALSE, 2); - gtk_widget_show (text2); - - w = gtk_label_new ("Border Width"); - gtk_box_pack_start (GTK_BOX (hbox2), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - // ---- /hbox2 ---- - - // ---- /vbox2 ---- - - - - vbox2 = gtk_vbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 2); - gtk_widget_show (vbox2); - - // ---- vbox2 ---- - - check1 = gtk_check_button_new_with_label("Use Border"); - gtk_box_pack_start (GTK_BOX (vbox2), check1, FALSE, FALSE, 0); - gtk_widget_show (check1); - - - check2 = gtk_check_button_new_with_label("Inverse Polygon"); - gtk_box_pack_start (GTK_BOX (vbox2), check2, FALSE, FALSE, 0); - gtk_widget_show (check2); - - - check3 = gtk_check_button_new_with_label("Align Top Edge"); - gtk_box_pack_start (GTK_BOX (vbox2), check3, FALSE, FALSE, 0); - gtk_widget_show (check3); - - // ---- /vbox2 ---- - - // ---- /hbox ---- - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); - ret = eIDCANCEL; - - // ---- /hbox ---- - + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + + auto vbox2 = ui::VBox( FALSE, 10 ); + hbox.pack_start( vbox2, FALSE, FALSE, 2 ); + gtk_widget_show( vbox2 ); + + // ---- vbox2 ---- + + auto hbox2 = ui::HBox( FALSE, 10 ); + vbox2.pack_start( hbox2, FALSE, FALSE, 2 ); + gtk_widget_show( hbox2 ); + + // ---- hbox2 ---- + + auto text1 = ui::Entry( 256 ); + gtk_entry_set_text( (GtkEntry*)text1, "3" ); + hbox2.pack_start( text1, FALSE, FALSE, 2 ); + gtk_widget_show( text1 ); + + auto l = ui::Label( "Number Of Sides" ); + hbox2.pack_start( l, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( l ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( l ); + + // ---- /hbox2 ---- + + hbox2 = ui::HBox( FALSE, 10 ); + vbox2.pack_start( hbox2, FALSE, FALSE, 2 ); + gtk_widget_show( hbox2 ); + + // ---- hbox2 ---- + + auto text2 = ui::Entry( 256 ); + gtk_entry_set_text( (GtkEntry*)text2, "8" ); + hbox2.pack_start( text2, FALSE, FALSE, 2 ); + gtk_widget_show( text2 ); + + l = ui::Label( "Border Width" ); + hbox2.pack_start( l, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( l ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( l ); + + // ---- /hbox2 ---- + + // ---- /vbox2 ---- + + + + vbox2 = ui::VBox( FALSE, 10 ); + hbox.pack_start( vbox2, FALSE, FALSE, 2 ); + gtk_widget_show( vbox2 ); + + // ---- vbox2 ---- + + auto check1 = ui::CheckButton( "Use Border" ); + vbox2.pack_start( check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); + + + auto check2 = ui::CheckButton( "Inverse Polygon" ); + vbox2.pack_start( check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); + + + auto check3 = ui::CheckButton( "Align Top Edge" ); + vbox2.pack_start( check3, FALSE, FALSE, 0 ); + gtk_widget_show( check3 ); + + // ---- /vbox2 ---- + + // ---- /hbox ---- + + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + auto w = ui::Button( "Ok" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + ret = eIDCANCEL; + + // ---- /hbox ---- + // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); - + while ( loop ) + gtk_main_iteration(); + dialogError = FALSE; - if(ret == eIDOK) - { - rs->bUseBorder = gtk_toggle_button_get_active((GtkToggleButton*)check1) ? true : false; - rs->bInverse = gtk_toggle_button_get_active((GtkToggleButton*)check2) ? true : false; - rs->bAlignTop = gtk_toggle_button_get_active((GtkToggleButton*)check3) ? true : false; + if ( ret == eIDOK ) { + rs->bUseBorder = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(check1) ) ? true : false; + rs->bInverse = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(check2) ) ? true : false; + rs->bAlignTop = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(check3) ) ? true : false; - if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text1), 3, 32, "Number Of Sides", &rs->nSides)) + if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text1 ), 3, 32, "Number Of Sides", &rs->nSides ) ) { dialogError = TRUE; + } - if(rs->bUseBorder) - { - if(!ValidateTextIntRange(gtk_entry_get_text((GtkEntry*)text2), 8, 256, "Border Width", &rs->nBorderWidth)) + if ( rs->bUseBorder ) { + if ( !ValidateTextIntRange( gtk_entry_get_text( (GtkEntry*)text2 ), 8, 256, "Border Width", &rs->nBorderWidth ) ) { dialogError = TRUE; + } } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; } @@ -607,1303 +565,1413 @@ EMessageBoxReturn DoPolygonBox (PolygonRS* rs) // mars // for stair builder stuck as close as i could to the MFC version // obviously feel free to change it at will :) -EMessageBoxReturn DoBuildStairsBox(BuildStairsRS* rs) -{ - // i made widgets for just about everything ... i think that's what i need to do dunno tho - GtkWidget *window, *w, *vbox, *hbox; - GtkWidget *textStairHeight, *textRiserTex, *textMainTex; - GtkWidget *radioNorth, *radioSouth, *radioEast, *radioWest; // i'm guessing we can't just abuse 'w' for these if we're getting a value - GtkWidget *radioOldStyle, *radioBobStyle, *radioCornerStyle; - GtkWidget *checkUseDetail; - GSList *radioDirection, *radioStyle; +EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){ + GSList *radioDirection, *radioStyle; EMessageBoxReturn ret; - int loop = 1; + int loop = 1; - char *text = "Please set a value in the boxes below and press 'OK' to build the stairs"; + const char *text = "Please set a value in the boxes below and press 'OK' to build the stairs"; - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); gtk_window_set_title( GTK_WINDOW( window ), "Stair Builder" ); - - gtk_container_border_width( GTK_CONTAINER( window ), 10 ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); + gtk_widget_realize( window ); - // new vbox - vbox = gtk_vbox_new( FALSE, 10 ); - gtk_container_add( GTK_CONTAINER( window ), vbox ); + // new vbox + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); gtk_widget_show( vbox ); - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_container_add( GTK_CONTAINER( vbox ), hbox ); + auto hbox = ui::HBox( FALSE, 10 ); + vbox.add(hbox); gtk_widget_show( hbox ); - + // dunno if you want this text or not ... - w = gtk_label_new( text ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ... + ui::Widget w = ui::Label( text ); + hbox.pack_start( w, FALSE, FALSE, 0 ); // not entirely sure on all the parameters / what they do ... gtk_widget_show( w ); - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - + // ------------------------- // indenting == good way of keeping track of lines :) - // new hbox - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); - - textStairHeight = gtk_entry_new_with_max_length( 256 ); - gtk_box_pack_start( GTK_BOX( hbox ), textStairHeight, FALSE, FALSE, 1 ); - gtk_widget_show( textStairHeight ); - - w = gtk_label_new( "Stair Height" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 ); - gtk_widget_show( w ); + // new hbox + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + auto textStairHeight = ui::Entry( 256 ); + hbox.pack_start( textStairHeight, FALSE, FALSE, 1 ); + gtk_widget_show( textStairHeight ); + + w = ui::Label( "Stair Height" ); + hbox.pack_start( w, FALSE, FALSE, 1 ); + gtk_widget_show( w ); // ------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( "Direction:" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 ); + w = ui::Label( "Direction:" ); + hbox.pack_start( w, FALSE, FALSE, 5 ); gtk_widget_show( w ); // -------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); - - // radio buttons confuse me ... - // but this _looks_ right + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + // radio buttons confuse me ... + // but this _looks_ right - // djbob: actually it looks very nice :), slightly better than the way i did it - // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh + // djbob: actually it looks very nice :), slightly better than the way i did it + // edit: actually it doesn't work :P, you must pass the last radio item each time, ugh - radioNorth = gtk_radio_button_new_with_label( NULL, "North" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioNorth, FALSE, FALSE, 3 ); - gtk_widget_show( radioNorth ); + auto radioNorth = ui::Widget(gtk_radio_button_new_with_label( NULL, "North" )); + hbox.pack_start( radioNorth, FALSE, FALSE, 3 ); + gtk_widget_show( radioNorth ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNorth ) ); - - radioSouth = gtk_radio_button_new_with_label( radioDirection, "South" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioSouth, FALSE, FALSE, 2 ); - gtk_widget_show( radioSouth ); + radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNorth ) ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioSouth ) ); + auto radioSouth = ui::Widget(gtk_radio_button_new_with_label( radioDirection, "South" )); + hbox.pack_start( radioSouth, FALSE, FALSE, 2 ); + gtk_widget_show( radioSouth ); - radioEast = gtk_radio_button_new_with_label( radioDirection, "East" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioEast, FALSE, FALSE, 1 ); - gtk_widget_show( radioEast ); + radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioSouth ) ); - radioDirection = gtk_radio_button_group( GTK_RADIO_BUTTON( radioEast ) ); + auto radioEast = ui::Widget(gtk_radio_button_new_with_label( radioDirection, "East" )); + hbox.pack_start( radioEast, FALSE, FALSE, 1 ); + gtk_widget_show( radioEast ); - radioWest = gtk_radio_button_new_with_label( radioDirection, "West" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioWest, FALSE, FALSE, 0 ); - gtk_widget_show( radioWest ); + radioDirection = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioEast ) ); + + auto radioWest = ui::Widget(gtk_radio_button_new_with_label( radioDirection, "West" )); + hbox.pack_start( radioWest, FALSE, FALSE, 0 ); + gtk_widget_show( radioWest ); // --------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_label_new( "Style:" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 5 ); + w = ui::Label( "Style:" ); + hbox.pack_start( w, FALSE, FALSE, 5 ); gtk_widget_show( w ); // --------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); - - radioOldStyle = gtk_radio_button_new_with_label( NULL, "Original" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioOldStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioOldStyle ); - - radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioOldStyle ) ); - - radioBobStyle = gtk_radio_button_new_with_label( radioStyle, "Bob's Style" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioBobStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioBobStyle ); - - radioStyle = gtk_radio_button_group( GTK_RADIO_BUTTON( radioBobStyle ) ); - - radioCornerStyle = gtk_radio_button_new_with_label( radioStyle, "Corner Style" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioCornerStyle, FALSE, FALSE, 0 ); - gtk_widget_show( radioCornerStyle ); - - // err, the q3r has an if or something so you need bob style checked before this - // is "ungreyed out" but you'll need to do that, as i suck :) - - // djbob: er.... yeah um, im not at all sure how i'm gonna sort this - // djbob: think we need some button callback functions or smuffin - // FIXME: actually get around to doing what i suggested!!!! - - checkUseDetail = gtk_check_button_new_with_label( "Use Detail Brushes" ); - gtk_box_pack_start( GTK_BOX( hbox ), checkUseDetail, FALSE, FALSE, 0 ); - gtk_widget_show( checkUseDetail ); - - // --------------------------- // - - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - textMainTex = gtk_entry_new_with_max_length( 512 ); - gtk_entry_set_text(GTK_ENTRY(textMainTex), rs->mainTexture); - gtk_box_pack_start( GTK_BOX( hbox ), textMainTex, FALSE, FALSE, 0 ); + auto radioOldStyle = ui::Widget(gtk_radio_button_new_with_label( NULL, "Original" )); + hbox.pack_start( radioOldStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioOldStyle ); + + radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioOldStyle ) ); + + auto radioBobStyle = ui::Widget(gtk_radio_button_new_with_label( radioStyle, "Bob's Style" )); + hbox.pack_start( radioBobStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioBobStyle ); + + radioStyle = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioBobStyle ) ); + + auto radioCornerStyle = ui::Widget(gtk_radio_button_new_with_label( radioStyle, "Corner Style" )); + hbox.pack_start( radioCornerStyle, FALSE, FALSE, 0 ); + gtk_widget_show( radioCornerStyle ); + + // err, the q3r has an if or something so you need bob style checked before this + // is "ungreyed out" but you'll need to do that, as i suck :) + + // djbob: er.... yeah um, im not at all sure how i'm gonna sort this + // djbob: think we need some button callback functions or smuffin + // FIXME: actually get around to doing what i suggested!!!! + + auto checkUseDetail = ui::CheckButton( "Use Detail Brushes" ); + hbox.pack_start( checkUseDetail, FALSE, FALSE, 0 ); + gtk_widget_show( checkUseDetail ); + + // --------------------------- // + + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + auto textMainTex = ui::Entry( 512 ); + gtk_entry_set_text( GTK_ENTRY( textMainTex ), rs->mainTexture ); + hbox.pack_start( textMainTex, FALSE, FALSE, 0 ); gtk_widget_show( textMainTex ); - w = gtk_label_new( "Main Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 ); + w = ui::Label( "Main Texture" ); + hbox.pack_start( w, FALSE, FALSE, 1 ); gtk_widget_show( w ); // -------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - textRiserTex = gtk_entry_new_with_max_length( 512 ); - gtk_box_pack_start( GTK_BOX( hbox ), textRiserTex, FALSE, FALSE, 0 ); + auto textRiserTex = ui::Entry( 512 ); + hbox.pack_start( textRiserTex, FALSE, FALSE, 0 ); gtk_widget_show( textRiserTex ); - w = gtk_label_new( "Riser Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 1 ); + w = ui::Label( "Riser Texture" ); + hbox.pack_start( w, FALSE, FALSE, 1 ); gtk_widget_show( w ); // -------------------------- // - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); gtk_widget_show( w ); - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); - w = gtk_button_new_with_label( "OK" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); - GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); + w = ui::Button( "OK" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + gtk_widget_set_can_default( w, true ); gtk_widget_grab_default( w ); gtk_widget_show( w ); - - w = gtk_button_new_with_label( "Cancel" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); gtk_widget_show( w ); - + ret = eIDCANCEL; // +djbob: need our "little" modal loop mars :P - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); - + while ( loop ) + gtk_main_iteration(); + dialogError = FALSE; - if(ret == eIDOK) - { - rs->bUseDetail = gtk_toggle_button_get_active((GtkToggleButton*)checkUseDetail) ? true : false; + if ( ret == eIDOK ) { + rs->bUseDetail = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(checkUseDetail) ) ? true : false; - strcpy(rs->riserTexture, gtk_entry_get_text((GtkEntry*)textRiserTex)); - strcpy(rs->mainTexture, gtk_entry_get_text((GtkEntry*)textMainTex)); + strcpy( rs->riserTexture, gtk_entry_get_text( (GtkEntry*)textRiserTex ) ); + strcpy( rs->mainTexture, gtk_entry_get_text( (GtkEntry*)textMainTex ) ); - if(gtk_toggle_button_get_active((GtkToggleButton*)radioNorth)) + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioNorth) ) ) { rs->direction = MOVE_NORTH; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioSouth)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioSouth) ) ) { rs->direction = MOVE_SOUTH; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioEast)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioEast) ) ) { rs->direction = MOVE_EAST; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioWest)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioWest) ) ) { rs->direction = MOVE_WEST; + } - if(!ValidateTextInt(gtk_entry_get_text((GtkEntry*)textStairHeight), "Stair Height", &rs->stairHeight)) + if ( !ValidateTextInt( gtk_entry_get_text( (GtkEntry*)textStairHeight ), "Stair Height", &rs->stairHeight ) ) { dialogError = TRUE; + } - if(gtk_toggle_button_get_active((GtkToggleButton*)radioOldStyle)) + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioOldStyle) ) ) { rs->style = STYLE_ORIGINAL; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioBobStyle)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioBobStyle) ) ) { rs->style = STYLE_BOB; - else if(gtk_toggle_button_get_active((GtkToggleButton*)radioCornerStyle)) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(radioCornerStyle) ) ) { rs->style = STYLE_CORNER; + } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; // -djbob - + // there we go, all done ... on my end at least, not bad for a night's work } -EMessageBoxReturn DoDoorsBox(DoorRS* rs) -{ - GtkWidget *window, *hbox, *vbox, *w; - GtkWidget *textFrontBackTex, *textTrimTex; - GtkWidget *checkScaleMainH, *checkScaleMainV, *checkScaleTrimH, *checkScaleTrimV; - GtkWidget *comboMain, *comboTrim; - GtkWidget *buttonSetMain, *buttonSetTrim; - GtkWidget *radioNS, *radioEW; - GSList *radioOrientation; - TwinWidget tw1, tw2; +EMessageBoxReturn DoDoorsBox( DoorRS* rs ){ + GSList *radioOrientation; + TwinWidget tw1, tw2; EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); gtk_window_set_title( GTK_WINDOW( window ), "Door Builder" ); - - gtk_container_border_width( GTK_CONTAINER( window ), 10 ); + + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); g_object_set_data( G_OBJECT( window ), "loop", &loop ); g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_widget_realize (window); - + gtk_widget_realize( window ); + char buffer[256]; - GList *listMainTextures = NULL; - GList *listTrimTextures = NULL; - LoadGList(GetFilename(buffer, "plugins/bt/door-tex.txt"), &listMainTextures); - LoadGList(GetFilename(buffer, "plugins/bt/door-tex-trim.txt"), &listTrimTextures); - - vbox = gtk_vbox_new( FALSE, 10 ); - gtk_container_add( GTK_CONTAINER( window ), vbox ); + ui::ListStore listMainTextures = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING )); + ui::ListStore listTrimTextures = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING )); + LoadGList( GetFilename( buffer, "plugins/bt/door-tex.txt" ), listMainTextures ); + LoadGList( GetFilename( buffer, "plugins/bt/door-tex-trim.txt" ), listTrimTextures ); + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); gtk_widget_show( vbox ); // -------------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - textFrontBackTex = gtk_entry_new_with_max_length( 512 ); - gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture); - gtk_box_pack_start( GTK_BOX( hbox ), textFrontBackTex, FALSE, FALSE, 0 ); - gtk_widget_show( textFrontBackTex ); + auto textFrontBackTex = ui::Entry( 512 ); + gtk_entry_set_text( GTK_ENTRY( textFrontBackTex ), rs->mainTexture ); + hbox.pack_start( textFrontBackTex, FALSE, FALSE, 0 ); + gtk_widget_show( textFrontBackTex ); - w = gtk_label_new( "Door Front/Back Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + ui::Widget w = ui::Label( "Door Front/Back Texture" ); + hbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ------------------------ // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - textTrimTex = gtk_entry_new_with_max_length( 512 ); - gtk_box_pack_start( GTK_BOX( hbox ), textTrimTex, FALSE, FALSE, 0 ); - gtk_widget_show( textTrimTex ); + auto textTrimTex = ui::Entry( 512 ); + hbox.pack_start( textTrimTex, FALSE, FALSE, 0 ); + gtk_widget_show( textTrimTex ); - w = gtk_label_new( "Door Trim Texture" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = ui::Label( "Door Trim Texture" ); + hbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - // sp: horizontally ???? - // djbob: yes mars, u can spell :] - checkScaleMainH = gtk_check_button_new_with_label( "Scale Main Texture Horizontally" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainH, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleMainH ); + // sp: horizontally ???? + // djbob: yes mars, u can spell :] + auto checkScaleMainH = ui::CheckButton( "Scale Main Texture Horizontally" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainH ), TRUE ); + hbox.pack_start( checkScaleMainH, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleMainH ); - checkScaleTrimH = gtk_check_button_new_with_label( "Scale Trim Texture Horizontally" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimH, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleTrimH ); + auto checkScaleTrimH = ui::CheckButton( "Scale Trim Texture Horizontally" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ), TRUE ); + hbox.pack_start( checkScaleTrimH, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleTrimH ); // ---------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + auto checkScaleMainV = ui::CheckButton( "Scale Main Texture Vertically" ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE ); + hbox.pack_start( checkScaleMainV, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleMainV ); - checkScaleMainV = gtk_check_button_new_with_label( "Scale Main Texture Vertically" ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( checkScaleMainV ), TRUE); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleMainV, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleMainV ); + auto checkScaleTrimV = ui::CheckButton( "Scale Trim Texture Vertically" ); + hbox.pack_start( checkScaleTrimV, FALSE, FALSE, 0 ); + gtk_widget_show( checkScaleTrimV ); - checkScaleTrimV = gtk_check_button_new_with_label( "Scale Trim Texture Vertically" ); - gtk_box_pack_start( GTK_BOX( hbox ), checkScaleTrimV, FALSE, FALSE, 0 ); - gtk_widget_show( checkScaleTrimV ); - - // --------------------- // + // --------------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - // djbob: lists added + // djbob: lists added - comboMain = gtk_combo_new(); - gtk_box_pack_start( GTK_BOX( hbox ), comboMain, FALSE, FALSE, 0 ); - gtk_combo_set_popdown_strings( GTK_COMBO( comboMain ), listMainTextures ); - gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); - gtk_widget_show( comboMain ); + auto comboMain = ui::ComboBox(GTK_COMBO_BOX(gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listMainTextures)))); + gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0); + hbox.pack_start( comboMain, FALSE, FALSE, 0 ); + gtk_widget_show( comboMain ); - tw1.one = textFrontBackTex; - tw1.two = comboMain; + tw1.one = textFrontBackTex; + tw1.two = comboMain; - buttonSetMain = gtk_button_new_with_label( "Set As Main Texture" ); - gtk_signal_connect( GTK_OBJECT( buttonSetMain ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw1 ); - gtk_box_pack_start( GTK_BOX( hbox ), buttonSetMain, FALSE, FALSE, 0 ); - gtk_widget_show( buttonSetMain ); + auto buttonSetMain = ui::Button( "Set As Main Texture" ); + buttonSetMain.connect( "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw1 ); + hbox.pack_start( buttonSetMain, FALSE, FALSE, 0 ); + gtk_widget_show( buttonSetMain ); // ------------------- // - - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); - comboTrim = gtk_combo_new(); - gtk_box_pack_start( GTK_BOX( hbox ), comboTrim, FALSE, FALSE, 0 ); - gtk_combo_set_popdown_strings( GTK_COMBO( comboTrim ), listTrimTextures ); - gtk_combo_set_use_arrows( GTK_COMBO( comboMain ), 1 ); - gtk_widget_show( comboTrim ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + auto comboTrim = ui::ComboBox(GTK_COMBO_BOX(gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(listTrimTextures)))); + gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(comboMain), 0); + hbox.pack_start( comboTrim, FALSE, FALSE, 0 ); + gtk_widget_show( comboTrim ); - tw2.one = textTrimTex; - tw2.two = comboTrim; + tw2.one = textTrimTex; + tw2.two = comboTrim; - buttonSetTrim = gtk_button_new_with_label( "Set As Trim Texture" ); - gtk_signal_connect( GTK_OBJECT( buttonSetTrim ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback_settex ), &tw2 ); - gtk_box_pack_start( GTK_BOX( hbox ), buttonSetTrim, FALSE, FALSE, 0 ); - gtk_widget_show( buttonSetTrim ); + auto buttonSetTrim = ui::Button( "Set As Trim Texture" ); + buttonSetTrim.connect( "clicked", G_CALLBACK( dialog_button_callback_settex ), &tw2 ); + hbox.pack_start( buttonSetTrim, FALSE, FALSE, 0 ); + gtk_widget_show( buttonSetTrim ); // ------------------ // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_label_new( "Orientation" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = ui::Label( "Orientation" ); + hbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); - // argh more radio buttons! - radioNS = gtk_radio_button_new_with_label( NULL, "North - South" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioNS, FALSE, FALSE, 0 ); - gtk_widget_show( radioNS ); + // argh more radio buttons! + auto radioNS = ui::Widget(gtk_radio_button_new_with_label( NULL, "North - South" )); + hbox.pack_start( radioNS, FALSE, FALSE, 0 ); + gtk_widget_show( radioNS ); - radioOrientation = gtk_radio_button_group( GTK_RADIO_BUTTON( radioNS ) ); + radioOrientation = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radioNS ) ); - radioEW = gtk_radio_button_new_with_label( radioOrientation, "East - West" ); - gtk_box_pack_start( GTK_BOX( hbox ), radioEW, FALSE, FALSE, 0 ); - gtk_widget_show( radioEW ); + auto radioEW = ui::Widget(gtk_radio_button_new_with_label( radioOrientation, "East - West" )); + hbox.pack_start( radioEW, FALSE, FALSE, 0 ); + gtk_widget_show( radioEW ); // ----------------- // - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_button_new_with_label( "OK" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); - GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); - gtk_widget_grab_default( w ); - gtk_widget_show( w ); - - w = gtk_button_new_with_label( "Cancel" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); - gtk_widget_show( w ); - ret = eIDCANCEL; + w = ui::Button( "OK" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + ret = eIDCANCEL; // ----------------- // //+djbob - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - - while (loop) - gtk_main_iteration (); - - strcpy(rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) )); - strcpy(rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) )); - - rs->bScaleMainH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainH)) ? true : false; - rs->bScaleMainV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleMainV)) ? true : false; - rs->bScaleTrimH = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimH)) ? true : false; - rs->bScaleTrimV = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkScaleTrimV)) ? true : false; - - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioNS))) + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + + while ( loop ) + gtk_main_iteration(); + + strcpy( rs->mainTexture, gtk_entry_get_text( GTK_ENTRY( textFrontBackTex ) ) ); + strcpy( rs->trimTexture, gtk_entry_get_text( GTK_ENTRY( textTrimTex ) ) ); + + rs->bScaleMainH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainH ) ) ? true : false; + rs->bScaleMainV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleMainV ) ) ? true : false; + rs->bScaleTrimH = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimH ) ) ? true : false; + rs->bScaleTrimV = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( checkScaleTrimV ) ) ? true : false; + + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioNS ) ) ) { rs->nOrientation = DIRECTION_NS; - else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radioEW))) + } + else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radioEW ) ) ) { rs->nOrientation = DIRECTION_EW; - - gtk_grab_remove (window); - gtk_widget_destroy (window); + } + + gtk_grab_remove( window ); + window.destroy(); return ret; //-djbob } -EMessageBoxReturn DoPathPlotterBox(PathPlotterRS* rs) -{ - GtkWidget *window, *w, *vbox, *hbox; - - GtkWidget *text1, *text2, *text3; - GtkWidget *check1, *check2; +EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){ + ui::Widget w{ui::null}; EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - - gtk_window_set_title (GTK_WINDOW (window), "Texture Reset"); - gtk_container_border_width (GTK_CONTAINER (window), 10); - - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - - gtk_widget_realize (window); - - - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + gtk_widget_show( vbox ); + // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - text1 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text1, "25"); - gtk_box_pack_start (GTK_BOX (hbox), text1, FALSE, FALSE, 2); - gtk_widget_show (text1); - - w = gtk_label_new ("Number Of Points"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - // ---- /hbox ---- - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - text2 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text2, "3"); - gtk_box_pack_start (GTK_BOX (hbox), text2, FALSE, FALSE, 2); - gtk_widget_show (text2); - - w = gtk_label_new ("Multipler"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - // ---- /hbox ---- - - w = gtk_label_new ("Path Distance = dist(start -> apex) * multiplier"); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - text3 = gtk_entry_new_with_max_length(256); - gtk_entry_set_text((GtkEntry*)text3, "-800"); - gtk_box_pack_start (GTK_BOX (hbox), text3, FALSE, FALSE, 2); - gtk_widget_show (text3); - - w = gtk_label_new ("Gravity"); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); - - // ---- /hbox ---- - - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + auto text1 = ui::Entry( 256 ); + gtk_entry_set_text( text1, "25" ); + hbox.pack_start( text1, FALSE, FALSE, 2 ); + gtk_widget_show( text1 ); + + w = ui::Label( "Number Of Points" ); + hbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); + + // ---- /hbox ---- + + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + auto text2 = ui::Entry( 256 ); + gtk_entry_set_text( text2, "3" ); + hbox.pack_start( text2, FALSE, FALSE, 2 ); + gtk_widget_show( text2 ); + + w = ui::Label( "Multipler" ); + hbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); + + // ---- /hbox ---- + + w = ui::Label( "Path Distance = dist(start -> apex) * multiplier" ); + vbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); + + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + auto text3 = ui::Entry( 256 ); + gtk_entry_set_text( text3, "-800" ); + hbox.pack_start( text3, FALSE, FALSE, 2 ); + gtk_widget_show( text3 ); + + w = ui::Label( "Gravity" ); + hbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); - check1 = gtk_check_button_new_with_label( "No Dynamic Update" ); - gtk_box_pack_start( GTK_BOX( vbox ), check1, FALSE, FALSE, 0 ); - gtk_widget_show( check1 ); + // ---- /hbox ---- + + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); + + auto check1 = ui::CheckButton( "No Dynamic Update" ); + vbox.pack_start( check1, FALSE, FALSE, 0 ); + gtk_widget_show( check1 ); - check2 = gtk_check_button_new_with_label( "Show Bounding Lines" ); - gtk_box_pack_start( GTK_BOX( vbox ), check2, FALSE, FALSE, 0 ); - gtk_widget_show( check2 ); + auto check2 = ui::CheckButton( "Show Bounding Lines" ); + vbox.pack_start( check2, FALSE, FALSE, 0 ); + gtk_widget_show( check2 ); // ---- /vbox ---- // ----------------- // - w = gtk_hseparator_new(); - gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); - gtk_widget_show( w ); + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); // ----------------- // - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 ); - gtk_widget_show( hbox ); + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); - w = gtk_button_new_with_label( "Enable" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); - gtk_widget_show( w ); - - GTK_WIDGET_SET_FLAGS( w, GTK_CAN_DEFAULT ); - gtk_widget_grab_default( w ); + w = ui::Button( "Enable" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); + gtk_widget_show( w ); - w = gtk_button_new_with_label( "Disable" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) ); - gtk_widget_show( w ); - - w = gtk_button_new_with_label( "Cancel" ); - gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 ); - gtk_signal_connect( GTK_OBJECT( w ), "clicked", GTK_SIGNAL_FUNC( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); - gtk_widget_show( w ); - - ret = eIDCANCEL; + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + + w = ui::Button( "Disable" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDNO ) ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + + ret = eIDCANCEL; // ----------------- // - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); - + while ( loop ) + gtk_main_iteration(); + dialogError = FALSE; - if(ret == eIDYES) - { - if(!ValidateTextIntRange(gtk_entry_get_text(GTK_ENTRY(text1)), 1, 200, "Number Of Points", &rs->nPoints)) + if ( ret == eIDYES ) { + if ( !ValidateTextIntRange( gtk_entry_get_text( GTK_ENTRY( text1 ) ), 1, 200, "Number Of Points", &rs->nPoints ) ) { dialogError = TRUE; + } - if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text2)), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier)) + if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text2 ) ), 1.0f, 10.0f, "Multiplier", &rs->fMultiplier ) ) { dialogError = TRUE; + } - if(!ValidateTextFloatRange(gtk_entry_get_text(GTK_ENTRY(text3)), -10000.0f, -1.0f, "Gravity", &rs->fGravity)) + if ( !ValidateTextFloatRange( gtk_entry_get_text( GTK_ENTRY( text3 ) ), -10000.0f, -1.0f, "Gravity", &rs->fGravity ) ) { dialogError = TRUE; + } - rs->bNoUpdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check1)) ? true : false; - rs->bShowExtra = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check2)) ? true : false; + rs->bNoUpdate = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check1 ) ) ? true : false; + rs->bShowExtra = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2 ) ) ? true : false; } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; } -EMessageBoxReturn DoCTFColourChangeBox () -{ - GtkWidget *window, *w, *vbox, *hbox; +EMessageBoxReturn DoCTFColourChangeBox(){ + ui::Widget w{ui::null}; EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - - gtk_window_set_title (GTK_WINDOW (window), "CTF Colour Changer"); - gtk_container_border_width (GTK_CONTAINER (window), 10); - - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); - - gtk_widget_realize (window); - - - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "CTF Colour Changer" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + gtk_widget_show( vbox ); + // ---- vbox ---- - hbox = gtk_hbox_new( FALSE, 10 ); - gtk_box_pack_start( GTK_BOX( vbox ), hbox, TRUE, TRUE, 0 ); - gtk_widget_show( hbox ); - - // ---- hbox ---- ok/cancel buttons - - w = gtk_button_new_with_label ("Red->Blue"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Blue->Red"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES)); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); - ret = eIDCANCEL; + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, TRUE, TRUE, 0 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- ok/cancel buttons + + w = ui::Button( "Red->Blue" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Blue->Red" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + ret = eIDCANCEL; + + // ---- /hbox ---- - // ---- /hbox ---- - // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - - while (loop) - gtk_main_iteration (); + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + + while ( loop ) + gtk_main_iteration(); - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; } -EMessageBoxReturn DoResetTextureBox (ResetTextureRS* rs) -{ +EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){ Str texSelected; - GtkWidget *window, *w, *vbox, *hbox, *frame, *table; + ui::Widget w{ui::null}; EMessageBoxReturn ret; - int loop = 1; + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); + gtk_window_set_title( GTK_WINDOW( window ), "Texture Reset" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); - gtk_window_set_title (GTK_WINDOW (window), "Texture Reset"); - gtk_container_border_width (GTK_CONTAINER (window), 10); + gtk_widget_realize( window ); - g_object_set_data (G_OBJECT (window), "loop", &loop); - g_object_set_data (G_OBJECT (window), "ret", &ret); + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + vbox.show(); - gtk_widget_realize (window); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + // ---- hbox ---- - texSelected = "Currently Selected Face: "; -#if 0 - if(g_SelectedFaceTable.m_pfnGetSelectedFaceCount() == 1) { - texSelected += GetCurrentTexture(); - } -#endif + texSelected = "Currently Selected Texture: "; + texSelected += GetCurrentTexture(); - w = gtk_label_new (texSelected); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 2); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_widget_show (w); + w = ui::Label( texSelected ); + hbox.pack_start( w, FALSE, FALSE, 2 ); + gtk_label_set_justify( GTK_LABEL( w ), GTK_JUSTIFY_LEFT ); + gtk_widget_show( w ); // ---- /hbox ---- - frame = gtk_frame_new ("Reset Texture Names"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + auto frame = ui::Frame( "Reset Texture Names" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + auto table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - dlgTexReset.cbTexChange = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbTexChange), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbTexChange); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbTexChange, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("Old Name: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editTexOld = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexOld), rs->textureName); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexOld, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editTexOld); - - w = gtk_label_new ("New Name: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editTexNew = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editTexNew), rs->textureName); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editTexNew, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editTexNew); + dlgTexReset.cbTexChange = ui::CheckButton( "Enabled" ); + dlgTexReset.cbTexChange.connect( "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbTexChange ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbTexChange, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "Old Name: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editTexOld = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexOld ), rs->textureName ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexOld, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editTexOld ); + + w = ui::Label( "New Name: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editTexNew = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editTexNew ), rs->textureName ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editTexNew, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editTexNew ); // ---- /frame ---- - frame = gtk_frame_new ("Reset Scales"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = ui::Frame( "Reset Scales" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - dlgTexReset.cbScaleHor = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbScaleHor); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleHor, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Horizontal Scale: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editScaleHor = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleHor), "0.5"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleHor, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editScaleHor); - - - dlgTexReset.cbScaleVert = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbScaleVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbScaleVert); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbScaleVert, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Vertical Scale: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editScaleVert = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editScaleVert), "0.5"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editScaleVert, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editScaleVert); + dlgTexReset.cbScaleHor = ui::CheckButton( "Enabled" ); + dlgTexReset.cbScaleHor.connect( "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbScaleHor ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleHor, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "New Horizontal Scale: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editScaleHor = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleHor ), "0.5" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleHor, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editScaleHor ); + + + dlgTexReset.cbScaleVert = ui::CheckButton( "Enabled" ); + dlgTexReset.cbScaleVert.connect( "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbScaleVert ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbScaleVert, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "New Vertical Scale: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editScaleVert = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editScaleVert ), "0.5" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editScaleVert, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editScaleVert ); // ---- /frame ---- - frame = gtk_frame_new ("Reset Shift"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - - // ---- frame ---- - - dlgTexReset.cbShiftHor = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftHor), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbShiftHor); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftHor, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Horizontal Shift: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editShiftHor = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftHor), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftHor, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editShiftHor); - - - dlgTexReset.cbShiftVert = gtk_check_button_new_with_label("Enabled"); - gtk_signal_connect (GTK_OBJECT (dlgTexReset.cbShiftVert), "toggled", GTK_SIGNAL_FUNC (dialog_button_callback_texreset_update), NULL); - gtk_widget_show (dlgTexReset.cbShiftVert); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbShiftVert, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Vertical Shift: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editShiftVert = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editShiftVert), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editShiftVert, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editShiftVert); + frame = ui::Frame( "Reset Shift" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); + + table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + + // ---- frame ---- + + dlgTexReset.cbShiftHor = ui::CheckButton( "Enabled" ); + dlgTexReset.cbShiftHor.connect( "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbShiftHor ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftHor, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "New Horizontal Shift: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editShiftHor = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftHor ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftHor, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editShiftHor ); + + + dlgTexReset.cbShiftVert = ui::CheckButton( "Enabled" ); + dlgTexReset.cbShiftVert.connect( "toggled", G_CALLBACK( dialog_button_callback_texreset_update ), NULL ); + gtk_widget_show( dlgTexReset.cbShiftVert ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbShiftVert, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "New Vertical Shift: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editShiftVert = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editShiftVert ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editShiftVert, 2, 3, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editShiftVert ); // ---- /frame ---- - frame = gtk_frame_new ("Reset Rotation"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - - table = gtk_table_new (1, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - - // ---- frame ---- - - dlgTexReset.cbRotation = gtk_check_button_new_with_label("Enabled"); - gtk_widget_show (dlgTexReset.cbRotation); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.cbRotation, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - - w = gtk_label_new ("New Rotation Value: "); - gtk_table_attach (GTK_TABLE (table), w, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - dlgTexReset.editRotation = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(dlgTexReset.editRotation), "0"); - gtk_table_attach (GTK_TABLE (table), dlgTexReset.editRotation, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (dlgTexReset.editRotation); + frame = ui::Frame( "Reset Rotation" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); + + table = ui::Table( 1, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); + + // ---- frame ---- + + dlgTexReset.cbRotation = ui::CheckButton( "Enabled" ); + gtk_widget_show( dlgTexReset.cbRotation ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.cbRotation, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + + w = ui::Label( "New Rotation Value: " ); + gtk_table_attach( GTK_TABLE( table ), w, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + dlgTexReset.editRotation = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( dlgTexReset.editRotation ), "0" ); + gtk_table_attach( GTK_TABLE( table ), dlgTexReset.editRotation, 2, 3, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( dlgTexReset.editRotation ); // ---- /frame ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + // ---- hbox ---- - w = gtk_button_new_with_label ("Use Selected Brushes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Use All Brushes"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDYES)); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); + w = ui::Button( "Use Selected Brushes" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Use All Brushes" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDYES ) ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); ret = eIDCANCEL; // ---- /hbox ---- - + // ---- /vbox ---- - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + Update_TextureReseter(); bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); - + while ( loop ) + gtk_main_iteration(); + dialogError = FALSE; - if(ret != eIDCANCEL) - { - rs->bResetRotation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation )); - if(rs->bResetRotation) - if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editRotation)), "Rotation", &rs->rotation)) + if ( ret != eIDCANCEL ) { + rs->bResetRotation = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbRotation ) ); + if ( rs->bResetRotation ) { + if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editRotation ) ), "Rotation", &rs->rotation ) ) { dialogError = TRUE; + } + } - rs->bResetScale[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor )); - if(rs->bResetScale[0]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleHor)), "Horizontal Scale", &rs->fScale[0])) + rs->bResetScale[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleHor ) ); + if ( rs->bResetScale[0] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleHor ) ), "Horizontal Scale", &rs->fScale[0] ) ) { dialogError = TRUE; + } + } - rs->bResetScale[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert )); - if(rs->bResetScale[1]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editScaleVert)), "Vertical Scale", &rs->fScale[1])) + rs->bResetScale[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbScaleVert ) ); + if ( rs->bResetScale[1] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editScaleVert ) ), "Vertical Scale", &rs->fScale[1] ) ) { dialogError = TRUE; + } + } - rs->bResetShift[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor )); - if(rs->bResetShift[0]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftHor)), "Horizontal Shift", &rs->fShift[0])) + rs->bResetShift[0] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftHor ) ); + if ( rs->bResetShift[0] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftHor ) ), "Horizontal Shift", &rs->fShift[0] ) ) { dialogError = TRUE; + } + } - rs->bResetShift[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert )); - if(rs->bResetShift[1]) - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(dlgTexReset.editShiftVert)), "Vertical Shift", &rs->fShift[1])) + rs->bResetShift[1] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbShiftVert ) ); + if ( rs->bResetShift[1] ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editShiftVert ) ), "Vertical Shift", &rs->fShift[1] ) ) { dialogError = TRUE; + } + } - rs->bResetTextureName = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange )); - if(rs->bResetTextureName) - { - strcpy(rs->textureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexOld ))); - strcpy(rs->newTextureName, gtk_entry_get_text(GTK_ENTRY( dlgTexReset.editTexNew ))); + rs->bResetTextureName = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( dlgTexReset.cbTexChange ) ); + if ( rs->bResetTextureName ) { + strcpy( rs->textureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexOld ) ) ); + strcpy( rs->newTextureName, gtk_entry_get_text( GTK_ENTRY( dlgTexReset.editTexNew ) ) ); } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; } -EMessageBoxReturn DoTrainThingBox (TrainThingRS* rs) -{ +EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){ Str texSelected; - GtkWidget *window, *w, *vbox, *hbox, *frame, *table; + ui::Widget w{ui::null}; - GtkWidget *radiusX, *radiusY; - GtkWidget *angleStart, *angleEnd; - GtkWidget *heightStart, *heightEnd; - GtkWidget *numPoints; + ui::Widget radiusX{ui::null}, radiusY{ui::null}; + ui::Widget angleStart{ui::null}, angleEnd{ui::null}; + ui::Widget heightStart{ui::null}, heightEnd{ui::null}; + ui::Widget numPoints{ui::null}; EMessageBoxReturn ret; - int loop = 1; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialog_delete_callback), NULL); - gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL); - - gtk_window_set_title (GTK_WINDOW (window), "Train Thing"); - gtk_container_border_width (GTK_CONTAINER (window), 10); - - gtk_object_set_data (GTK_OBJECT (window), "loop", &loop); - gtk_object_set_data (GTK_OBJECT (window), "ret", &ret); - - gtk_widget_realize (window); - - vbox = gtk_vbox_new (FALSE, 10); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - + int loop = 1; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "Train Thing" ); + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + vbox.show(); + // ---- vbox ---- - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); + auto hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); // ---- /hbox ---- - frame = gtk_frame_new ("Radii"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + auto frame = ui::Frame( "Radii" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + auto table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("X: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "X: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - radiusX = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(radiusX), "100"); - gtk_table_attach (GTK_TABLE (table), radiusX, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (radiusX); + radiusX = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( radiusX ), "100" ); + gtk_table_attach( GTK_TABLE( table ), radiusX, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( radiusX ); - w = gtk_label_new ("Y: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "Y: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - radiusY = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(radiusY), "100"); - gtk_table_attach (GTK_TABLE (table), radiusY, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (radiusY); + radiusY = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( radiusY ), "100" ); + gtk_table_attach( GTK_TABLE( table ), radiusY, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( radiusY ); - frame = gtk_frame_new ("Angles"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = ui::Frame( "Angles" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Start: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "Start: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - angleStart = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(angleStart), "0"); - gtk_table_attach (GTK_TABLE (table), angleStart, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (angleStart); + angleStart = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( angleStart ), "0" ); + gtk_table_attach( GTK_TABLE( table ), angleStart, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( angleStart ); - w = gtk_label_new ("End: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "End: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - angleEnd = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(angleEnd), "90"); - gtk_table_attach (GTK_TABLE (table), angleEnd, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (angleEnd); + angleEnd = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( angleEnd ), "90" ); + gtk_table_attach( GTK_TABLE( table ), angleEnd, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( angleEnd ); - frame = gtk_frame_new ("Height"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = ui::Frame( "Height" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Start: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "Start: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - heightStart = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(heightStart), "0"); - gtk_table_attach (GTK_TABLE (table), heightStart, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (heightStart); + heightStart = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( heightStart ), "0" ); + gtk_table_attach( GTK_TABLE( table ), heightStart, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( heightStart ); - w = gtk_label_new ("End: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); + w = ui::Label( "End: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); - heightEnd = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(heightEnd), "0"); - gtk_table_attach (GTK_TABLE (table), heightEnd, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (heightEnd); + heightEnd = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( heightEnd ), "0" ); + gtk_table_attach( GTK_TABLE( table ), heightEnd, 1, 2, 1, 2, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( heightEnd ); - frame = gtk_frame_new ("Points"); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + frame = ui::Frame( "Points" ); + gtk_widget_show( frame ); + vbox.pack_start( frame, FALSE, TRUE, 0 ); - table = gtk_table_new (2, 3, TRUE); - gtk_widget_show (table); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); + table = ui::Table( 2, 3, TRUE ); + table.show(); + frame.add(table); + gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); + gtk_table_set_col_spacings( GTK_TABLE( table ), 5 ); + gtk_container_set_border_width( GTK_CONTAINER( table ), 5 ); // ---- frame ---- - w = gtk_label_new ("Number: "); - gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (w); - - numPoints = gtk_entry_new_with_max_length(256); - gtk_entry_set_text(GTK_ENTRY(numPoints), "0"); - gtk_table_attach (GTK_TABLE (table), numPoints, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_widget_show (numPoints); - - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); - gtk_widget_show (hbox); - - // ---- hbox ---- - - w = gtk_button_new_with_label ("Ok"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDOK)); - - GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); - gtk_widget_grab_default (w); - gtk_widget_show (w); - - w = gtk_button_new_with_label ("Cancel"); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (w), "clicked", GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (eIDCANCEL)); - gtk_widget_show (w); - ret = eIDCANCEL; - - // ---- /hbox ---- - - - - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_widget_show (window); - gtk_grab_add (window); - + w = ui::Label( "Number: " ); + gtk_table_attach( GTK_TABLE( table ), w, 0, 1, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( w ); + + numPoints = ui::Entry( 256 ); + gtk_entry_set_text( GTK_ENTRY( numPoints ), "0" ); + gtk_table_attach( GTK_TABLE( table ), numPoints, 1, 2, 0, 1, + (GtkAttachOptions) ( GTK_FILL ), + (GtkAttachOptions) ( 0 ), 0, 0 ); + gtk_widget_show( numPoints ); + + + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 2 ); + gtk_widget_show( hbox ); + + // ---- hbox ---- + + w = ui::Button( "Ok" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + ret = eIDCANCEL; + + // ---- /hbox ---- + + + + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + bool dialogError = TRUE; - while (dialogError) + while ( dialogError ) { loop = 1; - while (loop) - gtk_main_iteration (); - + while ( loop ) + gtk_main_iteration(); + dialogError = FALSE; - if(ret != eIDCANCEL) - { - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusX)), "Radius (X)", &rs->fRadiusX)) + if ( ret != eIDCANCEL ) { + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusX ) ), "Radius (X)", &rs->fRadiusX ) ) { dialogError = TRUE; + } + + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( radiusY ) ), "Radius (Y)", &rs->fRadiusY ) ) { + dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(radiusY)), "Radius (Y)", &rs->fRadiusY)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleStart ) ), "Angle (Start)", &rs->fStartAngle ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleStart)), "Angle (Start)", &rs->fStartAngle)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( angleEnd ) ), "Angle (End)", &rs->fEndAngle ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(angleEnd)), "Angle (End)", &rs->fEndAngle)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightStart ) ), "Height (Start)", &rs->fStartHeight ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightStart)), "Height (Start)", &rs->fStartHeight)) + if ( !ValidateTextFloat( gtk_entry_get_text( GTK_ENTRY( heightEnd ) ), "Height (End)", &rs->fEndHeight ) ) { dialogError = TRUE; + } - if(!ValidateTextFloat(gtk_entry_get_text(GTK_ENTRY(heightEnd)), "Height (End)", &rs->fEndHeight)) + if ( !ValidateTextInt( gtk_entry_get_text( GTK_ENTRY( numPoints ) ), "Num Points", &rs->iNumPoints ) ) { dialogError = TRUE; + } + } + } + + gtk_grab_remove( window ); + window.destroy(); + + return ret; +} +// ailmanki +// add a simple input for the MakeChain thing.. +EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){ + ui::Widget w{ui::null}; + ui::Entry textlinkNum{ui::null}, textlinkName{ui::null}; + EMessageBoxReturn ret; + int loop = 1; + + const char *text = "Please set a value in the boxes below and press 'OK' to make a chain"; + + auto window = ui::Window( ui::window_type::TOP ); + + window.connect( "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); + window.connect( "destroy", G_CALLBACK( gtk_widget_destroy ), NULL ); + + gtk_window_set_title( GTK_WINDOW( window ), "Make Chain" ); + + gtk_container_set_border_width( GTK_CONTAINER( window ), 10 ); + + g_object_set_data( G_OBJECT( window ), "loop", &loop ); + g_object_set_data( G_OBJECT( window ), "ret", &ret ); + + gtk_widget_realize( window ); + + // new vbox + auto vbox = ui::VBox( FALSE, 10 ); + window.add(vbox); + vbox.show(); + + auto hbox = ui::HBox( FALSE, 10 ); + vbox.add(hbox); + hbox.show(); + + // dunno if you want this text or not ... + w = ui::Label( text ); + hbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); + + w = ui::Widget(gtk_hseparator_new()); + vbox.pack_start( w, FALSE, FALSE, 0 ); + gtk_widget_show( w ); + + // ------------------------- // + + // new hbox + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + textlinkNum = ui::Entry( 256 ); + hbox.pack_start( textlinkNum, FALSE, FALSE, 1 ); + gtk_widget_show( textlinkNum ); + + w = ui::Label( "Number of elements in chain" ); + hbox.pack_start( w, FALSE, FALSE, 1 ); + gtk_widget_show( w ); + + // -------------------------- // - if(!ValidateTextInt(gtk_entry_get_text(GTK_ENTRY(numPoints)), "Num Points", &rs->iNumPoints)) + hbox = ui::HBox( FALSE, 10 ); + vbox.pack_start( hbox, FALSE, FALSE, 0 ); + gtk_widget_show( hbox ); + + textlinkName = ui::Entry( 256 ); + hbox.pack_start( textlinkName, FALSE, FALSE, 0 ); + gtk_widget_show( textlinkName ); + + w = ui::Label( "Basename for chain's targetnames." ); + hbox.pack_start( w, FALSE, FALSE, 1 ); + gtk_widget_show( w ); + + + w = ui::Button( "OK" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDOK ) ); + gtk_widget_set_can_default( w, true ); + gtk_widget_grab_default( w ); + gtk_widget_show( w ); + + w = ui::Button( "Cancel" ); + hbox.pack_start( w, TRUE, TRUE, 0 ); + w.connect( "clicked", G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( eIDCANCEL ) ); + gtk_widget_show( w ); + + ret = eIDCANCEL; + + gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); + gtk_widget_show( window ); + gtk_grab_add( window ); + + bool dialogError = TRUE; + while ( dialogError ) + { + loop = 1; + while ( loop ) + gtk_main_iteration(); + + dialogError = FALSE; + + if ( ret == eIDOK ) { + strcpy( rs->linkName, gtk_entry_get_text( textlinkName ) ); + if ( !ValidateTextInt( gtk_entry_get_text( textlinkNum ), "Elements", &rs->linkNum ) ) { dialogError = TRUE; + } } } - gtk_grab_remove (window); - gtk_widget_destroy (window); + gtk_grab_remove( window ); + window.destroy(); return ret; }