aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AdminPanel/Shared/GUI.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AdminPanel/Shared/GUI.pm')
-rw-r--r--lib/AdminPanel/Shared/GUI.pm1118
1 files changed, 0 insertions, 1118 deletions
diff --git a/lib/AdminPanel/Shared/GUI.pm b/lib/AdminPanel/Shared/GUI.pm
deleted file mode 100644
index 6c6144d..0000000
--- a/lib/AdminPanel/Shared/GUI.pm
+++ /dev/null
@@ -1,1118 +0,0 @@
-# vim: set et ts=4 sw=4:
-package ManaTools::Shared::GUI;
-#============================================================= -*-perl-*-
-
-=head1 NAME
-
-Shared::GUI - Shared graphic routines
-
-=head1 SYNOPSIS
-
- my $gui = ManaTools::Shared::GUI->new();
- my $yesPressed = $gui->ask_YesOrNo($title, $text);
-
-=head1 DESCRIPTION
-
- This module contains a collection of dialogs or widgets that can be used in more
- graphics modules.
-
-=head1 EXPORT
-
-exported
-
-=head1 SUPPORT
-
-You can find documentation for this module with the perldoc command:
-
-perldoc Shared::GUI
-
-
-=head1 AUTHOR
-
-Angelo Naselli <anaselli@linux.it>
-
-=head1 COPYRIGHT and LICENSE
-
-Copyright (C) 2014-2015, Angelo Naselli.
-Copyright (C) 2015, Matteo Pasotti <matteo.pasotti@gmail.com>.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 2, as
-published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-=head1 METHODS
-
-=cut
-
-
-use Moose;
-
-use diagnostics;
-use yui;
-
-use ManaTools::Shared qw(pathList2hash);
-
-use ManaTools::Shared::Locales;
-
-has 'loc' => (
- is => 'rw',
- init_arg => undef,
- builder => '_localeInitialize'
-);
-
-sub _localeInitialize {
- my $self = shift();
-
- # TODO fix domain binding for translation
- $self->loc(ManaTools::Shared::Locales->new(domain_name => 'libDrakX-standalone') );
- # TODO if we want to give the opportunity to test locally add dir_name => 'path'
-}
-
-
-#=============================================================
-
-=head2 warningMsgBox
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
-
-=head3 DESCRIPTION
-
- This function creates an Warning dialog and show the message
- passed as input.
-
-=cut
-
-#=============================================================
-sub warningMsgBox {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_ONE,
- $yui::YMGAMessageBox::D_WARNING);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($self->loc->N("Ok"), $yui::YMGAMessageBox::B_ONE );
-# $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show();
-
- $dlg = undef;
-
- return 1;
-}
-
-#=============================================================
-
-=head2 infoMsgBox
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
-
-=head3 DESCRIPTION
-
- This function creates an Info dialog and show the message
- passed as input.
-
-=cut
-
-#=============================================================
-
-sub infoMsgBox {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_ONE,
- $yui::YMGAMessageBox::D_INFO);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($self->loc->N("Ok"), $yui::YMGAMessageBox::B_ONE );
-# $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show();
-
- $dlg = undef;
-
- return 1;
-}
-
-#=============================================================
-
-=head2 msgBox
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
-
-=head3 DESCRIPTION
-
- This function creates a dialog and show the message passed as input.
-
-=cut
-
-#=============================================================
-
-sub msgBox {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_ONE);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($self->loc->N("Ok"), $yui::YMGAMessageBox::B_ONE );
-# $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show();
-
- $dlg = undef;
-
- return 1;
-}
-
-#=============================================================
-
-=head2 ask_OkCancel
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
-
-=head3 OUTPUT
-
- 0: Cancel button has been pressed
- 1: Ok button has been pressed
-
-=head3 DESCRIPTION
-
- This function create an OK-Cancel dialog with a 'title' and a
- 'text' passed as parameters.
-
-=cut
-
-#=============================================================
-
-sub ask_OkCancel {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_TWO);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($self->loc->N("Ok"), $yui::YMGAMessageBox::B_ONE );
- $dlg->setButtonLabel($self->loc->N("Cancel"), $yui::YMGAMessageBox::B_TWO);
- $dlg->setDefaultButton($yui::YMGAMessageBox::B_ONE);
- $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show() == $yui::YMGAMessageBox::B_ONE ? 1 : 0;
-
- $dlg = undef;
-
- return $retVal;
-}
-
-#=============================================================
-
-=head2 ask_YesOrNo
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
- default_button => (optional) 1: "Yes" (any other values "No")
-
-=head3 OUTPUT
-
- 0: "No" button has been pressed
- 1: "Yes" button has been pressed
-
-=head3 DESCRIPTION
-
- This function create a Yes-No dialog with a 'title' and a
- question 'text' passed as parameters.
-
-=cut
-
-#=============================================================
-
-sub ask_YesOrNo {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_TWO);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($self->loc->N("Yes"), $yui::YMGAMessageBox::B_ONE );
- $dlg->setButtonLabel($self->loc->N("No"), $yui::YMGAMessageBox::B_TWO);
- if (exists $info->{default_button} && $info->{default_button} == 1) {
- $dlg->setDefaultButton($yui::YMGAMessageBox::B_ONE);
- }
- else {
- $dlg->setDefaultButton($yui::YMGAMessageBox::B_TWO);
- }
- $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show() == $yui::YMGAMessageBox::B_ONE ? 1 : 0;
-
- $dlg = undef;
-
- return $retVal;
-}
-
-
-#=============================================================
-
-=head2 ask_TwoConfigurableButtons
-
-=head3 INPUT
-
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
- button_one => caption for the first button
- button_two => caption for the second button
- default_button => (optional) 1: "First button"
-
-=head3 OUTPUT
-
- 0: "Button One Caption" button has been pressed
- 1: "Button Two Caption" button has been pressed
-
-=head3 DESCRIPTION
-
-This function create a two-buttons dialog with a 'title', a
-question 'text' and a label for each button passed as parameters.
-
-=cut
-
-#=============================================================
-
-sub ask_TwoConfigurableButtons {
- my ($self, $info) = @_;
-
- return 0 if ( ! $info );
-
- my $retVal = 0;
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
- my $dlg = $factory->createDialogBox($yui::YMGAMessageBox::B_TWO);
-
- $dlg->setTitle($info->{title}) if (exists $info->{title});
- my $rt = (exists $info->{richtext}) ? $info->{richtext} : 0;
- $dlg->setText($info->{text}, $rt) if (exists $info->{text});
-
- $dlg->setButtonLabel($info->{button_one}, $yui::YMGAMessageBox::B_ONE );
- $dlg->setButtonLabel($info->{button_two}, $yui::YMGAMessageBox::B_TWO);
- if (exists $info->{default_button} && $info->{default_button} == 1) {
- $dlg->setDefaultButton($yui::YMGAMessageBox::B_ONE);
- }
- else {
- $dlg->setDefaultButton($yui::YMGAMessageBox::B_TWO);
- }
- $dlg->setMinSize(50, 5);
-
- $retVal = $dlg->show() == $yui::YMGAMessageBox::B_ONE ? 1 : 0;
-
- $dlg = undef;
-
- return $retVal;
-}
-
-#=============================================================
-
-=head2 arrayListToYItemCollection
-
-=head3 INPUT
-
- $listInfo: HASH reference containing
- default_item => Selected item (if any)
- item_list => ARRAY reference containing the item list
-
-=head3 OUTPUT
-
- $itemList: YItemCollection containing the item list passed
-
-=head3 DESCRIPTION
-
- This method returns a YItemCollection containing the item list passed with default item
- the "default_item"
-
-=cut
-
-#=============================================================
-
-sub arrayListToYItemCollection {
- my ($self, $listInfo) = @_;
-
- die "Item list is mandatory" if !($listInfo->{item_list});
- # TODO check type
- die "Not empty item list is mandatory" if (scalar @{$listInfo->{item_list}} < 1);
-
-
- my $itemColl = new yui::YItemCollection;
- foreach (@{$listInfo->{item_list}}) {
- my $item = new yui::YItem ($_, 0);
- $itemColl->push($item);
- $item->DISOWN();
- if ($listInfo->{default_item} && $listInfo->{default_item} eq $item->label()) {
- $item->setSelected(1);
- }
- }
-
- return $itemColl;
-}
-
-
-#=============================================================
-
-=head2 ask_fromList
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- header => combobox header
- default_item => selected item if any
- list => item list
- default_button => (optional) 1: Select (any other values Cancel)
-
-=head3 OUTPUT
-
- undef: if Cancel button has been pressed
- selected item: if Select button has been pressed
-
-=head3 DESCRIPTION
-
- This function create a dialog with a combobox in which to
- choose an item from a given list.
-
-=cut
-
-#=============================================================
-
-sub ask_fromList {
- my ($self, $info) = @_;
-
- die "Missing dialog information" if (!$info);
- die "Title is mandatory" if (! exists $info->{title});
- die "Header is mandatory" if (! exists $info->{header});
- die "List is mandatory" if (! exists $info->{list} );
- my $list = $info->{list};
- die "At least one element is mandatory into list" if (scalar(@$list) < 1);
-
- my $choice = undef;
- my $factory = yui::YUI::widgetFactory;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle($info->{title});
-
- my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor);
- my $layout = $factory->createVBox($dlg);
-
- my $combo = $factory->createComboBox($layout, $info->{header}, 0);
-
- my $listInfo;
- $listInfo->{default_item} = $info->{default_item} if $info->{default_item};
- $listInfo->{item_list} = $info->{list};
- my $itemColl = $self->arrayListToYItemCollection($listInfo);
- $combo->addItems($itemColl);
-
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $selectButton = $factory->createPushButton($hbox, $self->loc->N("Select"));
- my $cancelButton = $factory->createPushButton($hbox, $self->loc->N("Cancel"));
-
- if (exists $info->{default_button} ) {
- my $dflBtn = ($info->{default_button} == 1) ? $selectButton : $cancelButton;
- $dlg->setDefaultButton($selectButton);
- }
-
- while (1) {
- my $event = $dlg->waitForEvent();
-
- my $eventType = $event->eventType();
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
-
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $selectButton) {
- my $item = $combo->selectedItem();
- $choice = $item->label() if ($item);
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
- return $choice;
-}
-
-#=============================================================
-
-=head2 ask_multiple_fromList
-
-=head3 INPUT
-
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- header => combobox header
- default_item => selected item if any
- list => item list
- default_button => (optional) 1: Select (any other values Cancel)
-
-=head3 LIST
-
-list is an array of hashes like this
-
- {
- id => unique identifier for this particular item,
- text => "descriptive text"
- val => reference to the boolean value
- }
-
-
-=head3 OUTPUT
-
- undef: if Cancel button has been pressed
- selected items: ArrayRef of the selected ids, if Select button has been pressed
-
-=head3 DESCRIPTION
-
-This function create a dialog with variable checkboxes in which to
-choose the items from a given list.
-
-Warning: to use only for a reduced set of items because of no scroll available
-
-=cut
-
-#=============================================================
-
-sub ask_multiple_fromList {
- my ($self, $info) = @_;
-
- die "Missing dialog information" if (!$info);
- die "Title is mandatory" if (! exists $info->{title});
- die "Header is mandatory" if (! exists $info->{header});
- die "List is mandatory" if (! exists $info->{list} );
- die "At least one element is mandatory into list" if (scalar(@{$info->{list}}) < 1);
-
- my $selections = [];
- my $factory = yui::YUI::widgetFactory;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle($info->{title});
-
- my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor);
- my $layout = $factory->createVBox($dlg);
-
- my @ckbox_array = ();
-
- for my $item(@{$info->{list}})
- {
- my $ckbox = $factory->createCheckBox(
- $factory->createLeft($factory->createHBox($layout)),
- $item->{text},
- ${$item->{val}}
- );
- $ckbox->setNotify(1);
- push @ckbox_array, {
- id => $item->{id},
- widget => \$ckbox,
- };
- $ckbox->DISOWN();
- }
-
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $selectButton = $factory->createPushButton($hbox, $self->loc->N("Select"));
- my $cancelButton = $factory->createPushButton($hbox, $self->loc->N("Cancel"));
-
- if (exists $info->{default_button} ) {
- my $dflBtn = ($info->{default_button} == 1) ? $selectButton : $cancelButton;
- $dlg->setDefaultButton($selectButton);
- }
-
- while (1) {
- my $event = $dlg->waitForEvent();
-
- my $eventType = $event->eventType();
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
-
- if ($widget == $cancelButton) {
- $selections = undef;
- last;
- }
- elsif ($widget == $selectButton) {
- foreach my $ckbox (@ckbox_array)
- {
- if(${$ckbox->{widget}}->value())
- {
- # yui::YUI::ui()->blockEvents();
- push @{$selections}, $ckbox->{id};
- # yui::YUI::ui()->unblockEvents();
- }
- }
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
- return $selections;
-}
-
-#=============================================================
-
-=head2 AboutDialog
-
-=head3 INPUT
-
- $info: HASH containing optional information needed to get info for dialog.
- name => the application name
- version => the application version
- license => the application license, the short length one (e.g. GPLv2, GPLv3, LGPLv2+, etc)
- authors => the string providing the list of authors; it could be html-formatted
- description => the string providing a brief description of the application
- logo => the string providing the file path for the application logo (high-res image)
- icon => the string providing the file path for the application icon (low-res image)
- credits => the application credits, they can be html-formatted
- information => other extra informations, they can be html-formatted
- dialog_mode => 1: classic style dialog, any other as tabbed style dialog
-
-=head3 DESCRIPTION
-
- About dialog implementation, this dialog can be used by
- modules, to show authors, license, credits, etc.
-
-=cut
-
-#=============================================================
-
-sub AboutDialog {
- my ($self, $info) = @_;
-
- die "Missing dialog information" if (!$info);
-
-
- yui::YUI::widgetFactory;
- my $factory = yui::YExternalWidgets::externalWidgetFactory("mga");
- $factory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($factory);
-
- my $name = (exists $info->{name}) ? $info->{name} : "";
- my $version = (exists $info->{version}) ? $info->{version} : "";
- my $license = (exists $info->{license}) ? $info->{license} : "";
- my $authors = (exists $info->{authors}) ? $info->{authors} : "";
- my $description = (exists $info->{description}) ? $info->{description} : "";
- my $logo = (exists $info->{logo}) ? $info->{logo} : "";
- my $icon = (exists $info->{icon}) ? $info->{icon} : "";
- my $credits = (exists $info->{credits}) ? $info->{credits} : "";
- my $information = (exists $info->{information}) ? $info->{information} : "";
- my $dialog_mode = $yui::YMGAAboutDialog::TABBED;
- if (exists $info->{dialog_mode}) {
- $dialog_mode = $yui::YMGAAboutDialog::CLASSIC if ($info->{dialog_mode} == 1);
- }
-
- my $dlg = $factory->createAboutDialog($name, $version, $license,
- $authors, $description, $logo,
- $icon, $credits, $information
- );
-
- $dlg->show($dialog_mode);
-
- $dlg = undef;
-
- return 1;
-}
-
-#=============================================================
-
-=head2 hashTreeToYItemCollection
-
-=head3 INPUT
-
- $treeInfo: HASH reference containing
- parent ==> YItem parent (if not root object)
- collection ==> YItemCollection (mandatory)
- default_item ==> Selected item (if any)
- default_item_separator ==> If default item is passed and is a path like string
- the separator is needed to match the selected item, using
- the full pathname instead leaf (e.g. root/subroot/leaf).
- Default separator is also needed if '$treeInfo->{icons} entry is passed
- to match the right icon to set (e.g. using the full pathname).
- hash_tree ==> HASH reference containing the path tree representation
- icons ==> HASH reference containing item icons e.g.
- {
- root => 'root_icon_pathname',
- root/subroot => 'root_subroot_icon_pathname',
- ....
- }
- Do not add it if no icons are wanted.
- default_icon ==> icon pathname to a default icon for all the items that are
- not into $treeInfo->{icons} or if $treeInfo->{icons} is not
- defined. Leave undef if no default icon is wanted
-
-=head3 DESCRIPTION
-
- This function add to the given $treeInfo->{collection} new tree items from
- the the given $treeInfo->{hash_tree}
-
-=cut
-
-#=============================================================
-
-sub hashTreeToYItemCollection {
- my ($self, $treeInfo) = @_;
-
- die "Collection is mandatory" if !($treeInfo->{collection});
- die "Hash tree is mandatory" if !($treeInfo->{hash_tree});
-
- my $treeLine = $treeInfo->{parent};
- my $item;
- foreach my $key (sort keys %{$treeInfo->{hash_tree}}) {
- if ($treeInfo->{parent}) {
- $item = new yui::YTreeItem ($treeLine, $key);
- $item->DISOWN();
- }
- else {
- if ($treeLine) {
- if ( $treeLine->label() eq $key) {
- $item = $treeLine;
- }
- else {
- $treeInfo->{collection}->push($treeLine);
- $item = $treeLine = new yui::YTreeItem ($key);
- $item->DISOWN();
- }
- }
- else {
- $item = $treeLine = new yui::YTreeItem ($key);
- $item->DISOWN();
- }
- }
-
- # building full path name
- my $label = $key;
- if (exists $treeInfo->{default_item_separator}) {
- my $parent = $item;
- while($parent = $parent->parent()) {
- $label = $parent->label() . $treeInfo->{default_item_separator} . $label ;
- }
- }
- my $icon = undef;
- $icon = $treeInfo->{default_icon} if defined($treeInfo->{default_icon});
- $icon = $treeInfo->{icons}->{$label} if defined($treeInfo->{icons}) && defined($treeInfo->{icons}->{$label});
-
- $item->setIconName($icon) if $icon;
-
- ### select item
- if ($treeInfo->{default_item}) {
- if ($treeInfo->{default_item} eq $label) {
- $item->setSelected(1) ;
- $item->setOpen(1);
- my $parent = $item;
- while($parent = $parent->parent()) {
- $parent->setOpen(1);
- }
- }
- }
-
- if ($treeInfo->{hash_tree}->{$key} && keys %{$treeInfo->{hash_tree}->{$key}}) {
- my %tf;
- $tf{collection} = $treeInfo->{collection};
- $tf{parent} = $item;
- $tf{default_item} = $treeInfo->{default_item} if $treeInfo->{default_item};
- $tf{default_item_separator} = $treeInfo->{default_item_separator} if $treeInfo->{default_item_separator};
- $tf{hash_tree} = $treeInfo->{hash_tree}->{$key};
- $tf{icons} = $treeInfo->{icons};
- $self->hashTreeToYItemCollection(\%tf);
- }
- else {
- if (! $treeInfo->{parent}) {
- $treeInfo->{collection}->push($treeLine);
- $treeLine = undef;
- }
- }
- }
- if (! $treeInfo->{parent}) {
- $treeInfo->{collection}->push($treeLine) if $treeLine;
- }
-}
-
-
-#=============================================================
-
-=head2 ask_fromTreeList
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- header => TreeView header
- list => path item list
- min_size => minimum dialog size in the libYUI meaning
- HASH {width => w, height => h}
- default_item => selected item if any
- item_separator => item separator default "/"
- skip_path => if set item is returned without its original path,
- just as a leaf (default use full path)
- any_item_selection => allow to select any item, not just leaves (default just leaves)
- default_button => (optional) 1: Select (any other values Cancel)
-
-=head3 OUTPUT
-
- undef: if Cancel button has been pressed
- selected item: if Select button has been pressed
-
-=head3 DESCRIPTION
-
- This function create a dialog with a combobox in which to
- choose an item from a given list.
-
-=cut
-
-#=============================================================
-
-sub ask_fromTreeList {
- my ($self, $info) = @_;
-
- die "Missing dialog information" if (!$info);
- die "Title is mandatory" if (! exists $info->{title});
- die "Header is mandatory" if (! exists $info->{header});
- die "List is mandatory" if (! exists $info->{list} );
- my $list = $info->{list};
- die "At least one element is mandatory into list" if (scalar(@$list) < 1);
-
- my $choice = undef;
- my $factory = yui::YUI::widgetFactory;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle($info->{title});
- my $minWidth = 80;
- my $minHeight = 25;
-
- if (exists $info->{min_size}) {
- $minWidth = $info->{min_size}->{width} if $info->{min_size}->{width};
- $minHeight = $info->{min_size}->{height} if $info->{min_size}->{height};
- }
-
- my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor);
- my $minSize = $factory->createMinSize( $dlg, $minWidth, $minHeight );
- my $layout = $factory->createVBox($minSize);
-
- my $treeWidget = $factory->createTree($layout, $info->{header});
-
- my $treeInfo;
- $treeInfo->{collection} = new yui::YItemCollection;
- $treeInfo->{default_item} = $info->{default_item} if $info->{default_item};
- if ($treeInfo->{default_item} && $info->{item_separator}) {
- if (index($treeInfo->{default_item}, $info->{item_separator}) != -1) {
- $treeInfo->{default_item_separator} = $info->{item_separator};
- }
- }
- my $list2Convert;
- $list2Convert->{paths} = $info->{list};
- $list2Convert->{separator} = $info->{item_separator} if $info->{item_separator};
- $treeInfo->{hash_tree} = ManaTools::Shared::pathList2hash($list2Convert);
-
- $self->hashTreeToYItemCollection($treeInfo);
- $treeWidget->addItems($treeInfo->{collection});
-
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $selectButton = $factory->createPushButton($hbox, $self->loc->N("Select"));
- my $cancelButton = $factory->createPushButton($hbox, $self->loc->N("Cancel"));
-
- if (exists $info->{default_button} ) {
- my $dflBtn = ($info->{default_button} == 1) ? $selectButton : $cancelButton;
- $dlg->setDefaultButton($selectButton);
- }
-
- while (1) {
- my $event = $dlg->waitForEvent();
-
- my $eventType = $event->eventType();
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
-
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $selectButton) {
- my $item = $treeWidget->selectedItem();
- my $getChoice = 1;
- if (!exists $info->{any_item_selection} || $info->{any_item_selection} != 0) {
- if ($item) {
- $getChoice = (!$item->hasChildren());
- }
- }
- if ($info->{skip_path} && $info->{skip_path} != 0) {
- $choice = $item->label() if ($item && $getChoice);
- }
- else {
- if ($getChoice) {
- my $separator = exists $info->{item_separator} ? $info->{item_separator} : '/';
- if ($item) {
- $choice = $item->label();
- my $parent = $item;
- while($parent = $parent->parent()) {
- $choice = $parent->label() . $separator . $choice ;
- }
- }
- }
- }
-
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
- return $choice;
-}
-
-
-#=============================================================
-
-=head2 select_fromList
-
-=head3 INPUT
-
- $info: HASH, information to be passed to the dialog.
- title => dialog title
- info_label => optional info text
- header => column header hash reference{
- text_column => text column header
- check_column =>
- }
- list => item list hash reference
- containing {
- text => item text
- selected => 0 ur undefined means unchecked
- }
-
-=head3 OUTPUT
-
- selection: list of selected items
-
-=head3 DESCRIPTION
-
- This function create a dialog cotaining a table with a list of
- items to be checked. The list of the checked items is returned.
-
-=cut
-
-#=============================================================
-
-sub select_fromList {
- my ($self, $info) = @_;
-
- die "Missing dialog information" if (!$info);
- die "Title is mandatory" if (! exists $info->{title});
- die "Header is mandatory" if (! exists $info->{header});
- die "Header text column is mandatory" if (! $info->{header}->{text_column});
- die "List is mandatory" if (! exists $info->{list} );
- my $list = $info->{list};
- die "At least one element is mandatory into list" if (scalar(@$list) < 1);
-
- my $selection = [];
-
- my $mageiaPlugin = "mga";
- my $factory = yui::YUI::widgetFactory;
- my $mgaFactory = yui::YExternalWidgets::externalWidgetFactory($mageiaPlugin);
- $mgaFactory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($mgaFactory);
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle($info->{title});
-
- my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor);
- my $layout = $factory->createVBox($dlg);
-
- if ($info->{info_label}) {
- $factory->createLabel($layout, $info->{info_label});
- }
-
- my $yTableHeader = new yui::YTableHeader();
- $yTableHeader->addColumn($info->{header}->{text_column}, $yui::YAlignBegin);
- $yTableHeader->addColumn($info->{header}->{check_column} || '', $yui::YAlignBegin);
-
- ## service list (serviceBox)
- my $selectionTable = $mgaFactory->createCBTable(
- $layout,
- $yTableHeader,
- $yui::YCBTableCheckBoxOnLastColumn
- );
- $selectionTable->setImmediateMode(1);
- $selectionTable->setWeight($yui::YD_HORIZ, 75);
-
- $selectionTable->startMultipleChanges();
- $selectionTable->deleteAllItems();
- my $itemCollection = new yui::YItemCollection;
- ## NOTE do not sort to preserve item indexes
- foreach (@{$list}) {
- my $text = $_->{text} || die "item text is mandatory";
-
- my $item = new yui::YCBTableItem($text);
- $item->check( $_->{checked} );
- $itemCollection->push($item);
- $item->DISOWN();
- }
- $selectionTable->addItems($itemCollection);
- $selectionTable->doneMultipleChanges();
-
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- $factory->createVSpacing($hbox, 1.0);
- my $okButton = $factory->createPushButton($hbox, $self->loc->N("Ok"));
- $dlg->setDefaultButton($okButton);
- $dlg->recalcLayout();
-
- while (1) {
- my $event = $dlg->waitForEvent();
-
- my $eventType = $event->eventType();
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
-
- if ($widget == $okButton) {
- last;
- }
- elsif ($widget == $selectionTable) {
- my $wEvent = yui::toYWidgetEvent($event);
- if ($wEvent->reason() == $yui::YEvent::ValueChanged) {
- my $item = $selectionTable->changedItem();
- if ($item) {
- my $index = $item->index();
- $list->[$index]->{checked} = $item->checked();
- }
- }
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
- foreach (@{$list}) {
- push @{$selection}, $_->{text} if $_->{checked};
- }
-
- return $selection;
-}
-
-no Moose;
-__PACKAGE__->meta->make_immutable;
-
-
-1;
-