Add events mouse and focus
This commit is contained in:
parent
b8954d7ade
commit
70654bf40f
|
@ -0,0 +1,132 @@
|
|||
# Botón de comando (button)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
---
|
||||
|
||||
### **type**
|
||||
|
||||
Devuelve el tipo de control.
|
||||
|
||||
```py
|
||||
app.debug(button.type)
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### **value**
|
||||
|
||||
Devuelve o establece la etiqueta del control.
|
||||
|
||||
```py
|
||||
button.value = 'Cerrar'
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
### **action**
|
||||
|
||||
Se ejecuta al dar click con el botón primario del ratón y con las teclas ++enter++ y ++"Barra Espaciadora"++ cuando el botón de comando tiene el foco.
|
||||
|
||||
```py
|
||||
def button_action(self, event):
|
||||
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### **click**
|
||||
|
||||
Se ejecuta al dar click con cualquier botón del ratón.
|
||||
|
||||
```py
|
||||
def button_click(self, event):
|
||||
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### **double_click**
|
||||
|
||||
Se ejecuta al dar doble click con cualquier botón del ratón.
|
||||
|
||||
```py
|
||||
def button_double_click(self, event):
|
||||
|
||||
return
|
||||
```
|
||||
|
||||
## Propiedades pyUNO
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| Align | |
|
||||
| BackgroundColor | |
|
||||
| ContextWritingMode | |
|
||||
| DefaultButton | |
|
||||
| DefaultControl | |
|
||||
| EnableVisible | |
|
||||
| Enabled | |
|
||||
| FocusOnClick | |
|
||||
| FontCharWidth | |
|
||||
| FontCharset | |
|
||||
| FontDescriptor | |
|
||||
| FontEmphasisMark | |
|
||||
| FontFamily | |
|
||||
| FontHeight | |
|
||||
| FontKerning | |
|
||||
| FontName | |
|
||||
| FontOrientation | |
|
||||
| FontPitch | |
|
||||
| FontRelief | |
|
||||
| FontSlant | |
|
||||
| FontStrikeout | |
|
||||
| FontStyleName | |
|
||||
| FontType | |
|
||||
| FontUnderline | |
|
||||
| FontWeight | |
|
||||
| FontWidth | |
|
||||
| FontWordLineMode | |
|
||||
| Graphic | |
|
||||
| Height | |
|
||||
| HelpText | |
|
||||
| HelpURL | |
|
||||
| ImageAlign | |
|
||||
| ImagePosition | |
|
||||
| ImageURL | |
|
||||
| Label | |
|
||||
| MultiLine | |
|
||||
| Name | |
|
||||
| PositionX | |
|
||||
| PositionY | |
|
||||
| Printable | |
|
||||
| PushButtonType | |
|
||||
| ReferenceDevice | |
|
||||
| Repeat | |
|
||||
| RepeatDelay | |
|
||||
| ResourceResolver | |
|
||||
| State | |
|
||||
| Step | |
|
||||
| TabIndex | |
|
||||
| Tabstop | |
|
||||
| Tag | |
|
||||
| TextColor | |
|
||||
| TextLineColor | |
|
||||
| Toggle | |
|
||||
| VerticalAlign | |
|
||||
| Width | |
|
||||
| WritingMode | |
|
||||
|
||||
<br>
|
|
@ -0,0 +1,47 @@
|
|||
# Imagen (image)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
---
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
## Propiedades pyUNO
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| BackgroundColor | |
|
||||
| Border | |
|
||||
| BorderColor | |
|
||||
| ContextWritingMode | |
|
||||
| DefaultControl | |
|
||||
| EnableVisible | |
|
||||
| Enabled | |
|
||||
| Graphic | |
|
||||
| Height | |
|
||||
| HelpText | |
|
||||
| HelpURL | |
|
||||
| ImageURL | |
|
||||
| Name | |
|
||||
| PositionX | |
|
||||
| PositionY | |
|
||||
| Printable | |
|
||||
| ResourceResolver | |
|
||||
| ScaleImage | |
|
||||
| ScaleMode | |
|
||||
| Step | |
|
||||
| TabIndex | |
|
||||
| Tabstop | |
|
||||
| Tag | |
|
||||
| Width | |
|
||||
| WritingMode | |
|
||||
|
||||
<br>
|
|
@ -0,0 +1,267 @@
|
|||
|
||||
# Crear cuadros de diálogo
|
||||
|
||||
### **create**
|
||||
|
||||
---
|
||||
|
||||
#### Desde "Mis Macros"
|
||||
|
||||
Si el cuadro de diálogo esta en la librería `Standard`.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo1():
|
||||
propiedades = {
|
||||
'Location': 'user',
|
||||
'Name': 'Dialog1',
|
||||
}
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
Si el cuadro de diálogo esta en otra librería.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo2():
|
||||
propiedades = {
|
||||
'Location': 'user',
|
||||
'Library': 'MiAplicacion',
|
||||
'Name': 'Dialog1',
|
||||
}
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
#### Dentro de un archivo
|
||||
|
||||
Si el cuadro de diálogo esta en el documento activo en la librería `Standard`.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo3():
|
||||
propiedades = {
|
||||
'Location': 'document',
|
||||
'Name': 'Dialog1',
|
||||
}
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
Si el cuadro de diálogo esta en otro documento en la librería `Standard`.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo4():
|
||||
documento = app.docs['OtroArchivo.ods']
|
||||
propiedades = {
|
||||
'Location': 'document',
|
||||
'Document': documento,
|
||||
'Name': 'Dialog1',
|
||||
}
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
#### Desde archivo
|
||||
|
||||
Crear un cuadro de diálogo desde un archivo `xdl` previamente creado desde el editor de cuadros de diálogo dentro de LibreOffice y exportado a un archivo.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo():
|
||||
path = '/home/elmau/Desktop/mi_dialogo.xdl'
|
||||
propiedades = {'Path': path}
|
||||
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
#### Crear dinámicamente
|
||||
|
||||
Crear un cuadro de diálogo vacío.
|
||||
|
||||
```py
|
||||
def crear_cuadro_de_dialogo():
|
||||
dialog = app.dialog.create()
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
Cambiar las propiedades iniciales.
|
||||
|
||||
```py
|
||||
propiedades = dict(
|
||||
Name = 'MiDialogo',
|
||||
Title = 'Maldito Mundo',
|
||||
Width = 200,
|
||||
Height = 100,
|
||||
)
|
||||
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.open()
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
!!! tip Importante
|
||||
|
||||
Cualquier propiedad usada al crear el cuadro de diálogo, debe ser la original del control pyUNO.
|
||||
|
||||
#### Propiedades
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| AllDialogChildren | |
|
||||
| BackgroundColor | Color de fondo |
|
||||
| Closeable | Permite cerrar el cuadro de diálogo con el icono `X` |
|
||||
| Decoration |
|
||||
| DefaultControl |
|
||||
| DesktopAsParent |
|
||||
| DialogSourceURL |
|
||||
| Enabled |
|
||||
| FontCharWidth |
|
||||
| FontCharset |
|
||||
| FontDescriptor |
|
||||
| FontEmphasisMark |
|
||||
| FontFamily |
|
||||
| FontHeight |
|
||||
| FontKerning |
|
||||
| FontName |
|
||||
| FontOrientation |
|
||||
| FontPitch |
|
||||
| FontRelief |
|
||||
| FontSlant |
|
||||
| FontStrikeout |
|
||||
| FontStyleName |
|
||||
| FontType |
|
||||
| FontUnderline |
|
||||
| FontWeight |
|
||||
| FontWidth |
|
||||
| FontWordLineMode |
|
||||
| Graphic |
|
||||
| HScroll |
|
||||
| Height | Altura del control |
|
||||
| HelpText |
|
||||
| HelpURL |
|
||||
| ImageURL |
|
||||
| Moveable |
|
||||
| Name | Nombre del control |
|
||||
| PositionX | Posición en el eje X |
|
||||
| PositionY | Posición en el eje Y |
|
||||
| ResourceResolver |
|
||||
| ScrollHeight |
|
||||
| ScrollLeft |
|
||||
| ScrollTop |
|
||||
| ScrollWidth |
|
||||
| Sizeable | Si el control cambia de tamaño |
|
||||
| Step |
|
||||
| TabIndex |
|
||||
| Tag |
|
||||
| TextColor |
|
||||
| TextLineColor |
|
||||
| Title | Título del cuadro de diálogo |
|
||||
| VScroll | Mostrar barra de desplazamiento vertial |
|
||||
| Width | Ancho del control |
|
||||
|
||||
<br>
|
||||
|
||||
### **add_control**
|
||||
|
||||
---
|
||||
|
||||
Agrega un control al cuadro de diálogo.
|
||||
|
||||
```py
|
||||
propiedades = {
|
||||
'Type': 'label',
|
||||
'Name': 'lbl_info',
|
||||
'Label': 'Esta es una etiqueta.',
|
||||
'Width': 100,
|
||||
'Height': 15,
|
||||
'Border': 1,
|
||||
'X': 5,
|
||||
'Y': 5,
|
||||
}
|
||||
dialog.add_control(propiedades)
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
Todos los eventos de todos los controles de un cuadro de diálogo se controlan por medio de una clase Python que se pasa a la propiedad `events` del cuadro de diálogo.
|
||||
|
||||
Cada método de esta clase que tenga en su nombre la estructura que corresponde al nombre del control más el nombre del evento, responderá a dicho evento de dicho control.
|
||||
|
||||
`NOMBRE_CONTROL_NOMBRE_EVENTO`
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```py
|
||||
import easymacro as app
|
||||
|
||||
class Eventos():
|
||||
|
||||
def __init__(self, dialog):
|
||||
self.d = dialog
|
||||
|
||||
def cmd_cerrar_action(self, event):
|
||||
self.d.close(1)
|
||||
return
|
||||
|
||||
def main():
|
||||
propiedades = dict(
|
||||
Name = 'MiDialogo',
|
||||
Title = 'Maldito Mundo',
|
||||
Width = 200,
|
||||
Height = 100,
|
||||
)
|
||||
|
||||
dialog = app.dialog.create(propiedades)
|
||||
dialog.events = Eventos
|
||||
|
||||
propiedades = {
|
||||
'Type': 'button',
|
||||
'Name': 'cmd_cerrar',
|
||||
'Label': 'Cerrar',
|
||||
'Width': 40,
|
||||
'Height': 15,
|
||||
}
|
||||
dialog.add_control(propiedades)
|
||||
dialog.open()
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
Cada control agregado al cuadro de diálogo es instanciado como una propiedad del mismo cuadro de diálogo. En el ejemplo anterior, el botón de comando `cmd_cerrar` es accesible desde cualquier variable que apunte al cuadro de diálogo, en el mismo ejemplo anterior en:
|
||||
|
||||
```py
|
||||
dialog.cmd_cerrar
|
||||
```
|
||||
|
||||
Como en la clase `Eventos` en:
|
||||
```py
|
||||
self.d.cmd_cerrar
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## Controles
|
||||
|
||||
---
|
||||
|
||||
#### [Etiqueta (label)](label/)
|
||||
#### [Botón de comando (button)](cmd/)
|
||||
|
||||
<br>
|
|
@ -0,0 +1,101 @@
|
|||
# Etiqueta (label)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
---
|
||||
|
||||
### **type**
|
||||
|
||||
Devuelve el tipo de control.
|
||||
|
||||
```py
|
||||
app.debug(label.type)
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
### **value**
|
||||
|
||||
Devuelve o establece la etiqueta del control.
|
||||
|
||||
```py
|
||||
label.value = 'Mi etiqueta'
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
### **click**
|
||||
|
||||
Se ejecuta al dar click con cualquier botón del ratón.
|
||||
|
||||
```py
|
||||
def label_click(self, event):
|
||||
|
||||
return
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
## Propiedades pyUNO
|
||||
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| Align | |
|
||||
| BackgroundColor | |
|
||||
| Border | |
|
||||
| BorderColor | |
|
||||
| ContextWritingMode | |
|
||||
| DefaultControl | |
|
||||
| EnableVisible | |
|
||||
| Enabled | |
|
||||
| FontCharWidth | |
|
||||
| FontCharset | |
|
||||
| FontDescriptor | |
|
||||
| FontEmphasisMark | |
|
||||
| FontFamily | |
|
||||
| FontHeight | |
|
||||
| FontKerning | |
|
||||
| FontName | |
|
||||
| FontOrientation | |
|
||||
| FontPitch | |
|
||||
| FontRelief | |
|
||||
| FontSlant | |
|
||||
| FontStrikeout | |
|
||||
| FontStyleName | |
|
||||
| FontType | |
|
||||
| FontUnderline | |
|
||||
| FontWeight | |
|
||||
| FontWidth | |
|
||||
| FontWordLineMode | |
|
||||
| Height | |
|
||||
| HelpText | |
|
||||
| HelpURL | |
|
||||
| Label | |
|
||||
| MultiLine | |
|
||||
| Name | |
|
||||
| NoLabel | |
|
||||
| PositionX | |
|
||||
| PositionY | |
|
||||
| Printable | |
|
||||
| ReferenceDevice | |
|
||||
| ResourceResolver | |
|
||||
| Step | |
|
||||
| TabIndex | |
|
||||
| Tabstop | |
|
||||
| Tag | |
|
||||
| TextColor | |
|
||||
| TextLineColor | |
|
||||
| VerticalAlign | |
|
||||
| Width | |
|
||||
| WritingMode | |
|
|
@ -0,0 +1,88 @@
|
|||
# Hipervínculo (link)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
### **label**
|
||||
|
||||
Devuelve o establece la etiqueta.
|
||||
|
||||
<br>
|
||||
|
||||
### **url**
|
||||
|
||||
Devuelve o establece el vínculo web.
|
||||
|
||||
<br>
|
||||
|
||||
### **value**
|
||||
|
||||
Devuelve o establece el vínculo web y la etiqueta.
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
## Propiedades pyUNO
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| Align | |
|
||||
| BackgroundColor | |
|
||||
| Border | |
|
||||
| BorderColor | |
|
||||
| ContextWritingMode | |
|
||||
| DefaultControl | |
|
||||
| EnableVisible | |
|
||||
| Enabled | |
|
||||
| FontCharWidth | |
|
||||
| FontCharset | |
|
||||
| FontDescriptor | |
|
||||
| FontEmphasisMark | |
|
||||
| FontFamily | |
|
||||
| FontHeight | |
|
||||
| FontKerning | |
|
||||
| FontName | |
|
||||
| FontOrientation | |
|
||||
| FontPitch | |
|
||||
| FontRelief | |
|
||||
| FontSlant | |
|
||||
| FontStrikeout | |
|
||||
| FontStyleName | |
|
||||
| FontType | |
|
||||
| FontUnderline | |
|
||||
| FontWeight | |
|
||||
| FontWidth | |
|
||||
| FontWordLineMode | |
|
||||
| Height | |
|
||||
| HelpText | |
|
||||
| HelpURL | |
|
||||
| Label | |
|
||||
| MultiLine | |
|
||||
| Name | |
|
||||
| NoLabel | |
|
||||
| PositionX | |
|
||||
| PositionY | |
|
||||
| Printable | |
|
||||
| ResourceResolver | |
|
||||
| Step | |
|
||||
| TabIndex | |
|
||||
| Tabstop | |
|
||||
| Tag | |
|
||||
| TextColor | |
|
||||
| TextLineColor | |
|
||||
| URL | |
|
||||
| VerticalAlign | |
|
||||
| Width | |
|
||||
| WritingMode | |
|
||||
|
||||
<br>
|
|
@ -0,0 +1,17 @@
|
|||
# Control (label)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
---
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
## Propiedades pyUNO
|
|
@ -0,0 +1,112 @@
|
|||
# Cuadro de texto (text)
|
||||
|
||||
---
|
||||
|
||||
## Propiedades
|
||||
|
||||
---
|
||||
|
||||
### **value**
|
||||
|
||||
Establece o recupera el valor del control.
|
||||
|
||||
```py
|
||||
app.debug(text.value)
|
||||
```
|
||||
|
||||
|
||||
## Métodos
|
||||
|
||||
---
|
||||
|
||||
### **set_focus**
|
||||
|
||||
Envía el foco al control.
|
||||
|
||||
<br>
|
||||
|
||||
## Eventos
|
||||
|
||||
---
|
||||
|
||||
### **focus_gained**
|
||||
|
||||
Se produce al recibir el foco.
|
||||
|
||||
<br>
|
||||
|
||||
### **focus_lost**
|
||||
|
||||
Se produce al perder el foco.
|
||||
|
||||
<br>
|
||||
|
||||
### **text_changed**
|
||||
|
||||
Se produce al cambiar el contenido del control.
|
||||
|
||||
<br>
|
||||
|
||||
## Propiedades pyUNO
|
||||
|
||||
| Nombre | Descripción |
|
||||
| ------ | ----------- |
|
||||
| Align | |
|
||||
| AutoHScroll | |
|
||||
| AutoVScroll | |
|
||||
| BackgroundColor | |
|
||||
| Border | |
|
||||
| BorderColor | |
|
||||
| ContextWritingMode | |
|
||||
| DefaultControl | |
|
||||
| EchoChar | |
|
||||
| EnableVisible | |
|
||||
| Enabled | |
|
||||
| FontCharWidth | |
|
||||
| FontCharset | |
|
||||
| FontDescriptor | |
|
||||
| FontEmphasisMark | |
|
||||
| FontFamily | |
|
||||
| FontHeight | |
|
||||
| FontKerning | |
|
||||
| FontName | |
|
||||
| FontOrientation | |
|
||||
| FontPitch | |
|
||||
| FontRelief | |
|
||||
| FontSlant | |
|
||||
| FontStrikeout | |
|
||||
| FontStyleName | |
|
||||
| FontType | |
|
||||
| FontUnderline | |
|
||||
| FontWeight | |
|
||||
| FontWidth | |
|
||||
| FontWordLineMode | |
|
||||
| HScroll | |
|
||||
| HardLineBreaks | |
|
||||
| Height | |
|
||||
| HelpText | |
|
||||
| HelpURL | |
|
||||
| HideInactiveSelection | |
|
||||
| LineEndFormat | |
|
||||
| MaxTextLen | |
|
||||
| MultiLine | |
|
||||
| Name | |
|
||||
| PaintTransparent | |
|
||||
| PositionX | |
|
||||
| PositionY | |
|
||||
| Printable | |
|
||||
| ReadOnly | |
|
||||
| ResourceResolver | |
|
||||
| Step | |
|
||||
| TabIndex | |
|
||||
| Tabstop | |
|
||||
| Tag | |
|
||||
| Text | |
|
||||
| TextColor | |
|
||||
| TextLineColor | |
|
||||
| VScroll | |
|
||||
| VerticalAlign | |
|
||||
| Width | |
|
||||
| WritingMode | |
|
||||
|
||||
<br>
|
|
@ -32,6 +32,13 @@ nav:
|
|||
- Página de dibujo:
|
||||
- dp/drawpage.md
|
||||
- Formas: dp/shapes.md
|
||||
- Cuadros de diálogo:
|
||||
- dialogs/index.md
|
||||
- Etiqueta: dialogs/label.md
|
||||
- Botón de comando: dialogs/cmd.md
|
||||
- Cuadro de texto: dialogs/text.md
|
||||
- Hipervínculo: dialogs/link.md
|
||||
- Imagen: dialogs/image.md
|
||||
- Ejemplos de uso:
|
||||
- examples/index.md
|
||||
theme:
|
||||
|
@ -57,6 +64,8 @@ markdown_extensions:
|
|||
- pymdownx.snippets
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
- tables
|
||||
- pymdownx.keys
|
||||
#~ extra:
|
||||
#~ alternate:
|
||||
#~ - name: Español
|
||||
|
|
|
@ -9,7 +9,7 @@ from .easydocs import LODocuments
|
|||
from .easymain import (log, TITLE,
|
||||
BaseObject, Color,
|
||||
create_instance, set_properties)
|
||||
from .easytools import _, LOInspect, Paths, Services
|
||||
from .easytools import _, LOInspect, Paths, Services, debug, mri
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
@ -18,16 +18,17 @@ __all__ = [
|
|||
]
|
||||
|
||||
|
||||
COLOR_ON_FOCUS = Color()('LightYellow')
|
||||
# ~ COLOR_ON_FOCUS = Color()('LightYellow')
|
||||
SEPARATION = 5
|
||||
MODELS = {
|
||||
'label': 'com.sun.star.awt.UnoControlFixedTextModel',
|
||||
'text': 'com.sun.star.awt.UnoControlEditModel',
|
||||
'button': 'com.sun.star.awt.UnoControlButtonModel',
|
||||
'link': 'com.sun.star.awt.UnoControlFixedHyperlinkModel',
|
||||
'image': 'com.sun.star.awt.UnoControlImageControlModel',
|
||||
# ~ ToDo
|
||||
'radio': 'com.sun.star.awt.UnoControlRadioButtonModel',
|
||||
'checkbox': 'com.sun.star.awt.UnoControlCheckBoxModel',
|
||||
'image': 'com.sun.star.awt.UnoControlImageControlModel',
|
||||
'listbox': 'com.sun.star.awt.UnoControlListBoxModel',
|
||||
'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel',
|
||||
'tree': 'com.sun.star.awt.tree.TreeControlModel',
|
||||
|
@ -43,6 +44,7 @@ TYPE_CONTROL = {
|
|||
'stardiv.Toolkit.UnoFixedTextControl': 'label',
|
||||
'stardiv.Toolkit.UnoEditControl': 'text',
|
||||
'stardiv.Toolkit.UnoButtonControl': 'button',
|
||||
'stardiv.Toolkit.UnoImageControlControl': 'image',
|
||||
}
|
||||
|
||||
IMPLEMENTATIONS = {
|
||||
|
@ -50,6 +52,7 @@ IMPLEMENTATIONS = {
|
|||
'link': 'stardiv.Toolkit.UnoFixedHyperlinkControl',
|
||||
'roadmap': 'stardiv.Toolkit.UnoRoadmapControl',
|
||||
'pages': 'stardiv.Toolkit.UnoMultiPageControl',
|
||||
'text': 'stardiv.Toolkit.UnoEditControl',
|
||||
}
|
||||
|
||||
|
||||
|
@ -57,8 +60,9 @@ def add_listeners(events, control):
|
|||
name = control.Model.Name
|
||||
listeners = {
|
||||
'addActionListener': EventsButton,
|
||||
# ~ 'addMouseListener': EventsMouse,
|
||||
# ~ 'addFocusListener': EventsFocus,
|
||||
'addMouseListener': EventsMouse,
|
||||
'addFocusListener': EventsFocus,
|
||||
'addTextListener': EventsText,
|
||||
# ~ 'addItemListener': EventsItem,
|
||||
# ~ 'addKeyListener': EventsKey,
|
||||
# ~ 'addTabListener': EventsTab,
|
||||
|
@ -72,6 +76,9 @@ def add_listeners(events, control):
|
|||
is_roadmap = control.ImplementationName == IMPLEMENTATIONS['roadmap']
|
||||
is_pages = control.ImplementationName == IMPLEMENTATIONS['pages']
|
||||
|
||||
# ~ if control.ImplementationName == IMPLEMENTATIONS['text']:
|
||||
# ~ mri(control)
|
||||
|
||||
for key, value in listeners.items():
|
||||
if hasattr(control, key):
|
||||
if is_grid and key == 'addMouseListener':
|
||||
|
@ -84,7 +91,7 @@ def add_listeners(events, control):
|
|||
control.addItemListener(EventsItemRoadmap(events, name))
|
||||
continue
|
||||
|
||||
getattr(control, key)(listeners[key](events, name))
|
||||
getattr(control, key)(value(events, name))
|
||||
|
||||
if is_grid:
|
||||
controllers = EventsGrid(events, name)
|
||||
|
@ -118,7 +125,8 @@ class UnoBaseObject(object):
|
|||
|
||||
@property
|
||||
def properties(self):
|
||||
data = LOInspect(self.obj).properties
|
||||
properties = self.model.PropertySetInfo.Properties
|
||||
data = {p.Name: getattr(self.model, p.Name) for p in properties}
|
||||
return data
|
||||
@properties.setter
|
||||
def properties(self, properties: dict):
|
||||
|
@ -363,6 +371,41 @@ class UnoLabel(UnoBaseObject):
|
|||
self.model.Label = value
|
||||
|
||||
|
||||
class UnoLabelLink(UnoLabel):
|
||||
|
||||
def __init__(self, obj):
|
||||
super().__init__(obj)
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
return 'link'
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
"""Get link"""
|
||||
return self.model.URL
|
||||
@value.setter
|
||||
def value(self, value):
|
||||
self.model.Label = value
|
||||
self.model.URL = value
|
||||
|
||||
@property
|
||||
def url(self):
|
||||
"""Get link"""
|
||||
return self.model.URL
|
||||
@url.setter
|
||||
def url(self, value):
|
||||
self.model.URL = value
|
||||
|
||||
@property
|
||||
def label(self):
|
||||
"""Get label"""
|
||||
return self.model.Label
|
||||
@label.setter
|
||||
def label(self, value):
|
||||
self.model.Label = value
|
||||
|
||||
|
||||
# ~ https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1awt_1_1UnoControlEditModel.html
|
||||
class UnoText(UnoBaseObject):
|
||||
|
||||
|
@ -418,14 +461,34 @@ class UnoButton(UnoBaseObject):
|
|||
self.model.ImageURL = Paths.to_url(value)
|
||||
|
||||
|
||||
class UnoImage(UnoBaseObject):
|
||||
|
||||
def __init__(self, obj):
|
||||
super().__init__(obj)
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
return 'button'
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
return self.model.ImageURL
|
||||
@value.setter
|
||||
def value(self, value):
|
||||
if isinstance(value, str):
|
||||
self.model.ImageURL = value
|
||||
else:
|
||||
self.model.Graphic = value._get_graphic()
|
||||
|
||||
|
||||
UNO_CLASSES = {
|
||||
'label': UnoLabel,
|
||||
'text': UnoText,
|
||||
'button': UnoButton,
|
||||
# ~ 'link': UnoLabelLink,
|
||||
'text': UnoText,
|
||||
'link': UnoLabelLink,
|
||||
'image': UnoImage,
|
||||
# ~ 'radio': UnoRadio,
|
||||
# ~ 'checkbox': UnoCheckBox,
|
||||
# ~ 'image': UnoImage,
|
||||
# ~ 'listbox': UnoListBox,
|
||||
# ~ 'roadmap': UnoRoadmap,
|
||||
# ~ 'tree': UnoTree,
|
||||
|
@ -441,10 +504,10 @@ class DialogBox(BaseObject):
|
|||
SERVICE_DIALOG = 'com.sun.star.awt.UnoControlDialog'
|
||||
|
||||
def __init__(self, properties: dict={}):
|
||||
self._controls = {}
|
||||
obj = self._create(properties)
|
||||
super().__init__(obj)
|
||||
self._init_controls()
|
||||
self._modal = False
|
||||
|
||||
def _create_from_path(self, path: str):
|
||||
dp = create_instance(self.SERVICE, True)
|
||||
|
@ -458,13 +521,16 @@ class DialogBox(BaseObject):
|
|||
name = properties['Name']
|
||||
library = properties.get('Library', 'Standard')
|
||||
location = properties.get('Location', 'application').lower()
|
||||
|
||||
if location == 'user':
|
||||
location = 'application'
|
||||
|
||||
url = f'vnd.sun.star.script:{library}.{name}?location={location}'
|
||||
|
||||
if location == 'document':
|
||||
doc = LODocuments().active.obj
|
||||
doc = properties.get('Document', LODocuments().active)
|
||||
if hasattr(doc, 'obj'):
|
||||
doc = doc.obj
|
||||
dp = create_instance(self.SERVICE, arguments=doc)
|
||||
else:
|
||||
dp = create_instance(self.SERVICE, True)
|
||||
|
@ -500,39 +566,30 @@ class DialogBox(BaseObject):
|
|||
tipo = control.ImplementationName
|
||||
name = control.Model.Name
|
||||
if not tipo in TYPE_CONTROL:
|
||||
log.debug(f'Type control: {tipo}')
|
||||
debug(f'Type control: {tipo}')
|
||||
raise AttributeError(f"Has no class '{tipo}'")
|
||||
control = UNO_CLASSES[TYPE_CONTROL[tipo]](control)
|
||||
setattr(self, name, control)
|
||||
self._controls[name] = control
|
||||
return
|
||||
|
||||
def execute(self):
|
||||
return self.obj.execute()
|
||||
|
||||
def open(self):
|
||||
def open(self, modal=False):
|
||||
self._modal = modal
|
||||
if modal:
|
||||
self.visible = True
|
||||
return
|
||||
return self.execute()
|
||||
|
||||
def close(self, value=0):
|
||||
value = self.obj.endDialog(value)
|
||||
if self._modal:
|
||||
self.visible = False
|
||||
self.obj.dispose()
|
||||
else:
|
||||
value = self.obj.endDialog(value)
|
||||
return value
|
||||
|
||||
# ~ def close(self, value=0):
|
||||
# ~ if self._modal:
|
||||
# ~ value = self.obj.endDialog(value)
|
||||
# ~ else:
|
||||
# ~ self.visible = False
|
||||
# ~ self.obj.dispose()
|
||||
# ~ return value
|
||||
|
||||
# ~ def show(self, modal=True):
|
||||
# ~ self._modal = modal
|
||||
# ~ if modal:
|
||||
# ~ return self.obj.execute()
|
||||
# ~ else:
|
||||
# ~ self.visible = True
|
||||
# ~ return
|
||||
|
||||
@property
|
||||
def model(self):
|
||||
return self.obj.Model
|
||||
|
@ -576,6 +633,17 @@ class DialogBox(BaseObject):
|
|||
def color_on_focus(self, value):
|
||||
self._color_on_focus = get_color(value)
|
||||
|
||||
@property
|
||||
def properties(self):
|
||||
properties = self.model.PropertySetInfo.Properties
|
||||
data = {}
|
||||
for p in properties:
|
||||
try:
|
||||
data[p.Name] = getattr(self.model, p.Name)
|
||||
except:
|
||||
continue
|
||||
return data
|
||||
|
||||
@property
|
||||
def events(self):
|
||||
return self._events
|
||||
|
@ -601,9 +669,14 @@ class DialogBox(BaseObject):
|
|||
properties['Label'] = properties['URL']
|
||||
return properties
|
||||
|
||||
if tipo == 'label':
|
||||
properties['VerticalAlign'] = properties.get('VerticalAlign', 1)
|
||||
return properties
|
||||
|
||||
if tipo == 'button':
|
||||
if 'ImageURL' in properties:
|
||||
properties['ImageURL'] = self._set_image_url(properties['ImageURL'])
|
||||
properties['ImageAlign'] = properties.get('ImageAlign', 0)
|
||||
properties['FocusOnClick'] = properties.get('FocusOnClick', False)
|
||||
return properties
|
||||
|
||||
|
@ -659,7 +732,7 @@ class DialogBox(BaseObject):
|
|||
control.events = self.events
|
||||
|
||||
setattr(self, name, control)
|
||||
self._controls[name] = control
|
||||
|
||||
return control
|
||||
|
||||
|
||||
|
|
|
@ -5,14 +5,24 @@ import unohelper
|
|||
|
||||
from com.sun.star.awt import XActionListener
|
||||
from com.sun.star.lang import XEventListener
|
||||
from com.sun.star.awt import XFocusListener
|
||||
from com.sun.star.util import XModifyListener
|
||||
from com.sun.star.awt import XMouseListener
|
||||
from com.sun.star.awt import XMouseMotionListener
|
||||
from com.sun.star.awt import XTextListener
|
||||
from com.sun.star.sheet import XRangeSelectionListener
|
||||
|
||||
from .easymain import Macro, dict_to_property
|
||||
from .easymain import Macro, Color, dict_to_property
|
||||
|
||||
|
||||
__all__ = [
|
||||
'EventsButton',
|
||||
'EventsFocus',
|
||||
'EventsModify',
|
||||
'EventsMouse',
|
||||
'EventsMouseLink',
|
||||
'EventsRangeSelectionListener',
|
||||
'EventsText',
|
||||
]
|
||||
|
||||
|
||||
|
@ -93,6 +103,9 @@ class EventsRangeSelectionListener(EventsListenerBase, XRangeSelectionListener):
|
|||
|
||||
|
||||
class EventsButton(EventsListenerBase, XActionListener):
|
||||
"""
|
||||
See: https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XActionListener.html
|
||||
"""
|
||||
|
||||
def __init__(self, controller, name):
|
||||
super().__init__(controller, name)
|
||||
|
@ -102,3 +115,96 @@ class EventsButton(EventsListenerBase, XActionListener):
|
|||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
return
|
||||
|
||||
|
||||
class EventsMouse(EventsListenerBase, XMouseListener, XMouseMotionListener):
|
||||
|
||||
def __init__(self, controller, name):
|
||||
super().__init__(controller, name)
|
||||
|
||||
def mousePressed(self, event):
|
||||
event_name = f'{self._name}_click'
|
||||
if event.ClickCount == 2:
|
||||
event_name = f'{self._name}_double_click'
|
||||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
return
|
||||
|
||||
def mouseReleased(self, event):
|
||||
pass
|
||||
|
||||
def mouseEntered(self, event):
|
||||
pass
|
||||
|
||||
def mouseExited(self, event):
|
||||
pass
|
||||
|
||||
# ~ XMouseMotionListener
|
||||
def mouseMoved(self, event):
|
||||
pass
|
||||
|
||||
def mouseDragged(self, event):
|
||||
pass
|
||||
|
||||
|
||||
class EventsMouseLink(EventsMouse):
|
||||
|
||||
def mouseEntered(self, event):
|
||||
obj = event.Source.Model
|
||||
obj.TextColor = Color()('blue')
|
||||
return
|
||||
|
||||
def mouseExited(self, event):
|
||||
obj = event.Source.Model
|
||||
obj.TextColor = 0
|
||||
return
|
||||
|
||||
|
||||
class EventsFocus(EventsListenerBase, XFocusListener):
|
||||
|
||||
def __init__(self, controller, name):
|
||||
super().__init__(controller, name)
|
||||
|
||||
def focusGained(self, event):
|
||||
service = event.Source.Model.ImplementationName
|
||||
if service == 'stardiv.Toolkit.UnoControlListBoxModel':
|
||||
return
|
||||
|
||||
event_name = f'{self._name}_focus_gained'
|
||||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
|
||||
# ~ obj = event.Source.ModelBackgroundColor = 16777184
|
||||
return
|
||||
|
||||
def focusLost(self, event):
|
||||
event_name = f'{self._name}_focus_lost'
|
||||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
|
||||
# ~ event.Source.Model.BackgroundColor = -1
|
||||
return
|
||||
|
||||
|
||||
class EventsModify(EventsListenerBase, XModifyListener):
|
||||
|
||||
def __init__(self, controller, name):
|
||||
super().__init__(controller, name)
|
||||
|
||||
def modified(self, event):
|
||||
event_name = f'{self._name}_modified'
|
||||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
return
|
||||
|
||||
|
||||
class EventsText(EventsListenerBase, XTextListener):
|
||||
|
||||
def __init__(self, controller, name):
|
||||
super().__init__(controller, name)
|
||||
|
||||
def textChanged(self, event):
|
||||
event_name = f'{self._name}_text_changed'
|
||||
if hasattr(self._controller, event_name):
|
||||
getattr(self._controller, event_name)(event)
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue