Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Perl Menus

by zentara (Archbishop)
on Sep 30, 2014 at 21:33 UTC ( [id://1102481]=note: print w/replies, xml ) Need Help??


in reply to Perl Menus

Does your program need to be terminal based or can you use an graphical gui? For instance, if you can use Gtk2, you can do something like this.
#!/usr/bin/perl -w use strict; use Gtk2 -init; use Gtk2::SimpleList; # by muppet on gtk-perl maillist my $window = Gtk2::Window->new; $window->signal_connect (destroy => sub { Gtk2->main_quit }); my $hbox = Gtk2::HBox->new; $window->add ($hbox); my $s1 = Gtk2::SimpleList->new ( 'Number' => 'int', 'Function' => 'text', 'Default' => 'int', 'Subvalues' => 'scalar', ); # Hide the Subvalues column. This will remove it from the treeview, # not from the model. One alternative to this is to use a column of # SimpleList type 'hidden', but that creates a column which only holds # text strings. Yet another alternative is to create a new SimpleList # column type for holding scalars in a hidden column... but this is # easier. :-/ $s1->remove_column ($s1->get_column (3)); my $s2 = Gtk2::SimpleList->new ( 'Value' => 'int', 'Midpoint' => 'int', 'Description' => 'text', ); @{ $s1->{data} } = ( [1, 'Volume', 0, make_sub_list ([ 32, 128, 'Preset1'], [ 220, 128, 'Preset2'])], [2, 'Pan', 128, make_sub_list ([ 64, 128, 'position in the stereo field'])], [3, 'Treble', 128, make_sub_list ([196, 128, 'high frequencies'])], [4, 'Mid', 128, make_sub_list ([157, 128, 'midrange frequencies'])], [5, 'Bass', 128, make_sub_list ([200, 128, 'low frequencies'])], [6, 'Color1', 128, make_sub_list ([10,5,'White'],[20,15,'Blue'])], [7, 'Whee', 255, make_sub_list ([10,5,'Ready'],[15,20,'Set'], [42,-1,'Go'])], ); $hbox->add ($s1); $hbox->add ($s2); $s1->get_selection->signal_connect (changed => sub { my ($selection) = @_; my $slist = $selection->get_tree_view; my ($sel) = $slist->get_selected_indices; # Here's something a little bit evil... we've stored the subvalues # as the TiedList objects that SimpleList uses. However, we need the # underlying ListStore for the TreeView. The ListStore is stored in # the TiedList object, so we have to get to that with tied(). Note # that we had a reference to the tied object, so we have to # dereference that when calling tied(), or it doesn't work. my $tiedlist = $slist->{data}[$sel][3]; $s2->set_model (tied(@$tiedlist)->{model}); # If you actually want to be able to use $s2->{data}, we have to # update it separately. Perhaps we should override set_model() # on SimpleList? $s2->{data} = $tiedlist; }); $window->show_all; Gtk2->main; sub make_sub_list { my $store = Gtk2::ListStore->new (qw(Glib::Int Glib::Int Glib::String)); # Note this nifty trick for filling the list... tie my @a, 'Gtk2::SimpleList::TiedList', $store; @a = @_; return \@a; }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Replies are listed 'Best First'.
Re^2: Perl Menus
by PilotinControl (Pilgrim) on Sep 30, 2014 at 21:53 UTC

    Hello Zentara,

    Thanks for that example. I'm going to give you a vote as that snippet of code will come in handy on another project. However I'm in a terminal win32 enviroment,

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1102481]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2024-04-23 20:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found