/// <summary> /// Deletes files, heals selection. /// </summary> void UIDeleteWithRecover(DeleteFilesEventArgs args, bool redraw) { // call UIDeleteFiles(args); if (args.Result == JobResult.Ignore) { return; } // to recover bool recover = args.Result == JobResult.Incomplete && SelectionExists; // update, drop selection Update(false); // recover selection if (recover) { if (args.FilesToStay.Count > 0) { SelectFiles(args.FilesToStay, null); } else { SelectFiles(args.Files, null); } } // done if (redraw) { Redraw(); } }
/// <summary> /// Deletes the files. /// </summary> /// <param name="args">.</param> public virtual void DeleteFiles(DeleteFilesEventArgs args) { if (args != null) { args.Result = JobResult.Ignore; } }
/// <summary> /// Calls <see cref="FarNet.Explorer.DeleteFiles"/> and <see cref="OnThisFileChanged"/>. /// </summary> /// <param name="args">.</param> public virtual void UIDeleteFiles(DeleteFilesEventArgs args) { if (args == null) { return; } Explorer.DeleteFiles(args); if (args.Result != JobResult.Ignore) { OnThisFileChanged(args); } }
/// <summary> /// Delete action. /// </summary> /// <param name="force">The force mode flag.</param> public void UIDelete(bool force) { // can? if (!Explorer.CanDeleteFiles) { return; } // args var args = new DeleteFilesEventArgs(ExplorerModes.None, SelectedFiles, force); if (args.Files.Count == 0) { return; } // call UIDeleteWithRecover(args, true); }
void UICopyMoveComplete(CopyFilesEventArgs args) { // info bool isIncomplete = args.Result == JobResult.Incomplete; bool isAllToStay = isIncomplete && args.FilesToStay.Count == 0; // Copy: do not update the source, files are the same if (!args.Move) { // keep it as it is if (isAllToStay || !SelectionExists) { return; } // drop selection this.UnselectAll(); // recover if (isIncomplete) { SelectFiles(args.FilesToStay, null); } // show this.Redraw(); return; } // Move: no need to delete or all to stay or cannot delete if (!args.ToDeleteFiles || isAllToStay || !this.Explorer.CanDeleteFiles) { // the source may have some files deleted, update, drop selection this.Update(false); // recover selection if (isIncomplete) { if (isAllToStay) { SelectFiles(args.Files, null); } else { SelectFiles(args.FilesToStay, null); } } // show this.Redraw(); return; } // Move: delete is requested, delete the source files // exclude files to stay var filesToDelete = args.Files; if (isIncomplete) { var filesToDelete2 = new List <FarFile>(filesToDelete); foreach (var file in args.FilesToStay) { filesToDelete2.Remove(file); } filesToDelete = filesToDelete2; } // call var argsDelete = new DeleteFilesEventArgs(ExplorerModes.Silent, filesToDelete, false); this.UIDeleteWithRecover(argsDelete, false); if (isIncomplete) { SelectFiles(args.FilesToStay, null); } // show Redraw(); }