indent the base list
[lqt.git] / test / t7.lua
blob02ca689c5cb5fefb7b59883d63133676515735a0
1 #!/usr/bin/lua
3 require'qtcore'
4 require'qtgui'
6 local add_method = function(qobj, qname, signature, func)
7 local stringdata = qobj['Lqt MetaStringData']
8 local data = qobj['Lqt MetaData']
9 local slots = qobj['Lqt Slots']
10 local sigs = qobj['Lqt Signatures']
11 if stringdata==nil then
12 --print'adding a slot!'
13 --initialize
14 stringdata = qname..'\0'
15 data = setmetatable({}, {__index=table})
16 data:insert(1) -- revision
17 data:insert(0) -- class name
18 data:insert(0) -- class info (1)
19 data:insert(0) -- class info (2)
20 data:insert(0) -- number of methods
21 data:insert(10) -- beginning of methods
22 data:insert(0) -- number of properties
23 data:insert(0) -- beginning of properties
24 data:insert(0) -- number of enums/sets
25 data:insert(0) -- beginning of enums/sets
26 slots = setmetatable({}, {__index=table})
27 sigs = setmetatable({}, {__index=table})
28 end
29 local name, args = string.match(signature, '^(.*)(%b())$')
30 local arg_list = ''
31 if args=='()' then
32 arg_list=''
33 else
34 local argnum = select(2, string.gsub(args, '.+,', ','))+1
35 for i = 1, argnum do
36 if i>1 then arg_list=arg_list..', ' end
37 arg_list = arg_list .. 'arg' .. i
38 end
39 end
40 --print(arg_list, signature)
41 local sig, params = #stringdata + #arg_list + 1, #stringdata -- , ty, tag, flags
42 stringdata = stringdata .. arg_list .. '\0' .. signature .. '\0'
43 data:insert(sig) -- print(sig, string.byte(stringdata, sig, sig+4), string.char(string.byte(stringdata, sig+1, sig+6)))
44 data:insert(params) -- print(params, string.char(string.byte(stringdata, params+1, params+10)))
45 data:insert(#stringdata-1) -- print(#stringdata-1, (string.byte(stringdata, #stringdata)))
46 data:insert(#stringdata-1) -- print(#stringdata-1, (string.byte(stringdata, #stringdata)))
47 if func then
48 data:insert(0x0a)
49 slots:insert(func)
50 sigs:insert('__slot'..signature:match'%b()')
51 else
52 data:insert(0x05)
53 slots:insert(false)
54 sigs:insert(false)
55 end
56 data[5] = data[5] + 1
57 qobj['Lqt MetaStringData'] = stringdata
58 qobj['Lqt MetaData'] = data
59 qobj['Lqt Slots'] = slots
60 qobj['Lqt Signatures'] = sigs
61 end
63 local LCD_Range = function(...)
64 local this = QWidget.new(...)
65 --print(this:metaObject():className(), this:metaObject():methodCount())
66 --print(this:metaObject():className(), this:metaObject():methodCount())
68 local lcd = QLCDNumber.new()
69 lcd:setSegmentStyle'Filled'
71 local slider = QSlider.new'Horizontal'
72 slider:setRange(0, 99)
73 slider:setValue(0)
75 this:__addmethod("LuaLCD", 'valueChanged(int)')
76 this:__addmethod("LuaLCD", 'setValue(int)', function(_, val) slider:setValue(val) end)
77 QObject.connect(slider, '2valueChanged(int)', lcd, '1display(int)')
78 QObject.connect(slider, '2valueChanged(int)', this, '2valueChanged(int)')
80 local layout = QVBoxLayout.new()
81 layout:addWidget(lcd)
82 layout:addWidget(slider)
83 this:setLayout(layout)
84 return this
85 end
87 local new_MyWidget = function(...)
88 local this = QWidget.new(...)
90 local quit = QPushButton.new(QString.new'Quit')
91 quit:setFont(QFont.new(QString.new'Times', 18, 75))
93 QObject.connect(quit, '2clicked()', this, '1close()')
95 local grid = QGridLayout.new()
96 local previousRange = nil
97 for row = 1, 3 do
98 for column = 1, 3 do
99 local lcdrange = LCD_Range()
100 grid:addWidget(lcdrange, row, column)
101 if previousRange then
102 QObject.connect(lcdrange, '2valueChanged(int)',
103 previousRange, '1setValue(int)')
105 previousRange = lcdrange
109 local layout = QVBoxLayout.new()
110 layout:addWidget(quit)
111 layout:addLayout(grid)
112 this:setLayout(layout)
113 return this
116 app = QApplication.new(1 + select('#', ...), {arg[0], ...})
117 app.__gc = app.delete -- take ownership of object
119 widget = new_MyWidget()
120 widget:show()
122 app.exec()