Repository navigation
Expand file tree
/
Copy pathtable.nim
More file actions
93 lines (74 loc) · 2.62 KB
/
Copy pathtable.nim
File metadata and controls
93 lines (74 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import std/random
import std/sugar
from uing/rawui import nil
import uing
randomize()
const
NUM_COLUMNS = 7
NUM_ROWS = 10
COLUMN_ID = 0
COLUMN_FIRST_NAME = 1
COLUMN_LAST_NAME = 2
COLUMN_ADRESS = 3
COLUMN_PROCESS = 4
COLUMN_PASSED = 5
COLUMN_ACTION = 6
let progress = collect:
for row in 0..<NUM_ROWS:
rand(-1..100)
proc modelNumColumns(mh: ptr TableModelHandler, m: ptr rawui.TableModel): cint {.cdecl.} = NUM_COLUMNS
proc modelNumRows(mh: ptr TableModelHandler, m: ptr rawui.TableModel): cint {.cdecl.} = NUM_ROWS
proc modelColumnType(mh: ptr TableModelHandler, m: ptr rawui.TableModel, col: cint): TableValueType {.cdecl.} =
if col in [COLUMN_PROCESS, COLUMN_PASSED]:
result = TableValueTypeInt
else:
result = TableValueTypeString
proc modelCellValue(mh: ptr TableModelHandler, m: ptr rawui.TableModel, row, col: cint): ptr rawui.TableValue {.cdecl.} =
case col:
of COLUMN_ID:
result = newTableValue($(row+1)).impl
of COLUMN_PROCESS:
result = newTableValue(progress[row]).impl
of COLUMN_PASSED:
result = newTableValue(progress[row] > 60).impl
of COLUMN_ACTION:
result = newTableValue("Apply").impl
else:
result = newTableValue("row " & $row & " x col " & $col).impl
proc modelSetCellValue(mh: ptr TableModelHandler, m: ptr rawui.TableModel, row, col: cint, val: ptr rawui.TableValue) {.cdecl.} =
if col == COLUMN_ACTION:
rawui.tableModelRowChanged(m, row)
proc main() =
var mainwin: Window
let menu = newMenu("File")
menu.addQuitItem(
proc(): bool =
mainwin.destroy()
return true
)
mainwin = newWindow("Table", 640, 480, true)
mainwin.margined = true
let box = newVerticalBox(true)
mainwin.child = box
var mh: TableModelHandler
mh.numColumns = modelNumColumns
mh.columnType = modelColumnType
mh.numRows = modelNumRows
mh.cellValue = modelCellValue
mh.setCellValue = modelSetCellValue
var p: TableParams
p.model = newTableModel(addr mh).impl
p.rowBackgroundColorModelColumn = -1
let table = newTable(addr p)
table.addTextColumn("ID", COLUMN_ID, TableModelColumnNeverEditable)
table.addTextColumn("First Name", COLUMN_FIRST_NAME, TableModelColumnAlwaysEditable)
table.addTextColumn("Last Name", COLUMN_LAST_NAME, TableModelColumnAlwaysEditable)
table.addTextColumn("Address", COLUMN_ADRESS, TableModelColumnAlwaysEditable)
table.addProgressBarColumn("Progress", COLUMN_PROCESS)
table.addCheckboxColumn("Passed", COLUMN_PASSED, TableModelColumnAlwaysEditable)
table.addButtonColumn("Action", COLUMN_ACTION, TableModelColumnAlwaysEditable)
box.add table, true
show mainwin
mainLoop()
init()
main()