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