diff options
-rw-r--r-- | AdminPanel/AdminMouse.pm | 278 | ||||
-rw-r--r-- | categories.conf | 3 | ||||
-rwxr-xr-x | modules/adminMouse | 13 |
3 files changed, 294 insertions, 0 deletions
diff --git a/AdminPanel/AdminMouse.pm b/AdminPanel/AdminMouse.pm new file mode 100644 index 00000000..fecf1e21 --- /dev/null +++ b/AdminPanel/AdminMouse.pm @@ -0,0 +1,278 @@ +# vim: set et ts=4 sw=4: +#***************************************************************************** +# +# Copyright (c) 2013 Angelo Naselli <anaselli@linux.it> +# from drakx services +# +# 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. +# +#***************************************************************************** + +package AdminPanel::AdminMouse; + +#leaving them atm +use lib qw(/usr/lib/libDrakX); + +# i18n: IMPORTANT: to get correct namespace (drakx-kbd-mouse-x11 instead of libDrakX) +BEGIN { unshift @::textdomains, 'drakx-kbd-mouse-x11' } + +use common; +use modules; +use mouse; +use c; + +use AdminPanel::Shared; + +use yui; +use Moose; + +extends qw( Module ); + +has '+icon' => ( + default => "/usr/share/mcc/themes/default/mousedrake-mdk.png", +); + +has '+name' => ( + default => N("AdminMouse"), +); + +sub start { + my $self = shift; + + $self->_adminMouseDialog(); +} + +sub _getUntranslatedName { + my ($self, $name, $list) = @_; + + foreach my $n (@{$list}) { + my @names = split(/\|/, $n); + for (my $lev=0; $lev < scalar(@names); $lev++) { + if (translate($names[$lev]) eq $name) { + return $names[$lev]; + } + } + } + + return undef; +} + + +sub _adminMouseDialog { + my $self = shift; + + my $datavalue = "TEST"; + + my $appTitle = yui::YUI::app()->applicationTitle(); + + ## set new title to get it in dialog + yui::YUI::app()->setApplicationTitle($self->name); + ## set icon if not already set by external launcher + yui::YUI::app()->setApplicationIcon($self->icon); + + my $factory = yui::YUI::widgetFactory; + + my $dialog = $factory->createMainDialog; + my $vbox = $factory->createVBox( $dialog ); + my $frame = $factory->createFrame ($vbox, N("Please choose your type of mouse.")); + my $treeWidget = $factory->createTree($frame, ""); + + my $modules_conf = modules::any_conf->read; + + my $mouse = mouse::read(); + + if (!$::noauto) { + my $probed_mouse = mouse::detect($modules_conf); + $mouse = $probed_mouse if !$mouse->{Protocol} || !$probed_mouse->{unsafe}; + } + + if (!$mouse || !$::auto) { + $mouse ||= mouse::fullname2mouse('Universal|Any PS/2 & USB mice'); + + my $prev = my $fullname = $mouse->{type} . '|' . $mouse->{name}; + my $selected = $mouse->{name}; + + my $fullList = { list => [ mouse::_fullnames() ], items => [], separator => '|', val => \$fullname, + format => sub { join('|', map { translate($_) } split('\|', $_[0])) } } ; + my $i; + + my $itemColl = new yui::YItemCollection; + my @items; + for ($i=0; $i<scalar(@{$fullList->{list}}); $i++) { + my @names = split(/\|/, $fullList->{list}[$i]); + for (my $lev=0; $lev < scalar(@names); $lev++) { + $names[$lev] = N($names[$lev]); + } + if ($i == 0 || $names[0] ne $items[0]->{label}) { + if ($i != 0) { + $itemColl->push($items[0]->{item}); + push @{$fullList->{items}}, $items[-1]->{item};; + } + @items = undef; + my $item = new yui::YTreeItem ($names[0]); + + if ($selected eq $self->_getUntranslatedName($item->label(), $fullList->{list})) { + $item->setSelected(1) ; + $item->setOpen(1); + my $parent = $item; + while($parent = $parent->parent()) { + $parent->setOpen(1); + } + } + $item->DISOWN(); + @items = ({item => $item, label => $names[0], level => 0}); + for (my $lev=1; $lev < scalar(@names); $lev++) { + $item = new yui::YTreeItem ($items[$lev-1]->{item}, $names[$lev]); + + if ($selected eq $self->_getUntranslatedName($item->label(), $fullList->{list})) { + $item->setSelected(1) ; + $item->setOpen(1); + my $parent = $item; + while($parent = $parent->parent()) { + $parent->setOpen(1); + } + } + $item->DISOWN(); + if ($lev < scalar(@names)-1) { + push @items, {item => $item, label => $names[$lev], level => $lev}; + } + } + } + else { + my $prevItem = 0; + for (my $lev=1; $lev < scalar(@names); $lev++) { + my $it; + for ($it=1; $it < scalar(@items); $it++){ + if ($items[$it]->{label} eq $names[$lev] && $items[$it]->{level} == $lev) { + $prevItem = $it; + last; + } + } + if ($it == scalar(@items)) { + my $item = new yui::YTreeItem ($items[$prevItem]->{item}, $names[$lev]); + + if ($selected eq $self->_getUntranslatedName($item->label(), $fullList->{list})) { + $item->setSelected(1) ; + $item->setOpen(1); + my $parent = $item; + while($parent = $parent->parent()) { + $parent->setOpen(1); + } + } + $item->DISOWN(); + push @items, {item => $item, label => $names[$lev], level => $lev}; + } + } + } + } + $itemColl->push($items[0]->{item}); + push @{$fullList->{items}}, $items[-1]->{item}; + + $treeWidget->addItems($itemColl); + my $align = $factory->createLeft($vbox); + my $hbox = $factory->createHBox($align); + my $aboutButton = $factory->createPushButton($hbox, N("About") ); + $align = $factory->createRight($hbox); + $hbox = $factory->createHBox($align); + my $cancelButton = $factory->createPushButton($hbox, N("Cancel") ); + my $okButton = $factory->createPushButton($hbox, N("Ok") ); + + while(1) { + my $event = $dialog->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 == $aboutButton) { + my $license = translate($AdminPanel::Shared::License); + AdminPanel::Shared::AboutDialog( + { name => N("AdminMouse"), + version => $self->VERSION, + copyright => N("Copyright (C) %s Mageia community", '2014'), + license => $license, + comments => N("AdminMouse is the Mageia mouse management tool \n(from the original idea of Mandriva mousedrake)."), + website => 'http://www.mageia.org', + website_label => N("Mageia"), + authors => "Angelo Naselli <anaselli\@linux.it>\nMatteo Pasotti <matteo.pasotti\@gmail.com>", + translator_credits => + #-PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>") + N("_: Translator(s) name(s) & email(s)\n")} + ); + } + elsif ($widget == $okButton) { + my $continue = 1; + my $selectedItem = $treeWidget->selectedItem(); + + my $it=$selectedItem; + my $fullname = $self->_getUntranslatedName($it->label(), $fullList->{list}); + while($it = yui::toYTreeItem($it)->parent()) { + $fullname = join("|", $self->_getUntranslatedName($it->label(), $fullList->{list}), $fullname); + } + + if ($fullname ne $prev) { + my $mouse_ = mouse::fullname2mouse($fullname, device => $mouse->{device}); + if ($fullname =~ /evdev/) { + $mouse_->{evdev_mice} = $mouse_->{evdev_mice_all} = $mouse->{evdev_mice_all}; + } + %$mouse = %$mouse_; + } + + if ($mouse->{nbuttons} < 3 ) { + $mouse->{Emulate3Buttons} = AdminPanel::Shared::ask_YesOrNo('', N("Emulate third button?")); + } + if ($mouse->{type} eq 'serial') { + my @list = (); + foreach (detect_devices::serialPorts()) { + push @list, detect_devices::serialPort2text($_); + } + my $choice = AdminPanel::Shared::ask_fromList(N("Mouse Port"), + N("Please choose which serial port your mouse is connected to."), + \@list); + if ( !$choice ) { + $continue = 0; + } + else { + $mouse->{device} = $choice; + } + } + + if ($continue) { + last; + } + } + } + } + + } + + # TODO manage write conf without interactive things + # mouse::write_conf($in->do_pkgs, $modules_conf, $mouse, 1); + system('systemctl', 'try-restart', 'gpm.service') if -e '/usr/lib/systemd/system/gpm.service'; + + $dialog->destroy(); + + #restore old application title + yui::YUI::app()->setApplicationTitle($appTitle); +} + +1;
\ No newline at end of file diff --git a/categories.conf b/categories.conf index a1580e18..5f06c2c4 100644 --- a/categories.conf +++ b/categories.conf @@ -35,6 +35,9 @@ <title>Hardware</title> <icon>/usr/share/icons/configuration_section.png</icon> <module> + <class>AdminPanel::AdminMouse</class> + </module> + <module> <title>CD/DVD Config</title> <launcher>./modules/test</launcher> <icon>./modules/pythonMod</icon> diff --git a/modules/adminMouse b/modules/adminMouse new file mode 100755 index 00000000..6af17135 --- /dev/null +++ b/modules/adminMouse @@ -0,0 +1,13 @@ +#!/usr/bin/perl + +use lib qw(/usr/lib/libDrakX); + +use common qw(N); + +use AdminPanel::AdminMouse; + +my $mouseMan = AdminPanel::AdminMouse->new(); + +$mouseMan->start(); + +1; |