Skip to content

Commit aeafb03

Browse files
committed
Adds minSize, maxSize,size and pos
And renames window's viewProps to centralWidgetProps
1 parent ab8775f commit aeafb03

File tree

3 files changed

+68
-39
lines changed

3 files changed

+68
-39
lines changed

src/components/View/index.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,38 @@ type Geometry = {
1414
width: number;
1515
height: number;
1616
};
17+
18+
type ViewSize = {
19+
width: number;
20+
height: number;
21+
};
22+
type ViewSizeWithFixed = ViewSize & {
23+
fixed?: boolean;
24+
};
25+
type ViewPos = {
26+
x: number;
27+
y: number;
28+
};
1729
export interface ListenerMap {
1830
[key: string]: (payload?: any) => void;
1931
}
2032
export interface ViewProps {
2133
visible?: boolean;
2234
styleSheet?: string;
23-
style?: string; // Inline style from NodeGui
35+
style?: string;
2436
geometry?: Geometry;
2537
id?: string;
2638
mouseTracking?: boolean;
2739
enabled?: boolean;
2840
windowOpacity?: Number;
2941
windowTitle?: string;
3042
windowState?: WindowState;
31-
windowIcon?: QIcon;
3243
cursor?: CursorShape | QCursor;
44+
windowIcon?: QIcon;
45+
minSize?: ViewSize;
46+
maxSize?: ViewSize;
47+
size?: ViewSizeWithFixed;
48+
pos?: ViewPos;
3349
on?: ListenerMap;
3450
ref?: any;
3551
}
@@ -84,6 +100,29 @@ export const setProps = (
84100
set windowIcon(icon: QIcon) {
85101
widget.setWindowIcon(icon);
86102
},
103+
set minSize(size: ViewSize) {
104+
widget.setMinimumSize(size.width, size.height);
105+
},
106+
set maxSize(size: ViewSize) {
107+
widget.setMaximumSize(size.width, size.height);
108+
},
109+
set size(size: ViewSizeWithFixed) {
110+
if (size.fixed) {
111+
widget.setFixedSize(size.width, size.height);
112+
} else {
113+
const minSize = newProps.minSize || { width: 0, height: 0 };
114+
const maxSize = newProps.maxSize || {
115+
width: 16777215,
116+
height: 16777215
117+
};
118+
widget.setMinimumSize(minSize.width, minSize.height);
119+
widget.setMaximumSize(maxSize.width, maxSize.height);
120+
widget.resize(size.width, size.height);
121+
}
122+
},
123+
set pos(position: ViewPos) {
124+
widget.move(position.x, position.y);
125+
},
87126
set on(listenerMap: ListenerMap) {
88127
const listenerMapLatest = Object.assign({}, listenerMap);
89128
const oldListenerMap = Object.assign({}, oldProps.on);

src/components/Window/index.ts

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
import { registerComponent } from "../config";
22
import { QMainWindow, QWidget, FlexLayout } from "@nodegui/nodegui";
33
import { ViewProps, setProps as setViewProps } from "../View";
4-
5-
type WindowSize = {
6-
width: number;
7-
height: number;
8-
};
94
interface WindowProps extends ViewProps {
10-
viewProps?: ViewProps;
11-
fixedSize?: WindowSize | null;
12-
minSize?: WindowSize;
13-
maxSize?: WindowSize;
5+
centralWidgetProps?: ViewProps;
146
}
157

168
const setProps = (
@@ -19,32 +11,17 @@ const setProps = (
1911
oldProps: WindowProps
2012
) => {
2113
const setter: WindowProps = {
22-
set fixedSize(size: WindowSize | null) {
23-
if (size) {
24-
window.setFixedSize(size.width, size.height);
25-
} else {
26-
const minSize = newProps.minSize || { width: 0, height: 0 };
27-
const maxSize = newProps.maxSize || {
28-
width: 16777215,
29-
height: 16777215
30-
};
31-
window.setMinimumSize(minSize.width, minSize.height);
32-
window.setMaximumSize(maxSize.width, maxSize.height);
33-
}
34-
},
35-
set minSize(size: WindowSize) {
36-
window.setMinimumSize(size.width, size.height);
37-
},
38-
set maxSize(size: WindowSize) {
39-
window.setMaximumSize(size.width, size.height);
40-
},
41-
set viewProps(viewProps: object) {
14+
set centralWidgetProps(centralWidgetProps: object) {
4215
if (window.centralWidget) {
43-
const oldViewProps = oldProps.viewProps || {};
44-
setViewProps(window.centralWidget, viewProps, oldViewProps);
16+
const oldcentralWidgetProps = oldProps.centralWidgetProps || {};
17+
setViewProps(
18+
window.centralWidget,
19+
centralWidgetProps,
20+
oldcentralWidgetProps
21+
);
4522
} else {
4623
console.warn(
47-
"Trying to set wiewProps for main window but no central widget set."
24+
"Trying to set viewProps for main window but no central widget set."
4825
);
4926
}
5027
}

src/demo.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { Renderer, Window } from "./index";
2-
import React, { useEffect, useRef } from "react";
3-
import { QMainWindow } from "@nodegui/nodegui";
2+
import React, { useEffect, useRef, useState } from "react";
3+
import { QMainWindow, QPushButtonEvents } from "@nodegui/nodegui";
4+
import { Button } from "./components/Button";
5+
import { useEventHandler } from "./hooks";
46

57
const App = () => {
68
const winRef = useRef<QMainWindow>(null);
@@ -9,11 +11,22 @@ const App = () => {
911
winRef.current.resize(800, 450);
1012
}
1113
}, []);
14+
const [resizeable, setResizeable] = useState(true);
15+
const btnHandler = useEventHandler(
16+
{
17+
[QPushButtonEvents.clicked]: () => {
18+
console.log("clicked");
19+
setResizeable(!resizeable);
20+
}
21+
},
22+
[resizeable]
23+
);
24+
const size = { width: 200, height: 200, fixed: !resizeable };
1225

1326
return (
14-
<>
15-
<Window ref={winRef} styleSheet={styleSheet}></Window>
16-
</>
27+
<Window size={size} ref={winRef} styleSheet={styleSheet}>
28+
<Button text={resizeable ? "❌" : "✅"} on={btnHandler} />
29+
</Window>
1730
);
1831
};
1932

0 commit comments

Comments
 (0)