Skip to content

Commit 7ca7b72

Browse files
committed
Adds Spinbox, scrollarea and dial to react-nodegui
1 parent a42dd94 commit 7ca7b72

File tree

4 files changed

+196
-0
lines changed

4 files changed

+196
-0
lines changed

src/components/Dial/index.ts

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { registerComponent } from "../config";
2+
import { QDial } from "@nodegui/nodegui";
3+
import { ViewProps, setProps as setViewProps } from "../View";
4+
5+
export interface DialProps extends ViewProps {
6+
notchesVisible?: boolean;
7+
wrapping?: boolean;
8+
notchTarget?: number;
9+
}
10+
11+
export const setProps = (
12+
widget: QDial,
13+
newProps: DialProps,
14+
oldProps: DialProps
15+
) => {
16+
const setter: DialProps = {
17+
set notchesVisible(notchesVisible: boolean) {
18+
widget.setNotchesVisible(notchesVisible);
19+
},
20+
set wrapping(wrapping: boolean) {
21+
widget.setWrapping(wrapping);
22+
},
23+
set notchTarget(notchTarget: number) {
24+
widget.setNotchTarget(notchTarget);
25+
}
26+
};
27+
Object.assign(setter, newProps);
28+
setViewProps(widget, newProps, oldProps);
29+
};
30+
31+
export const Dial = registerComponent<DialProps>({
32+
id: "dial",
33+
getContext() {
34+
return {};
35+
},
36+
shouldSetTextContent: () => {
37+
return true;
38+
},
39+
createInstance: newProps => {
40+
const widget = new QDial();
41+
setProps(widget, newProps, {});
42+
return widget;
43+
},
44+
finalizeInitialChildren: () => {
45+
return false;
46+
},
47+
commitMount: (instance, newProps, internalInstanceHandle) => {
48+
return;
49+
},
50+
prepareUpdate: (
51+
instance,
52+
oldProps,
53+
newProps,
54+
rootContainerInstance,
55+
hostContext
56+
) => {
57+
return true;
58+
},
59+
commitUpdate: (instance, updatePayload, oldProps, newProps, finishedWork) => {
60+
setProps(instance as QDial, newProps, oldProps);
61+
}
62+
});

src/components/ScrollArea/index.ts

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { registerComponent } from "../config";
2+
import { QScrollArea } from "@nodegui/nodegui";
3+
import { ViewProps, setProps as setViewProps } from "../View";
4+
import { ReactElement } from "react";
5+
6+
export interface ScrollAreaProps extends ViewProps {
7+
children?: ReactElement;
8+
}
9+
10+
export const setProps = (
11+
widget: QScrollArea,
12+
newProps: ScrollAreaProps,
13+
oldProps: ScrollAreaProps
14+
) => {
15+
const setter: ScrollAreaProps = {
16+
set children(childWidget: ReactElement) {
17+
console.log(childWidget, "childWidget");
18+
// widget.setWidget(childWidget);
19+
}
20+
};
21+
Object.assign(setter, newProps);
22+
setViewProps(widget, newProps, oldProps);
23+
};
24+
25+
export const ScrollArea = registerComponent<ScrollAreaProps>({
26+
id: "ScrollArea",
27+
getContext() {
28+
return {};
29+
},
30+
shouldSetTextContent: () => {
31+
return true;
32+
},
33+
createInstance: newProps => {
34+
const widget = new QScrollArea();
35+
setProps(widget, newProps, {});
36+
return widget;
37+
},
38+
finalizeInitialChildren: () => {
39+
return false;
40+
},
41+
commitMount: (instance, newProps, internalInstanceHandle) => {
42+
return;
43+
},
44+
prepareUpdate: (
45+
instance,
46+
oldProps,
47+
newProps,
48+
rootContainerInstance,
49+
hostContext
50+
) => {
51+
return true;
52+
},
53+
commitUpdate: (instance, updatePayload, oldProps, newProps, finishedWork) => {
54+
setProps(instance as QScrollArea, newProps, oldProps);
55+
}
56+
});

src/components/SpinBox/index.ts

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { registerComponent } from "../config";
2+
import { QSpinBox } from "@nodegui/nodegui";
3+
import { ViewProps, setProps as setViewProps } from "../View";
4+
5+
type Range = {
6+
minimum: number;
7+
maximum: number;
8+
};
9+
10+
export interface SpinBoxProps extends ViewProps {
11+
prefix?: string;
12+
suffix?: string;
13+
singleStep?: number;
14+
range?: Range;
15+
value?: number;
16+
}
17+
18+
export const setProps = (
19+
widget: QSpinBox,
20+
newProps: SpinBoxProps,
21+
oldProps: SpinBoxProps
22+
) => {
23+
const setter: SpinBoxProps = {
24+
set prefix(prefix: string) {
25+
widget.setPrefix(prefix);
26+
},
27+
set suffix(suffix: string) {
28+
widget.setSuffix(suffix);
29+
},
30+
set singleStep(step: number) {
31+
widget.setSingleStep(step);
32+
},
33+
set range(range: Range) {
34+
widget.setRange(range.minimum, range.maximum);
35+
},
36+
set value(value: number) {
37+
widget.setValue(value);
38+
}
39+
};
40+
Object.assign(setter, newProps);
41+
setViewProps(widget, newProps, oldProps);
42+
};
43+
44+
export const SpinBox = registerComponent<SpinBoxProps>({
45+
id: "SpinBox",
46+
getContext() {
47+
return {};
48+
},
49+
shouldSetTextContent: () => {
50+
return true;
51+
},
52+
createInstance: newProps => {
53+
const widget = new QSpinBox();
54+
setProps(widget, newProps, {});
55+
return widget;
56+
},
57+
finalizeInitialChildren: () => {
58+
return false;
59+
},
60+
commitMount: (instance, newProps, internalInstanceHandle) => {
61+
return;
62+
},
63+
prepareUpdate: (
64+
instance,
65+
oldProps,
66+
newProps,
67+
rootContainerInstance,
68+
hostContext
69+
) => {
70+
return true;
71+
},
72+
commitUpdate: (instance, updatePayload, oldProps, newProps, finishedWork) => {
73+
setProps(instance as QSpinBox, newProps, oldProps);
74+
}
75+
});

src/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ export { LineEdit } from "./components/LineEdit";
99
export { PlainTextEdit } from "./components/PlainTextEdit";
1010
export { ProgressBar } from "./components/ProgressBar";
1111
export { RadioButton } from "./components/RadioButton";
12+
export { Dial } from "./components/Dial";
13+
export { SpinBox } from "./components/SpinBox";
14+
export { ScrollArea } from "./components/ScrollArea";
1215
export { useEventHandler } from "./hooks";

0 commit comments

Comments
 (0)