mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-14 13:46:39 +00:00
Added index to the rowCount callback
This commit is contained in:
parent
470b2647b8
commit
b7cbe8691c
@ -9,7 +9,9 @@ BaseQAbstractListModel::BaseQAbstractListModel(void* modelObject,
|
|||||||
|
|
||||||
int BaseQAbstractListModel::rowCount(const QModelIndex& index) const
|
int BaseQAbstractListModel::rowCount(const QModelIndex& index) const
|
||||||
{
|
{
|
||||||
return m_rowCountCallback(m_modelObject);
|
auto newIndex = new QModelIndex();
|
||||||
|
*newIndex = index;
|
||||||
|
return m_rowCountCallback(m_modelObject, newIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant BaseQAbstractListModel::data(const QModelIndex& index, int role) const
|
QVariant BaseQAbstractListModel::data(const QModelIndex& index, int role) const
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
/// This class act as a base class for D and Nim QAbstractListModel
|
/// This class act as a base class for D and Nim QAbstractListModel
|
||||||
class BaseQAbstractListModel : public QAbstractListModel
|
class BaseQAbstractListModel : public QAbstractListModel
|
||||||
{
|
{
|
||||||
typedef int (*RowCountCallback) (void*);
|
typedef int (*RowCountCallback) (void* model, void* index);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// Constructor
|
/// Constructor
|
||||||
|
@ -112,7 +112,7 @@ extern "C"
|
|||||||
void dos_qmodelindex_sibling(void* vptr, int row, int column, void* sibling);
|
void dos_qmodelindex_sibling(void* vptr, int row, int column, void* sibling);
|
||||||
|
|
||||||
// QAbstractListModel
|
// QAbstractListModel
|
||||||
typedef int(*RowCountCallback)(void*);
|
typedef int(*RowCountCallback)(void* model, void* index);
|
||||||
|
|
||||||
void dos_qabstractlistmodel_create(void** vptr,
|
void dos_qabstractlistmodel_create(void** vptr,
|
||||||
void* callbackObject,
|
void* callbackObject,
|
||||||
|
@ -7,25 +7,37 @@ type MyQAbstractListModel = ref object of QAbstractListModel
|
|||||||
|
|
||||||
proc create(self: MyQAbstractListModel) =
|
proc create(self: MyQAbstractListModel) =
|
||||||
var qAbstractListModel = self.QAbstractListModel
|
var qAbstractListModel = self.QAbstractListModel
|
||||||
qAbstractListModel.create()
|
qAbstractListModel.create
|
||||||
|
|
||||||
proc delete(self: MyQAbstractListModel) =
|
proc delete(self: MyQAbstractListModel) =
|
||||||
var qAbstractListModel = self.QAbstractListModel
|
var qAbstractListModel = self.QAbstractListModel
|
||||||
qAbstractListModel.delete()
|
qAbstractListModel.delete
|
||||||
|
|
||||||
proc newMyQAbstractListModel(): MyQAbstractListModel =
|
proc newMyQAbstractListModel(): MyQAbstractListModel =
|
||||||
new(result, delete)
|
new(result, delete)
|
||||||
result.create()
|
result.create
|
||||||
|
|
||||||
method rowCount(self: MyQAbstractListModel): cint =
|
method rowCount(self: MyQAbstractListModel, index: QModelIndex): cint =
|
||||||
return 103
|
echo "index valid: " & $index.isValid & " row: " & $index.row & " column: " & $index.column
|
||||||
|
return 3
|
||||||
|
|
||||||
proc mainProc() =
|
proc mainProc() =
|
||||||
var myListModel = newMyQAbstractListModel()
|
var app = newQApplication()
|
||||||
defer: myListModel.delete()
|
defer: app.delete
|
||||||
let rows = myListModel.rowCount
|
|
||||||
echo rows
|
|
||||||
|
|
||||||
|
var myListModel = newMyQAbstractListModel()
|
||||||
|
defer: myListModel.delete
|
||||||
|
|
||||||
|
var engine = newQQmlApplicationEngine()
|
||||||
|
defer: engine.delete
|
||||||
|
|
||||||
|
var variant = newQVariant(myListModel)
|
||||||
|
defer: variant.delete
|
||||||
|
|
||||||
|
engine.rootContext.setContextProperty("myListModel", variant)
|
||||||
|
engine.load("main.qml")
|
||||||
|
|
||||||
|
app.exec()
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
mainProc()
|
mainProc()
|
||||||
|
@ -17,7 +17,7 @@ ApplicationWindow
|
|||||||
{
|
{
|
||||||
width: 10
|
width: 10
|
||||||
height: 10
|
height: 10
|
||||||
color: "red"
|
color: index % 2 == 0 ? "red" : "black"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -524,6 +524,11 @@ proc create*(modelIndex: var QModelIndex) =
|
|||||||
dos_qmodelindex_create(modelIndex.data)
|
dos_qmodelindex_create(modelIndex.data)
|
||||||
modelIndex.deleted = false
|
modelIndex.deleted = false
|
||||||
|
|
||||||
|
proc create*(modelIndex: var QModelIndex, rawQModelIndex: RawQModelIndex) =
|
||||||
|
## Create a new QModelIndex
|
||||||
|
modelIndex.data = rawQModelIndex
|
||||||
|
modelIndex.deleted = false
|
||||||
|
|
||||||
proc delete*(modelIndex: QModelIndex) =
|
proc delete*(modelIndex: QModelIndex) =
|
||||||
## Delete the given QModelIndex
|
## Delete the given QModelIndex
|
||||||
if not modelIndex.deleted:
|
if not modelIndex.deleted:
|
||||||
@ -537,6 +542,11 @@ proc newQModelIndex*(): QModelIndex =
|
|||||||
newWithCondFinalizer(result, delete)
|
newWithCondFinalizer(result, delete)
|
||||||
result.create()
|
result.create()
|
||||||
|
|
||||||
|
proc newQModelIndex*(rawQModelIndex: RawQModelIndex): QModelIndex =
|
||||||
|
## Return a new QModelIndex given a raw index
|
||||||
|
newWithCondFinalizer(result, delete)
|
||||||
|
result.create(rawQModelIndex)
|
||||||
|
|
||||||
proc row*(modelIndex: QModelIndex): cint =
|
proc row*(modelIndex: QModelIndex): cint =
|
||||||
## Return the index row
|
## Return the index row
|
||||||
dos_qmodelindex_row(modelIndex.data, result)
|
dos_qmodelindex_row(modelIndex.data, result)
|
||||||
@ -571,20 +581,21 @@ proc sibling*(modelIndex: QModelIndex, row: cint, column: cint): QModelIndex =
|
|||||||
|
|
||||||
|
|
||||||
# QAbstractListModel
|
# QAbstractListModel
|
||||||
type RowCountCallback = proc(modelObject: ptr QAbstractListModelObj): cint {.cdecl.}
|
type RowCountCallback = proc(modelObject: ptr QAbstractListModelObj, rawIndex: RawQModelIndex): cint {.cdecl.}
|
||||||
|
|
||||||
proc dos_qabstractlistmodel_create(model: var RawQAbstractListModel,
|
proc dos_qabstractlistmodel_create(model: var RawQAbstractListModel,
|
||||||
modelPtr: ptr QAbstractListModelObj,
|
modelPtr: ptr QAbstractListModelObj,
|
||||||
rowCountCallback: RowCountCallback) {.cdecl, dynlib:"libDOtherSide.so", importc.}
|
rowCountCallback: RowCountCallback) {.cdecl, dynlib:"libDOtherSide.so", importc.}
|
||||||
proc dos_qabstractlistmodel_delete(model: RawQAbstractListModel) {.cdecl, dynlib:"libDOtherSide.so", importc.}
|
proc dos_qabstractlistmodel_delete(model: RawQAbstractListModel) {.cdecl, dynlib:"libDOtherSide.so", importc.}
|
||||||
|
|
||||||
method rowCount*(model: QAbstractListModel): cint =
|
method rowCount*(model: QAbstractListModel, index: QModelIndex): cint =
|
||||||
## Return the model's row count
|
## Return the model's row count
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
proc rowCountCallback(modelObject: ptr QAbstractListModelObj): cint {.cdecl, exportc.} =
|
proc rowCountCallback(modelObject: ptr QAbstractListModelObj, rawIndex: RawQModelIndex): cint {.cdecl, exportc.} =
|
||||||
let model = cast[QAbstractListModel](modelObject)
|
let model = cast[QAbstractListModel](modelObject)
|
||||||
return model.rowCount
|
let index = newQModelIndex(rawIndex)
|
||||||
|
return model.rowCount(index)
|
||||||
|
|
||||||
proc create*(model: var QAbstractListModel) =
|
proc create*(model: var QAbstractListModel) =
|
||||||
## Create a new QAbstractListModel
|
## Create a new QAbstractListModel
|
||||||
|
@ -34,7 +34,7 @@ type
|
|||||||
QQmlContext* = distinct pointer ## A QQmlContext
|
QQmlContext* = distinct pointer ## A QQmlContext
|
||||||
|
|
||||||
RawQModelIndex = distinct pointer
|
RawQModelIndex = distinct pointer
|
||||||
QModelIndex = ref object of RootObj ## A QModelIndex
|
QModelIndex* = ref object of RootObj ## A QModelIndex
|
||||||
data: RawQModelIndex
|
data: RawQModelIndex
|
||||||
deleted: bool
|
deleted: bool
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user