BigLitho/Large.Lito.Database/Make3_Treko3D/ControlLibrary/LayerControl.cs

538 lines
17 KiB
C#

using System;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using Projects;
using System.Windows.Forms;
using Data.BusinessService;
using Data.DataModel;
namespace ControlLibrary
{
public partial class LayerControl : UserControl
{
//Check radius for begin drag n drop
public bool AllowDrag { get; set; }
private bool _isDragging = false;
private int _DDradius = 40;
private int _mX = 0;
private int _mY = 0;
private int _StatusBarColorIndex = 0;
private string _LayerName = "Default";
private ILayerService layerService;
private Layer _layerObj;
private LayerModel layerModel;
public delegate void ArrowUpClicked(LayerControl sender, EventArgs e);
public delegate void ArrowDownClicked(LayerControl sender, EventArgs e);
public delegate void DoubleClicked(LayerControl sender, EventArgs e);
public delegate void CancelClicked(LayerControl sender, EventArgs e);
public event ArrowUpClicked OnArrowUpClicked;
public event ArrowDownClicked OnArrowDownClicked;
public event DoubleClicked OnDoubleClicked;
public event CancelClicked OnCancelClicked;
public LayerControl()
{
InitializeComponent();
UpdateTitleBar();
UpdateStatusBar();
UpdateLeftSideBar();
UpdateRightSideBar();
UpdateBtnCancel();
UpdateToggleSwitchButton();
UpdateArrowUp();
UpdateArrowDown();
this.layerService = new LayerService();
AllowDrag = true;
}
#region properties
/// <summary>
/// ColorIndex. [0 - Treko] [1 - Diamond] [2 - ...] [3 - ...].
/// </summary>
public int StatusBarColor
{
get { return _StatusBarColorIndex; }
set
{
switch (value)
{
case 0:
// Raw active
leftSideBarPanel.BackColor = Color.OliveDrab;
break;
case 1:
// Raw inactive
leftSideBarPanel.BackColor = Color.Goldenrod;
break;
case 2:
// Dry active
leftSideBarPanel.BackColor = Color.DimGray;
break;
case 3:
// Dry inactive
leftSideBarPanel.BackColor = Color.DimGray;
break;
default:
leftSideBarPanel.BackColor = Color.DimGray;
break;
}
}
}
public string LayerName
{
get { return _LayerName; }
set
{
_LayerName = value;
this.lblLayerName.Text = _LayerName;
}
}
public Layer LayerObj
{
get { return _layerObj; }
set { _layerObj = value; }
}
public ILayerService LayerService
{
get { return layerService; }
set { layerService = value; }
}
public LayerModel LayerModel
{
get { return layerModel; }
set { layerModel = value; }
}
#endregion
private void RefreshControl(LayerModel layerModel)
{
_layerObj.Id = layerModel.Id;
LayerName = _layerObj.LayerName = layerModel.LayerName;
_layerObj.OpticalSchema = layerModel.OpticalSchema;
_layerObj.Order = layerModel.Order;
_layerObj.ProjectId = layerModel.ProjectId;
_layerObj.TechnologyName = layerModel.TechnologyName;
_layerObj.TraceProfile = layerModel.TraceProfile;
_layerObj.LayerLeft = layerModel.LayerLeft;
_layerObj.LayerTop = layerModel.LayerTop;
_layerObj.LayerWidth = layerModel.LayerWidth;
_layerObj.LayerHeight = layerModel.LayerHeight;
_layerObj.ArcWidth = layerModel.ArcWidth;
_layerObj.RadiusMax = layerModel.RadiusMax;
_layerObj.Step = layerModel.Step;
_layerObj.SourceFilePath = layerModel.SourceFilePath;
_layerObj.AnglesFilePath = layerModel.AnglesFilePath;
}
public void ReloadControl()
{
int layerId = 0;
if (_layerObj != null && _layerObj.Id != 0)
layerId = _layerObj.Id;
else
if (layerModel != null && layerModel.Id != 0)
layerId = layerModel.Id;
if (layerId == 0)
return;
DataRow row = layerService.GetLayerById(layerId);
layerModel.Id = Convert.ToInt16(row["Id"]);
layerModel.Order = Convert.ToInt16(row["Order"]);
layerModel.LayerName = row["LayerName"].ToString();
layerModel.OpticalSchema = row["OpticalSchema"].ToString();
layerModel.ProjectId = Convert.ToInt16(row["ProjectId"]);
layerModel.TechnologyName = row["TechnologyName"].ToString();
layerModel.LayerLeft = Convert.ToSingle(row["LayerLeft"]);
layerModel.LayerTop = Convert.ToSingle(row["LayerTop"]);
layerModel.LayerWidth = Convert.ToSingle(row["LayerWidth"]);
layerModel.LayerHeight = Convert.ToSingle(row["LayerHeight"]);
layerModel.ArcWidth = Convert.ToInt16(row["ArcWidth"]);
layerModel.RadiusMax = Convert.ToSingle(row["RadiusMax"]);
layerModel.Step = Convert.ToSingle(row["Step"]);
layerModel.SourceFilePath = row["SourceFilePath"].ToString();
layerModel.AnglesFilePath = row["AnglesFilePath"].ToString();
RefreshControl(layerModel);
}
#region events
protected override void OnGotFocus(EventArgs e)
{
//this.BackColor = Color.SandyBrown;
this.BackColor = Color.Transparent;
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
this.BackColor = Color.Transparent;
base.OnLostFocus(e);
}
protected override void OnClick(EventArgs e)
{
this.Focus();
base.OnClick(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
this.Focus();
base.OnMouseDown(e);
_mX = e.X;
_mY = e.Y;
this._isDragging = false;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (!_isDragging)
{
// This is a check to see if the mouse is moving while pressed.
// Without this, the DragDrop is fired directly when the control is clicked, now you have to drag a few pixels first.
if (e.Button == MouseButtons.Left && _DDradius > 0 && this.AllowDrag)
{
int num1 = _mX - e.X;
int num2 = _mY - e.Y;
if (((num1 * num1) + (num2 * num2)) > _DDradius)
{
DoDragDrop(this, DragDropEffects.All);
_isDragging = true;
return;
}
}
base.OnMouseMove(e);
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
_isDragging = false;
base.OnMouseUp(e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
paintThisShit(e.Graphics);
}
private void btnCancel_Click(object sender, EventArgs e)
{
FlowLayoutPanel flp = (FlowLayoutPanel)this.Parent;
OnCancelClicked?.Invoke(this, EventArgs.Empty);
flp.Invalidate();
}
private void btnArrowUp_Click(object sender, EventArgs e)
{
FlowLayoutPanel flp = (FlowLayoutPanel)this.Parent;
ControlCollection innerList = flp.Controls;
int index = innerList.GetChildIndex(this, false);
index = 0;
innerList.SetChildIndex(this, index);
//if (OnArrowUpClicked != null)
OnArrowUpClicked?.Invoke(this, EventArgs.Empty);
flp.Invalidate();
//MessageBox.Show("Up");
}
private void btnArrowDown_Click(object sender, EventArgs e)
{
FlowLayoutPanel flp = (FlowLayoutPanel)this.Parent;
ControlCollection innerList = flp.Controls;
int index = innerList.GetChildIndex(this, false);
index = innerList.Count - 1;
innerList.SetChildIndex(this, index);
OnArrowDownClicked?.Invoke(this, EventArgs.Empty);
flp.Invalidate();
// MessageBox.Show("Down");
}
private void LayerControl_DoubleClick(object sender, EventArgs e)
{
//FlowLayoutPanel flp = (FlowLayoutPanel)this.Parent;
//SplitterPanel splitterPanel = (SplitterPanel)flp.Parent.Parent;
//SplitContainer splitContainer = (SplitContainer)splitterPanel.Parent;
LayerControl layerControl = (LayerControl)sender;
//layerControl.RefreshControl(layerModel);
//string layerName = layerControl.LayerName;
OnDoubleClicked?.Invoke(this, EventArgs.Empty);
//Control[] cnt = this.ParentForm.Controls.Find("splitContainer1", true);
//SplitContainer splitContainer = (SplitContainer)cnt[0];
//if (splitContainer.Panel1Collapsed == true)
// splitContainer.Panel1Collapsed = false;
//else
// splitContainer.Panel1Collapsed = true;
}
#endregion
public void paintThisShit(Graphics _graphics)
{
}
private void UpdateTitleBar()
{
Point[] pts = {
new Point(0, 0),
new Point(217, 0),
new Point(202, 15),
new Point(15, 15),
new Point(0, 0)
};
//g.FillPath(lgb,XButtonBox);
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
titleBarPanel.Region = polygon_region;
// Make the button big enough to hold the whole region.
titleBarPanel.SetBounds(
titleBarPanel.Location.X,
titleBarPanel.Location.Y,
217,
15);
}
private void UpdateStatusBar()
{
Point[] pts = {
new Point(15, 0),
new Point(202, 0),
new Point(217, 15),
new Point(0, 15),
new Point(15, 0)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
statusBarPanel.Region = polygon_region;
// Make the button big enough to hold the whole region.
statusBarPanel.SetBounds(
statusBarPanel.Location.X,
statusBarPanel.Location.Y + 1,
217,
15);
}
private void UpdateLeftSideBar()
{
Point[] pts = {
new Point(0, 0),
new Point(15, 15),
new Point(15, 53),
new Point(0, 68),
new Point(0, 0)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
leftSideBarPanel.Region = polygon_region;
// Make the button big enough to hold the whole region.
leftSideBarPanel.SetBounds(
leftSideBarPanel.Location.X,
leftSideBarPanel.Location.Y,
15,
83);
}
private void UpdateRightSideBar()
{
Point[] pts = {
new Point(0, 15),
new Point(15, 0),
new Point(15, 83),
new Point(0, 68),
new Point(0, 15)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
//rightSideBarPanel.Region = polygon_region;
// Make the button big enough to hold the whole region.
rightSideBarPanel.SetBounds(
rightSideBarPanel.Location.X,
rightSideBarPanel.Location.Y,
15,
83);
}
private void UpdateBtnCancel()
{
Point[] pts = {
new Point(13, 0),
new Point(31, 0),
new Point(16, 15),
new Point(0, 15),
new Point(13, 0)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
//fineprint
//stereograd
btnCancel.Region = polygon_region;
// Make the button big enough to hold the whole region.
btnCancel.SetBounds(
btnCancel.Location.X,
btnCancel.Location.Y,
30,
15);
}
private void UpdateToggleSwitchButton()
{
Point[] pts = {
new Point(14, 0),
new Point(45, 0),
new Point(30, 17),
new Point(0, 17),
new Point(14, 0)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
//fineprint
//stereograd
toggleBlockBtn.Region = polygon_region;
// Make the button big enough to hold the whole region.
toggleBlockBtn.SetBounds(
toggleBlockBtn.Location.X,
toggleBlockBtn.Location.Y,
45,
17);
}
private void UpdateArrowUp()
{
Point[] pts = {
new Point(0, 10),
new Point(5, 0),
new Point(10, 10),
new Point(7, 10),
new Point(7, 20),
new Point(3, 20),
new Point(3, 10),
new Point(0, 10)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
//fineprint
//stereograd
btnArrowUp.Region = polygon_region;
// Make the button big enough to hold the whole region.
btnArrowUp.SetBounds(
btnArrowUp.Location.X,
btnArrowUp.Location.Y,
15,
25);
}
private void UpdateArrowDown()
{
Point[] pts = {
new Point(3, 0),
new Point(7, 0),
new Point(7, 10),
new Point(10, 10),
new Point(5, 20),
new Point(0, 10),
new Point(3, 10),
new Point(3, 0)
};
// Make the GraphicsPath.
GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding);
polygon_path.AddPolygon(pts);
// Convert the GraphicsPath into a Region.
Region polygon_region = new Region(polygon_path);
//fineprint
//stereograd
btnArrowDown.Region = polygon_region;
// Make the button big enough to hold the whole region.
btnArrowDown.SetBounds(
btnArrowDown.Location.X,
btnArrowDown.Location.Y,
15,
25);
}
private void LayerControl_MouseClick(object sender, MouseEventArgs e) //!!!!Nick
{
LayerControl layerControl = (LayerControl)sender;
OnDoubleClicked?.Invoke(this, EventArgs.Empty);
}
}
}