class HDBTableView

Quando faccio doppio click su una tabella si apre una finestra di dialogo a cui passo l'odb della tabella Se in una finestra di dialogo ho un tabella a quella tabella deve essere passato l'odb direttamente dalla finestra di dialogo perche' l'odb deve essere generato con dialogOdb.tableName_table altrimenti quano chiudo l'ultima finestra con ok la tabella modificata non verra' salvata in quando sconnessa dalla dialog box

Attributes

dialogLevel[R]
modelName[R]
moduleName[R]
odb[R]
oid[R]

Public Class Methods

html(moduleName: nil, modelName: nil, odb: nil, dialogLevel: 0, connectionName: "default", filter: "true", sortField: "id", sortDirection: "asc", pageSize: "5", page: 0) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 205
def self.html(moduleName: nil, modelName: nil, odb: nil, dialogLevel: 0, connectionName: "default", filter: "true", sortField: "id", sortDirection: "asc", pageSize: "5", page: 0)
  modelName = modelName.to_s
  dbTableView = HDBTableView.new(moduleName, modelName, odb, dialogLevel, connectionName)
  HDBTableView.tableViewDecorator(dbTableView)
  return dbTableView.html(filter: filter, sortField: sortField, sortDirection: sortDirection, pageSize: pageSize, page: page)

end
new(moduleName: nil, modelName: nil, filter: "true", sortField: "id", sortDirection: "asc", pageSize: 'all', page: 0, odb: nil, poid: nil, dialogLevel: 0, connectionName: "default") click to toggle source
Calls superclass method HTableView::new
# File lib/hwidgets/hdbtableview.rb, line 11
def initialize(moduleName: nil, modelName: nil,
               filter: "true", sortField: "id", sortDirection: "asc",
               pageSize: 'all', page: 0,
               odb: nil, poid: nil, dialogLevel: 0, connectionName: "default")

  hl << " =========================================================".red
  hl << " ==================== NEW HDBTableView ===================".red
  hl << " =========================================================".red
  super(className: 'hdbtableview')
  @moduleName = moduleName
  @modelName = modelName
  @oid = hm().malloc(self, poid).obj.object_id.to_s
  self.hotLog("hdbtableview oid: #{@oid}")
  @odb = odb
  @dialogLevel = dialogLevel
  @connectionName = connectionName
  
  @filter = filter
  @sortField = sortField
  @sortDirection = sortDirection
  @pageSize = pageSize
  @page = page
end
tableViewDecorator(tableView) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 177
def self.tableViewDecorator(tableView)
  headerTr = HWidget.new("tr").setStyle("background-color": "#0099cc")
  td = HWidget.new("td").setStyle(padding: "8px")
  tableView.
    setStyle("table-layout": "auto").
    set(align: "center", width: "100%")
  tableView.headerTr = headerTr
  tableView.td = td
  #tableView.th = td
  tr = Array.new()
  tr[0] = HWidget.new("tr").set(class: "even-row", id: "#id")
  tr[1] = HWidget.new("tr").set(class: "odd-row", id: "#id")
  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

Public Instance Methods

beforeInsertRow(row, tagName, fieldName, value) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 110
def beforeInsertRow(row, tagName, fieldName, value)
  checkBox = HWidget.new("input", value: value, type: "checkbox", class: 'hdbtableview-checkbox')
  checkBox.set(onchange: "hdbTableView.selectAllRows(this)") if tagName == "th"
  row << ( HWidget.new(tagName) << checkBox ) if fieldName == "id"
end
closeButton() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 122
def closeButton()
  hl << "closeButton".red
  @odb.remove() if @odb.id[0] == '#' and @odb.id[-1] != '#'
  return nil
end
deleteRecord(id: nil) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 145
def deleteRecord(id: nil)
  hl << "deleteRecord: #{id}".red
  if dialogLevel == 0
    @odb.delete({"#{modelName}.id": id}) 
  else
    @odb.remove(id)
  end
  return self.html()
end
doubleClick(id: nil) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 128
def doubleClick(id: nil)
  dialogView = HDBDialogView.initByTableView(id, self)
  dialogView.closeButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
  dialogView.cancelButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
  dialogView.connect(:onsubmit, self, "html", submit: true, id: @oid)
  return dialogView.html()
