#!/usr/bin/perl -w
use strict;
use IO::Handle;
autoflush STDOUT 1;
autoflush STDERR 1;
use tmstub;
use Tk;
#use Tk::FontDialog;
my $title = 'piduino menu';
my $version = "v0.2 2012-07-29";
my $mw = new MainWindow();
# PAL resolution 656x512@16
$mw->overrideredirect(1);
my ($scr_w, $scr_h) = $mw->maxsize();
t "maxsize says: $scr_w x $scr_h";
#~ $mw->geometry("656x512+0+0");
$mw->geometry("680x540+0+0");
#~ $mw->FullScreen;
#~ $mw->geometry(($mw->maxsize())[0] .'x'.($mw->maxsize())[1] . "+0+0");
my $c = $mw->Canvas(-bg => "yellow", -width => 680, -height => 540)->pack;
# in theory we should be able to scroll infinitely but let's stick to something reasonable
#$c->configure(-scrollregion => [0,0, 600, 400]);
my $font = $mw->fontCreate('menufont', -family => 'Village', -size => 38, -weight=>'bold');
my $menu_w = 400;
my $menu_h = 100;
# it don't work!
#~ invisible_cursor();
# warp pointer tests...
$mw->after(100, sub {warp(20,20)});
sub warp {
my($x, $y) = @_;
t "warp pointer to $x $y";
$c->focus;
$mw->eventGenerate("<Motion>",
-when => 'head',
-x => $x, -y => $y, -warp => 1
);
}
# keybinding tests...
$mw->bind('<KeyPress>' => \&print_keysym);
sub print_keysym {
my($widget) = @_;
my $e = $widget->XEvent; # get event object
my($keysym_text, $keysym_decimal) = ($e->K, $e->N);
print "keysym=$keysym_text, numeric=$keysym_decimal\n";
}
# hide cursor
sub invisible_cursor {
my $bitmapfile = Tk->findINC('trans_cur.xbm');
my $maskfile = Tk->findINC('trans_cur.mask');
$mw->configure(-cursor => [ '@' . $bitmapfile, $maskfile, 'black', 'white' ] );
}
# handy font chooser
#~ $mw->Button(
#~ -font => $font,
#~ -text => "Font",
#~ -command => sub{choose_font()},
#~ )->pack();
# debug grid...
$c->createGrid(0, 0, 10, 10);
$c->createGrid(0, 0, 50, 50, -lines => 1, -dash => '-.');
$c->createGrid(0, 0, 100, 100, -width => 3, -lines => 1);
# TODO - load settings from file
menubox("Music", 0, 0);
menubox("Controls", 0, 1);
menubox("Vehicle", 0, 2);
menubox("System", 0, 3);
menubox("Settings", 0, 3);
# menubox("More...", 1, 0);
#~ music selection
#~ playlists
#~ artists by name
#~ albums
#~ directories
#~ controls
#~ volume
#~ bass
#~ treble
#~ balance
#~ system reboot
#~ system shutdown
#~ app quit
#~ app restart
sub menubox {
my($t, $mx, $my) = @_;
my $x1 = $mx * $menu_w;
my $y1 = $my * $menu_h;
my $x2 = $x1 + $menu_w;
my $y2 = $y1 + $menu_h;
$c->createRectangle($x1, $y1, $x2, $y2,
-fill => "blue",
-activefill => "green",
-outline => "green",
-activeoutline => "orange",
);
$c->createText($x1 + ($menu_w/2), $y1+ ($menu_h/2),
-text => "$t",
-font => $font,
-fill => "black",
);
}
=for docs
options:
* canvas width and height to cover the whole menu system
* sub-menus can't all be visible simultaneously so we'd have to hide them
* group items together
do top level menu first
menu level zero at 0,0
menu level one appears at 1*menu_w, selected item * menu_h
=cut
sub choose_font
{
# t $mw->GetDescriptiveFontName($font);
# my $f = $mw->FontDialog->Show(
#-initfont => $font,
#-nicefont => 1
# );
# return unless defined $f;
# $mw->RefontTree(-font => $f, -canvas => 1);
# my $d = $mw->GetDescriptiveFontName($f);
# t $d;
# $font = $f;
}
MainLoop();