157 lines
3.8 KiB
Ruby
157 lines
3.8 KiB
Ruby
|
# Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
|
||
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
||
|
#
|
||
|
# $Id: panes.rb,v 1.5 2005/02/12 23:06:07 kzys Exp $
|
||
|
=begin
|
||
|
= Paned Widgets
|
||
|
|
||
|
The Gtk::HPaned and Gtk::VPaned Widgets divide their content
|
||
|
area into two panes with a divider in between that the
|
||
|
user can adjust. A separate child is placed into each
|
||
|
pane.
|
||
|
|
||
|
There are a number of options that can be set for each pane.
|
||
|
This test contains both a horizontal (HPaned) and a vertical
|
||
|
(VPaned) widget, and allows you to adjust the options for
|
||
|
each side of each widget.
|
||
|
=end
|
||
|
require 'common'
|
||
|
|
||
|
module Demo
|
||
|
class Panes < BasicWindow
|
||
|
def initialize
|
||
|
super('Panes')
|
||
|
self.border_width = 0
|
||
|
|
||
|
vbox = Gtk::VBox.new(false, 0)
|
||
|
add(vbox)
|
||
|
|
||
|
vpaned = Gtk::VPaned.new
|
||
|
vbox.pack_start(vpaned, true, true, 0)
|
||
|
vpaned.border_width = 5
|
||
|
|
||
|
hpaned = Gtk::HPaned.new
|
||
|
vpaned.add1(hpaned)
|
||
|
|
||
|
frame = Gtk::Frame.new
|
||
|
frame.shadow_type = Gtk::SHADOW_IN
|
||
|
frame.set_size_request(60, 60)
|
||
|
hpaned.add1(frame)
|
||
|
|
||
|
button = Gtk::Button.new('_Hi there', true)
|
||
|
frame.add(button)
|
||
|
|
||
|
frame = Gtk::Frame.new
|
||
|
frame.shadow_type = Gtk::SHADOW_IN
|
||
|
frame.set_size_request(80, 60)
|
||
|
hpaned.add2(frame)
|
||
|
|
||
|
frame = Gtk::Frame.new
|
||
|
frame.shadow_type = Gtk::SHADOW_IN
|
||
|
frame.set_size_request(60, 80)
|
||
|
vpaned.add2(frame)
|
||
|
|
||
|
# Now create toggle buttons to control sizing
|
||
|
|
||
|
vbox.pack_start(create_pane_options(hpaned,
|
||
|
'Horizontal', 'Left', 'Right'),
|
||
|
false, false, 0)
|
||
|
|
||
|
vbox.pack_start(create_pane_options(vpaned,
|
||
|
'Vertical', 'Top', 'Bottom'),
|
||
|
false, false, 0)
|
||
|
end
|
||
|
|
||
|
def create_pane_options(paned, frame_label, label1, label2)
|
||
|
frame = Gtk::Frame.new(frame_label)
|
||
|
frame.border_width = 4
|
||
|
|
||
|
table = Gtk::Table.new(3, 2, true)
|
||
|
frame.add(table)
|
||
|
|
||
|
label = Gtk::Label.new(label1)
|
||
|
table.attach_defaults(label, 0, 1, 0, 1)
|
||
|
|
||
|
check_button = Gtk::CheckButton.new('_Resize', true)
|
||
|
table.attach_defaults(check_button, 0, 1, 1, 2)
|
||
|
check_button.signal_connect('toggled') do
|
||
|
toggle_resize(paned.child1)
|
||
|
end
|
||
|
|
||
|
check_button = Gtk::CheckButton.new('_Shrink', true)
|
||
|
table.attach_defaults(check_button, 0, 1, 2, 3)
|
||
|
check_button.active = true
|
||
|
check_button.signal_connect('toggled') do
|
||
|
toggle_shrink(paned.child1)
|
||
|
end
|
||
|
|
||
|
label = Gtk::Label.new(label2)
|
||
|
table.attach_defaults(label, 1, 2, 0, 1)
|
||
|
|
||
|
check_button = Gtk::CheckButton.new('_Resize')
|
||
|
table.attach_defaults(check_button, 1, 2, 1, 2)
|
||
|
check_button.active = true
|
||
|
check_button.signal_connect('toggled') do
|
||
|
toggle_resize(paned.child2)
|
||
|
end
|
||
|
|
||
|
check_button = Gtk::CheckButton.new('_Shrink')
|
||
|
table.attach_defaults(check_button, 1, 2, 2, 3)
|
||
|
check_button.active = true
|
||
|
check_button.signal_connect('toggled') do
|
||
|
toggle_shrink(paned.child2)
|
||
|
end
|
||
|
|
||
|
return frame
|
||
|
end
|
||
|
|
||
|
def toggle_resize(child)
|
||
|
paned = child.parent
|
||
|
is_child1 = (child == paned.child1)
|
||
|
|
||
|
resize = if is_child1
|
||
|
paned.child1_resize?
|
||
|
else
|
||
|
paned.child2_resize?
|
||
|
end
|
||
|
|
||
|
shrink = if is_child1
|
||
|
paned.child1_shrink?
|
||
|
else
|
||
|
paned.child2_shrink?
|
||
|
end
|
||
|
|
||
|
child.parent.remove(child)
|
||
|
if is_child1
|
||
|
paned.pack1(child, !resize, shrink)
|
||
|
else
|
||
|
paned.pack2(child, !resize, shrink)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def toggle_shrink(child)
|
||
|
paned = child.parent
|
||
|
is_child1 = (child == paned.child1)
|
||
|
|
||
|
resize = if is_child1
|
||
|
paned.child1_resize?
|
||
|
else
|
||
|
paned.child2_resize?
|
||
|
end
|
||
|
|
||
|
shrink = if is_child1
|
||
|
paned.child1_shrink?
|
||
|
else
|
||
|
paned.child2_shrink?
|
||
|
end
|
||
|
|
||
|
child.parent.remove(child)
|
||
|
if is_child1
|
||
|
paned.pack1(child, resize, !shrink)
|
||
|
else
|
||
|
paned.pack2(child, resize, !shrink)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|