Gtk-Perl
view release on metacpan or search on metacpan
Gtk/samples/test.pl view on Meta::CPAN
sub shape_create_icon {
my($xpm_file, $x, $y, $px, $py, $window_type) = @_;
my($window, $pixmap, $fixed, $gc, $gdk_pixmap_mask, $gdk_pixmap, $style);
$style = Gtk::Widget->get_default_style;
$gc = $style->black;#_gc;
$window = new Gtk::Window $window_type;
$fixed = new Gtk::Fixed;
$fixed->set_usize(100,100);
$window->add($fixed);
show $fixed;
$window->set_events( [keys %{$window->get_events}, 'button_motion_mask', 'pointer_motion_hint_mask', 'button_press_mask']);
realize $window;
($gdk_pixmap, $gdk_pixmap_mask) = Gtk::Gdk::Pixmap->create_from_xpm($window->window, $style->bg('normal'), $xpm_file);
$pixmap = new Gtk::Pixmap $gdk_pixmap, $gdk_pixmap_mask;
$fixed->put($pixmap, $px, $py);
show $pixmap;
$window->shape_combine_mask($gdk_pixmap_mask, $px, $py);
$window->signal_connect('button_press_event', \&shape_pressed);
$window->signal_connect('button_release_event', \&shape_released);
$window->signal_connect('motion_notify_event', \&shape_motion);
$window->set_uposition($x,$y);
$window->show;
$window;
}
sub destroy_window {
my($widget, $windowref, $w2) = @_;
$$windowref = undef;
$w2 = undef if defined $w2;
0;
}
sub button_window {
my($widget,$button) = @_;
if (! $button->visible) {
show $button;
} else {
hide $button;
}
}
sub create_shapes {
$root_win = Gtk::Gdk::Window->new_foreign(Gtk::Gdk->ROOT_WINDOW());
if (not defined $modeller) {
$modeller = shape_create_icon("xpm/Modeller.xpm", 440, 140, 0,0, -popup);
$modeller->signal_connect("destroy", \&Gtk::Widget::destroyed, \$modeller);
} else {
destroy $modeller;
}
if (not defined $sheets) {
$sheets = shape_create_icon("xpm/FilesQueue.xpm", 580,170, 0,0, -popup);
$sheets->signal_connect("destroy", \&Gtk::Widget::destroyed, \$sheets);
} else {
destroy $sheets;
}
if (not defined $rings) {
$rings = shape_create_icon("xpm/3DRings.xpm", 460, 270, 25,25, -toplevel);
$rings->signal_connect("destroy", \&Gtk::Widget::destroyed, \$rings);
} else {
destroy $rings;
}
}
sub create_wmhints {
my($circles,$mask,$box1,$box2,$separator,$label,$button);
if (not defined $wmhints_window) {
$wmhints_window = new Gtk::Window 'toplevel';
signal_connect $wmhints_window "destroy", \&destroy_window, \$wmhints_window;
signal_connect $wmhints_window "delete_event", \&destroy_window, \$wmhints_window;
$wmhints_window->set_title("WM Hints");
$wmhints_window->border_width(0);
$wmhints_window->realize;
($circles,$mask) = Gtk::Gdk::Pixmap->create_from_xpm($wmhints_window->window, $wmhints_window->style->white, "xpm/circles.xpm");
$wmhints_window->window->set_icon(undef, $circles, $mask);
$wmhints_window->window->set_icon_name("WMHints Test Icon");
$wmhints_window->window->set_decorations(['all', 'menu']);
$wmhints_window->window->set_functions(['all', 'resize']);
$box1 = new Gtk::VBox 0, 0;
$wmhints_window->add($box1);
$box1->show;
$label = new Gtk::Label "Try iconizing me!";
$label->set_usize(150,50);
$box1->pack_start($label, 1, 1, 0);
$label->show;
$separator = new Gtk::HSeparator;
$box1->pack_start($separator, 0, 1, 0);
$separator->show;
$box2 = new Gtk::VBox 0, 10;
$box2->border_width(10);
$box1->pack_start($box2, 0, 1, 0);
$box2->show;
$button = new Gtk::Button "close";
$button->signal_connect( clicked => sub {destroy $wmhints_window});
$box2->pack_start($button, 1, 1, 0);
$button->can_default(1);
$button->grab_default();
$button->show;
}
Gtk/samples/test.pl view on Meta::CPAN
$menu_box = new Gtk::HBox( 0, 0 );
$pixwid = new Gtk::Pixmap( $book_closed, $book_closed_mask );
$menu_box ->pack_start( $pixwid, 0, 1, 0 );
$pixwid->set_padding( 3, 1);
$label = new Gtk::Label( $buffer) ;
$menu_box->pack_start( $label, 0, 1, 0 );
$menu_box->show_all();
$notebook->append_page_menu($child, $label_box, $menu_box);
}
}
sub notebook_rotate {
my( $button, $notebook ) = @_;
my %rotate = (
top => "right",
right => "bottom",
bottom => "left",
left => "top"
);
$notebook->set_tab_pos( $rotate{ $notebook->tab_pos } );
}
sub notebook_standard {
my( $button, $notebook ) = @_;
$notebook->set_show_tabs( 1 );
$notebook->set_scrollable( 0 );
if ( $notebook->children == 15 ) {
my $i;
for $i (0 .. 9 ) {
$notebook->remove_page( 5 );
}
}
}
sub notebook_notabs {
my( $button, $notebook ) = @_;
$notebook->set_show_tabs( 0 );
if ( $notebook->children == 15 ) {
my $i;
for $i ( 0 .. 9 ) {
$notebook->remove_page( 5 );
}
}
}
sub notebook_scrollable {
my( $button, $notebook ) = @_;
$notebook->set_show_tabs( 1 );
$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', \¬ebook_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", \¬ebook_standard, $notebook);
$menu->append($menuitem);
$menuitem->show;
$menuitem = new Gtk::RadioMenuItem "w/o Tabs", $menuitem;
$menuitem->signal_connect("activate", \¬ebook_notabs, $notebook);
$menu->append($menuitem);
$menuitem->show;
$menuitem = new Gtk::RadioMenuItem "Scrollable", $menuitem;
$menuitem->signal_connect("activate", \¬ebook_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", \¬ebook_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', \¬ebook_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;
$frame->set_shadow_type("in");
$frame->set_usize(60,60);
$hpaned->add1($frame);
$frame->show;
$frame = new Gtk::Frame;
$frame->set_shadow_type("in");
$frame->set_usize(80,60);
$hpaned->add2($frame);
( run in 1.722 second using v1.01-cache-2.11-cpan-364913b4093 )