public void Evict() { if (_chunks == null) { return; } Save(); State = ColumnState.Evicting; for (var y = 0; y < _chunks.Count; ++y) { if (!_chunks[y].Equals(default(IChunk))) { var chunk = _chunks[y]; chunk.Evict(); } _chunks[y] = default(IChunk); } if (_lightData != null) { _lightData.Evict(); PoolManager.GetObjectPool <CompressableArray <uint> >().Push(_lightData); } if (_neighbors != null) { _neighbors.Clear(); PoolManager.GetObjectPool <Dictionary <FaceDirection, Column> >().Push(_neighbors); } PoolManager.GetObjectPool <List <IChunk> >().Push(_chunks); _lightData = null; _chunks = null; State = ColumnState.Uninitialized; }
public static ColumnState[] GetState(GridViewColumnCollection columns) { ColumnState[] state = new ColumnState[columns.Count]; for (int i = 0; i < columns.Count; i++) { state[i] = new ColumnState(); state[i].Visible = columns[i].Visible; state[i].VisibleIndex = columns[i].VisibleIndex; } return(state); }
public void Load() { if (State != ColumnState.Empty) { throw new AccessViolationException("Cannot load into non-empty column!"); } State = ColumnState.Loading; //TODO : use a bloom filter to stroe if a column is loaded //TODO : query if this column exists in save data and load it! //TODO : how many columns per page Generate(); }
public void Initialize(Vector2Int offset, long columnId) { ColumnId = columnId; if (State != ColumnState.Uninitialized) { throw new AccessViolationException("Attempting to initialize a column in use!"); } Offset = offset; _height = 0; _chunks = PoolManager.GetObjectPool <List <IChunk> >().Pop(); _neighbors = PoolManager.GetObjectPool <Dictionary <FaceDirection, Column> >().Pop(); State = ColumnState.Empty; }
protected void gvProducts_Load(object sender, EventArgs e) { ASPxGridView gridView = sender as ASPxGridView; GridViewDetailRowTemplateContainer container = gridView.NamingContainer as GridViewDetailRowTemplateContainer; string sessionField = String.Format("{0}_ColumnsOrder", gridView.ID); if (Session[sessionField] != null) { ColumnState.LoadState(gridView.Columns, (ColumnState[])Session[sessionField]); } gridView.ClientInstanceName = String.Format("{0}_{1}", gridView.ID, container.KeyValue); gridView.ClientSideEvents.EndCallback = String.Format("function(s, e) {{ if (s.cpIsColumnMoved) {0}.PerformCallback(); }}", container.Grid.ClientInstanceName); }
protected void gvProducts_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e) { ASPxGridView gridView = sender as ASPxGridView; string sessionField = String.Format("{0}_ColumnsOrder", gridView.ID); bool isColumnMoved = e.CallbackName == "COLUMNMOVE"; if (isColumnMoved) { Session[sessionField] = ColumnState.GetState(gridView.Columns); } gridView.JSProperties["cpIsColumnMoved"] = isColumnMoved; }
/// <summary> /// コンストラクタ /// </summary> public AdvancedComPlayer() { StateMachine <StateType> .State[] states = new StateMachine <StateType> .State[] { // 操作待ち new StateMachine <StateType> .State() { Update = UpdateWaitControl, }, // 決定 new StateMachine <StateType> .State() { Enter = EnterDecideColumn, Update = UpdateDecideColumn, }, // 操作 new StateMachine <StateType> .State() { Enter = EnterControlTama, Update = UpdateControlTamaForMain, NextState = () => StateType.DropTama, }, // 操作 new StateMachine <StateType> .State() { Enter = EnterControlTama, Update = UpdateControlTamaForSub, NextState = () => StateType.DropTama, }, // 回転 new StateMachine <StateType> .State() { Enter = EnterRotateTama, Update = UpdateRotateTama, }, // 落下 new StateMachine <StateType> .State() { Update = UpdateDropTama, }, }; stateMachine = new StateMachine <StateType>(states); stateMachine.StartState(StateType.WaitControl); destColumns = new ColumnState[2]; }
/// <summary> /// Initialise default values /// </summary> private void Init() { this.text = null; this.width = Column.DefaultWidth; this.columnState = ColumnState.Normal; this.alignment = ColumnAlignment.Left; this.image = null; this.imageOnRight = false; this.columnModel = null; this.x = 0; this.tooltipText = null; this.format = ""; this.sortOrder = SortOrder.None; this.renderer = null; this.editor = null; this.comparer = null; this.state = (byte)(STATE_ENABLED | STATE_EDITABLE | STATE_VISIBLE | STATE_SELECTABLE | STATE_SORTABLE); }
/// <summary> /// Saves the state of the specified header control. /// </summary> /// <param name="header">The header control of which state will be saved.</param> void Save(MultiColumnCollectionHeader header) { m_SortDescriptions.Clear(); m_OrderedColumnStates.Clear(); foreach (var sortDesc in header.sortDescriptions) { m_SortDescriptions.Add(sortDesc); } foreach (var column in header.columns.displayList) { var columnState = new ColumnState() { index = column.index, name = column.name, actualWidth = column.desiredWidth, width = column.width.value, visible = column.visible }; m_OrderedColumnStates.Add(columnState); } }
/// <summary> /// Initialise default values /// </summary> private void Init() { this.text = null; this.width = Column.DefaultWidth; this.columnState = ColumnState.Normal; this.alignment = ColumnAlignment.Left; this.image = null; this.imageOnRight = false; this.columnModel = null; this.x = 0; this.tooltipText = null; this.format = ""; this.sortOrder = SortOrder.None; this.renderer = null; this.editor = null; this.comparer = null; // Mateusz [PEYN] Adamus ([email protected]) // Added STATE_RESIZABLE to column's initialization this.state = (byte)(STATE_ENABLED | STATE_EDITABLE | STATE_VISIBLE | STATE_SELECTABLE | STATE_SORTABLE | STATE_RESIZABLE); }
public void SetNeighbor(FaceDirection direction, Column otherColumn) { if (State == ColumnState.Uninitialized) { throw new AccessViolationException("Attempting to access an unititialized column!"); } if (direction == FaceDirection.YIncreasing || direction == FaceDirection.YDecreasing) { throw new ArgumentException($"{nameof(direction)} cannot be of value {direction} for columns"); } var flipped = General.FlipDirection(direction); var old = _neighbors.ContainsKey(direction) ? _neighbors[direction] : null; _neighbors[direction] = otherColumn; if (otherColumn == null) { return; } if (otherColumn._neighbors != null) { otherColumn._neighbors[flipped] = this; } if (State != ColumnState.Loaded && State != ColumnState.Dirty) { return; } if (old != otherColumn) { State = ColumnState.Dirty; } if (otherColumn._chunks == null) { return; } for (var y = 0; y < _chunks.Count; y++) { _chunks[y]?.SetNeighbor(direction, otherColumn[y * ChunkSize]); } }
/// <summary> /// Draws the column headers. /// </summary> /// <param name="g">The System.Drawing.Graphics to draw on.</param> /// <param name="column">The ImageListViewColumnHeader to draw.</param> /// <param name="state">The current view state of column.</param> /// <param name="bounds">The bounding rectangle of column in client coordinates.</param> public override void DrawColumnHeader(Graphics g, ImageListView.ImageListViewColumnHeader column, ColumnState state, Rectangle bounds) { // Paint background if (mImageListView.Focused && ((state & ColumnState.Hovered) == ColumnState.Hovered)) { using (Brush bHovered = new LinearGradientBrush(bounds, Color.FromArgb(64, 96, 144, 240), Color.FromArgb(196, 96, 144, 240), LinearGradientMode.Vertical)) { g.FillRectangle(bHovered, bounds); } } else { using (Brush bNormal = new LinearGradientBrush(bounds, Color.FromArgb(32, 128, 128, 128), Color.FromArgb(196, 128, 128, 128), LinearGradientMode.Vertical)) { g.FillRectangle(bNormal, bounds); } } using (Brush bBorder = new LinearGradientBrush(bounds, Color.FromArgb(96, 128, 128, 128), Color.FromArgb(128, 128, 128), LinearGradientMode.Vertical)) using (Pen pBorder = new Pen(bBorder)) { g.DrawLine(pBorder, bounds.Left, bounds.Top, bounds.Left, bounds.Bottom); g.DrawLine(pBorder, bounds.Left, bounds.Bottom - 1, bounds.Right, bounds.Bottom - 1); } using (Pen pen = new Pen(Color.FromArgb(16, Color.White))) { g.DrawLine(pen, bounds.Left + 1, bounds.Top + 1, bounds.Left + 1, bounds.Bottom - 2); g.DrawLine(pen, bounds.Right - 1, bounds.Top + 1, bounds.Right - 1, bounds.Bottom - 2); } // Draw the sort arrow int textOffset = 4; if (mImageListView.SortOrder != SortOrder.None && mImageListView.SortColumn == column.Type) { Image img = null; if (mImageListView.SortOrder == SortOrder.Ascending) { img = ImageListViewResources.SortAscending; } else if (mImageListView.SortOrder == SortOrder.Descending) { img = ImageListViewResources.SortDescending; } g.DrawImageUnscaled(img, bounds.X + 4, bounds.Top + (bounds.Height - img.Height) / 2); textOffset += img.Width; } // Text bounds.X += textOffset; bounds.Width -= textOffset; if (bounds.Width > 4) { using (StringFormat sf = new StringFormat()) { sf.FormatFlags = StringFormatFlags.NoWrap; sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; sf.Trimming = StringTrimming.EllipsisCharacter; using (Brush brush = new SolidBrush(Color.White)) { g.DrawString(column.Text, (mImageListView.HeaderFont == null ? mImageListView.Font : mImageListView.HeaderFont), brush, bounds, sf); } } } }
public Visibility() { CubeID = -1; FieldName = ""; State = ColumnState._KEEP; }
public void SetNewState(int columnIndex, ColumnState stateAffected, bool useAnimation) { bool[] modeEnabledNew = new bool[modeEnabled.Length]; int modePoweredNew = modePowered; modeEnabled.CopyTo(modeEnabledNew, 0); if (stateAffected == ColumnState.Visibility) { // Enable/Disable modeEnabledNew[columnIndex] = !modeEnabledNew[columnIndex]; if (!modeEnabledNew[columnIndex] && modePoweredNew == columnIndex) { modePoweredNew = -1; } } else if (stateAffected == ColumnState.Powered) { // Set/unset powered modePoweredNew = modePoweredNew == columnIndex ? -1 : columnIndex; if (!modeEnabled[columnIndex] && modePoweredNew == columnIndex) { modeEnabledNew[columnIndex] = true; } } else { for (int i = 0; i < modeEnabledNew.Length; i++) { modeEnabledNew[i] = true; } modePoweredNew = -1; } double totalDefaultSize = defaultColumnSizes.Sum(); double columnsTotalSize = columns.Sum(c => c.Width.Value); // Normalize column sizes to fit totalSize. for (int i = 0; i < columns.Length; i++) { columns[i].MinWidth = 0; if (columnsTotalSize == 0 || totalDefaultSize == 0) { columns[i].Width = new GridLength(0); } else { columns[i].Width = new GridLength(totalDefaultSize / columnsTotalSize * columns[i].Width.Value, GridUnitType.Star); } } double[] columnsNewSize = new double[3]; for (int i = 0; i < columnsNewSize.Length; i++) { columnsNewSize[i] = modeEnabledNew[i] ? (defaultColumnSizes[i] * (modePoweredNew == i ? 3f : 1f)) : 0f; } ; // Animate columns whose enabled or powered state changes. for (int i = 0; i < columnsNewSize.Length; i++) { if (modeEnabled[i] || modeEnabledNew[i]) { var col = columns[i]; double newSize = columnsNewSize[i]; if (useAnimation) { GridLengthAnimation animation = new GridLengthAnimation(); animation.From = col.Width; animation.To = new GridLength(newSize, GridUnitType.Star); animation.Duration = new Duration(TimeSpan.FromMilliseconds(animationDuration)); animation.FillBehavior = FillBehavior.Stop; // Fixes GridSplitter not working after animation (first comment of https://stackoverflow.com/a/16844818/8577979) animation.Completed += (s, _) => { col.Width = new GridLength(newSize, GridUnitType.Star); }; if (modeEnabled[i] != modeEnabledNew[i] && defaultColumnMinSizes[i] > 0f) { DoubleAnimation minSizeAnimation = new DoubleAnimation( modeEnabledNew[i] ? defaultColumnMinSizes[i] : 0f, new Duration(TimeSpan.FromMilliseconds(animationDuration))); col.BeginAnimation(ColumnDefinition.MinWidthProperty, minSizeAnimation); } col.BeginAnimation(ColumnDefinition.WidthProperty, animation); } else { col.MinWidth = modeEnabledNew[i] ? defaultColumnMinSizes[i] : 0f; col.Width = new GridLength(newSize, GridUnitType.Star); } } } modeEnabled = modeEnabledNew; modePowered = modePoweredNew; //ColumnGridSplitterLeft.Visibility = (modeEnabled[0] && (modeEnabled[1] || modeEnabled[2])) ? Visibility.Visible : Visibility.Collapsed; //ColumnGridSplitterRight.Visibility = (modeEnabled[2] && modeEnabled[1]) ? Visibility.Visible : Visibility.Collapsed; }
public static SerializationState Deserialize(XmlTextReader tr) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(tr); XmlNode ssNode = xmlDoc.SelectSingleNode("/SerializationState2"); if (ssNode == null) { return(null); } SerializationState ss = new SerializationState(); if (ssNode.Attributes["GlobalGroupState"] != null) { ss.GlobalGroupState = (GroupState)Enum.Parse(typeof(GroupState), ssNode.Attributes["GlobalGroupState"].Value); } List <ColumnState> columnStates = new List <ColumnState>(); foreach (XmlNode csNode in ssNode.SelectNodes("ColumnStates/ColumnState")) { ColumnState cs = new ColumnState(); if (csNode.Attributes["Name"] != null) { cs.Name = csNode.Attributes["Name"].Value; } if (csNode.Attributes["Width"] != null) { cs.Width = int.Parse(csNode.Attributes["Width"].Value, CultureInfo.InvariantCulture); } if (csNode.Attributes["SortOrder"] != null) { cs.SortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), csNode.Attributes["SortOrder"].Value); } if (csNode.Attributes["GroupSortOrder"] != null) { cs.GroupSortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), csNode.Attributes["GroupSortOrder"].Value); } if (csNode.Attributes["VisibleIndex"] != null) { cs.VisibleIndex = int.Parse(csNode.Attributes["VisibleIndex"].Value, CultureInfo.InvariantCulture); } if (csNode.Attributes["GroupedIndex"] != null) { cs.GroupedIndex = int.Parse(csNode.Attributes["GroupedIndex"].Value, CultureInfo.InvariantCulture); } columnStates.Add(cs); } ss.ColumnStates = columnStates.ToArray(); List <GroupInstance> groupInstances = new List <GroupInstance>(); foreach (XmlNode giNode in ssNode.SelectNodes("GroupStates/GroupState")) { GroupInstance gi = new GroupInstance(); if (giNode.Attributes["GroupName"] != null) { gi.GroupName = giNode.Attributes["GroupName"].Value; } List <string> path = new List <string>(); foreach (XmlNode pathNode in giNode.SelectNodes("GroupPath/String")) { path.Add(pathNode.Attributes["Value"].Value); } gi.GroupPath = path.ToArray(); groupInstances.Add(gi); } ss.GroupStates = groupInstances.ToArray(); return(ss); }
/// <summary> /// Initialise default values /// </summary> private void Init() { this.text = null; this.width = Column.DefaultWidth; this.columnState = ColumnState.Normal; this.alignment = ColumnAlignment.Left; this.image = null; this.imageOnRight = false; this.columnModel = null; this.x = 0; this.tooltipText = null; this.format = ""; this.sortOrder = SortOrder.None; this.renderer = null; this.editor = null; this.comparer = null; this.state = (byte) (STATE_ENABLED | STATE_EDITABLE | STATE_VISIBLE | STATE_SELECTABLE | STATE_SORTABLE); }
/// <summary> /// Draws the column headers. /// </summary> /// <param name="g">The System.Drawing.Graphics to draw on.</param> /// <param name="column">The ImageListViewColumnHeader to draw.</param> /// <param name="state">The current view state of column.</param> /// <param name="bounds">The bounding rectangle of column in client coordinates.</param> public override void DrawColumnHeader(Graphics g, ImageListView.ImageListViewColumnHeader column, ColumnState state, Rectangle bounds) { }
/// <summary> /// Draws the column headers. /// </summary> /// <param name="g">The System.Drawing.Graphics to draw on.</param> /// <param name="column">The ImageListViewColumnHeader to draw.</param> /// <param name="state">The current view state of column.</param> /// <param name="bounds">The bounding rectangle of column in client coordinates.</param> public override void DrawColumnHeader(Graphics g, ImageListView.ImageListViewColumnHeader column, ColumnState state, Rectangle bounds) { // Paint background if (mImageListView.Focused && ((state & ColumnState.Hovered) == ColumnState.Hovered)) { using (Brush bHovered = new LinearGradientBrush(bounds, Color.FromArgb(64, 96, 144, 240), Color.FromArgb(196, 96, 144, 240), LinearGradientMode.Vertical)) { g.FillRectangle(bHovered, bounds); } } else { using (Brush bNormal = new LinearGradientBrush(bounds, Color.FromArgb(32, 128, 128, 128), Color.FromArgb(196, 128, 128, 128), LinearGradientMode.Vertical)) { g.FillRectangle(bNormal, bounds); } } using (Brush bBorder = new LinearGradientBrush(bounds, Color.FromArgb(96, 128, 128, 128), Color.FromArgb(128, 128, 128), LinearGradientMode.Vertical)) using (Pen pBorder = new Pen(bBorder)) { g.DrawLine(pBorder, bounds.Left, bounds.Top, bounds.Left, bounds.Bottom); g.DrawLine(pBorder, bounds.Left, bounds.Bottom - 1, bounds.Right, bounds.Bottom - 1); } using (Pen pen = new Pen(Color.FromArgb(16, Color.White))) { g.DrawLine(pen, bounds.Left + 1, bounds.Top + 1, bounds.Left + 1, bounds.Bottom - 2); g.DrawLine(pen, bounds.Right - 1, bounds.Top + 1, bounds.Right - 1, bounds.Bottom - 2); } // Draw the sort arrow int textOffset = 4; if (mImageListView.SortOrder != SortOrder.None && mImageListView.SortColumn == column.Type) { Image img = null; if (mImageListView.SortOrder == SortOrder.Ascending) img = ImageListViewResources.SortAscending; else if (mImageListView.SortOrder == SortOrder.Descending) img = ImageListViewResources.SortDescending; g.DrawImageUnscaled(img, bounds.X + 4, bounds.Top + (bounds.Height - img.Height) / 2); textOffset += img.Width; } // Text bounds.X += textOffset; bounds.Width -= textOffset; if (bounds.Width > 4) { using (StringFormat sf = new StringFormat()) { sf.FormatFlags = StringFormatFlags.NoWrap; sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; sf.Trimming = StringTrimming.EllipsisCharacter; using (Brush brush = new SolidBrush(Color.White)) { g.DrawString(column.Text, (mImageListView.HeaderFont == null ? mImageListView.Font : mImageListView.HeaderFont), brush, bounds, sf); } } } }
/// <summary> /// Initialise default values /// </summary> private void Init() { this.text = null; this.width = Column.DefaultWidth; this.columnState = ColumnState.Normal; this.alignment = ColumnAlignment.Left; this.image = null; this.imageOnRight = false; this.columnModel = null; this.x = 0; this.tooltipText = null; this.format = ""; this.sortOrder = SortOrder.None; this.renderer = null; this.editor = null; this.comparer = null; // Mateusz [PEYN] Adamus ([email protected]) // Added STATE_RESIZABLE to column's initialization this.state = (byte) (STATE_ENABLED | STATE_EDITABLE | STATE_VISIBLE | STATE_SELECTABLE | STATE_SORTABLE | STATE_RESIZABLE ); }
public static SerializationState Deserialize(XmlTextReader tr) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(tr); XmlNode ssNode = xmlDoc.SelectSingleNode("/SerializationState2"); if (ssNode == null) { return null; } SerializationState ss = new SerializationState(); if (ssNode.Attributes["GlobalGroupState"] != null) { ss.GlobalGroupState = (GroupState) Enum.Parse(typeof (GroupState), ssNode.Attributes["GlobalGroupState"].Value); } List<ColumnState> columnStates = new List<ColumnState>(); foreach (XmlNode csNode in ssNode.SelectNodes("ColumnStates/ColumnState")) { ColumnState cs = new ColumnState(); if (csNode.Attributes["Name"] != null) { cs.Name = csNode.Attributes["Name"].Value; } if (csNode.Attributes["Width"] != null) { cs.Width = int.Parse(csNode.Attributes["Width"].Value, CultureInfo.InvariantCulture); } if (csNode.Attributes["SortOrder"] != null) { cs.SortOrder = (SortOrder) Enum.Parse(typeof (SortOrder), csNode.Attributes["SortOrder"].Value); } if (csNode.Attributes["GroupSortOrder"] != null) { cs.GroupSortOrder = (SortOrder) Enum.Parse(typeof (SortOrder), csNode.Attributes["GroupSortOrder"].Value); } if (csNode.Attributes["VisibleIndex"] != null) { cs.VisibleIndex = int.Parse(csNode.Attributes["VisibleIndex"].Value, CultureInfo.InvariantCulture); } if (csNode.Attributes["GroupedIndex"] != null) { cs.GroupedIndex = int.Parse(csNode.Attributes["GroupedIndex"].Value, CultureInfo.InvariantCulture); } columnStates.Add(cs); } ss.ColumnStates = columnStates.ToArray(); List<GroupInstance> groupInstances = new List<GroupInstance>(); foreach (XmlNode giNode in ssNode.SelectNodes("GroupStates/GroupState")) { GroupInstance gi = new GroupInstance(); if (giNode.Attributes["GroupName"] != null) { gi.GroupName = giNode.Attributes["GroupName"].Value; } List<string> path = new List<string>(); foreach (XmlNode pathNode in giNode.SelectNodes("GroupPath/String")) { path.Add(pathNode.Attributes["Value"].Value); } gi.GroupPath = path.ToArray(); groupInstances.Add(gi); } ss.GroupStates = groupInstances.ToArray(); return ss; }
/// <summary> /// Draws the column headers. /// </summary> /// <param name="g">The System.Drawing.Graphics to draw on.</param> /// <param name="column">The ImageListViewColumnHeader to draw.</param> /// <param name="state">The current view state of column.</param> /// <param name="bounds">The bounding rectangle of column in client coordinates.</param> public override void DrawColumnHeader(Graphics g, ImageListView.ImageListViewColumnHeader column, ColumnState state, Rectangle bounds) { SortOrder order = SortOrder.None; if (ImageListView.SortOrder != SortOrder.None && ((state & ColumnState.SortColumn) != ColumnState.None)) order = ImageListView.SortOrder; VisualStyleRenderer rBack; if (((state & ColumnState.Hovered) == ColumnState.Hovered) && order != SortOrder.None) rBack = rColumnSortedHovered; else if (((state & ColumnState.Hovered) == ColumnState.Hovered) && order == SortOrder.None) rBack = rColumnHovered; else if (((state & ColumnState.Hovered) == ColumnState.None) && order != SortOrder.None) rBack = rColumnSorted; else rBack = rColumnNormal; VisualStyleRenderer rSort; if (order == SortOrder.Ascending || order == SortOrder.AscendingNatural) rSort = rSortAscending; else rSort = rSortDescending; // Background if (VisualStylesEnabled && rBack != null && rSort != null) { // Background rBack.DrawBackground(g, bounds, bounds); // Sort arrow if (order != SortOrder.None) { Size sz = rSort.GetPartSize(g, System.Windows.Forms.VisualStyles.ThemeSizeType.True); Rectangle sortBounds = new Rectangle(new Point(0, 0), sz); sortBounds.Offset(bounds.X + (bounds.Width - sz.Width) / 2, 0); rSort.DrawBackground(g, sortBounds, sortBounds); } // Text if (bounds.Width > 4) { Rectangle textBounds = bounds; textBounds.Inflate(-3, 0); TextRenderer.DrawText(g, column.Text, SystemFonts.MenuFont, textBounds, SystemColors.ControlText, TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); } } else base.DrawColumnHeader(g, column, state, bounds); }
/// <summary> /// Draws the column headers. /// </summary> /// <param name="g">The System.Drawing.Graphics to draw on.</param> /// <param name="column">The ImageListViewColumnHeader to draw.</param> /// <param name="state">The current view state of column.</param> /// <param name="bounds">The bounding rectangle of column in client coordinates.</param> public override void DrawColumnHeader(Graphics g, ImageListView.ImageListViewColumnHeader column, ColumnState state, Rectangle bounds) { // Paint background if ((state & ColumnState.Hovered) != ColumnState.None) { using (Brush bHovered = new LinearGradientBrush(bounds, ImageListView.Colors.ColumnHeaderHoverColor1, ImageListView.Colors.ColumnHeaderHoverColor2, LinearGradientMode.Vertical)) { g.FillRectangle(bHovered, bounds); } } else { using (Brush bNormal = new LinearGradientBrush(bounds, ImageListView.Colors.ColumnHeaderBackColor1, ImageListView.Colors.ColumnHeaderBackColor2, LinearGradientMode.Vertical)) { g.FillRectangle(bNormal, bounds); } } using (Pen pBorder = new Pen(ImageListView.Colors.ColumnSeparatorColor)) { g.DrawLine(pBorder, bounds.Left, bounds.Top, bounds.Left, bounds.Bottom); g.DrawLine(pBorder, bounds.Left, bounds.Bottom - 1, bounds.Right, bounds.Bottom - 1); } using (Pen pBorder = new Pen(Color.FromArgb(252, 252, 252))) { g.DrawRectangle(pBorder, bounds.Left + 1, bounds.Top, bounds.Width - 2, bounds.Height - 2); } // Draw the sort arrow int offset = 4; int width = bounds.Width - 2 * offset; if (ImageListView.SortOrder != SortOrder.None && ((state & ColumnState.SortColumn) != ColumnState.None)) { Image img = null; if (ImageListView.SortOrder == SortOrder.Ascending) img = ImageListViewResources.SortAscending; else if (ImageListView.SortOrder == SortOrder.Descending) img = ImageListViewResources.SortDescending; if (img != null) { g.DrawImageUnscaled(img, bounds.Right - offset - img.Width, bounds.Top + (bounds.Height - img.Height) / 2); width -= img.Width + offset; } } // Text bounds.X += offset; bounds.Width = width; if (bounds.Width > 4) { using (StringFormat sf = new StringFormat()) { sf.FormatFlags = StringFormatFlags.NoWrap; sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; sf.Trimming = StringTrimming.EllipsisCharacter; using (SolidBrush bText = new SolidBrush(ImageListView.Colors.ColumnHeaderForeColor)) { g.DrawString(column.Text, (ImageListView.ColumnHeaderFont == null ? ImageListView.Font : ImageListView.ColumnHeaderFont), bText, bounds, sf); } } } }