public CreatePresentationResult CreatePresentation(UserIdentity sender, PresentationInfo presentationInfo, out int[] labelNotExists) { labelNotExists = presentationInfo.GetUsedLabels().Except( _configuration.LabelStorageAdapter.GetLabelStorage().Select(lb => lb.Id)).ToArray(); if (labelNotExists.Length != 0) return CreatePresentationResult.LabelNotExists; if (null != _presentationDAL.GetPresentationInfo(presentationInfo.UniqueName)) return CreatePresentationResult.SameUniqueNameExists; if (null != _presentationDAL.GetPresentationInfoByPresentationName(presentationInfo.Name)) return CreatePresentationResult.SameNameExists; bool isSuccess = _presentationDAL.SavePresentation(sender, presentationInfo.CreatePresentationStub()); if (isSuccess) return CreatePresentationResult.Ok; else return CreatePresentationResult.SameNameExists; }
public PresentationDesignerForm(PresentationInfo aPresentationInfo) { m_PresentationInfo = aPresentationInfo; m_Presentation = aPresentationInfo.CreatePresentationStub(); PresentationController.CreatePresentationController(); PresentationController.Instance.PresentationChanged = false; PresentationChanged = new Changed(() => { this.saveMenuButton.Enabled = PresentationController.Instance.PresentationChanged; this.savePresentationToolButton.Enabled = PresentationController.Instance.PresentationChanged; this.ChangedStatus.Visible = PresentationController.Instance.PresentationChanged; this.ChangedStatus.Text = PresentationController.Instance.ChangedTextStatus; }); PresentationController.Instance.OnChanged += PresentationChanged; PresentationController.Instance.OnPresentationLockChanged += new PresentationLockChanged(Instance_OnPresentationLockChanged); PresentationController.Instance.OnPresentationRemoved += new Changed(Instance_OnPresentationRemoved); PresentationController.Instance.OnPresentationLockedExternally += new PresentationLockedExternally(Instance_OnPresentationLockedExternally); PresentationController.Instance.OnPresentationUnlockedExternally += new PresentationUnlockedExternally(Instance_OnPresentationUnlockedExternally); PresentationController.Instance.OnSlideSelectionChanged += new SlideSelectionChanged(Instance_OnSlideSelectionChanged); PresentationController.Instance.OnOtherUserLockForShow += new SlideChanged(Instance_OnOtherUserLockForShow); UndoService.CreateUndoService(); PresentationController.Instance.AssignPresentation(m_Presentation, m_PresentationInfo); InitializeComponent(); RefreshTitle(); this.statusStrip.ContextMenuStrip = null; this.ChangedStatus.Visible = false; this.WindowState = FormWindowState.Maximized; UndoService.Instance.OnHistoryChanged += new HistoryChanged(OnHistoryChanged); identity = Thread.CurrentPrincipal as UserIdentity; slideDiagram.SwitchPlayerMode(false); toolStripEx2.Enabled = false; PresentationController.Instance.RefreshLockingInfo(); LockingInfo li = ((PresentationInfoExt)m_PresentationInfo).LockingInfo; if (li != null) { string info = String.Format(lockedByUser, string.IsNullOrEmpty(li.UserIdentity.User.FullName) ? li.UserIdentity.User.Name : li.UserIdentity.User.FullName, li.RequireLock == RequireLock.ForShow ? "для показа" : "для редактирования"); this.LockingStatus.Visible = true; this.LockingStatus.Text = info; if (li.RequireLock == RequireLock.ForShow) { layoutPreviewMenuButton.Enabled = false; previewToolButton.Enabled = false; } } if (layoutPreviewMenuButton.Enabled || previewToolButton.Enabled) { layoutPreviewMenuButton.Enabled = previewToolButton.Enabled = !LayoutController.Instance.IsShownByPlayer(); } SlideGraphController.Instance.OnSlideHover += new EventHandler<SlideEventArgs>(Instance_OnSlideHover); updateMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; refreshDisplayMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; refreshSlidesMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; commonSourcesRefreshMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; equipmentRefreshMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; toXmlMenuButton.Enabled = !DesignerClient.Instance.IsStandAlone; LayoutController.Instance.OnShownStatusChanged += new Action<bool>(Instance_OnShownStatusChanged); layoutPreviewMenuButton.Visible = previewToolButton.Visible = !DesignerClient.Instance.IsStandAlone; }
void PresentationNotifier_OnObjectChanged(object sender, NotifierEventArg<IList<ObjectInfo>> e) { if (e.Data != null) { foreach (ObjectInfo info in e.Data) { if (!_identity.Equals(info.UserIdentity)) { if (info.ObjectKey.GetObjectType() == ObjectType.Presentation) { if (m_Presentation.UniqueName == ((PresentationKey)info.ObjectKey).PresentationUniqueName && !PresentationLocked) { m_PresentationInfo = DesignerClient.Instance.PresentationWorker.GetPresentationInfo(m_Presentation.UniqueName); Slide[] slides = GetLockedSlides(); m_Presentation = m_PresentationInfo.CreatePresentationStub(); //merge foreach (Slide s in slides) { Slide dest = m_Presentation.SlideList.Find(sl => sl.Id == s.Id); if (dest == null) continue; dest.SaveSlideLevelChanges(s); dest.IsLocked = s.IsLocked; dest.Cached = s.Cached; dest.State = s.State; //dest.SourceList.Clear(); //dest.SourceList.AddRange(s.SourceList); //dest.DeviceList.Clear(); //dest.DeviceList.AddRange(s.DeviceList); //dest.DisplayList.Clear(); //dest.DisplayList.AddRange(s.DisplayList); } //update presentation if (OnPresentationChangedExternally != null) OnPresentationChangedExternally(); continue; } } if (info.ObjectKey.GetObjectType() == ObjectType.Slide) { string presentationUniqueName = ((PresentationKey) ((SlideKey) info.ObjectKey).PresentationKey).PresentationUniqueName; int slideId = ((SlideKey) info.ObjectKey).Id; if (presentationUniqueName == this.m_Presentation.UniqueName) { Slide slide = m_Presentation.SlideList.FirstOrDefault(s => s.Id == ((SlideKey)info.ObjectKey).Id); if (slide != null) { slide.Cached = false; LoadSlide(slide); //refresh slide data if (OnSlideChangedExternally != null) OnSlideChangedExternally(slide); continue; } } } } } } }