Thread View: pl.comp.lang.perl
2 messages
2 total messages
Started by piecia aka dracorp
Tue, 04 Oct 2011 21:36
Curses::UI - jak poprawnie przełączać skupienie
Author: piecia aka dracorp
Date: Tue, 04 Oct 2011 21:36
Date: Tue, 04 Oct 2011 21:36
71 lines
2720 bytes
2720 bytes
Witam
Piszę sobie taką mała aplikację w Curses::UI no i w między czasie wynikł
problem z przełączania skupienia pomiędzy widgetami.
Dla przykładu taki kod:
#v+
#!/usr/bin/perl
use strict;
use warnings;
use Term::ReadKey;
use Curses::UI;
use Curses;
my @screensize = GetTerminalSize();
my $cui = new Curses::UI(
-clear_on_exit => 0,
);
my $window = $cui->add(
'window','Window',
-border => 1,
);
my $notebook = $window->add(
'notebook','Notebook',
-height => $window->height - 10,
);
my $page1 = $notebook->add_page(
'test1'
);
my $page2 = $notebook->add_page(
'test2'
);
my $button = $window->add(
'button', 'Buttonbox',
-y => -1,
-buttons => [
{
-label => '< Start session >',
-value => 'startsession',
-shortcut => 's',
},
{
-label => '< Quit >',
-shortcut => 'q',
-value => 'quit',
-onpress => sub{exit},
}
],
-onfocus => sub{
$cui->set_binding( sub{$notebook->focus()}, "\t");
},
);
$cui->set_binding( sub{exit(0)} , "\cq");
$cui->set_binding( sub{$button->focus()}, "\t");
$cui->mainloop;
#v-
Tab przełącza skupienie, pomiędzy przyciskami a notebookiem. Jednak w
przypadku dodania następnego widgetu ten sposób się nie sprawdzi.
No chyba że samemu trzeba będzie jednocześnie ustalać kolejność
przełączania i obsłużyć skupienie.
Domyślnie dodanie notebooka do tego samego okna w którym są już przyciski
spowoduje, że nie będzie można przełączać skupienia tabulatorem pomiędzy
nimi.
Pytanie jak to sensowniej zrobić?
ps. powyższy przykład nie jest za bardzo poprawny, bo przełączanie
tabulatorem nie działa w kółko.
--
piecia aka dracorp
pisz na: piotr kropka rogoza at wp kropka eu
Re: Curses::UI - jak poprawnie przełączać skupienie
Author: piecia aka dracorp
Date: Wed, 05 Oct 2011 16:46
Date: Wed, 05 Oct 2011 16:46
22 lines
1632 bytes
1632 bytes
Może się komuś przyda:
#v+
sub changefocus {
my $this = shift;
$this->parent->getobj('button')->focus();
}
my $rbindings = $notebook->{-bindings};
my $rroutines = $notebook->{-routines};
${$rroutines}{'changefocus'} = \&changefocus;
${$rbindings}{"\t"} = 'changefocus';
#v-
Domyślnie notebook nie obsługuje tabulatora. Powyższe na sztywno ustawia
focus na przycisk o id 'button'.
Bo np dla dwóch widgetów Buttonbox tabulator w porządku przełącza
pomiędzy grupami przycisków.
Z czasem trzeba będzie wymyślić coś uniwersalnego.
--
piecia aka dracorp
pisz na: piotr kropka rogoza at wp kropka eu
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads