lib/alexandria/ui/alert_dialog.rb in alexandria-book-collection-manager-0.7.5 vs lib/alexandria/ui/alert_dialog.rb in alexandria-book-collection-manager-0.7.6

- old
+ new

@@ -4,46 +4,61 @@ # # See the file README.md for authorship and licensing information. module Alexandria module UI - class AlertDialog < SimpleDelegator + class AlertDialog def initialize(parent, title, stock_icon, buttons, message = nil) - dialog = Gtk::Dialog.new(title: "", parent: parent, flags: :destroy_with_parent, - buttons: buttons) - super(dialog) + @dialog = Gtk::Dialog.new(title: "", parent: parent, flags: :destroy_with_parent, + buttons: buttons) + @dialog.border_width = 6 + @dialog.resizable = false + @dialog.child.spacing = 12 - self.border_width = 6 - self.resizable = false - child.spacing = 12 - hbox = Gtk::Box.new(:horizontal, 12) hbox.homogeneous = false hbox.border_width = 6 - child.pack_start(hbox) image = Gtk::Image.new(stock: stock_icon, size: Gtk::IconSize::DIALOG) image.set_alignment(0.5, 0) hbox.pack_start(image) vbox = Gtk::Box.new(:vertical, 6) vbox.homogeneous = false + vbox.pack_start make_label("<b><big>#{title}</big></b>") + vbox.pack_start make_label(message.strip) unless message hbox.pack_start(vbox) + @dialog.child.pack_start(hbox) + end + + def show_all + dialog.show_all + end + + def run + dialog.run + end + + def destroy + dialog.destroy + end + + def default_response=(response) + dialog.default_response = response + end + + private + + attr_reader :dialog + + def make_label(markup) label = Gtk::Label.new label.set_alignment(0, 0) label.wrap = label.selectable = true - label.markup = "<b><big>#{title}</big></b>" - vbox.pack_start(label) - - if message - label = Gtk::Label.new - label.set_alignment(0, 0) - label.wrap = label.selectable = true - label.markup = message.strip - vbox.pack_start(label) - end + label.markup = markup + label end end end end