119 lines
3.5 KiB
Ruby
119 lines
3.5 KiB
Ruby
|
# Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
|
||
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
||
|
#
|
||
|
# $Id: sizegroup.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
|
||
|
=begin
|
||
|
= Size Groups
|
||
|
|
||
|
Gtk::SizeGroup provides a mechanism for grouping a number of
|
||
|
widgets together so they all request the same amount of space.
|
||
|
This is typically useful when you want a column of widgets to
|
||
|
have the same size, but you can't use a Gtk::Table widget.
|
||
|
|
||
|
Note that size groups only affect the amount of space requested,
|
||
|
not the size that the widgets finally receive. If you want the
|
||
|
widgets in a Gtk::SizeGroup to actually be the same size, you need
|
||
|
to pack them in such a way that they get the size they request
|
||
|
and not more. For example, if you are packing your widgets
|
||
|
into a table, you would not include the Gtk::FILL flag.
|
||
|
=end
|
||
|
require 'common'
|
||
|
|
||
|
module Demo
|
||
|
class SizeGroup < Gtk::Dialog
|
||
|
def initialize
|
||
|
super('GtkSizeGroup', nil, 0,
|
||
|
[Gtk::Stock::CLOSE, Gtk::Dialog::RESPONSE_NONE])
|
||
|
|
||
|
color_options = %w(Red Green Blue)
|
||
|
dash_options = %w(Solid Dashed Dotted)
|
||
|
end_options = %w(Square Round Arrow)
|
||
|
|
||
|
set_resizable(false)
|
||
|
|
||
|
signal_connect('response') do
|
||
|
destroy
|
||
|
end
|
||
|
|
||
|
vbox = Gtk::VBox.new(false, 5)
|
||
|
self.vbox.pack_start(vbox, true, true, 0)
|
||
|
vbox.set_border_width(5)
|
||
|
|
||
|
size_group = Gtk::SizeGroup.new(Gtk::SizeGroup::HORIZONTAL)
|
||
|
|
||
|
## Create one frame holding color options
|
||
|
frame = Gtk::Frame.new('Color Options')
|
||
|
vbox.pack_start(frame, true, true, 0)
|
||
|
|
||
|
table = Gtk::Table.new(2, 2, false)
|
||
|
table.set_border_width(5)
|
||
|
table.set_row_spacings(5)
|
||
|
table.set_column_spacings(10)
|
||
|
frame.add(table)
|
||
|
|
||
|
add_row(table, 0, size_group, '_Foreground', color_options)
|
||
|
add_row(table, 1, size_group, '_Background', color_options)
|
||
|
|
||
|
## And another frame holding line style options
|
||
|
frame = Gtk::Frame.new('Line Options')
|
||
|
vbox.pack_start(frame, false, false, 0)
|
||
|
|
||
|
table = Gtk::Table.new(2, 2, false)
|
||
|
table.set_border_width(5)
|
||
|
table.set_row_spacings(5)
|
||
|
table.set_column_spacings(10)
|
||
|
frame.add(table)
|
||
|
|
||
|
add_row(table, 0, size_group, '_Dashing', dash_options)
|
||
|
add_row(table, 1, size_group, '_Line ends', end_options)
|
||
|
|
||
|
# And a check button to turn grouping on and off
|
||
|
check_button = Gtk::CheckButton.new('_Enable grouping', true)
|
||
|
vbox.pack_start(check_button, false, false, 0)
|
||
|
|
||
|
check_button.set_active(true)
|
||
|
check_button.signal_connect('toggled', size_group) do |check_button, size_group|
|
||
|
new_mode = if check_button.active?
|
||
|
Gtk::SizeGroup::HORIZONTAL
|
||
|
else
|
||
|
Gtk::SizeGroup::VERTICAL
|
||
|
end
|
||
|
size_group.set_mode(new_mode)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def add_row(table, row, size_group, label_text, options)
|
||
|
label = Gtk::Label.new(label_text, true)
|
||
|
label.set_alignment(0, 1)
|
||
|
table.attach(label,
|
||
|
0, 1, row, row + 1,
|
||
|
Gtk::EXPAND | Gtk::FILL, 0,
|
||
|
0, 0)
|
||
|
|
||
|
option_menu = create_option_menu(options)
|
||
|
label.set_mnemonic_widget(option_menu)
|
||
|
size_group.add_widget(option_menu)
|
||
|
table.attach(option_menu,
|
||
|
1, 2, row, row + 1,
|
||
|
0, 0,
|
||
|
0, 0)
|
||
|
end
|
||
|
|
||
|
def create_option_menu(strings)
|
||
|
menu = Gtk::Menu.new
|
||
|
|
||
|
strings.each do |str|
|
||
|
menu_item = Gtk::MenuItem.new(str)
|
||
|
menu_item.show
|
||
|
|
||
|
menu.append(menu_item)
|
||
|
end
|
||
|
|
||
|
option_menu = Gtk::OptionMenu.new
|
||
|
option_menu.set_menu(menu)
|
||
|
|
||
|
return option_menu
|
||
|
end
|
||
|
end
|
||
|
end
|