mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-12 04:26:43 +00:00
[NimQml] Fixed AbstractItemModel example
This commit is contained in:
parent
964ef811c6
commit
4622b93c3f
37
Nim/Examples/AbstractItemModel/MyListModel.nim
Normal file
37
Nim/Examples/AbstractItemModel/MyListModel.nim
Normal 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"
|
@ -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()
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user