SchematicDrawing: Editing completed, TODO: Display
This commit is contained in:
@@ -0,0 +1,721 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using NHibernate;
|
||||
using SchematicDrawing;
|
||||
using TBF.BenchControl.Generic;
|
||||
using TBF.Resources;
|
||||
using TBF.UI.Shared;
|
||||
using TBF.UI.Bench.Components;
|
||||
|
||||
namespace TBF.UI.Bench.EditSchDrawing
|
||||
{
|
||||
public partial class EditSchDrawingDlg : Form
|
||||
{
|
||||
static readonly ILog log = LogManager.GetLogger(typeof(EditSchDrawingDlg));
|
||||
|
||||
bool unlocked;
|
||||
Config.Entities.CfgUpdateFlags flags; /// Or-ed from particular Flags from ComponentParametersDlg
|
||||
ISession session;
|
||||
IList<Config.Entities.Component> cmpntEntities;
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesS;
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesM;
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesL;
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesXL;
|
||||
IList<IDrawingItemCfg> drawingItems;
|
||||
string selectedItemName;
|
||||
IDrawingItemCfg selectedItem;
|
||||
|
||||
SelectComponentClassDlg selectComponentTypeDlg; /// Constructed once, the selection is kept between dialog usages
|
||||
|
||||
public EditSchDrawingDlg()
|
||||
{
|
||||
InitializeComponent();
|
||||
flags = Config.Entities.CfgUpdateFlags.None;
|
||||
schDrawingCtrl.EditMode = true;
|
||||
selectComponentTypeDlg = new SelectComponentClassDlg("Various.Drawing.");
|
||||
sharedButtons.RequiredGroupMembership = new Users.Entities.GID[] { Users.Entities.GID.Administrators };
|
||||
sharedButtons.OptionalButtons = SharedButtons.Buttons.Add;
|
||||
sharedButtons.Unlocked += Unlocked;
|
||||
sharedButtons.OKClicked += okButton_Click;
|
||||
sharedButtons.CancelClicked += cancelButton_Click;
|
||||
sharedButtons.AddClicked += addButton_Click;
|
||||
radioButton1.Checked = true;
|
||||
UpdateTitle();
|
||||
}
|
||||
|
||||
private void EditSchDrawingDlg_Load(object sender, EventArgs e)
|
||||
{
|
||||
LoadFormPosition();
|
||||
|
||||
try
|
||||
{
|
||||
session = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config);
|
||||
cmpntEntities = session.QueryOver<Config.Entities.Component>()
|
||||
.OrderBy(x => x.ItemNr).Asc
|
||||
.List();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Exception when loading components : {1}", exc.Message);
|
||||
cmpntEntities = new List<Config.Entities.Component>();
|
||||
}
|
||||
|
||||
drawingItems = new List<IDrawingItemCfg>();
|
||||
selectedItemName = string.Empty;
|
||||
selectedItem = null;
|
||||
|
||||
foreach (var c in cmpntEntities)
|
||||
{
|
||||
IComponentCfg cmpCfg = TBF.BenchControl.TbfComponents.CmpntCfgFromCmpntEntity(c);
|
||||
if (cmpCfg is IDrawingItemCfg)
|
||||
{
|
||||
IDrawingItemCfg item = cmpCfg as IDrawingItemCfg;
|
||||
drawingItems.Add(item);
|
||||
schDrawingCtrl.AddItem(item);
|
||||
itemsListBox.Items.Add(item.Name);
|
||||
|
||||
if (cmpCfg is TBF.BenchControl.Various.Drawing.Edges.Configuration)
|
||||
{
|
||||
var edgesCfg = cmpCfg as TBF.BenchControl.Various.Drawing.Edges.Configuration;
|
||||
switch (item.Sz)
|
||||
{
|
||||
case Sz.S:
|
||||
if (edgesS == null)
|
||||
{
|
||||
edgesS = edgesCfg;
|
||||
schDrawingCtrl.EdgesS = edgesCfg.Edges;
|
||||
}
|
||||
break;
|
||||
case Sz.M:
|
||||
if (edgesM == null)
|
||||
{
|
||||
edgesM = edgesCfg;
|
||||
schDrawingCtrl.EdgesM = edgesCfg.Edges;
|
||||
}
|
||||
break;
|
||||
case Sz.L:
|
||||
if (edgesL == null)
|
||||
{
|
||||
edgesL = edgesCfg;
|
||||
schDrawingCtrl.EdgesL = edgesCfg.Edges;
|
||||
}
|
||||
break;
|
||||
case Sz.XL:
|
||||
if (edgesXL == null)
|
||||
{
|
||||
edgesXL = edgesCfg;
|
||||
schDrawingCtrl.EdgesXL = edgesCfg.Edges;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UpdateTitle()
|
||||
{
|
||||
if (selectedItem == null)
|
||||
{
|
||||
Text = Strings.Schematic_drawing;
|
||||
}
|
||||
else
|
||||
{
|
||||
Text = string.Format("{0}: {1} {2} [{3}, {4}] {5} {6} {7}", Strings.Schematic_drawing,
|
||||
selectedItem.Name, selectedItem.Shape, selectedItem.X, selectedItem.Y,
|
||||
selectedItem.Sz, selectedItem.Orient, selectedItem.Flip ? "flip" : "");
|
||||
}
|
||||
}
|
||||
|
||||
private void Unlocked(object sender, EventArgs e)
|
||||
{
|
||||
unlocked = true;
|
||||
addEdgeButton.Enabled = true;
|
||||
cwButton.Enabled = true;
|
||||
ccwButton.Enabled = true;
|
||||
upButton.Enabled = true;
|
||||
downButton.Enabled = true;
|
||||
leftButton.Enabled = true;
|
||||
rightButton.Enabled = true;
|
||||
mirrorButton.Enabled = true;
|
||||
sizeButton.Enabled = true;
|
||||
radioButton1.Enabled = true;
|
||||
radioButton2.Enabled = true;
|
||||
radioButton3.Enabled = true;
|
||||
radioButton4.Enabled = true;
|
||||
radioButton5.Enabled = true;
|
||||
radioButton6.Enabled = true;
|
||||
radioButton7.Enabled = true;
|
||||
itemsListBox.Enabled = true;
|
||||
}
|
||||
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveDBChanges(session);
|
||||
SaveUISettings();
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
private void cancelButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveUISettings();
|
||||
|
||||
if ((flags & Config.Entities.CfgUpdateFlags.AnyChange) != 0 || (flags & Config.Entities.CfgUpdateFlags.RestartRqrd) != 0)
|
||||
{
|
||||
DialogResult dr = MessageBox.Show(Strings.Changes_will_be_lost_Do_you_want_to_proceed,
|
||||
Strings.Warning,
|
||||
MessageBoxButtons.YesNo,
|
||||
MessageBoxIcon.Question);
|
||||
if (dr != DialogResult.Yes) return;
|
||||
}
|
||||
|
||||
flags = Config.Entities.CfgUpdateFlags.None; /// Abandoning changes confirmed
|
||||
|
||||
DialogResult = DialogResult.Cancel;
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
private void addButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult dialogRslt = selectComponentTypeDlg.ShowDialog();
|
||||
if (dialogRslt != DialogResult.OK) return;
|
||||
|
||||
IComponentFactory factory = selectComponentTypeDlg.SlctdCmpntFactory;
|
||||
IComponentCfg cfg = factory.DefaultConfig();
|
||||
|
||||
IComponentCfgCtrl cfgControl = cfg.GetControl();
|
||||
cfgControl.Config = cfg;
|
||||
cfgControl.Config.ItemNr = (cmpntEntities.Count > 0) ? (cmpntEntities[cmpntEntities.Count - 1].ItemNr + 1) : 1;
|
||||
|
||||
TBF.BenchControl.ComponentParametersDlg cfgForm = new TBF.BenchControl.ComponentParametersDlg();
|
||||
cfgForm.TbfComponents = cmpntEntities;
|
||||
cfgForm.ComponentCfgCtrl = cfgControl;
|
||||
cfgForm.UnlockAfterStart = true;
|
||||
dialogRslt = cfgForm.ShowDialog();
|
||||
if (dialogRslt == DialogResult.OK)
|
||||
{
|
||||
Config.Entities.Component newComponent = cfgForm.Config.CreateDbEntity();
|
||||
cmpntEntities.Add(newComponent);
|
||||
|
||||
IDrawingItemCfg item = cfgForm.Config as IDrawingItemCfg;
|
||||
if (item != null)
|
||||
{
|
||||
drawingItems.Add(item);
|
||||
schDrawingCtrl.AddItem(item);
|
||||
itemsListBox.Items.Add(item.Name);
|
||||
itemsListBox.SelectedIndex = itemsListBox.Items.Count - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadFormPosition()
|
||||
{
|
||||
LocalSettings ls = Program.LocalSettings;
|
||||
if (ls != null)
|
||||
{
|
||||
Width = (ls.SchDrawingDlgWidth > 0) ? ls.SchDrawingDlgWidth : 850;
|
||||
Height = (ls.SchDrawingDlgHeight > 0) ? ls.SchDrawingDlgHeight : 500;
|
||||
Left = (ls.SchDrawingDlgLeft != 0) ? ls.SchDrawingDlgLeft : 200;
|
||||
Top = (ls.SchDrawingDlgTop != 0) ? ls.SchDrawingDlgTop : 100;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save the dialog position and ListViewEx column widths
|
||||
/// </summary>
|
||||
void SaveUISettings()
|
||||
{
|
||||
/// Obtain ComponentsmanagerDlg dimensions, etc.
|
||||
bool isMaximized = (WindowState == FormWindowState.Maximized);
|
||||
int left = (WindowState == FormWindowState.Normal) ? Location.X : RestoreBounds.Left;
|
||||
int top = (WindowState == FormWindowState.Normal) ? Location.Y : RestoreBounds.Top;
|
||||
int width = (WindowState == FormWindowState.Normal) ? Size.Width : RestoreBounds.Width;
|
||||
int height = (WindowState == FormWindowState.Normal) ? Size.Height : RestoreBounds.Height;
|
||||
|
||||
LocalSettings ls = Program.LocalSettings;
|
||||
|
||||
if (ls != null && (ls.SchDrawingDlgMaximized != isMaximized ||
|
||||
ls.SchDrawingDlgLeft != left ||
|
||||
ls.SchDrawingDlgTop != top ||
|
||||
ls.SchDrawingDlgWidth != width ||
|
||||
ls.SchDrawingDlgHeight != height))
|
||||
{
|
||||
/// At least one ComponentsManagerDlg dimension differs => Update local settings and save them
|
||||
///
|
||||
ls.SchDrawingDlgMaximized = isMaximized;
|
||||
ls.SchDrawingDlgLeft = left;
|
||||
ls.SchDrawingDlgTop = top;
|
||||
ls.SchDrawingDlgWidth = width;
|
||||
ls.SchDrawingDlgHeight = height;
|
||||
|
||||
ls.Save();
|
||||
}
|
||||
}
|
||||
|
||||
bool SaveDBChanges(ISession session)
|
||||
{
|
||||
using (ITransaction transaction = session.BeginTransaction())
|
||||
{
|
||||
try
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var original in cmpntEntities)
|
||||
{
|
||||
IComponentCfg cmpCfg = TBF.BenchControl.TbfComponents.CmpntCfgFromCmpntEntity(original);
|
||||
if ((cmpCfg is IDrawingItemCfg) && (i < schDrawingCtrl.GetItems().Count))
|
||||
{
|
||||
Config.Entities.Component modified = (schDrawingCtrl.GetItems()[i++] as TBF.BenchControl.Generic.IComponentCfg).CreateDbEntity();
|
||||
|
||||
if (original.Name == modified.Name && original.Parameters != modified.Parameters)
|
||||
{
|
||||
original.Parameters = modified.Parameters;
|
||||
session.SaveOrUpdate(original);
|
||||
}
|
||||
}
|
||||
}
|
||||
transaction.Commit();
|
||||
session.Flush();
|
||||
return true;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
transaction.Rollback();
|
||||
log.ErrorFormat("Exception when saving components : {1}", exc.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void itemsListBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!unlocked) return;
|
||||
|
||||
selectedItemName = itemsListBox.SelectedItem.ToString();
|
||||
schDrawingCtrl.SelectedItemName = selectedItemName;
|
||||
selectedItem = null;
|
||||
foreach (var item in drawingItems)
|
||||
{
|
||||
if (item.Name == selectedItemName)
|
||||
{
|
||||
selectedItem = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateTitle();
|
||||
}
|
||||
|
||||
|
||||
Selection GetSelection()
|
||||
{
|
||||
if (radioButton2.Checked) return Selection.Label;
|
||||
if (radioButton3.Checked) return Selection.Value;
|
||||
if (radioButton4.Checked) return Selection.EdgeS;
|
||||
if (radioButton5.Checked) return Selection.EdgeM;
|
||||
if (radioButton6.Checked) return Selection.EdgeL;
|
||||
if (radioButton7.Checked) return Selection.EdgeXL;
|
||||
return Selection.Object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return orientation so that object/label/value rotates clockwise
|
||||
/// </summary>
|
||||
/// <param name="orient">New orientation</param>
|
||||
Orient RotateCW(Orient orient)
|
||||
{
|
||||
if (orient == Orient.Up) return Orient.R;
|
||||
return ++orient;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update orientation so that object/label/value rotates counterclockwise
|
||||
/// </summary>
|
||||
/// <param name="orient">Ref. to orienation to be updated</param>
|
||||
Orient RotateCCW(Orient orient)
|
||||
{
|
||||
if (orient == Orient.R) return Orient.Up;
|
||||
return --orient;
|
||||
}
|
||||
|
||||
private void leftButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
int m = ((Control.ModifierKeys & Keys.Shift) != 0) ? 5 : 1;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object:
|
||||
selectedItem.X -= m * SchematicDrawing.Const.Step;
|
||||
if (selectedItem.X < 0) selectedItem.X = 0;
|
||||
break;
|
||||
case Selection.Label:
|
||||
selectedItem.LblX -= m;
|
||||
break;
|
||||
case Selection.Value:
|
||||
selectedItem.ValX -= m;
|
||||
break;
|
||||
default:
|
||||
return; /// Edge selected -> do nothing
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void rightButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
int m = ((Control.ModifierKeys & Keys.Shift) != 0) ? 5 : 1;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object:
|
||||
selectedItem.X += m * SchematicDrawing.Const.Step;
|
||||
break;
|
||||
case Selection.Label:
|
||||
selectedItem.LblX += m;
|
||||
break;
|
||||
case Selection.Value:
|
||||
selectedItem.ValX += m;
|
||||
break;
|
||||
default:
|
||||
return; /// Edge selected -> do nothing
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void upButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
int m = ((Control.ModifierKeys & Keys.Shift) != 0) ? 5 : 1;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object:
|
||||
selectedItem.Y -= m * SchematicDrawing.Const.Step;
|
||||
if (selectedItem.Y < 0) selectedItem.Y = 0;
|
||||
break;
|
||||
case Selection.Label:
|
||||
selectedItem.LblY -= m;
|
||||
break;
|
||||
case Selection.Value:
|
||||
selectedItem.ValY -= m;
|
||||
break;
|
||||
default:
|
||||
return; /// Edge selected -> do nothing
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void downButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
int m = ((Control.ModifierKeys & Keys.Shift) != 0) ? 5 : 1;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object:
|
||||
selectedItem.Y += m * SchematicDrawing.Const.Step;
|
||||
break;
|
||||
case Selection.Label:
|
||||
selectedItem.LblY += m; break;
|
||||
case Selection.Value:
|
||||
selectedItem.ValY += m; break;
|
||||
default:
|
||||
return; /// Edge selected -> do nothing
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void cwButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object: selectedItem.Orient = RotateCW(selectedItem.Orient); break;
|
||||
case Selection.Label: selectedItem.LblOrient = RotateCW(selectedItem.LblOrient); break;
|
||||
case Selection.Value: selectedItem.ValOrient = RotateCW(selectedItem.ValOrient); break;
|
||||
default: return; /// Edge
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void ccwButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (selectedItem == null) return;
|
||||
switch (GetSelection())
|
||||
{
|
||||
case Selection.Object: selectedItem.Orient = RotateCCW(selectedItem.Orient); break;
|
||||
case Selection.Label: selectedItem.LblOrient = RotateCCW(selectedItem.LblOrient); break;
|
||||
case Selection.Value: selectedItem.ValOrient = RotateCCW(selectedItem.ValOrient); break;
|
||||
default: return; /// Edge
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
|
||||
private void mirrorButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (GetSelection() == Selection.Object && selectedItem != null)
|
||||
{
|
||||
selectedItem.Flip = !selectedItem.Flip;
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rotates enum Sz values in selectedItem.Sz variable as follows:
|
||||
/// S -> M -> L -> XL -> S ...
|
||||
/// K1 -> K2 -> K3 -> K4 -> K5 -> K6 -> K7 -> K1 ...
|
||||
/// </summary>
|
||||
private void sizeButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (GetSelection() == Selection.Object && selectedItem != null)
|
||||
{
|
||||
if (selectedItem.Sz == Sz.XL)
|
||||
{
|
||||
selectedItem.Sz = Sz.S;
|
||||
}
|
||||
else if (++selectedItem.Sz == Sz.Count)
|
||||
{
|
||||
selectedItem.Sz = Sz.K1;
|
||||
}
|
||||
UpdateTitle();
|
||||
schDrawingCtrl.Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
private void addEdgeButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
AddEdgeDlg dlg = new AddEdgeDlg(drawingItems);
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
schDrawingCtrl.ShowTempEdge(dlg.EdgeStr, dlg.EdgeSize);
|
||||
if (MessageBox.Show("Do you want to save this edge?", "Confirmation",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
/// Save the edge entered in the dialog
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesCfg = null;
|
||||
switch (dlg.EdgeSize)
|
||||
{
|
||||
case Sz.S: edgesCfg = edgesS; break;
|
||||
case Sz.M: edgesCfg = edgesM; break;
|
||||
case Sz.L: edgesCfg = edgesL; break;
|
||||
case Sz.XL: edgesCfg = edgesXL; break;
|
||||
}
|
||||
|
||||
if (edgesCfg != null)
|
||||
{
|
||||
string[] oriEdges = edgesCfg.Edges;
|
||||
edgesCfg.Edges = new string[oriEdges.Length + 1];
|
||||
for (int i = 0; i < oriEdges.Length; i++)
|
||||
{
|
||||
edgesCfg.Edges[i] = oriEdges[i];
|
||||
}
|
||||
edgesCfg.Edges[oriEdges.Length] = dlg.EdgeStr;
|
||||
|
||||
switch (dlg.EdgeSize)
|
||||
{
|
||||
case Sz.S: schDrawingCtrl.EdgesS = edgesCfg.Edges; break;
|
||||
case Sz.M: schDrawingCtrl.EdgesM = edgesCfg.Edges; break;
|
||||
case Sz.L: schDrawingCtrl.EdgesL = edgesCfg.Edges; break;
|
||||
case Sz.XL: schDrawingCtrl.EdgesXL = edgesCfg.Edges; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
schDrawingCtrl.ClearTempEdge();
|
||||
}
|
||||
}
|
||||
|
||||
private void schDrawingCtrl_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
Selection sel = GetSelection();
|
||||
if (sel == Selection.Object || sel == Selection.Label || sel == Selection.Value)
|
||||
{
|
||||
foreach (var item in drawingItems)
|
||||
{
|
||||
if (item.X == 0 && item.Y == 0) continue;
|
||||
|
||||
DrawingShape dshape = DrawingShape.GetDrawingShape(item);
|
||||
|
||||
if (sel == Selection.Object && (dshape != null) && dshape.HasImg
|
||||
&& dshape.GetRotatedFlippedImageRectangle(item.Orient, item.Flip).Contains(e.X - item.X, e.Y - item.Y))
|
||||
{
|
||||
selectedItemName = item.Name;
|
||||
schDrawingCtrl.SelectedItemName = item.Name;
|
||||
selectedItem = item;
|
||||
break;
|
||||
}
|
||||
else if (sel == Selection.Label)
|
||||
{
|
||||
int labelX = item.X + item.LblX;
|
||||
int labelY = item.Y + item.LblY;
|
||||
if (e.X >= labelX && e.X < labelX + 20 && e.Y >= labelY && e.Y < labelY + 20)
|
||||
{
|
||||
selectedItemName = item.Name;
|
||||
schDrawingCtrl.SelectedItemName = item.Name;
|
||||
selectedItem = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (sel == Selection.Value && (dshape != null) && dshape.HasValue)
|
||||
{
|
||||
int valueX = item.X + item.ValX;
|
||||
int valueY = item.Y + item.ValY;
|
||||
if (e.X >= valueX && e.X < valueX + 20 && e.Y >= valueY && e.Y < valueY + 20)
|
||||
{
|
||||
selectedItemName = item.Name;
|
||||
schDrawingCtrl.SelectedItemName = item.Name;
|
||||
selectedItem = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/// TODO: Select an edge
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void schDrawingCtrl_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
int xPos = e.X;
|
||||
int yPos = e.Y;
|
||||
}
|
||||
|
||||
|
||||
bool isStartNode;
|
||||
string startNodeItem;
|
||||
int startNodeId;
|
||||
///
|
||||
void ShowStartNode(string itemName, int nodeId)
|
||||
{
|
||||
isStartNode = true;
|
||||
startNodeItem = itemName;
|
||||
startNodeId = nodeId;
|
||||
schDrawingCtrl.ShowStartNode(itemName, nodeId);
|
||||
}
|
||||
///
|
||||
void ClearStartNode()
|
||||
{
|
||||
isStartNode = false;
|
||||
startNodeItem = null;
|
||||
schDrawingCtrl.ClearStartNode();
|
||||
}
|
||||
|
||||
|
||||
private void EditSchDrawingDlg_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
Selection sel = GetSelection();
|
||||
if (sel == Selection.EdgeS || sel == Selection.EdgeM || sel == Selection.EdgeL || sel == Selection.EdgeXL)
|
||||
{
|
||||
int nodeId;
|
||||
string itemName = FindNode(drawingItems, e.X, e.Y, 4, out nodeId);
|
||||
if (!string.IsNullOrEmpty(itemName))
|
||||
{
|
||||
ShowStartNode(itemName, nodeId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void schDrawingCtrl_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
Selection sel = GetSelection();
|
||||
if (sel == Selection.EdgeS || sel == Selection.EdgeM || sel == Selection.EdgeL || sel == Selection.EdgeXL)
|
||||
{
|
||||
Sz sz = (sel == Selection.EdgeS) ? Sz.S : (sel == Selection.EdgeM) ? Sz.M : (sel == Selection.EdgeL) ? Sz.L : Sz.XL;
|
||||
|
||||
if (isStartNode)
|
||||
{
|
||||
int nodeId;
|
||||
string itemName = FindNode(drawingItems, e.X, e.Y, 4, out nodeId);
|
||||
if (!string.IsNullOrEmpty(itemName) && (itemName != startNodeItem || nodeId != startNodeId))
|
||||
{
|
||||
string edgeStr = string.Format("{0}~{1}~{2}~{3}", startNodeItem, startNodeId, itemName, nodeId);
|
||||
ClearStartNode();
|
||||
schDrawingCtrl.ShowTempEdge(edgeStr, sz);
|
||||
|
||||
if (MessageBox.Show("Do you want to save this edge?", "Confirmation",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
/// Save the edge entered in the dialog
|
||||
TBF.BenchControl.Various.Drawing.Edges.Configuration edgesCfg = null;
|
||||
switch (sz)
|
||||
{
|
||||
case Sz.S: edgesCfg = edgesS; break;
|
||||
case Sz.M: edgesCfg = edgesM; break;
|
||||
case Sz.L: edgesCfg = edgesL; break;
|
||||
case Sz.XL: edgesCfg = edgesXL; break;
|
||||
}
|
||||
|
||||
if (edgesCfg != null)
|
||||
{
|
||||
string[] oriEdges = edgesCfg.Edges;
|
||||
edgesCfg.Edges = new string[oriEdges.Length + 1];
|
||||
for (int i = 0; i < oriEdges.Length; i++)
|
||||
{
|
||||
edgesCfg.Edges[i] = oriEdges[i];
|
||||
}
|
||||
edgesCfg.Edges[oriEdges.Length] = edgeStr;
|
||||
|
||||
switch (sz)
|
||||
{
|
||||
case Sz.S: schDrawingCtrl.EdgesS = edgesCfg.Edges; break;
|
||||
case Sz.M: schDrawingCtrl.EdgesM = edgesCfg.Edges; break;
|
||||
case Sz.L: schDrawingCtrl.EdgesL = edgesCfg.Edges; break;
|
||||
case Sz.XL: schDrawingCtrl.EdgesXL = edgesCfg.Edges; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
schDrawingCtrl.ClearTempEdge();
|
||||
}
|
||||
else
|
||||
{
|
||||
ClearStartNode();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string FindNode(IList<IDrawingItemCfg> items, int x, int y, int tollerance, out int nid)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (item.X == 0 && item.Y == 0) continue;
|
||||
DrawingShape dshape = DrawingShape.GetDrawingShape(item);
|
||||
if (dshape == null) continue;
|
||||
|
||||
for (int i = 0; i < dshape.Nodes.Length; i++)
|
||||
{
|
||||
Node nd = dshape.GetRotatedFlippedNode(i, item.Orient, item.Flip);
|
||||
int dx = Math.Abs(item.X + Const.Step * nd.X - x);
|
||||
int dy = Math.Abs(item.Y + Const.Step * nd.Y - y);
|
||||
if ((dx <= tollerance) && (dy <= tollerance))
|
||||
{
|
||||
nid = i;
|
||||
return item.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nid = 0;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user