Etk-Perl

 view release on metacpan or  search on metacpan

etk_test/etk_test.pl  view on Meta::CPAN

	label => "Dialogs", 
	widget => undef,
	table => undef,
	examples => 0
    },
    
    misc => { 
	label => "Misc", 
	widget => undef,
	table => undef,
	examples => 0
    }
);

# buttons used to launch the examples
my %buttons = (
    
    button => {
	label => "Button", 
	frame => "basic", 
	cb => \&button_window_show
    },
    
    entry => {
	label => "Entry",
	frame => "basic", 
	cb => \&entry_window_show
    },    
    
    image => {
	label => "Image", 
	frame => "basic", 
	cb => \&image_window_show
    },
    
    slider => {
	label => "Slider", 
	frame => "basic", 
	cb => \&slider_window_show
    },
    
    progbar => {
	label => "Progress Bar",
	frame => "basic", 
	cb => \&progbar_window_show
    },
    
    canvas => {
	label => "Canvas",
	frame => "adv", 
	cb => \&canvas_window_show
    },
    
    tree => {
	label => "Tree",
	frame => "adv", 
	cb => \&tree_window_show
    },
    
    menu => {
	label => "Menu",
	frame => "adv", 
	cb => \&menu_window_show
    },
    
    combobox => {
	label => "Combobox",
	frame => "adv", 
	cb => \&combobox_window_show
    },
    
    iconbox => {
	label => "Iconbox",
	frame => "adv", 
	cb => \&iconbox_window_show
    },
    
    textview => {
	label => "Text View",
	frame => "adv", 
	cb => \&textview_window_show
    },
    
    table => {
	label => "Table",
	frame => "cont", 
	cb => \&table_window_show
    },
    
    paned => {
	label => "Paned",
	frame => "cont", 
	cb => \&paned_window_show
    },
    
    scrolledview => {
	label => "Scrolled View",
	frame => "cont", 
	cb => \&scrolledview_window_show
    },
    
    notebook => {
	label => "Notebook",
	frame => "cont", 
	cb => \&notebook_window_show
    },
    
    colorpicker => {
	label => "Colorpicker",
	frame => "dia",
	cb => \&colorpicker_window_show
    },
    
    filechooser => {
	label => "File Chooser",
	frame => "dia", 
	cb => \&filechooser_window_show
    },    
    
    dnd => {
	label => "X Drag / Drop",

etk_test/etk_test.pl  view on Meta::CPAN

		for ($row = $tree->FirstRowGet(); $row; $row = $row->WalkNext(1)) {
			if ($row->IsSelected()) {
				$row->Delete();
			}
		}
		return 0;
	}

    });

    $tree->Build();
    
    $tree->Freeze();

    for(my $i = 0; $i < 1000; $i++)
    {
	my $row = $tree->RowAppend();

	$row->ModelFieldsSet(0, $mod1,  Etk::Theme::IconPathGet(), 
		Etk::Stock::KeyGet(PlacesUserHome, SizeSmall));
	$row->ModelFieldsSet(0, $mod2, "Row " . (($i*3)+1));
	$row->FieldsSet(0, $col2, 10.0);
	$row->FieldsSet(0, $col3, "images/1star.png");
	$row->FieldsSet(0, $col4, 0);


	my $row2 = $tree->RowAppend($row);
	$row2->ModelFieldsSet(0, $mod1,  Etk::Theme::IconPathGet(), 
		Etk::Stock::KeyGet(PlacesUserHome, SizeSmall));
	$row2->ModelFieldsSet(0, $mod2, "Row " . (($i*3)+2));
	
	$row2->FieldsSet(0, $col2, 20.0);
	$row2->FieldsSet(0, $col3, "images/2stars.png");
	$row2->FieldsSet(0, $col4, 1);

	my $row3 = $tree->RowAppend($row2);
	$row3->ModelFieldsSet(0, $mod1,  Etk::Theme::IconPathGet(), 
		Etk::Stock::KeyGet(PlacesUserHome, SizeSmall));
	$row3->ModelFieldsSet(0, $mod2, "Row " . (($i*3)+3));
	$row3->FieldsSet(0, $col2, 30.0);
	$row3->FieldsSet(0, $col3, "images/3stars.png");
	$row3->FieldsSet(0, $col4, 1);

    }

    $tree->Thaw();

    $col1->SortSet(  sub {
	my ($col, $row1, $row2) = @_;
	my $a = $row1->ModelFieldsGet($mod2);
	my $b = $row2->ModelFieldsGet($mod2);
	return $a cmp $b;
    }, undef);
    
    $win->ShowAll();
}

