aboutsummaryrefslogtreecommitdiffstats
path: root/AdminPanel/AdminMouse.pm
diff options
context:
space:
mode:
Diffstat (limited to 'AdminPanel/AdminMouse.pm')
-rw-r--r--AdminPanel/AdminMouse.pm278
1 files changed, 278 insertions, 0 deletions
diff --git a/AdminPanel/AdminMouse.pm b/AdminPanel/AdminMouse.pm
new file mode 100644
index 0000000..fecf1e2
--- /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