Skip to content

Commit aaab5db

Browse files
authored
Fix #34 allowing compilation with ORC or ARC (#37)
1 parent 2e4182d commit aaab5db

22 files changed

+273
-206
lines changed

examples/abstractitemmodel/mylistmodel.nim

+7-5
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@ QtObject:
99
MyListModel* = ref object of QAbstractListModel
1010
names*: seq[string]
1111

12+
proc delete(self: MyListModel)
13+
proc setup(self: MyListModel)
14+
proc newMyListModel*(): MyListModel =
15+
new(result, delete)
16+
result.names = @["John", "Max", "Paul", "Anna"]
17+
result.setup
18+
1219
proc delete(self: MyListModel) =
1320
self.QAbstractListModel.delete
1421

1522
proc setup(self: MyListModel) =
1623
self.QAbstractListModel.setup
1724

18-
proc newMyListModel*(): MyListModel =
19-
new(result, delete)
20-
result.names = @["John", "Max", "Paul", "Anna"]
21-
result.setup
22-
2325
method rowCount(self: MyListModel, index: QModelIndex = nil): int =
2426
return self.names.len
2527

examples/charts/mylistmodel.nim

+16-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import NimQml, Tables, random
1+
import NimQml, Tables, std/random
22

33
type
44
Point = object
@@ -12,11 +12,11 @@ QtObject:
1212
maxX: int
1313
maxY: int
1414

15-
proc delete(self: MyListModel) =
16-
self.QAbstractTableModel.delete
17-
18-
proc setup(self: MyListModel) =
19-
self.QAbstractTableModel.setup
15+
proc delete(self: MyListModel)
16+
proc setup(self: MyListModel)
17+
proc newMyListModel*(): MyListModel =
18+
new(result, delete)
19+
result.setup
2020

2121
method rowCount(self: MyListModel, index: QModelIndex = nil): int =
2222
return self.points.len
@@ -57,7 +57,7 @@ QtObject:
5757
let pos = self.points.len
5858
self.beginInsertRows(newQModelIndex(), pos, pos)
5959
let x = self.maxX + 1
60-
let y = random(50)
60+
let y = rand(50)
6161
if x > self.maxX:
6262
self.maxX = x
6363
self.maxXChanged(x)
@@ -67,10 +67,12 @@ QtObject:
6767
self.points.add(Point(x: x, y: y))
6868
self.endInsertRows()
6969

70-
proc newMyListModel*(): MyListModel =
71-
new(result, delete)
72-
result.setup
73-
result.points = @[]
74-
result.maxX = 0
75-
result.maxY = 50
76-
result.addRandomPoint()
70+
proc delete(self: MyListModel) =
71+
self.QAbstractTableModel.delete
72+
73+
proc setup(self: MyListModel) =
74+
self.QAbstractTableModel.setup
75+
self.points = @[]
76+
self.maxX = 0
77+
self.maxY = 50
78+
self.addRandomPoint()

examples/connections/main.nim

+7-5
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@ QtObject:
55
type Contact* = ref object of QObject
66
name: string
77

8+
proc delete*(self: Contact)
9+
proc setup(self: Contact)
10+
proc newContact(): Contact =
11+
new(result, delete)
12+
result.name = ""
13+
result.setup
14+
815
proc delete*(self: Contact) =
916
self.QObject.delete
1017

1118
proc setup(self: Contact) =
1219
self.QObject.setup
1320

14-
proc newContact(): Contact =
15-
new(result, delete)
16-
result.name = ""
17-
result.setup
18-
1921
proc name*(self: Contact): string {.slot.} =
2022
result = self.name
2123

examples/contactapp/contactlist.nim

+10-8
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,22 @@ QtObject:
1010
ContactList* = ref object of QAbstractListModel
1111
contacts*: seq[Contact]
1212

13+
proc delete(self: ContactList)
14+
proc setup(self: ContactList)
15+
proc newContactList*(): ContactList =
16+
new(result, delete)
17+
result.contacts = @[]
18+
result.setup
19+
20+
proc setup(self: ContactList) =
21+
self.QAbstractListModel.setup
22+
1323
proc delete(self: ContactList) =
1424
self.QAbstractListModel.delete
1525
for contact in self.contacts:
1626
contact.delete
1727
self.contacts = @[]
1828

19-
proc setup(self: ContactList) =
20-
self.QAbstractListModel.setup
21-
22-
proc newContactList*(): ContactList =
23-
new(result, delete)
24-
result.contacts = @[]
25-
result.setup
26-
2729
method rowCount(self: ContactList, index: QModelIndex = nil): int =
2830
return self.contacts.len
2931

examples/slotsandproperties/contact.nim

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,19 @@ QtObject:
44
type Contact* = ref object of QObject
55
m_name: string
66

7+
proc delete*(self: Contact)
8+
proc setup(self: Contact)
9+
proc newContact*(): Contact =
10+
new(result, delete)
11+
result.m_name = "InitialName"
12+
result.setup
13+
714
proc delete*(self: Contact) =
815
self.QObject.delete
916

