mirror of
https://github.com/status-im/nimqml.git
synced 2025-02-22 19:38:22 +00:00
Synched with the qaim changes
This commit is contained in:
parent
f0a32cbeb1
commit
9438c9d038
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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.}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
57
src/private/qabstractlistmodel.nim
Normal file
57
src/private/qabstractlistmodel.nim
Normal 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)
|
||||
|
47
src/private/qabstracttablemodel.nim
Normal file
47
src/private/qabstracttablemodel.nim
Normal 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()
|
||||
|
||||
|
||||
|
@ -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],
|
||||
|
Loading…
x
Reference in New Issue
Block a user