Add 2nd model view tutorial app
This commit is contained in:
parent
467231d4b7
commit
25026a55f7
@ -25,7 +25,8 @@
|
||||
"docs": "cross-env typedoc && node ./website/docs/scripts/fixdocs.js",
|
||||
"qode": "cross-env node ./scripts/qode.js",
|
||||
"prepublishOnly": "cross-env npm run build",
|
||||
"example-modelview_1_readonly": "node ./scripts/qode.js dist/examples/modelview_1_readonly.js"
|
||||
"example-modelview_1_readonly": "node ./scripts/qode.js dist/examples/modelview_1_readonly.js",
|
||||
"example-modelview_2_formatting": "node ./scripts/qode.js dist/examples/modelview_2_formatting.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.x.x"
|
||||
|
||||
@ -31,17 +31,21 @@ QVariant* extrautils::convertToQVariant(Napi::Env& env, Napi::Value& value) {
|
||||
// Warning: Make sure you delete the QVariant fron this function upon use.
|
||||
if (value.IsBoolean()) {
|
||||
return new QVariant(value.As<Napi::Boolean>().Value());
|
||||
|
||||
} else if (value.IsNumber()) {
|
||||
if (isNapiValueInt(env, value)) {
|
||||
return new QVariant(value.As<Napi::Number>().Int32Value());
|
||||
} else {
|
||||
return new QVariant(value.As<Napi::Number>().DoubleValue());
|
||||
}
|
||||
|
||||
} else if (value.IsString()) {
|
||||
std::string stringValue = value.As<Napi::String>().Utf8Value();
|
||||
return new QVariant(stringValue.c_str());
|
||||
|
||||
} else if (value.IsSymbol()) {
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsArray()) {
|
||||
// Note: This assumes an array of strings.
|
||||
Napi::Array array = value.As<Napi::Array>();
|
||||
@ -54,12 +58,15 @@ QVariant* extrautils::convertToQVariant(Napi::Env& env, Napi::Value& value) {
|
||||
}
|
||||
}
|
||||
return new QVariant(value);
|
||||
|
||||
} else if (value.IsArrayBuffer()) {
|
||||
// TODO: fix this
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsTypedArray()) {
|
||||
// TODO: fix this
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsObject()) {
|
||||
Napi::Object object = value.As<Napi::Object>();
|
||||
std::string className = getNapiObjectClassName(object);
|
||||
@ -67,20 +74,27 @@ QVariant* extrautils::convertToQVariant(Napi::Env& env, Napi::Value& value) {
|
||||
ComponentWrap* componentWrap =
|
||||
Napi::ObjectWrap<ComponentWrap>::Unwrap(object);
|
||||
return new QVariant(typeId, componentWrap->rawData);
|
||||
|
||||
} else if (value.IsFunction()) {
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsPromise()) {
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsUndefined()) {
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsNull()) {
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsBuffer()) {
|
||||
// TODO: fix this
|
||||
return new QVariant();
|
||||
|
||||
} else if (value.IsExternal()) {
|
||||
QVariant* variant = value.As<Napi::External<QVariant>>().Data();
|
||||
return variant;
|
||||
|
||||
} else {
|
||||
return new QVariant();
|
||||
}
|
||||
|
||||
83
src/examples/modelview_2_formatting.ts
Normal file
83
src/examples/modelview_2_formatting.ts
Normal file
@ -0,0 +1,83 @@
|
||||
import {
|
||||
AlignmentFlag,
|
||||
CheckState,
|
||||
GlobalColor,
|
||||
ItemDataRole,
|
||||
QAbstractTableModel,
|
||||
QBrush,
|
||||
QFont,
|
||||
QModelIndex,
|
||||
QTableView,
|
||||
QVariant,
|
||||
} from '..';
|
||||
|
||||
function main(): void {
|
||||
const tableView = new QTableView();
|
||||
const model = new MyModel();
|
||||
tableView.setModel(model);
|
||||
|
||||
tableView.show();
|
||||
|
||||
(global as any).win = tableView;
|
||||
}
|
||||
|
||||
class MyModel extends QAbstractTableModel {
|
||||
rowCount(parent = new QModelIndex()): number {
|
||||
return 2;
|
||||
}
|
||||
|
||||
columnCount(parent = new QModelIndex()): number {
|
||||
return 3;
|
||||
}
|
||||
|
||||
data(index: QModelIndex, role = ItemDataRole.DisplayRole): QVariant {
|
||||
const row = index.row();
|
||||
const col = index.column();
|
||||
// generate a log message when this method gets called
|
||||
console.log(`row ${row}, col ${col}, role ${role}`);
|
||||
|
||||
switch (role) {
|
||||
case ItemDataRole.DisplayRole:
|
||||
if (row == 0 && col == 1) {
|
||||
return new QVariant('<--left');
|
||||
}
|
||||
if (row == 1 && col == 1) {
|
||||
return new QVariant('right-->');
|
||||
}
|
||||
return new QVariant(`Row${row + 1}, Column${col + 1}`);
|
||||
|
||||
case ItemDataRole.FontRole:
|
||||
if (row == 0 && col == 0) {
|
||||
// change font only for cell(0,0)
|
||||
const boldFont = new QFont();
|
||||
boldFont.setBold(true);
|
||||
return new QVariant(boldFont.native);
|
||||
}
|
||||
break;
|
||||
|
||||
case ItemDataRole.BackgroundRole:
|
||||
if (row == 1 && col == 2) {
|
||||
//change background only for cell(1,2)
|
||||
return new QVariant(new QBrush(GlobalColor.red).native);
|
||||
}
|
||||
break;
|
||||
|
||||
case ItemDataRole.TextAlignmentRole:
|
||||
if (row == 1 && col == 1) {
|
||||
// change text alignment only for cell(1,1)
|
||||
return new QVariant(AlignmentFlag.AlignRight | AlignmentFlag.AlignVCenter);
|
||||
}
|
||||
break;
|
||||
|
||||
case ItemDataRole.CheckStateRole:
|
||||
if (row == 1 && col == 0) {
|
||||
// add a checkbox to cell(1,0)
|
||||
return new QVariant(CheckState.Checked);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return new QVariant();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Loading…
Reference in New Issue
Block a user