コード例 #1
0
        /// <summary>
        ///     Set the columns to be displayed by the tree control
        /// </summary>
        /// <param name="columns"></param>
        internal void SetColumns(TreeGridDesignerColumnDescriptor[] columns)
        {
            if (columns == null)
            {
                throw new ArgumentNullException("columns");
            }

            // the current column may now be out of range.  
            // reset to 0 if that is the case
            if (CurrentColumn >= columns.Length)
            {
                CurrentColumn = 0;
            }

            _currentColumns = columns;

            // do initial percentage calculations.
            var percentages = new float[columns.Length];
            var calculatedPercentage = 1.0F;
            var calculatedColumns = columns.Length;
            for (var i = 0; i < columns.Length; i++)
            {
                var columnPercentage = columns[i].InitialPercentage;
                if (columnPercentage != TreeGridDesignerColumnDescriptor.CalculatePercentage)
                {
                    if (columnPercentage > calculatedPercentage)
                    {
                        percentages[i] = -1;
                        continue; // using the initial percentage specified by this column would cause all
                        // percentages to sum to more than 1, so we discard it.
                    }

                    calculatedPercentage -= columnPercentage;
                    calculatedColumns--;
                    percentages[i] = columnPercentage;
                }
                else
                {
                    percentages[i] = -1;
                }
            }

            // calculate percentage increment used for columns in which the percentage
            // is not specified explicitly
            var defaultPercentageIncr = calculatedColumns == 0 ? 0 : calculatedPercentage / calculatedColumns;

            // create headers
            var headers = new VirtualTreeColumnHeader[columns.Length];

            float percentage = 0;
            for (var i = 0; i < headers.Length - 1; ++i)
            {
                if (percentages[i] == -1)
                {
                    percentage += defaultPercentageIncr;
                }
                else
                {
                    percentage += percentages[i];
                }

                if (columns[i].ColumnIsCheckBox)
                {
                    headers[i] = new VirtualTreeColumnHeader(columns[i].Name, percentage, StateImageList.ImageSize.Width);
                }
                else
                {
                    headers[i] = new VirtualTreeColumnHeader(columns[i].Name, percentage);
                }
            }
            headers[headers.Length - 1] = new VirtualTreeColumnHeader(columns[headers.Length - 1].Name, 1f);

            SetColumnHeaders(headers, false);
        }
コード例 #2
0
        /// <summary>
        ///     Set the columns to be displayed by the tree control
        /// </summary>
        /// <param name="columns"></param>
        internal void SetColumns(TreeGridDesignerColumnDescriptor[] columns)
        {
            if (columns == null)
            {
                throw new ArgumentNullException("columns");
            }

            // the current column may now be out of range.
            // reset to 0 if that is the case
            if (CurrentColumn >= columns.Length)
            {
                CurrentColumn = 0;
            }

            _currentColumns = columns;

            // do initial percentage calculations.
            var percentages          = new float[columns.Length];
            var calculatedPercentage = 1.0F;
            var calculatedColumns    = columns.Length;

            for (var i = 0; i < columns.Length; i++)
            {
                var columnPercentage = columns[i].InitialPercentage;
                if (columnPercentage != TreeGridDesignerColumnDescriptor.CalculatePercentage)
                {
                    if (columnPercentage > calculatedPercentage)
                    {
                        percentages[i] = -1;
                        continue; // using the initial percentage specified by this column would cause all
                        // percentages to sum to more than 1, so we discard it.
                    }

                    calculatedPercentage -= columnPercentage;
                    calculatedColumns--;
                    percentages[i] = columnPercentage;
                }
                else
                {
                    percentages[i] = -1;
                }
            }

            // calculate percentage increment used for columns in which the percentage
            // is not specified explicitly
            var defaultPercentageIncr = calculatedColumns == 0 ? 0 : calculatedPercentage / calculatedColumns;

            // create headers
            var headers = new VirtualTreeColumnHeader[columns.Length];

            float percentage = 0;

            for (var i = 0; i < headers.Length - 1; ++i)
            {
                if (percentages[i] == -1)
                {
                    percentage += defaultPercentageIncr;
                }
                else
                {
                    percentage += percentages[i];
                }

                if (columns[i].ColumnIsCheckBox)
                {
                    headers[i] = new VirtualTreeColumnHeader(columns[i].Name, percentage, StateImageList.ImageSize.Width);
                }
                else
                {
                    headers[i] = new VirtualTreeColumnHeader(columns[i].Name, percentage);
                }
            }
            headers[headers.Length - 1] = new VirtualTreeColumnHeader(columns[headers.Length - 1].Name, 1f);

            SetColumnHeaders(headers, false);
        }
