Register | Login    :::  Blog
AngelOnLine.Net
Sunday, May 20, 2012   
  Search Print 
Powered by ASP.NET
   Ads ... Minimize  
     
  
   Blog_List Minimize  
     
  
   View_Blog Minimize  
Dec 12

Written by: Angelo
12/12/2007 3:51 PM  RssIcon

I've made this ... It's very bulk, and if someone can help me a bit ...


this is the code:
using System; 
using System.ComponentModel; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing; 
using System.Drawing.Drawing2D; 
using ComponentFactory.Krypton.Toolkit; 

namespace ExtendedRenderer 
{ 
    public class KryptonListView : ListView 
    { 
        private IPalette _palette; 
        private PaletteRedirect _paletteRedirect; 
        private ListViewColumnSorter lvwColumnSorter; 

        public KryptonListView() 
        { 
            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint , true); 
            UpdateStyles(); 
            this.OwnerDraw = true; 


                // add Palette Handler 
                if (_palette != null) 
                    _palette.PalettePaint += new EventHandler(OnPalettePaint); 

                KryptonManager.GlobalPaletteChanged += new EventHandler(OnGlobalPaletteChanged); 

                _palette = KryptonManager.CurrentGlobalPalette; 
                _paletteRedirect = new PaletteRedirect(_palette); 

                // Create an instance of a ListView column sorter and assign it 
                // to the ListView control. 
                lvwColumnSorter = new ListViewColumnSorter(); 
                this.ListViewItemSorter = lvwColumnSorter; 

            if (_selectEntireRowOnSubItem == true) 
            { 
                this.FullRowSelect = true; 
                } 

            //fix the Row height 
            if (this.SmallImageList == null) 
            { 
                ImageList il = new ImageList(); 
                il.ImageSize = new Size(16,16); 
                this.SmallImageList =il; 
                _indendFirstItem = true; 
            } 

        } 

