LibUI
view release on metacpan or search on metacpan
eg/calculator.pl view on Meta::CPAN
uiBoxSetPadded( $vbox, 1 );
uiWindowSetChild( $main_win, $vbox );
$lbl_display = uiNewLabel('0');
uiBoxAppend( $vbox, $lbl_display, 0 );
my $sep = uiNewHorizontalSeparator();
uiBoxAppend( $vbox, $sep, 0 );
# Button grid
my $grid = uiNewGrid();
uiGridSetPadded( $grid, 1 );
uiBoxAppend( $vbox, $grid, 1 );
# Button helper
sub make_btn( $label, $cb ) {
my $btn = uiNewButton($label);
uiButtonOnClicked( $btn, $cb, undef );
return $btn;
}
# uiGridAppend(grid, control, left, top, xspan, yspan, hexpand, halign, vexpand, valign)
# halign/valign: 0=fill, 1=start, 2=center, 3=end
my @grid_btns;
# Row 0: C, ±, â«, ÷
push @grid_btns, [ make_btn( 'C', sub { handle_clear() } ), 0, 0 ];
push @grid_btns, [ make_btn( '±', sub { handle_negate() } ), 1, 0 ];
push @grid_btns, [ make_btn( 'â«', sub { handle_backspace() } ), 2, 0 ];
push @grid_btns, [ make_btn( '÷', sub { handle_operator('/') } ), 3, 0 ];
# Row 1: 7, 8, 9, Ã
push @grid_btns, [ make_btn( '7', sub { handle_number(7) } ), 0, 1 ];
push @grid_btns, [ make_btn( '8', sub { handle_number(8) } ), 1, 1 ];
push @grid_btns, [ make_btn( '9', sub { handle_number(9) } ), 2, 1 ];
push @grid_btns, [ make_btn( 'Ã', sub { handle_operator('*') } ), 3, 1 ];
# Row 2: 4, 5, 6, â
push @grid_btns, [ make_btn( '4', sub { handle_number(4) } ), 0, 2 ];
push @grid_btns, [ make_btn( '5', sub { handle_number(5) } ), 1, 2 ];
push @grid_btns, [ make_btn( '6', sub { handle_number(6) } ), 2, 2 ];
push @grid_btns, [ make_btn( 'â', sub { handle_operator('-') } ), 3, 2 ];
# Row 3: 1, 2, 3, +
push @grid_btns, [ make_btn( '1', sub { handle_number(1) } ), 0, 3 ];
push @grid_btns, [ make_btn( '2', sub { handle_number(2) } ), 1, 3 ];
push @grid_btns, [ make_btn( '3', sub { handle_number(3) } ), 2, 3 ];
push @grid_btns, [ make_btn( '+', sub { handle_operator('+') } ), 3, 3 ];
# Row 4: 0 (span 2), ., =
push @grid_btns, [ make_btn( '0', sub { handle_number(0) } ), 0, 4, 2 ];
push @grid_btns, [ make_btn( '.', sub { $display_text .= '.'; update_display(); } ), 2, 4, 1 ];
push @grid_btns, [ make_btn( '=', sub { handle_equals() } ), 3, 4, 1 ];
for my $b (@grid_btns) {
my ( $btn, $col, $row, $xspan ) = @$b;
$xspan //= 1;
uiGridAppend( $grid, $btn, $col, $row, $xspan, 1, 1, 0, 1, 0 );
}
#
uiMenuItemOnClicked(
$mi_copy,
sub {
# Copy result to clipboard would go here
uiMsgBox( $main_win, 'Copy', 'Result: ' . $display_text );
},
undef
);
uiMenuItemOnClicked( $mi_clear, sub { handle_clear() }, undef );
uiWindowOnClosing(
$main_win,
sub {
uiQuit();
return 1;
},
undef
);
#
uiControlShow($main_win);
uiMain();
( run in 1.381 second using v1.01-cache-2.11-cpan-84e82930d8c )