1017
proc setup(self: Contact) =
1118
self.QObject.setup
1219

13-
proc newContact*(): Contact =
14-
new(result, delete)
15-
result.m_name = "InitialName"
16-
result.setup
17-
1820
proc getName*(self: Contact): string {.slot.} =
1921
result = self.m_name
2022

src/nimqml.nim

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import locks
2+
import tables
3+
14
## NimQml aims to provide binding to the QML for the Nim programming language
25

36
template debugMsg(message: string) =
@@ -10,6 +13,7 @@ template debugMsg(typeName: string, procName: string) =
1013
include "nimqml/private/nimqmlmacros.nim"
1114
include "nimqml/private/dotherside.nim"
1215
include "nimqml/private/nimqmltypes.nim"
16+
include "nimqml/private/constructors.nim"
1317
include "nimqml/private/qvariant.nim"
1418
include "nimqml/private/lambdainvoker.nim"
1519
include "nimqml/private/qmetaobjectconnection.nim"

src/nimqml/private/constructors.nim

+207
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
############# QObject #############
2+
proc setup*(self: QObject)
3+
proc delete*(self: QObject) =
4+
debugMsg("QObject", "delete")
5+
## Delete a QObject
6+
if not self.owner or self.vptr.isNil:
7+
return
8+
dos_qobject_delete(self.vptr)
9+
self.vptr.resetToNil
10+
11+
proc newQObject*(): QObject =
12+
## Return a new QObject
13+
new(result, delete)
14+
result.setup()
15+
16+
############# QAbstractItemModel #############
17+
proc setup*(self: QAbstractItemModel)
18+
proc delete*(self: QAbstractItemModel)
19+
proc newQAbstractItemModel*(): QAbstractItemModel =
20+
## Return a new QAbstractItemModel
21+
debugMsg("QAbstractItemModel", "new")
22+
new(result, delete)
23+
result.setup()
24+
25+
############# QAbstractListModel #############
26+
proc setup*(self: QAbstractListModel)
27+
proc delete*(self: QAbstractListModel)
28+
proc newQAbstractListModel*(): QAbstractListModel =
29+
## Return a new QAbstractListModel
30+
debugMsg("QAbstractListModel", "new")
31+
new(result, delete)
32+
result.setup()
33+
34+
############# QAbstractTableModel #############
35+
proc setup*(self: QAbstractTableModel)
36+
proc delete*(self: QAbstractTableModel)
37+
proc newQAbstractTableModel*(): QAbstractTableModel =
38+
## Return a new QAbstractTableModel
39+
debugMsg("QAbstractTableModel", "new")
40+
new(result, delete)
41+
result.setup()
42+
43+
############# QVariant #############
44+
proc setup*(variant: QVariant)
45+
proc setup*(variant: QVariant, value: int)
46+
proc setup*(variant: QVariant, value: bool)
47+
proc setup*(variant: QVariant, value: string)
48+
proc setup*(variant: QVariant, value: QObject)
49+
proc setup*(variant: QVariant, value: DosQVariant, takeOwnership: Ownership)
50+
proc setup*(variant: QVariant, value: cfloat)
51+
proc setup*(variant: QVariant, value: cdouble)
52+
proc setup*(variant: QVariant, value: QVariant)
53+
proc delete*(variant: QVariant)
54+
55+
proc newQVariant*(): QVariant =
56+
## Return a new QVariant
57+
new(result, delete)
58+
result.setup()
59+
60+
proc newQVariant*(value: int): QVariant =
61+
## Return a new QVariant given a cint
62+
new(result, delete)
63+
result.setup(value)
64+
65+
proc newQVariant*(value: bool): QVariant =
66+
## Return a new QVariant given a bool
67+
new(result, delete)
68+
result.setup(value)
69+
70+
proc newQVariant*(value: string): QVariant =
71+
## Return a new QVariant given a string
72+
new(result, delete)
73+
result.setup(value)
74+
75+
proc newQVariant*(value: QObject): QVariant =
76+
## Return a new QVariant given a QObject
77+
new(result, delete)
78+
result.setup(value)
79+
80+
proc newQVariant(value: DosQVariant, takeOwnership: Ownership): QVariant =
81+
## Return a new QVariant given a raw QVariant pointer
82+
new(result, delete)
83+
result.setup(value, takeOwnership)
84+
85+
proc newQVariant*(value: QVariant): QVariant =
86+
## Return a new QVariant given another QVariant
87+
new(result, delete)
88+
result.setup(value)
89+
90+
proc newQVariant*(value: cfloat): QVariant =
91+
## Return a new QVariant given a float
92+
new(result, delete)
93+
result.setup(value)
94+
95+
############# QUrl #############
96+
proc setup*(self: QUrl, url: string, mode: QUrlParsingMode)
97+
proc delete*(self: QUrl)
98+
proc newQUrl*(url: string, mode: QUrlParsingMode = QUrlParsingMode.Tolerant): QUrl =
99+
## Create a new QUrl
100+
new(result, delete)
101+
result.setup(url, mode)
102+
103+
############# QQuickView #############
104+
proc setup*(self: QQuickView)
105+
proc delete*(self: QQuickView)
106+
proc newQQuickView*(): QQuickView =
107+
## Return a new QQuickView
108+
new(result, delete)
109+
result.setup()
110+
111+
############# QQmlApplicationEngine #############
112+
proc setup*(self: QQmlApplicationEngine)
113+
proc delete*(self: QQmlApplicationEngine)
114+
proc newQQmlApplicationEngine*(): QQmlApplicationEngine =
115+
## Return a new QQmlApplicationEngine
116+
new(result, delete)
117+
result.setup()
118+
119+
############# QModelIndex #############
120+
proc setup*(self: QModelIndex)
121+
proc setup(self: QModelIndex, other: DosQModelIndex, takeOwnership: Ownership)
122+
proc delete*(self: QModelIndex)
123+
124+
proc newQModelIndex*(): QModelIndex =
125+
## Return a new QModelIndex
126+
new(result, delete)
127+
result.setup()
128+
129+
proc newQModelIndex(vptr: DosQModelIndex, takeOwnership: Ownership): QModelIndex =
130+
## Return a new QModelIndex given a raw index
131+
new(result, delete)
132+
result.setup(vptr, takeOwnership)
133+
134+
############# QMetaObjectConnection #############
135+
proc delete*(self: QMetaObjectConnection)
136+
proc new*(typ: type QMetaObjectConnection, vptr: DosQMetaObjectConnection): QMetaObjectConnection =
137+
new(result, delete)
138+
result.vptr = vptr
139+
140+
############# QMetaObject #############
141+
proc setup(superClass: QMetaObject,
142+
className: string,
143+
signals: seq[SignalDefinition],
144+
slots: seq[SlotDefinition],
145+
properties: seq[PropertyDefinition]): DosQMetaObject
146+
proc delete*(metaObject: QMetaObject)
147+
148+
proc newQObjectMetaObject*(): QMetaObject =
149+
## Create the QMetaObject of QObject
150+
debugMsg("QMetaObject", "newQObjectMetaObject")
151+
new(result, delete)
152+
result.vptr = dos_qobject_qmetaobject()
153+
154+
proc newQAbstractItemModelMetaObject*(): QMetaObject =
155+
## Create the QMetaObject of QAbstractItemModel
156+
debugMsg("QMetaObject", "newQAbstractItemModelMetaObject")
157+
new(result, delete)
158+
result.vptr = dos_qabstractitemmodel_qmetaobject()
159+
160+
proc newQAbstractListModelMetaObject*(): QMetaObject =
161+
## Create the QMetaObject of QAbstractListModel
162+
debugMsg("QMetaObject", "newQAbstractListModelMetaObject")
163+
new(result, delete)
164+
result.vptr = dos_qabstractlistmodel_qmetaobject()
165+
166+
proc newQAbstractTableModelMetaObject*(): QMetaObject =
167+
## Create the QMetaObject of QAbstractTableModel
168+
debugMsg("QMetaObject", "newQAbstractItemTableMetaObject")
169+
new(result, delete)
170+
result.vptr = dos_qabstracttablemodel_qmetaobject()
171+
172+
proc newQMetaObject*(superClass: QMetaObject, className: string,
173+
signals: seq[SignalDefinition],
174+
slots: seq[SlotDefinition],
175+
properties: seq[PropertyDefinition]): QMetaObject =
176+
## Create a new QMetaObject
177+
debugMsg("QMetaObject", "newQMetaObject" & className)
178+
new(result, delete)
179+
result.signals = signals
180+
result.slots = slots
181+
result.properties = properties
182+
result.vptr = setup(superClass, className, signals, slots, properties)
183+
184+
############# QHashIntByteArray #############
185+
proc setup*(self: QHashIntByteArray)
186+
proc delete*(self: QHashIntByteArray)
187+
proc newQHashIntQByteArray*(): QHashIntByteArray =
188+
## Create a new QHashIntQByteArray
189+
new(result, delete)
190+
result.setup()
191+
192+
############# QGuiApplication #############
193+
proc setup*(self: QGuiApplication)
194+
proc delete*(self: QGuiApplication)
195+
proc newQGuiApplication*(): QGuiApplication =
196+
## Return a new QApplication
197+
new(result, delete)
198+
result.setup()
199+
200+
############# LambdaInvoker #############
201+
proc new(typ: type LambdaInvoker): LambdaInvoker =
202+
## Create the lambda invoker
203+
new(result)
204+
result.id = 0
205+
result.lock.initLock()
206+
result.lambdas = initTable[int, LambdaInvokerProc]()
207+

0 commit comments

Comments
 (0)