コード例 #3
0
 /// <summary>
 ///     Update the appearance fields (string, glyph, and style) to the new header settings. This
 ///     cannot be used to update the width or position of the header.
 /// </summary>
 /// <param name="columnHeader">The header with the current settings</param>
 /// <param name="displayColumn">The display column to update</param>
 public void UpdateItemAppearance(VirtualTreeColumnHeader columnHeader, int displayColumn)
 {
     if (IsHandleCreated)
     {
         var item = new NativeMethods.HDITEM();
         SetAppearanceFields(ref columnHeader, ref item);
         if (item.mask != 0)
         {
             NativeMethods.SendMessage(Handle, NativeMethods.HDM_SETITEMW, OrderToIndex(displayColumn), ref item);
         }
     }
 }
コード例 #4
0
        private void SetAppearanceFields(ref VirtualTreeColumnHeader columnHeader, ref NativeMethods.HDITEM item)
        {
            var text = columnHeader.Text;
            var style = columnHeader.Style;
            var imageIndex = columnHeader.ImageIndex;
            var usingFormat = false;

            // Set the text
            if (text != null
                && text.Length != 0)
            {
                item.pszText = text;
                item.mask |= NativeMethods.HDITEM.Mask.HDI_TEXT;
                item.fmt |= NativeMethods.HDITEM.Format.HDF_STRING;
                usingFormat = true;
            }

            // Set the image
            if (imageIndex >= 0
                && myAssociatedControl.HeaderImageList != null)
            {
                item.iImage = imageIndex;
                item.mask |= NativeMethods.HDITEM.Mask.HDI_IMAGE;
                item.fmt |= NativeMethods.HDITEM.Format.HDF_IMAGE;
                usingFormat = true;
            }

            // Update style fields
            if ((style & ~(VirtualTreeColumnHeaderStyles.DragDisabled | VirtualTreeColumnHeaderStyles.ColumnPositionLocked)) != 0)
            {
                usingFormat = true;

                // Set the alignment
                if (0 != (style & VirtualTreeColumnHeaderStyles.AlignCenter))
                {
                    item.fmt |= NativeMethods.HDITEM.Format.HDF_CENTER;
                }
                else if (0 != (style & VirtualTreeColumnHeaderStyles.AlignRight))
                {
                    item.fmt |= NativeMethods.HDITEM.Format.HDF_RIGHT;
                }

                // Set the image location
                if (0 != (style & VirtualTreeColumnHeaderStyles.ImageOnRight))
                {
                    item.fmt |= NativeMethods.HDITEM.Format.HDF_BITMAP_ON_RIGHT;
                }

                // Set the up or down arrows
                if (0 != (style & VirtualTreeColumnHeaderStyles.DisplayUpArrow))
                {
                    item.fmt |= NativeMethods.HDITEM.Format.HDF_SORTUP;
                }
                else if (0 != (style & VirtualTreeColumnHeaderStyles.DisplayDownArrow))
                {
                    item.fmt |= NativeMethods.HDITEM.Format.HDF_SORTDOWN;
                }
            }

            // Set owner draw
            if (0 != (style & (VirtualTreeColumnHeaderStyles.OwnerDraw | VirtualTreeColumnHeaderStyles.OwnerDrawOverlay)))
            {
                usingFormat = true;
                item.fmt |= NativeMethods.HDITEM.Format.HDF_OWNERDRAW;
            }

            if (usingFormat)
            {
                item.mask |= NativeMethods.HDITEM.Mask.HDI_FORMAT;
            }
        }
コード例 #5
0
 /// <summary>
 ///     Add an item to the control. Always adds in the last position.
 /// </summary>
 /// <param name="columnHeader">The header information</param>
 /// <param name="itemWidth"></param>
 public void AddItem(VirtualTreeColumnHeader columnHeader, int itemWidth)
 {
     var item = new NativeMethods.HDITEM();
     item.cxy = itemWidth;
     item.mask = NativeMethods.HDITEM.Mask.HDI_WIDTH;
     SetAppearanceFields(ref columnHeader, ref item);
     NativeMethods.SendMessage(Handle, NativeMethods.HDM_INSERTITEMW, int.MaxValue, ref item);
 }