348 lines
9.5 KiB
Ruby
348 lines
9.5 KiB
Ruby
|
#!/usr/bin/env ruby
|
||
|
=begin
|
||
|
test-assistant.rb - Ruby/GTK version of testassistant.c from gtk+ 2.10 sources.
|
||
|
|
||
|
Guillaume Cottenceau for the ruby-gnome2 project.
|
||
|
|
||
|
Copyright (c) 2005,2006 Ruby-GNOME2 Project Team
|
||
|
This program is licenced under the same licence as Ruby-GNOME2.
|
||
|
|
||
|
$Id: assistant.rb,v 1.1 2006/11/23 08:39:12 mutoh Exp $
|
||
|
=end
|
||
|
|
||
|
require 'gtk2'
|
||
|
|
||
|
if str = Gtk.check_version(2, 10, 0)
|
||
|
puts "This sample requires GTK+ 2.10.0 or later"
|
||
|
puts str
|
||
|
exit
|
||
|
end
|
||
|
|
||
|
class AssistantRunner
|
||
|
def initialize
|
||
|
@simple_assistant = nil
|
||
|
@generous_assistant = nil
|
||
|
@selected_branch = "A"
|
||
|
@nonlinear_assistant = nil
|
||
|
@full_featured_assistant = nil
|
||
|
end
|
||
|
|
||
|
def run_simple_assistant
|
||
|
@simple_assistant = run_assistant(@simple_assistant,
|
||
|
:create_simple_assistant)
|
||
|
end
|
||
|
|
||
|
def run_generous_assistant
|
||
|
@generous_assistant = run_assistant(@generous_assistant,
|
||
|
:create_generous_assistant)
|
||
|
end
|
||
|
|
||
|
def run_nonlinear_assistant
|
||
|
@nonlinear_assistant = run_assistant(@nonlinear_assistant,
|
||
|
:create_nonlinear_assistant)
|
||
|
end
|
||
|
|
||
|
def run_full_featured_assistant
|
||
|
@full_featured_assistant = run_assistant(@full_featured_assistant,
|
||
|
:create_full_featured_assistant)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
def run_assistant(assistant, assistant_create_method)
|
||
|
assistant ||= send(assistant_create_method)
|
||
|
if !assistant.visible?
|
||
|
assistant.show
|
||
|
else
|
||
|
assistant.destroy
|
||
|
assistant = nil
|
||
|
end
|
||
|
assistant
|
||
|
end
|
||
|
|
||
|
def add_completion_test_page(assistant, text, visible, complete)
|
||
|
page = Gtk::VBox.new(0, 0)
|
||
|
check = Gtk::CheckButton.new("Complete")
|
||
|
page.add(Gtk::Label.new(text))
|
||
|
page.add(check)
|
||
|
check.active = complete
|
||
|
check.signal_connect('toggled') do
|
||
|
complete = check.active?
|
||
|
assistant.set_page_complete(page, complete)
|
||
|
end
|
||
|
page.show_all if visible
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, text)
|
||
|
assistant.set_page_complete(page, complete)
|
||
|
page
|
||
|
end
|
||
|
|
||
|
def create_test_page(text)
|
||
|
Gtk::Label.new(text)
|
||
|
end
|
||
|
|
||
|
def prepare_cb(assistant, page)
|
||
|
if page.is_a?(Gtk::Label)
|
||
|
puts "prepare: #{page.text}"
|
||
|
elsif assistant.get_page_type(page) == Gtk::Assistant::PAGE_PROGRESS
|
||
|
progress = page.child
|
||
|
assistant.set_page_complete(page, false)
|
||
|
progress.fraction = 0.0
|
||
|
Gtk.timeout_add(300) do
|
||
|
page = assistant.get_nth_page(assistant.current_page)
|
||
|
progress = page.child
|
||
|
value = progress.fraction = progress.fraction + 0.1
|
||
|
continue = value < 1.0
|
||
|
assistant.set_page_complete(page, true) unless continue
|
||
|
continue
|
||
|
end
|
||
|
else
|
||
|
puts "prepare: #{assistant.current_page}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def create_simple_assistant
|
||
|
assistant = Gtk::Assistant.new
|
||
|
assistant.set_default_size(400, 300)
|
||
|
assistant.signal_connect('cancel') do
|
||
|
puts "cancel"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('close') do
|
||
|
puts "close"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('apply') do
|
||
|
puts "apply"
|
||
|
end
|
||
|
assistant.signal_connect('prepare') do |_assistant, page|
|
||
|
prepare_cb(_assistant, page)
|
||
|
end
|
||
|
|
||
|
page = create_test_page("Page 1")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 1")
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = create_test_page("Page 2")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 2")
|
||
|
assistant.set_page_type(page, :confirm)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
end
|
||
|
|
||
|
def create_generous_assistant
|
||
|
assistant = Gtk::Assistant.new
|
||
|
assistant.set_default_size(400, 300)
|
||
|
assistant.signal_connect('cancel') do
|
||
|
puts "cancel"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('close') do
|
||
|
puts "close"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('apply') do
|
||
|
puts "apply"
|
||
|
end
|
||
|
assistant.signal_connect('prepare') do|_assistant, page|
|
||
|
prepare_cb(_assistant, page)
|
||
|
end
|
||
|
|
||
|
page = create_test_page("Introduction")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Introduction")
|
||
|
assistant.set_page_type(page, :intro)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = add_completion_test_page(assistant, "Content", true, false)
|
||
|
next_page = add_completion_test_page(assistant, "More Content", true, true)
|
||
|
|
||
|
check = Gtk::CheckButton.new("Next page visible");
|
||
|
check.active = true
|
||
|
check.signal_connect('toggled') do
|
||
|
puts "beuh"
|
||
|
next_page.visible = check.active?
|
||
|
end
|
||
|
check.show
|
||
|
page.add(check)
|
||
|
|
||
|
add_completion_test_page(assistant, "Even More Content", true, true)
|
||
|
|
||
|
page = create_test_page("Confirmation")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Confirmation")
|
||
|
assistant.set_page_type(page, :confirm)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = Gtk::Alignment.new(0.5, 0.5, 0.9, 0.0)
|
||
|
page.add(Gtk::ProgressBar.new)
|
||
|
page.show_all
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Progress")
|
||
|
assistant.set_page_type(page, :progress)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = create_test_page("Summary")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Summary")
|
||
|
assistant.set_page_type(page, :summary)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
end
|
||
|
|
||
|
def create_nonlinear_assistant
|
||
|
assistant = Gtk::Assistant.new
|
||
|
assistant.set_default_size(400, 300)
|
||
|
assistant.signal_connect('cancel') do
|
||
|
puts "cancel"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('close') do
|
||
|
puts "close"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('apply') do
|
||
|
puts "apply"
|
||
|
end
|
||
|
assistant.signal_connect('prepare') do |_assistant, page|
|
||
|
prepare_cb(_assistant, page)
|
||
|
end
|
||
|
|
||
|
assistant.set_forward_page_func do |current_page|
|
||
|
retval = -1
|
||
|
if current_page == 0
|
||
|
if @selected_branch == 'A'
|
||
|
retval = 1
|
||
|
else
|
||
|
retval = 2
|
||
|
end
|
||
|
elsif current_page == 1 || current_page == 2
|
||
|
retval = 3
|
||
|
end
|
||
|
retval
|
||
|
end
|
||
|
|
||
|
page = Gtk::VBox.new(false, 6)
|
||
|
button = Gtk::RadioButton.new('branch A')
|
||
|
page.pack_start(button, false, false, 0)
|
||
|
button.signal_connect('toggled') do
|
||
|
@selected_branch = 'A'
|
||
|
end
|
||
|
button.active = true
|
||
|
button = Gtk::RadioButton.new(button, 'branch B')
|
||
|
page.pack_start(button, false, false, 0)
|
||
|
button.signal_connect('toggled') do
|
||
|
@selected_branch = 'B'
|
||
|
end
|
||
|
page.show_all
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 1")
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = create_test_page("Page 2A")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 2A")
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = create_test_page("Page 2B")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 2B")
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
page = create_test_page("Confirmation")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Confirmation")
|
||
|
assistant.set_page_type(page, :confirm)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
end
|
||
|
|
||
|
def create_full_featured_assistant
|
||
|
assistant = Gtk::Assistant.new
|
||
|
assistant.set_default_size(400, 300)
|
||
|
assistant.signal_connect('cancel') do
|
||
|
puts "cancel"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('close') do
|
||
|
puts "close"
|
||
|
assistant.hide
|
||
|
end
|
||
|
assistant.signal_connect('apply') do
|
||
|
puts "apply"
|
||
|
end
|
||
|
assistant.signal_connect('prepare') do |_assistant, page|
|
||
|
prepare_cb(_assistant, page)
|
||
|
end
|
||
|
|
||
|
button = Gtk::Button.new(Gtk::Stock::STOP)
|
||
|
button.show
|
||
|
assistant.add_action_widget(button)
|
||
|
|
||
|
page = create_test_page("Page 1")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 1")
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
#- set a side image
|
||
|
pixbuf = page.render_icon(Gtk::Stock::DIALOG_WARNING, :dialog)
|
||
|
assistant.set_page_side_image(page, pixbuf)
|
||
|
|
||
|
#- set a header image
|
||
|
pixbuf = page.render_icon(Gtk::Stock::DIALOG_INFO, :dialog)
|
||
|
assistant.set_page_header_image(page, pixbuf)
|
||
|
|
||
|
page = create_test_page("Invisible page")
|
||
|
assistant.append_page(page)
|
||
|
|
||
|
page = create_test_page("Page 3")
|
||
|
page.show
|
||
|
assistant.append_page(page)
|
||
|
assistant.set_page_title(page, "Page 3")
|
||
|
assistant.set_page_type(page, :confirm)
|
||
|
assistant.set_page_complete(page, true)
|
||
|
|
||
|
#- set a header image
|
||
|
pixbuf = page.render_icon(Gtk::Stock::DIALOG_INFO, :dialog)
|
||
|
assistant.set_page_header_image(page, pixbuf)
|
||
|
|
||
|
assistant
|
||
|
end
|
||
|
end
|
||
|
|
||
|
runner = AssistantRunner.new
|
||
|
buttons = [
|
||
|
[ 'simple assistant', proc { runner.run_simple_assistant } ],
|
||
|
[ 'generous assistant', proc { runner.run_generous_assistant } ],
|
||
|
[ 'nonlinear assistant', proc { runner.run_nonlinear_assistant } ],
|
||
|
[ 'full featured assistant', proc { runner.run_full_featured_assistant } ],
|
||
|
]
|
||
|
|
||
|
if ENV['RTL']
|
||
|
Gtk::Widget.default_direction = Gtk::Widget::TEXT_DIR_RTL
|
||
|
end
|
||
|
|
||
|
window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
|
||
|
window.signal_connect('destroy') { Gtk.main_quit }
|
||
|
window.signal_connect('delete-event') { false }
|
||
|
|
||
|
box = Gtk::VBox.new(false, 6)
|
||
|
window.add(box)
|
||
|
|
||
|
buttons.each do |label, callback|
|
||
|
button = Gtk::Button.new(label)
|
||
|
button.signal_connect('clicked') do
|
||
|
callback.call
|
||
|
end
|
||
|
box.pack_start(button, true, true, 0)
|
||
|
end
|
||
|
window.show_all
|
||
|
Gtk.main
|