internal void SetSubDialogUID(string subDialogUID)
        {
            Common.SetCellString(shape, ShapeProperties.CallSubDialog.SubDialogUID, subDialogUID);
            StateShadow shadow = PathMaker.LookupShadowByUID(subDialogUID) as StateShadow;

            if (shadow != null)
            {
                Common.ForcedSetShapeText(shape, StateShadow.StateIdForDisplay(shadow.GetStateId()));
            }
        }
 /**
  * Called when the stateId of the SubDialog associated with this CallSubDialog is changed
  * Needed to update the shape text of this shape
  */
 internal void OnSubDialogStateIdChanged(string subDialogUID)
 {
     if (GetSubDialogUID().Equals(subDialogUID))
     {
         StateShadow shadow = PathMaker.LookupShadowByUID(subDialogUID) as StateShadow;
         if (shadow != null)
         {
             Common.ForcedSetShapeText(shape, StateShadow.StateIdForDisplay(shadow.GetStateId()));
         }
     }
 }
Beispiel #3
0
        internal static void LoadStateIdTextBoxes(TextBox statePrefixTextBox, TextBox stateNumberTextBox, TextBox stateNameTextBox, string stateId)
        {
            if (stateId.Length != 0)
            {
                string tmp = StateShadow.StateIdForDisplay(stateId);

                string prefix, number, name;
                StateShadow.DisectStateIdIntoParts(tmp, out prefix, out number, out name);
                statePrefixTextBox.Text = prefix;
                stateNumberTextBox.Text = number;
                stateNameTextBox.Text   = name;
            }
            else
            {
                statePrefixTextBox.Text = string.Empty;
                stateNumberTextBox.Text = string.Empty;
                stateNameTextBox.Text   = string.Empty;
            }

            statePrefixTextBox.KeyPress -= new KeyPressEventHandler(StatePrefixKeyHandler);
            stateNumberTextBox.KeyPress -= new KeyPressEventHandler(StateNumberKeyHandler);
            statePrefixTextBox.KeyPress += new KeyPressEventHandler(StatePrefixKeyHandler);
            stateNumberTextBox.KeyPress += new KeyPressEventHandler(StateNumberKeyHandler);

            statePrefixTextBox.Validating -= new CancelEventHandler(OnStateIdTextBoxesValidating);
            statePrefixTextBox.Validating += new CancelEventHandler(OnStateIdTextBoxesValidating);
            stateNumberTextBox.Validating -= new CancelEventHandler(OnStateIdTextBoxesValidating);
            stateNumberTextBox.Validating += new CancelEventHandler(OnStateIdTextBoxesValidating);
            stateNameTextBox.Validating   -= new CancelEventHandler(OnStateIdTextBoxesValidating);
            stateNameTextBox.Validating   += new CancelEventHandler(OnStateIdTextBoxesValidating);

            statePrefixTextBox.Validated -= new EventHandler(OnStateIdTextBoxValidated);
            statePrefixTextBox.Validated += new EventHandler(OnStateIdTextBoxValidated);
            stateNumberTextBox.Validated -= new EventHandler(OnStateIdTextBoxValidated);
            stateNumberTextBox.Validated += new EventHandler(OnStateIdTextBoxValidated);
            stateNameTextBox.Validated   -= new EventHandler(OnStateIdTextBoxValidated);
            stateNameTextBox.Validated   += new EventHandler(OnStateIdTextBoxValidated);

            //Handle Text change on TextBox
            statePrefixTextBox.TextChanged -= new EventHandler(OnStateIdTextBoxChanged);
            statePrefixTextBox.TextChanged += new EventHandler(OnStateIdTextBoxChanged);
            stateNumberTextBox.TextChanged -= new EventHandler(OnStateIdTextBoxChanged);
            stateNumberTextBox.TextChanged += new EventHandler(OnStateIdTextBoxChanged);
            stateNameTextBox.TextChanged   -= new EventHandler(OnStateIdTextBoxChanged);
            stateNameTextBox.TextChanged   += new EventHandler(OnStateIdTextBoxChanged);
        }
