#include "QtWidgets/QTableWidget/qtablewidget_wrap.h" #include "Extras/Utils/nutils.h" #include "QtCore/QRect/qrect_wrap.h" #include "QtWidgets/QTableWidgetItem/qtablewidgetitem_wrap.h" #include "QtWidgets/QWidget/qwidget_wrap.h" Napi::FunctionReference QTableWidgetWrap::constructor; Napi::Object QTableWidgetWrap::init(Napi::Env env, Napi::Object exports) { Napi::HandleScope scope(env); char CLASSNAME[] = "QTableWidget"; Napi::Function func = DefineClass( env, CLASSNAME, {InstanceMethod("selectedRanges", &QTableWidgetWrap::selectedRanges), InstanceMethod("closePersistentEditor", &QTableWidgetWrap::closePersistentEditor), InstanceMethod("editItem", &QTableWidgetWrap::editItem), InstanceMethod("setCellWidget", &QTableWidgetWrap::setCellWidget), InstanceMethod("setItem", &QTableWidgetWrap::setItem), InstanceMethod("setHorizontalHeaderItem", &QTableWidgetWrap::setHorizontalHeaderItem), InstanceMethod("setHorizontalHeaderLabels", &QTableWidgetWrap::setHorizontalHeaderLabels), InstanceMethod("setVerticalHeaderItem", &QTableWidgetWrap::setVerticalHeaderItem), InstanceMethod("setVerticalHeaderLabels", &QTableWidgetWrap::setVerticalHeaderLabels), InstanceMethod("clear", &QTableWidgetWrap::clear), InstanceMethod("clearContents", &QTableWidgetWrap::clearContents), InstanceMethod("insertColumn", &QTableWidgetWrap::insertColumn), InstanceMethod("removeColumn", &QTableWidgetWrap::removeColumn), InstanceMethod("insertRow", &QTableWidgetWrap::insertRow), InstanceMethod("removeRow", &QTableWidgetWrap::removeRow), InstanceMethod("scrollToItem", &QTableWidgetWrap::scrollToItem), // FROM TABLEVIEW InstanceMethod("hideColumn", &QTableWidgetWrap::hideColumn), InstanceMethod("hideRow", &QTableWidgetWrap::hideRow), InstanceMethod("resizeColumnToContents", &QTableWidgetWrap::resizeColumnToContents), InstanceMethod("resizeColumnsToContents", &QTableWidgetWrap::resizeColumnsToContents), InstanceMethod("resizeRowToContents", &QTableWidgetWrap::resizeRowToContents), InstanceMethod("resizeRowsToContents", &QTableWidgetWrap::resizeRowsToContents), InstanceMethod("selectColumn", &QTableWidgetWrap::selectColumn), InstanceMethod("selectRow", &QTableWidgetWrap::selectRow), InstanceMethod("setShowGrid", &QTableWidgetWrap::setShowGrid), InstanceMethod("showGrid", &QTableWidgetWrap::showGrid), InstanceMethod("showColumn", &QTableWidgetWrap::showColumn), InstanceMethod("showRow", &QTableWidgetWrap::showRow), InstanceMethod("sortByColumn", &QTableWidgetWrap::sortByColumn), InstanceMethod("setColumnWidth", &QTableWidgetWrap::setColumnWidth), InstanceMethod("setRowHeight", &QTableWidgetWrap::setRowHeight), InstanceMethod("columnCount", &QTableWidgetWrap::columnCount), InstanceMethod("rowCount", &QTableWidgetWrap::rowCount), InstanceMethod("setColumnCount", &QTableWidgetWrap::setColumnCount), InstanceMethod("setRowCount", &QTableWidgetWrap::setRowCount), InstanceMethod("setSortingEnabled", &QTableWidgetWrap::setSortingEnabled), InstanceMethod("isSortingEnabled", &QTableWidgetWrap::isSortingEnabled), InstanceMethod("column", &QTableWidgetWrap::column), InstanceMethod("currentColumn", &QTableWidgetWrap::currentColumn), InstanceMethod("currentItem", &QTableWidgetWrap::currentItem), InstanceMethod("currentRow", &QTableWidgetWrap::currentRow), InstanceMethod("findItems", &QTableWidgetWrap::findItems), InstanceMethod("isPersistentEditorOpen", &QTableWidgetWrap::isPersistentEditorOpen), InstanceMethod("item", &QTableWidgetWrap::item), InstanceMethod("itemAt", &QTableWidgetWrap::itemAt), InstanceMethod("openPersistentEditor", &QTableWidgetWrap::openPersistentEditor), InstanceMethod("removeCellWidget", &QTableWidgetWrap::removeCellWidget), InstanceMethod("row", &QTableWidgetWrap::row), InstanceMethod("cellWidget", &QTableWidgetWrap::cellWidget), InstanceMethod("setCurrentCell", &QTableWidgetWrap::setCurrentCell), InstanceMethod("setCurrentItem", &QTableWidgetWrap::setCurrentItem), InstanceMethod("sortItems", &QTableWidgetWrap::sortItems), InstanceMethod("takeItem", &QTableWidgetWrap::takeItem), InstanceMethod("visualColumn", &QTableWidgetWrap::visualColumn), InstanceMethod("visualItemRect", &QTableWidgetWrap::visualItemRect), InstanceMethod("visualRow", &QTableWidgetWrap::visualRow), QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(QTableWidgetWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); QOBJECT_REGISTER_WRAPPER(QTableWidget, QTableWidgetWrap); return exports; } QTableWidget* QTableWidgetWrap::getInternalInstance() { return this->instance; } QTableWidgetWrap::~QTableWidgetWrap() { extrautils::safeDelete(this->instance); } QTableWidgetWrap::QTableWidgetWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrap(info) { Napi::Env env = info.Env(); size_t argCount = info.Length(); if (argCount == 0) { // --- Construct a new instance this->instance = new NTableWidget(); } else if (argCount == 1) { if (info[0].IsExternal()) { // --- Wrap a given C++ instance this->instance = info[0].As>().Data(); } else { // --- Construct a new instance and pass a parent Napi::Object parentObject = info[0].As(); NodeWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); this->instance = new NTableWidget(parentWidgetWrap->getInternalInstance()); } } else if (argCount == 2) { int rows = info[0].As().Int32Value(); int columns = info[1].As().Int32Value(); this->instance = new NTableWidget(rows, columns); } else if (argCount == 3) { int rows = info[0].As().Int32Value(); int columns = info[1].As().Int32Value(); Napi::Object parentObject = info[2].As(); NodeWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); this->instance = new NTableWidget(rows, columns, parentWidgetWrap->getInternalInstance()); } else { Napi::TypeError::New( env, "NodeGui: QTableWidgetWrap: Wrong number of arguments to constructor") .ThrowAsJavaScriptException(); } this->rawData = extrautils::configureQWidget(this->getInternalInstance(), false); } Napi::Value QTableWidgetWrap::selectedRanges(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); QList range = this->instance->selectedRanges(); Napi::Array napiRange = Napi::Array::New(env, range.size()); for (int i = 0; i < range.size(); i++) { int topRow = range[i].topRow(); int leftColumn = range[i].leftColumn(); int bottomRow = range[i].bottomRow(); int rightColumn = range[i].rightColumn(); int columnCount = range[i].columnCount(); int rowCount = range[i].rowCount(); Napi::Object newRange = Napi::Object::New(env); newRange.Set("topRow", Napi::Number::New(env, topRow)); newRange.Set("leftColumn", Napi::Number::New(env, leftColumn)); newRange.Set("bottomRow", Napi::Number::New(env, bottomRow)); newRange.Set("rightColumn", Napi::Number::New(env, rightColumn)); newRange.Set("columnCount", Napi::Number::New(env, columnCount)); newRange.Set("rowCount", Napi::Number::New(env, rowCount)); napiRange[i] = newRange; } return napiRange; return env.Null(); } Napi::Value QTableWidgetWrap::closePersistentEditor( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->closePersistentEditor(itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::editItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->editItem(itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::setCellWidget(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); Napi::Object widgetObject = info[2].As(); NodeWidgetWrap* widgetWrap = Napi::ObjectWrap::Unwrap(widgetObject); this->instance->setCellWidget(row, column, widgetWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::setItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); Napi::Object itemObject = info[2].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->setItem(row, column, itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::setHorizontalHeaderItem( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); Napi::Object itemObject = info[1].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->setHorizontalHeaderItem(column, itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::setHorizontalHeaderLabels( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Array labelsNapi = info[0].As(); QList list; for (int i = 0; i < labelsNapi.Length(); i++) { Napi::Value labelNapi = labelsNapi[i]; list.append(labelNapi.As().Utf8Value().c_str()); } QStringList labels = QStringList(list); this->instance->setHorizontalHeaderLabels(labels); return env.Null(); } Napi::Value QTableWidgetWrap::setVerticalHeaderItem( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->setVerticalHeaderItem(row, itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::setVerticalHeaderLabels( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Array labelsNapi = info[0].As(); QList list; for (int i = 0; i < labelsNapi.Length(); i++) { Napi::Value labelNapi = labelsNapi[i]; list.append(labelNapi.As().Utf8Value().c_str()); } QStringList labels = QStringList(list); this->instance->setVerticalHeaderLabels(labels); return env.Null(); } Napi::Value QTableWidgetWrap::clear(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); this->instance->clear(); return env.Null(); } Napi::Value QTableWidgetWrap::clearContents(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); this->instance->clearContents(); return env.Null(); } Napi::Value QTableWidgetWrap::insertColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->insertColumn(column); return env.Null(); } Napi::Value QTableWidgetWrap::removeColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->removeColumn(column); return env.Null(); } Napi::Value QTableWidgetWrap::insertRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->insertRow(row); return env.Null(); } Napi::Value QTableWidgetWrap::removeRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->removeRow(row); return env.Null(); } Napi::Value QTableWidgetWrap::scrollToItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); int hintInt = info[1].As().Int32Value(); QAbstractItemView::ScrollHint hint = static_cast(hintInt); this->instance->scrollToItem(itemWrap->getInternalInstance(), hint); return env.Null(); } Napi::Value QTableWidgetWrap::cellWidget(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); QWidget* widget = this->instance->cellWidget(row, column); auto instance = QWidgetWrap::constructor.New({Napi::External::New(env, widget), Napi::Boolean::New(env, true)}); return instance; } Napi::Value QTableWidgetWrap::column(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); int column = this->instance->column(itemWrap->getInternalInstance()); return Napi::Number::New(env, column); } Napi::Value QTableWidgetWrap::currentColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = this->instance->currentColumn(); return Napi::Number::New(env, column); } Napi::Value QTableWidgetWrap::currentItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); QTableWidgetItem* item = this->instance->currentItem(); auto instance = QTableWidgetItemWrap::constructor.New( {Napi::External::New(env, item), Napi::Boolean::New(env, true)}); return instance; } Napi::Value QTableWidgetWrap::currentRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = this->instance->currentRow(); return Napi::Number::New(env, row); } Napi::Value QTableWidgetWrap::findItems(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); std::string napiText = info[0].As().Utf8Value(); QString text = QString::fromUtf8(napiText.c_str()); int flags = info[1].As().Int32Value(); QList items = this->instance->findItems(text, static_cast(flags)); Napi::Array napiItems = Napi::Array::New(env, items.size()); for (int i = 0; i < items.size(); i++) { QTableWidgetItem* item = items[i]; // disable deletion of the native instance for these by passing true auto instance = QTableWidgetItemWrap::constructor.New( {Napi::External::New(env, item), Napi::Boolean::New(env, true)}); napiItems[i] = instance; } return napiItems; } Napi::Value QTableWidgetWrap::isPersistentEditorOpen( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); bool open = this->instance->isPersistentEditorOpen(itemWrap->getInternalInstance()); return Napi::Boolean::New(env, open); } Napi::Value QTableWidgetWrap::item(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); QTableWidgetItem* item = this->instance->item(row, column); auto instance = QTableWidgetItemWrap::constructor.New( {Napi::External::New(env, item), Napi::Boolean::New(env, true)}); return instance; } Napi::Value QTableWidgetWrap::itemAt(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int x = info[0].As().Int32Value(); int y = info[1].As().Int32Value(); QTableWidgetItem* item = this->instance->itemAt(x, y); auto instance = QTableWidgetItemWrap::constructor.New( {Napi::External::New(env, item), Napi::Boolean::New(env, true)}); return instance; } Napi::Value QTableWidgetWrap::openPersistentEditor( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->openPersistentEditor(itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::removeCellWidget(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); this->instance->removeCellWidget(row, column); return env.Null(); } Napi::Value QTableWidgetWrap::row(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); int row = this->instance->row(itemWrap->getInternalInstance()); return Napi::Number::New(env, row); } Napi::Value QTableWidgetWrap::setCurrentCell(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); this->instance->setCurrentCell(row, column); return env.Null(); } Napi::Value QTableWidgetWrap::setCurrentItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); this->instance->setCurrentItem(itemWrap->getInternalInstance()); return env.Null(); } Napi::Value QTableWidgetWrap::sortItems(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); int order = info[1].As().Int32Value(); this->instance->sortItems(column, static_cast(order)); return env.Null(); } Napi::Value QTableWidgetWrap::takeItem(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int column = info[1].As().Int32Value(); this->instance->takeItem(row, column); return env.Null(); } Napi::Value QTableWidgetWrap::visualColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int logicalColumn = info[0].As().Int32Value(); int column = this->instance->visualColumn(logicalColumn); return Napi::Number::New(env, column); } Napi::Value QTableWidgetWrap::visualItemRect(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); Napi::Object itemObject = info[0].As(); QTableWidgetItemWrap* itemWrap = Napi::ObjectWrap::Unwrap(itemObject); QRect rect = this->instance->visualItemRect(itemWrap->getInternalInstance()); auto instance = QRectWrap::constructor.New( {Napi::External::New(env, new QRect(rect))}); return instance; } Napi::Value QTableWidgetWrap::visualRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int logicalRow = info[0].As().Int32Value(); int row = this->instance->visualRow(logicalRow); return Napi::Number::New(env, row); } // FROM TABLEVIEW Napi::Value QTableWidgetWrap::hideColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->hideColumn(column); return env.Null(); } Napi::Value QTableWidgetWrap::hideRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->hideRow(row); return env.Null(); } Napi::Value QTableWidgetWrap::resizeColumnToContents( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->resizeColumnToContents(column); return env.Null(); } Napi::Value QTableWidgetWrap::resizeColumnsToContents( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); this->instance->resizeColumnsToContents(); return env.Null(); } Napi::Value QTableWidgetWrap::resizeRowToContents( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->resizeRowToContents(row); return env.Null(); } Napi::Value QTableWidgetWrap::resizeRowsToContents( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); this->instance->resizeRowsToContents(); return env.Null(); } Napi::Value QTableWidgetWrap::selectColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->selectColumn(column); return env.Null(); } Napi::Value QTableWidgetWrap::selectRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->selectRow(row); return env.Null(); } Napi::Value QTableWidgetWrap::setShowGrid(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); bool show = info[0].As().Value(); this->instance->setShowGrid(show); return env.Null(); } Napi::Value QTableWidgetWrap::showGrid(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); bool show = this->instance->showGrid(); return Napi::Boolean::New(env, show); } Napi::Value QTableWidgetWrap::showColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); this->instance->showColumn(column); return env.Null(); } Napi::Value QTableWidgetWrap::showRow(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); this->instance->showRow(row); return env.Null(); } Napi::Value QTableWidgetWrap::sortByColumn(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); int orderInt = info[1].As().Int32Value(); Qt::SortOrder order = static_cast(orderInt); this->instance->sortByColumn(column, order); return env.Null(); } Napi::Value QTableWidgetWrap::setColumnWidth(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int column = info[0].As().Int32Value(); int width = info[1].As().Int32Value(); this->instance->setColumnWidth(column, width); return env.Null(); } Napi::Value QTableWidgetWrap::setRowHeight(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int row = info[0].As().Int32Value(); int height = info[1].As().Int32Value(); this->instance->setRowHeight(row, height); return env.Null(); } Napi::Value QTableWidgetWrap::columnCount(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int count = static_cast(this->instance->columnCount()); return Napi::Number::New(env, count); } Napi::Value QTableWidgetWrap::rowCount(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int count = static_cast(this->instance->rowCount()); return Napi::Number::New(env, count); } Napi::Value QTableWidgetWrap::setColumnCount(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int count = info[0].As().Int32Value(); this->instance->setColumnCount(count); return env.Null(); } Napi::Value QTableWidgetWrap::setRowCount(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); int count = info[0].As().Int32Value(); this->instance->setRowCount(count); return env.Null(); } Napi::Value QTableWidgetWrap::setSortingEnabled( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); bool enable = info[0].As().Value(); this->instance->setSortingEnabled(enable); return env.Null(); } Napi::Value QTableWidgetWrap::isSortingEnabled(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); bool enabled = this->instance->isSortingEnabled(); return Napi::Boolean::New(env, enabled); }