Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressDialog/qprogressdialog_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStackedLayout/qstackedlayout_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QStackedWidget/qstackedwidget_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabBar/qtabbar_wrap.cpp"
"${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp"
Expand Down Expand Up @@ -206,6 +207,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollBar/nscrollbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStackedLayout/nstackedlayout.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QStackedWidget/nstackedwidget.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabBar/ntabbar.hpp"
"${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#pragma once
#include <QStackedLayout>

#include "Extras/Export/export.h"
#include "QtWidgets/QLayout/qlayout_macro.h"
#include "core/Events/eventwidget_macro.h"

class DLL_EXPORT NStackedLayout : public QStackedLayout, public EventWidget {
Q_OBJECT
public:
EVENTWIDGET_IMPLEMENTATIONS(QStackedLayout)
using QStackedLayout::QStackedLayout;
virtual void connectSignalsToEventEmitter() {
QLAYOUT_SIGNALS
QObject::connect(this, &QStackedLayout::currentChanged, [=](int index) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call({Napi::String::New(env, "currentChanged"),
Napi::Value::From(env, index)});
});
QObject::connect(this, &QStackedLayout::widgetRemoved, [=](int index) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call({Napi::String::New(env, "widgetRemoved"),
Napi::Value::From(env, index)});
});
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#pragma once

#include <napi.h>

#include <QPointer>
#include <QStackedLayout>

#include "Extras/Export/export.h"
#include "QtWidgets/QLayout/qlayout_macro.h"
#include "QtWidgets/QStackedLayout/nstackedlayout.hpp"

class DLL_EXPORT QStackedLayoutWrap
: public Napi::ObjectWrap<QStackedLayoutWrap> {
QLAYOUT_WRAPPED_METHODS_DECLARATION
private:
QPointer<QStackedLayout> instance;

public:
static Napi::Object init(Napi::Env env, Napi::Object exports);
QStackedLayoutWrap(const Napi::CallbackInfo& info);
~QStackedLayoutWrap();
QStackedLayout* getInternalInstance();
// class constructor
static Napi::FunctionReference constructor;
// wrapped methods
Napi::Value addWidget(const Napi::CallbackInfo& info);
Napi::Value removeWidget(const Napi::CallbackInfo& info);
Napi::Value setCurrentIndex(const Napi::CallbackInfo& info);
Napi::Value insertWidget(const Napi::CallbackInfo& info);
Napi::Value setCurrentWidget(const Napi::CallbackInfo& info);
Napi::Value currentIndex(const Napi::CallbackInfo& info);
Napi::Value currentWidget(const Napi::CallbackInfo& info);
Napi::Value widget(const Napi::CallbackInfo& info);
Napi::Value count(const Napi::CallbackInfo& info);
Napi::Value indexOf(const Napi::CallbackInfo& info);
Napi::Value setStackingMode(const Napi::CallbackInfo& info);
Napi::Value stackingMode(const Napi::CallbackInfo& info);
};
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,4 @@ class DLL_EXPORT QTableWidgetWrap : public Napi::ObjectWrap<QTableWidgetWrap> {
Napi::Value rowCount(const Napi::CallbackInfo& info);
Napi::Value setColumnCount(const Napi::CallbackInfo& info);
Napi::Value setRowCount(const Napi::CallbackInfo& info);

};
177 changes: 177 additions & 0 deletions src/cpp/lib/QtWidgets/QStackedLayout/qstackedlayout_wrap.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#include "QtWidgets/QStackedLayout/qstackedlayout_wrap.h"

#include "Extras/Utils/nutils.h"
#include "QtWidgets/QWidget/qwidget_wrap.h"

Napi::FunctionReference QStackedLayoutWrap::constructor;

Napi::Object QStackedLayoutWrap::init(Napi::Env env, Napi::Object exports) {
Napi::HandleScope scope(env);
char CLASSNAME[] = "QStackedLayout";
Napi::Function func = DefineClass(
env, CLASSNAME,
{InstanceMethod("addWidget", &QStackedLayoutWrap::addWidget),
InstanceMethod("removeWidget", &QStackedLayoutWrap::removeWidget),
InstanceMethod("setCurrentIndex", &QStackedLayoutWrap::setCurrentIndex),
InstanceMethod("insertWidget", &QStackedLayoutWrap::insertWidget),
InstanceMethod("setCurrentWidget",
&QStackedLayoutWrap::setCurrentWidget),
InstanceMethod("currentIndex", &QStackedLayoutWrap::currentIndex),
InstanceMethod("currentWidget", &QStackedLayoutWrap::currentWidget),
InstanceMethod("widget", &QStackedLayoutWrap::widget),
InstanceMethod("count", &QStackedLayoutWrap::count),
InstanceMethod("indexOf", &QStackedLayoutWrap::indexOf),
InstanceMethod("setStackingMode", &QStackedLayoutWrap::setStackingMode),
InstanceMethod("stackingMode", &QStackedLayoutWrap::stackingMode),
QLAYOUT_WRAPPED_METHODS_EXPORT_DEFINE(QStackedLayoutWrap)});
constructor = Napi::Persistent(func);
exports.Set(CLASSNAME, func);
QOBJECT_REGISTER_WRAPPER(QStackedLayout, QStackedLayoutWrap);
return exports;
}