end
html(filter: @filter, sortField: @sortField, sortDirection: @sortDirection, pageSize: @pageSize, page: @page) click to toggle source
Calls superclass method HTableView#html
# File lib/hwidgets/hdbtableview.rb, line 155
def html(filter: @filter, sortField: @sortField, sortDirection: @sortDirection, pageSize: @pageSize, page: @page)
  
  filter = "true" if filter == ""
  @filter = filter
  @sortField = sortField
  @sortDirection = sortDirection
  @pageSize = pageSize
  @page = page

  @odb = HODB.newOdb(@modelName, @connectionName) unless @odb
  @odb.where(filter).orderBy(sortField).direction(sortDirection).pageSize(pageSize).page(page) if @dialogLevel == 0
  @fieldTable = @odb.toFieldTable(false) 
  @fieldTable.sortBy(sortField, asc: sortDirection == 'asc') if @dialogLevel > 0 
  
  self.set(id: @oid, name: @modelName, oid: self.object_id.to_s)
  self.reset()
  
  return super() 

end
newRecord() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 136
def newRecord()
  nvr = odb.create # new virtual record
  dialogView = HDBDialogView.initByTableView(nvr.id, self)
  dialogView.closeButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
  dialogView.cancelButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
  dialogView.connect(:onsubmit, self, "html", submit: true, id: @oid)
  return dialogView.html()
end
rpcAction(ids: nil, action: nil) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 51
def rpcAction(ids: nil, action: nil)
  return if ids.empty?
  odb = Marshal.load(Marshal.dump(@odb))
  odb.findBy("id in (#{ids.join(',')})")
  eval("odb.#{action}(ids)")
end
rpcHtml(args) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 47
def rpcHtml(args)
  return self.html(args)
end
rpcPageSize() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 35
def rpcPageSize
  return @pageSize
end
rpcPages() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 38
def rpcPages
  return 1 if @pageSize == "all"
  result = hdb(@connectionName).select("count(*)").from(@modelName).where(@filter).orderBy(nil).direction(nil).execute()

  rows = result.data(0, "count").to_i
  pages = rows / @pageSize.to_i 
  pages += 1 if (rows % @pageSize.to_i > 0)
  return pages;
end
setAddRowButton() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 75
def setAddRowButton()
  
  tr = self.appendRow()
  td0 = tr.getChilds()[0]
  td0.setInnerHTML("")
  td0 << HWidget.new("a", "Add Row")
  td0.connect(:onclick, self, "newRecord", getElem: "body", mode: "add", id: @oid)

end
setControlPanel() click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 58
def setControlPanel()
  
  tr = self.appendRow(@headerTr)
  prevTd = HWidget.new("th")
  prevTd.setInnerHTML("Prev")
  # if arr is an array of integers then a.map!(&to_s) converts each number to string
  prevTd.connect(:onclick, self, "html", id: @oid, 
                 args: {page: [0, @page - 1].max})
  nextTd = HWidget.new("th")
  nextTd.setInnerHTML("Next")
  nextTd.connect(:onclick, self, "html", id: @oid, 
                 args: {page: @page + 1})
  tr.getChilds()[-2] = prevTd
  tr.getChilds()[-1] = nextTd

end
setTableHeaders() click to toggle source
Calls superclass method HTableView#setTableHeaders
# File lib/hwidgets/hdbtableview.rb, line 116
def setTableHeaders()

  super()

end
setTd(td, fieldName, value, row) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 106
def setTd(td, fieldName, value, row)
  td.set(name: "#{@fieldTable.tableName}[#{row}][#{fieldName}]", overwrite: true)
end
setThSlots(th, fieldName) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 85
def setThSlots(th, fieldName)
 
  sortDirection = (@sortDirection == "asc") ? "desc" : "asc"
  th.connect(:onclick, self, "html", id: @oid, 
             args: {sortField: fieldName, sortDirection: sortDirection},
             hotLog: "sort #{fieldName}")

end
setTrSlots(tr, row) click to toggle source
# File lib/hwidgets/hdbtableview.rb, line 94
def setTrSlots(tr, row)

  tr.set(value: "#id", tabindex: "0")
  tr.connect(:ondblclick, self, "doubleClick", attributes: "id", getElem: "body", mode: "add", id: @oid, after:'loadComboBox()');
  tr.addJsFunction(:onclick,      :'hdbTableView.click',       :event, @oid)
  tr.addJsFunction(:oncontextmenu,  :'hdbTableView.rightClick',  :event, @oid)
  tr.addJsFunction(:onkeypress,   :'hdbTableView.keyPress',    :event, @oid)
  cancKey = 46
  tr.connect(:onkeypress, self, "deleteRecord", attributes: "id", KeyEvent: :event, keyCode: cancKey, id: @oid)
  
end