/// <summary>
        /// Creates the view object for the given ViewModel.
        /// The created object will be displayed on the whole window.
        /// </summary>
        /// <param name="viewModel">The view model for which to create a view.</param>
        public FrameworkElement TryCreateFullView(NavigateableViewModelBase viewModel)
        {
            FolderViewModel actFolder = viewModel as FolderViewModel;
            if (actFolder == null) { return null; }

            MultimediaFolderViewModelExtension actFolderExt = actFolder.TryGetExtension<MultimediaFolderViewModelExtension>();
            if (actFolderExt == null) { return null; }

            // Choose by ViewType
            switch (actFolder.FolderConfig.ViewType)
            {
                case Constants.VIEW_TYPE_IMAGE_SLIDER:
                    return new MultimediaSliderView();
            }

            // Automatic detection when no ViewType given
            if ((string.IsNullOrEmpty(actFolder.FolderConfig.ViewType)) &&
                (actFolderExt.CountFullImages > 0) &&
                (actFolder.SubViewModels.Count == 0))
            {
                if (actFolderExt.CountFullImages > 1) { return new MultimediaSliderView(); }
                else { return new MultimediaSingleView(); }
            }

            return null;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="FolderViewViewModell"/> class.
        /// </summary>
        /// <param name="parent">The parent viewmodel.</param>
        /// <param name="basePath">The base path this viewmodel is based on.</param>
        public FolderViewModel(NavigateableViewModelBase parent, string basePath)
            : base(parent)
        {
            m_basePath = basePath;

            // Set default folder configuration
            m_folderConfig = FolderConfiguration.Default;
        }
        /// <summary>
        /// Loads the preview content asynchronous.
        /// </summary>
        /// <param name="ownerViewModel">The parent view model.</param>
        /// <param name="cancelToken">The cancel token.</param>
        public async Task LoadPreviewContentAsync(NavigateableViewModelBase ownerViewModel, CancellationToken cancelToken)
        {
            FolderViewModel ownerFolder = ownerViewModel as FolderViewModel;
            if (ownerFolder == null) { return; }

            // Load all multimedia content
            await LoadPreviewContentImagesAsync(ownerFolder, cancelToken);
            LoadPreviewContentVideos(ownerFolder);
        }
        public async Task LoadDetailContentAsync(NavigateableViewModelBase ownerViewModel, CancellationToken cancelToken)
        {
            // Load the ViewModel
            KinectRootViewModel rootViewModel = new KinectRootViewModel(ownerViewModel);
            await rootViewModel.LoadPreviewContentAsync(cancelToken);

            // Register the ViewModel on the owner
            ownerViewModel.SubViewModels.Add(rootViewModel);
        }
        /// <summary>
        /// Creates the view object for the given ViewModel.
        /// The created object will be displayed on the whole window.
        /// </summary>
        /// <param name="viewModel">The view model for which to create a view.</param>
        public static FrameworkElement CreateFullView(NavigateableViewModelBase viewModel)
        {
            // Try to create the view using one of the loaded modules
            // (first one wins)
            foreach (IKinectLoungeModule actModule in ModuleManager.LoadedModules)
            {
                FrameworkElement actResult = actModule.TryCreateFullView(viewModel);
                if (actResult != null) { return actResult; }
            }

            // Create a FolderView object if nothing else found
            FolderView result = new FolderView();
            result.DataContext = viewModel;
            return result;
        }
 public KinectDashboardViewModel(NavigateableViewModelBase parent)
     : base(parent)
 {
 }
        /// <summary>
        /// Loads all folder contents that belong to this extension.
        /// </summary>
        /// <param name="ownerViewModel">The ViewModel for which to load detail content.</param>
        /// <param name="cancelToken">The cancel token.</param>
        public async Task LoadDetailContentAsync(NavigateableViewModelBase ownerViewModel, CancellationToken cancelToken)
        {
            while(m_fullViewsPreview.Count > 0)
            {
                if (cancelToken.IsCancellationRequested) { return; }

                ViewModelBase actPreviewVM = m_fullViewsPreview[0];
                m_fullViewsPreview.RemoveAt(0);

                // Handle images
                ImageViewModel actImage = actPreviewVM as ImageViewModel;
                if (actImage != null)
                {
                    await actImage.PreloadAsync(1024, 768);
                }

                // Delay some time before adding the ViewModel
                await Task.Delay(300);

                m_fullViewsLoaded.Add(actPreviewVM);
            }
        }
 /// <summary>
 /// Does this object extend the given object?
 /// Return false to ensure that no further logic is executed here.
 /// </summary>
 /// <param name="ownerViewModel">The owner view model.</param>
 public bool ExtendsViewModelType(NavigateableViewModelBase ownerViewModel)
 {
     return ownerViewModel is FolderViewModel;
 }
 /// <summary>
 /// Loads the preview content asynchronous.
 /// </summary>
 /// <param name="ownerViewModel">The owner view model.</param>
 /// <param name="cancelToken">The cancel token.</param>
 public Task LoadPreviewContentAsync(NavigateableViewModelBase ownerViewModel, CancellationToken cancelToken)
 {
     return Task.Delay(100);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="KinectRootViewModel"/> class.
 /// </summary>
 /// <param name="parent">The parent of this ViewModel object.</param>
 public KinectRootViewModel(NavigateableViewModelBase parent)
     : base(parent)
 {
     this.SubViewModels.Add(new KinectRawStreamsViewModel(this));
     this.SubViewModels.Add(new KinectDashboardViewModel(this));
 }