QStackedLayout* QStackedLayoutWrap::getInternalInstance() {
return this->instance;
}

QStackedLayoutWrap::~QStackedLayoutWrap() {
extrautils::safeDelete(this->instance);
}

QStackedLayoutWrap::QStackedLayoutWrap(const Napi::CallbackInfo& info)
: Napi::ObjectWrap<QStackedLayoutWrap>(info) {
Napi::Env env = info.Env();
size_t argCount = info.Length();
if (argCount == 0) {
// --- Construct a new instance
this->instance = new NStackedLayout();
} else if (argCount == 1) {
if (info[0].IsExternal()) {
// --- Wrap a given C++ instance
this->instance = info[0].As<Napi::External<QStackedLayout>>().Data();
} else {
// --- Construct a new instance and pass a parent
Napi::Object parentObject = info[0].As<Napi::Object>();
NodeWidgetWrap* parentWidgetWrap =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(parentObject);
this->instance =
new NStackedLayout(parentWidgetWrap->getInternalInstance());
}
} else {
Napi::TypeError::New(
env,
"NodeGui: QStackedLayoutWrap: Wrong number of arguments to constructor")
.ThrowAsJavaScriptException();
}
this->rawData = extrautils::configureQObject(this->getInternalInstance());
}

Napi::Value QStackedLayoutWrap::addWidget(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* widget =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
this->instance->addWidget(widget->getInternalInstance());

return env.Null();
}

Napi::Value QStackedLayoutWrap::removeWidget(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* widget =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
this->instance->removeWidget(widget->getInternalInstance());
return env.Null();
}

Napi::Value QStackedLayoutWrap::setCurrentIndex(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int index = info[0].As<Napi::Number>().Int32Value();
this->instance->setCurrentIndex(index);
return env.Null();
}

Napi::Value QStackedLayoutWrap::insertWidget(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
int index = info[0].As<Napi::Number>().Int32Value();
Napi::Object qwidgetObject = info[1].As<Napi::Object>();
NodeWidgetWrap* widget =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
this->instance->insertWidget(index, widget->getInternalInstance());
return env.Null();
}

Napi::Value QStackedLayoutWrap::setCurrentWidget(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* widget =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
this->instance->setCurrentWidget(widget->getInternalInstance());
return env.Null();
}

Napi::Value QStackedLayoutWrap::currentIndex(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);

return Napi::Number::New(env,
static_cast<int>(this->instance->currentIndex()));
}

Napi::Value QStackedLayoutWrap::currentWidget(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
QWidget* widget = this->instance->currentWidget();
auto instance = WrapperCache::instance.getWrapper(env, widget);
return instance;
}

Napi::Value QStackedLayoutWrap::widget(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int index = info[0].As<Napi::Number>().Int32Value();
QWidget* widget = this->instance->widget(index);
auto instance = WrapperCache::instance.getWrapper(env, widget);
return instance;
}

Napi::Value QStackedLayoutWrap::count(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);

return Napi::Number::New(env, static_cast<int>(this->instance->count()));
}

Napi::Value QStackedLayoutWrap::indexOf(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* widget =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);

return Napi::Number::New(
env,
static_cast<int>(this->instance->indexOf(widget->getInternalInstance())));
}

Napi::Value QStackedLayoutWrap::setStackingMode(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int stackingModeInt = info[0].As<Napi::Number>().Int32Value();
QStackedLayout::StackingMode stackingMode =
static_cast<QStackedLayout::StackingMode>(stackingModeInt);
this->instance->setStackingMode(stackingMode);
return env.Null();
}

Napi::Value QStackedLayoutWrap::stackingMode(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);

QStackedLayout::StackingMode mode = this->instance->stackingMode();

return Napi::Number::New(env, static_cast<int>(mode));
}
1 change: 0 additions & 1 deletion src/cpp/lib/QtWidgets/QTableWidget/qtablewidget_wrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -498,4 +498,3 @@ Napi::Value QTableWidgetWrap::setRowCount(const Napi::CallbackInfo& info) {
this->instance->setRowCount(count);
return env.Null();
}

