예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="visioContentType"></param>
        /// <param name="sourceLineNumbers"></param>
        /// <param name="attrib"></param>
        /// <param name="publishInfo"></param>
        /// <param name="addonAttrs"></param>

        private void ParseAddonAttrs(VisioContentType visioContentType, SourceLineNumberCollection sourceLineNumbers,
                                     XmlAttribute attrib, VisioPublishInfo publishInfo, AddonAttrs addonAttrs)
        {
            if (visioContentType != VisioContentType.Addon)
            {
                Core.UnexpectedAttribute(sourceLineNumbers, attrib);
            }
            else
            {
                if (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
                {
                    publishInfo.AddonAttrs |= addonAttrs;
                }
                else
                {
                    publishInfo.AddonAttrs &= ~addonAttrs;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Returns the list of PublishComponent rows
        /// </summary>
        /// <param name="visioContentType"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public IEnumerable <RowInfo> GenerateRowInfos(VisioContentType visioContentType, string fileName)
        {
            var result = new List <RowInfo>();

            var editionCode = GetVisioEditionCode(VisioEdition);

            var enablingPolicyCode  = (int)(EnablingPolicy) | (int)(StaticEnableConditions);
            var addonAttrsCode      = (int)(AddonAttrs);
            var invokeOnStartupCode = (InvokeOnStartup ? 1 : 0);

            if ((VisioVersion & VisioVersion.Visio2003) == VisioVersion.Visio2003)
            {
                string appData2003 = "";

                switch (visioContentType)
                {
                case VisioContentType.Stencil:
                case VisioContentType.Template:
                    appData2003 = String.Format(@"{0}|{1}", MenuPath, AltNames);
                    break;

                case VisioContentType.Help:
                    appData2003 = null;
                    break;

                case VisioContentType.Addon:
                    appData2003 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                MenuPath, LocalizedName, UniversalName,
                                                Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode);
                    break;
                }

                if (VisioLanguage == 1)
                {
                    foreach (var lcid in GetAllVisioLanguageCodes())
                    {
                        result.Add(
                            new RowInfo
                        {
                            VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2003),
                            Qualifier        = MakeQualifier(visioContentType, lcid, fileName, Ordinal),
                            AppData          = appData2003
                        });
                    }
                }
                else
                {
                    result.Add(
                        new RowInfo
                    {
                        VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2003),
                        Qualifier        = MakeQualifier(visioContentType, VisioLanguage, fileName, Ordinal),
                        AppData          = appData2003
                    });
                }
            }

            var qualifier = MakeQualifier(visioContentType, VisioLanguage, fileName, Ordinal);

            if ((VisioVersion & VisioVersion.Visio2007) == VisioVersion.Visio2007)
            {
                string appData2007 = "";

                switch (visioContentType)
                {
                case VisioContentType.Stencil:
                    appData2007 = String.Format(@"{0}|{1}", MenuPath, AltNames);
                    break;

                case VisioContentType.Template:
                    appData2007 = String.Format(@"{0}|{1}|{2}", MenuPath, AltNames,
                                                FeaturedTemplate ? 1 : 0);
                    break;

                case VisioContentType.Help:
                    appData2007 = "-1";
                    break;

                case VisioContentType.Addon:
                    appData2007 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                MenuPath, LocalizedName, UniversalName,
                                                Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode);
                    break;
                }

                result.Add(
                    new RowInfo
                {
                    VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2007),
                    Qualifier        = qualifier,
                    AppData          = appData2007
                });
            }

            if ((VisioVersion & VisioVersion.Visio2010) == VisioVersion.Visio2010)
            {
                string appData2010 = "";
                switch (visioContentType)
                {
                case VisioContentType.Stencil:
                    appData2010 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames,
                                                QuickShapesCount, editionCode);
                    break;

                case VisioContentType.Template:
                    appData2010 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames, 1,
                                                editionCode);
                    break;

                case VisioContentType.Help:
                    appData2010 = "-1";
                    break;

                case VisioContentType.Addon:
                    appData2010 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
                                                MenuPath, LocalizedName, UniversalName,
                                                Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode,
                                                editionCode);
                    break;
                }

                result.Add(
                    new RowInfo
                {
                    VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2010),
                    Qualifier        = qualifier,
                    AppData          = appData2010
                });
            }

            if ((VisioVersion & VisioVersion.Visio2013) == VisioVersion.Visio2013)
            {
                string appData2013 = "";

                switch (visioContentType)
                {
                case VisioContentType.Stencil:
                    appData2013 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames,
                                                QuickShapesCount, editionCode);
                    break;

                case VisioContentType.Template:
                    appData2013 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames, 1,
                                                editionCode);
                    break;

                case VisioContentType.Help:
                    appData2013 = "-1";
                    break;

                case VisioContentType.Addon:
                    appData2013 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
                                                MenuPath, LocalizedName, UniversalName,
                                                Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode,
                                                editionCode);
                    break;
                }

                result.Add(
                    new RowInfo
                {
                    VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2013),
                    Qualifier        = qualifier,
                    AppData          = appData2013
                });
            }

            if ((VisioVersion & VisioVersion.Visio2016) == VisioVersion.Visio2016)
            {
                string appData2016 = "";

                switch (visioContentType)
                {
                case VisioContentType.Stencil:
                    appData2016 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames,
                                                QuickShapesCount, editionCode);
                    break;

                case VisioContentType.Template:
                    appData2016 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames, 1,
                                                editionCode);
                    break;

                case VisioContentType.Help:
                    appData2016 = "-1";
                    break;

                case VisioContentType.Addon:
                    appData2016 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
                                                MenuPath, LocalizedName, UniversalName,
                                                Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode,
                                                editionCode);
                    break;
                }

                result.Add(
                    new RowInfo
                {
                    VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2016),
                    Qualifier        = qualifier,
                    AppData          = appData2016
                });
            }

            return(result);
        }
