$VERSION
=
'0.07'
;
Construct Tk::Widget
'PluginsForm'
;
sub
Populate {
my
(
$self
,
$args
) =
@_
;
my
$ext
=
delete
$args
->{
'-pluginsext'
};
die
'Please specify -pluginsext'
unless
defined
$ext
;
$self
->SUPER::Populate(
$args
);
my
$lf
=
$self
->LabFrame(
-label
=>
'Available plugins'
,
-labelside
=>
'acrosstop'
,
)->
pack
(
-expand
=> 1,
-fill
=>
'both'
,
-padx
=> 2,
-pady
=> 2);
my
$pane
=
$lf
->Scrolled(
'Pane'
,
-height
=> 200,
-scrollbars
=>
'oe'
,
-sticky
=>
'nsew'
,
)->
pack
(
-expand
=> 1,
-fill
=>
'both'
);
my
%plugins
= ();
for
(
$ext
->AvailablePlugins) {
my
$plug
=
$_
;
my
$val
=
$ext
->plugExists(
$plug
);
$plugins
{
$plug
} = \
$val
;
my
$f
=
$pane
->Frame(
-borderwidth
=> 2,
-relief
=>
'groove'
,
)->
pack
(
-fill
=>
'x'
,
-padx
=> 2,
-pady
=> 2);
$f
->Checkbutton(
-command
=>
sub
{
if
(
$val
) {
$ext
->plugLoad(
$plug
);
$self
->
after
(10,
sub
{
$val
=
''
unless
$ext
->plugExists(
$plug
) });
}
else
{
$ext
->plugUnload(
$plug
);
$self
->
after
(10,
sub
{
$val
=
''
if
$ext
->plugExists(
$plug
) });
}
},
-variable
=> \
$val
,
-text
=>
$plug
)->
pack
(
-padx
=> 2,
-pady
=> 2,
-anchor
=>
'w'
);
$f
->Label(
-text
=>
$ext
->plugDescription(
$plug
),
-justify
=>
'left'
,
)->
pack
(
-padx
=> 2,
-pady
=> 2,
-anchor
=>
'w'
);
}
$self
->{PLUGINS} = \
%plugins
;
my
$bf
=
$self
->Frame->
pack
(
-fill
=>
'x'
);
$bf
->Button(
-text
=>
'Select all'
,
-command
=> [
'LoadAll'
,
$self
],
)->
pack
(
-side
=>
'left'
,
-padx
=> 2,
-pady
=> 2);
$bf
->Button(
-text
=>
'Select none'
,
-command
=> [
'UnloadAll'
,
$self
],
)->
pack
(
-side
=>
'left'
,
-padx
=> 2,
-pady
=> 2);
$self
->ConfigSpecs(
-pluginsext
=> [
'PASSIVE'
,
undef
,
undef
,
$ext
],
DEFAULT
=> [
$self
],
);
}
sub
LoadAll {
my
$self
=
shift
;
my
$ext
=
$self
->cget(
'-pluginsext'
);
my
$plugins
=
$self
->{PLUGINS};
for
(
sort
keys
%$plugins
) {
my
$plug
=
$_
;
$ext
->plugLoad(
$plug
);
$self
->
after
(10,
sub
{
my
$v
=
$plugins
->{
$plug
};
if
(
$ext
->plugExists(
$plug
)) {
$$v
= 1
}
else
{
$$v
=
''
}
});
}
}
sub
UnloadAll {
my
$self
=
shift
;
my
$ext
=
$self
->cget(
'-pluginsext'
);
my
$plugins
=
$self
->{PLUGINS};
for
(
sort
keys
%$plugins
) {
my
$plug
=
$_
;
$ext
->plugUnload(
$plug
);
$self
->
after
(10,
sub
{
my
$v
=
$plugins
->{
$plug
};
if
(
$ext
->plugExists(
$plug
)) {
$$v
= 1
}
else
{
$$v
=
''
}
});
}
}
1;