// * // * Copyright (C) 2008 Roger Alsing : http://www.RogerAlsing.com // * // * This library is free software; you can redistribute it and/or modify it // * under the terms of the GNU Lesser General Public License 2.1 or later, as // * published by the Free Software Foundation. See the included license.txt // * or http://www.gnu.org/copyleft/lesser.html for details. // * // * using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace Alsing.Windows.Forms.CoreLib { /// /// Summary description for SplitViewChildControl. /// public class SplitViewChildControl : BaseControl { private Container components; private Panel Filler; protected HScrollBar hScroll; public ThumbControl LeftThumb; public ThumbControl TopThumb; protected VScrollBar vScroll; public SplitViewChildControl() { InitializeComponent(); // Alsing.Windows.NativeMethods.OpenThemeData (this.Handle,"EDIT"); // Alsing.Windows.NativeMethods.OpenThemeData (this.vScroll.Handle,"SCROLLBAR"); // Alsing.Windows.NativeMethods.OpenThemeData (this.hScroll.Handle,"SCROLLBAR"); } protected Rectangle ClientArea { get { Rectangle r = ClientRectangle; r.Width -= vScroll.Width; r.Height -= hScroll.Height; return r; } } /// /// Gets or Sets if the Left side thumb control is visible or not. /// public bool LeftThumbVisible { get { return LeftThumb.Visible; } set { LeftThumb.Visible = value; DoResize(); } } /// /// Getd ot Sets if the Top thumb control is visible or not. /// public bool TopThumbVisible { get { return TopThumb.Visible; } set { TopThumb.Visible = value; DoResize(); } } [Browsable(false)] public int VisibleClientHeight { get { if (hScroll.Visible) return ClientHeight - hScroll.Height; else return ClientHeight; } } [Browsable(false)] public int VisibleClientWidth { get { if (hScroll.Visible) return ClientWidth - vScroll.Width; else return ClientWidth; } } #region public property ScrollBars private ScrollBars _ScrollBars; private bool HasThumbs; public ScrollBars ScrollBars { get { return _ScrollBars; } set { _ScrollBars = value; if (ScrollBars == ScrollBars.Both) { hScroll.Visible = true; vScroll.Visible = true; } if (ScrollBars == ScrollBars.None) { hScroll.Visible = false; vScroll.Visible = false; } if (ScrollBars == ScrollBars.Horizontal) { hScroll.Visible = true; vScroll.Visible = false; } if (ScrollBars == ScrollBars.Vertical) { hScroll.Visible = false; vScroll.Visible = true; } Filler.Visible = hScroll.Visible & vScroll.Visible; if (vScroll.Visible && HasThumbs) { TopThumb.Height = 8; } else { TopThumb.Height = 0; } if (hScroll.Visible && HasThumbs) { LeftThumb.Width = 8; } else { LeftThumb.Width = 0; } DoResize(); Refresh(); } } public void HideThumbs() { TopThumb.Height = 0; LeftThumb.Width = 0; HasThumbs = false; DoResize(); } public void ShowThumbs() { TopThumb.Height = 8; LeftThumb.Width = 8; HasThumbs = true; DoResize(); } #endregion protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } protected override void OnResize(EventArgs e) { base.OnResize(e); DoResize(); } private void DoResize() { try { if (TopThumb == null) return; TopThumb.Width = SystemInformation.VerticalScrollBarWidth; LeftThumb.Height = SystemInformation.HorizontalScrollBarHeight; vScroll.Width = SystemInformation.VerticalScrollBarWidth; hScroll.Height = SystemInformation.HorizontalScrollBarHeight; if (TopThumbVisible) { vScroll.Top = TopThumb.Height; if (hScroll.Visible) vScroll.Height = ClientHeight - hScroll.Height - TopThumb.Height; else vScroll.Height = ClientHeight - TopThumb.Height; } else { if (hScroll.Visible) vScroll.Height = ClientHeight - hScroll.Height; else vScroll.Height = ClientHeight; vScroll.Top = 0; } if (LeftThumbVisible) { hScroll.Left = LeftThumb.Width; if (vScroll.Visible) hScroll.Width = ClientWidth - vScroll.Width - LeftThumb.Width; else hScroll.Width = ClientWidth - LeftThumb.Width; } else { if (vScroll.Visible) hScroll.Width = ClientWidth - vScroll.Width; else hScroll.Width = ClientWidth; hScroll.Left = 0; } vScroll.Left = ClientWidth - vScroll.Width; hScroll.Top = ClientHeight - hScroll.Height; LeftThumb.Left = 0; LeftThumb.Top = hScroll.Top; TopThumb.Left = vScroll.Left; ; TopThumb.Top = 0; Filler.Left = vScroll.Left; Filler.Top = hScroll.Top; Filler.Width = vScroll.Width; Filler.Height = hScroll.Height; } catch {} } #region Component Designer generated code private void InitializeComponent() { var resources = new System.Resources.ResourceManager(typeof (SplitViewChildControl)); this.hScroll = new System.Windows.Forms.HScrollBar(); this.vScroll = new System.Windows.Forms.VScrollBar(); this.Filler = new System.Windows.Forms.Panel(); this.TopThumb = new Alsing.Windows.Forms.CoreLib.ThumbControl(); this.LeftThumb = new Alsing.Windows.Forms.CoreLib.ThumbControl(); this.SuspendLayout(); // // hScroll // this.hScroll.Location = new System.Drawing.Point(-4, 292); this.hScroll.Name = "hScroll"; this.hScroll.Size = new System.Drawing.Size(440, 16); this.hScroll.TabIndex = 0; // // vScroll // this.vScroll.Location = new System.Drawing.Point(440, 0); this.vScroll.Maximum = 300; this.vScroll.Minimum = 0; this.vScroll.Name = "vScroll"; this.vScroll.Size = new System.Drawing.Size(16, 360); this.vScroll.TabIndex = 1; // // Filler // this.Filler.BackColor = System.Drawing.SystemColors.Control; this.Filler.Location = new System.Drawing.Point(64, 260); this.Filler.Name = "Filler"; this.Filler.Size = new System.Drawing.Size(20, 20); this.Filler.TabIndex = 3; // // TopThumb // this.TopThumb.BackColor = System.Drawing.SystemColors.Control; this.TopThumb.Cursor = System.Windows.Forms.Cursors.HSplit; this.TopThumb.Location = new System.Drawing.Point(101, 17); this.TopThumb.Name = "TopThumb"; this.TopThumb.Size = new System.Drawing.Size(16, 8); this.TopThumb.TabIndex = 3; this.TopThumb.Visible = false; // // LeftThumb // this.LeftThumb.BackColor = System.Drawing.SystemColors.Control; this.LeftThumb.Cursor = System.Windows.Forms.Cursors.VSplit; this.LeftThumb.Location = new System.Drawing.Point(423, 17); this.LeftThumb.Name = "LeftThumb"; this.LeftThumb.Size = new System.Drawing.Size(8, 16); this.LeftThumb.TabIndex = 3; this.LeftThumb.Visible = false; // // SplitViewChildControl // this.Controls.AddRange(new System.Windows.Forms.Control[] { this.TopThumb, this.LeftThumb, this.Filler, this.vScroll, this.hScroll }); this.Name = "SplitViewChildControl"; this.Size = new System.Drawing.Size(456, 376); this.ResumeLayout(false); } #endregion } }