Re: Introduction and question
- From: Sergei Steshenko <sergstesh yahoo com>
- To: gtk-perl-list gnome org, zentara <zentara1 sbcglobal net>
- Subject: Re: Introduction and question
- Date: Tue, 15 Jul 2008 11:40:56 -0700 (PDT)
--- On Tue, 7/15/08, zentara <zentara1 sbcglobal net> wrote:
From: zentara <zentara1 sbcglobal net>
Subject: Re: Introduction and question
To: gtk-perl-list gnome org
Date: Tuesday, July 15, 2008, 5:59 AM
On Sat, 12 Jul 2008 15:15:04 +0200
Michelle Konzack <linux4michelle tamay-dogan net>
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
gtk-perl-list gnome org
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.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]