sub menu_window_show
{
    my $win = Etk::Window->new();
    $win->TitleSet("Etk-Perl Menu Test");
    $win->SizeRequestSet(325, 240);
    my $box = Etk::VBox->new(0, 0);

    my $menubar = Etk::Menu::Bar->new();

    $box->Append($menubar);

    my $toolbar = Etk::Toolbar->new();
    $box->Append($toolbar);

    $toolbar->Append(Etk::Button->new(EditCopy));
    $toolbar->Append(Etk::Button->new(EditCut));
    $toolbar->Append(Etk::Button->new(EditPaste));

    $toolbar->Append(Etk::VSeparator->new());

    $toolbar->Append(Etk::Button->new(EditUndo));
    $toolbar->Append(Etk::Button->new(EditRedo));

    $toolbar->Append(Etk::VSeparator->new());

    $toolbar->Append(Etk::Button->new(EditFind));

    my $label = Etk::Label->new("Click me :)");
    $label->AlignmentSet(0.5, 0.5);
    $label->PassMouseEventsSet(1);

    $box->Append($label, BoxStart, BoxExpandFill);

    my $statusbar = Etk::StatusBar->new();

    $box->Append($statusbar, BoxEnd);

    my $menu_item = _menu_test_item_new("File", $menubar, $statusbar);
    my $menu = Etk::Menu->new();
    $menu_item->SubmenuSet($menu);
    _menu_test_stock_item_new("Open", DocumentOpen, $menu, $statusbar);
    _menu_test_stock_item_new("Save", DocumentSave, $menu, $statusbar);
    
    $menu_item = _menu_test_item_new("Edit", $menubar, $statusbar);
    $menu = Etk::Menu->new();
    $menu_item->SubmenuSet($menu);
    _menu_test_stock_item_new("Cut", EditCut, $menu, $statusbar);
    _menu_test_stock_item_new("Copy", EditCopy, $menu, $statusbar);
    _menu_test_stock_item_new("Paste", EditPaste, $menu, $statusbar);
    
    $menu_item = _menu_test_item_new("Help", $menubar, $statusbar);
    $menu = Etk::Menu->new();
    $menu_item->SubmenuSet($menu);
    _menu_test_item_new("About", $menu, $statusbar);
   
    $menu = Etk::Menu->new();
    $win->SignalConnect("mouse-down", sub { $menu->Popup() });
    
    _menu_test_stock_item_new("Open", DocumentOpen, $menu, $statusbar);
    _menu_test_stock_item_new("Save", DocumentSave, $menu, $statusbar);
    _menu_seperator_new($menu);
    _menu_test_stock_item_new("Cut", EditCut, $menu, $statusbar);
    _menu_test_stock_item_new("Copy", EditCopy, $menu, $statusbar);
    _menu_test_stock_item_new("Paste", EditPaste, $menu, $statusbar);
    _menu_seperator_new($menu);
    $menu_item = _menu_test_item_new("Menu Item Test", $menu, $statusbar);

    # Sub menu 1

    my $submenu1 = Etk::Menu->new();
    $menu_item->SubmenuSet($submenu1);

    _menu_test_stock_item_new("Item with image", DocumentSave, 
	$submenu1, $statusbar);

    $menu_item = _menu_test_stock_item_new("Item with child", 
	DocumentOpen, $submenu1, $statusbar);
    _menu_seperator_new($submenu1);
    _menu_test_check_item_new("Item with check 1", $submenu1, $statusbar);
    _menu_test_check_item_new("Item with check 2", $submenu1, $statusbar);
    _menu_seperator_new($submenu1);
    
    my $radio = _menu_test_radio_item_new("Radio 1", undef, $submenu1, $statusbar);
    _menu_test_radio_item_new("Radio 2", $radio, $submenu1, $statusbar);
    _menu_test_radio_item_new("Radio 3", $radio, $submenu1, $statusbar);

    # Sub menu 2
    my $submenu2 = Etk::Menu->new();
    $menu_item->SubmenuSet($submenu2);
    _menu_test_item_new("Child Menu Test", $submenu2, $statusbar);

    $win->Add($box);
    $win->ShowAll();
}

