NAME

Tickit::Widget::Layout::Relative - apply sizing to a group of Tickit widgets

VERSION

version 0.005

SYNOPSIS

 my $l = Tickit::Widget::Layout::Relative->new;
 $l->add(
  title  => 'Little panel',
  id     => 'second',
  border => 'round dashed single',
  width  => '33%',
  height => '5em',
 );
 $l->add(
  title     => 'Another panel',
  id        => 'first',
  below     => 'second',
  top_align => 'second',
  border    => 'round dashed single',
  width     => '33%',
  height    => '10em',
 );
 $l->add(
  title        => 'Something on the right',
  id           => 'overview',
  right_of     => 'first',
  bottom_align => 'first',
  margin_top   => '1em',
  margin_right => '3em',
 );
 Tickit->new(root => $l)->run;

DESCRIPTION

A container widget which provides 'relative' layout for widgets: specify the relations between the widget locations and this will attempt to fit them to the available space.

Relative layout

METHODS

new

Instantiate a new layout. Takes a single named parameter:

  • layout - the optional Tickit::Layout::Relative layout to use for initial positioning, will create a new one if none is supplied

layout

Returns the Tickit::Layout::Relative instance.

lines

Returns the number of lines, carefully calculated using science.

cols

Number of columns.

add

Adds the given widget. Also takes a plethora of named options to help decide where to put said widget and how it should be rendered:

  • title - a label to apply to this pane, default is blank

  • id - an ID used for looking up widgets in an existing layout, see "widget_by_id" and "window_by_id" for more details

  • left_of - attempt to position this to the left of the pane with the given ID

  • right_of - try to arrange this widget on the right of the given ID

  • above - if we can, stick this widget above the given pane ID

  • below - we want to be below the given ID

  • top_align - try to align the top edge with the given widgets (string containing space-separated list, or arrayref, of IDs)

  • bottom_align - align the bottom edge with the given panes (as top_align)

  • left_align - we would like this things to be aligned on the left (as top_align)

  • right_align - we would like this things to be aligned on the right (as top_align)

  • margin - margin to apply around this widget, this is a measurement (see "MEASUREMENTS").

  • margin_left - left margin

  • margin_right - right margin

  • margin_top - top margin

  • margin_bottom - bottom margin

  • padding - padding to apply around this widget, this is a measurement (see "MEASUREMENTS").

  • padding_left - left padding

  • padding_right - right padding

  • padding_top - top padding

  • padding_bottom - bottom padding

  • width - how big we'd like to be, see "MEASUREMENTS"

  • height - how big we'd like to be, see "MEASUREMENTS"

Don't rely on the return value. It may change in future.

Example:

 $layout->add(
  Tickit::Widget::Static->new(text => '...'),
  title  => 'Some panel',
  id     => 'send',
  border => 'single',
  width  => '85%',
  height => '15em',
 )

render_to_rb

Renders the layout to the given Tickit::RenderBuffer. Used internally.

render_corners

Render the corners. Purely for aesthetic reasons (rounded corners look better than the usual square corners formed by vline/hline). Used internally.

window_gained

When we get a window, we perform some unfortunate hacks to allow focus notification. Most of this is highly likely to change in future.

reshape

Called when our main window changes shape. We recalculate layout to match the new dimensions then update all child widgets accordingly.

INHERITED METHODS

Tickit::ContainerWidget

child_opts, child_resized, children_changed, find_child, focus_next, remove, set_child_opts, window_lost

Tickit::Widget

get_style_pen, get_style_text, get_style_values, key_focus_next_after, key_focus_next_before, on_pen_changed, parent, pen, redraw, requested_cols, requested_lines, requested_size, resized, set_parent, set_pen, set_requested_size, set_style, set_style_tag, set_window, style_classes, take_focus, window

AUTHOR

Tom Molesworth <cpan@entitymodel.com>

LICENSE

Copyright Tom Molesworth 2012-2014. Licensed under the same terms as Perl itself.