Class: HTableView

Inherits:
HWidget show all
Defined in:
lib/hwidgets/htableview.rb

Direct Known Subclasses

HDBTableView

Instance Attribute Summary collapse

Attributes inherited from HWidget

#tag

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from HWidget

#_addJsSlot, #_set, #_setStyle, #addJsFunction, #appendChild, #appendChilds, #buildSignature, #closeTag, #connect, #copyConstructor, #get, #getChilds, #getElementBy, #getSystemProperty, #hotLog, #openTag, #replacePlaceholder, #reset, #set, #setChilds, #setCloseTag, #setClosedTag, #setEnablePlaceholder, #setInnerHTML, #setParent, #setPlaceholder, #setPlaceholders, #setProperties, #setSlots, #setStyle, #setStyles, #setSystemProperties, #setSystemProperty, #setTag, #storeSlots, #storeStyle, #strProperties, #unset, widgetSpace

Constructor Details

#initialize(fieldTable: nil, className: 'htableview', **args) ⇒ HTableView

Returns a new instance of HTableView.



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/hwidgets/htableview.rb', line 5

def initialize(fieldTable: nil, className: 'htableview', **args)
  super("table", class: className, **args)
  @fieldTable = fieldTable
  @headerTr = HWidget.new("tr")
  @tr = Array.new() 
  @tr[0] = HWidget.new("tr")
  @tr[1] = HWidget.new("tr")
  @th = nil
  @td = nil
  @totalizerTr = nil
  @summaryTr = nil
end

Instance Attribute Details

#fieldTableObject

Returns the value of attribute fieldTable.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def fieldTable
  @fieldTable
end

#headerTrObject

Returns the value of attribute headerTr.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def headerTr
  @headerTr
end

#mainStatementObject

Returns the value of attribute mainStatement.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def mainStatement
  @mainStatement
end

#summaryTrObject

Returns the value of attribute summaryTr.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def summaryTr
  @summaryTr
end

#tdObject

Returns the value of attribute td.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def td
  @td
end

#thObject

Returns the value of attribute th.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def th
  @th
end

#totalizerTrObject

Returns the value of attribute totalizerTr.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def totalizerTr
  @totalizerTr
end

#trObject

Returns the value of attribute tr.



3
4
5
# File 'lib/hwidgets/htableview.rb', line 3

def tr
  @tr
end

Class Method Details

.niceTableObject



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/hwidgets/htableview.rb', line 178

def self.niceTable()
  headerTr = HWidget.new("tr").setStyle("background-color": "orange")
  td = HWidget.new("td").setStyle("padding": "8px")
  tableView = HTableView.new().
    set("border-collapse": "collapse", width: "50%")
  tableView.headerTr = headerTr
  tableView.td = td
  #tableView.th = td
  tr = Array.new()
  tr[0] = HWidget.new("tr").setStyle("background-color": "#4CAF50")
  tr[1] = HWidget.new("tr").setStyle("background-color": "#F2F2F2")
  tableView.tr = tr
  
  totalizerTr = Array.new()
  totalizerTr[0] = HWidget.new("tr").setStyle("background-color": "yellow")
  totalizerTr[1] = totalizerTr[0]
  tableView.totalizerTr = totalizerTr

  summaryTr = Array.new()
  summaryTr[0] = summaryTr[1] = headerTr
  tableView.summaryTr = summaryTr

  return tableView
end

.niceTable2Object



203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/hwidgets/htableview.rb', line 203

def self.niceTable2()
  tableView = self.niceTable()
  str =  "#tableName-#fieldName-#tag" 
  tableView.td.set(class: "#{str}", 
                   id: "#{str}-id-#rowNumber-#colNumber-#fieldValue",
                   name: "#{str}-name-#rowNumber")
  tableView.tr[0].set(class: "#tableName-tr-#alternateRowNumber", id: "#tableName-#rowNumber-#id-#name")
  tableView.tr[1].set(class: "#tableName-tr-#alternateRowNumber", id: "#tableName-#rowNumber-#id-#name")
  tableView.totalizerTr[0].set(class: "#totalizerName-#totalizerValue")

  return tableView
