X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=radiant%2Fdialog.cpp;h=c6672ae4c5af9564077f857399b8aa28883b7892;hp=3f24bf84dc15398bff311da864ead0fc130dffce;hb=a9e5bfdf2a458e89978ee52ebbd3711884b54b29;hpb=3844ff04ac553a914d46b891ebc84fdd82deb624 diff --git a/radiant/dialog.cpp b/radiant/dialog.cpp index 3f24bf84..c6672ae4 100644 --- a/radiant/dialog.cpp +++ b/radiant/dialog.cpp @@ -1,23 +1,23 @@ /* -Copyright (C) 1999-2006 Id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2006 Id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant 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 General Public License for more details. + GtkRadiant 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 General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ // // Base dialog class, provides a way to run modal dialogs and @@ -28,6 +28,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "dialog.h" +#include + #include "debugging/debugging.h" @@ -35,19 +37,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "stream/stringstream.h" #include "convert.h" #include "gtkutil/dialog.h" @@ -58,87 +47,81 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "gtkmisc.h" -GtkEntry* DialogEntry_new() -{ - GtkEntry* entry = GTK_ENTRY(gtk_entry_new()); - gtk_widget_show(GTK_WIDGET(entry)); - gtk_widget_set_size_request(GTK_WIDGET(entry), 64, -1); - return entry; +ui::Entry DialogEntry_new(){ + auto entry = ui::Entry(ui::New); + entry.show(); + entry.dimensions(64, -1); + return entry; } class DialogEntryRow { public: - DialogEntryRow(GtkWidget* row, GtkEntry* entry) : m_row(row), m_entry(entry) - { - } - GtkWidget* m_row; - GtkEntry* m_entry; +DialogEntryRow( ui::Widget row, ui::Entry entry ) : m_row( row ), m_entry( entry ){ +} +ui::Widget m_row; +ui::Entry m_entry; }; -DialogEntryRow DialogEntryRow_new(const char* name) -{ - GtkWidget* alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); - gtk_widget_show(alignment); +DialogEntryRow DialogEntryRow_new( const char* name ){ + auto alignment = ui::Alignment( 0.0, 0.5, 0.0, 0.0 ); + alignment.show(); - GtkEntry* entry = DialogEntry_new(); - gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(entry)); + auto entry = DialogEntry_new(); + alignment.add(entry); - return DialogEntryRow(GTK_WIDGET(DialogRow_new(name, alignment)), entry); + return DialogEntryRow( ui::Widget(DialogRow_new( name, alignment )), entry ); } -GtkSpinButton* DialogSpinner_new(double value, double lower, double upper, int fraction) -{ - double step = 1.0 / double(fraction); - unsigned int digits = 0; - for(;fraction > 1; fraction /= 10) - { - ++digits; - } - GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(value, lower, upper, step, 10, 0)), step, digits)); - gtk_widget_show(GTK_WIDGET(spin)); - gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1); - return spin; +ui::SpinButton DialogSpinner_new( double value, double lower, double upper, int fraction ){ + double step = 1.0 / double(fraction); + unsigned int digits = 0; + for (; fraction > 1; fraction /= 10 ) + { + ++digits; + } + auto spin = ui::SpinButton( ui::Adjustment( value, lower, upper, step, 10, 0 ), step, digits ); + spin.show(); + spin.dimensions(64, -1); + return spin; } class DialogSpinnerRow { public: - DialogSpinnerRow(GtkWidget* row, GtkSpinButton* spin) : m_row(row), m_spin(spin) - { - } - GtkWidget* m_row; - GtkSpinButton* m_spin; +DialogSpinnerRow( ui::Widget row, GtkSpinButton* spin ) : m_row( row ), m_spin( spin ){ +} +ui::Widget m_row; +ui::SpinButton m_spin; }; -DialogSpinnerRow DialogSpinnerRow_new(const char* name, double value, double lower, double upper, int fraction) -{ - GtkWidget* alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); - gtk_widget_show(alignment); +DialogSpinnerRow DialogSpinnerRow_new( const char* name, double value, double lower, double upper, int fraction ){ + auto alignment = ui::Alignment( 0.0, 0.5, 0.0, 0.0 ); + alignment.show(); - GtkSpinButton* spin = DialogSpinner_new(value, lower, upper, fraction); - gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(spin)); + auto spin = DialogSpinner_new( value, lower, upper, fraction ); + alignment.add(spin); - return DialogSpinnerRow(GTK_WIDGET(DialogRow_new(name, alignment)), spin); + return DialogSpinnerRow( ui::Widget(DialogRow_new( name, alignment )), spin ); } template< - typename Type_, - typename Other_, - void(*Import)(Type_&, Other_), - void(*Export)(Type_&, const Callback1&) -> + typename Type_, + typename Other_, + void( *Import ) ( Type_&, Other_ ), + void( *Export ) ( Type_&, const Callback1& ) + > class ImportExport { public: - typedef Type_ Type; - typedef Other_ Other; +typedef Type_ Type; +typedef Other_ Other; - typedef ReferenceCaller1 ImportCaller; - typedef ReferenceCaller1&, Export> ExportCaller; +typedef ReferenceCaller1 ImportCaller; +typedef ReferenceCaller1&, Export> ExportCaller; }; typedef ImportExport BoolImportExport; @@ -149,134 +132,95 @@ typedef ImportExport Stri -void BoolToggleImport(GtkToggleButton& widget, bool value) -{ - gtk_toggle_button_set_active(&widget, value); +void BoolToggleImport( GtkToggleButton& widget, bool value ){ + gtk_toggle_button_set_active( &widget, value ); } -void BoolToggleExport(GtkToggleButton& widget, const BoolImportCallback& importCallback) -{ - importCallback(gtk_toggle_button_get_active(&widget) != FALSE); +void BoolToggleExport( GtkToggleButton& widget, const BoolImportCallback& importCallback ){ + importCallback( gtk_toggle_button_get_active( &widget ) != FALSE ); } typedef ImportExport BoolToggleImportExport; -void IntRadioImport(GtkRadioButton& widget, int index) -{ - radio_button_set_active(&widget, index); +void IntRadioImport( GtkRadioButton& widget, int index ){ + radio_button_set_active( ui::RadioButton(&widget), index ); } -void IntRadioExport(GtkRadioButton& widget, const IntImportCallback& importCallback) -{ - importCallback(radio_button_get_active(&widget)); +void IntRadioExport( GtkRadioButton& widget, const IntImportCallback& importCallback ){ + importCallback( radio_button_get_active( ui::RadioButton(&widget) ) ); } typedef ImportExport IntRadioImportExport; -template -class StringFromType -{ - StringOutputStream value; -public: - StringFromType(const Type& type) - { - value << Formatter(type); - } - operator const char*() const - { - return value.c_str(); - } -}; - -typedef StringFromType LocaleToUTF8; -typedef StringFromType UTF8ToLocale; - -void TextEntryImport(GtkEntry& widget, const char* text) -{ - gtk_entry_set_text(&widget, LocaleToUTF8(text)); +void TextEntryImport( GtkEntry& widget, const char* text ){ + ui::Entry(&widget).text(text); } -void TextEntryExport(GtkEntry& widget, const StringImportCallback& importCallback) -{ - importCallback(UTF8ToLocale(gtk_entry_get_text(&widget))); +void TextEntryExport( GtkEntry& widget, const StringImportCallback& importCallback ){ + importCallback( gtk_entry_get_text( &widget ) ); } typedef ImportExport TextEntryImportExport; -void IntEntryImport(GtkEntry& widget, int value) -{ - entry_set_int(&widget, value); +void IntEntryImport( GtkEntry& widget, int value ){ + entry_set_int( ui::Entry(&widget), value ); } -void IntEntryExport(GtkEntry& widget, const IntImportCallback& importCallback) -{ - importCallback(atoi(gtk_entry_get_text (&widget))); +void IntEntryExport( GtkEntry& widget, const IntImportCallback& importCallback ){ + importCallback( atoi( gtk_entry_get_text( &widget ) ) ); } typedef ImportExport IntEntryImportExport; -void SizeEntryImport(GtkEntry& widget, std::size_t value) -{ - entry_set_int(&widget, int(value)); +void SizeEntryImport( GtkEntry& widget, std::size_t value ){ + entry_set_int( ui::Entry(&widget), int(value) ); } -void SizeEntryExport(GtkEntry& widget, const SizeImportCallback& importCallback) -{ - int value = atoi(gtk_entry_get_text(&widget)); - if(value < 0) - { - value = 0; - } - importCallback(value); +void SizeEntryExport( GtkEntry& widget, const SizeImportCallback& importCallback ){ + int value = atoi( gtk_entry_get_text( &widget ) ); + if ( value < 0 ) { + value = 0; + } + importCallback( value ); } typedef ImportExport SizeEntryImportExport; -void FloatEntryImport(GtkEntry& widget, float value) -{ - entry_set_float(&widget, value); +void FloatEntryImport( GtkEntry& widget, float value ){ + entry_set_float( ui::Entry(&widget), value ); } -void FloatEntryExport(GtkEntry& widget, const FloatImportCallback& importCallback) -{ - importCallback((float)atof(gtk_entry_get_text(&widget))); +void FloatEntryExport( GtkEntry& widget, const FloatImportCallback& importCallback ){ + importCallback( (float)atof( gtk_entry_get_text( &widget ) ) ); } typedef ImportExport FloatEntryImportExport; -void FloatSpinnerImport(GtkSpinButton& widget, float value) -{ - gtk_spin_button_set_value(&widget, value); +void FloatSpinnerImport( GtkSpinButton& widget, float value ){ + gtk_spin_button_set_value( &widget, value ); } -void FloatSpinnerExport(GtkSpinButton& widget, const FloatImportCallback& importCallback) -{ - importCallback(float(gtk_spin_button_get_value_as_float(&widget))); +void FloatSpinnerExport( GtkSpinButton& widget, const FloatImportCallback& importCallback ){ + importCallback( float(gtk_spin_button_get_value( &widget ) ) ); } typedef ImportExport FloatSpinnerImportExport; -void IntSpinnerImport(GtkSpinButton& widget, int value) -{ - gtk_spin_button_set_value(&widget, value); +void IntSpinnerImport( GtkSpinButton& widget, int value ){ + gtk_spin_button_set_value( &widget, value ); } -void IntSpinnerExport(GtkSpinButton& widget, const IntImportCallback& importCallback) -{ - importCallback(gtk_spin_button_get_value_as_int(&widget)); +void IntSpinnerExport( GtkSpinButton& widget, const IntImportCallback& importCallback ){ + importCallback( gtk_spin_button_get_value_as_int( &widget ) ); } typedef ImportExport IntSpinnerImportExport; -void IntAdjustmentImport(GtkAdjustment& widget, int value) -{ - gtk_adjustment_set_value(&widget, value); +void IntAdjustmentImport( GtkAdjustment& widget, int value ){ + gtk_adjustment_set_value( &widget, value ); } -void IntAdjustmentExport(GtkAdjustment& widget, const IntImportCallback& importCallback) -{ - importCallback((int)gtk_adjustment_get_value(&widget)); +void IntAdjustmentExport( GtkAdjustment& widget, const IntImportCallback& importCallback ){ + importCallback( (int)gtk_adjustment_get_value( &widget ) ); } typedef ImportExport IntAdjustmentImportExport; -void IntComboImport(GtkComboBox& widget, int value) -{ - gtk_combo_box_set_active(&widget, value); +void IntComboImport( GtkComboBox& widget, int value ){ + gtk_combo_box_set_active( &widget, value ); } -void IntComboExport(GtkComboBox& widget, const IntImportCallback& importCallback) -{ - importCallback(gtk_combo_box_get_active(&widget)); +void IntComboExport( GtkComboBox& widget, const IntImportCallback& importCallback ){ + importCallback( gtk_combo_box_get_active( &widget ) ); } typedef ImportExport IntComboImportExport; @@ -285,469 +229,407 @@ template class CallbackDialogData : public DLG_DATA { public: - typedef Callback1 ImportCallback; - typedef Callback1 ExportCallback; +typedef Callback1 ImportCallback; +typedef Callback1 ExportCallback; private: - ImportCallback m_importWidget; - ExportCallback m_exportWidget; - ImportCallback m_importViewer; - ExportCallback m_exportViewer; +ImportCallback m_importWidget; +ExportCallback m_exportWidget; +ImportCallback m_importViewer; +ExportCallback m_exportViewer; public: - CallbackDialogData(const ImportCallback& importWidget, const ExportCallback& exportWidget, const ImportCallback& importViewer, const ExportCallback& exportViewer) - : m_importWidget(importWidget), m_exportWidget(exportWidget), m_importViewer(importViewer), m_exportViewer(exportViewer) - { - } - void release() - { - delete this; - } - void importData() const - { - m_exportViewer(m_importWidget); - } - void exportData() const - { - m_exportWidget(m_importViewer); - } +CallbackDialogData( const ImportCallback& importWidget, const ExportCallback& exportWidget, const ImportCallback& importViewer, const ExportCallback& exportViewer ) + : m_importWidget( importWidget ), m_exportWidget( exportWidget ), m_importViewer( importViewer ), m_exportViewer( exportViewer ){ +} +void release(){ + delete this; +} +void importData() const { + m_exportViewer( m_importWidget ); +} +void exportData() const { + m_exportWidget( m_importViewer ); +} }; template class AddData { - DialogDataList& m_data; +DialogDataList& m_data; public: - AddData(DialogDataList& data) : m_data(data) - { - } - void apply(typename Widget::Type& widget, typename Viewer::Type& viewer) const - { - m_data.push_back( - new CallbackDialogData( - typename Widget::ImportCaller(widget), - typename Widget::ExportCaller(widget), - typename Viewer::ImportCaller(viewer), - typename Viewer::ExportCaller(viewer) - ) - ); - } +AddData( DialogDataList& data ) : m_data( data ){ +} +void apply( typename Widget::Type& widget, typename Viewer::Type& viewer ) const { + m_data.push_back( + new CallbackDialogData( + typename Widget::ImportCaller( widget ), + typename Widget::ExportCaller( widget ), + typename Viewer::ImportCaller( viewer ), + typename Viewer::ExportCaller( viewer ) + ) + ); +} }; template class AddCustomData { - DialogDataList& m_data; +DialogDataList& m_data; public: - AddCustomData(DialogDataList& data) : m_data(data) - { - } - void apply( - typename Widget::Type& widget, - const Callback1& importViewer, - const Callback1&>& exportViewer - ) const - { - m_data.push_back( - new CallbackDialogData( - typename Widget::ImportCaller(widget), - typename Widget::ExportCaller(widget), - importViewer, - exportViewer - ) - ); - } +AddCustomData( DialogDataList& data ) : m_data( data ){ +} +void apply( + typename Widget::Type& widget, + const Callback1& importViewer, + const Callback1&>& exportViewer + ) const { + m_data.push_back( + new CallbackDialogData( + typename Widget::ImportCaller( widget ), + typename Widget::ExportCaller( widget ), + importViewer, + exportViewer + ) + ); +} }; // ============================================================================= // Dialog class -Dialog::Dialog() : m_window(0), m_parent(0) -{ +Dialog::Dialog() : m_window( 0 ), m_parent( 0 ){ } -Dialog::~Dialog() -{ - for(DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i) - { - (*i)->release(); - } - - ASSERT_MESSAGE(m_window == 0, "dialog window not destroyed"); +Dialog::~Dialog(){ + for ( DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i ) + { + ( *i )->release(); + } + + ASSERT_MESSAGE( !m_window, "dialog window not destroyed" ); } -void Dialog::ShowDlg() -{ - ASSERT_MESSAGE(m_window != 0, "dialog was not constructed"); - importData(); - gtk_widget_show(GTK_WIDGET(m_window)); +void Dialog::ShowDlg(){ + ASSERT_MESSAGE( m_window, "dialog was not constructed" ); + importData(); + m_window.show(); } -void Dialog::HideDlg() -{ - ASSERT_MESSAGE(m_window != 0, "dialog was not constructed"); - exportData(); - gtk_widget_hide(GTK_WIDGET(m_window)); +void Dialog::HideDlg(){ + ASSERT_MESSAGE( m_window, "dialog was not constructed" ); + exportData(); + m_window.hide(); } -static gint delete_event_callback(GtkWidget *widget, GdkEvent* event, gpointer data) -{ - reinterpret_cast(data)->HideDlg(); - reinterpret_cast(data)->EndModal(eIDCANCEL); - return TRUE; +static gint delete_event_callback( ui::Widget widget, GdkEvent* event, gpointer data ){ + reinterpret_cast( data )->HideDlg(); + reinterpret_cast( data )->EndModal( eIDCANCEL ); + return TRUE; } -void Dialog::Create() -{ - ASSERT_MESSAGE(m_window == 0, "dialog cannot be constructed"); +void Dialog::Create(){ + ASSERT_MESSAGE( !m_window, "dialog cannot be constructed" ); - m_window = BuildDialog(); - g_signal_connect(G_OBJECT(m_window), "delete_event", G_CALLBACK(delete_event_callback), this); + m_window = BuildDialog(); + m_window.connect( "delete_event", G_CALLBACK( delete_event_callback ), this ); } -void Dialog::Destroy() -{ - ASSERT_MESSAGE(m_window != 0, "dialog cannot be destroyed"); +void Dialog::Destroy(){ + ASSERT_MESSAGE( m_window, "dialog cannot be destroyed" ); - gtk_widget_destroy(GTK_WIDGET(m_window)); - m_window = 0; + m_window.destroy(); + m_window = ui::Window{ui::null}; } -void Dialog::AddBoolToggleData(GtkToggleButton& widget, const BoolImportCallback& importViewer, const BoolExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddBoolToggleData( GtkToggleButton& widget, const BoolImportCallback& importViewer, const BoolExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddIntRadioData(GtkRadioButton& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddIntRadioData( GtkRadioButton& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddTextEntryData(GtkEntry& widget, const StringImportCallback& importViewer, const StringExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddTextEntryData( GtkEntry& widget, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddIntEntryData(GtkEntry& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddIntEntryData( GtkEntry& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddSizeEntryData(GtkEntry& widget, const SizeImportCallback& importViewer, const SizeExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddSizeEntryData( GtkEntry& widget, const SizeImportCallback& importViewer, const SizeExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddFloatEntryData(GtkEntry& widget, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddFloatEntryData( GtkEntry& widget, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddFloatSpinnerData(GtkSpinButton& widget, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddFloatSpinnerData( GtkSpinButton& widget, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddIntSpinnerData(GtkSpinButton& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddIntSpinnerData( GtkSpinButton& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddIntAdjustmentData(GtkAdjustment& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddIntAdjustmentData( GtkAdjustment& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddIntComboData(GtkComboBox& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - AddCustomData(m_data).apply(widget, importViewer, exportViewer); +void Dialog::AddIntComboData( GtkComboBox& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + AddCustomData( m_data ).apply( widget, importViewer, exportViewer ); } -void Dialog::AddDialogData(GtkToggleButton& widget, bool& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkToggleButton& widget, bool& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkRadioButton& widget, int& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkRadioButton& widget, int& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkEntry& widget, CopiedString& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkEntry& widget, CopiedString& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkEntry& widget, int& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkEntry& widget, int& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkEntry& widget, std::size_t& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkEntry& widget, std::size_t& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkEntry& widget, float& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkEntry& widget, float& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkSpinButton& widget, float& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkSpinButton& widget, float& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkSpinButton& widget, int& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkSpinButton& widget, int& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkAdjustment& widget, int& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkAdjustment& widget, int& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::AddDialogData(GtkComboBox& widget, int& data) -{ - AddData(m_data).apply(widget, data); +void Dialog::AddDialogData( GtkComboBox& widget, int& data ){ + AddData( m_data ).apply( widget, data ); } -void Dialog::exportData() -{ - for(DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i) - { - (*i)->exportData(); - } +void Dialog::exportData(){ + for ( DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i ) + { + ( *i )->exportData(); + } } -void Dialog::importData() -{ - for(DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i) - { - (*i)->importData(); - } +void Dialog::importData(){ + for ( DialogDataList::iterator i = m_data.begin(); i != m_data.end(); ++i ) + { + ( *i )->importData(); + } } -void Dialog::EndModal (EMessageBoxReturn code) -{ - m_modal.loop = 0; - m_modal.ret = code; +void Dialog::EndModal( EMessageBoxReturn code ){ + m_modal.loop = 0; + m_modal.ret = code; } -EMessageBoxReturn Dialog::DoModal() -{ - importData(); +EMessageBoxReturn Dialog::DoModal(){ + importData(); - PreModal(); + PreModal(); - EMessageBoxReturn ret = modal_dialog_show(m_window, m_modal); - ASSERT_NOTNULL(m_window); - if(ret == eIDOK) - { - exportData(); - } + EMessageBoxReturn ret = modal_dialog_show( m_window, m_modal ); + ASSERT_TRUE( (bool) m_window ); + if ( ret == eIDOK ) { + exportData(); + } - gtk_widget_hide(GTK_WIDGET(m_window)); + m_window.hide(); - PostModal(m_modal.ret); + PostModal( m_modal.ret ); - return m_modal.ret; + return m_modal.ret; } -GtkWidget* Dialog::addCheckBox(GtkWidget* vbox, const char* name, const char* flag, const BoolImportCallback& importViewer, const BoolExportCallback& exportViewer) -{ - GtkWidget* check = gtk_check_button_new_with_label(flag); - gtk_widget_show(check); - AddBoolToggleData(*GTK_TOGGLE_BUTTON(check), importViewer, exportViewer); +ui::CheckButton Dialog::addCheckBox( ui::VBox vbox, const char* name, const char* flag, const BoolImportCallback& importViewer, const BoolExportCallback& exportViewer ){ + auto check = ui::CheckButton( flag ); + check.show(); + AddBoolToggleData( *GTK_TOGGLE_BUTTON( check ), importViewer, exportViewer ); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(DialogRow_new(name, check))); - return check; + DialogVBox_packRow( vbox, ui::Widget(DialogRow_new( name, check ) )); + return check; } -GtkWidget* Dialog::addCheckBox(GtkWidget* vbox, const char* name, const char* flag, bool& data) -{ - return addCheckBox(vbox, name, flag, BoolImportCaller(data), BoolExportCaller(data)); +ui::CheckButton Dialog::addCheckBox( ui::VBox vbox, const char* name, const char* flag, bool& data ){ + return addCheckBox( vbox, name, flag, BoolImportCaller( data ), BoolExportCaller( data ) ); } -void Dialog::addCombo(GtkWidget* vbox, const char* name, StringArrayRange values, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - GtkWidget* alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); - gtk_widget_show(alignment); - { - GtkWidget* combo = gtk_combo_box_new_text(); +void Dialog::addCombo( ui::VBox vbox, const char* name, StringArrayRange values, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + auto alignment = ui::Alignment( 0.0, 0.5, 0.0, 0.0 ); + alignment.show(); + { + auto combo = ui::ComboBoxText(ui::New); - for(StringArrayRange::Iterator i = values.first; i != values.last; ++i) - { - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), *i); - } + for ( StringArrayRange::Iterator i = values.first; i != values.last; ++i ) + { + gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT( combo ), *i ); + } - AddIntComboData(*GTK_COMBO_BOX(combo), importViewer, exportViewer); + AddIntComboData( *GTK_COMBO_BOX( combo ), importViewer, exportViewer ); - gtk_widget_show (combo); - gtk_container_add(GTK_CONTAINER(alignment), combo); - } + combo.show(); + alignment.add(combo); + } - GtkTable* row = DialogRow_new(name, alignment); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(row)); + auto row = DialogRow_new( name, alignment ); + DialogVBox_packRow( vbox, row ); } -void Dialog::addCombo(GtkWidget* vbox, const char* name, int& data, StringArrayRange values) -{ - addCombo(vbox, name, values, IntImportCaller(data), IntExportCaller(data)); +void Dialog::addCombo( ui::VBox vbox, const char* name, int& data, StringArrayRange values ){ + addCombo( vbox, name, values, IntImportCaller( data ), IntExportCaller( data ) ); } -void Dialog::addSlider(GtkWidget* vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment) -{ +void Dialog::addSlider( ui::VBox vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){ #if 0 - if(draw_value == FALSE) - { - GtkWidget* hbox2 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox2); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox2), FALSE, FALSE, 0); - { - GtkWidget* label = gtk_label_new (low); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0); - } - { - GtkWidget* label = gtk_label_new (high); - gtk_widget_show (label); - gtk_box_pack_end (GTK_BOX (hbox2), label, FALSE, FALSE, 0); - } - } + if ( draw_value == FALSE ) { + auto hbox2 = ui::HBox( FALSE, 0 ); + hbox2.show(); + vbox.pack_start( hbox2 , FALSE, FALSE, 0 ); + { + ui::Widget label = ui::Label( low ); + label.show(); + hbox2.pack_start( label, FALSE, FALSE, 0 ); + } + { + ui::Widget label = ui::Label( high ); + label.show(); + hbox2.pack_end(label, FALSE, FALSE, 0); + } + } #endif - // adjustment - GtkObject* adj = gtk_adjustment_new(value, lower, upper, step_increment, page_increment, 0); - AddIntAdjustmentData(*GTK_ADJUSTMENT(adj), IntImportCaller(data), IntExportCaller(data)); + // adjustment + auto adj = ui::Adjustment( value, lower, upper, step_increment, page_increment, 0 ); + AddIntAdjustmentData( *GTK_ADJUSTMENT(adj), IntImportCaller( data ), IntExportCaller( data ) ); - // scale - GtkWidget* alignment = gtk_alignment_new(0.0, 0.5, 1.0, 0.0); - gtk_widget_show(alignment); + // scale + auto alignment = ui::Alignment( 0.0, 0.5, 1.0, 0.0 ); + alignment.show(); - GtkWidget* scale = gtk_hscale_new(GTK_ADJUSTMENT(adj)); - gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_LEFT); - gtk_widget_show(scale); - gtk_container_add(GTK_CONTAINER(alignment), scale); + ui::Widget scale = ui::HScale( adj ); + gtk_scale_set_value_pos( GTK_SCALE( scale ), GTK_POS_LEFT ); + scale.show(); + alignment.add(scale); - gtk_scale_set_draw_value(GTK_SCALE (scale), draw_value); - gtk_scale_set_digits(GTK_SCALE (scale), 0); + gtk_scale_set_draw_value( GTK_SCALE( scale ), draw_value ); + gtk_scale_set_digits( GTK_SCALE( scale ), 0 ); - GtkTable* row = DialogRow_new(name, alignment); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(row)); + auto row = DialogRow_new( name, alignment ); + DialogVBox_packRow( vbox, row ); } - -void Dialog::addRadio(GtkWidget* vbox, const char* name, StringArrayRange names, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - GtkWidget* alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); - gtk_widget_show(alignment); - { - RadioHBox radioBox = RadioHBox_new(names); - gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(radioBox.m_hbox)); - AddIntRadioData(*GTK_RADIO_BUTTON(radioBox.m_radio), importViewer, exportViewer); - } - GtkTable* row = DialogRow_new(name, alignment); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(row)); +void Dialog::addRadio( ui::VBox vbox, const char* name, StringArrayRange names, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + auto alignment = ui::Alignment( 0.0, 0.5, 0.0, 0.0 ); + alignment.show();; + { + RadioHBox radioBox = RadioHBox_new( names ); + alignment.add(radioBox.m_hbox); + AddIntRadioData( *GTK_RADIO_BUTTON( radioBox.m_radio ), importViewer, exportViewer ); + } + + auto row = DialogRow_new( name, alignment ); + DialogVBox_packRow( vbox, row ); } -void Dialog::addRadio(GtkWidget* vbox, const char* name, int& data, StringArrayRange names) -{ - addRadio(vbox, name, names, IntImportCaller(data), IntExportCaller(data)); +void Dialog::addRadio( ui::VBox vbox, const char* name, int& data, StringArrayRange names ){ + addRadio( vbox, name, names, IntImportCaller( data ), IntExportCaller( data ) ); } -void Dialog::addRadioIcons(GtkWidget* vbox, const char* name, StringArrayRange icons, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - GtkWidget* table = gtk_table_new (2, static_cast(icons.last - icons.first), FALSE); - gtk_widget_show (table); +void Dialog::addRadioIcons( ui::VBox vbox, const char* name, StringArrayRange icons, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + auto table = ui::Table(2, icons.last - icons.first, FALSE); + table.show(); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); + gtk_table_set_row_spacings(table, 5); + gtk_table_set_col_spacings(table, 5); - GSList* group = 0; - GtkWidget* radio = 0; - for(StringArrayRange::Iterator icon = icons.first; icon != icons.last; ++icon) - { - guint pos = static_cast(icon - icons.first); - GtkImage* image = new_local_image(*icon); - gtk_widget_show(GTK_WIDGET(image)); - gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(image), pos, pos+1, 0, 1, - (GtkAttachOptions) (0), - (GtkAttachOptions) (0), 0, 0); + GSList* group = 0; + ui::RadioButton radio{ui::null}; + for ( StringArrayRange::Iterator icon = icons.first; icon != icons.last; ++icon ) + { + guint pos = static_cast( icon - icons.first ); + auto image = new_local_image( *icon ); + image.show(); + table.attach(image, {pos, pos + 1, 0, 1}, {0, 0}); - radio = gtk_radio_button_new(group); - gtk_widget_show (radio); - gtk_table_attach (GTK_TABLE (table), radio, pos, pos+1, 1, 2, - (GtkAttachOptions) (0), - (GtkAttachOptions) (0), 0, 0); + radio = ui::RadioButton(GTK_RADIO_BUTTON(gtk_radio_button_new( group ))); + radio.show(); + table.attach(radio, {pos, pos + 1, 1, 2}, {0, 0}); - group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio)); - } + group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( radio ) ); + } - AddIntRadioData(*GTK_RADIO_BUTTON(radio), importViewer, exportViewer); + AddIntRadioData( *GTK_RADIO_BUTTON( radio ), importViewer, exportViewer ); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(DialogRow_new(name, table))); + DialogVBox_packRow( vbox, DialogRow_new( name, table ) ); } -void Dialog::addRadioIcons(GtkWidget* vbox, const char* name, int& data, StringArrayRange icons) -{ - addRadioIcons(vbox, name, icons, IntImportCaller(data), IntExportCaller(data)); +void Dialog::addRadioIcons( ui::VBox vbox, const char* name, int& data, StringArrayRange icons ){ + addRadioIcons( vbox, name, icons, IntImportCaller( data ), IntExportCaller( data ) ); } -GtkWidget* Dialog::addIntEntry(GtkWidget* vbox, const char* name, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - DialogEntryRow row(DialogEntryRow_new(name)); - AddIntEntryData(*row.m_entry, importViewer, exportViewer); - DialogVBox_packRow(GTK_VBOX(vbox), row.m_row); - return row.m_row; +ui::Widget Dialog::addIntEntry( ui::VBox vbox, const char* name, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + DialogEntryRow row( DialogEntryRow_new( name ) ); + AddIntEntryData( *GTK_ENTRY(row.m_entry), importViewer, exportViewer ); + DialogVBox_packRow( vbox, row.m_row ); + return row.m_row; } -GtkWidget* Dialog::addSizeEntry(GtkWidget* vbox, const char* name, const SizeImportCallback& importViewer, const SizeExportCallback& exportViewer) -{ - DialogEntryRow row(DialogEntryRow_new(name)); - AddSizeEntryData(*row.m_entry, importViewer, exportViewer); - DialogVBox_packRow(GTK_VBOX(vbox), row.m_row); - return row.m_row; +ui::Widget Dialog::addSizeEntry( ui::VBox vbox, const char* name, const SizeImportCallback& importViewer, const SizeExportCallback& exportViewer ){ + DialogEntryRow row( DialogEntryRow_new( name ) ); + AddSizeEntryData( *GTK_ENTRY(row.m_entry), importViewer, exportViewer ); + DialogVBox_packRow( vbox, row.m_row ); + return row.m_row; } -GtkWidget* Dialog::addFloatEntry(GtkWidget* vbox, const char* name, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer) -{ - DialogEntryRow row(DialogEntryRow_new(name)); - AddFloatEntryData(*row.m_entry, importViewer, exportViewer); - DialogVBox_packRow(GTK_VBOX(vbox), row.m_row); - return row.m_row; +ui::Widget Dialog::addFloatEntry( ui::VBox vbox, const char* name, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer ){ + DialogEntryRow row( DialogEntryRow_new( name ) ); + AddFloatEntryData( *GTK_ENTRY(row.m_entry), importViewer, exportViewer ); + DialogVBox_packRow( vbox, row.m_row ); + return row.m_row; } -GtkWidget* Dialog::addPathEntry(GtkWidget* vbox, const char* name, bool browse_directory, const StringImportCallback& importViewer, const StringExportCallback& exportViewer) -{ - PathEntry pathEntry = PathEntry_new(); - g_signal_connect(G_OBJECT(pathEntry.m_button), "clicked", G_CALLBACK(browse_directory ? button_clicked_entry_browse_directory : button_clicked_entry_browse_file), pathEntry.m_entry); +ui::Widget Dialog::addPathEntry( ui::VBox vbox, const char* name, bool browse_directory, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){ + PathEntry pathEntry = PathEntry_new(); + pathEntry.m_button.connect( "clicked", G_CALLBACK( browse_directory ? button_clicked_entry_browse_directory : button_clicked_entry_browse_file ), pathEntry.m_entry ); - AddTextEntryData(*GTK_ENTRY(pathEntry.m_entry), importViewer, exportViewer); + AddTextEntryData( *GTK_ENTRY(pathEntry.m_entry), importViewer, exportViewer ); - GtkTable* row = DialogRow_new(name, GTK_WIDGET(pathEntry.m_frame)); - DialogVBox_packRow(GTK_VBOX(vbox), GTK_WIDGET(row)); + auto row = DialogRow_new( name, ui::Widget(pathEntry.m_frame ) ); + DialogVBox_packRow( vbox, row ); - return GTK_WIDGET(row); + return ui::Widget(row ); } -GtkWidget* Dialog::addPathEntry(GtkWidget* vbox, const char* name, CopiedString& data, bool browse_directory) -{ - return addPathEntry(vbox, name, browse_directory, StringImportCallback(StringImportCaller(data)), StringExportCallback(StringExportCaller(data))); +ui::Widget Dialog::addPathEntry( ui::VBox vbox, const char* name, CopiedString& data, bool browse_directory ){ + return addPathEntry( vbox, name, browse_directory, StringImportCallback( StringImportCaller( data ) ), StringExportCallback( StringExportCaller( data ) ) ); } -GtkWidget* Dialog::addSpinner(GtkWidget* vbox, const char* name, double value, double lower, double upper, const IntImportCallback& importViewer, const IntExportCallback& exportViewer) -{ - DialogSpinnerRow row(DialogSpinnerRow_new(name, value, lower, upper, 1)); - AddIntSpinnerData(*row.m_spin, importViewer, exportViewer); - DialogVBox_packRow(GTK_VBOX(vbox), row.m_row); - return row.m_row; +ui::SpinButton Dialog::addSpinner( ui::VBox vbox, const char* name, double value, double lower, double upper, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){ + DialogSpinnerRow row( DialogSpinnerRow_new( name, value, lower, upper, 1 ) ); + AddIntSpinnerData( *GTK_SPIN_BUTTON(row.m_spin), importViewer, exportViewer ); + DialogVBox_packRow( vbox, row.m_row ); + return ui::SpinButton(row.m_spin); } -GtkWidget* Dialog::addSpinner(GtkWidget* vbox, const char* name, int& data, double value, double lower, double upper) -{ - return addSpinner(vbox, name, value, lower, upper, IntImportCallback(IntImportCaller(data)), IntExportCallback(IntExportCaller(data))); +ui::SpinButton Dialog::addSpinner( ui::VBox vbox, const char* name, int& data, double value, double lower, double upper ){ + return addSpinner( vbox, name, value, lower, upper, IntImportCallback( IntImportCaller( data ) ), IntExportCallback( IntExportCaller( data ) ) ); } -GtkWidget* Dialog::addSpinner(GtkWidget* vbox, const char* name, double value, double lower, double upper, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer) -{ - DialogSpinnerRow row(DialogSpinnerRow_new(name, value, lower, upper, 10)); - AddFloatSpinnerData(*row.m_spin, importViewer, exportViewer); - DialogVBox_packRow(GTK_VBOX(vbox), row.m_row); - return row.m_row; +ui::SpinButton Dialog::addSpinner( ui::VBox vbox, const char* name, double value, double lower, double upper, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer ){ + DialogSpinnerRow row( DialogSpinnerRow_new( name, value, lower, upper, 10 ) ); + AddFloatSpinnerData( *GTK_SPIN_BUTTON(row.m_spin), importViewer, exportViewer ); + DialogVBox_packRow( vbox, row.m_row ); + return ui::SpinButton(row.m_spin); }