chronos: escritorios virtuales


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)

image

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)

About these ads

Deja un comentario

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s