Class: HDBTableView

Inherits:
HTableView show all
Defined in:
lib/hwidgets/hdbtableview.rb

Overview

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

Instance Attribute Summary collapse

Attributes inherited from HTableView

#fieldTable, #headerTr, #mainStatement, #summaryTr, #td, #th, #totalizerTr, #tr

Attributes inherited from HWidget

#tag

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from HTableView

#appendRow, #buildTag, niceTable, niceTable2, #setInsideHTML, #setSummary, #setTotalizer, test, test2, test3, test4

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, test, #unset, widgetSpace

Constructor Details

#initialize(moduleName: nil, modelName: nil, filter: "true", sortField: "id", sortDirection: "asc", pageSize: 'all', page: 0, odb: nil, poid: nil, dialogLevel: 0, connectionName: "default") ⇒ HDBTableView

Returns a new instance of HDBTableView.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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

Instance Attribute Details

#dialogLevelObject (readonly)

Returns the value of attribute dialogLevel.



9
10
11
# File 'lib/hwidgets/hdbtableview.rb', line 9

def dialogLevel
  @dialogLevel
end

#modelNameObject (readonly)

Returns the value of attribute modelName.



9
10
11
# File 'lib/hwidgets/hdbtableview.rb', line 9

def modelName
  @modelName
end

#moduleNameObject (readonly)

Returns the value of attribute moduleName.



9
10
11
# File 'lib/hwidgets/hdbtableview.rb', line 9

def moduleName
  @moduleName
end

#odbObject (readonly)

Returns the value of attribute odb.



9
10
11
# File 'lib/hwidgets/hdbtableview.rb', line 9

def odb
  @odb
end

#oidObject (readonly)

Returns the value of attribute oid.



9
10
11
# File 'lib/hwidgets/hdbtableview.rb', line 9

def oid
  @oid
end

Class Method Details

.html(moduleName: nil, modelName: nil, odb: nil, dialogLevel: 0, connectionName: "default", filter: "true", sortField: "id", sortDirection: "asc", pageSize: "5", page: 0) ⇒ Object



205
206
207
208
209
210
211
# 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

.tableViewDecorator(tableView) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# 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

Instance Method Details

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



110
111
112
113
114
# 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

#closeButtonObject



122
123
124
125
126
# 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) ⇒ Object



145
146
147
148
149
150
151
152
153
# 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) ⇒ Object



128
129
130
131
132
133
134
# 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) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# 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

#newRecordObject



136
137
138
139
140
141
142
143
# 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) ⇒ Object



51
52
53
54
55
56
# 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) ⇒ Object



47
48
49
# File 'lib/hwidgets/hdbtableview.rb', line 47

def rpcHtml(args)
  return self.html(args)
end

#rpcPagesObject



38
39
40
41
42
43
44
45
46
# 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

#rpcPageSizeObject



35
36
37
# File 'lib/hwidgets/hdbtableview.rb', line 35

def rpcPageSize
  return @pageSize
end

#setAddRowButtonObject



75
76
77
78
79
80
81
82
83
# 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

#setControlPanelObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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

#setTableHeadersObject



116
117
118
119
120
# File 'lib/hwidgets/hdbtableview.rb', line 116

def setTableHeaders()

  super()

end

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



106
107
108
# 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) ⇒ Object



85
86
87
88
89
90
91
92
# 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) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
# 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