public void Execute(Shape s, string context) { RationallyModel model = Globals.RationallyAddIn.Model; VisioShape component = new VisioShape(Globals.RationallyAddIn.Application.ActivePage) { Shape = s }; int index = component.Index; Alternative alternative = model.Alternatives[index]; DialogResult confirmResult = MessageBox.Show("Are you sure you want to delete " + alternative.Title + "?", "Confirm Deletion", MessageBoxButtons.YesNo); if (confirmResult == DialogResult.Yes) { Shape shapeToPass; if (AlternativeShape.IsAlternativeContainer(s.Name)) { shapeToPass = s; } else //subpart of alternative container { //trace alternatives container AlternativesContainer alternativesContainer = (AlternativesContainer)Globals.RationallyAddIn.View.Children.First(c => c is AlternativesContainer); //trace the correct alternative container AlternativeShape alternativeShape = (AlternativeShape)alternativesContainer.Children.First(c => c is AlternativeShape && (component.Index == c.Index)); shapeToPass = alternativeShape.Shape; } //initiate a delete handler with the container's shape shapeToPass.Delete(); } }
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 } }