Synched with the qaim changes

This commit is contained in:
Filippo Cucchetto 2017-04-09 11:57:24 +02:00
parent f0a32cbeb1
commit 9438c9d038
9 changed files with 224 additions and 30 deletions

View File

@ -6,23 +6,20 @@ type
QtObject:
type
MyListModel* = ref object of QAbstractItemModel
MyListModel* = ref object of QAbstractListModel
names*: seq[string]
proc delete(self: MyListModel) =
self.QAbstractItemModel.delete
self.QAbstractListModel.delete
proc setup(self: MyListModel) =
self.QAbstractItemModel.setup
self.QAbstractListModel.setup
proc newMyListModel*(): MyListModel =
new(result, delete)
result.names = @["John", "Max", "Paul", "Anna"]
result.setup
method columnCount(self: MyListModel, index: QModelIndex = nil): int =
return 1
method rowCount(self: MyListModel, index: QModelIndex = nil): int =
return self.names.len

View File

@ -7,17 +7,17 @@ type
QtObject:
type
ContactList* = ref object of QAbstractItemModel
ContactList* = ref object of QAbstractListModel
contacts*: seq[Contact]
proc delete(self: ContactList) =
self.QAbstractItemModel.delete
self.QAbstractListModel.delete
for contact in self.contacts:
contact.delete
self.contacts = @[]
proc setup(self: ContactList) =
self.QAbstractItemModel.setup
self.QAbstractListModel.setup
proc newContactList*(): ContactList =
new(result, delete)

View File

@ -24,6 +24,8 @@ include private/qquickview.nim
include private/qhashintbytearray.nim
include private/qmodelindex.nim
include private/qabstractitemmodel.nim
include private/qabstractlistmodel.nim
include private/qabstracttablemodel.nim
include private/qresource.nim
include private/qdeclarative.nim
include private/nimqmlmacros.nim

View File

