286 lines
9.0 KiB
C#
286 lines
9.0 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Accentra.Controls
|
|
{
|
|
/// <summary>
|
|
/// A FrontPage style table dimensions picker.
|
|
/// </summary>
|
|
public class TablePicker : System.Windows.Forms.Form
|
|
{
|
|
/// <summary>
|
|
/// Required designer variable.
|
|
/// </summary>
|
|
private System.ComponentModel.Container components = null;
|
|
|
|
public TablePicker()
|
|
{
|
|
// Activates double buffering
|
|
SetStyle(ControlStyles.UserPaint, true);
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
SetStyle(ControlStyles.DoubleBuffer, true);
|
|
|
|
//
|
|
// Required for Windows Form Designer support
|
|
//
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clean up any resources being used.
|
|
/// </summary>
|
|
protected override void Dispose( bool disposing )
|
|
{
|
|
if( disposing )
|
|
{
|
|
if(components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
}
|
|
base.Dispose( disposing );
|
|
}
|
|
|
|
#region Windows Form Designer generated code
|
|
/// <summary>
|
|
/// Required method for Designer support - do not modify
|
|
/// the contents of this method with the code editor.
|
|
/// </summary>
|
|
private void InitializeComponent()
|
|
{
|
|
this.SuspendLayout();
|
|
//
|
|
// TablePicker
|
|
//
|
|
this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
|
|
this.BackColor = System.Drawing.Color.LightYellow;
|
|
this.ClientSize = new System.Drawing.Size(304, 256);
|
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
|
this.Name = "TablePicker";
|
|
this.ShowInTaskbar = false;
|
|
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
|
this.Text = "TablePicker";
|
|
this.Deactivate += new System.EventHandler(this.TablePicker_Deactivate);
|
|
this.Paint += new System.Windows.Forms.PaintEventHandler(this.TablePicker_Paint);
|
|
this.MouseEnter += new System.EventHandler(this.TablePicker_MouseEnter);
|
|
this.Click += new System.EventHandler(this.TablePicker_Click);
|
|
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TablePicker_KeyPress);
|
|
this.MouseLeave += new System.EventHandler(this.TablePicker_MouseLeave);
|
|
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TablePicker_MouseMove);
|
|
this.ResumeLayout(false);
|
|
|
|
}
|
|
#endregion
|
|
|
|
private Pen BeigePen = new Pen(Color.Beige, 1);
|
|
private Brush BeigeBrush = System.Drawing.Brushes.Beige;
|
|
private Brush GrayBrush = System.Drawing.Brushes.Gray;
|
|
private Brush BlackBrush = System.Drawing.Brushes.Black;
|
|
private Brush WhiteBrush = System.Drawing.Brushes.White;
|
|
|
|
private Brush Jbrush = System.Drawing.Brushes.LightBlue;
|
|
//private Brush Jbrush = System.Drawing.Brushes.LightSteelBlue;
|
|
//private Brush Jbrush = System.Drawing.Brushes.SteelBlue;
|
|
//private Brush Jbrush = System.Drawing.Brushes.PowderBlue;
|
|
|
|
private Pen BorderPen = new Pen(SystemColors.ControlDark);
|
|
private Pen BluePen = new Pen(Color.SlateGray, 1);
|
|
|
|
private string DispText = "Esc to Cancel"; // Display text
|
|
private int DispHeight = 40;//20; // Display ("Table 1x1", "Cancel")
|
|
private Font DispFont = new Font("Tahoma", 8.25F);
|
|
private int SquareX = 20; // Width of squares
|
|
private int SquareY = 20; // Height of squares
|
|
private int SquareQX = 3; // Number of visible squares (X)
|
|
private int SquareQY = 3; // Number of visible squares (Y)
|
|
private int SelQX = 1; // Number of selected squares (x)
|
|
private int SelQY = 1; // Number of selected squares (y)
|
|
|
|
private bool bHiding = false;
|
|
private bool bCancel = true; // Determines whether to Cancel
|
|
|
|
// Added my Volian 4/27/11
|
|
private int _MaxRows = -1;
|
|
|
|
public int MaxRows
|
|
{
|
|
get { return _MaxRows; }
|
|
set { _MaxRows = value; }
|
|
}
|
|
private int _MaxCols = -1;
|
|
|
|
public int MaxCols
|
|
{
|
|
get { return _MaxCols; }
|
|
set { _MaxCols = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Similar to <code><see cref="DialogResult"/>
|
|
/// == <see cref="DialogResult.Cancel"/></code>,
|
|
/// but is used as a state value before the form
|
|
/// is hidden and cancellation is finalized.
|
|
/// </summary>
|
|
public bool Cancel {
|
|
get {
|
|
return bCancel;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the number of columns, or the horizontal / X count,
|
|
/// of the selection.
|
|
/// </summary>
|
|
public int SelectedColumns {
|
|
get {
|
|
return SelQX;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the number of rows, or the vertical / Y count,
|
|
/// of the selection.
|
|
/// </summary>
|
|
public int SelectedRows {
|
|
get {
|
|
return SelQY;
|
|
}
|
|
}
|
|
|
|
private void TablePicker_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
|
|
Graphics g = e.Graphics;
|
|
|
|
// First, increment the number of visible squares if the
|
|
// number of selected squares is equal to or greater than the
|
|
// number of visible squares.
|
|
if (SelQX > SquareQX - 1) SquareQX = SelQX + 1;
|
|
if (SelQY > SquareQY - 1) SquareQY = SelQY + 1;
|
|
|
|
if (SquareQX < 7) SquareQX = 7;
|
|
if (SquareQY < 5) SquareQY = 5;
|
|
|
|
if (_MaxRows > 0 && SquareQY > _MaxRows) SquareQY = _MaxRows;
|
|
if (_MaxCols > 0 && SquareQX > _MaxCols) SquareQX = _MaxCols;
|
|
|
|
// Second, expand the dimensions of this form according to the
|
|
// number of visible squares.
|
|
this.Width = (SquareX * (SquareQX)) + 5;
|
|
this.Height = (SquareY * (SquareQY)) + 6 + DispHeight;
|
|
|
|
// Draw an outer rectangle for the border.
|
|
g.DrawRectangle(BorderPen, 0, 0, this.Width - 1, this.Height - 1);
|
|
|
|
// Draw the text to describe the selection. Note that since
|
|
// the text is left-justified, only the Y (vertical) position
|
|
// is calculated.
|
|
int dispY = ((SquareY - 1) * SquareQY) + SquareQY + 4;
|
|
//if (this.Cancel) {
|
|
// DispText = "Esc Key to Cancel";
|
|
//} else {
|
|
// DispText = SelQX.ToString() + " by " + SelQY.ToString() + " Table";
|
|
//}
|
|
//DispText = SelQX.ToString() + " by " + SelQY.ToString() + " Table\nEsc Key to Cancel";
|
|
//DispText = SelQY.ToString() + " Row"+((SelQY>1)?"s by ":" by ") + SelQX.ToString() + " Column"+((SelQX>1)?"s\nEsc Key to Cancel":"\nEsc Key to Cancel");
|
|
DispText = SelQY.ToString() + " Row" + ((SelQY > 1) ? "s" : "") + " " + SelQX.ToString() + " Column" + ((SelQX > 1) ? "s" : "")+ "\nEsc to Cancel";
|
|
g.DrawString(DispText, DispFont, BlackBrush, 3, dispY + 2);
|
|
|
|
// Draw each of the squares and fill with the default color.
|
|
for (int x=0; x<SquareQX; x++) {
|
|
for (int y=0; y<SquareQY; y++) {
|
|
g.FillRectangle(WhiteBrush, (x*SquareX) + 3, (y*SquareY) + 3, SquareX - 2, SquareY - 2);
|
|
g.DrawRectangle(BorderPen, (x*SquareX) + 3, (y*SquareY) + 3, SquareX - 2, SquareY - 2);
|
|
}
|
|
}
|
|
|
|
// Go back and paint the squares with selection colors.
|
|
for (int x=0; x<SelQX; x++) {
|
|
for (int y=0; y<SelQY; y++) {
|
|
//g.FillRectangle(BeigeBrush, (x*SquareX) + 3, (y*SquareY) + 3, SquareX - 2, SquareY - 2);
|
|
g.FillRectangle(Jbrush, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2);
|
|
g.DrawRectangle(BluePen, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detect termination. Hides form.
|
|
/// </summary>
|
|
private void TablePicker_Deactivate(object sender, System.EventArgs e) {
|
|
|
|
// bCancel = true
|
|
// and DialogResult = DialogResult.Cancel
|
|
// were previously already set in MouseLeave.
|
|
|
|
//this.Hide();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detects mouse movement. Tracks table dimensions selection.
|
|
/// </summary>
|
|
private void TablePicker_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
|
|
int sqx = (e.X / SquareX) + 1;
|
|
int sqy = (e.Y / SquareY) + 1;
|
|
bool changed = false;
|
|
if (sqx != SelQX) {
|
|
changed = true;
|
|
SelQX = sqx;
|
|
}
|
|
if (sqy != SelQY) {
|
|
changed = true;
|
|
SelQY = sqy;
|
|
}
|
|
|
|
// Ask Windows to call the Paint event again.
|
|
if (changed) Invalidate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detects mouse sudden exit from the form to indicate
|
|
/// escaped (canceling) state.
|
|
/// </summary>
|
|
private void TablePicker_MouseLeave(object sender, System.EventArgs e) {
|
|
//if (!bHiding) bCancel = true;
|
|
//this.DialogResult = DialogResult.Cancel;
|
|
//this.Invalidate();
|
|
if (this.DialogResult == DialogResult.None)
|
|
this.DialogResult = DialogResult.Cancel;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cancels the prior cancellation caused by MouseLeave.
|
|
/// </summary>
|
|
private void TablePicker_MouseEnter(object sender, System.EventArgs e) {
|
|
//bHiding = false;
|
|
//bCancel = false;
|
|
//this.DialogResult = DialogResult.OK;
|
|
this.Invalidate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detects that the user made a selection by clicking.
|
|
/// </summary>
|
|
private void TablePicker_Click(object sender, System.EventArgs e) {
|
|
//bHiding = true; // Not the same as Visible == false
|
|
// // because bHiding suggests that the control
|
|
// // is still "active" (not canceled).
|
|
//this.Hide();
|
|
this.DialogResult = DialogResult.OK;
|
|
}
|
|
|
|
private void TablePicker_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
if (e.KeyChar == (char)Keys.Escape)
|
|
{
|
|
//bHiding = true; // Not the same as Visible == false
|
|
//// because bHiding suggests that the control
|
|
//// is still "active" (not canceled).
|
|
//this.Hide();
|
|
this.DialogResult = DialogResult.Cancel;
|
|
}
|
|
}
|
|
}
|
|
}
|