Class: TkWrapper::Widgets::Grid

Inherits:
Base::Widget show all
Defined in:
lib/widgets/grid.rb

Overview

classification of TkGrid

Constant Summary collapse

Widget =
TkWrapper::Widgets::Base::Widget

Instance Attribute Summary collapse

Attributes inherited from Base::Widget

#childs, #config

Instance Method Summary collapse

Methods inherited from Base::Widget

#build, #check_match, config, #configure, #create_tk_widget, #find, #find_all, #ids, manager, #manager, modify, #push, #tk_widget

Constructor Details

#initialize(config: {}, childs: []) ⇒ Grid

Returns a new instance of Grid.



13
14
15
16
17
18
# File 'lib/widgets/grid.rb', line 13

def initialize(config: {}, childs: [])
  super(config: config, childs: childs)
  @childs.map! { |row| row.is_a?(Array) ? row : [row] }
  configure_cells_for_grid
  @childs.flatten! && @childs.select! { |cell| cell.is_a?(Widget) }
end

Instance Attribute Details

#matrixObject (readonly)

Returns the value of attribute matrix.



5
6
7
# File 'lib/widgets/grid.rb', line 5

def matrix
  @matrix
end

#parentObject (readonly)

Returns the value of attribute parent.



5
6
7
# File 'lib/widgets/grid.rb', line 5

def parent
  @parent
end

Instance Method Details

#configure_cells_for_gridObject



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/widgets/grid.rb', line 20

def configure_cells_for_grid
  @childs.each_with_index do |row, row_i|
    row.each_with_index do |cell, col_i|
      next unless cell.is_a?(Widget)

      cell.config.merge({ grid: { row: row_i, column: col_i } })

      configure_colspan(cell, row_i, col_i)
      configure_rowspan(cell, row_i, col_i)
    end
  end
end

#configure_colspan(cell, row_i, col_i) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/widgets/grid.rb', line 33

def configure_colspan(cell, row_i, col_i)
  cols_after_cell = @childs[row_i][(col_i + 1)..]
  colspan = cols_after_cell.reduce(1) do |span, content|
    content == :right ? span + 1 : (break span)
  end
  cell.config.merge({ grid: { columnspan: colspan } })
end

#configure_rowspan(cell, row_i, col_i) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/widgets/grid.rb', line 41

def configure_rowspan(cell, row_i, col_i)
  rows_after_cell = @childs[(row_i + 1)..]
  rowspan = rows_after_cell.reduce(1) do |span, row|
    row[col_i] == :bottom ? span + 1 : (break span)
  end
  cell.config.merge({ grid: { rowspan: rowspan } })
end

#tk_classObject



9
10
11
# File 'lib/widgets/grid.rb', line 9

def tk_class
  TkWidgets::Frame
end