Skip to content

Commit 3e7684c

Browse files
committed
Refactor, create base components
1 parent a09d61f commit 3e7684c

9 files changed

Lines changed: 282 additions & 71 deletions

File tree

src/lib/angular-nodegui-lib.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88

99
import { NodeguiRendererFactory } from './renderer';
1010
import { QWindowService } from './window';
11+
import { ComponentsMap } from './components/components-map';
1112

1213
@Injectable()
1314
export class NodeguiErrorHandler implements ErrorHandler {
@@ -20,10 +21,11 @@ export class NodeguiErrorHandler implements ErrorHandler {
2021
exports: [ApplicationModule],
2122
providers: [
2223
QWindowService,
24+
ComponentsMap,
2325
{
2426
provide: RendererFactory2,
2527
useClass: NodeguiRendererFactory,
26-
deps: [QWindowService]
28+
deps: [QWindowService, ComponentsMap]
2729
},
2830
{ provide: ErrorHandler, useClass: NodeguiErrorHandler }
2931
]

src/lib/components/button.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { QPushButton } from '@nodegui/nodegui';
2+
import { NgComponent } from './component';
3+
import { RendererStyleFlags2 } from '@angular/core';
4+
import { TextField } from './nodes';
5+
6+
export class NgButton extends QPushButton implements NgComponent {
7+
public static nodeName = 'button';
8+
public parent: any;
9+
10+
public appendChild(newChild: any): void {
11+
if (newChild instanceof TextField) {
12+
newChild.parent = this;
13+
this.setText(newChild.value);
14+
} else {
15+
console.warn('Button may be appendChild only TextField');
16+
}
17+
}
18+
19+
public insertBefore(newChild: any, refChild: any) {}
20+
21+
public setNgAttribute(
22+
name: string,
23+
value: string,
24+
namespace?: string | null
25+
): void {}
26+
27+
public setProperty(name: string, value: any): void {
28+
throw new Error('Method not implemented.');
29+
}
30+
31+
public setStyle(
32+
style: string,
33+
value: any,
34+
flags?: RendererStyleFlags2
35+
): void {
36+
this.setInlineStyle(`${style}:${value}`);
37+
}
38+
39+
public setValue(value: string): void {
40+
this.setText(value);
41+
}
42+
43+
removeAttribute(name: string, namespace?: string): void {
44+
throw new Error('Method not implemented.');
45+
}
46+
removeChild(oldChild: any): void {
47+
throw new Error('Method not implemented.');
48+
}
49+
removeClass(name: string): void {
50+
throw new Error('Method not implemented.');
51+
}
52+
removeStyle(style: string, flags?: RendererStyleFlags2): void {
53+
throw new Error('Method not implemented.');
54+
}
55+
}

src/lib/components/component.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { RendererStyleFlags2 } from '@angular/core';
2+
3+
export interface NgComponent {
4+
appendChild(newChild: any): void;
5+
6+
insertBefore(newChild: any, refChild: any): void;
7+
8+
setNgAttribute(name: string, value: string, namespace?: string | null): void;
9+
10+
setProperty(name: string, value: any): void;
11+
12+
setStyle(style: string, value: any, flags?: RendererStyleFlags2): void;
13+
14+
setValue(value: string): void;
15+
16+
removeAttribute(name: string, namespace?: string | null): void;
17+
18+
removeChild(oldChild: any): void;
19+
20+
removeClass(name: string): void;
21+
22+
removeStyle(style: string, flags?: RendererStyleFlags2): void;
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Injectable } from '@angular/core';
2+
import { NgButton } from './button';
3+
import { NgComponent } from './component';
4+
import { NgWindow } from './window';
5+
import { NgText } from './text';
6+
7+
export type Constructable<T> = new () => T;
8+
export type NgComponentClass = Constructable<NgComponent>;
9+
10+
@Injectable()
11+
export class ComponentsMap {
12+
public map: Map<string, NgComponentClass> = new Map<
13+
string,
14+
NgComponentClass
15+
>();
16+
17+
constructor() {
18+
this.map.set(NgButton.nodeName, NgButton);
19+
this.map.set(NgWindow.nodeName, NgWindow);
20+
this.map.set(NgText.nodeName, NgText);
21+
}
22+
}

src/lib/components/nodes.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { QWidget, QLabel, QPushButton } from '@nodegui/nodegui';
2+
3+
export class TextField extends QWidget {
4+
public parent: QLabel | QPushButton;
5+
constructor(public value: string) {
6+
super();
7+
}
8+
9+
setValue(value: string) {
10+
this.parent.setText(value);
11+
}
12+
}

src/lib/components/text.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { QLabel } from '@nodegui/nodegui';
2+
import { NgComponent } from './component';
3+
import { RendererStyleFlags2 } from '@angular/core';
4+
import { TextField } from './nodes';
5+
6+
export class NgText extends QLabel implements NgComponent {
7+
public static nodeName = 'text';
8+
public parent: any;
9+
10+
public appendChild(newChild: any): void {
11+
if (newChild instanceof TextField) {
12+
newChild.parent = this;
13+
this.setText(newChild.value);
14+
} else {
15+
console.warn('Text may be appendChild only TextField');
16+
}
17+
}
18+
19+
public insertBefore(newChild: any, refChild: any) {}
20+
21+
public setNgAttribute(
22+
name: string,
23+
value: string,
24+
namespace?: string | null
25+
): void {}
26+
27+
public setProperty(name: string, value: any): void {
28+
throw new Error('Method not implemented.');
29+
}
30+
31+
public setStyle(
32+
style: string,
33+
value: any,
34+
flags?: RendererStyleFlags2
35+
): void {
36+
this.setInlineStyle(`${style}:${value}`);
37+
}
38+
39+
public setValue(value: string): void {
40+
this.setText(value);
41+
}
42+
43+
removeAttribute(name: string, namespace?: string): void {
44+
throw new Error('Method not implemented.');
45+
}
46+
removeChild(oldChild: any): void {
47+
throw new Error('Method not implemented.');
48+
}
49+
removeClass(name: string): void {
50+
throw new Error('Method not implemented.');
51+
}
52+
removeStyle(style: string, flags?: RendererStyleFlags2): void {
53+
throw new Error('Method not implemented.');
54+
}
55+
}

src/lib/components/window.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { FlexLayout, QMainWindow } from '@nodegui/nodegui';
2+
import { NgComponent } from './component';
3+
import { RendererStyleFlags2 } from '@angular/core';
4+
5+
export class NgWindow extends FlexLayout implements NgComponent {
6+
public static nodeName = 'window';
7+
public parent: QMainWindow;
8+
9+
public appendChild(newChild: any): void {
10+
this.addWidget(newChild);
11+
}
12+
13+
public insertBefore(newChild: any, refChild: any) {}
14+
15+
public setNgAttribute(
16+
name: string,
17+
value: string,
18+
namespace?: string | null
19+
): void {
20+
if (name === 'title') {
21+
this.parent.setWindowTitle(value);
22+
}
23+
}
24+
25+
public setProperty(name: string, value: any): void {
26+
throw new Error('Method not implemented.');
27+
}
28+
29+
public setStyle(
30+
style: string,
31+
value: any,
32+
flags?: RendererStyleFlags2
33+
): void {
34+
throw new Error('Method not implemented.');
35+
}
36+
37+
public setValue(value: string): void {
38+
throw new Error('Method not implemented.');
39+
}
40+
41+
removeAttribute(name: string, namespace?: string): void {
42+
throw new Error('Method not implemented.');
43+
}
44+
removeChild(oldChild: any): void {
45+
throw new Error('Method not implemented.');
46+
}
47+
removeClass(name: string): void {
48+
throw new Error('Method not implemented.');
49+
}
50+
removeStyle(style: string, flags?: RendererStyleFlags2): void {
51+
throw new Error('Method not implemented.');
52+
}
53+
}

src/lib/nodes.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)