# Copyright (c) 2015-2016 Ruby-GNOME2 Project Team # This program is licenced under the same licence as Ruby-GNOME2. # =begin = Expander GtkExpander allows to provide additional content that is initially hidden. This is also known as "disclosure triangle". This example also shows how to make the window resizable only if the expander is expanded. =end class ExpanderDemo def initialize(main_window) toplevel = main_window.toplevel message = "Something went wrong" @window = Gtk::MessageDialog.new(:parent => toplevel, :flags => :destroy_with_parent, :type => :error, :buttons_type => :close, :message => message) @window.use_markup = true message = "Here are some more details but not the full story." @window.secondary_text = message area = @window.message_area box = area.parent box.parent.child_set_property(box, "expand", true) box.parent.child_set_property(box, "fill", true) area.each do |child| child.parent.child_set_property(child, "expand", false) end expander = Gtk::Expander.new("Details:") sw = Gtk::ScrolledWindow.new sw.set_min_content_height(100) sw.set_shadow_type(:in) sw.set_policy(:never, :automatic) tv = initialize_text_view sw.add(tv) expander.add(sw) area.pack_end(expander, :expand => true, :fill => true, :padding => 0) expander.show_all expander.signal_connect "notify::expanded" do @window.resizable = expander.expanded? end @window.signal_connect "response" do |dialog, _response_id| dialog.destroy end end def run if !@window.visible? @window.show_all else @window.destroy end end private def initialize_text_view tv = Gtk::TextView.new tv.editable = false tv.wrap_mode = :word tv.buffer.text = <