[NimQml] Fixed AbstractItemModel example

This commit is contained in:
Filippo Cucchetto 2015-05-02 13:54:27 +02:00
parent 964ef811c6
commit 4622b93c3f
3 changed files with 42 additions and 44 deletions

View File

@ -0,0 +1,37 @@
import NimQml, NimQmlMacros, Tables
QtObject:
type
MyListModel* = ref object of QAbstractListModel
names*: seq[string]
RoleNames {.pure.} = enum
Name = 0,
converter toCInt(value: RoleNames): cint = return value.cint
converter toCInt(value: int): cint = return value.cint
converter toInt(value: RoleNames): int = return value.int
converter toInt(value: cint): int = return value.int
converter toQVariant(value: string): QVariant = return value.newQVariant
proc delete(self: MyListModel) =
let model = self.QAbstractListModel
model.delete
proc newMyListModel*(): MyListModel =
new(result, delete)
result.names = @["John", "Max", "Paul", "Anna"]
result.create
method rowCount(self: MyListModel, index: QModelIndex = nil): cint =
return self.names.len
method data(self: MyListModel, index: QModelIndex, role: cint): QVariant =
if not index.isValid:
return
if index.row < 0 or index.row >= self.names.len:
return
return self.names[index.row]
method roleNames(self: MyListModel): Table[cint, cstring] =
result = initTable[cint, cstring]()
result[RoleNames.Name] = "name"

View File

@ -1,50 +1,12 @@
import NimQml import NimQml
import macros import MyListModel
import typeinfo
import tables
type
Roles {.pure.} = enum
Name = cint(0)
MyQAbstractListModel = ref object of QAbstractListModel
m_roleNames: Table[int, cstring]
m_names: seq[string]
proc create(self: MyQAbstractListModel) =
var qAbstractListModel = self.QAbstractListModel
qAbstractListModel.create
self.m_names = @["John", "Max", "Paul", "Anna"]
self.m_roleNames = initTable[int, cstring]()
self.m_roleNames[0] = "name"
proc delete(self: MyQAbstractListModel) =
var qAbstractListModel = self.QAbstractListModel
qAbstractListModel.delete
proc newMyQAbstractListModel(): MyQAbstractListModel =
new(result, delete)
result.create
method rowCount(self: MyQAbstractListModel, index: QModelIndex): cint =
return self.m_names.len.cint
method data(self: MyQAbstractListModel, index: QModelIndex, role: cint): QVariant =
if not index.isValid:
return
if index.row < 0 or index.row >= self.m_names.len:
return
if role == Roles.Name.cint:
return newQVariant(self.m_names[index.row])
method roleNames(self: MyQAbstractListModel): Table[int, cstring] =
return self.m_roleNames
proc mainProc() = proc mainProc() =
echo "Starting"
var app = newQApplication() var app = newQApplication()
defer: app.delete defer: app.delete
var myListModel = newMyQAbstractListModel() var myListModel = newMyListModel();
defer: myListModel.delete defer: myListModel.delete
var engine = newQQmlApplicationEngine() var engine = newQQmlApplicationEngine()

View File

@ -89,7 +89,7 @@ proc dos_qvariant_delete(variant: RawQVariant) {.cdecl, dynlib:dOtherSideDll, im
proc dos_qvariant_isnull(variant: RawQVariant, isNull: var bool) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_isnull(variant: RawQVariant, isNull: var bool) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_toInt(variant: RawQVariant, value: var cint) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_toInt(variant: RawQVariant, value: var cint) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_toBool(variant: RawQVariant, value: var bool) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_toBool(variant: RawQVariant, value: var bool) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_toString(variant: RawQVariant, value: var cstring, length: var cint) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_toString(variant: RawQVariant, value: var cstring) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_setInt(variant: RawQVariant, value: cint) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_setInt(variant: RawQVariant, value: cint) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_setBool(variant: RawQVariant, value: bool) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_setBool(variant: RawQVariant, value: bool) {.cdecl, dynlib:dOtherSideDll, importc.}
proc dos_qvariant_setString(variant: RawQVariant, value: cstring) {.cdecl, dynlib:dOtherSideDll, importc.} proc dos_qvariant_setString(variant: RawQVariant, value: cstring) {.cdecl, dynlib:dOtherSideDll, importc.}
@ -236,8 +236,7 @@ proc `doubleVal=`*(variant: QVariant, value: cdouble) =
proc stringVal*(variant: QVariant): string = proc stringVal*(variant: QVariant): string =
## Return the QVariant value as string ## Return the QVariant value as string
var rawCString: cstring var rawCString: cstring
var rawCStringLength: cint dos_qvariant_toString(variant.data, rawCString)
dos_qvariant_toString(variant.data, rawCString, rawCStringLength)
result = $rawCString result = $rawCString
dos_chararray_delete(rawCString) dos_chararray_delete(rawCString)