public void Execute(RationallyView view, Shape changedShape) { if (!Globals.RationallyAddIn.Application.IsUndoingOrRedoing) { //find shape in view tree RelatedURLURLComponent urlUrl = (RelatedURLURLComponent)Globals.RationallyAddIn.View.GetComponentByShape(changedShape); //locate connected model object RelatedDocument document = Globals.RationallyAddIn.Model.Documents[urlUrl.Index]; //update the url value document.Path = urlUrl.Text; } }
private void Application_CellChangedEvent(Cell cell) { Shape changedShape = cell.Shape; // ReSharper disable once MergeSequentialChecksWhenPossible if ((changedShape == null) || !changedShape.Document.Template.Contains(Information.TemplateName) || (changedShape.CellExistsU[VisioFormulas.Cell_RationallyType, (short)VisExistsFlags.visExistsAnywhere] != Constants.CellExists)) //No need to continue when the shape is not part of our model. { return; } try { if (RelatedUrlComponent.IsRelatedUrlComponent(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_HyperlinkAddress)) //Link has updated { Log.Debug("Cell changed of hyperlink shape:" + changedShape.Name); //find the container that holds all Related Documents RelatedDocumentsContainer relatedDocumentsContainer = (RelatedDocumentsContainer)View.Children.First(c => c is RelatedDocumentsContainer); //find the related document holding the changed shape (one of his children has Shape equal to changedShape) RelatedDocumentContainer relatedDocumentContainer = relatedDocumentsContainer.Children.Where(c => c is RelatedDocumentContainer).Cast <RelatedDocumentContainer>().First(dc => dc.Children.Where(c => c.Shape.Equals(changedShape)).ToList().Count > 0); //update the text of the URL display component to the new url RelatedURLURLComponent relatedURLURLComponent = (RelatedURLURLComponent)relatedDocumentContainer.Children.First(c => c is RelatedURLURLComponent); relatedURLURLComponent.Text = changedShape.Hyperlink.Address; } else if (Application.IsUndoingOrRedoing && CheckBoxStateComponent.IsCheckBoxStateComponent(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_BackGroundColour)) { CheckBoxStateComponent checkBoxState = View.GetComponentByShape(changedShape) as CheckBoxStateComponent; if (checkBoxState != null) { Model.PlanningItems[checkBoxState.Index].Finished = checkBoxState.Checked; } } else if (Application.IsUndoingOrRedoing && ForceContainer.IsForceContainer(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_Index)) { Log.Debug("Forceindex cell changed of forcecontainer. shape:" + changedShape.Name); VisioShape forcesComponent = View.Children.FirstOrDefault(x => x is ForcesContainer); if (forcesComponent != null) { rebuildTree = true; //Wait with the rebuild till the undo is done } } else if (Application.IsUndoingOrRedoing && AlternativeShape.IsAlternativeContainer(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_Index)) { Log.Debug("Alternative index cell changed of alternativecontainer. shape:" + changedShape.Name); VisioShape alternativesComponent = View.Children.FirstOrDefault(x => x is AlternativesContainer); if (alternativesComponent != null) { rebuildTree = true; //Wait with the rebuild till the undo is done } } else if (Application.IsUndoingOrRedoing && RelatedDocumentContainer.IsRelatedDocumentContainer(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_Index)) { Log.Debug("Document index cell changed of documentcontainer. shape:" + changedShape.Name); VisioShape docComponent = View.Children.FirstOrDefault(x => x is RelatedDocumentsContainer); if (docComponent != null) { rebuildTree = true; //Wait with the rebuild till the undo is done } } else if (Application.IsUndoingOrRedoing && StakeholderContainer.IsStakeholderContainer(changedShape.Name) && cell.LocalName.Equals(VisioFormulas.Cell_Index)) { Log.Debug("Stakeholder index cell changed of stakeholdercontainer. shape:" + changedShape.Name); VisioShape stakeholderComponent = View.Children.FirstOrDefault(x => x is StakeholdersContainer); if (stakeholderComponent != null) { rebuildTree = true; //Wait with the rebuild till the undo is done } } } catch (Exception ex) { Log.Error(ex, ex); #if DEBUG throw; #endif } }