diff options
Diffstat (limited to 'panel.inc')
-rw-r--r-- | panel.inc | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/panel.inc b/panel.inc new file mode 100644 index 0000000..cd3376f --- /dev/null +++ b/panel.inc @@ -0,0 +1,203 @@ +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% +% Panel handling. +% +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Some global vars. +% +/panel.size { clip.size pop 24 } def +/panel.y { clip.size exch pop panel.size exch pop sub 10 sub } def +/panel.text.y { panel.y 5 add } def +/panel.text.Fy 0 def +/panel.font font.normal def +/panel.normal white def +/panel.high blue def +/panel.bg lightgray def +/panel.border lightdotcolor def + +/panel.expert false def + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Init panel. +% +% ( ) ==> ( ) +% +/panel.init { + + /panel.back 0 panel.y moveto panel.size savescreen def + + % define panel layout + /panel.full [ + + % [ key x label show_func width_func update_func init_func ] + + [ keyF1 0 "F1" /panel.help /panel.help.width /panel.help.update .undef ] + + syslinux { + + livecd { + + [ keyF2 0 "F2" /panel.video /panel.video.width /panel.video.update /video.init ] + [ keyF3 0 "F3" /panel.splash /panel.splash.width /panel.splash.update /splash.init ] + [ keyF4 0 "F4" /panel.lang /panel.lang.width /panel.lang.update /lang.init ] + + } { + + [ keyF2 0 "F2" /panel.lang /panel.lang.width /panel.lang.update /lang.init ] + [ keyF3 0 "F3" /panel.video /panel.video.width /panel.video.update /video.init ] + [ keyF4 0 "F4" /panel.install /panel.install.width /panel.install.update /install.init ] + [ keyF5 0 "F5" /panel.dud /panel.dud.width /panel.dud.update /dud.init ] + + 32+64bit_source { + 64bit { + 32bit_boot_dir .undef ne + 64bit_boot_dir .undef ne + 32bit_boot_dir 64bit_boot_dir ne + and and { + [ keyF6 0 "F6" /panel.bits /panel.bits.width /panel.bits.update /bits.init ] + } if + } if + } if + + } ifelse + + xmenu.bits .undef eq { bits.init } if + + } { + + [ keyF2 0 "F2" /panel.lang /panel.lang.width /panel.lang.update /lang.init ] + "profiles" findfile dup { + /profile.data exch def + [ keyF3 0 "F3" /panel.profile /panel.profile.width /panel.profile.update /profile.init ] + } { pop } ifelse + + } ifelse + + ] def + + % initialize all + panel.full { 6 get dup .undef ne { exec } { pop } ifelse } forall + + syslinux { + /panel.short [ + [ keyF1 0 "F1" /panel.help /panel.help.width /panel.help.update .undef ] + [ keyF2 0 "F2" /panel.lang /panel.lang.width /panel.lang.update /lang.init ] + [ keyF3 0 "F3" /panel.options /panel.options.width /panel.options.update .undef ] + ] def + + /panel CapsLock { panel.full } { panel.short } ifelse def + } { + /panel.short [ + [ keyF1 0 "F1" /panel.help /panel.help.width /panel.help.update .undef ] + [ keyF2 0 "F2" /panel.options /panel.options.width /panel.options.update .undef ] + ] def + + /panel panel.short def + } ifelse + + panel.show +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Show panel. +% +% ( ) ==> ( ) +% +/panel.show { + panel.font setfont + +% panel.bg setcolor + 0 panel.y moveto +% currentpoint + panel.back restorescreen +% currenttransparency +% 50 settransparency +% panel.size fillrect +% settransparency +% moveto + +% panel.border setcolor +% 0 -1 rmoveto +% 0 1 clip.size pop 3 div { pop putpixel 3 0 rmoveto } for + + % don't change xmenu + /xmenu xmenu + + /panel.x 0 def + panel { dup { + dup 1 panel.x put + dup 4 get exec over 2 get strsize pop add 20 add panel.x add /panel.x exch def + dup 5 get exec + } { pop } ifelse } forall + + def + +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Handle keyboard input. +% +% ( key_in ) ==> ( key_out ) +% +/panel.input { + panel { dup { + dup 0 get 2 index eq { over panel.extra pop 3 get exec pop 0 exit } { pop } ifelse + } { pop } ifelse } forall +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Draw panel entry label and move to text field. +% +% ( panel ) => ( ) +% +/panel.text.moveto { + /panel.tmp.x over 1 get 10 add def + /panel.tmp.F exch 2 get def + + panel.tmp.x panel.text.y panel.text.Fy add moveto + panel.high setcolor panel.tmp.F show + panel.normal setcolor + + 6 panel.text.Fy neg rmoveto +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Do some extra things. +% +% ( key ) => ( key ) +% +/panel.extra { + % move down one menu entry; but only once + % see keyDown in main::main.input + + % only for install CDs + syslinux not { return } if + + % not for live cd + livecd { return } if + + % not for F1 + dup keyF1 eq { return } if + + panel.extra.fkey .undef eq + menu.entry 0 eq + menu.entry menu.texts length 1 sub lt + and and { + /panel.extra.fkey 1 def + menu.entry false MenuSelect + menu.visible.entries menu.entry menu.shift sub sub 1 eq { + /menu.shift menu.shift 1 add def redrawmenu + } if + /menu.entry menu.entry 1 add def + menu.entry true MenuSelect + } if +} def + + |