diff --git a/src/nimqml.nim b/src/nimqml.nim index 72f692e..1e7e3a8 100644 --- a/src/nimqml.nim +++ b/src/nimqml.nim @@ -11,16 +11,18 @@ template debugMsg(typeName: string, procName: string) = message &= procName debugMsg(message) -include private.nimqmltypes -var qobjectRegistry = initTable[ptr QObjectObj, bool]() -include private/qvariant.nim -include private/qqmlapplicationengine.nim -include private/qqmlcontext.nim -include private/qapplication.nim -include private/qguiapplication.nim -include private/qobject.nim -include private/qquickview.nim -include private/qmodelindex.nim -include private/qhashintbytearray.nim -include private/qabstractlistmodel.nim -include private.nimqmlmacros +include private/qmetaobject.nim + +#include private.nimqmltypes +#var qobjectRegistry = initTable[ptr QObjectObj, bool]() +#include private/qvariant.nim +#include private/qqmlapplicationengine.nim +#include private/qqmlcontext.nim +#include private/qapplication.nim +#include private/qguiapplication.nim +#include private/qobject.nim +#include private/qquickview.nim +#include private/qmodelindex.nim +#include private/qhashintbytearray.nim +#include private/qabstractlistmodel.nim +#include private.nimqmlmacros diff --git a/src/private/dotherside.nim b/src/private/dotherside.nim new file mode 100644 index 0000000..b49374e --- /dev/null +++ b/src/private/dotherside.nim @@ -0,0 +1,41 @@ +type + CArray* {.unchecked.}[T] = array[0..0, T] + + DosSignalDefinition* = object + name*: cstring + parametersCount*: cint + parametersMetaTypes*: pointer + + DosSignalDefinitions* = object + count*: cint + definitions*: pointer + + DosSlotDefinition* = object + name*: cstring + returnMetaType*: cint + paremetersCount*: cint + parametersMetaTypes*: pointer + + DosSlotDefinitions* = object + count*: cint + definitions*: pointer + + DosPropertyDefinition* = object + name*: cstring + propertyMetaType*: cint + readSlot*: cstring + writeSlot*: cstring + notifySignal*: cstring + + DosPropertyDefinitions* = object + count*: cint + definitions*: pointer + +proc dos_qmetaobject_create*(vptr: var pointer, + superclassMetaObject: pointer, + className: cstring, + signalDefinitions: DosSignalDefinitions, + slotDefinitions: DosSlotDefinitions, + propertyDefinitions: DosPropertyDefinitions) {.cdecl, importc.} + +proc dos_qmetaobject_delete*(vptr: var pointer) {.cdecl, importc.} diff --git a/src/private/qmetaobject.nim b/src/private/qmetaobject.nim new file mode 100644 index 0000000..9759801 --- /dev/null +++ b/src/private/qmetaobject.nim @@ -0,0 +1,40 @@ +import dotherside + +type + QMetaType = int + + SignalDefinition* = object + name: string + parametersTypes: seq[QMetaType] + + SlotDefinition* = object + name: string + returnType: QMetaType + parametersTypes: seq[QMetaType] + + PropertyDefinition* = object + name: string + propertyType: QMetaType + readSlot: string + writeSlot: string + notifySignal: string + + QMetaObject = ref object of RootObj + vptr: pointer + signalDefinitions: seq[SignalDefinition] + slotDefinitions: seq[SlotDefinition] + propertyDefinitions: seq[PropertyDefinition] + + +proc convert(signals: seq[SignalDefinition]): seq[DosSignalDefinition] = + discard() + + +proc newQMetaObject(superClass: QMetaObject, className: string, + signalDefinitions: seq[SignalDefinition], + slotDefinitions: seq[SlotDefinition], + propertyDefinitions: seq[PropertyDefinition]): QMetaObject = + new(result) + result.signalDefinitions = signalDefinitions + result.slotDefinitions = slotDefinitions + result.propertyDefinitions = propertyDefinitions