Carlos Blog
Carlos Blog
chronos: escritorios virtuales
Publicado por en 2 marzo 2010
Aprovechando los cambios que he estado haciendo la última seana para replantear una parte de chronos (tengo pendiente escribir un post sobre el tema), estos dos últimos dias he aprovechado para implementar los escritorios virtuales (bueno va a dar soporte a dos escritorios solamente por el momento).
El diagrama de clases para los escritorios virtuales queda así (por el momento)
En la ventana principal los escritorios se registran como escritorios virtuales así
<desktopControls:Desktop x:Name="VirtualDesktop01" Grid.Row="3" Id="94fa801f-bef7-437a-ba75-352f1ede6fb9" Visibility="Collapsed" windows:VirtualDesktopManager.IsDesktop="True" dragdrop:DragDropManager.IsDropTarget="True" Background="Transparent" AllowDrop="True" SnapsToDevicePixels="True" ClipToBounds="False"> </desktopControls:Desktop> <desktopControls:Desktop x:Name="VirtualDesktop02" Grid.Row="3" Id="2afc760e-9450-448d-9f28-5311c49e4773" Visibility="Collapsed" windows:VirtualDesktopManager.IsDesktop="True" dragdrop:DragDropManager.IsDropTarget="True" Background="Transparent" AllowDrop="True" SnapsToDevicePixels="True" ClipToBounds="False"> </desktopControls:Desktop>
El Id servirá para identificar, internamente, una instancia concreta de un escritorio y el nombre se utilizará para el archivo que se generará al guardar el escritorio.
La “dependency property” VirtualDesktopManager.IsDesktop se
encargará de registrar el escritorio virtual.
El ViewModel de la ventana principal tiene un nuevo comando para cambiar de escritorio
public ICommand SwitchDesktopCommand { get { if (this.switchDesktop == null) { this.switchDesktop = new ActionCommand(() => OnSwitchDesktop()); } return this.switchDesktop; } }
que se encargará de realizar el cambio de la siguiente forma
/// <summary> /// Handles the switch desktop command action /// </summary> private void OnSwitchDesktop() { ServiceLocator.GetService<IVirtualDesktopManager>().SwitchDesktop(); }
La clase VirtualDesktopManager está declara como un servicio de nRoute
[MapService(typeof(IVirtualDesktopManager), InitializationMode=InitializationMode.WhenAvaliable, Lifetime=InstanceLifetime.Singleton)] public sealed class VirtualDesktopManager : ObservableObject, IVirtualDesktopManager
tiene métodos para, cambiar de escritorio, activar el escritorio por defecto (que por el momento será siempre el primero registrado), visualizar una ventana, widget o acceso directo en el escritorio activo, etc. En general los métodos de esta clase se limitan a llamar a los métodos equivalentes de la clase que representa el escritorio virtual (que debe ser una instancia de VirtualDesktop).
Ahí va un video mostrando el cambio de escritorio (está grabado con camstudio, la calidad no es muy buena … pero como ejemplo debería ser más que suficiente)