mirror of https://github.com/dahall/Vanara.git
224 lines
7.4 KiB
C#
224 lines
7.4 KiB
C#
/*
|
|
* 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clean up any resources being used.
|
|
/// </summary>
|
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
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];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Required method for Designer support - do not modify
|
|
/// the contents of this method with the code editor.
|
|
/// </summary>
|
|
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 |