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 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
@@ -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
+ }