예제 #3
0
 /// <summary>
 /// Builds a "Qualifier" cell of teh "PublishComponent" table out of it's parts.
 /// </summary>
 /// <param name="visioContentType"></param>
 /// <param name="lcid"></param>
 /// <param name="fileName"></param>
 /// <param name="ordinal"></param>
 /// <returns></returns>
 public static string MakeQualifier(VisioContentType visioContentType, int lcid, string fileName, uint ordinal)
 {
     return((visioContentType == VisioContentType.Addon)
         ? String.Format(@"{0}\{1}\{2}", lcid, ordinal - 1, fileName)
         : String.Format(@"{0}\{1}", lcid, fileName));
 }
예제 #4
0
        /// <summary>
        /// Returns the ComponentID for PublishComponent table for given combination of version/content type.
        /// Visio Component ids are built using the following rule:
        /// {XXXXXX-XXXX-XXX-XXXXXY} - here X are fixed "base" digits,
        /// whereas the last one (Y) is determined by content type.
        /// </summary>
        /// <param name="contentType"></param>
        /// <param name="visioVersion"></param>
        /// <returns></returns>

        private static string GetVisioComponentId(VisioContentType contentType, VisioVersion visioVersion)
        {
            var pattern = GetVisioBaseComponentId(visioVersion);

            return(pattern.Replace("X", Convert.ToInt32(contentType).ToString(CultureInfo.InvariantCulture)));
        }
        /// <summary>
        /// Parses a "Visio" element.
        /// </summary>
        /// <param name="node">Element to parse.</param>
        /// <param name="contextComponentId">Identifier for parent component.</param>
        /// <param name="fileName"></param>
        /// <param name="visioContentType"></param>
        private void ParseVisioElement(XmlNode node, string contextComponentId, string fileName, VisioContentType visioContentType)
        {
            var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);

            string component = null;
            string feature = null;

            if (visioContentType != GetVisioContentType(fileName))
                Core.OnMessage(VisioWarnings.InvalidFileExtension(sourceLineNumbers, fileName, Enum.GetName(typeof(VisioContentType), visioContentType)));

            var publishInfo = new VisioPublishInfo(fileName);

            if (node.Attributes != null)
            foreach (XmlAttribute attrib in node.Attributes)
            {
                switch (attrib.LocalName)
                {
                    case "Feature":
                        feature = Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
                        Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "Feature", feature);
                        break;

                    case "Component":
                        component = Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
                        Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "Component", component);
                        break;

                    case "Visio2003":
                        ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2003);
                        break;

                    case "Visio2007":
                        ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2007);
                        break;

                    case "Visio2010":
                        ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2010);
                        break;

                    case "Visio2013":
                        ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2013);
                        break;

                    case "VisioEdition":
                        publishInfo.VisioEdition = ParseVisioEditionAttributeValue(sourceLineNumbers, attrib);
                        break;

                    case "Language":
                        publishInfo.VisioLanguage = ParseVisioLanguageCode(sourceLineNumbers, attrib);
                        break;

                    case "MenuPath":
                        if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil || visioContentType == VisioContentType.Addon)
                            publishInfo.MenuPath = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "AltNames":
                        if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil)
                            publishInfo.AltNames = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "QuickShapeCount":
                        if (visioContentType == VisioContentType.Stencil)
                            publishInfo.QuickShapesCount = ParseUint(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "FeaturedTemplate":
                        if (visioContentType == VisioContentType.Template)
                            publishInfo.FeaturedTemplate = (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib));
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "LocalizedName":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.LocalizedName = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "UniversalName":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.UniversalName = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "Ordinal":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.Ordinal = ParseUint(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "PerformsActions":
                        ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.PerformsActions);
                        break;

                    case "HasAboutBox":
                        ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.HasAboutBox);
                        break;

                    case "ProvidesHelp":
                        ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.ProvidesHelp);
                        break;

                    case "DisplayWaitCursor":
                        ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.DisplayWaitCursor);
                        break;

                    case "HideInUI":
                        ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.HideInUI);
                        break;

                    case "EnablingPolicy":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.EnablingPolicy = ParseEnablingPolicy(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "StaticEnableConditions":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.StaticEnableConditions = ParseStaticEnableConditions(sourceLineNumbers, attrib);
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    case "InvokeOnStartup":
                        if (visioContentType == VisioContentType.Addon)
                            publishInfo.InvokeOnStartup = (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib));
                        else
                            Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;

                    default:
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                        break;
                }
            }

            if (string.IsNullOrEmpty(publishInfo.MenuPath))
            {
                if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil)
                    Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name, "MenuPath"));
            }

            if (publishInfo.VisioVersion == VisioVersion.Default)
                publishInfo.VisioVersion = VisioPublishInfo.GetDefaultVisioVersion(fileName);

            if (publishInfo.VisioEdition == VisioEdition.Default)
                publishInfo.VisioEdition = (VisioEdition.X86 | VisioEdition.X64);

            if ((publishInfo.VisioEdition & VisioEdition.X86) == VisioEdition.X86)
                Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "CustomAction", "SetConfigChangeID");

            if ((publishInfo.VisioEdition & VisioEdition.X64) == VisioEdition.X64)
                Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "CustomAction", "SetConfigChangeID64");

            if (Core.EncounteredError)
                return;

            var featureId = feature ?? Guid.Empty.ToString("B");
            var componentId = component ?? contextComponentId;

            foreach (var rowInfo in publishInfo.GenerateRowInfos(visioContentType, fileName))
            {
                var row = Core.CreateRow(sourceLineNumbers, "PublishComponent");

                row[0] = rowInfo.VisioComponentId;
                row[1] = rowInfo.Qualifier;
                row[2] = componentId;
                row[3] = rowInfo.AppData;
                row[4] = featureId;
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="visioContentType"></param>
 /// <param name="sourceLineNumbers"></param>
 /// <param name="attrib"></param>
 /// <param name="publishInfo"></param>
 /// <param name="addonAttrs"></param>
 private void ParseAddonAttrs(VisioContentType visioContentType, SourceLineNumberCollection sourceLineNumbers,
                              XmlAttribute attrib, VisioPublishInfo publishInfo, AddonAttrs addonAttrs)
 {
     if (visioContentType != VisioContentType.Addon)
         Core.UnexpectedAttribute(sourceLineNumbers, attrib);
     else
     {
         if (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
             publishInfo.AddonAttrs |= addonAttrs;
         else
             publishInfo.AddonAttrs &= ~addonAttrs;
     }
 }
예제 #7
0
        /// <summary>
        /// Parses a "Visio" element.
        /// </summary>
        /// <param name="node">Element to parse.</param>
        /// <param name="contextComponentId">Identifier for parent component.</param>
        /// <param name="fileName"></param>
        /// <param name="visioContentType"></param>
        private void ParseVisioElement(XmlElement node, string contextComponentId, string fileName, VisioContentType visioContentType)
        {
            var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);

            string component = null;
            string feature   = null;

            if (visioContentType != GetVisioContentType(fileName))
            {
                Core.OnMessage(VisioWarnings.InvalidFileExtension(sourceLineNumbers, fileName, Enum.GetName(typeof(VisioContentType), visioContentType)));
            }

            var publishInfo = new VisioPublishInfo(fileName);

            foreach (XmlAttribute attrib in node.Attributes)
            {
                switch (attrib.LocalName)
                {
                case "Feature":
                    feature = Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
                    Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "Feature", feature);
                    break;

                case "Component":
                    component = Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
                    Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "Component", component);
                    break;

                case "Visio2003":
                    ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2003);
                    break;

                case "Visio2007":
                    ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2007);
                    break;

                case "Visio2010":
                    ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2010);
                    break;

                case "Visio2013":
                    ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2013);
                    break;

                case "Visio2016":
                    ParseVisioVersionAttribute(sourceLineNumbers, attrib, publishInfo, VisioVersion.Visio2016);
                    break;

                case "VisioEdition":
                    publishInfo.VisioEdition = ParseVisioEditionAttributeValue(sourceLineNumbers, attrib);
                    break;

                case "Language":
                    publishInfo.VisioLanguage = ParseVisioLanguageCode(sourceLineNumbers, attrib);
                    break;

                case "MenuPath":
                    if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil || visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.MenuPath = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                case "AltNames":
                    if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil)
                    {
                        publishInfo.AltNames = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;



                case "QuickShapeCount":
                    if (visioContentType == VisioContentType.Stencil)
                    {
                        publishInfo.QuickShapesCount = ParseUint(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;



                case "FeaturedTemplate":
                    if (visioContentType == VisioContentType.Template)
                    {
                        publishInfo.FeaturedTemplate = (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib));
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;



                case "LocalizedName":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.LocalizedName = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                case "UniversalName":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.UniversalName = Core.GetAttributeBundleVariableValue(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                case "Ordinal":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.Ordinal = ParseUint(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;


                case "PerformsActions":
                    ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.PerformsActions);
                    break;

                case "HasAboutBox":
                    ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.HasAboutBox);
                    break;

                case "ProvidesHelp":
                    ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.ProvidesHelp);
                    break;

                case "DisplayWaitCursor":
                    ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.DisplayWaitCursor);
                    break;

                case "HideInUI":
                    ParseAddonAttrs(visioContentType, sourceLineNumbers, attrib, publishInfo, AddonAttrs.HideInUI);
                    break;

                case "EnablingPolicy":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.EnablingPolicy = ParseEnablingPolicy(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                case "StaticEnableConditions":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.StaticEnableConditions = ParseStaticEnableConditions(sourceLineNumbers, attrib);
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                case "InvokeOnStartup":
                    if (visioContentType == VisioContentType.Addon)
                    {
                        publishInfo.InvokeOnStartup = (YesNoType.Yes == Core.GetAttributeYesNoValue(sourceLineNumbers, attrib));
                    }
                    else
                    {
                        Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    }
                    break;

                default:
                    Core.UnexpectedAttribute(sourceLineNumbers, attrib);
                    break;
                }
            }

            if (string.IsNullOrEmpty(publishInfo.MenuPath))
            {
                if (visioContentType == VisioContentType.Template || visioContentType == VisioContentType.Stencil)
                {
                    Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name, "MenuPath"));
                }
            }

            if (publishInfo.VisioVersion == VisioVersion.Default)
            {
                publishInfo.VisioVersion = VisioPublishInfo.GetDefaultVisioVersion(fileName);
            }

            if (publishInfo.VisioEdition == VisioEdition.Default)
            {
                publishInfo.VisioEdition = (VisioEdition.X86 | VisioEdition.X64);
            }

            if ((publishInfo.VisioEdition & VisioEdition.X86) == VisioEdition.X86)
            {
                Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "CustomAction", "UpdateConfigChangeID32");
            }

            if ((publishInfo.VisioEdition & VisioEdition.X64) == VisioEdition.X64)
            {
                Core.CreateWixSimpleReferenceRow(sourceLineNumbers, "CustomAction", "UpdateConfigChangeID64");
            }

            if (Core.EncounteredError)
            {
                return;
            }

            var featureId   = feature ?? Guid.Empty.ToString("B");
            var componentId = component ?? contextComponentId;

            foreach (var rowInfo in publishInfo.GenerateRowInfos(visioContentType, fileName))
            {
                var row = Core.CreateRow(sourceLineNumbers, "PublishComponent");

                row[0] = rowInfo.VisioComponentId;
                row[1] = rowInfo.Qualifier;
                row[2] = componentId;
                row[3] = rowInfo.AppData;
                row[4] = featureId;
            }
        }
