Dear all,
it appears that pure-perl pTk widgets support in Tcl::Tk is quite possible,
when trying Tix megawidgets, like in perlTk.
Following program works (not fully though)
use Tcl::Tk;
my $mw = Tcl::Tk::tkinit;
$mw->Declare('ToolBar','*perlTk/ToolBar');
my $tb = $mw->ToolBar(qw/-movable 1 -side top -indicatorcolor blue/);
$tb->ToolButton (-text => 'Button', -tip => 'tool tip', -command => sub
{ print "hi\n" });
$tb->ToolLabel (-text => 'A Label');
$tb->Label (-text => 'Another Label');
$tb->ToolButton(-image => 'navback22', -tip => 'back',
-command => \&back);
$tb->ToolButton(-image => 'navforward22', -tip => 'forward', -command
=> \&forward);
$tb->separator;
$tb->ToolButton(-image => 'navhome22', -tip => 'home', -command =>
\&home);
$tb->ToolButton(-image => 'actreload22', -tip => 'reload', -command =>
\&reload);
Tcl::Tk::MainLoop;
Support is not ready yet, its too early to think using it.
But it may be well included into next CPAN release of Tcl::Tk.
required:
- Tix
- pTk.pm file at http://vkonovalov.ru/tcltk-misc/pTk.pm.html
- patch below
--- E:\perl584\site\lib\Tcl\Tk.pm Tue Sep 27 15:50:18 2005
+++ H:\move\pe\Tcl\Tk.pm Mon Oct 10 02:37:58 2005
@@ -479,6 +479,7 @@
## TODO -- module's private $tkinterp should go away!
my $tkinterp = undef; # this gets defined when "new" is done
+sub tkinterp{$tkinterp}
# Hash to keep track of all created widgets and related instance data
# Tcl::Tk will maintain PATH (Tk widget pathname) and INT (Tcl interp)
@@ -1579,11 +1580,17 @@
if ($ttktype =~ s/^\*perlTk\///) {
# should create pure-perlTk widget and bind it to Tcl variable so
that
# anytime a method invoked it will be redirected to Perl
+ require 'Tcl/pTk.pm'; # load our pure-perlTk support
+ require "Tk/$ttktype.pm"; # this will 'use' perl/Tk
return sub {
- my $self = shift; # this will be a parent widget for newer widget
- my $int = $self->interp;
- my $w = w_uniq($self, $wpref); # create uniq pref's widget id
- die "pure-perlTk widgets are not implemented";
+ my $self = shift; # this will be a parent widget for newer
widget
+ my $int = $self->interp;
+ my $w = w_uniq($self, $wpref); # create uniq pref's widget
id
+ my $args = [EMAIL PROTECTED];
+ my $ptkwid = Tcl::pTk::new_widget($self,$ttktype,$w,$args);
+ my $wid = $int->declare_widget($int->call($ttktype,$w,%$args),
"Tcl::Tk::Widget::$wtype");
+ $ptkwid->bind_tcltk_widget($wid);
+ return $ptkwid;
};
}
if (exists $replace_options{$ttktype}) {
@@ -2167,7 +2174,7 @@
# XXX of this widget already.
#die "$wtype already created\n" if defined $ptk2tcltk{$wtype};
if (!exists $args{'-prefix'}) {
- $args{'-prefix'} ||= lcfirst $ttktype;
+ $args{'-prefix'} = lcfirst $ttktype;
$args{'-prefix'} =~ s/\W+//g;
}
$wtype = quotemeta($wtype); # to prevent chars corrupting regexp
@@ -2342,10 +2349,10 @@
_DEBUG(2, "AUTOCREATE $package$method $method (@_)\n") if DEBUG;
$sub = $fast ? sub {
my $w = shift;
- $w->interp->invoke($w, $method, @_);
+ $w->interp->invoke($w->path, $method, @_);
} : sub {
my $w = shift;
- $w->interp->call($w, $method, @_);
+ $w->interp->call($w->path, $method, @_);
};
}
_DEBUG(2, "creating ($package)$method (@_)\n") if DEBUG;
Best regards,
Vadim.