Esempio n. 1
0
        /// <summary>
        /// Returns a list of role player candidates for a fact type.
        /// The nesting type is filtered out of the list.
        /// </summary>
        /// <param name="context">ITypeDescriptorContext. Used to retrieve the selected instance</param>
        /// <param name="value">The current value</param>
        /// <returns>A list of candidates</returns>
        protected sealed override IList GetContentList(ITypeDescriptorContext context, object value)
        {
            ObjectType instance       = (ObjectType)EditorUtility.ResolveContextInstance(context.Instance, true);
            IList      candidates     = instance.ResolvedModel.ReferenceModeCollection;
            int        candidateCount = candidates.Count;

            if (candidateCount == 0)
            {
                // If it's empty, we don't need to do anything else
                return(candidates);
            }
            else
            {
                // Make sure we're sorted, and only display the fully defined reference modes
                ReferenceMode[] modes = new ReferenceMode[candidateCount];
                if (candidateCount > 1)
                {
                    candidates.CopyTo(modes, 0);
                    Array.Sort <ReferenceMode>(
                        modes,
                        delegate(ReferenceMode leftMode, ReferenceMode rightMode)
                    {
                        // Sort by decorated name
                        return(string.Compare(leftMode.DecoratedName, rightMode.DecoratedName, true, CultureInfo.CurrentCulture));
                    });
                }
                myModes = modes;
                string[] prettyStrings = new string[candidateCount];
                for (int i = 0; i < prettyStrings.Length; ++i)
                {
                    ReferenceMode refMode = modes[i];
                    prettyStrings[i] = string.Format(CultureInfo.InvariantCulture, ResourceStrings.ModelReferenceModePickerFormatString, refMode.DecoratedName, refMode.GenerateValueTypeName(instance.Name));
                }
                candidates = prettyStrings;
            }
            return(candidates);
        }