public override void CanClose(Action <bool> callback) { CloseStrategy.Execute(items.ToList(), (canClose, closable) => { if (!canClose && closable.Any()) { if (closable.Contains(ActiveItem)) { var list = items.ToList(); var next = ActiveItem; do { var previous = next; next = DetermineNextItemToActivate(list, list.IndexOf(previous)); list.Remove(previous); } while (closable.Contains(next)); var previousActive = ActiveItem; ChangeActiveItem(next, true); items.Remove(previousActive); var stillToClose = closable.ToList(); stillToClose.Remove(previousActive); closable = stillToClose; } EnumerableExtensions.Apply(closable.OfType <IDeactivate>(), x => x.Deactivate(true)); items.RemoveRange(closable); } callback(canClose); }); }
public OneActive() { items.CollectionChanged += (s, e) => { switch (e.Action) { case NotifyCollectionChangedAction.Add: EnumerableExtensions.Apply(e.NewItems.OfType <IChild>(), x => x.Parent = this); break; case NotifyCollectionChangedAction.Remove: EnumerableExtensions.Apply(e.OldItems.OfType <IChild>(), x => x.Parent = null); break; case NotifyCollectionChangedAction.Replace: EnumerableExtensions.Apply(e.NewItems.OfType <IChild>(), x => x.Parent = this); EnumerableExtensions.Apply(e.OldItems.OfType <IChild>(), x => x.Parent = null); break; case NotifyCollectionChangedAction.Reset: EnumerableExtensions.Apply(items.OfType <IChild>(), x => x.Parent = this); break; } }; }
protected override void OnDeactivate(bool close) { if (close) { EnumerableExtensions.Apply(items.OfType <IDeactivate>(), x => x.Deactivate(true)); items.Clear(); } else { ScreenExtensions.TryDeactivate(ActiveItem, false); } }
public static GitStashInfo GetStashDetails(GitStash stash) { GitStashInfo res = null; var cmd = "git"; var args = $"-C \"{stash.GitDirectory}\" stash show {stash.Id}"; ScriptHelper.ExecuteScript(cmd, args, ScriptExecutionSettings.OneOutputStream, s => { res = GitStashInfo.ParseFromCmdResult(s, stash.GitDirectory); EnumerableExtensions.Apply(res.Changes, change => change.Image = FileHelper.GetFileIconForExtensionOrFilename(Path.GetExtension(change.FileName)).ToBitmap().ToImageSource()); res.Stash = stash; }); return(res); }