Example #1
0
        /// <summary>
        /// Constructs a View model from a rectangles (images) that were loaded
        /// </summary>
        /// <param name="rects">The loaded rects</param>
        public LoadedImagesTreeViewModel(IEnumerable <PPRect> rects)
        {
            eventAggregator = ServiceLocator.Current.GetInstance <IEventAggregator>();

            var folderImage = BitmapManager.LoadBitmap("folder.png");

            folderImageVM = folderImage != null ? new ImageViewModel(folderImage) : null;

            //Paths = images.Select(x => x.ImagePath);
            FSEntries = CreateFSEntries(rects);

            Unload = new RelayCommand((x) =>
            {
                //Task.Factory.StartNew(() =>
                //{
                var node = x as NodeVM;
                IEnumerable <string> paths = Enumerable.Empty <string>();


                var nodesToUnload = new Stack <NodeVM>();
                nodesToUnload.Push(node);

                while (nodesToUnload.Count > 0)
                {
                    var currNode = nodesToUnload.Pop();
                    if (currNode.IsDirectory)
                    {
                        foreach (var childNode in currNode.Children)
                        {
                            nodesToUnload.Push(childNode);
                        }
                    }
                    else
                    {
                        paths = paths.Append(currNode.Path);
                    }
                }

                eventAggregator.GetEvent <UnloadImagesEvent>().Publish(new UnloadImagesPayload(paths));
                //only uppon success
                if (RemoveNode(FSEntries, node))
                {
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FSEntries)));
                }
                //}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
            }, (_) => true);

            OpenInFileExplorer = new RelayCommand((x) =>
            {
                var path            = ((NodeVM)x).Path;
                var explorerService = new Services.OpenFileExplorer();
                if (System.IO.Directory.Exists(path) || System.IO.File.Exists(path))
                {
                    explorerService.ShowFileExplorer(path);
                }
                else
                {
                    throw new InvalidOperationException($"Error occured, the file system entry {path} does not exist anymore");
                }
            }, (_) => true);

            NodeRightClick = new RelayCommand((x) =>
            {
                if (x is NodeVM node)
                {
                    node.IsSelected = true;
                }
            }, (_) => true);
        }