--- On Tue, 7/15/08, zentara <[EMAIL PROTECTED]> wrote:

> From: zentara <[EMAIL PROTECTED]>
> Subject: Re: Introduction and question
> To: [email protected]
> Date: Tuesday, July 15, 2008, 5:59 AM
> On Sat, 12 Jul 2008 15:15:04 +0200
> Michelle Konzack <[EMAIL PROTECTED]>
> wrote:
> 
> >Now I have begun, to port some older
> "Programs" coded in  BaSH  to  Perl
> >and I want to change the Xdialog stuff to a real
> GTK-Dialog.
> >
> >Since Xdialog can only show one thing at once, I have
> the singel options
> >in a "treeview", but now I want to use
> "notepad" with this nice tabs.
> >
> >OK, my programs write the optins to singel files (one 
> file  per  Option
> >like "courier-imap") and I use
> "cat" to read its value.  I do  not  want
> >to change this...
> >
> >In BaSH I used:
> >
> >----[ STDIN
> ]-----------------------------------------------------------
> >  for NAME1 in $(find ${CFGDIR} -type f -maxdepth 1) ;
> do
> >    VAL=$(cat ${NAME1})
> >    NAME=$(basename ${NAME1})
> >    eval "export
> ${VARPREFIX}${NAME}=\${VAL}"
> >  done
> >------------------------------------------------------------------------
> 
> I'm not very good at bash, but from what I can gather,
> this
> should get you started
> 
> #!/usr/bin/perl
> use warnings;
> use strict;
> use File::Basename;
> 
> my $os_string = "linux";
> fileparse_set_fstype($os_string);
> 
> my $dir = shift || '.';   # feed it a dir as
> argv[0]
>                                      # defaults to
> '.'
> my @files = ls($dir);
> 
> #print join "\n", @files,"\n";
> 
> #process your files here
> foreach my $file(@files){
>  print "$file\n";
>  my $fullfilename = $file;
> 
> my($base,$path,$ext)=fileparse($fullfilename,'\..*');
>  print "base -> $base\n";
>  print "path -> $path\n";
>  print "ext -> $ext\n";
> print "\n\n";
> }
> 
> 
> sub ls {
>  my $path = @_ ? shift : ".";
>  local *DIR;
>  opendir DIR, $path or die "can't ls $path:
> $!";
>  #remove subdirs, self, and parent dir
>  return grep { $_ ne "." and $_ ne ".."
> and ! -d } readdir DIR;
> }
> __END__
> 
> 
> >Then, the "notepad" dialog...
> >I want to have a button "Apply"  which  write
>  the  new  entered  values
> >to the config dir whithout closing the dialog where
> under BaSH I used:
> 
> You have to be careful with terminology. A Dialog in
> Perl/Gtk2 is a specific
> widget type, that does grabs and has predefined responses.
> You probably
> could do something like this. It's not perfect, but
> should give you are start.
> You will have to work on the Apply (to write your files
> out), and setting up your
> pages with nice names. 
> 
> If you notice, the contents are only printed out once 
> with get_vals(), maybe someone may know why? Maybe
> the iter needs to be reset?
> 
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> use Gtk2 '-init';
> 
> package NBDialog;
> use strict;
> use warnings;
> use Carp;
> use Gtk2;
> use Glib qw(TRUE FALSE);
> 
> use base 'Gtk2::Dialog';
>  
> sub new {
>       my $class = shift;
>       # create 
>       my $self = Gtk2::Dialog->new;
>       bless $self, $class;
> 
>         $self->set_position('center-always'); 
> 
>         # set some data if desired
>         #$self->{result} = 42;
> 
>     
>      $self->{notebook} = Gtk2::Notebook->new;
>      $self->{notebook}->set_tab_pos ('top');
>      
>      # put whatever files or whatever in here
>      foreach my
> $page('Page1','Page2','Page3'){
>      
>        # Create a textbuffer to contain that string
>        $self->{$page}->{textbuffer} =
> Gtk2::TextBuffer->new();
>       
> $self->{$page}->{textbuffer}->set_text($page);
> 
>        # Create a textview using that textbuffer
>        $self->{$page}->{textview} =
> Gtk2::TextView->new_with_buffer($self->{$page}->{textbuffer});
>        $self->{$page}->{textview}->set_left_margin
> (5);
>        #$textview->set_editable(0); 
> 
>       
> $self->{$page}->{textview}->get_buffer->signal_connect
> (
>          changed => sub { print
> "changed!\n"});
> 
>        # Add the textview to a scrolledwindow
>        my $scrolledwindow = Gtk2::ScrolledWindow->new(
> undef, undef );
>       
> $scrolledwindow->add($self->{$page}->{textview});
>      
>      #add to notebook
>      $self->{notebook}->append_page( $scrolledwindow,
> $self->make_label($page) );
>      
>      }
>      
>      # the dialog's vbox is an advertised widget which
> you can add to
>     
> $self->vbox->pack_start($self->{notebook},0,0,1);
>      $self->vbox->show_all();
> 
>     my $button0 =  $self->add_button ("Apply"
> => 1);
>     my $button1 = $self->add_button ("Reset"
> => 2);
>     my $button2 = $self->add_button ("Cancel"
> => 3);
>           
>      
>   $self->signal_connect (response =>
> \&do_response );
> # $self->signal_connect (response => sub {
> $_[0]->destroy });
> 
> return $self;
> }
> 
> 
> sub make_label {
>     my ($self,$text) = @_;
>     #print "@_\n";
>     my $hbox   = Gtk2::HBox->new;
>     my $label  = Gtk2::Label->new($text);
>     my $button = Gtk2::Button->new("x");    #
> a pixmap would look nicer
>     $button->signal_connect(
>         clicked => sub {
>             $self->{notebook}->remove_page(
> $self->{notebook}->get_current_page );
>         }
>     );
>     $hbox->pack_start( $label,  FALSE, FALSE, 0 );
>     $hbox->pack_start( $button, FALSE, FALSE, 0 );
>     $label->show;
>     $button->show;
> 
>     return $hbox;
> }
> 
> 
> sub do_response {
>   my ($self, $resp) = @_;
>   print "response $resp\n";
>    
>    return $resp;
> }
> 
> sub get_vals{
>     my $self = shift;
>     
>     foreach my
> $page('Page1','Page2','Page3'){
>      print 
> $self->{$page}->{textbuffer}->get_text(
>       
> $self->{$page}->{textbuffer}->get_start_iter, 
>        $self->{$page}->{textbuffer}->get_end_iter,
>        1),"\n";
>     }
> return 1;
> }
> 
> 1;
> 
> 
> package main;
> 
> 
> my $window = Gtk2::Window->new;
> my $button = Gtk2::Button->new ("Click me");
> $button->signal_connect (clicked =>
> \&do_stuff);
> $window->set_border_width (25);
> $window->add ($button);
> $window->show_all;
> $window->signal_connect (destroy => sub {
> Gtk2->main_quit });
> Gtk2->main;
> 
> sub do_stuff{
>    my $dialog = NBDialog->new;
> 
>    my $response = $dialog->run;
> 
>    print 'returned ',$response,"\n";
>    # do whatever here based on response
> 
>    print $dialog->get_vals(),"\n";
>  
> }
> 
> __END__
> 
> 
> 
> 
> zentara
> 
> 
> -- 
> I'm not really a human, but I play one on earth.
> http://zentara.net/CandyGram_for_Mongo.html 
> _______________________________________________
> gtk-perl-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/gtk-perl-list

One should have very special reason to use 'local' in Perl, I haven't had
such a reason for probably more than 10 years.

So, I suggest not to use 'local'.

Likewise,

"
local *DIR;
opendir DIR
"

should better be replaced with

opendir(my $dh, $dir) or die "cannot open '$dir' directory";

'local' creates a global entity - why one would need this ?

Regards,
  Sergei.


      
_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to