void controlBar_AddZoneCommand(object sender, AddObjectEventArgs e) { Point centerStart = zoomCanvas.PointFromScreen(e.Center); Point centerTarget = new Point(zoomCanvas.ActualWidth / 2 + rand.Next(-100, 100), zoomCanvas.ActualHeight / 2 + rand.Next(-100, 100)); double orientationStart = -180; double orientationTarget = 0; Vector scaleStart = new Vector(0.2, 0.2); Vector scaleTarget = zoomCanvas.ViewScaleInvert * 3; if (e.IsMap) { GenerateMapModel(centerStart, centerTarget, orientationStart, orientationTarget, scaleStart, scaleTarget); } else { ShowZoneModel zoneModel = new ShowZoneModel(); zoneModel.Text = "Zone"; ShowView view = GenerateModel(zoneModel, centerStart, centerTarget, orientationStart, orientationTarget, scaleStart, scaleTarget); textEntry.SelectCursor(view); textEntry.SelectAll = true; } }
public Result <IObject> AddObject(IObject obj) { if (!_sceneObjects.ContainsKey(obj.InstanceGuid)) { AddObjectEventArgs args = new AddObjectEventArgs(this, obj); EventManager <AddObjectEventArgs> manager = new EventManager <AddObjectEventArgs>(AddObjectEvent, this, args); manager.OnSuccess = ev => { ev.AddObject.Scene = this; return(_sceneObjects.TryAdd(ev.AddObject.InstanceGuid, ev.AddObject)); }; if (manager.Call()) { args.AddObject.OnInitialze(); if (args.AddObject is IDrawable) { _drawables.Add(args.AddObject.InstanceGuid, (IDrawable)args.AddObject); } return(Result <IObject> .Success(args.AddObject)); } else { return(Result <IObject> .Fail()); } } return(Result <IObject> .Fail()); }
public Result <IObject> AddObject(IObject obj) { if (!_sceneObjects.ContainsKey(obj.InstanceGuid)) { AddObjectEventArgs args = new AddObjectEventArgs(this, obj); EventManager <AddObjectEventArgs> manager = new EventManager <AddObjectEventArgs>(AddObjectEvent, this, args); obj.Scene = this; _sceneObjects.TryAdd(obj.InstanceGuid, obj); manager.Call(); args.AddObject.OnInitialze(); if (args.AddObject is IComponentAttachable componentAttachable) { foreach (IComponent component in componentAttachable.GetComponents().Value) { if (component is IDrawable drawable) { _drawables.Add(component.InstanceGuid, drawable); } } } return(Result <IObject> .Success(args.AddObject)); } else { return(Result <IObject> .Fail()); } }
/// ------------------------------------------------------------------------------------ /// <summary> /// Validation done before adding an object to some vector flid. /// </summary> /// <exception cref="InvalidOperationException">The addition is not valid</exception> /// ------------------------------------------------------------------------------------ protected override void ValidateAddObjectInternal(AddObjectEventArgs e) { if (e.Flid == ScrFootnoteTags.kflidParagraphs && ParagraphsOS.Count >= s_maxAllowedParagraphs) { throw new InvalidOperationException("Scripture footnotes are limited to " + s_maxAllowedParagraphs + " paragraph(s)."); } base.ValidateAddObjectInternal(e); }
// JohnT: this was once overridden to delete the associated CmFile also, if nothing else uses it. // However we can no longer be sure of this without searching all strings in the system to see whether // any contain embedded links to the file. For now we are just accepting that some CmFiles will leak. //internal override void OnBeforeObjectDeleted() protected override void AddObjectSideEffectsInternal(AddObjectEventArgs e) { if (e.Flid == CmPictureTags.kflidDoNotPublishIn) { var uowService = ((IServiceLocatorInternal)Services).UnitOfWorkService; uowService.RegisterVirtualAsModified(this, "PublishIn", PublishIn.Cast <ICmObject>()); } base.AddObjectSideEffectsInternal(e); }
protected override void AddObjectSideEffectsInternal(AddObjectEventArgs e) { if (e.Flid == RnResearchNbkTags.kflidRecords) { UpdateAllRecords(); } base.AddObjectSideEffectsInternal(e); }
protected override void AddObjectSideEffectsInternal(AddObjectEventArgs e) { if (e.Flid == RnGenericRecTags.kflidSubRecords) { var notebook = OwnerOfClass <RnResearchNbk>(); notebook.UpdateAllRecords(); int flid = m_cache.MetaDataCache.GetFieldId2(RnGenericRecTags.kClassId, "IndexInOwnerTSS", false); ITsString dummy = m_cache.TsStrFactory.MakeString("", m_cache.DefaultAnalWs); RegisterAllSubrecordIndexTSSChanged(this.SubRecordsOS, flid, dummy); NoteSubrecordOfChanges(this, e.Index); } base.AddObjectSideEffectsInternal(e); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Overridden to allow special handling to prevent moving Scripture paragraphs to a /// different book. /// </summary> /// ------------------------------------------------------------------------------------ protected override void ValidateAddObjectInternal(AddObjectEventArgs e) { if (e.Flid == StTextTags.kflidParagraphs && e.ObjectAdded.Hvo != (int)SpecialHVOValues.kHvoUninitializedObject) { IScrBook originalOwningBook = e.ObjectAdded.OwnerOfClass <IScrBook>(); if (originalOwningBook != null) { // this StText is the one that is to be the new owner. IScrBook newOwningBook = OwnerOfClass <IScrBook>(); if (newOwningBook != originalOwningBook) { throw new InvalidOperationException("Scripture pargraphs cannot be moved between books."); } } } base.ValidateAddObjectInternal(e); }
void controlBar_AddImageCommand(object sender, AddObjectEventArgs e) { ShowImageModel imgModel = new ShowImageModel(); imgModel.UriPath = e.UriPath; Point centerStart = zoomCanvas.PointFromScreen(e.Center); Point centerTarget = new Point(zoomCanvas.ActualWidth / 2 + rand.Next(-100, 100), zoomCanvas.ActualHeight / 2 + rand.Next(-100, 100)); double orientationStart = -180; double orientationTarget = 0; Vector scaleStart = new Vector(0.1, 0.1); Vector scaleTarget = zoomCanvas.ViewScaleInvert; GenerateModel(imgModel, centerStart, centerTarget, orientationStart, orientationTarget, scaleStart, scaleTarget); }
/// ------------------------------------------------------------------------------------ /// <summary> /// This version overrides the CmObject version. Handles various Scripture side effects /// and TagsOC modifications. /// </summary> /// <param name="e"></param> /// ------------------------------------------------------------------------------------ protected override void AddObjectSideEffectsInternal(AddObjectEventArgs e) { // Prevent accidentally adding a plain StTxtPara to a Scripture text... // the ScrTxtPara subclass should always be used. // But watch out for the case (FWR-3477) where paragraph is owned by a CmPossibility first! if (e.Flid == StTextTags.kflidParagraphs && (OwnerOfClass <IScripture>() != null && !(Owner is ICmPossibility)) && !(e.ObjectAdded is ScrTxtPara)) { throw new ArgumentException("Can not add object of type " + e.ObjectAdded.GetType() + " to this StText"); } base.AddObjectSideEffectsInternal(e); //if (e.Flid == StTextTags.kflidTags) // TextTagCollectionChanges(true, e.ObjectAdded); if (e.Flid == StTextTags.kflidParagraphs) { if (e.ObjectAdded is IScrTxtPara) { IScrSection section = OwnerOfClass <IScrSection>(); if (section != null) { ((ScrSection)section).AdjustReferences(); } } if (e.Index == ParagraphsOS.Count - 1 && e.Index > 0) { int flid = Services.GetInstance <Virtuals>().StParaIsFinalParaInText; Services.GetInstance <IUnitOfWorkService>().RegisterVirtualAsModified( ParagraphsOS[e.Index - 1], flid, true, false); } } }