gtk3-node 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/CHECKLIST.md +76 -0
- package/HOWTO-COMPILE.md +72 -0
- package/README.md +142 -0
- package/README_es.md +115 -0
- package/REFUERZO.md +103 -0
- package/ROADMAP.md +73 -0
- package/ejemplos/README.md +21 -0
- package/ejemplos/avanzados/README.md +12 -0
- package/ejemplos/avanzados/ejemplo_completo.js +55 -0
- package/ejemplos/avanzados/ejemplo_scroll.js +44 -0
- package/ejemplos/basicos/README.md +11 -0
- package/ejemplos/basicos/ejemplo_final.js +31 -0
- package/ejemplos/intermedios/README.md +12 -0
- package/ejemplos/intermedios/ejemplo_label.js +33 -0
- package/ejemplos/intermedios/ejemplo_label_boton.js +41 -0
- package/index.js +110 -0
- package/package.json +62 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# CHANGELOG - Extensión GTK3 para Node.js
|
|
2
|
+
|
|
3
|
+
## [Versión 1.0.0] - 2026-02-14
|
|
4
|
+
|
|
5
|
+
### Añadido
|
|
6
|
+
- Implementación inicial de la extensión GTK3 para Node.js
|
|
7
|
+
- Soporte para creación de interfaces gráficas con GTK3
|
|
8
|
+
- Widget Button con soporte para eventos y callbacks
|
|
9
|
+
- Widget Window para contenedores de interfaz
|
|
10
|
+
- Widget Label para mostrar texto estático
|
|
11
|
+
- Widget Box para layouts horizontales y verticales
|
|
12
|
+
- Widget Scroll para contenedores con barras de desplazamiento
|
|
13
|
+
- Estructura modular para futuras expansiones
|
|
14
|
+
- Ejemplos organizados por niveles de complejidad
|
|
15
|
+
- Principio DRY aplicado en la arquitectura
|
|
16
|
+
|
|
17
|
+
### Características
|
|
18
|
+
- Integración nativa con GTK3
|
|
19
|
+
- Sistema de eventos con callbacks
|
|
20
|
+
- Soporte para interfaces gráficas completas
|
|
21
|
+
- Estructura modular y extensible
|
|
22
|
+
|
|
23
|
+
### Documentación
|
|
24
|
+
- README principal
|
|
25
|
+
- Documentación para cada widget
|
|
26
|
+
- Ejemplos básicos, intermedios y avanzados
|
|
27
|
+
- Guía de compilación (HOWTO-COMPILE.md)
|
|
28
|
+
|
|
29
|
+
### Notas Técnicas
|
|
30
|
+
- Basado en N-API para compatibilidad con múltiples versiones de Node.js
|
|
31
|
+
- Compilación con node-gyp
|
|
32
|
+
- Integración con GTK3 3.x
|
|
33
|
+
- Soporte para Linux (actualmente)
|
package/CHECKLIST.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Checklist de Widgets Implementados
|
|
2
|
+
|
|
3
|
+
## Widgets Implementados
|
|
4
|
+
|
|
5
|
+
### ✅ Button
|
|
6
|
+
- [x] Creación de botones con texto
|
|
7
|
+
- [x] Soporte para eventos de clic
|
|
8
|
+
- [x] Cambio de texto dinámico
|
|
9
|
+
- [x] Callbacks funcionales
|
|
10
|
+
- [x] Documentación completa
|
|
11
|
+
- [x] Ejemplos funcionales
|
|
12
|
+
|
|
13
|
+
### ✅ Window
|
|
14
|
+
- [x] Creación de ventanas
|
|
15
|
+
- [x] Configuración de tamaño y título
|
|
16
|
+
- [x] Soporte para agregar widgets
|
|
17
|
+
- [x] Mostrar interfaz
|
|
18
|
+
- [x] Documentación completa
|
|
19
|
+
- [x] Ejemplos funcionales
|
|
20
|
+
|
|
21
|
+
### ✅ Label
|
|
22
|
+
- [x] Creación de etiquetas de texto
|
|
23
|
+
- [x] Lectura de texto
|
|
24
|
+
- [x] Escritura de texto
|
|
25
|
+
- [ ] Cambio de texto dinámico (parcialmente funcional)
|
|
26
|
+
- [x] Documentación completa
|
|
27
|
+
- [x] Ejemplos funcionales
|
|
28
|
+
|
|
29
|
+
### ✅ Box
|
|
30
|
+
- [x] Creación de contenedores horizontales
|
|
31
|
+
- [x] Creación de contenedores verticales
|
|
32
|
+
- [x] Soporte para agregar widgets
|
|
33
|
+
- [x] Jerarquía de layouts
|
|
34
|
+
- [x] Documentación completa
|
|
35
|
+
- [x] Ejemplos funcionales
|
|
36
|
+
|
|
37
|
+
### ✅ Scroll
|
|
38
|
+
- [x] Creación de contenedores con scroll
|
|
39
|
+
- [x] Soporte para contenido desbordante
|
|
40
|
+
- [x] Barras de desplazamiento automáticas
|
|
41
|
+
- [x] Soporte para agregar widgets
|
|
42
|
+
- [x] Documentación completa
|
|
43
|
+
- [x] Ejemplos funcionales
|
|
44
|
+
|
|
45
|
+
## Widgets Pendientes
|
|
46
|
+
|
|
47
|
+
### ❌ Entry
|
|
48
|
+
- [ ] Campo de texto para entrada simple
|
|
49
|
+
|
|
50
|
+
### ❌ TextView
|
|
51
|
+
- [ ] Área de texto multilinea
|
|
52
|
+
|
|
53
|
+
### ❌ CheckButton
|
|
54
|
+
- [ ] Casilla de verificación
|
|
55
|
+
|
|
56
|
+
### ❌ RadioButton
|
|
57
|
+
- [ ] Botón de selección única
|
|
58
|
+
|
|
59
|
+
### ❌ ComboBox
|
|
60
|
+
- [ ] Menú desplegable con opciones
|
|
61
|
+
|
|
62
|
+
### ❌ ProgressBar
|
|
63
|
+
- [ ] Indicador visual de progreso
|
|
64
|
+
|
|
65
|
+
### ❌ TreeView
|
|
66
|
+
- [ ] Vista de árbol jerárquico
|
|
67
|
+
|
|
68
|
+
### ❌ StringGrid
|
|
69
|
+
- [ ] Tabla de datos editable
|
|
70
|
+
|
|
71
|
+
## Estado General
|
|
72
|
+
|
|
73
|
+
- **Total Widgets Implementados:** 4/12
|
|
74
|
+
- **Estado de la Extensión:** Funcional para casos básicos
|
|
75
|
+
- **Compatibilidad:** GTK3, Linux
|
|
76
|
+
- **Principio DRY:** Aplicado en toda la arquitectura
|
package/HOWTO-COMPILE.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Cómo Compilar la Extensión GTK3 para Node.js
|
|
2
|
+
|
|
3
|
+
Este documento explica cómo compilar la extensión GTK3 para Node.js desde el código fuente.
|
|
4
|
+
|
|
5
|
+
## Requisitos Previos
|
|
6
|
+
|
|
7
|
+
- Node.js (versión 12 o superior)
|
|
8
|
+
- node-gyp
|
|
9
|
+
- Compilador C++ compatible con C++17
|
|
10
|
+
- GTK3 con bibliotecas de desarrollo
|
|
11
|
+
- Python 2.7 o 3.x
|
|
12
|
+
- make y gcc/g++
|
|
13
|
+
|
|
14
|
+
## Instalación de Dependencias
|
|
15
|
+
|
|
16
|
+
### En sistemas Ubuntu/Debian:
|
|
17
|
+
```bash
|
|
18
|
+
sudo apt install nodejs npm
|
|
19
|
+
sudo apt install build-essential
|
|
20
|
+
sudo apt install libgtk-3-dev
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### En sistemas Fedora/RHEL:
|
|
24
|
+
```bash
|
|
25
|
+
sudo dnf install nodejs npm
|
|
26
|
+
sudo dnf install gcc gcc-c++ make
|
|
27
|
+
sudo dnf install gtk3-devel
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Proceso de Compilación
|
|
31
|
+
|
|
32
|
+
1. **Instalar node-gyp globalmente:**
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g node-gyp
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
2. **Instalar dependencias locales:**
|
|
38
|
+
```bash
|
|
39
|
+
cd gtk3-node-extension
|
|
40
|
+
npm install
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
3. **Compilar la extensión:**
|
|
44
|
+
```bash
|
|
45
|
+
node-gyp configure build
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
4. **Opcional: Limpiar y compilar desde cero:**
|
|
49
|
+
```bash
|
|
50
|
+
node-gyp clean configure build
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Solución de Problemas
|
|
54
|
+
|
|
55
|
+
- Si obtienes errores de enlace, asegúrate de tener instaladas las bibliotecas de desarrollo GTK3
|
|
56
|
+
- Si tienes problemas con python, asegúrate de tener python 2.7 o 3.x instalado
|
|
57
|
+
- Verifica que tu versión de Node.js sea compatible con node-gyp
|
|
58
|
+
|
|
59
|
+
## Directorios Relevantes
|
|
60
|
+
|
|
61
|
+
- `src/` - Código fuente principal de la extensión
|
|
62
|
+
- `widgets/` - Implementaciones de widgets individuales
|
|
63
|
+
- `build/` - Directorio de salida de la compilación
|
|
64
|
+
- `binding.gyp` - Archivo de configuración de compilación
|
|
65
|
+
|
|
66
|
+
## Verificación Post-Compilación
|
|
67
|
+
|
|
68
|
+
Después de compilar, puedes verificar que todo funcione:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
node -e "const { Button, Window } = require('./index.js'); console.log('Extensión cargada correctamente');"
|
|
72
|
+
```
|
package/README.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# GTK3 Extension for Node.js
|
|
2
|
+
|
|
3
|
+
This native extension enables creating graphical user interfaces using GTK3 from Node.js applications. It provides an abstraction layer over GTK3 that facilitates the creation of windows, buttons, and other widgets, as well as event management.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- Node.js 12 or higher
|
|
8
|
+
- GTK3 with development libraries installed
|
|
9
|
+
- node-gyp for compilation
|
|
10
|
+
- Linux operating system (currently supported)
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
Before installing this extension, make sure you have the GTK3 development libraries installed:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# On Ubuntu/Debian systems
|
|
18
|
+
sudo apt install libgtk-3-dev
|
|
19
|
+
|
|
20
|
+
# On Fedora/RHEL systems
|
|
21
|
+
sudo dnf install gtk3-devel
|
|
22
|
+
|
|
23
|
+
# On Arch Linux systems
|
|
24
|
+
sudo pacman -S gtk3
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Then, install the extension:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install ./path/to/gtk3-node-extension
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Basic Usage
|
|
34
|
+
|
|
35
|
+
### Creating a window with a button
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
const { Button, Window, init } = require('gtk3-node');
|
|
39
|
+
|
|
40
|
+
// Initialize GTK
|
|
41
|
+
init();
|
|
42
|
+
|
|
43
|
+
// Create a window
|
|
44
|
+
const window = new Window('My Application', 400, 300);
|
|
45
|
+
|
|
46
|
+
// Create a button
|
|
47
|
+
const button = new Button('Click here');
|
|
48
|
+
|
|
49
|
+
// Add an event handler to the button
|
|
50
|
+
button.onClick(() => {
|
|
51
|
+
console.log('Button pressed!');
|
|
52
|
+
button.label = 'Thanks for clicking!';
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Add the button to the window
|
|
56
|
+
window.add(button);
|
|
57
|
+
|
|
58
|
+
// Show the window and all its contents
|
|
59
|
+
window.show();
|
|
60
|
+
|
|
61
|
+
// Start the GTK event loop
|
|
62
|
+
Window.run();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## API
|
|
66
|
+
|
|
67
|
+
### Available Classes
|
|
68
|
+
|
|
69
|
+
#### Window
|
|
70
|
+
Represents a GTK3 window.
|
|
71
|
+
|
|
72
|
+
##### Constructor
|
|
73
|
+
- `new Window(title, width, height)` - Creates a new window with the specified title and dimensions.
|
|
74
|
+
|
|
75
|
+
##### Methods
|
|
76
|
+
- `add(widget)` - Adds a widget to the window.
|
|
77
|
+
- `show()` - Shows the window and all its contents.
|
|
78
|
+
|
|
79
|
+
##### Static Methods
|
|
80
|
+
- `Window.run()` - Starts the GTK event loop.
|
|
81
|
+
- `Window.quit()` - Exits the GTK event loop.
|
|
82
|
+
|
|
83
|
+
#### Button
|
|
84
|
+
Represents a GTK3 button.
|
|
85
|
+
|
|
86
|
+
##### Constructor
|
|
87
|
+
- `new Button(label)` - Creates a new button with the specified label.
|
|
88
|
+
|
|
89
|
+
##### Properties
|
|
90
|
+
- `label` - The button's label (getter/setter).
|
|
91
|
+
|
|
92
|
+
##### Methods
|
|
93
|
+
- `onClick(callback)` - Registers a function to be executed when the button is clicked.
|
|
94
|
+
|
|
95
|
+
#### Label
|
|
96
|
+
Represents a GTK3 label for displaying static text.
|
|
97
|
+
|
|
98
|
+
##### Constructor
|
|
99
|
+
- `new Label(text)` - Creates a new label with the specified text.
|
|
100
|
+
|
|
101
|
+
##### Properties
|
|
102
|
+
- `text` - The text displayed by the label (getter/setter).
|
|
103
|
+
|
|
104
|
+
#### Box
|
|
105
|
+
Represents a GTK3 container for organizing widgets in linear layouts.
|
|
106
|
+
|
|
107
|
+
##### Constructor
|
|
108
|
+
- `new Box(orientation)` - Creates a new container with the specified orientation ('horizontal' or 'vertical').
|
|
109
|
+
|
|
110
|
+
##### Methods
|
|
111
|
+
- `add(widget)` - Adds a widget to the container.
|
|
112
|
+
|
|
113
|
+
#### Scroll
|
|
114
|
+
Represents a GTK3 container with scrollbars for managing content that exceeds the visible area.
|
|
115
|
+
|
|
116
|
+
##### Constructor
|
|
117
|
+
- `new Scroll()` - Creates a new scrollable container.
|
|
118
|
+
|
|
119
|
+
##### Methods
|
|
120
|
+
- `add(widget)` - Adds a widget to the scrollable container.
|
|
121
|
+
|
|
122
|
+
## Compilation
|
|
123
|
+
|
|
124
|
+
If you want to compile the extension yourself:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
cd gtk3-node-extension
|
|
128
|
+
npm install
|
|
129
|
+
node-gyp configure
|
|
130
|
+
node-gyp build
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Features
|
|
134
|
+
|
|
135
|
+
- Creation of GTK3 widgets from JavaScript
|
|
136
|
+
- Event system with callbacks
|
|
137
|
+
- Native integration with GTK event loop
|
|
138
|
+
- DRY principle applied in architecture
|
|
139
|
+
|
|
140
|
+
## License
|
|
141
|
+
|
|
142
|
+
MIT
|
package/README_es.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Extensión GTK3 para Node.js
|
|
2
|
+
|
|
3
|
+
Esta extensión nativa permite crear interfaces gráficas utilizando GTK3 desde aplicaciones Node.js. Proporciona una capa de abstracción sobre GTK3 que facilita la creación de ventanas, botones y otros widgets, así como la gestión de eventos.
|
|
4
|
+
|
|
5
|
+
## Requisitos
|
|
6
|
+
|
|
7
|
+
- Node.js 12 o superior
|
|
8
|
+
- GTK3 con bibliotecas de desarrollo instaladas
|
|
9
|
+
- node-gyp para la compilación
|
|
10
|
+
- Sistema operativo Linux (actualmente soportado)
|
|
11
|
+
|
|
12
|
+
## Instalación
|
|
13
|
+
|
|
14
|
+
Antes de instalar esta extensión, asegúrate de tener instaladas las bibliotecas de desarrollo de GTK3:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# En sistemas Ubuntu/Debian
|
|
18
|
+
sudo apt install libgtk-3-dev
|
|
19
|
+
|
|
20
|
+
# En sistemas Fedora/RHEL
|
|
21
|
+
sudo dnf install gtk3-devel
|
|
22
|
+
|
|
23
|
+
# En sistemas Arch Linux
|
|
24
|
+
sudo pacman -S gtk3
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Luego, instala la extensión:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install ./ruta/a/gtk3-node-extension
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Uso básico
|
|
34
|
+
|
|
35
|
+
### Crear una ventana con un botón
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
const { Button, Window, init } = require('gtk3-node');
|
|
39
|
+
|
|
40
|
+
// Inicializar GTK
|
|
41
|
+
init();
|
|
42
|
+
|
|
43
|
+
// Crear una ventana
|
|
44
|
+
const ventana = new Window('Mi Aplicación', 400, 300);
|
|
45
|
+
|
|
46
|
+
// Crear un botón
|
|
47
|
+
const boton = new Button('Haz clic aquí');
|
|
48
|
+
|
|
49
|
+
// Agregar un manejador de eventos al botón
|
|
50
|
+
boton.onClick(() => {
|
|
51
|
+
console.log('¡Botón presionado!');
|
|
52
|
+
boton.label = '¡Gracias por hacer clic!';
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Agregar el botón a la ventana
|
|
56
|
+
ventana.add(boton);
|
|
57
|
+
|
|
58
|
+
// Mostrar la ventana y todos sus contenidos
|
|
59
|
+
ventana.show();
|
|
60
|
+
|
|
61
|
+
// Iniciar el loop de eventos de GTK
|
|
62
|
+
Window.run();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## API
|
|
66
|
+
|
|
67
|
+
### Clases disponibles
|
|
68
|
+
|
|
69
|
+
#### Window
|
|
70
|
+
Representa una ventana GTK3.
|
|
71
|
+
|
|
72
|
+
##### Constructor
|
|
73
|
+
- `new Window(título, ancho, alto)` - Crea una nueva ventana con el título y dimensiones especificadas.
|
|
74
|
+
|
|
75
|
+
##### Métodos
|
|
76
|
+
- `add(widget)` - Agrega un widget a la ventana.
|
|
77
|
+
- `show()` - Muestra la ventana y todos sus contenidos.
|
|
78
|
+
|
|
79
|
+
##### Métodos estáticos
|
|
80
|
+
- `Window.run()` - Inicia el bucle de eventos de GTK.
|
|
81
|
+
- `Window.quit()` - Sale del bucle de eventos de GTK.
|
|
82
|
+
|
|
83
|
+
#### Button
|
|
84
|
+
Representa un botón GTK3.
|
|
85
|
+
|
|
86
|
+
##### Constructor
|
|
87
|
+
- `new Button(etiqueta)` - Crea un nuevo botón con la etiqueta especificada.
|
|
88
|
+
|
|
89
|
+
##### Propiedades
|
|
90
|
+
- `label` - La etiqueta del botón (getter/setter).
|
|
91
|
+
|
|
92
|
+
##### Métodos
|
|
93
|
+
- `onClick(callback)` - Registra una función que se ejecutará cuando se haga clic en el botón.
|
|
94
|
+
|
|
95
|
+
## Compilación
|
|
96
|
+
|
|
97
|
+
Si deseas compilar la extensión tú mismo:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
cd gtk3-node-extension
|
|
101
|
+
npm install
|
|
102
|
+
node-gyp configure
|
|
103
|
+
node-gyp build
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Características
|
|
107
|
+
|
|
108
|
+
- Creación de widgets GTK3 desde JavaScript
|
|
109
|
+
- Sistema de eventos con callbacks
|
|
110
|
+
- Integración nativa con el bucle de eventos de GTK
|
|
111
|
+
- Principio DRY aplicado en la arquitectura
|
|
112
|
+
|
|
113
|
+
## Licencia
|
|
114
|
+
|
|
115
|
+
MIT
|
package/REFUERZO.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Áreas de Refuerzo para el Roadmap
|
|
2
|
+
|
|
3
|
+
## 1. Dependencias Externas
|
|
4
|
+
|
|
5
|
+
### Widgets con Dependencias Adicionales:
|
|
6
|
+
- **WebView** (#30) - Requiere `webkit2gtk-4.0` y `libjavascriptcoregtk-4.0-dev`
|
|
7
|
+
- **Image** (#19) - Depende de GDK-PixBuf (normalmente incluido con GTK3)
|
|
8
|
+
- **Canvas** (#31) - Requiere Cairo (`libcairo2-dev`)
|
|
9
|
+
- **ChartView** (#32) - Puede depender de librsvg o cairo para renderizado
|
|
10
|
+
|
|
11
|
+
### Widgets Autocontenidos:
|
|
12
|
+
- Todos los demás widgets utilizan solo GTK3 y sus componentes estándar
|
|
13
|
+
|
|
14
|
+
## 2. Iteración Incremental
|
|
15
|
+
|
|
16
|
+
### Milestone 1: Fundamentos Básicos
|
|
17
|
+
- [x] Label
|
|
18
|
+
- [x] Entry
|
|
19
|
+
- [x] Box
|
|
20
|
+
- [x] Grid
|
|
21
|
+
|
|
22
|
+
### Milestone 2: Interacción Básica
|
|
23
|
+
- [ ] CheckButton
|
|
24
|
+
- [ ] RadioButton
|
|
25
|
+
- [ ] ComboBox
|
|
26
|
+
- [ ] ProgressBar
|
|
27
|
+
|
|
28
|
+
### Milestone 3: Contenedores
|
|
29
|
+
- [ ] Frame
|
|
30
|
+
- [ ] ScrolledWindow
|
|
31
|
+
- [ ] Notebook
|
|
32
|
+
- [ ] ListBox
|
|
33
|
+
|
|
34
|
+
### Milestone 4: Componentes de Datos
|
|
35
|
+
- [ ] StringGrid
|
|
36
|
+
- [ ] TreeView
|
|
37
|
+
|
|
38
|
+
### Milestone 5: Controles Avanzados
|
|
39
|
+
- [ ] ToggleButton
|
|
40
|
+
- [ ] Scale/Slider
|
|
41
|
+
- [ ] Spinner
|
|
42
|
+
- [ ] TextView
|
|
43
|
+
|
|
44
|
+
## 3. Ejemplos de Uso
|
|
45
|
+
|
|
46
|
+
### Ejemplo para Milestone 1 (Fundamentos):
|
|
47
|
+
```javascript
|
|
48
|
+
const { Window, Label, Entry, Box, init, run } = require('./index.js');
|
|
49
|
+
|
|
50
|
+
init();
|
|
51
|
+
const window = new Window('Fundamentos', 400, 200);
|
|
52
|
+
|
|
53
|
+
const layout = new Box('vertical');
|
|
54
|
+
const label = new Label('Nombre:');
|
|
55
|
+
const entry = new Entry();
|
|
56
|
+
|
|
57
|
+
layout.add(label);
|
|
58
|
+
layout.add(entry);
|
|
59
|
+
window.add(layout);
|
|
60
|
+
window.show();
|
|
61
|
+
run();
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Ejemplo para Milestone 2 (Interacción):
|
|
65
|
+
```javascript
|
|
66
|
+
const { CheckButton, ComboBox, ProgressBar } = require('./index.js');
|
|
67
|
+
|
|
68
|
+
const checkbox = new CheckButton('Aceptar términos');
|
|
69
|
+
const combo = new ComboBox(['Opción 1', 'Opción 2', 'Opción 3']);
|
|
70
|
+
const progress = new ProgressBar();
|
|
71
|
+
progress.value = 50; // 50%
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Ejemplo para Milestone 4 (Componentes de Datos):
|
|
75
|
+
```javascript
|
|
76
|
+
const { StringGrid, TreeView } = require('./index.js');
|
|
77
|
+
|
|
78
|
+
const grid = new StringGrid(10, 5); // 10 filas, 5 columnas
|
|
79
|
+
grid.setHeader(['Nombre', 'Edad', 'Ciudad', 'País', 'Activo']);
|
|
80
|
+
|
|
81
|
+
const tree = new TreeView();
|
|
82
|
+
tree.addColumn('Nombre');
|
|
83
|
+
tree.addColumn('Valor');
|
|
84
|
+
tree.addRow(['Raíz', '100']);
|
|
85
|
+
tree.addRow(['Hijo', '50'], 'Raíz'); // Hijo de Raíz
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 4. Recomendaciones Adicionales
|
|
89
|
+
|
|
90
|
+
### Estrategia de Implementación:
|
|
91
|
+
1. Implementar primero los widgets más utilizados (Label, Entry, Button, Box)
|
|
92
|
+
2. Asegurar la estabilidad de cada milestone antes de avanzar
|
|
93
|
+
3. Documentar cada widget conforme se implementa
|
|
94
|
+
4. Crear pruebas unitarias para cada componente
|
|
95
|
+
5. Publicar versiones incrementales (v1.1, v1.2, etc.) con cada milestone
|
|
96
|
+
|
|
97
|
+
### Consideraciones Técnicas:
|
|
98
|
+
- Verificar compatibilidad con diferentes versiones de GTK3
|
|
99
|
+
- Implementar manejo de errores robusto
|
|
100
|
+
- Asegurar la liberación adecuada de memoria
|
|
101
|
+
- Crear wrapper consistentes para todos los widgets
|
|
102
|
+
|
|
103
|
+
Esto permitiría mostrar progreso continuo y permitiría a la comunidad seguir el desarrollo de manera transparente.
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Roadmap de Widgets para una GUI Toolkit Completa
|
|
2
|
+
|
|
3
|
+
## Nivel 1: Fundamentos Básicos (Prioridad Alta)
|
|
4
|
+
1. **Label** - Etiquetas de texto para mostrar información estática
|
|
5
|
+
2. **Entry** - Campos de texto para entrada de datos simples
|
|
6
|
+
3. **Box** - Contenedor lineal horizontal/vertical
|
|
7
|
+
4. **Grid** - Contenedor de rejilla para posicionamiento preciso
|
|
8
|
+
|
|
9
|
+
## Nivel 2: Interacción Básica (Prioridad Alta)
|
|
10
|
+
5. **CheckButton** - Casillas de verificación
|
|
11
|
+
6. **RadioButton** - Botones de selección única en grupo
|
|
12
|
+
7. **ComboBox** - Menús desplegables con opciones
|
|
13
|
+
8. **ProgressBar** - Indicador visual de progreso
|
|
14
|
+
|
|
15
|
+
## Nivel 3: Contenedores Avanzados (Prioridad Media-Alta)
|
|
16
|
+
9. **Frame** - Contenedor con borde y título
|
|
17
|
+
10. **ScrolledWindow** - Contenedor con barras de desplazamiento
|
|
18
|
+
11. **Notebook** - Pestañas para organizar contenido
|
|
19
|
+
12. **ListBox** - Listas de elementos seleccionables
|
|
20
|
+
|
|
21
|
+
## Nivel 4: Componentes de Datos Avanzados (Prioridad Media-Alta)
|
|
22
|
+
13. **StringGrid** - Tabla de datos con filas y columnas editables
|
|
23
|
+
14. **TreeView** - Árboles jerárquicos de datos
|
|
24
|
+
|
|
25
|
+
## Nivel 5: Controles de Entrada (Prioridad Media)
|
|
26
|
+
15. **ToggleButton** - Botones que mantienen estado activo/inactivo
|
|
27
|
+
16. **Scale/Slider** - Control deslizante para valores numéricos
|
|
28
|
+
17. **Spinner** - Selector numérico con flechas
|
|
29
|
+
18. **TextView** - Área de texto multilinea para entradas más largas
|
|
30
|
+
|
|
31
|
+
## Nivel 6: Componentes Visuales (Prioridad Media)
|
|
32
|
+
19. **Image** - Visualización de imágenes
|
|
33
|
+
20. **Separator** - Líneas divisorias para organizar la interfaz
|
|
34
|
+
21. **Calendar** - Selector de fecha
|
|
35
|
+
|
|
36
|
+
## Nivel 7: Componentes de Datos (Prioridad Media-Baja)
|
|
37
|
+
22. **FileChooser** - Diálogos para seleccionar archivos/directorios
|
|
38
|
+
23. **ColorChooser** - Selector de colores
|
|
39
|
+
|
|
40
|
+
## Nivel 8: Diálogos y Mensajes (Prioridad Media-Baja)
|
|
41
|
+
24. **MessageDialog** - Ventanas emergentes para mensajes
|
|
42
|
+
25. **AlertDialog** - Diálogos de alerta y confirmación
|
|
43
|
+
26. **InputDialog** - Diálogos para entrada de datos
|
|
44
|
+
|
|
45
|
+
## Nivel 9: Componentes de Navegación (Prioridad Baja)
|
|
46
|
+
27. **MenuBar** - Barras de menú
|
|
47
|
+
28. **ToolBar** - Barras de herramientas
|
|
48
|
+
29. **StatusBar** - Barra de estado inferior
|
|
49
|
+
|
|
50
|
+
## Nivel 10: Componentes Especializados (Prioridad Baja)
|
|
51
|
+
30. **WebView** - Visualizador de contenido web (si es posible con WebKitGTK)
|
|
52
|
+
31. **Canvas** - Área para dibujo personalizado
|
|
53
|
+
32. **ChartView** - Visualización de gráficos y datos
|
|
54
|
+
|
|
55
|
+
## Nivel 11: Utilidades del Sistema (Prioridad Baja)
|
|
56
|
+
33. **Clipboard** - Acceso al portapapeles del sistema
|
|
57
|
+
34. **DragAndDrop** - Soporte para arrastrar y soltar
|
|
58
|
+
|
|
59
|
+
## Nivel 12: Gestión de Eventos (Importante para todos los niveles)
|
|
60
|
+
35. **EventSystem** - Sistema completo de eventos para todos los widgets
|
|
61
|
+
36. **SignalHandler** - Manejo de señales GTK para eventos avanzados
|
|
62
|
+
|
|
63
|
+
## Nivel 13: Personalización y Experiencia de Usuario (Prioridad Baja-Media)
|
|
64
|
+
37. **CSS Styling** - Soporte para estilos CSS
|
|
65
|
+
38. **ThemeManager** - Gestión de temas visuales
|
|
66
|
+
39. **AnimationSupport** - Soporte para animaciones y transiciones
|
|
67
|
+
|
|
68
|
+
## Nivel 14: Herramientas de Desarrollo (Prioridad Baja)
|
|
69
|
+
40. **LayoutBuilder** - DSL para construcción de interfaces
|
|
70
|
+
41. **ResourceLoader** - Carga de recursos (imágenes, estilos, etc.)
|
|
71
|
+
|
|
72
|
+
## Nivel 15: Accesibilidad (Prioridad Media)
|
|
73
|
+
42. **Accessibility** - Soporte para accesibilidad (ATK)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Ejemplos de la Extensión GTK3 para Node.js
|
|
2
|
+
|
|
3
|
+
Este directorio contiene ejemplos organizados por niveles de complejidad para demostrar el uso de la extensión GTK3 para Node.js.
|
|
4
|
+
|
|
5
|
+
## Organización
|
|
6
|
+
|
|
7
|
+
- **basicos/** - Ejemplos simples con widgets fundamentales
|
|
8
|
+
- **intermedios/** - Ejemplos con combinación de múltiples widgets
|
|
9
|
+
- **avanzados/** - Ejemplos complejos con layouts jerárquicos
|
|
10
|
+
|
|
11
|
+
## Cómo usar
|
|
12
|
+
|
|
13
|
+
Para ejecutar un ejemplo, navega al directorio correspondiente y ejecuta:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node nombre_del_ejemplo.js
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Objetivo
|
|
20
|
+
|
|
21
|
+
Estos ejemplos están diseñados para mostrar cómo construir interfaces gráficas paso a paso, desde lo más básico hasta configuraciones más complejas.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Ejemplos Avanzados
|
|
2
|
+
|
|
3
|
+
Este directorio contiene ejemplos complejos que demuestran el uso combinado de múltiples widgets y layouts avanzados de la extensión GTK3 para Node.js.
|
|
4
|
+
|
|
5
|
+
## Contenido
|
|
6
|
+
|
|
7
|
+
- `ejemplo_completo.js` - Ejemplo con botón y 35 labels organizadas en layouts horizontales y verticales
|
|
8
|
+
- `ejemplo_scroll.js` - Ejemplo con Scroll, Labels y Buttons en la misma ventana
|
|
9
|
+
|
|
10
|
+
## Objetivo
|
|
11
|
+
|
|
12
|
+
Mostrar cómo crear interfaces gráficas complejas con múltiples widgets organizados en layouts jerárquicos.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// ejemplo_completo.js - Ejemplo con botón y múltiples labels
|
|
2
|
+
|
|
3
|
+
const { Button, Label, Box, Window, init, run } = require('../../index.js');
|
|
4
|
+
|
|
5
|
+
// Inicializar GTK
|
|
6
|
+
init();
|
|
7
|
+
|
|
8
|
+
// Crear una ventana
|
|
9
|
+
const ventana = new Window('Ejemplo Complejo', 800, 600);
|
|
10
|
+
|
|
11
|
+
// Crear un botón con texto "Click Me" y tamaño adecuado
|
|
12
|
+
const boton = new Button('Click Me');
|
|
13
|
+
|
|
14
|
+
// Agregar un manejador de eventos al botón
|
|
15
|
+
boton.onClick(() => {
|
|
16
|
+
console.log('¡Botón presionado!');
|
|
17
|
+
boton.label = '¡Gracias por clic!';
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// Crear un layout principal vertical
|
|
21
|
+
const layoutPrincipal = new Box('vertical');
|
|
22
|
+
|
|
23
|
+
// Crear 3 grupos horizontales
|
|
24
|
+
for (let grupo = 0; grupo < 3; grupo++) {
|
|
25
|
+
const layoutHorizontal = new Box('horizontal');
|
|
26
|
+
|
|
27
|
+
// En cada grupo horizontal, crear 2 labels verticales
|
|
28
|
+
for (let vertical = 0; vertical < 2; vertical++) {
|
|
29
|
+
const labelText = `Grupo ${grupo + 1}, Label Vertical ${vertical + 1}`;
|
|
30
|
+
const label = new Label(labelText);
|
|
31
|
+
layoutHorizontal.add(label);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
layoutPrincipal.add(layoutHorizontal);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Crear 35 labels adicionales
|
|
38
|
+
for (let i = 0; i < 35; i++) {
|
|
39
|
+
const label = new Label(`Label adicional #${i + 1}`);
|
|
40
|
+
layoutPrincipal.add(label);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Agregar el botón al final
|
|
44
|
+
layoutPrincipal.add(boton);
|
|
45
|
+
|
|
46
|
+
// Agregar el layout a la ventana
|
|
47
|
+
ventana.add(layoutPrincipal);
|
|
48
|
+
|
|
49
|
+
// Mostrar la ventana y todos sus contenidos
|
|
50
|
+
ventana.show();
|
|
51
|
+
|
|
52
|
+
console.log('Interfaz gráfica lista. Abriendo ventana con botón y múltiples labels...');
|
|
53
|
+
|
|
54
|
+
// Iniciar el loop de eventos GTK para mostrar la interfaz
|
|
55
|
+
run();
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// ejemplo_scroll.js - Ejemplo con Label, Button y Scroll en la misma ventana
|
|
2
|
+
|
|
3
|
+
const { Button, Label, Box, Scroll, Window, init, run } = require('../../index.js');
|
|
4
|
+
|
|
5
|
+
// Inicializar GTK
|
|
6
|
+
init();
|
|
7
|
+
|
|
8
|
+
// Crear una ventana
|
|
9
|
+
const ventana = new Window('Ejemplo con Scroll', 400, 300);
|
|
10
|
+
|
|
11
|
+
// Crear un contenedor con scroll
|
|
12
|
+
const scroll = new Scroll();
|
|
13
|
+
|
|
14
|
+
// Crear un layout vertical para contenido largo
|
|
15
|
+
const layout = new Box('vertical');
|
|
16
|
+
|
|
17
|
+
// Crear varios labels y botones para demostrar el scroll
|
|
18
|
+
for (let i = 0; i < 20; i++) {
|
|
19
|
+
const label = new Label(`Label #${i + 1} con texto largo que puede necesitar scroll`);
|
|
20
|
+
const boton = new Button(`Botón #${i + 1}`);
|
|
21
|
+
|
|
22
|
+
// Agregar evento al botón
|
|
23
|
+
boton.onClick(() => {
|
|
24
|
+
console.log(`Botón #${i + 1} presionado`);
|
|
25
|
+
label.text = `¡Botón #${i + 1} fue presionado!`;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
layout.add(label);
|
|
29
|
+
layout.add(boton);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Agregar el layout al contenedor con scroll
|
|
33
|
+
scroll.add(layout);
|
|
34
|
+
|
|
35
|
+
// Agregar el scroll a la ventana
|
|
36
|
+
ventana.add(scroll);
|
|
37
|
+
|
|
38
|
+
// Mostrar la ventana y todos sus contenidos
|
|
39
|
+
ventana.show();
|
|
40
|
+
|
|
41
|
+
console.log('Interfaz con Scroll, Labels y Botones lista. Abriendo ventana...');
|
|
42
|
+
|
|
43
|
+
// Iniciar el loop de eventos GTK para mostrar la interfaz
|
|
44
|
+
run();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Ejemplos Básicos
|
|
2
|
+
|
|
3
|
+
Este directorio contiene ejemplos simples que demuestran el uso básico de los widgets fundamentales de la extensión GTK3 para Node.js.
|
|
4
|
+
|
|
5
|
+
## Contenido
|
|
6
|
+
|
|
7
|
+
- `ejemplo_final.js` - Ejemplo básico con una ventana, botón y eventos de clic
|
|
8
|
+
|
|
9
|
+
## Objetivo
|
|
10
|
+
|
|
11
|
+
Mostrar cómo crear interfaces gráficas simples con los widgets más básicos de la extensión.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// ejemplo_final.js - Ejemplo completo de interfaz gráfica GTK3
|
|
2
|
+
|
|
3
|
+
const { Button, Window, init } = require('../../index.js');
|
|
4
|
+
|
|
5
|
+
// Inicializar GTK
|
|
6
|
+
init();
|
|
7
|
+
|
|
8
|
+
// Crear una ventana
|
|
9
|
+
const ventana = new Window('Ejemplo Completo GTK3', 400, 300);
|
|
10
|
+
|
|
11
|
+
// Crear un botón
|
|
12
|
+
const boton = new Button('Haz clic aquí');
|
|
13
|
+
|
|
14
|
+
// Agregar un manejador de eventos al botón
|
|
15
|
+
boton.onClick(() => {
|
|
16
|
+
console.log('¡Botón presionado!');
|
|
17
|
+
boton.label = '¡Gracias por hacer clic!';
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
console.log('Texto inicial del botón:', boton.label);
|
|
21
|
+
|
|
22
|
+
// Agregar el botón a la ventana
|
|
23
|
+
ventana.add(boton);
|
|
24
|
+
|
|
25
|
+
// Mostrar la ventana y todos sus contenidos
|
|
26
|
+
ventana.show();
|
|
27
|
+
|
|
28
|
+
console.log('Interfaz gráfica lista. Abriendo ventana...');
|
|
29
|
+
|
|
30
|
+
// Iniciar el loop de eventos GTK para mostrar la interfaz
|
|
31
|
+
Window.run();
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Ejemplos Intermedios
|
|
2
|
+
|
|
3
|
+
Este directorio contiene ejemplos que muestran el uso combinado de múltiples widgets y funcionalidades básicas de la extensión GTK3 para Node.js.
|
|
4
|
+
|
|
5
|
+
## Contenido
|
|
6
|
+
|
|
7
|
+
- `ejemplo_label.js` - Ejemplo con widget Label y manipulación de texto
|
|
8
|
+
- `ejemplo_label_boton.js` - Ejemplo con Label y Button en la misma ventana
|
|
9
|
+
|
|
10
|
+
## Objetivo
|
|
11
|
+
|
|
12
|
+
Mostrar cómo integrar diferentes tipos de widgets y cómo manipular sus propiedades desde JavaScript.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// ejemplo_label.js - Ejemplo de uso del widget Label
|
|
2
|
+
|
|
3
|
+
const { Label, Window, init, run } = require('../../index.js');
|
|
4
|
+
|
|
5
|
+
// Inicializar GTK
|
|
6
|
+
init();
|
|
7
|
+
|
|
8
|
+
// Crear una ventana
|
|
9
|
+
const ventana = new Window('Ejemplo Label', 300, 200);
|
|
10
|
+
|
|
11
|
+
// Crear un label
|
|
12
|
+
const label = new Label('¡Hola Mundo desde Label!');
|
|
13
|
+
|
|
14
|
+
// Mostrar el texto actual del label
|
|
15
|
+
console.log('Texto del label:', label.text);
|
|
16
|
+
|
|
17
|
+
// Cambiar el texto del label después de 2 segundos
|
|
18
|
+
setTimeout(() => {
|
|
19
|
+
console.log('Cambiando texto del label...');
|
|
20
|
+
label.text = '¡Texto cambiado!';
|
|
21
|
+
console.log('Nuevo texto del label:', label.text);
|
|
22
|
+
}, 2000);
|
|
23
|
+
|
|
24
|
+
// Agregar el label a la ventana
|
|
25
|
+
ventana.add(label);
|
|
26
|
+
|
|
27
|
+
// Mostrar la ventana y todos sus contenidos
|
|
28
|
+
ventana.show();
|
|
29
|
+
|
|
30
|
+
console.log('Abriendo ventana con label...');
|
|
31
|
+
|
|
32
|
+
// Iniciar el loop de eventos GTK para mostrar la interfaz
|
|
33
|
+
run();
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// ejemplo_label_boton.js - Ejemplo con Label y Button en la misma ventana
|
|
2
|
+
|
|
3
|
+
const { Button, Label, Box, Window, init, run } = require('../../index.js');
|
|
4
|
+
|
|
5
|
+
// Inicializar GTK
|
|
6
|
+
init();
|
|
7
|
+
|
|
8
|
+
// Crear una ventana
|
|
9
|
+
const ventana = new Window('Ejemplo Label y Botón', 400, 300);
|
|
10
|
+
|
|
11
|
+
// Crear un layout vertical
|
|
12
|
+
const layout = new Box('vertical');
|
|
13
|
+
|
|
14
|
+
// Crear un label
|
|
15
|
+
const label = new Label('Presiona el botón para cambiar este texto');
|
|
16
|
+
|
|
17
|
+
// Crear un botón
|
|
18
|
+
const boton = new Button('Cambiar Texto');
|
|
19
|
+
|
|
20
|
+
// Agregar un manejador de eventos al botón
|
|
21
|
+
let contador = 0;
|
|
22
|
+
boton.onClick(() => {
|
|
23
|
+
contador++;
|
|
24
|
+
console.log(`Botón presionado ${contador} veces`);
|
|
25
|
+
label.text = `¡Texto cambiado ${contador} veces!`;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Agregar el label y el botón al layout
|
|
29
|
+
layout.add(label);
|
|
30
|
+
layout.add(boton);
|
|
31
|
+
|
|
32
|
+
// Agregar el layout a la ventana
|
|
33
|
+
ventana.add(layout);
|
|
34
|
+
|
|
35
|
+
// Mostrar la ventana y todos sus contenidos
|
|
36
|
+
ventana.show();
|
|
37
|
+
|
|
38
|
+
console.log('Interfaz con Label y Botón lista. Abriendo ventana...');
|
|
39
|
+
|
|
40
|
+
// Iniciar el loop de eventos GTK para mostrar la interfaz
|
|
41
|
+
run();
|
package/index.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const gtk3_native = require('./build/Release/gtk3_node.node');
|
|
2
|
+
|
|
3
|
+
class Button {
|
|
4
|
+
constructor(label = "Botón") {
|
|
5
|
+
this.widget = gtk3_native.createButton(label);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
onClick(callback) {
|
|
9
|
+
gtk3_native.connectClick(this.widget, callback);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
set label(text) {
|
|
13
|
+
gtk3_native.setButtonText(this.widget, text);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
get label() {
|
|
17
|
+
return gtk3_native.getButtonText(this.widget);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
class Label {
|
|
22
|
+
constructor(text = "") {
|
|
23
|
+
this.widget = gtk3_native.createLabel(text);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
set text(content) {
|
|
27
|
+
gtk3_native.setLabelText(this.widget, content);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get text() {
|
|
31
|
+
return gtk3_native.getLabelText(this.widget);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
setText(content) {
|
|
35
|
+
this.text = content;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getText() {
|
|
39
|
+
return this.text;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
class Box {
|
|
44
|
+
constructor(orientation = 'horizontal') {
|
|
45
|
+
this.widget = gtk3_native.createBox(orientation);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
add(widget) {
|
|
49
|
+
if (widget && widget.widget) {
|
|
50
|
+
gtk3_native.addToBox(this.widget, widget.widget);
|
|
51
|
+
}
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
class Scroll {
|
|
57
|
+
constructor() {
|
|
58
|
+
this.widget = gtk3_native.createScroll();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
add(widget) {
|
|
62
|
+
if (widget && widget.widget) {
|
|
63
|
+
gtk3_native.addToScroll(this.widget, widget.widget);
|
|
64
|
+
}
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
class Window {
|
|
70
|
+
constructor(title = "Ventana", width = 400, height = 300) {
|
|
71
|
+
this.widget = gtk3_native.createWindow(title, width, height);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
add(widget) {
|
|
75
|
+
if (widget && widget.widget) {
|
|
76
|
+
gtk3_native.addToWindow(this.widget, widget.widget);
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
show() {
|
|
82
|
+
gtk3_native.showAll(this.widget);
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
static run() {
|
|
87
|
+
gtk3_native.run();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static quit() {
|
|
91
|
+
gtk3_native.quit();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Exportar las funciones directamente
|
|
96
|
+
module.exports = {
|
|
97
|
+
...gtk3_native,
|
|
98
|
+
Button,
|
|
99
|
+
Label,
|
|
100
|
+
Box,
|
|
101
|
+
Scroll,
|
|
102
|
+
Window,
|
|
103
|
+
// Mantener compatibilidad hacia atrás
|
|
104
|
+
createWindow: gtk3_native.createWindow,
|
|
105
|
+
addToWindow: gtk3_native.addToWindow,
|
|
106
|
+
showAll: gtk3_native.showAll,
|
|
107
|
+
run: gtk3_native.run,
|
|
108
|
+
quit: gtk3_native.quit,
|
|
109
|
+
init: gtk3_native.init
|
|
110
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gtk3-node",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Native Node.js extension for creating GTK3 widgets",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"install": "node-gyp rebuild",
|
|
8
|
+
"test": "node test.js"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"gtk",
|
|
12
|
+
"gui",
|
|
13
|
+
"native",
|
|
14
|
+
"v8",
|
|
15
|
+
"desktop",
|
|
16
|
+
"ui",
|
|
17
|
+
"user-interface",
|
|
18
|
+
"graphics",
|
|
19
|
+
"widgets",
|
|
20
|
+
"window-manager",
|
|
21
|
+
"cross-platform",
|
|
22
|
+
"linux",
|
|
23
|
+
"frontend",
|
|
24
|
+
"visual",
|
|
25
|
+
"application",
|
|
26
|
+
"framework",
|
|
27
|
+
"toolkit",
|
|
28
|
+
"interface",
|
|
29
|
+
"rendering",
|
|
30
|
+
"controls",
|
|
31
|
+
"components",
|
|
32
|
+
"event-driven",
|
|
33
|
+
"asynchronous",
|
|
34
|
+
"javascript",
|
|
35
|
+
"addon",
|
|
36
|
+
"bindings",
|
|
37
|
+
"ffi",
|
|
38
|
+
"system",
|
|
39
|
+
"native-modules",
|
|
40
|
+
"electron-alternative",
|
|
41
|
+
"desktop-apps",
|
|
42
|
+
"native-ui",
|
|
43
|
+
"gtk-widgets",
|
|
44
|
+
"gui-framework",
|
|
45
|
+
"visual-components",
|
|
46
|
+
"ui-controls",
|
|
47
|
+
"desktop-gui"
|
|
48
|
+
],
|
|
49
|
+
"author": "Usuario",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"node-addon-api": "^7.0.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"node-gyp": "^10.3.1"
|
|
56
|
+
},
|
|
57
|
+
"binary": {
|
|
58
|
+
"napi_versions": [
|
|
59
|
+
3
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|