        Color _gradientStartColor = Color.White; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("Color.White")] 
        public Color GradientStartColor 
        { 
            get { return _gradientStartColor; } 
            set { _gradientStartColor = value; Invalidate(); } 
        } 

        Color _gradientEndColor = Color.Gray; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("Color.Gray")] 
        public Color GradientEndColor 
        { 
            get { return _gradientEndColor; } 
            set { _gradientEndColor = value; Invalidate(); } 
        } 

        Color _gradientMiddleColor = Color.LightGray; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("Color.Gray")] 
        public Color GradientMiddleColor 
        { 
            get { return _gradientMiddleColor; } 
            set { _gradientMiddleColor = value; Invalidate(); } 
        } 

        Boolean _persistentColors = false; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("False")] 
        public Boolean PersistentColors 
        { 
            get { return _persistentColors; } 
            set { _persistentColors = value; } 
        } 

        Boolean _useStyledColors = false; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("False")] 
        public Boolean UseStyledColors 
        { 
            get { return _useStyledColors; } 
            set { _useStyledColors = value; } 
        } 

        Boolean _selectEntireRowOnSubItem = true; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("True")] 
        public Boolean SelectEntireRowOnSubItem 
        { 
            get { return _selectEntireRowOnSubItem; } 
            set { _selectEntireRowOnSubItem = value; } 
        } 

        Boolean _indendFirstItem = true; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("True")] 
        public Boolean IndendFirstItem 
        { 
            get { return _indendFirstItem; } 
            set { _indendFirstItem = value; } 
        } 

        Boolean _forceLeftAlign = false; 
        [Browsable(false), Category("Appearance-Extended")] 
        [DefaultValue("True")] 
        public Boolean ForceLeftAlign 
        { 
            get { return _forceLeftAlign; } 
            set { _forceLeftAlign = value; } 
        } 

        Boolean _enableSorting = true; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("True")] 
        public Boolean EnableSorting 
        { 
            get { return _enableSorting; } 
            set { _enableSorting = value; } 
        } 

        Boolean _enableHeaderRendering = false; 
        [Browsable(true), Category("Appearance-Extended")] 
        [DefaultValue("False")] 
        public Boolean EnableHeaderRendering 
        { 
            get { return _enableHeaderRendering; } 
            set { _enableHeaderRendering = value; } 
        } 


        //Draw Item 
        protected override void OnDrawItem(DrawListViewItemEventArgs e) 
        { 

            Rectangle rect = e.Bounds; 
            Graphics g = e.Graphics; 

            //ClearType 
            try 
            { 
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 
            } 
            catch (Exception ex) 
            { 
                Console.Write(ex.Message); 
            } 
            //g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

            if (_palette == null) 
            { 
                EventArgs Ev = new EventArgs(); 
                OnGlobalPaletteChanged(this,Ev); 
            } 

            //set colors 
            if (_persistentColors == false) 
            { 
                //init color values 
                if (_useStyledColors == true) 
                { 
                    _gradientStartColor = Color.FromArgb(255, 246, 215); 
                    _gradientEndColor = Color.FromArgb(255, 213, 77); 
                    _gradientMiddleColor = Color.FromArgb(252, 224, 133); 
                } 
                else 
                { 
                    _gradientStartColor = _palette.ColorTable.StatusStripGradientBegin; 
                    _gradientEndColor = _palette.ColorTable.OverflowButtonGradientEnd; 
                    _gradientMiddleColor = _palette.ColorTable.StatusStripGradientEnd; 
                } 
            } 

            //BackColors 
            Color gradStartColor = _gradientStartColor; 
            Color gradEndColor = _gradientEndColor; 
            Color gradMiddleColor = _gradientMiddleColor; 

            //force Left align on items 
            if (_forceLeftAlign == true) 
            { 
                foreach (ColumnHeader col in this.Columns) 
                { 
                    col.TextAlign = HorizontalAlignment.Left; 
                } 
            } 

            ListViewItemStates sta = e.State; 
            Console.Write(sta); 

            if (this.View == View.Details) 
            { 
                if ((e.State & ListViewItemStates.Selected) != 0) 
                { 
                    // Draw the background and focus rectangle for a selected item. 
                    DrawBlendGradient(e.Graphics, e.Bounds, gradStartColor, gradEndColor, gradMiddleColor, 90F); 
                    //DrawGradient(e.Graphics, e.Bounds, gradStartColor, gradEndColor, 90F); 

                    //text 
                    e.DrawText(); 

                    //Picture Present? 
                        if (this.SmallImageList != null && e.Item.ImageIndex >= 0 && e.Item.ImageIndex < SmallImageList.Images.Count) 
                        { 
                            this.SmallImageList.Draw(g, rect.X, rect.Y, 16, 16, e.Item.ImageIndex); 
                        } 

                    
                    //e.DrawFocusRectangle(); 
                } 
                else 
                { 
                    // Draw the background for an unselected item. 
                    e.DrawDefault = true; 
                } 
            } 
            // Draw the item text for views other than the Details view. 
            else 
            { 
                // Draw the background for an unselected item. 
                e.DrawDefault = true; 
            } 

        } 


        //Draw SubItem 
        protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) 
        { 
            Rectangle rect = e.Bounds; 
            Graphics g = e.Graphics; 

           //ClearType 
           try 
           { 
               e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 
           } 
           catch (Exception ex) 
           { 
               Console.Write(ex.Message); 
           } 

            //set colors 
            if (_persistentColors == false) 
            { 
                //init color values 
                if (_useStyledColors == true) 
                { 
                    _gradientStartColor = Color.FromArgb(255, 246, 215); 
                    _gradientEndColor = Color.FromArgb(255, 213, 77); 
                    _gradientMiddleColor = Color.FromArgb(252, 224, 133); 
                } 
                else 
                { 
                    _gradientStartColor = _palette.ColorTable.StatusStripGradientBegin; 
                    _gradientEndColor = _palette.ColorTable.OverflowButtonGradientEnd; 
                    _gradientMiddleColor = _palette.ColorTable.StatusStripGradientEnd; 
                } 
            } 

            //BackColors 

            Color gradStartColor = _gradientStartColor; 
            Color gradEndColor = _gradientEndColor; 
            Color gradMiddleColor = _gradientMiddleColor; 

            //force Left align on items 
            if (_forceLeftAlign == true) 
            { 
                foreach (ColumnHeader col in this.Columns) 
                { 
                    col.TextAlign = HorizontalAlignment.Left; 
                } 
            } 

            //ListViewItemStates sta = e.ItemState; 
            //Console.Write(sta); 

            if (this.View == View.Details) 
            { 
                if ((e.ItemState & ListViewItemStates.Selected) != 0) 
                { 
                    // Draw the background and focus rectangle for a selected item. 
                    DrawBlendGradient(e.Graphics, e.Bounds, gradStartColor, gradEndColor, gradMiddleColor, 90F); 
                    //DrawGradient(e.Graphics, e.Bounds, gradStartColor, gradEndColor, 90F); 


                    //Picture Present? 
                    if (e.ColumnIndex==0) 
                    { 
                        try 
                        { 
                            this.SmallImageList.Draw(g, rect.X+4, rect.Y, 16, 16, e.Item.ImageIndex); 
                            if (_indendFirstItem == true) 
                            { 
                                rect.Offset(16, 0); 
                            } 
                        } 
                        catch (Exception ex) 
                        { 
                            Console.Write(ex.Message); 
                            if (_indendFirstItem == true) 
                            { 
                                rect.Offset(16, 0); 
                            } 
                        } 
                    } 
                    rect.Offset(4, 2); 
                    e.Graphics.DrawString(e.SubItem.Text,this.Font,new SolidBrush(Color.Black),rect); 
                    //e.DrawFocusRectangle(); 
                } 
                else 
                { 
                    // Draw the background for an unselected item. 
                    e.DrawDefault = true; 
                } 

            } 
            // Draw the item text for views other than the Details view. 
            else 
            { 
                // Draw the background for an unselected item. 
                e.DrawDefault = true; 
            } 

        } 
        protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) 
        { 

            if (_enableHeaderRendering == true) 
            { 
            Rectangle rect = e.Bounds; 
            rect.Height = rect.Height - 2; 
            rect.Width = rect.Width-0; 
            Graphics g = e.Graphics; 


            //ClearType 
            try 
            { 
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 
            } 
            catch (Exception ex) 
            { 
                Console.Write(ex.Message); 
            } 

            //set colors 
            Color gradStartColor; 
            Color gradEndColor; 
            Color gradMiddleColor; 
                Color borderColor = _palette.ColorTable.ToolStripBorder; 
                Color textColor = _palette.ColorTable.StatusStripText; 

                if (e.State == ListViewItemStates.Selected) 
                { 
                    gradStartColor = _palette.ColorTable.ButtonSelectedGradientBegin; 
                    gradMiddleColor = _palette.ColorTable.ButtonSelectedGradientEnd; 
                    gradEndColor = _palette.ColorTable.ButtonSelectedGradientBegin; 
                } 
                else 
                { 
                    gradStartColor = _palette.ColorTable.ToolStripGradientBegin; 
                    gradMiddleColor = _palette.ColorTable.ToolStripGradientEnd; 
                    gradEndColor = _palette.ColorTable.ToolStripGradientBegin; 
                } 


            //Empty Area 
            g.FillRectangle(new SolidBrush(Color.White),rect); 

            //Fill Gradient 
            using (LinearGradientBrush brush = new LinearGradientBrush(rect, gradStartColor, gradEndColor, LinearGradientMode.Vertical)) 
            { 
                //g.FillRectangle(brush, rect); 
                DrawBlendGradient(g, rect, gradStartColor, gradEndColor, gradMiddleColor, 90F); 
            } 

            //DrawBorder 
            g.DrawRectangle(new Pen(borderColor), rect); 

            //Draw light lines 
            //oriz 
            g.DrawLine(new Pen(Color.White), new Point(rect.X + 1, rect.Y + 1), new Point(rect.X + rect.Width - 1, rect.Y + 1)); 
            //vert 
            g.DrawLine(new Pen(Color.White), new Point(rect.X + 1, rect.Y + 1), new Point(rect.X + 1, rect.Y + rect.Height -1)); 


            if (e.ColumnIndex == this.Columns.Count - 1) 
            { 
                //last border 
                g.DrawLine(new Pen(borderColor), new Point(rect.X + rect.Width - 1, rect.Y ), new Point(rect.X + rect.Width - 1, rect.Y  + rect.Height + 0)); 

            } 

            if (e.State == ListViewItemStates.Selected) 
            { 
                rect.Offset(3, 5); 
            } 
            else 
            { 
                rect.Offset(2, 4); 
            } 
            
                  StringFormat TextFormat = new StringFormat(); 
                    TextFormat.FormatFlags = StringFormatFlags.NoWrap; 
                    g.DrawString(e.Header.Text, this.Font, new SolidBrush(textColor), rect, TextFormat); 
            //e.DrawText(); 
            } 
        else 
         { 
             e.DrawDefault = true; 
         } 

        } 


        protected override void OnMouseDown(MouseEventArgs e) 
        { 
            base.OnMouseDown(e); 
        } 
        protected override void OnMouseUp(MouseEventArgs e) 
        { 
            base.OnMouseUp(e); 
        } 
        protected override void OnLostFocus(EventArgs e) 
        { 
            //base.OnLostFocus(e); 
            Invalidate(); 
        } 

        protected override void OnColumnClick(ColumnClickEventArgs e) 
        { 
            base.OnColumnClick(e); 

            if (_enableSorting == true) 
            { 
                // Determine if clicked column is already the column that is being sorted. 
                if (e.Column == lvwColumnSorter.SortColumn) 
                { 
                    // Reverse the current sort direction for this column. 
                    if (lvwColumnSorter.Order == SortOrder.Ascending) 
                    { 
                        lvwColumnSorter.Order = SortOrder.Descending; 
                    } 
                    else 
                    { 
                        lvwColumnSorter.Order = SortOrder.Ascending; 
                    } 
                } 
                else 
                { 
                    // Set the column number that is to be sorted; default to ascending. 
                    lvwColumnSorter.SortColumn = e.Column; 
                    lvwColumnSorter.Order = SortOrder.Ascending; 
                } 

                // Perform the sort with these new sort options. 
                this.Sort(); 
            } 
        } 



        //Kripton Palette Events 
        private void OnGlobalPaletteChanged(object sender, EventArgs e) 
        { 
            if (_palette != null) 
                _palette.PalettePaint -= new EventHandler(OnPalettePaint); 

            _palette = KryptonManager.CurrentGlobalPalette; 
            _paletteRedirect.Target = _palette; 

            if (_palette != null) 
            { 
                _palette.PalettePaint += new EventHandler(OnPalettePaint); 
                //repaint with new values 

                //set colors 
                if (_persistentColors == false) 
                { 
                    //init color values 
                    if (_useStyledColors == true) 
                    { 
                        _gradientStartColor = Color.FromArgb(255, 246, 215); 
                        _gradientEndColor = Color.FromArgb(255, 213, 77); 
                        _gradientMiddleColor = Color.FromArgb(252, 224, 133); 
                    } 
                    else 
                    { 
                        _gradientStartColor = _palette.ColorTable.StatusStripGradientBegin; 
                        _gradientEndColor = _palette.ColorTable.OverflowButtonGradientEnd; 
                        _gradientMiddleColor = _palette.ColorTable.StatusStripGradientEnd; 
                    } 
                } 
            } 

            Invalidate(); 
        } 


        //Kripton Palette Events 
        private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) 
        { 
            Invalidate(); 
        } 


        protected override void Dispose(bool disposing) 
        { 
            if (disposing) 
            { 

                if (_palette != null) 
                { 
                    _palette.PalettePaint -= new EventHandler(OnPalettePaint); 
                    _palette = null; 
                } 


                KryptonManager.GlobalPaletteChanged -= new EventHandler(OnGlobalPaletteChanged); 
            } 

            base.Dispose(disposing); 
        } 


        public static void DrawGradient(Graphics g, Rectangle rect, Color LightColor, Color DarkColor, float Angle) 
        { 
            Rectangle r = rect; 
            if (r.Width == 0 || r.Height == 0) 
                return; 

                  ColorBlend cb = new ColorBlend(3); 

                    cb.Positions[0] = 0f; 
                    cb.Colors[0] = LightColor; 

                    cb.Positions[1] = 0.5f; 
                    cb.Colors[1] = DarkColor; 

                    cb.Positions[2] = 1f; 
                    cb.Colors[2] = LightColor; 

            g.InterpolationMode = InterpolationMode.HighQualityBilinear; 
            g.CompositingMode = CompositingMode.SourceOver; 
            using (LinearGradientBrush lgb = new LinearGradientBrush(r, LightColor, DarkColor, Angle)) 
            { 
                lgb.InterpolationColors = cb; 
                g.FillRectangle(lgb, r); 
            } 

        } 

        public static void DrawBlendGradient(Graphics g, Rectangle rect, Color LightColor, Color DarkColor, Color MiddleColor, float Angle) 
        { 
            ColorBlend blend = new ColorBlend(4); 

            blend.Positions[0] = 0f; 
            blend.Colors[0] = LightColor; 

            blend.Positions[1] = 0.5f; 
            blend.Colors[1] = DarkColor; 

            blend.Positions[2] = 0.5f; 
            blend.Colors[2] = DarkColor; 

            blend.Positions[3] = 1f; 
            blend.Colors[3] = MiddleColor; 

            using (LinearGradientBrush b = new LinearGradientBrush(rect, blend.Colors[0], blend.Colors[3], Angle)) 
            { 
                b.InterpolationColors = blend; 

                g.FillRectangle(Brushes.White, rect); 
                g.FillRectangle(b, rect); 
            } 
        } 

    } 
} 

Tags:
Categories:
Location: Blogs Parent Separator Development

Your name:
Gravatar Preview
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Add Comment   Cancel 
     
  
   Support the Site Minimize  
PayPal - The safer, easier way to pay online!
     
  
   Search_Blog Minimize  
     
  
   Terms Of Use  |   Privacy Statement  |   Copyright 1995-2012 by AngelOnLine.Net