public void Handle(RootChangedEvent message)
        {
            switch (message.ChangeType)
            {
            case ChangeType.Changed:
                _initializer.RootModels = message.AppliedRootDirectories;
                break;

            case ChangeType.Created:
                List <IEntryModel> rootModels = _initializer.RootModels.ToList();
                rootModels.AddRange(message.AppliedRootDirectories);
                _initializer.RootModels = rootModels.ToArray();
                break;

            case ChangeType.Deleted:
                List <IEntryModel> rootModels2 = _initializer.RootModels.ToList();
                foreach (var d in message.AppliedRootDirectories)
                {
                    if (rootModels2.Contains(d))
                    {
                        rootModels2.Remove(d);
                    }
                }
                _initializer.RootModels = rootModels2.ToArray();
                break;
            }
        }
        public void Handle(RootChangedEvent message)
        {
            Queue <IScriptCommand> cmds = new Queue <IScriptCommand>();

            cmds.Enqueue(Explorer.ChangeRoot(message.ChangeType, message.AppliedRootDirectories));

            if (message.Sender != null && message.Sender != this)
            {
                cmds.Enqueue(UIScriptCommands.ExplorerGoToValue(CurrentDirectory.EntryModel));
            }
            else
            {
                switch (message.ChangeType)
                {
                case ChangeType.Changed:
                    cmds.Enqueue(UIScriptCommands.ExplorerGoToValue(message.AppliedRootDirectories.First()));
                    break;

                case ChangeType.Deleted:
                    cmds.Enqueue(UIScriptCommands.ExplorerGoToValue(RootModels.FirstOrDefault()));
                    break;
                }
            }

            Commands.ExecuteAsync(cmds.ToArray());
        }
        public override async Task <IScriptCommand> ExecuteAsync(ParameterDic pm)
        {
            IEntryModel[] entryModels = DirectoryEntryKey == null ? new IEntryModel[] { } :
            (await pm.GetValueAsEntryModelArrayAsync(DirectoryEntryKey));

            object evnt = new RootChangedEvent(ChangeType, entryModels);;

            return(CoreScriptCommands.BroadcastEvent(EventsKey, evnt, NextCommand));
        }
Example #4
0
        public static void InitializeScriptCommands(IExplorerViewModel explorerModel,
                                                    IWindowManager windowManager, IEventAggregator events, params IProfile[] profiles)
        {
            var initilizer = AppViewModel.getInitializer(windowManager, events, explorerModel.RootModels.ToArray(),
                                                         new ColumnInitializers(),
                                                         new ScriptCommandsInitializers(windowManager, events),
                                                         new ToolbarCommandsInitializers(windowManager));


            explorerModel.FileList.Commands.Commands.Open =
                FileList.IfSelection(evm => evm.Count() == 1,
                                     FileList.IfSelection(evm => evm[0].EntryModel.IsDirectory,
                                                          FileList.OpenSelectedDirectory,        //Selected directory
                                                          FileList.AssignSelectionToParameter(
                                                              new OpenWithScriptCommand(null))), //Selected non-directory
                                     ResultCommand.NoError                                       //Selected more than one item, ignore.
                                     );


            explorerModel.FileList.Commands.Commands.NewFolder =
                FileList.Do(flvm => WPFScriptCommands.CreatePath(
                                flvm.CurrentDirectory, "NewFolder", true, true,
                                //FileList.Do(flvm => CoreScriptCommands.DiskCreateFolder(
                                //        flvm.CurrentDirectory, "NewFolder", "{DestinationFolder}", NameGenerationMode.Rename,
                                m => FileList.Refresh(FileList.Select(fm => fm.Equals(m), ResultCommand.OK), true)));

            explorerModel.FileList.Commands.Commands.Delete =
                FileList.IfSelection(evm => evm.Count() >= 1,
                                     WPFScriptCommands.IfOkCancel(windowManager, pd => "Delete",
                                                                  pd => String.Format("Delete {0} items?", (pd["FileList"] as IFileListViewModel).Selection.SelectedItems.Count),
                                                                  WPFScriptCommands.ShowProgress(windowManager, "Delete",
                                                                                                 ScriptCommands.RunInSequence(
                                                                                                     FileList.AssignSelectionToParameter(
                                                                                                         IOScriptCommands.DeleteFromParameter),
                                                                                                     new HideProgress())),
                                                                  ResultCommand.NoError),
                                     NullScriptCommand.Instance);


            explorerModel.FileList.Commands.Commands.Copy =
                FileList.IfSelection(evm => evm.Count() >= 1,
                                     WPFScriptCommands.IfOkCancel(windowManager, pd => "Copy",
                                                                  pd => String.Format("Copy {0} items?", (pd["FileList"] as IFileListViewModel).Selection.SelectedItems.Count),
                                                                  ScriptCommands.RunInSequence(FileList.AssignSelectionToParameter(ClipboardCommands.Copy)),
                                                                  ResultCommand.NoError),
                                     NullScriptCommand.Instance);

            explorerModel.FileList.Commands.Commands.Cut =
                FileList.IfSelection(evm => evm.Count() >= 1,
                                     WPFScriptCommands.IfOkCancel(windowManager, pd => "Cut",
                                                                  pd => String.Format("Cut {0} items?", (pd["FileList"] as IFileListViewModel).Selection.SelectedItems.Count),
                                                                  ScriptCommands.RunInSequence(FileList.AssignSelectionToParameter(ClipboardCommands.Cut)),
                                                                  ResultCommand.NoError),
                                     NullScriptCommand.Instance);

            explorerModel.DirectoryTree.Commands.Commands.Delete =
                WPFScriptCommands.IfOkCancel(windowManager, pd => "Delete",
                                             pd => String.Format("Delete {0}?", ((pd["DirectoryTree"] as IDirectoryTreeViewModel).Selection.RootSelector.SelectedValue.Label)),
                                             WPFScriptCommands.ShowProgress(windowManager, "Delete",
                                                                            ScriptCommands.RunInSequence(
                                                                                DirectoryTree.AssignSelectionToParameter(
                                                                                    IOScriptCommands.DeleteFromParameter),
                                                                                new HideProgress())),
                                             ResultCommand.NoError);


            //explorerModel.DirectoryTree.Commands.Commands.Map =
            //    UIScriptCommands.ExplorerShow

            if (profiles.Length > 0)
            {
                explorerModel.DirectoryTree.Commands.CommandDictionary.Map =
                    Explorer.PickDirectory(initilizer, profiles,
                                           dir => Explorer.BroadcastRootChanged(RootChangedEvent.Created(dir)), ResultCommand.NoError);
            }



            //explorerModel.Commands.ScriptCommands.Transfer =
            //    TransferCommand =
            //    new TransferCommand((effect, source, destDir) =>
            //        source.Profile is IDiskProfile ?
            //            IOScriptCommands.Transfer(source, destDir, effect == DragDropEffects.Move)
            //            : ResultCommand.Error(new NotSupportedException())
            //        , _windowManager);
        }