From 1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b Mon Sep 17 00:00:00 2001 From: Angelo Naselli Date: Mon, 27 Jan 2014 18:20:30 +0100 Subject: Project structure change --- lib/AdminPanel/Shared.pm | 712 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 712 insertions(+) create mode 100644 lib/AdminPanel/Shared.pm (limited to 'lib/AdminPanel/Shared.pm') diff --git a/lib/AdminPanel/Shared.pm b/lib/AdminPanel/Shared.pm new file mode 100644 index 0000000..583b214 --- /dev/null +++ b/lib/AdminPanel/Shared.pm @@ -0,0 +1,712 @@ +#!/usr/bin/perl +# vim: set et ts=4 sw=4: +# Copyright 2012-2013 Angelo Naselli +# +# This file is part of AdminPanel +# +# AdminPanel is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# AdminPanel 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 AdminPanel. If not, see . + +package AdminPanel::Shared; + +=head1 NAME + +AdminPanel::Shared - AdminPanel::Shared contains all the shared routines + needed by AdminPanel and modules + +=head1 SYNOPSIS + + + +=head1 DESCRIPTION + +This module collects all the routines shared between AdminPanel and its modules. + +=head1 EXPORT + + warningMsgBox + msgBox + infoMsgBox + ask_YesOrNo + ask_OkCancel + AboutDialog + trim + + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command: + + perldoc AdminPanel::Shared + +=head1 AUTHOR + +Angelo Naselli + +=head1 COPYRIGHT and LICENSE + +Copyright (C) 2013, Angelo Naselli. + +This file is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This file 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 file. If not, see . + +=head1 FUNCTIONS + +=cut + +use strict; +use warnings; +use diagnostics; + +use lib qw(/usr/lib/libDrakX); +use common qw(N + N_); +use yui; +use base qw(Exporter); + +# TODO move GUI dialogs to Shared::GUI +our @EXPORT = qw( + warningMsgBox + msgBox + infoMsgBox + ask_YesOrNo + ask_OkCancel + ask_fromList + AboutDialog + trim + member +); + + +=head1 VERSION + +Version 0.01 + +=cut + +our $VERSION = '0.01'; + +our $License = N_("This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +"); + + +#============================================================= + +=head2 warningMsgBox + +=head3 INPUT + + $st: string to be swhon into the dialog + +=head3 DESCRIPTION + +This function creates an Warning dialog and show the message +passed as input. + +=cut + +#============================================================= + +sub warningMsgBox { + my ($st) = @_; + my $factory = yui::YUI::widgetFactory; + my $msg_box = $factory->createPopupDialog($yui::YDialogWarnColor); + my $layout = $factory->createVBox($msg_box); + my $align = $factory->createAlignment($layout, 3, 0); + $factory->createLabel( $align, $st, 1, 0); + $align = $factory->createAlignment($layout, 3, 0); + $factory->createPushButton($align, N("Ok")); + $msg_box->waitForEvent(); + + destroy $msg_box; +} + +#============================================================= + +=head2 infoMsgBox + +=head3 INPUT + + $st: string to be swhon into the dialog + +=head3 DESCRIPTION + +This function creates an Info dialog and show the message +passed as input. + +=cut + +#============================================================= + +sub infoMsgBox { + my ($st) = @_; + my $factory = yui::YUI::widgetFactory; + my $msg_box = $factory->createPopupDialog($yui::YDialogInfoColor); + my $layout = $factory->createVBox($msg_box); + my $align = $factory->createAlignment($layout, 3, 0); + $factory->createLabel( $align, $st, 1, 0); + $align = $factory->createAlignment($layout, 3, 0); + $factory->createPushButton($align, N("Ok")); + $msg_box->waitForEvent(); + + destroy $msg_box; +} + +#============================================================= + +=head2 msgBox + +=head3 INPUT + + $st: string to be swhon into the dialog + +=head3 DESCRIPTION + +This function creates a dialog and show the message passed as input. + +=cut + +#============================================================= + +sub msgBox { + my ($st) = @_; + my $factory = yui::YUI::widgetFactory; + my $msg_box = $factory->createPopupDialog($yui::YDialogNormalColor); + my $layout = $factory->createVBox($msg_box); + my $align = $factory->createAlignment($layout, 3, 0); + $factory->createLabel( $align, $st, 1, 0); + $align = $factory->createAlignment($layout, 3, 0); + $factory->createPushButton($align, N("Ok")); + $msg_box->waitForEvent(); + + destroy $msg_box; +} + +#============================================================= + +=head2 ask_OkCancel + +=head3 INPUT + + $title: Title shown as heading + $text: text to be shown into the dialog + +=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 ($title, $text) = @_; + my $retVal = 0; + my $factory = yui::YUI::widgetFactory; + + my $msg_box = $factory->createPopupDialog($yui::YDialogNormalColor); + my $layout = $factory->createVBox($msg_box); + + my $align = $factory->createAlignment($layout, 3, 0); + ## title with headings true + $factory->createLabel( $align, $title, 1, 0); + $align = $factory->createLeft($layout); + $factory->createLabel( $align, $text, 0, 0); + + $align = $factory->createRight($layout); + my $hbox = $factory->createHBox($align); + my $okButton = $factory->createPushButton($hbox, N("Ok")); + my $cancelButton = $factory->createPushButton($hbox, N("Cancel")); + + my $event = $msg_box->waitForEvent(); + + my $eventType = $event->eventType(); + + if ($eventType == $yui::YEvent::WidgetEvent) { + # widget selected + my $widget = $event->widget(); + $retVal = ($widget == $okButton) ? 1 : 0; + } + + destroy $msg_box; + + return $retVal; +} + +#============================================================= + +=head2 ask_YesOrNo + +=head3 INPUT + + $title: Title shown as heading + $text: question text to be shown into the dialog + +=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 ($title, $text) = @_; + my $retVal = 0; + my $factory = yui::YUI::widgetFactory; + + my $msg_box = $factory->createPopupDialog($yui::YDialogNormalColor); + my $layout = $factory->createVBox($msg_box); + + my $align = $factory->createAlignment($layout, 3, 0); + ## title with headings true + $factory->createLabel( $align, $title, 1, 0); + $align = $factory->createLeft($layout); + $factory->createLabel( $align, $text, 0, 0); + + $align = $factory->createRight($layout); + my $hbox = $factory->createHBox($align); + my $yesButton = $factory->createPushButton($hbox, N("Yes")); + my $noButton = $factory->createPushButton($hbox, N("No")); + + my $event = $msg_box->waitForEvent(); + + my $eventType = $event->eventType(); + + if ($eventType == $yui::YEvent::WidgetEvent) { + # widget selected + my $widget = $event->widget(); + $retVal = ($widget == $yesButton) ? 1 : 0; + } + + destroy $msg_box; + + return $retVal; +} + + +#============================================================= + +=head2 ask_fromList + +=head3 INPUT + + $title: dialog title + $text: combobox heading + $list: item list + +=head3 OUTPUT + + undef: if Cancel button has been pressed + selected item: if Ok 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 ($title, $text, $list) = @_; + + die "Title is mandatory" if (! $title); + die "Heading is mandatory" if (! $text); + die "List is mandatory" if (! $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($title); + + my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor); + my $layout = $factory->createVBox($dlg); + + my $combo = $factory->createComboBox($layout, $text, 0); + my $itemColl = new yui::YItemCollection; + foreach (@$list) { + my $item = new yui::YItem ($_, 0); + $itemColl->push($item); + $item->DISOWN(); + } + $combo->addItems($itemColl); + + my $align = $factory->createRight($layout); + my $hbox = $factory->createHBox($align); + my $okButton = $factory->createPushButton($hbox, N("Ok")); + my $cancelButton = $factory->createPushButton($hbox, N("Cancel")); + + 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 == $okButton) { + my $item = $combo->selectedItem(); + $choice = $item->label() if ($item); + last; + } + } + } + + destroy $dlg; + + #restore old application title + yui::YUI::app()->setApplicationTitle($appTitle); + + return $choice; +} + + +#============================================================= + +=head2 AboutDialog + +=head3 INPUT + + $opts: optional options needed to get info for dialog. + name => Application Name, + version => Application Version, + copyright => Copyright ususally like "Copyright (C) copyright-holder Year", + license => License text, + comments => A comment related to application to be shown, + website => Web site URL, + website_label => Label to hide previous link, + authors => Application authors, + translator_credits => Application translators + documenters => Application documenters + artists => Graphic applicaton designers + logo => picture path to be shown as application logo + +=head3 OUTPUT + + Output_Parameter: out_par_description + +=head3 DESCRIPTION + +About dialog implementation, this dialog can be used by +modules, to show authors, license, credits, etc. + +=cut + +#============================================================= + +sub AboutDialog { + my ($opts) = @_; + + # Credits dialog + sub Credits { + my ($opts) = @_; + + my $factory = yui::YUI::widgetFactory; + my $optional = yui::YUI::optionalWidgetFactory; + + my $creditsdlg = $factory->createPopupDialog(); + my $layout = $factory->createVBox($creditsdlg); + + # header + $factory->createHBox($layout); + my $hbox = $factory->createHBox($layout); + my $align = $factory->createHVCenter($hbox); + $hbox = $factory->createHBox($align); + $factory->createHeading($hbox, N("Credits")); + + # Credits tab widget + if ($optional->hasDumbTab()) { + $hbox = $factory->createHBox($layout); + $align = $factory->createAlignment($hbox, 3, 0); + my $dumptab = $optional->createDumbTab($align); + my $item = new yui::YItem(N("Written by")); + $item->setSelected(); + $dumptab->addItem( $item ); + $item->DISOWN(); + if (exists $opts->{documenters}) { + $item = new yui::YItem(N("Documented by")); + $dumptab->addItem( $item ); + $item->DISOWN(); + } + if (exists $opts->{translator_credits}) { + $item = new yui::YItem(N("Translated by")); + $dumptab->addItem( $item ); + $item->DISOWN(); + } + if (exists $opts->{artists}) { + $item = new yui::YItem(N("Artwork by")); + $dumptab->addItem( $item ); + $item->DISOWN(); + } + my $vbox = $factory->createVBox($dumptab); + $align = $factory->createLeft($vbox); + $factory->createVSpacing($vbox, 1.0); + my $label = $factory->createLabel( $align, "***", 0); + $factory->createVSpacing($vbox, 1.0); + + # start value for first Item + $label->setValue($opts->{authors}) if exists $opts->{authors}; + + # Close button + $align = $factory->createRight($layout); + my $closeButton = $factory->createPushButton($align, N("Close")); + + # manage Credits dialog events + while(1) { + my $event = $creditsdlg->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 == $closeButton) { + last; + } + } + elsif ($event->item() ) { + # $eventType MenuEvent!!! + my $itemLabel = $event->item()->label(); + $itemLabel =~ s/&//; #remove shortcut from label + if ($itemLabel eq N("Written by")) { + $label->setValue($opts->{authors}) if exists $opts->{authors}; + } + elsif ($itemLabel eq N("Documented by")) { + $label->setValue($opts->{documenters}) if exists $opts->{documenters}; + } + elsif ($itemLabel eq N("Translated by")) { + $label->setValue($opts->{translator_credits}) if exists $opts->{translator_credits}; + } + elsif ($itemLabel eq N("Artwork by")) { + $label->setValue($opts->{artists}) if exists $opts->{artists}; + } + } + } + } + else { + print "No tab widgets available!\n"; + } + destroy $creditsdlg; + } + + # License dialog + sub License { + my ($license) = @_; + + my $factory = yui::YUI::widgetFactory; + my $licensedlg = $factory->createPopupDialog(); + my $layout = $factory->createVBox($licensedlg); + + # header + $factory->createHBox($layout); + my $hbox = $factory->createHBox($layout); + my $align = $factory->createHVCenter($hbox); + $hbox = $factory->createHBox($align); + $factory->createHeading($hbox, N("License")); + + # license + $hbox = $factory->createHBox($layout); + $align = $factory->createAlignment($hbox, 3, 0); + $factory->createLabel( $align, $license); + + $align = $factory->createRight($layout); + my $closeButton = $factory->createPushButton($align, N("Close")); + + $licensedlg->waitForEvent(); + + destroy $licensedlg; + } + + my $website = "http://www.mageia.org"; + my $website_label = "Mageia"; + my $factory = yui::YUI::widgetFactory; + my $aboutdlg = $factory->createPopupDialog(); + my $layout = $factory->createVBox($aboutdlg); + + # header + $factory->createHBox($layout); + my $hbox_iconbar = $factory->createHBox($layout); + my $align = $factory->createHVCenter($hbox_iconbar); + $hbox_iconbar = $factory->createHBox($align); + $factory->createImage($hbox_iconbar, $opts->{logo}) if exists $opts->{logo}; + my $header = $opts->{name} . " " . $opts->{version}; + $factory->createHeading($hbox_iconbar, $header); + + # comments + my $hbox = $factory->createHBox($layout); + $align = $factory->createAlignment($hbox, 3, 0); + $factory->createLabel( $align, $opts->{comments}, 0, 0) if exists $opts->{comments}; + + # copyright + $hbox = $factory->createHBox($layout); + $align = $factory->createHVCenter($hbox); + $factory->createLabel( $align, $opts->{copyright}, 0, 0) if exists $opts->{copyright}; + + # website / website_label + $hbox = $factory->createHBox($layout); + $align = $factory->createHVCenter($hbox); + $website = $opts->{website} if exists $opts->{website}; + $website_label = $opts->{website_label} if exists $opts->{website_label}; + my $webref = "". $website_label .""; + $factory->createRichText( $align, $webref); + + # Credits, License and Close buttons + $hbox = $factory->createHBox($layout); + $align = $factory->createLeft($hbox); + my $hbox1 = $factory->createHBox($align); + my $creditsButton = $factory->createPushButton($hbox1, N("Credits")); + my $licenseButton = $factory->createPushButton($hbox1, N("License")); + $factory->createHSpacing($hbox, 2.0); + $align = $factory->createRight($hbox); + my $closeButton = $factory->createPushButton($align, N("Close")); + + # AboutDialog Events + while(1) { + my $event = $aboutdlg->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 == $licenseButton) { + License($opts->{license}) if exists $opts->{license}; + } + elsif ($widget == $creditsButton) { + Credits($opts); + } + elsif ($widget == $closeButton) { + last; + } + } + elsif ($eventType == $yui::YEvent::MenuEvent) { + my $menuEvent = yui::YMGAWidgetFactory::getYMenuEvent($event); + #TODO check why is not working + run_program::raw({ detach => 1 }, 'www-browser', $menuEvent->id()); + } + } + + destroy $aboutdlg; +} + +#============================================================= + +=head2 trim + +=head3 INPUT + + $st: String to be trimmed + +=head3 OUTPUT + + $st: trimmed string + +=head3 DESCRIPTION + +This function trim the given string. + +=cut + +#============================================================= + +sub trim { + my ($st) = shift; + $st =~s /^\s+//g; + $st =~s /\s+$//g; + return $st; +} + +#============================================================= + +=head2 member + +=head3 INPUT + + $e: Array element to be found into array + @_: any array + +=head3 OUTPUT + + 1 or 0: if $e is a member of the given array + +=head3 DESCRIPTION + +This function look for an element into an array + +=cut + +#============================================================= +sub member { + my $e = shift; + foreach (@_) { + $e eq $_ and return 1; + } + 0; +} + +1; # End of AdminPanel::Shared -- cgit v1.2.1