From 4171dee4aa95168d3102b38f867336768718707f Mon Sep 17 00:00:00 2001 From: Jaex Date: Mon, 2 Jun 2014 20:30:00 +0300 Subject: [PATCH] TabToTreeView control for convert TabControl to TreeView tab --- HelpersLib/HelpersLib.csproj | 12 ++ .../UserControls/TabToTreeView.Designer.cs | 121 ++++++++++++++++++ HelpersLib/UserControls/TabToTreeView.cs | 115 +++++++++++++++++ HelpersLib/UserControls/TabToTreeView.resx | 120 +++++++++++++++++ HelpersLib/UserControls/TablessControl.cs | 49 +++++++ 5 files changed, 417 insertions(+) create mode 100644 HelpersLib/UserControls/TabToTreeView.Designer.cs create mode 100644 HelpersLib/UserControls/TabToTreeView.cs create mode 100644 HelpersLib/UserControls/TabToTreeView.resx create mode 100644 HelpersLib/UserControls/TablessControl.cs diff --git a/HelpersLib/HelpersLib.csproj b/HelpersLib/HelpersLib.csproj index ac317a903..f9c744c10 100644 --- a/HelpersLib/HelpersLib.csproj +++ b/HelpersLib/HelpersLib.csproj @@ -115,6 +115,15 @@ + + Component + + + UserControl + + + TabToTreeView.cs + @@ -341,6 +350,9 @@ QRCodeForm.cs + + TabToTreeView.cs + DownloaderForm.cs diff --git a/HelpersLib/UserControls/TabToTreeView.Designer.cs b/HelpersLib/UserControls/TabToTreeView.Designer.cs new file mode 100644 index 000000000..e6c46e590 --- /dev/null +++ b/HelpersLib/UserControls/TabToTreeView.Designer.cs @@ -0,0 +1,121 @@ +namespace HelpersLib +{ + partial class TabToTreeView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tvMain = new System.Windows.Forms.TreeView(); + this.scMain = new System.Windows.Forms.SplitContainer(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tcMain = new HelpersLib.UserControls.TablessControl(); + ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); + this.scMain.Panel1.SuspendLayout(); + this.scMain.Panel2.SuspendLayout(); + this.scMain.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // tvMain + // + this.tvMain.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tvMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tvMain.FullRowSelect = true; + this.tvMain.Location = new System.Drawing.Point(0, 0); + this.tvMain.Name = "tvMain"; + this.tvMain.ShowLines = false; + this.tvMain.ShowPlusMinus = false; + this.tvMain.Size = new System.Drawing.Size(237, 500); + this.tvMain.TabIndex = 0; + this.tvMain.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvMain_BeforeCollapse); + this.tvMain.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvMain_AfterSelect); + // + // scMain + // + this.scMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.scMain.IsSplitterFixed = true; + this.scMain.Location = new System.Drawing.Point(0, 0); + this.scMain.Margin = new System.Windows.Forms.Padding(0); + this.scMain.Name = "scMain"; + // + // scMain.Panel1 + // + this.scMain.Panel1.Controls.Add(this.tvMain); + // + // scMain.Panel2 + // + this.scMain.Panel2.Controls.Add(this.panel1); + this.scMain.Size = new System.Drawing.Size(700, 500); + this.scMain.SplitterDistance = 237; + this.scMain.SplitterWidth = 3; + this.scMain.TabIndex = 0; + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.tcMain); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(460, 500); + this.panel1.TabIndex = 1; + // + // tcMain + // + this.tcMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tcMain.Location = new System.Drawing.Point(0, 0); + this.tcMain.Name = "tcMain"; + this.tcMain.SelectedIndex = 0; + this.tcMain.Size = new System.Drawing.Size(458, 498); + this.tcMain.TabIndex = 0; + this.tcMain.Visible = false; + // + // TabToTreeView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.scMain); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "TabToTreeView"; + this.Size = new System.Drawing.Size(700, 500); + this.scMain.Panel1.ResumeLayout(false); + this.scMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit(); + this.scMain.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView tvMain; + private System.Windows.Forms.SplitContainer scMain; + private UserControls.TablessControl tcMain; + private System.Windows.Forms.Panel panel1; + } +} diff --git a/HelpersLib/UserControls/TabToTreeView.cs b/HelpersLib/UserControls/TabToTreeView.cs new file mode 100644 index 000000000..18b8f734c --- /dev/null +++ b/HelpersLib/UserControls/TabToTreeView.cs @@ -0,0 +1,115 @@ +#region License Information (GPL v3) + +/* + ShareX - A program that allows you to take screenshots and share any file type + Copyright (C) 2007-2014 ShareX Developers + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Optionally you can also view the license at . +*/ + +#endregion License Information (GPL v3) + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace HelpersLib +{ + public partial class TabToTreeView : UserControl + { + private TabControl mainTabControl; + + public TabControl MainTabControl + { + get + { + return mainTabControl; + } + set + { + mainTabControl = value; + FillTreeView(tvMain.Nodes, mainTabControl); + tvMain.ExpandAll(); + } + } + + private int treeViewSize; + + public int TreeViewSize + { + get + { + return treeViewSize; + } + set + { + treeViewSize = value; + scMain.SplitterDistance = treeViewSize; + } + } + + public TabToTreeView() + { + InitializeComponent(); + TreeViewSize = 150; + } + + private void FillTreeView(TreeNodeCollection nodeCollection, TabControl tab) + { + if (nodeCollection != null && tab != null) + { + foreach (TabPage tabPage in tab.TabPages) + { + TreeNode treeNode = new TreeNode(tabPage.Text); + treeNode.Tag = tabPage; + nodeCollection.Add(treeNode); + + foreach (Control control in tabPage.Controls) + { + if (control is TabControl) + { + FillTreeView(treeNode.Nodes, control as TabControl); + break; + } + } + } + } + } + + private void tvMain_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = true; + } + + private void tvMain_AfterSelect(object sender, TreeViewEventArgs e) + { + TabPage tabPage = e.Node.Tag as TabPage; + + if (tabPage != null) + { + tcMain.Visible = true; + tcMain.TabPages.Clear(); + tcMain.TabPages.Add(tabPage); + } + } + } +} \ No newline at end of file diff --git a/HelpersLib/UserControls/TabToTreeView.resx b/HelpersLib/UserControls/TabToTreeView.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/HelpersLib/UserControls/TabToTreeView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HelpersLib/UserControls/TablessControl.cs b/HelpersLib/UserControls/TablessControl.cs new file mode 100644 index 000000000..e1fd53f93 --- /dev/null +++ b/HelpersLib/UserControls/TablessControl.cs @@ -0,0 +1,49 @@ +#region License Information (GPL v3) + +/* + ShareX - A program that allows you to take screenshots and share any file type + Copyright (C) 2007-2014 ShareX Developers + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Optionally you can also view the license at . +*/ + +#endregion License Information (GPL v3) + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace HelpersLib.UserControls +{ + public class TablessControl : TabControl + { + protected override void WndProc(ref Message m) + { + // Hide tabs by trapping the TCM_ADJUSTRECT message + if (m.Msg == 0x1328 && !DesignMode) + { + m.Result = (IntPtr)1; + } + else + { + base.WndProc(ref m); + } + } + } +} \ No newline at end of file