Class: TkWrapper::Widgets::Grid

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

Overview

classification of TkGrid

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, #manager, manager, modify, #tk_widget

Constructor Details

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

Returns a new instance of Grid.



11
12
13
14
15
16
# File 'lib/widgets/grid.rb', line 11

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



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

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[:grid] ||= {}).merge!({ 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



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

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[:grid] ||= {}).merge!({ columnspan: colspan })
end

#configure_rowspan(cell, row_i, col_i) ⇒ Object



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

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[:grid] ||= {}).merge!({ rowspan: rowspan })
end

#tk_classObject



7
8
9
# File 'lib/widgets/grid.rb', line 7

def tk_class
  TkWidgets::Frame
end