Gtk-Perl

 view release on metacpan or  search on metacpan

Gtk/samples/test.pl  view on Meta::CPAN

"o      c yellow",
"O      c #808080",
"#      c white",
"                ",
"       ..       ",
"     ..XX.      ",
"   ..XXXXX.     ",
" ..XXXXXXXX.    ",
".ooXXXXXXXXX.   ",
"..ooXXXXXXXXX.  ",
".X.ooXXXXXXXXX. ",
".XX.ooXXXXXX..  ",
" .XX.ooXXX..#O  ",
"  .XX.oo..##OO. ",
"   .XX..##OO..  ",
"    .X.#OO..    ",
"     ..O..      ",
"      ..        ",
"                ");

my @mini_page_xpm = (
"16 16 4 1",
"       c None s None",
".      c black",
"X      c white",
"o      c #808080",
"                ",
"   .......      ",
"   .XXXXX..     ",
"   .XoooX.X.    ",
"   .XXXXX....   ",
"   .XooooXoo.o  ",
"   .XXXXXXXX.o  ",
"   .XooooooX.o  ",
"   .XXXXXXXX.o  ",
"   .XooooooX.o  ",
"   .XXXXXXXX.o  ",
"   .XooooooX.o  ",
"   .XXXXXXXX.o  ",
"   ..........o  ",
"    oooooooooo  ",
"                ");

my $book_open;
my $book_open_mask;

my $book_closed;
my $book_closed_mask;

my $mini_page;
my $mini_page_mask;

my $root_win;
my $modeller;
my $sheets;
my $rings;

sub build_option_menu {
	my ( $items, $function, $num_items, $history, $data ) = @_;

	my $omenu = new Gtk::OptionMenu;
	my $menu = new Gtk::Menu;
	my $previous = undef;
	my $i;
    my $menu_item;

	for $i ( 0 .. $num_items - 1 ) {

# Perl/GTK!
# Please note the use of $previous to create the group of radioitems

		$menu_item = new_with_label Gtk::RadioMenuItem( @{$items}[$i], $previous );

		$menu_item->signal_connect( 'activate', $function, $data );
		$menu->append( $menu_item );
		if ( $i == $history ) {
			$menu_item->set_active( 1 );
		}
		$menu_item->show;
		$previous = $menu_item;
	}
	$omenu->set_menu( $menu );
	$omenu->set_history( $history );

	return $omenu;

}

sub find_radio_menu_toggled {
	my ( $widget ) = @_;

	my @group = $widget->group();
	my $i = 0;
	my $item;

	for $item ( @group ) {
		if ( $item->active ) {
			last;
		}
		$i++;
	}

	return $i;
}

sub bbox_widget_destroy {
	my($widget, $todestroy) = @_;
	
}

sub destroy_tooltips {
#	print "Destroy_tooltips: ", Dumper(\@_);
	my($widget, $window) = @_;
	#$$window->{tooltips}->unref;
	$$window = undef;
}

sub set_cursor {
	my($spinner, $widget) = @_;
	my($c, $cursor);
	
	$c = $spinner->get_value_as_int;
	$c = 0 if $c < 0;
	$c = 152 if $c > 152;
	
	$cursor = new Gtk::Gdk::Cursor $c;
	$widget->window->set_cursor($cursor);
	
}

