/* * Copyright © 2015 David Hall * * Design Notes:- * -------------- * - Maximum size: 150px. Limited by the control itself. * * References: * - http://www.codeproject.com/KB/vista/Vista_TaskDialog_Wrapper.aspx * - http://www.codeproject.com/Articles/21276/Vista-TaskDialog-Wrapper-and-Emulator * * Revision Control:- * ------------------ * Created On: 2007 November 26 * Major updates: 2015 Nov 6 */ #if TASKDIALOG_EMULATE using System; using System.Drawing; using System.Windows.Forms; namespace Vanara.Windows.Forms { internal class EmulateExpInfoButton : UserControl { private string collapsedText; private System.ComponentModel.IContainer components = null; private string expandedText; private bool isExpanded; private Label label; private PictureBox pictureBox; private TableLayoutPanel tableLayoutPanel; private readonly ImageList imageList; public EmulateExpInfoButton(bool newIsExpanded, string newExpandedText, string newCollapsedText) { InitializeComponent(); isExpanded = newIsExpanded; expandedText = newExpandedText; collapsedText = newCollapsedText; imageList = new ImageList(components) { ColorDepth = ColorDepth.Depth32Bit, ImageSize = new Size(19, 21) }; imageList.Images.AddStrip(Properties.Resources.ExpandoButtonV); SetState(); } public override string Text { get { return label.Text; } set { label.Text = value; } } public void ToogleState() { isExpanded = !isExpanded; SetState(); } /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing) components?.Dispose(); base.Dispose(disposing); } private void EmulateExpInfoButton_Click(object sender, EventArgs e) { OnClick(e); } private void EmulateExpInfoButton_Enter(object sender, EventArgs e) { // Focus rectangle. // http://msdn.microsoft.com/en-us/library/system.windows.forms.controlpaint.drawfocusrectangle(VS.71).aspx ControlPaint.DrawFocusRectangle(Graphics.FromHwnd(label.Handle), label.ClientRectangle); } private void EmulateExpInfoButton_Leave(object sender, EventArgs e) { // Lost focus. // Correct way to erase a border? ControlPaint.DrawBorder(Graphics.FromHwnd(label.Handle), label.ClientRectangle, label.BackColor, ButtonBorderStyle.Solid); } private void EmulateExpInfoButton_MouseDown(object sender, MouseEventArgs e) { pictureBox.Image = imageList.Images[isExpanded ? 2 : 6]; } private void EmulateExpInfoButton_MouseEnter(object sender, EventArgs e) { pictureBox.Image = imageList.Images[isExpanded ? 1 : 5]; } private void EmulateExpInfoButton_MouseLeave(object sender, EventArgs e) { pictureBox.Image = imageList.Images[isExpanded ? 0 : 4]; } private void EmulateExpInfoButton_MouseUp(object sender, MouseEventArgs e) { pictureBox.Image = imageList.Images[isExpanded ? 0 : 4]; } /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { pictureBox = new System.Windows.Forms.PictureBox(); label = new Label(); tableLayoutPanel = new TableLayoutPanel(); ((System.ComponentModel.ISupportInitialize)(pictureBox)).BeginInit(); tableLayoutPanel.SuspendLayout(); SuspendLayout(); // // pictureBox // pictureBox.Location = new System.Drawing.Point(0, 0); pictureBox.Margin = new System.Windows.Forms.Padding(0); pictureBox.Name = "pictureBox"; pictureBox.Size = new System.Drawing.Size(20, 20); pictureBox.TabIndex = 2; pictureBox.TabStop = false; pictureBox.Click += new EventHandler(EmulateExpInfoButton_Click); pictureBox.MouseDown += new MouseEventHandler(EmulateExpInfoButton_MouseDown); pictureBox.MouseEnter += new EventHandler(EmulateExpInfoButton_MouseEnter); pictureBox.MouseLeave += new EventHandler(EmulateExpInfoButton_MouseLeave); pictureBox.MouseUp += new MouseEventHandler(EmulateExpInfoButton_MouseUp); // // label // label.AutoSize = true; label.Dock = System.Windows.Forms.DockStyle.Fill; label.Location = new System.Drawing.Point(20, 0); label.Margin = new System.Windows.Forms.Padding(0); label.MaximumSize = new System.Drawing.Size(130, 0); label.Name = "label"; label.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); label.Size = new System.Drawing.Size(70, 20); label.TabIndex = 3; label.Text = "label"; label.Click += new EventHandler(EmulateExpInfoButton_Click); label.MouseDown += new MouseEventHandler(EmulateExpInfoButton_MouseDown); label.MouseEnter += new EventHandler(EmulateExpInfoButton_MouseEnter); label.MouseLeave += new EventHandler(EmulateExpInfoButton_MouseLeave); label.MouseUp += new MouseEventHandler(EmulateExpInfoButton_MouseUp); // // tableLayoutPanel // tableLayoutPanel.AutoSize = true; tableLayoutPanel.ColumnCount = 2; tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); tableLayoutPanel.Controls.Add(pictureBox, 0, 0); tableLayoutPanel.Controls.Add(label, 1, 0); tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; tableLayoutPanel.Location = new System.Drawing.Point(0, 0); tableLayoutPanel.Margin = new System.Windows.Forms.Padding(0); tableLayoutPanel.Name = "tableLayoutPanel"; tableLayoutPanel.RowCount = 1; tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); tableLayoutPanel.Size = new System.Drawing.Size(90, 20); tableLayoutPanel.TabIndex = 4; tableLayoutPanel.Click += new EventHandler(EmulateExpInfoButton_Click); tableLayoutPanel.MouseDown += new MouseEventHandler(EmulateExpInfoButton_MouseDown); tableLayoutPanel.MouseEnter += new EventHandler(EmulateExpInfoButton_MouseEnter); tableLayoutPanel.MouseLeave += new EventHandler(EmulateExpInfoButton_MouseLeave); tableLayoutPanel.MouseUp += new MouseEventHandler(EmulateExpInfoButton_MouseUp); // // EmulateExpInfoButton // AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; AutoSize = true; Controls.Add(tableLayoutPanel); Margin = new System.Windows.Forms.Padding(0); MinimumSize = new System.Drawing.Size(0, 20); Name = "EmulateExpInfoButton"; Size = new System.Drawing.Size(90, 20); Enter += new System.EventHandler(EmulateExpInfoButton_Enter); Leave += new System.EventHandler(EmulateExpInfoButton_Leave); ((System.ComponentModel.ISupportInitialize)(pictureBox)).EndInit(); tableLayoutPanel.ResumeLayout(false); tableLayoutPanel.PerformLayout(); ResumeLayout(false); PerformLayout(); } private void SetState() { pictureBox.Image = imageList.Images[isExpanded ? 0 : 4]; if (isExpanded) { Text = string.IsNullOrEmpty(collapsedText) ? "Hide details" : collapsedText; } else { if (string.IsNullOrEmpty(expandedText) && string.IsNullOrEmpty(collapsedText)) { Text = "See details"; } else if (string.IsNullOrEmpty(expandedText) && !string.IsNullOrEmpty(collapsedText)) { Text = collapsedText; } else { Text = expandedText; } } } } } #endif