@ -12,6 +12,8 @@ proc getDllName: string =
type
NimQObject = pointer
NimQAbstractItemModel = pointer
NimQAbstractListModel = pointer
NimQAbstractTableModel = pointer
DosQMetaObject = distinct pointer
DosQObject = distinct pointer
DosQObjectWrapper = distinct pointer
@ -26,6 +28,8 @@ type
DosQHashIntByteArray = distinct pointer
DosQModelIndex = distinct pointer
DosQAbstractItemModel = distinct pointer
DosQAbstractTableModel = distinct pointer
DosQAbstractListModel = distinct pointer
DosParameterDefinition = object
name: cstring
@ -75,15 +79,33 @@ type
DosQObjectCallBack = proc(nimobject: NimQObject, slotName: DosQVariant, numArguments: cint, arguments: ptr DosQVariantArray) {.cdecl.}
DosRowCountCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, result: var cint) {.cdecl.}
DosColumnCountCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, result: var cint) {.cdecl.}
DosDataCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, role: cint, result: DosQVariant) {.cdecl.}
DosSetDataCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, value: DosQVariant, role: cint, result: var bool) {.cdecl.}
DosRoleNamesCallback = proc(nimmodel: NimQAbstractItemModel, result: DosQHashIntByteArray) {.cdecl.}
DosFlagsCallback = proc(nimmodel: NimQAbstractItemModel, index: DosQModelIndex, result: var cint) {.cdecl.}
DosHeaderDataCallback = proc(nimmodel: NimQAbstractItemModel, section: cint, orientation: cint, role: cint, result: DosQVariant) {.cdecl.}
DosIndexCallback = proc(nimmodel: NimQAbstractItemModel, row: cint, column: cint, parent: DosQModelIndex, result: DosQModelIndex) {.cdecl.}
DosParentCallback = proc(nimmodel: NimQAbstractItemModel, child: DosQModelIndex, result: DosQModelIndex) {.cdecl.}
DosRowCountCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, result: var cint) {.cdecl.}
DosColumnCountCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, result: var cint) {.cdecl.}
DosDataCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, role: cint, result: DosQVariant) {.cdecl.}
DosSetDataCallback = proc(nimmodel: NimQAbstractItemModel, rawIndex: DosQModelIndex, value: DosQVariant, role: cint, result: var bool) {.cdecl.}
DosRoleNamesCallback = proc(nimmodel: NimQAbstractItemModel, result: DosQHashIntByteArray) {.cdecl.}
DosFlagsCallback = proc(nimmodel: NimQAbstractItemModel, index: DosQModelIndex, result: var cint) {.cdecl.}
DosHeaderDataCallback = proc(nimmodel: NimQAbstractItemModel, section: cint, orientation: cint, role: cint, result: DosQVariant) {.cdecl.}
DosIndexCallback = proc(nimmodel: NimQAbstractItemModel, row: cint, column: cint, parent: DosQModelIndex, result: DosQModelIndex) {.cdecl.}
DosParentCallback = proc(nimmodel: NimQAbstractItemModel, child: DosQModelIndex, result: DosQModelIndex) {.cdecl.}
DosHasChildrenCallback = proc(nimmodel: NimQAbstractItemModel, parent: DosQModelIndex, result: var bool) {.cdecl.}
DosCanFetchMoreCallback = proc(nimmodel: NimQAbstractItemModel, parent: DosQModelIndex, result: var bool) {.cdecl.}
DosFetchMoreCallback = proc(nimmodel: NimQAbstractItemModel, parent: DosQModelIndex) {.cdecl.}
DosQAbstractItemModelCallbacks = object
rowCount: DosRowCountCallback
columnCount: DosColumnCountCallback
data: DosDataCallback
setData: DosSetDataCallback
roleNames: DosRoleNamesCallback
flags: DosFlagsCallback
headerData: DosHeaderDataCallback
index: DosIndexCallback
parent: DosParentCallback
hasChildren: DosHasChildrenCallback
canFetchMore: DosCanFetchMoreCallback
fetchMore: DosFetchMoreCallback
# Conversion
proc resetToNil[T](x: var T) = x = nil.pointer.T
@ -204,15 +226,7 @@ proc dos_qmodelindex_assign(leftSide: DosQModelIndex, rightSide: DosQModelIndex)
proc dos_qabstractitemmodel_create(modelPtr: NimQAbstractItemModel,
metaObject: DosQMetaObject,
qobjectCallback: DosQObjectCallBack,
rowCountCallback: DosRowCountCallback,
columnCountCallback: DosColumnCountCallback,
dataCallback: DosDataCallback,
setDataCallback: DosSetDataCallBack,
roleNamesCallback: DosRoleNamesCallback,
flagsCallback: DosFlagsCallback,
headerDataCallback: DosHeaderDataCallback,
indexCallback: DosIndexCallback,
parentCallback: DosParentCallback): DosQAbstractItemModel {.cdecl, dynlib: getDllName(), importc.}
qaimCallbacks: DosQAbstractItemModelCallbacks): DosQAbstractItemModel {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractitemmodel_beginInsertRows(model: DosQAbstractItemModel,
parentIndex: DosQModelIndex,
@ -242,6 +256,10 @@ proc dos_qabstractitemmodel_dataChanged(model: DosQAbstractItemModel,
rolesArrayPtr: ptr cint,
rolesArrayLength: cint) {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractitemmodel_createIndex(model: DosQAbstractItemModel, row: cint, column: cint, data: pointer): DosQModelIndex {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractitemmodel_hasChildren(model: DosQAbstractItemModel, parent: DosQModelIndex): bool {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractitemmodel_canFetchMore(model: DosQAbstractItemModel, parent: DosQModelIndex): bool {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractitemmodel_fetchMore(model: DosQAbstractItemModel, parent: DosQModelIndex) {.cdecl, dynlib: getDllName(), importc.}
# QResource
proc dos_qresource_register(filename: cstring) {.cdecl, dynlib: getDllName(), importc.}
@ -249,3 +267,23 @@ proc dos_qresource_register(filename: cstring) {.cdecl, dynlib: getDllName(), im
# QDeclarative
proc dos_qdeclarative_qmlregistertype(value: ptr DosQmlRegisterType): cint {.cdecl, dynlib: getDllName(), importc.}
proc dos_qdeclarative_qmlregistersingletontype(value: ptr DosQmlRegisterType): cint {.cdecl, dynlib: getDllName(), importc.}
# QAbstractListModel
proc dos_qabstractlistmodel_qmetaobject(): DosQMetaObject {.cdecl dynlib: getDllName(), importc.}
proc dos_qabstractlistmodel_create(modelPtr: NimQAbstractListModel,
metaObject: DosQMetaObject,
qobjectCallback: DosQObjectCallBack,
qaimCallbacks: DosQAbstractItemModelCallbacks): DosQAbstractListModel {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractlistmodel_columnCount(modelPtr: DosQAbstractListModel, index: DosQModelIndex): cint {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractlistmodel_parent(modelPtr: DosQAbstractListModel, index: DosQModelIndex): DosQModelIndex {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstractlistmodel_index(modelPtr: DosQAbstractListModel, row: cint, column: cint, parent: DosQModelIndex): DosQModelIndex {.cdecl, dynlib: getDllName(), importc.}
# QAbstractTableModel
proc dos_qabstracttablemodel_qmetaobject(): DosQMetaObject {.cdecl dynlib: getDllName(), importc.}
proc dos_qabstracttablemodel_create(modelPtr: NimQAbstractTableModel,
metaObject: DosQMetaObject,
qobjectCallback: DosQObjectCallBack,
qaimCallbacks: DosQAbstractItemModelCallbacks): DosQAbstractTableModel {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstracttablemodel_parent(modelPtr: DosQAbstractTableModel, index: DosQModelIndex): DosQModelIndex {.cdecl, dynlib: getDllName(), importc.}
proc dos_qabstracttablemodel_index(modelPtr: DosQAbstractTableModel, row: cint, column: cint, parent: DosQModelIndex): DosQModelIndex {.cdecl, dynlib: getDllName(), importc.}

View File

@ -7,6 +7,12 @@ type
QAbstractItemModel* = ref object of QObject ## \
## A QAbstractItemModel
QAbstractListModel* = ref object of QAbstractItemModel ## \
## A QAbstractListModel
QAbstractTableModel* = ref object of QAbstractItemModel ## \
## A QAbstractTableModel
QVariant* = ref object of RootObj ## \
## A QVariant
vptr: DosQVariant

View File

@ -115,16 +115,51 @@ proc parentCallback(modelPtr: pointer, child: DosQModelIndex, result: DosQModelI
let index = model.parent(newQModelIndex(child, Ownership.Clone))
dos_qmodelindex_assign(result, index.vptr)
method hasChildren(self: QAbstractItemModel, parent: QModelIndex): bool {.base.} =
return dos_qabstractitemmodel_hasChildren(self.vptr.DosQAbstractItemModel, parent.vptr.DosQModelIndex)
proc hasChildrenCallback(modelPtr: pointer, parent: DosQModelIndex, result: var bool) {.cdecl, exportc.} =
let model = cast[QAbstractItemModel](modelPtr)
result = model.hasChildren(newQModelIndex(parent, Ownership.Clone))
method canFetchMore(self: QAbstractItemModel, parent: QModelIndex): bool {.base.} =
return dos_qabstractitemmodel_canFetchMore(self.vptr.DosQAbstractItemModel, parent.vptr.DosQModelIndex)
proc canFetchMoreCallback(modelPtr: pointer, parent: DosQModelIndex, result: var bool) {.cdecl, exportc.} =
let model = cast[QAbstractItemModel](modelPtr)
result = model.canFetchMore(newQModelIndex(parent, Ownership.Clone))
method fetchMore(self: QAbstractItemModel, parent: QModelIndex) {.base.} =
dos_qabstractitemmodel_fetchMore(self.vptr.DosQAbstractItemModel, parent.vptr.DosQModelIndex)
proc fetchMoreCallback(modelPtr: pointer, parent: DosQModelIndex) {.cdecl, exportc.} =
let model = cast[QAbstractItemModel](modelPtr)
model.fetchMore(newQModelIndex(parent, Ownership.Clone))
method onSlotCalled*(self: QAbstractItemModel, slotName: string, arguments: openarray[QVariant]) =
## Called from the dotherside library when a slot is called from Qml.
proc setup*(self: QAbstractItemModel) =
## Setup a new QAbstractItemModel
debugMsg("QAbstractItemModel", "setup")
let qaimCallbacks = DosQAbstractItemModelCallbacks(rowCount: rowCountCallback,
columnCount: columnCountCallback,
data: dataCallback,
setData: setDataCallback,
roleNames: roleNamesCallback,
flags: flagsCallback,
headerData: headerDataCallback,
index: indexCallback,
parent: parentCallback,
hasChildren: hasChildrenCallback,
canFetchMore: canFetchMoreCallback,
fetchMore: fetchMoreCallback)
self.vptr = dos_qabstractitemmodel_create(addr(self[]), self.metaObject.vptr,
qobjectCallback, rowCountCallback, columnCountCallback,
dataCallback, setDataCallback, roleNamesCallback,
flagsCallback, headerDataCallback, indexCallback, parentCallback).DosQObject
qobjectCallback, qaimCallbacks).DosQObject
proc delete*(self: QAbstractItemModel) =
## Delete the given QAbstractItemModel

View File

@ -0,0 +1,57 @@
let qAbstractListModelStaticMetaObjectInstance = newQAbstractListModelMetaObject()
proc staticMetaObject*(c: type QAbstractListModel): QMetaObject =
## Return the metaObject of QAbstractListModel
qAbstractListModelStaticMetaObjectInstance
proc staticMetaObject*(self: QAbstractListModel): QMetaObject =
## Return the metaObject of QAbstractListModel
qAbstractListModelStaticMetaObjectInstance
method metaObject*(self: QAbstractListModel): QMetaObject =
# Return the metaObject
QAbstractListModel.staticMetaObject
proc setup*(self: QAbstractListModel) =
## Setup a new QAbstractListModel
debugMsg("QAbstractListModel", "setup")
let qaimCallbacks = DosQAbstractItemModelCallbacks(rowCount: rowCountCallback,
columnCount: columnCountCallback,
data: dataCallback,
setData: setDataCallback,
roleNames: roleNamesCallback,
flags: flagsCallback,
headerData: headerDataCallback,
index: indexCallback,
parent: parentCallback,
hasChildren: hasChildrenCallback,
canFetchMore: canFetchMoreCallback,
fetchMore: fetchMoreCallback)
self.vptr = dos_qabstractlistmodel_create(addr(self[]), self.metaObject.vptr,
qobjectCallback, qaimCallbacks).DosQObject
proc delete*(self: QAbstractListModel) =
## Delete the given QAbstractItemModel
debugMsg("QAbstractItemModel", "delete")
self.QObject.delete()
proc newQAbstractListModel*(): QAbstractListModel =
## Return a new QAbstractListModel
debugMsg("QAbstractListModel", "new")
new(result, delete)
result.setup()
method columnCount(self: QAbstractListModel, index: QModelIndex): int =
return dos_qabstractlistmodel_columnCount(self.vptr.DosQAbstractListModel, index.vptr.DosQModelIndex)
method parent(self: QAbstractListModel, child: QModelIndex): QModelIndex =
let indexPtr = dos_qabstractlistmodel_parent(self.vptr.DosQAbstractListModel, child.vptr.DosQModelIndex)
result = newQModelIndex(indexPtr, Ownership.Take)
method index*(self: QAbstractListModel, row: int, column: int, parent: QModelIndex): QModelIndex =
let indexPtr = dos_qabstractlistmodel_index(self.vptr.DosQAbstractListModel, row.cint, column.cint, parent.vptr.DosQModelIndex)
result = newQModelIndex(indexPtr, Ownership.Take)

View File

@ -0,0 +1,47 @@
let qAbstractTableModelStaticMetaObjectInstance = newQAbstractTableModelMetaObject()
proc staticMetaObject*(c: type QAbstractTableModel): QMetaObject =
## Return the metaObject of QAbstractTableModel
qAbstractTableModelStaticMetaObjectInstance
proc staticMetaObject*(self: QAbstractTableModel): QMetaObject =
## Return the metaObject of QAbstractTableModel
qAbstractTableModelStaticMetaObjectInstance
method metaObject*(self: QAbstractTableModel): QMetaObject =
# Return the metaObject
QAbstractTableModel.staticMetaObject
proc setup*(self: QAbstractTableModel) =
## Setup a new QAbstractTableModel
debugMsg("QAbstractTableModel", "setup")
let qaimCallbacks = DosQAbstractItemModelCallbacks(rowCount: rowCountCallback,
columnCount: columnCountCallback,
data: dataCallback,
setData: setDataCallback,
roleNames: roleNamesCallback,
flags: flagsCallback,
headerData: headerDataCallback,
index: indexCallback,
parent: parentCallback,
hasChildren: hasChildrenCallback,
canFetchMore: canFetchMoreCallback,
fetchMore: fetchMoreCallback)
self.vptr = dos_qabstracttablemodel_create(addr(self[]), self.metaObject.vptr,
qobjectCallback, qaimCallbacks).DosQObject
proc delete*(self: QAbstractTableModel) =
## Delete the given QAbstractItemModel
debugMsg("QAbstractItemModel", "delete")
self.QObject.delete()
proc newQAbstractTableModel*(): QAbstractTableModel =
## Return a new QAbstractTableModel
debugMsg("QAbstractTableModel", "new")
new(result, delete)
result.setup()

View File

@ -18,6 +18,18 @@ proc newQAbstractItemModelMetaObject*(): QMetaObject =
new(result, delete)
result.vptr = dos_qabstractitemmodel_qmetaobject()
proc newQAbstractListModelMetaObject*(): QMetaObject =
## Create the QMetaObject of QAbstractListModel
debugMsg("QMetaObject", "newQAbstractListModelMetaObject")
new(result, delete)
result.vptr = dos_qabstractlistmodel_qmetaobject()
proc newQAbstractTableModelMetaObject*(): QMetaObject =
## Create the QMetaObject of QAbstractTableModel
debugMsg("QMetaObject", "newQAbstractItemTableMetaObject")
new(result, delete)
result.vptr = dos_qabstracttablemodel_qmetaobject()
proc newQMetaObject*(superClass: QMetaObject, className: string,
signals: seq[SignalDefinition],
slots: seq[SlotDefinition],