end

.testObject



169
170
171
172
173
174
175
176
# File 'lib/hwidgets/htableview.rb', line 169

def self.test()
 
  fieldTable = HFieldTable.test2 
  tableView = HTableView.new(fieldTable)
  tw = tableView.html()
  return tw

end

.test2Object



216
217
218
219
220
221
222
223
# File 'lib/hwidgets/htableview.rb', line 216

def self.test2()

  tableView = self.niceTable
  tableView.fieldTable = HSpreadFieldTable.test
  tw = tableView.html()
  return tw

end

.test3Object



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/hwidgets/htableview.rb', line 225

def self.test3()
  
  products = Products.new
  products.quantity = HField.virtual { |this| this.categories_id.id.to_i }
  products.amount = HField.virtual(:amount, HODB) # Secondo metodo ma passando il nome della classe essendo statica
  products.all
  fieldTable = products.toFieldTable([:id, :quantity, :name, :price, :amount, :score, :random, :barcode]) 
  fieldTable.setFieldVisible(:id, false)
  fieldTable.setFieldTotalizer(:price, "P R I C E")
  fieldTable.setFieldTotalizer(:amount, "T O T A L")
  fieldTable.addSummary("SUMMARY", "2.000 Euro")
  tableView = self.niceTable
  tableView.fieldTable = fieldTable
  tw = tableView.html()
  return tw

end

.test4Object



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/hwidgets/htableview.rb', line 244

def self.test4()

  databaseManager = HPgSqlDatabaseManager.defaultPgSqlDatabaseManager()
  sqlTable = databaseManager.run("select * from recipe_types").toSqlTable()
  sqlTable.setHideColumn("id")
  #sqlTable.setHideColumn("name")
  sqlTable.setTotalizerName("position", "P O S I T I O N")
  sqlTable.setTotalizerName("id", "I D")
  sqlTable.addSummary("SUMMARY", "2.000 Euro")

  tableView = self.niceTable2
  tableView.fieldTable = sqlTable
  tw = tableView.html()
  return tw

end

Instance Method Details

#appendRow(sourceTr = nil) ⇒ Object



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

def appendRow(sourceTr = nil)
  
  colorIndex = @fieldTable.rowCount() % 2 unless colorIndex
  sourceTr = @tr[colorIndex] unless sourceTr
  tr = sourceTr.copyConstructor
  self.fieldTable.fields.each do |fieldName, fieldValue|
    tr.appendChild(HWidget.new("td", " ")) if(fieldValue.visible)
  end
  self << tr
  return tr

end

#beforeInsertRow(row, tagName, fieldName, value) ⇒ Object



62
63
# File 'lib/hwidgets/htableview.rb', line 62

def beforeInsertRow(row, tagName, fieldName, value)
end

#buildTag(fieldName, tag = "td", i = 0) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/hwidgets/htableview.rb', line 31

def buildTag(fieldName, tag = "td", i = 0)

  if (tag == "th")
    td = @th.copyConstructor if @th 
  else
    td = @td.copyConstructor if @td
  end
  
  td = HWidget.new(tag) unless td 

  td.setPlaceholder("#tableName", @fieldTable.tableName)
  td.setPlaceholder("#fieldName", fieldName)
  td.setPlaceholder("#tag", tag)
  td.setPlaceholder("#rowNumber", i.to_s)
  td.setPlaceholder("#alternateRowNumber", (i % 2).to_s)

  return td
end

#htmlObject



158
159
160
161
162
163
164
165
166
167
# File 'lib/hwidgets/htableview.rb', line 158

def html()
  self.setTableHeaders() 
  self.setInsideHTML()
  self.setAddRowButton() 
  self.setTotalizer() 
  self.setSummary()
  self.setControlPanel() 
  # richiama la funzione html di HWidget
  return super() 
end

#setAddRowButtonObject



155
156
# File 'lib/hwidgets/htableview.rb', line 155

def setAddRowButton()
end

#setControlPanelObject



152
153
# File 'lib/hwidgets/htableview.rb', line 152

def setControlPanel()
end

