nodeguy/src/demo.ts
Atul R 36329a44b3
Experimental menu and tests (#139)
* Adds basic tests for window and label

* Adds few test cases for QWidget

* Adds working tests setup

* Adds inital code for menus
2019-10-07 19:24:17 +02:00

173 lines
4.6 KiB
TypeScript

import {
QMainWindow,
QLabel,
QCheckBox,
QLineEdit,
QPushButton,
QProgressBar,
QRadioButton,
FlexLayout,
QWidget,
QIcon,
QDial,
QPlainTextEdit,
QTabWidget,
QGridLayout,
QScrollArea,
QPixmap,
CursorShape,
WindowState,
QTextOptionWrapMode,
QCheckBoxEvents,
QSystemTrayIcon,
ReadWriteImageFormats,
QPushButtonEvents
} from "./index";
import { ok, equal } from "assert";
import { existsSync, unlinkSync, readFileSync } from "fs";
import { resolve } from "path";
import { QMenuBar } from "./lib/QtWidgets/QMenuBar";
import { QMenu } from "./lib/QtWidgets/QMenu";
const win = new QMainWindow();
const label1 = new QLabel();
label1.setText("Hello world 1 🧙");
label1.setInlineStyle("font-size: 20px;");
label1.setCursor(CursorShape.ForbiddenCursor);
const label2 = new QLabel();
label2.setText("Hello world 2 💻");
label2.setInlineStyle("font-size: 20px;");
label2.setCursor(CursorShape.ForbiddenCursor);
const checkbox = new QCheckBox();
checkbox.setText("Check me out?");
checkbox.setObjectName("check");
checkbox.setChecked(true);
checkbox.addEventListener(QCheckBoxEvents.toggled, checked => {
console.log(`${checked ? "checked" : "unchecked"}`);
label1.setInlineStyle(`color: ${checked ? "green" : "red"}`);
});
const dial = new QDial();
checkbox.setObjectName("dial");
const lineEdit = new QLineEdit();
lineEdit.setPlaceholderText("Enter your thoughts here");
lineEdit.setObjectName("editable");
const button = new QPushButton();
button.setText("Push Push Push!");
button.setObjectName("btn");
const nodeguiLogo = new QIcon(
resolve(__dirname, "../extras/assets/nodegui.png")
);
const icon = new QIcon(resolve(__dirname, "../extras/assets/start_icon.png"));
button.setIcon(icon);
const tabs = new QTabWidget();
tabs.setTabsClosable(true);
const tab1 = new QWidget();
const tab2 = new QWidget();
tab1.setLayout(new QGridLayout());
tab2.setLayout(new QGridLayout());
if (tab1.layout && tab2.layout) {
tab1.layout.addWidget(label1);
tab2.layout.addWidget(label2);
}
tabs.addTab(tab1, icon, "Tab 1");
tabs.addTab(tab2, icon, "Tab 2");
const progressBar = new QProgressBar();
progressBar.setValue(6);
equal(progressBar.value(), 6);
progressBar.setMinimum(1);
progressBar.setMaximum(15);
const radioButton = new QRadioButton();
radioButton.setText("Roger that!");
const rootView = new QWidget();
rootView.setObjectName("root");
rootView.setLayout(new FlexLayout());
const textEdit = new QPlainTextEdit();
textEdit.setPlainText("Hello");
textEdit.setWordWrapMode(QTextOptionWrapMode.NoWrap);
const scrollArea = new QScrollArea();
scrollArea.setInlineStyle("flex: 1; width:'100%';");
const imageLabel = new QLabel();
const pixmap = new QPixmap(resolve(__dirname, "../extras/assets/kitchen.png"));
imageLabel.setPixmap(pixmap);
scrollArea.setWidget(imageLabel);
function testQPixmapSave(fileName: string, format?: ReadWriteImageFormats) {
try {
existsSync(fileName) && unlinkSync(fileName);
ok(!existsSync(fileName));
equal(pixmap.save(fileName, format), true);
ok(existsSync(fileName));
// ideally we want to use file-type, jimp or magica to verify tmp.png has the correct encoding and/or is identical to source img.
ok(readFileSync(fileName).byteLength > 1000);
} catch (error) {
console.error("QPixmap.save test failed", error, error.stack);
} finally {
unlinkSync(fileName);
}
}
testQPixmapSave("tmp.png");
testQPixmapSave("tmp.jpg");
testQPixmapSave("tmp_jpg", "JPG");
testQPixmapSave("tmp_bmp", "BMP");
const trayIcon = new QIcon(
resolve(__dirname, "../extras/assets/nodegui_white.png")
);
const tray = new QSystemTrayIcon();
tray.setIcon(trayIcon);
tray.show();
if (rootView.layout) {
rootView.layout.addWidget(tabs);
rootView.layout.addWidget(checkbox);
rootView.layout.addWidget(radioButton);
rootView.layout.addWidget(lineEdit);
rootView.layout.addWidget(button);
rootView.layout.addWidget(progressBar);
rootView.layout.addWidget(textEdit);
rootView.layout.addWidget(scrollArea);
rootView.layout.addWidget(dial);
}
const menuBar = new QMenuBar();
const menu = new QMenu();
win.setMenuBar(menuBar);
menu.setTitle("hello");
menuBar.addMenu(menu);
menuBar.setNativeMenuBar(false);
win.setCentralWidget(rootView);
win.setStyleSheet(`
#root {
flex: 1;
height: '100%';
align-items: 'center';
justify-content: 'space-around';
}
`);
win.setWindowIcon(nodeguiLogo);
win.setWindowTitle("NodeGUI Demo");
win.resize(400, 700);
win.show();
win.setWindowState(WindowState.WindowActive);
(global as any).win = win; // To prevent win from being garbage collected.
(global as any).systemTray = tray; // To prevent system tray from being garbage collected.