webgui/lib/WebGUI/Operation/Graphics.pm
Martin Kamerbeek 96ac393a11 Adding sliders
2006-05-08 09:35:34 +00:00

452 lines
13 KiB
Perl

package WebGUI::Operation::Graphics;
use strict;
use WebGUI::Image::Palette;
use WebGUI::Image::Color;
use WebGUI::Image::Font;
use WebGUI::Storage;
use Tie::IxHash;
#-------------------------------------------------------------------
sub _submenu {
my $session = shift;
my $i18n = WebGUI::International->new($session, "Graphics");
my $workarea = shift;
my $title = shift;
$title = $i18n->get($title) if ($title);
my $help = shift;
my $ac = WebGUI::AdminConsole->new($session,"graphics");
if ($help) {
$ac->setHelp($help, 'Commerce');
}
$ac->addSubmenuItem($session->url->page('op=listPalettes'), $i18n->get('manage palettes'));
$ac->addSubmenuItem($session->url->page('op=listFonts'), $i18n->get('manage fonts'));
$ac->addSubmenuItem($session->url->page('op=editPalette&pid=new'), $i18n->get('add palette'));
$ac->addSubmenuItem($session->url->page('op=editFont&fid=new'), $i18n->get('add font'));
return $ac->render($workarea, $i18n->get('manage graphics'));
}
#### hoverhelp
#-------------------------------------------------------------------
sub _getColorForm {
my ($f, $color, %hoppa);
my $session = shift;
my $colorId = shift;
my $i18n = WebGUI::International->new($session, "Graphics");
$color = WebGUI::Image::Color->new($session, $colorId);
# Create transparencies in 5% increments
tie %hoppa, 'Tie::IxHash';
$hoppa{'00'} = 'Opaque';
for (1 .. 19) {
$hoppa{unpack('H*', pack('C', $_*255/20))} = 5*$_.'% Transparent';
}
$hoppa{'ff'} = 'Invisible';
my $f = WebGUI::HTMLForm->new($session);
$f->text(
-name => 'colorName',
-value => $color->getName,
-label => $i18n->get('color name'),
);
$f->color(
-name => 'fillTriplet',
-value => $color->getFillTriplet,
-label => $i18n->get('fill color'),
-maxlength => 7,
-size => 7,
);
$f->selectSlider(
-name => 'fillAlpha',
-value => [ $color->getFillAlpha ],
-options=> \%hoppa,
-label => $i18n->get('fill alpha'),
-maxlength => 2,
-editable=>0,
-size => 2,
);
$f->color(
-name => 'strokeTriplet',
-value => $color->getStrokeTriplet,
-label => $i18n->get('stroke color'),
-maxlength => 7,
-size => 7,
);
$f->selectSlider(
-name => 'strokeAlpha',
-value => [ $color->getStrokeAlpha ],
-options=> \%hoppa,
-label => $i18n->get('stroke alpha'),
-maxlength => 2,
-editable => 0,
-size => 2,
);
return $f->printRowsOnly;
}
#-------------------------------------------------------------------
sub www_addColorToPalette {
my ($f);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
$f = WebGUI::HTMLForm->new($session);
$f->hidden(
-name => 'op',
-value => 'addColorToPaletteSave',
);
$f->hidden(
-name => 'pid',
-value => $session->form->process('pid'),
);
$f->hidden(
-name => 'cid',
-value => $session->form->process('cid'),
);
$f->raw(_getColorForm($session, $session->form->process('cid')));
$f->submit;
return _submenu($session, $f->print);
}
#-------------------------------------------------------------------
sub www_addColorToPaletteSave {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $color = WebGUI::Image::Color->new($session, $session->form->process('cid'));
if ($session->form->process('cid') eq 'new') {
$color->setFillTriplet($session->form->process('fillTriplet'));
$color->setFillAlpha($session->form->process('fillAlpha'));
$color->setStrokeTriplet($session->form->process('strokeTriplet'));
$color->setStrokeAlpha($session->form->process('strokeAlpha'));
}
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->addColor($color);
return www_editPalette($session, $palette->getId);
}
#-------------------------------------------------------------------
sub www_deleteFont {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $font = WebGUI::Image::Font->new($session, $session->form->process('fid'));
$font->delete;
return www_listFonts($session);
}
#-------------------------------------------------------------------
sub www_deletePalette {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->delete;
return www_listPalettes($session);
}
#-------------------------------------------------------------------
sub www_editColor {
my ($f);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $colorId = $session->form->process('cid');
return www_listPalettes($session) if ($colorId eq 'new');
$f = WebGUI::HTMLForm->new($session);
$f->hidden(
-name => 'op',
-value => 'editColorSave',
);
$f->hidden(
-name => 'pid',
-value => $session->form->process('pid'),
);
$f->hidden(
-name => 'cid',
-value => $colorId,
);
$f->raw(_getColorForm($session, $colorId));
$f->submit;
return _submenu($session, $f->print);
}
#-------------------------------------------------------------------
sub www_editColorSave {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $colorId = $session->form->process('cid');
return www_listPalettes($session) if ($colorId eq 'new');
my $color = WebGUI::Image::Color->new($session, $colorId);
$color->setName($session->form->process('colorName'));
$color->setFillTriplet($session->form->process('fillTriplet'));
$color->setFillAlpha($session->form->process('fillAlpha'));
$color->setStrokeTriplet($session->form->process('strokeTriplet'));
$color->setStrokeAlpha($session->form->process('strokeAlpha'));
return www_editPalette($session, $session->form->process('pid'));
}
#-------------------------------------------------------------------
sub www_editFont {
my ($f, $fontName);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $i18n = WebGUI::International->new($session, "Graphics");
unless ($session->form->process('fid') eq 'new') {
my $font = WebGUI::Image::Font->new($session, $session->form->process('fid'));
$fontName = $font->getName;
}
$f = WebGUI::HTMLForm->new($session);
$f->hidden(
-name => 'op',
-value => 'editFontSave',
);
$f->hidden(
-name => 'fid',
-value => $session->form->process('fid'),
);
$f->text(
-name => 'fontName',
-value => $fontName,
-label => $i18n->get('font name'),
);
$f->file(
-name => 'fontFile',
-label => $i18n->get('font file'),
);
$f->submit;
return _submenu($session, $f->print);
}
#-------------------------------------------------------------------
sub www_editFontSave {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
if ($session->form->process('fid') eq 'new') {
my $storage = WebGUI::Storage->create($session, 'new');
my $filename = $storage->addFileFromFormPost('fontFile');
if ($filename) {
my $font = WebGUI::Image::Font->new($session, 'new');
$font->setName($session->form->process('fontName'));
$font->setStorageId($storage->getId);
$font->setFilename($filename);
}
}
return www_listFonts($session);
}
#-------------------------------------------------------------------
sub www_editPalette {
my ($name, $palette, $output, $color);
my $session = shift;
my $paletteId = shift || $session->form->process('pid');
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $i18n = WebGUI::International->new($session, 'Graphics');
unless ($paletteId eq 'new') {
$palette = WebGUI::Image::Palette->new($session, $paletteId);
$name = $palette->getName;
};
my $f = WebGUI::HTMLForm->new($session);
$f->hidden(
-name => 'op',
-value => 'editPaletteSave',
);
$f->hidden(
-name => 'pid',
-value => $paletteId,
);
$f->text(
-name => 'paletteName',
-value => $name,
-label => $i18n->get('palette name'),
);
$f->submit;
$output = $f->print;
unless ($paletteId eq 'new') {
my $palette = WebGUI::Image::Palette->new($session, $paletteId);
$output .= '<table>';
$output .= '<th><td>'.$i18n->get('fill color').'</td><td>'.$i18n->get('stroke color').'</td></th>';
foreach $color (@{$palette->getColorsInPalette}) {
$output .= '<tr>';
$output .= '<td>';
$output .= $session->icon->delete('op=removeColorFromPalette;pid='.$palette->getId.';index='.$palette->getColorIndex($color));
$output .= $session->icon->edit('op=editColor;pid='.$palette->getId.';cid='.$color->getId);
$output .= $session->icon->moveUp('op=moveColorUp;pid='.$palette->getId.';index='.$palette->getColorIndex($color));
$output .= $session->icon->moveDown('op=moveColorDown;pid='.$palette->getId.';index='.$palette->getColorIndex($color));
$output .= '</td>';
$output .= '<td width="30" border="1" height="30" bgcolor="'.$color->getFillTriplet.'"></td>';
$output .= '<td width="30" border="1" height="30" bgcolor="'.$color->getStrokeTriplet.'"></td>';
$output .= '</tr>';
}
$output .= '</table>';
$output .= '<a href="'.$session->url->page('op=addColorToPalette&cid=new&pid='.$palette->getId).'">'.$i18n->get('add color').'</a><br>';
}
return _submenu($session, $output);
}
#-------------------------------------------------------------------
sub www_editPaletteSave {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->setName($session->form->process('paletteName'));
return www_editPalette($session, $palette->getId);
}
#-------------------------------------------------------------------
sub www_listGraphicsOptions {
my ($output);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $i18n = WebGUI::International->new($session, 'Graphics');
$output .= '<a href="'.$session->url->page('op=listPalettes').'">'.$i18n->get('manage palettes').'</a><br />';
$output .= '<a href="'.$session->url->page('op=listFonts').'">'.$i18n->get('manage fonts').'</a><br />';
return _submenu($session, $output);
}
#-------------------------------------------------------------------
sub www_listPalettes {
my ($output);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $i18n = WebGUI::International->new($session, 'Graphics');
my $palettes = WebGUI::Image::Palette->getPaletteList($session);
$output .= '<table>';
$output .= '<th><td>'.$i18n->get('palette name').'</td></th>';
foreach (keys %$palettes) {
$output .= '<tr>';
$output .= '<td>';
$output .= $session->icon->delete('op=deletePalette&pid='.$_);
$output .= $session->icon->edit('op=editPalette&pid='.$_);
$output .= '</td>';
$output .= '<td>'.$palettes->{$_}.'</td>';
$output .= '</tr>';
}
$output .= '</table>';
$output .= '<a href="'.$session->url->page('op=editPalette&pid=new').'">'.$i18n->get('add color').'</a><br>';
return _submenu($session, $output);
}
#-------------------------------------------------------------------
sub www_moveColorDown {
my ($palette, $index);
my $session = shift;
$palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$index = $session->form->process('index');
if ($index < ($palette->getNumberOfColors - 1) && $index >=0) {
$palette->swapColors($index, $index + 1);
}
return www_editPalette($session, $session->form->process('pid'));
}
#-------------------------------------------------------------------
sub www_moveColorUp {
my ($palette, $index);
my $session = shift;
$palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$index = $session->form->process('index');
if ($index <= ($palette->getNumberOfColors - 1) && $index > 0) {
$palette->swapColors($index, $index - 1);
}
return www_editPalette($session, $session->form->process('pid'));
}
#-------------------------------------------------------------------
sub www_listFonts {
my ($output);
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $i18n = WebGUI::International->new($session, 'Graphics');
my %fonts = $session->db->buildHash('select fontId, name from imageFont');
$output .= '<table>';
$output .= '<th><td></td><td>'.$i18n->get('font name').'</td></th>';
foreach (keys %fonts) {
$output .= '<tr>';
$output .= '<td>';
$output .= $session->icon->delete('op=deleteFont&fid='.$_);
# $output .= $session->icon->edit('op=editFont&fid='.$_);
$output .= '</td>';
$output .= '<td>'.$fonts{$_}.'</td>';
$output .= '</tr>';
}
$output .= '</table>';
$output .= '<a href="'.$session->url->page('op=editFont&fid=new').'">'.$i18n->get('add font').'</a><br>';
return _submenu($session, $output);
}
#-------------------------------------------------------------------
sub www_removeColorFromPalette {
my $session = shift;
return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->removeColor($session->form->process('index'));
return www_editPalette($session, $session->form->process('pid'));
}
1;