2 changes: 2 additions & 0 deletions src/cpp/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
#include "QtWidgets/QSlider/qslider_wrap.h"
#include "QtWidgets/QSpinBox/qspinbox_wrap.h"
#include "QtWidgets/QSplitter/qsplitter_wrap.h"
#include "QtWidgets/QStackedLayout/qstackedlayout_wrap.h"
#include "QtWidgets/QStackedWidget/qstackedwidget_wrap.h"
#include "QtWidgets/QStandardItem/qstandarditem_wrap.h"
#include "QtWidgets/QStandardItemModel/qstandarditemmodel_wrap.h"
Expand Down Expand Up @@ -200,6 +201,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) {
QProgressBarWrap::init(env, exports);
QProgressDialogWrap::init(env, exports);
QRadioButtonWrap::init(env, exports);
QStackedLayoutWrap::init(env, exports);
QStackedWidgetWrap::init(env, exports);
QTabBarWrap::init(env, exports);
QTabWidgetWrap::init(env, exports);
Expand Down
78 changes: 45 additions & 33 deletions src/demo.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,60 @@
import { QMainWindow } from './lib/QtWidgets/QMainWindow';
import { QLabel } from './lib/QtWidgets/QLabel';
import { FlexLayout } from './lib/core/FlexLayout';
import { QPushButton } from './lib/QtWidgets/QPushButton';
import { QWidget } from './lib/QtWidgets/QWidget';
import { QBoxLayout } from './lib/QtWidgets/QBoxLayout';
import { Direction } from './lib/QtEnums';
import { QStackedLayout } from './lib/QtWidgets/QStackedLayout';
import { QComboBox } from './lib/QtWidgets/QComboBox';

// Create main window
const win = new QMainWindow();
win.setWindowTitle('Hello World');
win.setWindowTitle('QStackedLayout');

// Create central widget and layout
const centralWidget = new QWidget();
centralWidget.setObjectName('myroot');
const rootLayout = new FlexLayout();
const rootLayout = new QBoxLayout(Direction.TopToBottom);
centralWidget.setLayout(rootLayout);

const label = new QLabel();
label.setObjectName('mylabel');
label.setText('Hello');

const button = new QPushButton();
button.setText('Hello');
const label2 = new QLabel();
label2.setText('World');
label2.setInlineStyle(`
color: red;
`);

rootLayout.addWidget(label);
rootLayout.addWidget(button);
rootLayout.addWidget(label2);
// Create stacked layout
const stackedLayout = new QStackedLayout();

// Create pages with labels
const createPage = (text: string) => {
const page = new QWidget();
const layout = new FlexLayout();
page.setLayout(layout);
const label = new QLabel();
label.setText(text);
layout.addWidget(label);
return page;
};

stackedLayout.addWidget(createPage('This is page 1'));
stackedLayout.addWidget(createPage('This is page 2'));
stackedLayout.addWidget(createPage('This is page 3'));

// Create combo box to switch pages
const combobox = new QComboBox();
combobox.addItems(['Page 1', 'Page 2', 'Page 3']);
combobox.addEventListener('currentIndexChanged', (index) => stackedLayout.setCurrentIndex(index));

// Add combo box and stacked layout to root layout
rootLayout.addWidget(combobox);
rootLayout.addLayout(stackedLayout);

// Create and update label for current index
const currentIndexLabel = new QLabel();
currentIndexLabel.setText(`Current Index: ${stackedLayout.currentIndex()}`);
stackedLayout.addEventListener('currentChanged', (index) => {
currentIndexLabel.setText(`Current Index: ${index}`);
});
rootLayout.addWidget(currentIndexLabel);

// Set up and show main window
win.setCentralWidget(centralWidget);
win.setStyleSheet(
`
#myroot {
background-color: #009688;
height: '100%';
align-items: 'center';
justify-content: 'center';
}
#mylabel {
font-size: 16px;
font-weight: bold;
padding: 1;
}
`,
);
win.setMinimumSize(300, 100);
win.show();

(global as any).win = win;
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ export {
export { QStyleFactory } from './lib/QtWidgets/QStyleFactory';
export { QSizePolicyPolicy, QSizePolicyPolicyFlag } from './lib/QtWidgets/QSizePolicy';
export { QAbstractItemDelegate } from './lib/QtWidgets/QAbstractItemDelegate';

export { QStackedLayout, QStackedLayoutSignals } from './lib/QtWidgets/QStackedLayout';
// Core
export { QAbstractItemModel } from './lib/QtCore/QAbstractItemModel';
export { QAbstractTableModel } from './lib/QtCore/QAbstractTableModel';
Expand Down
4 changes: 4 additions & 0 deletions src/lib/QtEnums/StackingMode/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum StackingMode {
StackOne = 0,
StackAll = 1,
}
Loading