class Uh::Layout

Constants

ArgumentError
COLORS
Error
RuntimeError
VERSION

Attributes

bar_status[R]
colors[R]
history[R]
screens[R]
widgets[R]

Public Class Methods

new(**options) click to toggle source
# File lib/uh/layout.rb, line 37
def initialize **options
  @screens    = Container.new
  @widgets    = []
  @colors     = COLORS
  @history    = History.new
  @bar_status = options[:bar_status]

  @colors = @colors.merge options[:colors] if options.key? :colors
end

Public Instance Methods

<<(client) click to toggle source
# File lib/uh/layout.rb, line 72
def << client
  current_view.current_column_or_create << client
  current_column.current_client = client
  current_column.arrange_clients
  current_column.show_hide_clients
  client.focus
  update_widgets
  self
end
Also aliased as: push
current_client() click to toggle source
# File lib/uh/layout.rb, line 55
def current_client
  current_column and current_column.current_client
end
expose(window) click to toggle source
# File lib/uh/layout.rb, line 97
def expose window
  update_widgets
end
handle_client_column_set(direction, mover: client_mover_for_current_view) click to toggle source
# File lib/uh/layout.rb, line 162
def handle_client_column_set direction, mover: client_mover_for_current_view
  return unless current_client
  mover.move_current direction
  current_view.arrange_columns
  current_view.each_column &:show_hide_clients
  update_widgets
end
handle_client_sel(direction) click to toggle source
# File lib/uh/layout.rb, line 148
def handle_client_sel direction
  return unless current_client
  current_column.clients.sel direction
  current_column.show_hide_clients
  current_client.focus
  update_widgets
end
handle_client_swap(direction) click to toggle source
# File lib/uh/layout.rb, line 156
def handle_client_swap direction
  return unless current_client && current_column.clients.size >= 2
  current_column.client_swap direction
  update_widgets
end
handle_column_mode_toggle() click to toggle source
# File lib/uh/layout.rb, line 141
def handle_column_mode_toggle
  return unless current_column
  current_column.mode_toggle
  current_column.arrange_clients
  current_column.show_hide_clients
end
handle_column_sel(direction) click to toggle source
# File lib/uh/layout.rb, line 134
def handle_column_sel direction
  return unless current_view.columns.any?
  current_view.columns.sel direction
  current_client.focus
  update_widgets
end
handle_history_view_pred() click to toggle source
# File lib/uh/layout.rb, line 170
def handle_history_view_pred
  handle_view_sel @history.last_view.id
end
handle_screen_sel(direction) click to toggle source
# File lib/uh/layout.rb, line 101
def handle_screen_sel direction
  screens.sel direction
  current_client.focus if current_client
  update_widgets
end
handle_screen_set(direction) click to toggle source
# File lib/uh/layout.rb, line 107
def handle_screen_set direction
  return unless current_client
  remove client = current_client
  screens.sel direction
  push client
end
handle_view_sel(view_id) click to toggle source
# File lib/uh/layout.rb, line 114
def handle_view_sel view_id
  view_id = view_id.to_s
  return unless current_view.id != view_id
  @history.record_view current_view
  current_view.hide
  current_screen.views.current = find_view_or_create view_id
  current_view.each_column &:show_hide_clients
  current_client.focus if current_client
  update_widgets
end
handle_view_set(view_id) click to toggle source
# File lib/uh/layout.rb, line 125
def handle_view_set view_id
  return unless current_client && current_view.id != view_id
  previous_view_id = current_view.id
  remove client = current_client
  handle_view_sel view_id
  push client
  handle_view_sel previous_view_id
end
include?(client) click to toggle source
# File lib/uh/layout.rb, line 59
def include? client
  screens.any? { |screen| screen.include? client }
end
push(client)
Alias for: <<
register(display) click to toggle source
# File lib/uh/layout.rb, line 47
def register display
  Registrant.register self, display
end
remove(client) click to toggle source
# File lib/uh/layout.rb, line 83
def remove client
  screen, view, column = find_client client
  column.remove client
  view.arrange_columns
  column.show_hide_clients
  current_client.focus if current_client
  update_widgets
end
suggest_geo() click to toggle source
# File lib/uh/layout.rb, line 68
def suggest_geo
  (current_column or current_view).geo.dup
end
to_s() click to toggle source
# File lib/uh/layout.rb, line 51
def to_s
  Dumper.new(self).to_s
end
update(client = nil) click to toggle source
# File lib/uh/layout.rb, line 92
def update client = nil
  return if client && client.hidden?
  update_widgets
end
update_widgets() click to toggle source
# File lib/uh/layout.rb, line 63
def update_widgets
  @widgets.each &:update
  @widgets.each &:redraw
end

Private Instance Methods

client_mover_for_current_view() click to toggle source
# File lib/uh/layout.rb, line 196
def client_mover_for_current_view
  ClientColumnMover.new(
    current_view.columns,
    current_view.columns_max_count?
  )
end
find_client(client) click to toggle source
# File lib/uh/layout.rb, line 176
def find_client client
  screens.each do |screen|
    screen.views.each do |view|
      view.each_column do |column|
        if column.include? client
          return screen, view, column
        end
      end
    end
  end
end
find_view_or_create(view_id) click to toggle source
# File lib/uh/layout.rb, line 188
def find_view_or_create view_id
  current_screen.views.find do
    |e| e.id == view_id
  end or View.new(view_id, current_screen.geo).tap do |view|
    current_screen.views << view
  end
end