#setInsideHTMLObject



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/hwidgets/htableview.rb', line 81

def setInsideHTML()
  
  @fieldTable.each do |row, i|
    # it creates a depth copy of object
    trCopy = Marshal.load(Marshal.dump(@tr[i % 2]))
    trCopy.setPlaceholder("#tableName", @fieldTable.tableName)
    trCopy.setPlaceholder("#rowNumber", i.to_s)
    trCopy.setPlaceholder("#alternateRowNumber", (i % 2).to_s)

    @fieldTable.row(i).each do |fieldName, fieldValue|
      value = fieldValue.value if fieldValue
      trCopy.setPlaceholder("##{fieldName}", value)
      #puts "#{fieldName} - #{fieldValue}".red
    end

    
  
    self.setTrSlots(trCopy, row)

    row.each_with_index do |(fieldName, fieldValue), j|
      value = ""
      value = fieldValue.value() if fieldValue
      # Se la tabella contiene un oggetto HWidget o derivato estrae l'html
      value = value.is_a?(HWidget) ? value.html() : value.to_s 

      td = self.buildTag(fieldName, "td", i)
      td.setPlaceholder("#colNumber", j.to_s)          
      td.setPlaceholder("#fieldName", fieldName)
      td.setPlaceholder("#fieldValue", value)
      td.setInnerHTML(value)
      self.setTd(td, fieldName, value, i)
      self.beforeInsertRow(trCopy, "td", fieldName, value)
      trCopy << td
    end
    self.appendChild(trCopy)
  end

end

#setSummaryObject



138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/hwidgets/htableview.rb', line 138

def setSummary()
  
  @fieldTable.summaryList.each_with_index do |summary, i|      
    tr = self.appendRow()
    thName = tr.getChilds()[-2]
    thValue = tr.getChilds()[-1]
    tr.setPlaceholder("#summaryName", summary.value())
    tr.setPlaceholder("#summaryValue", summary.value(:value))
    thName.setInnerHTML(summary.value())
    thValue.setInnerHTML(summary.value(:value))
  end 
  
end

#setTableHeadersObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/hwidgets/htableview.rb', line 65

def setTableHeaders()
  tr = @headerTr.copyConstructor()
  @fieldTable.fields.each_with_index do |(fieldName, fieldValue), i|
    header = fieldValue.caption
    th = self.buildTag(fieldName, "th")
    th.setPlaceholder("#fieldName", fieldName)
    th.setPlaceholder("#colNumber", i.to_s)        
   
    self.setThSlots(th, fieldName) # richiama la funzione setSlots di HDBTableView
    self.beforeInsertRow(tr, "th", fieldName, "")
    th.setInnerHTML(header)
    tr << th
  end
  self.appendChild(tr) 
end

#setTd(td, fieldName, value, row) ⇒ Object



58
59
60
# File 'lib/hwidgets/htableview.rb', line 58

def setTd(td, fieldName, value, row)
    #p "HTableView::setTd"
end

#setThSlots(th, fieldName) ⇒ Object



50
51
52
# File 'lib/hwidgets/htableview.rb', line 50

def setThSlots(th, fieldName)
    #p "HTableView::setThSlots"
end

#setTotalizerObject



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/hwidgets/htableview.rb', line 120

def setTotalizer()
 
  @fieldTable.fields.each do |fieldName, fieldValue|      
    totalizerName = fieldValue.totalizer
    next unless totalizerName 
    tr = self.appendRow()
    thName = tr.getChilds()[-2]
    thValue = tr.getChilds()[-1]
    totalizerValue = @fieldTable.sumByFieldName(fieldName).to_s
    tr.setPlaceholder("#totalizerName", totalizerName.to_s)
    tr.setPlaceholder("#totalizerValue", totalizerValue)
    thName.setInnerHTML(totalizerName)
    thValue.setInnerHTML(totalizerValue)
  end 

end

#setTrSlots(tr, row) ⇒ Object



54
55
56
# File 'lib/hwidgets/htableview.rb', line 54

def setTrSlots(tr, row)
    #p "HTableView::setTrSlots"
end