public CutSlideOperation(Model model, Slide slide, Note past, Note future) { #region 分割した手前側のSlideノーツを生成 Slide before = new Slide(); foreach (var note in slide.Where(x => x.Position.Tick < past.Position.Tick)) { before.Add(note); } before.Add(new SlideEnd(past)); #endregion #region 分割した奥側のSlideノーツを生成 Slide after = new Slide(); after.Add(new SlideBegin(future)); foreach (var note in slide.Where(x => x.Position.Tick > future.Position.Tick)) { after.Add(note); } #endregion Invoke += () => { if (!slide.Any() || !before.Any() || !after.Any()) { Logger.Warn("空のSlideが存在します。", true); return; } model.NoteBook.UnPut(slide); model.NoteBook.Put(before); model.NoteBook.Put(after); }; Undo += () => { if (!slide.Any() || !before.Any() || !after.Any()) { Logger.Warn("空のSlideが存在します。", true); return; } model.NoteBook.Put(slide); model.NoteBook.UnPut(before); model.NoteBook.UnPut(after); }; }
protected Presentation Merge(UserIdentity identity, PresentationInfo presentationInfo, Slide[] newSlideArr, Presentation presentationStored, out LockingInfo[] lockedSlides, out Slide[] slideAlreadyExists) { IEnumerable<Slide> existedSlides = presentationStored.SlideList.Where( sl => newSlideArr.Any(newsl=>newsl.Id == sl.Id)); if (existedSlides.Count() != 0) { slideAlreadyExists = existedSlides.ToArray(); lockedSlides = new LockingInfo[] {}; return null; } foreach (Slide slide in newSlideArr) { //Slide slideStored = presentationStored.SlideList.Find( // sl => sl.Id == slide.Id); //if (slideStored != null) return null; slide.State = SlideState.Normal; presentationStored.SlideList.Add(slide); } // анализ удаленных слайдов List<Slide> slideListDeleted = presentationStored.SlideList.FindAll( sl => !presentationInfo.SlideInfoList.Exists(sli => sli.Id == sl.Id)); if (!IsStandAlone) { IEnumerable<LockingInfo> lockedSl = slideListDeleted.Select( sl => _lockService.GetLockInfo(ObjectKeyCreator.CreateSlideKey(presentationInfo.UniqueName, sl.Id))).Where( li=>li != null); if (lockedSl.Count() != 0) { lockedSlides = lockedSl.ToArray(); slideAlreadyExists = new Slide[] {}; return null; } } // удаляем слайды presentationStored.SlideList.RemoveAll(slideListDeleted.Contains); presentationStored.SavePresentationLevelChanges(presentationInfo); slideAlreadyExists = new Slide[] { }; lockedSlides = new LockingInfo[] { }; return presentationStored; }