Beispiel #4
0
        void OnShapeAdd(Shape shape)
        {
            ShapeTypes type = Common.GetShapeType(shape);
            bool       is1D = shape.OneD != 0;

            // Tricky - when pasting, Visio gives out new uids to the shapes if there are duplicates
            // in this document.  So, we are going to stash the original ones - unless we are pasting.
            // If we are pasting, the paste end will fix the ones that were added.
            if (!visioControl.Document.Application.get_IsInScope((int)VisUICmds.visCmdUFEditPaste) &&
                !visioControl.Document.Application.get_IsInScope((int)VisUICmds.visCmdUFEditDuplicate))
            {
                string uid    = shape.get_UniqueID((short)VisUniqueIDArgs.visGetOrMakeGUID);
                string cached = Common.GetCellString(shape, Strings.CutCopyPasteTempCellName);

                // when undoing a delete page, you can't write this yet so this check will ignore it
                if (!uid.Equals(cached))
                {
                    Common.SetCellString(shape, Strings.CutCopyPasteTempCellName, uid);
                }
            }
            else if (Common.GetShapeType(shape) == ShapeTypes.OffPageRef)
            {
                Common.ErrorMessage("Pasted off-page reference needs to be connected.  Double click on it to repair.");
                // Because these can be cut and pasted from a single document, clearing these fields
                // allows us to avoid having more than one off page connector pointing to a single other one
                // which causes issues with tracking things in the shadows.  This way here, double clicking
                // on the connector will ask which page to connect it to.
                Common.SetCellString(shape, ShapeProperties.OffPageConnectorDestinationPageID, "");
                Common.SetCellString(shape, ShapeProperties.OffPageConnectorDestinationShapeID, "");
            }

            if (type == ShapeTypes.None && is1D)
            {
                // rogue connector - need to make it conform
                Common.SetCellString(shape, ShapeProperties.ShapeType, ((int)ShapeTypes.Connector).ToString());
                shape.get_CellsSRC((short)VisSectionIndices.visSectionObject,
                                   (short)VisRowIndices.visRowLine,
                                   (short)VisCellIndices.visLineEndArrow).FormulaU = "13";
                shape.get_CellsSRC((short)VisSectionIndices.visSectionObject,
                                   (short)VisRowIndices.visRowLine,
                                   (short)VisCellIndices.visLineRounding).FormulaU = "0.25 in";
                shape.get_CellsSRC((short)VisSectionIndices.visSectionObject,
                                   (short)VisRowIndices.visRowLock,
                                   (short)VisCellIndices.visLockTextEdit).FormulaU = "1";

                // just in case
                Common.FixConnectorTextControl(shape);

                // make every row in the shape data section invisible
                short row = (short)VisRowIndices.visRowFirst;
                while (shape.get_CellsSRCExists((short)VisSectionIndices.visSectionProp, row, (short)VisCellIndices.visCustPropsInvis, (short)VisExistsFlags.visExistsAnywhere) != 0)
                {
                    shape.get_CellsSRC((short)VisSectionIndices.visSectionProp, row++, (short)VisCellIndices.visCustPropsInvis).FormulaU = "TRUE";
                }
            }

            // when a shape is copied and pasted, it will be an exact copy of the previous shape
            // we need fix the duplicate name issue before we do anything else
            string oldPastedStateName = String.Empty;

            if (visioControl.Document.Application.get_IsInScope((int)VisUICmds.visCmdUFEditPaste) ||
                visioControl.Document.Application.get_IsInScope((int)VisUICmds.visCmdUFEditDuplicate))
            {
                string stateId = Common.GetCellString(shape, ShapeProperties.StateId);
                if (stateId.Length > 0)
                {
                    if (!StatePrefixAndNumberManager.IsStateIdOkayForUse(stateId))
                    {
                        oldPastedStateName = stateId;
                        // NEVER, NEVER do this without going through the shadow except here, before the shadow is made
                        Common.SetCellString(shape, ShapeProperties.StateId, String.Empty);
                    }
                }
            }

            Shadow shadow = Common.MakeShapeShadow(shape);

            if (shadow != null)
            {
                // if we have a pasted name that conflicted, this will reuse the name portion
                // but get us a new prefix and number and then renumber any prompts
                if (oldPastedStateName.Length > 0)
                {
                    string prefix, number, name;
                    StateShadow.DisectStateIdIntoParts(oldPastedStateName, out prefix, out number, out name);
                    shape.Text = StateShadow.StateIdForDisplay(name).Trim();
                    // this just pretends we just typed the name portion into the shape itself
                    shadow.OnShapeExitTextEdit();

                    // and now let's renumber any prompts if we're not using the "number" option
                    List <Shadow> shadowList = LookupShadowsByShapeType(ShapeTypes.Start);
                    if (shadowList.Count > 0)
                    {
                        StartShadow startShadow    = shadowList[0] as StartShadow;
                        string      promptIdFormat = startShadow.GetDefaultSetting(Strings.DefaultSettingsPromptIDFormat);
                        if (promptIdFormat.Equals(Strings.PromptIdFormatFull) || promptIdFormat.Equals(Strings.PromptIdFormatPartial))
                        {
                            StateShadow stateShadow = shadow as StateShadow;
                            if (stateShadow != null)
                            {
                                stateShadow.RedoPromptIds(0, promptIdFormat);
                            }
                        }
                    }
                }
                shadowShapeMap.Add(shape.get_UniqueID((short)VisUniqueIDArgs.visGetOrMakeGUID), shadow);
                shadow.OnShapeAdd();

                if (shadow.GetShapeType() == ShapeTypes.DocTitle ||
                    shadow.GetShapeType() == ShapeTypes.ChangeLog ||
                    shadow.GetShapeType() == ShapeTypes.AppDesc ||
                    shadow.GetShapeType() == ShapeTypes.PrefixList ||
                    shadow.GetShapeType() == ShapeTypes.Start)
                {
                    if (LookupShadowsByShapeType(shadow.GetShapeType()).Count > 1)
                    {
                        Common.ErrorMessage("Cannot have two Start, Change Log, or Document Title, App Description or Prefix List shapes");
                        Common.ForcedSetShapeText(shape, Strings.ToBeDeletedLabel);
                    }
                }
            }
            else
            {
                Common.ErrorMessage("Invalid non-PathMaker shape added");
                try {
                    Common.ForcedSetShapeText(shape, Strings.ToBeDeletedLabel);
                }
                catch {
                    // it may be a shape with two subshapes (play/interaction) so try this too
                    try {
                        Common.ForcedSetShapeText(shape.Shapes[0], Strings.ToBeDeletedLabel);
                    }
                    catch {
                        // copying from non-PathMaker visios can cause this to fail depending on shape sheets, locks, etc.
                        // We did our best - we can ignore these
                    }
                }
            }
        }