class HTableView

Attributes

fieldTable[RW]
headerTr[RW]
mainStatement[RW]
summaryTr[RW]
td[RW]
th[RW]
totalizerTr[RW]
tr[RW]

Public Class Methods

new(fieldTable: nil, className: 'htableview', **args) click to toggle source
Calls superclass method HWidget::new
# 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
niceTable() click to toggle source
# 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
niceTable2() click to toggle source
# 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
test() click to toggle source
# File lib/hwidgets/htableview.rb, line 169
def self.test()
 
  fieldTable = HFieldTable.test2 
  tableView = HTableView.new(fieldTable)
  tw = tableView.html()
  return tw

end
test2() click to toggle source
# File lib/hwidgets/htableview.rb, line 216
def self.test2()

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

end
test3() click to toggle source
# 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
test4() click to toggle source
# 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

Public Instance Methods

appendRow(sourceTr = nil) click to toggle source
# 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) click to toggle source
# File lib/hwidgets/htableview.rb, line 62
def beforeInsertRow(row, tagName, fieldName, value)
end
buildTag(fieldName, tag = "td", i = 0) click to toggle source
# 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
html() click to toggle source
Calls superclass method HWidget#html
# 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
setAddRowButton() click to toggle source
# File lib/hwidgets/htableview.rb, line 155
def setAddRowButton()
end
setControlPanel() click to toggle source
# File lib/hwidgets/htableview.rb, line 152
def setControlPanel()
end
setInsideHTML() click to toggle source
# 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
setSummary() click to toggle source
# 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
setTableHeaders() click to toggle source
# 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) click to toggle source
# File lib/hwidgets/htableview.rb, line 58
def setTd(td, fieldName, value, row)
    #p "HTableView::setTd"
end
setThSlots(th, fieldName) click to toggle source
# File lib/hwidgets/htableview.rb, line 50
def setThSlots(th, fieldName)
    #p "HTableView::setThSlots"
end
setTotalizer() click to toggle source
# 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) click to toggle source
# File lib/hwidgets/htableview.rb, line 54
def setTrSlots(tr, row)
    #p "HTableView::setTrSlots"
end