X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fgtkutil%2Fmessagebox.cpp;h=82d6dfe4b02ad2ddc49327f7cd4bc91e4911771c;hb=cd6613e5171544b68d4ae70546c90a15c99b22a5;hp=9b9b899a970325a07835d37b861557e30765b384;hpb=cd7ff1a1798cfae5d14811a310f56d2f1908490b;p=xonotic%2Fnetradiant.git diff --git a/libs/gtkutil/messagebox.cpp b/libs/gtkutil/messagebox.cpp index 9b9b899a..82d6dfe4 100644 --- a/libs/gtkutil/messagebox.cpp +++ b/libs/gtkutil/messagebox.cpp @@ -27,169 +27,168 @@ #include "dialog.h" #include "widget.h" -ui::Widget create_padding(int width, int height) -{ - ui::Alignment widget = ui::Alignment(0.0, 0.0, 0.0, 0.0); - widget.show(); - widget.dimensions(width, height); - return widget; +ui::Widget create_padding( int width, int height ){ + ui::Alignment widget = ui::Alignment( 0.0, 0.0, 0.0, 0.0 ); + widget.show(); + widget.dimensions(width, height); + return widget; } -const char *messagebox_stock_icon(EMessageBoxIcon type) -{ - switch (type) { - default: - case eMB_ICONDEFAULT: - return GTK_STOCK_DIALOG_INFO; - case eMB_ICONERROR: - return GTK_STOCK_DIALOG_ERROR; - case eMB_ICONWARNING: - return GTK_STOCK_DIALOG_WARNING; - case eMB_ICONQUESTION: - return GTK_STOCK_DIALOG_QUESTION; - case eMB_ICONASTERISK: - return GTK_STOCK_DIALOG_INFO; - } +const char* messagebox_stock_icon( EMessageBoxIcon type ){ + switch ( type ) + { + default: + case eMB_ICONDEFAULT: + return GTK_STOCK_DIALOG_INFO; + case eMB_ICONERROR: + return GTK_STOCK_DIALOG_ERROR; + case eMB_ICONWARNING: + return GTK_STOCK_DIALOG_WARNING; + case eMB_ICONQUESTION: + return GTK_STOCK_DIALOG_QUESTION; + case eMB_ICONASTERISK: + return GTK_STOCK_DIALOG_INFO; + } } -EMessageBoxReturn -gtk_MessageBox(ui::Window parentWindow, const char *text, const char *title, EMessageBoxType type, EMessageBoxIcon icon) -{ - ModalDialog dialog; - ModalDialogButton ok_button(dialog, eIDOK); - ModalDialogButton cancel_button(dialog, eIDCANCEL); - ModalDialogButton yes_button(dialog, eIDYES); - ModalDialogButton no_button(dialog, eIDNO); - - ui::Window window = create_fixedsize_modal_dialog_window(parentWindow, title, dialog, 400, 100); - - if (parentWindow) { - //window.connect( "delete_event", G_CALLBACK(floating_window_delete_present), parent); - gtk_window_deiconify(parentWindow); - } - - auto accel = ui::AccelGroup(ui::New); - window.add_accel_group(accel); - - auto vbox = create_dialog_vbox(8, 8); - window.add(vbox); - - - auto hboxDummy = create_dialog_hbox(0, 0); - vbox.pack_start(hboxDummy, FALSE, FALSE, 0); - - hboxDummy.pack_start(create_padding(0, 50), FALSE, FALSE, 0); // HACK to force minimum height - - auto iconBox = create_dialog_hbox(16, 0); - hboxDummy.pack_start(iconBox, FALSE, FALSE, 0); - - auto image = ui::Image::from(gtk_image_new_from_stock(messagebox_stock_icon(icon), GTK_ICON_SIZE_DIALOG)); - image.show(); - iconBox.pack_start(image, FALSE, FALSE, 0); - - auto label = ui::Label(text); - label.show(); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_label_set_justify(label, GTK_JUSTIFY_LEFT); - gtk_label_set_line_wrap(label, TRUE); - iconBox.pack_start(label, TRUE, TRUE, 0); - - - auto vboxDummy = create_dialog_vbox(0, 0); - vbox.pack_start(vboxDummy, FALSE, FALSE, 0); - - auto alignment = ui::Alignment(0.5, 0.0, 0.0, 0.0); - alignment.show(); - vboxDummy.pack_start(alignment, FALSE, FALSE, 0); - - auto hbox = create_dialog_hbox(8, 0); - alignment.add(hbox); - - vboxDummy.pack_start(create_padding(400, 0), FALSE, FALSE, 0); // HACK to force minimum width - - - if (type == eMB_OK) { - auto button = create_modal_dialog_button("OK", ok_button); - hbox.pack_start(button, TRUE, FALSE, 0); - gtk_widget_add_accelerator(button, "clicked", accel, GDK_KEY_Escape, (GdkModifierType) 0, (GtkAccelFlags) 0); - gtk_widget_add_accelerator(button, "clicked", accel, GDK_KEY_Return, (GdkModifierType) 0, (GtkAccelFlags) 0); - widget_make_default(button); - button.show(); - - dialog.ret = eIDOK; - } else if (type == eMB_OKCANCEL) { - { - auto button = create_modal_dialog_button("OK", ok_button); - hbox.pack_start(button, TRUE, FALSE, 0); - gtk_widget_add_accelerator(button, "clicked", accel, GDK_KEY_Return, (GdkModifierType) 0, - (GtkAccelFlags) 0); - widget_make_default(button); - button.show(); - } - - { - auto button = create_modal_dialog_button("OK", cancel_button); - hbox.pack_start(button, TRUE, FALSE, 0); - gtk_widget_add_accelerator(button, "clicked", accel, GDK_KEY_Escape, (GdkModifierType) 0, - (GtkAccelFlags) 0); - button.show(); - } - - dialog.ret = eIDCANCEL; - } else if (type == eMB_YESNOCANCEL) { - { - auto button = create_modal_dialog_button("Yes", yes_button); - hbox.pack_start(button, TRUE, FALSE, 0); - widget_make_default(button); - button.show(); - } - - { - auto button = create_modal_dialog_button("No", no_button); - hbox.pack_start(button, TRUE, FALSE, 0); - button.show(); - } - { - auto button = create_modal_dialog_button("Cancel", cancel_button); - hbox.pack_start(button, TRUE, FALSE, 0); - button.show(); - } - - dialog.ret = eIDCANCEL; - } else if (type == eMB_NOYES) { - { - auto button = create_modal_dialog_button("No", no_button); - hbox.pack_start(button, TRUE, FALSE, 0); - widget_make_default(button); - button.show(); - } - { - auto button = create_modal_dialog_button("Yes", yes_button); - hbox.pack_start(button, TRUE, FALSE, 0); - button.show(); - } - - dialog.ret = eIDNO; - } else /* if (type == eMB_YESNO) */ - { - { - auto button = create_modal_dialog_button("Yes", yes_button); - hbox.pack_start(button, TRUE, FALSE, 0); - widget_make_default(button); - button.show(); - } - - { - auto button = create_modal_dialog_button("No", no_button); - hbox.pack_start(button, TRUE, FALSE, 0); - button.show(); - } - dialog.ret = eIDNO; - } - - modal_dialog_show(window, dialog); - - window.destroy(); - - return dialog.ret; +EMessageBoxReturn gtk_MessageBox( ui::Window parentWindow, const char* text, const char* title, EMessageBoxType type, EMessageBoxIcon icon ){ + ModalDialog dialog; + ModalDialogButton ok_button( dialog, eIDOK ); + ModalDialogButton cancel_button( dialog, eIDCANCEL ); + ModalDialogButton yes_button( dialog, eIDYES ); + ModalDialogButton no_button( dialog, eIDNO ); + + ui::Window window = create_fixedsize_modal_dialog_window( parentWindow, title, dialog, 400, 100 ); + + if ( parentWindow ) { + //window.connect( "delete_event", G_CALLBACK(floating_window_delete_present), parent); + gtk_window_deiconify( parentWindow ); + } + + auto accel = ui::AccelGroup(ui::New); + window.add_accel_group( accel ); + + auto vbox = create_dialog_vbox( 8, 8 ); + window.add(vbox); + + + auto hboxDummy = create_dialog_hbox( 0, 0 ); + vbox.pack_start( hboxDummy, FALSE, FALSE, 0 ); + + hboxDummy.pack_start( create_padding( 0, 50 ), FALSE, FALSE, 0 ); // HACK to force minimum height + + auto iconBox = create_dialog_hbox( 16, 0 ); + hboxDummy.pack_start( iconBox, FALSE, FALSE, 0 ); + + auto image = ui::Image::from( gtk_image_new_from_stock( messagebox_stock_icon( icon ), GTK_ICON_SIZE_DIALOG ) ); + image.show(); + iconBox.pack_start( image, FALSE, FALSE, 0 ); + + auto label = ui::Label( text ); + label.show(); + gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 ); + gtk_label_set_justify( label, GTK_JUSTIFY_LEFT ); + gtk_label_set_line_wrap( label, TRUE ); + iconBox.pack_start( label, TRUE, TRUE, 0 ); + + + auto vboxDummy = create_dialog_vbox( 0, 0 ); + vbox.pack_start( vboxDummy, FALSE, FALSE, 0 ); + + auto alignment = ui::Alignment( 0.5, 0.0, 0.0, 0.0 ); + alignment.show(); + vboxDummy.pack_start( alignment, FALSE, FALSE, 0 ); + + auto hbox = create_dialog_hbox( 8, 0 ); + alignment.add(hbox); + + vboxDummy.pack_start( create_padding( 400, 0 ), FALSE, FALSE, 0 ); // HACK to force minimum width + + + if ( type == eMB_OK ) { + auto button = create_modal_dialog_button( "OK", ok_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 ); + gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 ); + widget_make_default( button ); + button.show(); + + dialog.ret = eIDOK; + } + else if ( type == eMB_OKCANCEL ) { + { + auto button = create_modal_dialog_button( "OK", ok_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 ); + widget_make_default( button ); + button.show(); + } + + { + auto button = create_modal_dialog_button( "OK", cancel_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 ); + button.show(); + } + + dialog.ret = eIDCANCEL; + } + else if ( type == eMB_YESNOCANCEL ) { + { + auto button = create_modal_dialog_button( "Yes", yes_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + widget_make_default( button ); + button.show(); + } + + { + auto button = create_modal_dialog_button( "No", no_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + button.show(); + } + { + auto button = create_modal_dialog_button( "Cancel", cancel_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + button.show(); + } + + dialog.ret = eIDCANCEL; + } + else if ( type == eMB_NOYES ) { + { + auto button = create_modal_dialog_button( "No", no_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + widget_make_default( button ); + button.show(); + } + { + auto button = create_modal_dialog_button( "Yes", yes_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + button.show(); + } + + dialog.ret = eIDNO; + } + else /* if (type == eMB_YESNO) */ + { + { + auto button = create_modal_dialog_button( "Yes", yes_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + widget_make_default( button ); + button.show(); + } + + { + auto button = create_modal_dialog_button( "No", no_button ); + hbox.pack_start( button, TRUE, FALSE, 0 ); + button.show(); + } + dialog.ret = eIDNO; + } + + modal_dialog_show( window, dialog ); + + window.destroy(); + + return dialog.ret; }