sub cursor_expose_event {
	my($widget) = @_;

Gtk/samples/test.pl  view on Meta::CPAN

		$hbox2->border_width( 2 );
		$frame->add( $hbox2);

		$label = new Gtk::Label( 'Pages :' );
		$hbox2->pack_start( $label, 0, 1, 0 );

		$page_label = new Gtk::Label ( "$pages" );
		$hbox2->pack_end( $page_label, 0, 1, 5 );

		$frame = new Gtk::Frame( undef );
		$frame->set_shadow_type ( 'in' );
		$hbox->pack_start( $frame, 0, 1, 0 );

		$hbox2 = new Gtk::HBox( 0, 0 );
		$hbox2->border_width( 2 );
		$frame->add( $hbox2);

		$label = new Gtk::Label( 'Selected :' );
		$hbox2->pack_start( $label, 0, 1, 0 );

		my @selected = $ctree->selection();

		$sel_label = new Gtk::Label ( $#selected );
		$hbox2->pack_end( $sel_label, 0, 1, 5 );

		$frame = new Gtk::Frame( undef );
		$frame->set_shadow_type ( 'in' );
		$hbox->pack_start( $frame, 0, 1, 0 );

		$hbox2 = new Gtk::HBox( 0, 0 );
		$hbox2->border_width( 2 );
		$frame->add( $hbox2);

		$label = new Gtk::Label( 'Visible :' );
		$hbox2->pack_start( $label, 0, 1, 0 );

		my @row_list = $ctree->row_list();

		$vis_label = new Gtk::Label ( $#row_list );
		$hbox2->pack_end( $vis_label, 0, 1, 5 );

		ctree_rebuild( undef, $ctree );

	}
	if (not $ctree_window->visible) {
		$ctree_window->show_all;
	} else {
		$ctree_window->destroy;
	}

}

sub create_menu {
	my($depth) = @_;
	my($menu,$submenu,$menuitem);
	
	if ($depth<1) {
		return undef;
	}
	
	$menu = new Gtk::Menu;
	$submenu = undef;
	$menuitem = undef;
	
	my($i,$j);
	for($i=0,$j=1;$i<5;$i++,$j++)
	{
		my($buffer) = sprintf("item %2d - %d", $depth, $j);
		$menuitem = new Gtk::RadioMenuItem($buffer, $menuitem);
		$menu->append($menuitem);
		$menuitem->set_show_toggle(1) if $depth % 2;
		$menuitem->show;
		if ($depth>1) {
			if (not defined $submenu) {
				$submenu = create_menu($depth-1);
				$menuitem->set_submenu($submenu);
			}
		}
	}
	
	return $menu;
}

sub create_menus {
	my($box1,$box2,$button,$menu,$menubar,$menuitem,$optionmenu,$separator);
	
	if (not defined $menu_window) {
		$menu_window = new Gtk::Window -toplevel;
		signal_connect $menu_window destroy => \&destroy_window, \$menu_window;
		signal_connect $menu_window delete_event => \&destroy_window, \$menu_window;
		$menu_window->set_title("menus");
		$menu_window->border_width(0);
		
		$box1 = new Gtk::VBox(0,0);
		$menu_window->add($box1);
		$box1->show;
		
		$menubar = new Gtk::MenuBar;
		$box1->pack_start($menubar, 0, 1, 0);
		$menubar->show;
		
		$menu = create_menu(2);
		
		$menuitem = new Gtk::MenuItem("test");
		$menuitem->set_submenu($menu);
		$menubar->append($menuitem);
		show $menuitem;

		$menu = create_menu(3);
		
		$menuitem = new Gtk::MenuItem("foo");
		$menuitem->set_submenu($menu);
		$menubar->append($menuitem);
		show $menuitem;

		$menu = create_menu(4);
		
		$menuitem = new Gtk::MenuItem("bar");
		$menuitem->set_submenu($menu);
		$menubar->append($menuitem);
		show $menuitem;

		$box2 = new Gtk::VBox(0,10);
		$box2->border_width(10);
		$box1->pack_start($box2, 1, 1, 0);
		$box2->show;
		
		$optionmenu = new Gtk::OptionMenu;
		$optionmenu->set_menu(create_menu(1));
		$optionmenu->set_history(4);
		$box2->pack_start($optionmenu, 1, 1, 0);
		$optionmenu->show;
		
		$separator = new Gtk::HSeparator;
		$box1->pack_start($separator, 0, 1, 0);
		show $separator;
		
		$box2 = new Gtk::VBox(0,10);
		$box2->border_width(10);
		$box1->pack_start($box2, 0, 1, 0);
		$box2->show;
		
		$button = new Gtk::Button "close";
		signal_connect $button clicked => sub { destroy $menu_window};
		$box2->pack_start($button, 1, 1, 0);
		$button->can_default(1);
		$button->grab_default;
		$button->show;
	}
	if (!visible $menu_window) {
		show $menu_window;
	} else {	
		destroy $menu_window;
	}
}

sub item_factory_cb {
	my ($widget, $action, @data) = @_;

	print "ItemFactory: activated ", $widget->item_factory_path(), " -> ", $action, "\n";
}

my @item_factory_entries = (
	["/_File",	undef,	0,	"<Branch>"],
	["/File/tearoff1",	undef,	0,	"<Tearoff>"],
	["/File/_New",	"<control>N",	1],
	["/File/_Open",	"<control>O",	2],
	["/File/_Save", "<control>S",	3],
	["/File/Save _As...",	undef,	4],
	["/File/sep1",	undef,	0,	"<Separator>"],
	#["/File/_Quit",	"<control>Q",	5],
	{
		'path' => "/File/_Quit", 
		'accelerator' => "<control>Q",	
		'action' => 5,
		'type' => '<Item>'
	},
	
	["/_Preferences",	undef,	0,	"<Branch>"],
	["/_Preferences/_Color",	undef,	0,	"<Branch>"],
	["/_Preferences/Color/_Red",	undef,	10,	"<RadioItem>"],
	["/_Preferences/Color/_Green",	undef,	11,	"<RadioItem>"],
	["/_Preferences/Color/_Blue",	undef,	12,	"<RadioItem>"],
	["/_Preferences/_Shape",	undef,	0,	"<Branch>"],
	["/_Preferences/Shape/_Square",	undef,	20,	"<RadioItem>"],
	["/_Preferences/Shape/_Rectangle",	undef,	21,	"<RadioItem>"],
	["/_Preferences/Shape/_Oval",	undef,	22,	"<RadioItem>"],

	["/_Help",	undef,	0,	"<LastBranch>"],
	["/Help/_About",	undef,	30]
);

sub create_item_factory {
	if (!defined $item_factory_window) {
		my ($accel_group, $item_factory, $box1, $label, $box2);
		my ($separator, $button, $dummy);

		
		$item_factory_window = new Gtk::Window('toplevel');
		signal_connect $item_factory_window destroy => \&destroy_window, \$item_factory_window;
		signal_connect $item_factory_window "delete-event" => \&destroy_window, \$item_factory_window;

		$accel_group = new Gtk::AccelGroup;
		$item_factory = new Gtk::ItemFactory('Gtk::MenuBar', "<main>", $accel_group);
		
		#$item_factory_window->set_data('<main>', $item_factory);
		$accel_group->attach($item_factory_window);
		# $item_factory->create_items();
		foreach (@item_factory_entries) {
			$item_factory->create_item($_, \&item_factory_cb);
		}
		
		$item_factory_window->set_title("Item Factory");
		$item_factory_window->set_border_width(0);
		
		$box1 = new Gtk::VBox(0, 0);
		$item_factory_window->add($box1);
		$box1->pack_start($item_factory->get_widget('<main>'), 0, 0, 0);

		$label = new Gtk::Label "Type\n<alt>\nto start";

		$label->set_usize(200, 200);
		$label->set_alignment(0.5, 0.5);
		$box1->pack_start($label, 1, 1, 0);

		$separator = new Gtk::HSeparator;
		$box1->pack_start($separator, 0, 1, 0);

		$box2 = new Gtk::VBox(0, 10);
		$box2->set_border_width(10);
		$box1->pack_start($box2, 0, 1, 0);

		$button = new Gtk::Button("close");
		$button->signal_connect('clicked', sub {$item_factory_window->destroy;});
		$box2->pack_start($button, 1, 1, 0);
		$button->can_default(1);
		$button->grab_default;

	}
	if (!visible $item_factory_window) {
		show_all $item_factory_window;
	} else {
		destroy $item_factory_window;
	}
}

sub color_selection_ok {
	my($widget, $dialog) = @_;
	
	my(@color) = $dialog->colorsel->get_color;
	print "color=@color\n";
	$dialog->colorsel->set_color(@color);
}

sub color_selection_changed {
	my($widget, $dialog) = @_;

	my(@color) = $dialog->colorsel->get_color;
	print "color=@color\n";
}

sub create_color_selection {
	if (not defined $cs_window) {
		set_install_cmap Gtk::Preview 1;

Gtk/samples/test.pl  view on Meta::CPAN

	$notebook->set_scrollable( 1 );
	if ( $notebook->children == 5 ) {
		notebook_create_pages( $notebook, 6, 15 );
	}
}

sub notebook_popup {
	my( $button, $notebook ) = @_;

	if ( $button->active ) {
		$notebook->popup_enable;
	} else {
		$notebook->popup_disable;
	}
}

sub create_notebook {
	my(
		$box1,
		$box2,
		$button,
		$separator,
		$notebook,
		$omenu,
		$menu,
		$submenu,
		$menuitem,
		$group,
		$transparent
	);
	
	if (not defined $notebook_window) {

		$notebook_window = new Gtk::Window( 'toplevel' );
		
		$notebook_window->signal_connect( 'destroy', \&Gtk::Widget::destroyed, \$notebook_window );
		$notebook_window->set_title("notebook");
		$notebook_window->border_width(0);
		
		$box1 = new Gtk::VBox 0, 0;
		$notebook_window->add($box1);
		
		$notebook = new Gtk::Notebook;
		$notebook->signal_connect( 'switch_page', \&notebook_page_switch );
		$notebook->set_tab_pos(-top);
		$box1->pack_start($notebook, 1, 1, 0);
		$notebook->border_width(10);
		
		$notebook->realize;
		($book_open, $book_open_mask) = Gtk::Gdk::Pixmap->create_from_xpm_d($notebook->window, $transparent, @book_open_xpm);
		($book_closed, $book_closed_mask) = Gtk::Gdk::Pixmap->create_from_xpm_d($notebook->window, $transparent, @book_closed_xpm);
		
		notebook_create_pages($notebook, 1, 5);
		
		$separator = new Gtk::HSeparator();
		$box1->pack_start( $separator, 0, 1, 10 );
		
		$box2 = new Gtk::HBox( 1, 5 );
		$box1->pack_start( $box2, 0, 1, 0 );
		
		$omenu = new Gtk::OptionMenu();
		$menu = new Gtk::Menu();
		$submenu = undef;
		$menuitem = undef;
		
		$menuitem = new Gtk::RadioMenuItem "Standard", $menuitem;
		$menuitem->signal_connect("activate", \&notebook_standard, $notebook);
		$menu->append($menuitem);
		$menuitem->show;

		$menuitem = new Gtk::RadioMenuItem "w/o Tabs", $menuitem;
		$menuitem->signal_connect("activate", \&notebook_notabs, $notebook);
		$menu->append($menuitem);
		$menuitem->show;

		$menuitem = new Gtk::RadioMenuItem "Scrollable", $menuitem;
		$menuitem->signal_connect("activate", \&notebook_scrollable, $notebook);
		$menu->append($menuitem);
		$menuitem->show;
		
		$omenu->set_menu($menu);
		$box2->pack_start($omenu, 0, 0, 0);
		$button = new Gtk::CheckButton "Enable popup menu";
		$box2->pack_start($button, 0, 0, 0);
		$button->signal_connect("clicked", \&notebook_popup, $notebook);
		
		$box2 = new Gtk::HBox 0, 10;
		$box2->border_width(10);
		$box1->pack_start($box2, 0, 1, 0);
		
		$button = new Gtk::Button( 'Close' );
		$button->signal_connect( 'clicked', sub { $notebook_window->destroy } );
		$box2->pack_start( $button, 1, 1, 0 );
		$button->can_default( 1 );
		$button->grab_default;
		
		$button = new Gtk::Button( 'Next' );
		$button->signal_connect( 'clicked', sub { $notebook->next_page } );
		$box2->pack_start( $button, 1, 1, 0 );
		
		$button = new Gtk::Button( 'Prev' );
		$button->signal_connect( 'clicked', sub { $notebook->prev_page } );
		$box2->pack_start( $button, 1, 1, 0 );

		$button = new Gtk::Button( 'Rotate' );
		$button->signal_connect( 'clicked', \&notebook_rotate, $notebook );
		$box2->pack_start( $button, 1, 1, 0 );
	}
	
	if (! $notebook_window->visible) {
		$notebook_window->show_all();
	} else {
		$notebook_window->destroy();
	}
}

# paned demo

sub create_panes {
	my($frame,$hpaned,$vpaned);
	if (not defined $paned_window) {
		$paned_window = new Gtk::Window "toplevel";
		$paned_window->signal_connect("destroy", \&destroy_window, \$paned_window);
		$paned_window->signal_connect("delete_event", \&destroy_window, \$paned_window);
		$paned_window->set_title("Panes");
		$paned_window->border_width(0);
		
		$vpaned = new Gtk::VPaned;
		$paned_window->add($vpaned);
		$vpaned->border_width(5);
		$vpaned->show;

		$hpaned = new Gtk::HPaned;
		$vpaned->add1($hpaned);

		$frame = new Gtk::Frame;



( run in 0.622 second using v1.01-cache-2.11-cpan-39bf76dae61 )