Beispiel #1
0
        /// <summary>
        /// Retrieves the name of a folder content item for display.
        /// </summary>
        /// <param name="item">The folder content item to retrieve the name of.</param>
        /// <returns>The name, or empty if cannot be found.</returns>
        public static string GetDisplayName(this FolderContentItem item)
        {
            // Sanity.
            if (null == item)
            {
                throw new ArgumentNullException(nameof(item));
            }

            // Get the name depending on type.
            switch (item.FolderContentItemType)
            {
            case MFFolderContentItemType.ObjectVersion:
                return(item.ObjectVersion.Title);

            case MFFolderContentItemType.PropertyFolder:
                return(item.PropertyFolder.DisplayValue);

            case MFFolderContentItemType.ViewFolder:
                return(item.View.ViewLocation?.Overlapping == true
                                                ? item.View.ViewLocation.OverlappedFolder.DisplayValue
                                                : item.View.Name);

            case MFFolderContentItemType.TraditionalFolder:
                return(item.TraditionalFolder.DisplayValue);

            default:
                // Unknown.
                return(string.Empty);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Compares one folder item to another, for ordering purposes.
        /// </summary>
        /// <param name="x">The first item.</param>
        /// <param name="y">The second item.</param>
        /// <returns>0 means same, -1 means (x &lt; y), 1 means (y &gt; x)</returns>
        private static int CompareTo(this FolderContentItem x, FolderContentItem y)
        {
            // Sanity.
            if (null == x && null == y)
            {
                return(0);
            }
            if (null == x)
            {
                return(1);
            }
            if (null == y)
            {
                return(-1);
            }

            // Compare types.
            var typeCompare = FolderContentItemExtensionMethods.Compare(x.FolderContentItemType, y.FolderContentItemType);

            if (typeCompare != 0)
            {
                return(typeCompare);
            }

            // Same type; compare name.
            var xName = x.GetDisplayName();
            var yName = y.GetDisplayName();

            return(String.Compare(xName, yName, StringComparison.OrdinalIgnoreCase));
        }
 protected override void OnListViewItemSelected(FolderContentItem item)
 {
     if (item.Identifier == FolderContentItemIdentifier.Folder)
     {
         CurrentFolder = item.ContentFolder;
         UpdateListView();
     }
 }
Beispiel #4
0
        /// <summary>
        /// Returns the path information to be used to retrieve items from the view.
        /// </summary>
        /// <remarks>
        /// See: http://www.m-files.com/mfws/resources/views/path/items.html
        /// </remarks>
        /// <param name="item">The item to return the view path for.</param>
        /// <returns>The view path.</returns>
        internal static string GetPath(this FolderContentItem item)
        {
            // Sanity.
            if (null == item)
            {
                return(string.Empty);
            }

            // The return value depends on the item type.
            // See: http://www.m-files.com/mfws/syntax.html
            switch (item.FolderContentItemType)
            {
            case MFFolderContentItemType.ViewFolder:
                return("v" + item.View.ID);

            case MFFolderContentItemType.TraditionalFolder:
                return("y" + item.TraditionalFolder.Item);

            case MFFolderContentItemType.PropertyFolder:
            {
                string prefix = null;
                string suffix = item.PropertyFolder.Value?.ToString();
                switch (item.PropertyFolder.DataType)
                {
                case MFDataType.Text:
                    prefix = "T";
                    break;

                case MFDataType.MultiLineText:
                    prefix = "M";
                    break;

                case MFDataType.Integer:
                    prefix = "I";
                    break;

                case MFDataType.Integer64:
                    prefix = "J";
                    break;

                case MFDataType.Floating:
                    prefix = "R";
                    break;

                case MFDataType.Date:
                    prefix = "D";
                    break;

                case MFDataType.Time:
                    prefix = "C";
                    break;

                case MFDataType.FILETIME:
                    prefix = "E";
                    break;

                case MFDataType.Lookup:
                    prefix = "L";
                    suffix = (item.PropertyFolder.Lookup?.Item ?? 0).ToString();
                    break;

                case MFDataType.MultiSelectLookup:
                    prefix = "S";
                    suffix = String.Join(",", item.PropertyFolder.Lookups?.Select(l => l.Item) ?? new int[0]);
                    break;

                case MFDataType.Uninitialized:
                    prefix = "-";
                    break;

                case MFDataType.ACL:
                    prefix = "A";
                    break;

                case MFDataType.Boolean:
                    prefix = "B";
                    break;
                }

                // Sanity.
                if (null == prefix || null == suffix)
                {
                    return(null);
                }

                // Return the formatted value.
                return($"{prefix}{WebUtility.UrlDecode(suffix)}");
            }

            default:
                return(null);
            }
        }
Beispiel #5
0
        /// <summary>
        /// Returns the path information to be used to retrieve items from the view.
        /// </summary>
        /// <remarks>
        /// See: http://www.m-files.com/mfws/resources/views/path/items.html
        /// </remarks>
        /// <param name="item">The item to return the view path for.</param>
        /// <returns>The view path.</returns>
        public static string GetPath(this FolderContentItem item)
        {
            // Sanity.
            if (null == item)
            {
                return(string.Empty);
            }

            // The return value depends on the item type.
            // See: http://www.m-files.com/mfws/syntax.html
            switch (item.FolderContentItemType)
            {
            case MFFolderContentItemType.ExternalViewFolder:
                // NOTE: The string should be "u", followed by the URL-encoded external repository name, followed by a colon, followed by the URL-encoded view ID.
                // The entire string should then be URL-encoded a second time to ensure that it is passed correctly.
                return(WebUtility.UrlEncode($"u{WebUtility.UrlEncode(item.ExternalView.ExternalRepositoryName)}:{WebUtility.UrlEncode(item.ExternalView.ID)}"));

            case MFFolderContentItemType.ViewFolder:
                return("v" + item.View.ID);

            case MFFolderContentItemType.TraditionalFolder:
                return("y" + item.TraditionalFolder.Item);

            case MFFolderContentItemType.PropertyFolder:
            {
                string prefix = null;
                string suffix = item.PropertyFolder.Value?.ToString();
                switch (item.PropertyFolder.DataType)
                {
                case MFDataType.Text:
                    prefix = "T";
                    break;

                case MFDataType.MultiLineText:
                    prefix = "M";
                    break;

                case MFDataType.Integer:
                    prefix = "I";
                    break;

                case MFDataType.Integer64:
                    prefix = "J";
                    break;

                case MFDataType.Floating:
                    prefix = "R";
                    break;

                case MFDataType.Date:
                    prefix = "D";
                    break;

                case MFDataType.Time:
                    prefix = "C";
                    break;

                case MFDataType.FILETIME:
                    prefix = "E";
                    break;

                case MFDataType.Lookup:
                    prefix = "L";
                    suffix = (item.PropertyFolder.Lookup?.Item ?? 0).ToString();
                    break;

                case MFDataType.MultiSelectLookup:
                    prefix = "S";
                    suffix = String.Join(",", item.PropertyFolder.Lookups?.Select(l => l.Item) ?? new int[0]);
                    break;

                case MFDataType.Uninitialized:
                    prefix = "-";
                    break;

                case MFDataType.ACL:
                    prefix = "A";
                    break;

                case MFDataType.Boolean:
                    prefix = "B";
                    break;
                }

                // Sanity.
                if (null == prefix || null == suffix)
                {
                    return(null);
                }

                // Return the formatted value.
                return($"{prefix}{WebUtility.UrlEncode(suffix)}");
            }

            default:
                return(null);
            }
        }