🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#52304
Author: piecia aka dracorp
Date: Tue, 04 Oct 2011 21:36
71 lines
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
#52305
Author: piecia aka dracorp
Date: Wed, 05 Oct 2011 16:46
22 lines
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