예제 #8
0
        /// <summary>
        /// Returns the ComponentID for PublishComponent table for given combination of version/content type.
        /// Visio Component ids are built using the following rule:
        /// {XXXXXX-XXXX-XXX-XXXXXY} - here X are fixed "base" digits, 
        /// whereas the last one (Y) is determined by content type.
        /// </summary>
        /// <param name="contentType"></param>
        /// <param name="visioVersion"></param>
        /// <returns></returns>
        private static string GetVisioComponentId(VisioContentType contentType, VisioVersion visioVersion)
        {
            var pattern = GetVisioBaseComponentId(visioVersion);

            return pattern.Replace("X", Convert.ToInt32(contentType).ToString(CultureInfo.InvariantCulture));
        }
예제 #9
0
        /// <summary>
        /// Returns the list of PublishComponent rows
        /// </summary>
        /// <param name="visioContentType"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public IEnumerable<RowInfo> GenerateRowInfos(VisioContentType visioContentType,  string fileName)
        {
            var result = new List<RowInfo>();

            var editionCode = GetVisioEditionCode(VisioEdition);

            var enablingPolicyCode = (int) (EnablingPolicy) | (int) (StaticEnableConditions);
            var addonAttrsCode = (int) (AddonAttrs);
            var invokeOnStartupCode = (InvokeOnStartup ? 1 : 0);

            if ((VisioVersion & VisioVersion.Visio2003) == VisioVersion.Visio2003)
            {
                string appData2003 = "";

                switch (visioContentType)
                {
                    case VisioContentType.Stencil:
                    case VisioContentType.Template:
                        appData2003 = String.Format(@"{0}|{1}", MenuPath, AltNames);
                        break;

                    case VisioContentType.Help:
                        appData2003 = null;
                        break;

                    case VisioContentType.Addon:
                        appData2003 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                    MenuPath, LocalizedName, UniversalName,
                                                    Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode);
                        break;
                }

                if (VisioLanguage == 1)
                {
                    foreach (var lcid in GetAllVisioLanguageCodes())
                    {
                        result.Add(
                            new RowInfo
                                {
                                    VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2003),
                                    Qualifier = MakeQualifier(visioContentType, lcid, fileName, Ordinal),
                                    AppData = appData2003
                                });
                    }
                }
                else
                {
                    result.Add(
                        new RowInfo
                        {
                            VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2003),
                            Qualifier = MakeQualifier(visioContentType, VisioLanguage, fileName, Ordinal),
                            AppData = appData2003
                        });
                }
            }

            var qualifier = MakeQualifier(visioContentType, VisioLanguage, fileName, Ordinal);

            if ((VisioVersion & VisioVersion.Visio2007) == VisioVersion.Visio2007)
            {
                string appData2007 = "";

                switch (visioContentType)
                {
                    case VisioContentType.Stencil:
                        appData2007 = String.Format(@"{0}|{1}", MenuPath, AltNames);
                        break;

                    case VisioContentType.Template:
                        appData2007 = String.Format(@"{0}|{1}|{2}", MenuPath, AltNames,
                                                    FeaturedTemplate ? 1 : 0);
                        break;

                    case VisioContentType.Help:
                        appData2007 = "-1";
                        break;

                    case VisioContentType.Addon:
                        appData2007 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                                    MenuPath, LocalizedName, UniversalName,
                                                    Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode);
                        break;
                }

                result.Add(
                    new RowInfo
                    {
                        VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2007),
                        Qualifier = qualifier,
                        AppData = appData2007
                    });
            }

            if ((VisioVersion & VisioVersion.Visio2010) == VisioVersion.Visio2010)
            {
                string appData2010 = "";
                switch (visioContentType)
                {
                    case VisioContentType.Stencil:
                        appData2010 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames,
                                                    QuickShapesCount, editionCode);
                        break;

                    case VisioContentType.Template:
                        appData2010 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames, 1,
                                                    editionCode);
                        break;

                    case VisioContentType.Help:
                        appData2010 = "-1";
                        break;

                    case VisioContentType.Addon:
                        appData2010 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
                                                    MenuPath, LocalizedName, UniversalName,
                                                    Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode,
                                                    editionCode);
                        break;
                }

                result.Add(
                    new RowInfo
                    {
                        VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2010),
                        Qualifier = qualifier,
                        AppData = appData2010
                    });
            }

            if ((VisioVersion & VisioVersion.Visio2013) == VisioVersion.Visio2013)
            {
                string appData2013 = "";

                switch (visioContentType)
                {
                    case VisioContentType.Stencil:
                        appData2013 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames,
                                                    QuickShapesCount, editionCode);
                        break;

                    case VisioContentType.Template:
                        appData2013 = String.Format(@"{0}|{1}|{2}|{3}", MenuPath, AltNames, 1,
                                                    editionCode);
                        break;

                    case VisioContentType.Help:
                        appData2013 = "-1";
                        break;

                    case VisioContentType.Addon:
                        appData2013 = String.Format(@"{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
                                                    MenuPath, LocalizedName, UniversalName,
                                                    Ordinal, addonAttrsCode, enablingPolicyCode, invokeOnStartupCode,
                                                    editionCode);
                        break;
                }

                result.Add(
                    new RowInfo
                    {
                        VisioComponentId = GetVisioComponentId(visioContentType, VisioVersion.Visio2013),
                        Qualifier = qualifier,
                        AppData = appData2013
                    });
            }

            return result;
        }
예제 #10
0
 /// <summary>
 /// Builds a "Qualifier" cell of teh "PublishComponent" table out of it's parts.
 /// </summary>
 /// <param name="visioContentType"></param>
 /// <param name="lcid"></param>
 /// <param name="fileName"></param>
 /// <param name="ordinal"></param>
 /// <returns></returns>
 public static string MakeQualifier(VisioContentType visioContentType, int lcid, string fileName, uint ordinal)
 {
     return (visioContentType == VisioContentType.Addon)
         ? String.Format(@"{0}\{1}\{2}", lcid, ordinal - 1, fileName)
         : String.Format(@"{0}\{1}", lcid, fileName);
 }