sub _menu_test_item_new
{
    my ($label, $menubar, $statusbar) = @_;
    my $menu_item = Etk::Menu::Item->new($label);
    $menubar->Append($menu_item);
    $menu_item->SignalConnect("selected", 
    	sub { $statusbar->MessagePush($menu_item->LabelGet(), 0) });
    $menu_item->SignalConnect("unselected", 
    	sub { $statusbar->MessagePop(0) });
    
    return $menu_item;
}

sub _menu_test_stock_item_new
{
    my ($label, $stockid, $menubar, $statusbar) = @_;

    my $menu_item = Etk::Menu::Item::Image->new($label);
    my $image = Etk::Image->new($stockid, SizeSmall);
    $menu_item->Set($image);
    $menubar->Append($menu_item);
    $menu_item->SignalConnect("selected", 
    	sub { $statusbar->MessagePush($menu_item->LabelGet(), 0) });
    $menu_item->SignalConnect("unselected", 
    	sub { $statusbar->MessagePop(0) });

    return $menu_item;

}

sub _menu_test_check_item_new
{
    my ($label, $menubar, $statusbar) = @_;

    my $menu_item = Etk::Menu::Item::Check->new($label);
    $menubar->Append($menu_item);
    $menu_item->SignalConnect("selected", 
    	sub { $statusbar->MessagePush($menu_item->LabelGet(), 0) });
    $menu_item->SignalConnect("unselected", 
    	sub { $statusbar->MessagePop(0) });

    return $menu_item;
}

sub _menu_test_radio_item_new
{
    my ($label, $radio, $menubar, $statusbar) = @_;

    my $menu_item;
    if ($radio) 
    {
        $menu_item = Etk::Menu::Item::Radio->new($label, $radio);
    }
    else
    {
        $menu_item = Etk::Menu::Item::Radio->new($label);
    }
    $menubar->Append($menu_item);
    $menu_item->SignalConnect("selected", 
    	sub { $statusbar->MessagePush($menu_item->LabelGet(), 0) });
    $menu_item->SignalConnect("unselected", 
    	sub { $statusbar->MessagePop(0) });

    return $menu_item;
}

sub _menu_seperator_new
{
    my ($menubar) = @_;
    my $menu_item = Etk::Menu::Item::Separator->new();
    $menubar->Append($menu_item);
    return $menu_item;
}

sub __combobox_entry_populate 
{
    my $combo = shift;
    my $dir = shift;

    $combo->Clear();
    $combo->ItemPrepend(
    		Etk::Image::new_from_stock(PlacesFolder, SizeSmall),
		"..");

    while (<$dir/*>) {
	    if (-d) {
		$combo->ItemPrepend(
			Etk::Image::new_from_stock(PlacesFolder, SizeSmall),
			$_);
	    } else {
		$combo->ItemPrepend(
			Etk::Image::new_from_stock(TextXGeneric, SizeSmall),
			$_);
	    }

    }

}

sub combobox_window_show
{
    my $win = Etk::Window->new();
    $win->TitleSet("Etk-Perl Combo Test");
    my $vbox = Etk::VBox->new(0, 3);
    
    my $frame = Etk::Frame->new("Simple combobox");
    $vbox->Append($frame);
    
    my $combobox = Etk::Combobox::new_default();
    $frame->Add($combobox);
    $combobox->ItemAppend("Test 1");
    $combobox->ItemAppend("Test 2");
    $combobox->ItemAppend("Test 3");    

    $frame = Etk::Frame->new("Entry combobox");
    $vbox->Append($frame);

    $combobox = Etk::Combobox::Entry->new();
    $combobox->SignalConnect("active-item-changed", sub {
	    print "TODO\n";
    });
    $combobox->ColumnAdd(EntryImage, 24, EntryNone, 0.0);
    $combobox->ColumnAdd(EntryLabel, 75, EntryExpand, 0.0);
    $combobox->Build();
    $frame->Add($combobox);
    __combobox_entry_populate($combobox, ".");

    $frame = Etk::Frame->new("Some stock icons");
    $vbox->Append($frame);
    



( run in 1.750 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )