El 4 de mayo de 2017, 21:44, Alex Irmel Oviedo Solis <alleinerw...@gmail.com
> escribió:

> Buenas tardes amigas y amigos, quisiera que me den una luz, quiero obtener
> la lista de ventanas abiertas de gvSIG para un script que estoy
> desarrollando o en su defecto como crear una ventana del tipo Singleton.
> Saludos a todos
>


Voy comentando cosas sobre ventanas en gvSIG.

Cuando se inicio el desarrollo de gvSIG, se creo un "MDIManager" que se
encargase de la gestion de las ventanas. Tiene metodos como:

- addCentredWindow(IWindow p)
- addWindow(IWindow p)
- addWindow(IWindow p, int align)
- closeWindow(IWindow p)
- closeAllWindows()
- getActiveWindow()
- getAllWindows(), esta seria la forma de obtener la lista
 de ventanas abiertas.

Hay un interface IWindow, que define las caracteristicas de la ventana como:

- Si se puede minimizar
- Si se puede  maximinar
- Si se puede redimensionar
- Cual es su titulo
- Si va a ser modal o no.
- Que ancho y alto tiene en pixels.


Normalmente para crear una ventana creas tu clase que extiende de JPanel y
haces que implemente IWindow y es eso con lo que trabaja el "MDIManager".

Esto hace que sea bastante engorroso crear ventanas simples.
Para la mayoria de los casos es suficiente con crear un JPanel y
simplemente decirle que lo muestre como una ventana modal o no ajustando su
tamaño al contenido y poco mas. Usar el MDIManager, ademas de ser engorroso
obligaba a que si querias presentar una ventana desde una libreria de gvSIG
debias depender de andami, con lo que no podias hacer que el interface de
usuario de tu libreria fuese independiente del framework de ejecucion de
gvSIG.

Asi que mas tarde se introdujo el concepto de "WindowsManager". Esta en una
libreria y no depnde de andami, aunque este aporta una implementacion para
el. Asi podemos presentar una ventana de forma simple, sin muchos
calentamiento de cabeza. Seria algo como:

  ToolsSwingLocator.getWindowManager().showWindow(mijpanel, eltitulo,
WindowManager.MODE.DIALOG)


Ahora mismo estan conviviendo los dos mecanismos en gvSIG.
Si no quieres mas que una ventana modal o no que sea redimensionable te
basta con crear un JPanel y usar el WindowsManager para presentarla.
Si precisas hilar mas fino en cuanto al comportamiento de la ventana usas
el "MDIManager".

Esto en cuando al funcionamiento general de las ventanas.
Pero en gvSIG hay algunas ventanas que tienen un comportamiento un tanto
especial. Por ejemplo la ventana del proyecto o la de una vista. Para una
vista dada, solo hay una ventana abierta de ella. No es posible abrir dos
ventanas de una misma vista. Si ya esta abierta la vista y tratamos de
abrirla de nuevo, aunque sea por codigo, simplemente se activa la ventana
de esa vista que ya existia sin abrirse una nueva. Este tipo de ventanas
son las que en gvSIG se llaman SingletonWindow.

Normalmente cuando hacemos un componente de interface de usuario, por
ejemplo la ventana de la vista, por un lado tendremos el interface de
usuario, y por otro el modelo de este. En el caso de la vista, por un lado
tendremos el ViewDocument, solo con la parte de logica de la vista, y por
otro un IView que representa al interface de usuario y extiende de IWindow
y SingletonWindow, y que su metodo getWindowModel devolvera el ViewDocument
de la vista.

Cuando intentamos volver a crear una ventana de una vista, el "MDIManager"
se recorre las IWindow ya abiertas, les pregunta si son "SingletonWindow" y
de serlo les pide el "WindowModel" y lo compara con el de la ventana que se
quiere crear. Si son el mismo, reutiliza la ya existente.

¿ Como creas una ventana de tipo SingletonWindow ?

Lo primero tendras que tener una clase que represente la parte de logica de
tu ventana.
Luego haras tu panel, y haras que implemente el interface SingletonWindow.
Normalmente para crear tu ventana, crearas la parte de logica, y luego
instanciaras tu parte de UI pasandole la parte de logica. Y haras que el
metodo getWindowModel devuelba la parte de logica de tu ventana. Y para
presentarla deberas llamar a alguno de los metodos "addWindow" del
"MDIManager".

Algunas cosillas mas...
El interface IWindow te obliga a implementar:

  public WindowInfo getWindowInfo()

WindowInfo es una clase que usaras directamente, no tienes que extender de
ella. Simplemente en tu panel instancias un WindowInfo y lo rellenas con
los atributos que precises para luego devolverlo en el getWindowInfo.

Para acceder al "MDIManager" tienes un par de formas, las dos admitidas en
gvSIG.
Por un lado usando el MDIManagerFactory:

  mdimanager = MDIManagerFactory.createManager()
Este crea el MDIManager si no esta creado ya o te devuelbe el ya que exista
si ya habia sido creado antes.
O puedes usar el ApplicationManager:

  mdimanager = ApplicationLocator.getManager().getUIManager()

Espero que se entienda algo y que te sirba la explicacion.

Un saludo
Joaquin




>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores@listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelce...@gvsig.com
jjdelce...@gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores@listserv.gva.es
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de 
baja en esta lista, acuda a la siguiente dirección: 
https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a