EduNetworkBuilder/EduNetworkBuilder/ShapeEditor.cs

288 lines
9.9 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EduNetworkBuilder
{
public partial class ShapeEditor : Form
{
NetShape ShapeForEditing = null;
public ShapeEditor()
{
InitializeComponent();
LocalSetup();
}
public ShapeEditor(NetShape WhatToEdit)
{
InitializeComponent();
ShapeForEditing = WhatToEdit;
LocalSetup();
lbShapeList.Text = WhatToEdit.ToString(); //Select the item
}
void LocalSetup()
{
Network myNet = NB.GetNetwork();
List<String> ColorNames = myNet.ColorNames;
ColorNames.Sort();
cbFillColor.Items.Clear();
cbLineColor.Items.Clear();
foreach (string one in ColorNames)
{
cbFillColor.Items.Add(one);
cbLineColor.Items.Add(one);
}
cbShape.Items.Clear();
foreach(NetShapeType one in Enum.GetValues(typeof(NetShapeType)))
{
if (one != NetShapeType.none)
cbShape.Items.Add(one.ToString());
}
tbHeight.Leave += DataUpdated;
tbWidth.Leave += DataUpdated;
tbX.Leave += DataUpdated;
tbY.Leave += DataUpdated;
cbFillColor.Leave += DataUpdated;
cbLineColor.Leave += DataUpdated;
cbShape.Leave += DataUpdated;
tbName.Leave += DataUpdated;
FillFormItems();
}
private void LanguagifyComponents()
{
NBSettings OurSettings = NB.GetSettings();
lblFill.Text = NB.Translate("SE_Fill", OurSettings);
lblLine.Text = NB.Translate("SE_Line", OurSettings);
lblX.Text = NB.Translate("SE_X", OurSettings);
lblY.Text = NB.Translate("SE_Y", OurSettings);
lblWidth.Text = NB.Translate("SE_Width", OurSettings);
lblHeight.Text = NB.Translate("SE_Height", OurSettings);
lblShape.Text = NB.Translate("SE_Shape", OurSettings);
lblShapes.Text = NB.Translate("SE_Shapes", OurSettings);
lblName.Text = NB.Translate("SE_Name", OurSettings);
}
void FillFormItems(bool SaveIndex = false)
{
Network myNet = NB.GetNetwork();
int currentindex = lbShapeList.SelectedIndex;
lbShapeList.Items.Clear();
foreach (string one in myNet.ShapeDescriptions())
{
lbShapeList.Items.Add(one);
}
if (SaveIndex && currentindex >= 0) lbShapeList.SelectedIndex = currentindex;
}
void DataUpdated(object sender, EventArgs e)
{
ValuesToShape();
}
private void lbShapeList_SelectedIndexChanged(object sender, EventArgs e)
{
ChangeSelectionTo(lbShapeList.Text);
}
void ChangeSelectionTo(string ToSelect)
{
Network myNet = NB.GetNetwork();
//Fill in the text from the shape
ShapeForEditing = null;
foreach (NetShape oneShape in myNet.Shapes)
{
if (oneShape.ToString() == ToSelect)
ShapeForEditing = oneShape;
}
FieldsFromShape(ShapeForEditing);
}
private void FieldsFromShape()
{
FieldsFromShape(ShapeForEditing);
}
private void FieldsFromShape(NetShape theShape)
{
ShapeForEditing = theShape;
if(ShapeForEditing != null)
{
tbX.Text = ShapeForEditing.InArea.X.ToString();
tbY.Text = ShapeForEditing.InArea.Y.ToString();
tbHeight.Text = ShapeForEditing.InArea.Height.ToString();
tbWidth.Text = ShapeForEditing.InArea.Width.ToString();
cbFillColor.Text = ShapeForEditing.FillColor.Name;
cbLineColor.Text = ShapeForEditing.LineColor.Name;
cbShape.Text = ShapeForEditing.MyShape.ToString();
tbName.Text = ShapeForEditing.Name;
}
else
{
{
tbX.Text = "0";
tbY.Text = "0";
tbHeight.Text = "0";
tbWidth.Text = "0";
cbFillColor.Text = "Empty";
cbLineColor.Text = "Empty";
cbShape.Text = "None";
tbName.Text = "";
}
}
}
private void ValuesToShape()
{
ValuesToShape(ShapeForEditing);
}
private void ValuesToShape(NetShape theShape)
{
ShapeForEditing = theShape;
if (ShapeForEditing != null)
{
int X, Y, Width, Height;
X = ShapeForEditing.InArea.X;
Y = ShapeForEditing.InArea.Y;
Width = ShapeForEditing.InArea.Width;
Height = ShapeForEditing.InArea.Height;
int.TryParse(tbX.Text, out X);
int.TryParse(tbY.Text, out Y);
int.TryParse(tbWidth.Text, out Width);
int.TryParse(tbHeight.Text, out Height);
if (X < 0) X = 0;
if (Y < 0) Y = 0;
if (Height < 0) Height = 0;
if (Width < 0) Width = 0;
ShapeForEditing.InArea = new Rectangle(X, Y, Width, Height);
ShapeForEditing.FillColor = Color.FromName(cbFillColor.Text);
ShapeForEditing.LineColor = Color.FromName(cbLineColor.Text);
ShapeForEditing.MyShape = NB.TryParseEnum<NetShapeType>(cbShape.Text, NetShapeType.rectangle);
ShapeForEditing.Name = tbName.Text;
}
FillFormItems(true); //Update the listbox
}
private void btnDone_Click(object sender, EventArgs e)
{
Close();
}
private void lbShapeList_MouseUp(object sender, MouseEventArgs e)
{
if(lbShapeList.SelectedItem != null)
{
//We have an item that we have clicked on
ChangeSelectionTo(lbShapeList.Text);
}
if (e.Button == MouseButtons.Right)
{
//We should make a context menu here.
// Delete
// Move Up
// Move Down
// Move to top
// Move to bottom
if(ShapeForEditing != null)
{
int index = 0;
if (lbShapeList.ContextMenuStrip == null)
{
lbShapeList.ContextMenuStrip = new ContextMenuStrip();
}
lbShapeList.ContextMenuStrip.Items.Clear();
lbShapeList.ContextMenuStrip.Items.Add(NB.Translate("_Delete"));
lbShapeList.ContextMenuStrip.Items[index++].Click += lblShape_Delete;
lbShapeList.ContextMenuStrip.Items.Add(NB.Translate("SE_MoveToTop"));
lbShapeList.ContextMenuStrip.Items[index++].Click += lblShape_MoveToTop;
lbShapeList.ContextMenuStrip.Items.Add(NB.Translate("SE_MoveUp"));
lbShapeList.ContextMenuStrip.Items[index++].Click += lblShape_MoveUp;
lbShapeList.ContextMenuStrip.Items.Add(NB.Translate("SE_MoveDown"));
lbShapeList.ContextMenuStrip.Items[index++].Click += lblShape_MoveDown;
lbShapeList.ContextMenuStrip.Items.Add(NB.Translate("SE_MoveToTop"));
lbShapeList.ContextMenuStrip.Items[index++].Click += lblShape_MoveToTop;
lbShapeList.ContextMenuStrip.Visible = true;
lbShapeList.ContextMenuStrip.Show(Cursor.Position);
}
}
//If it is a left mouse button, we simply select the item so we can edit it
}
void lblShape_Delete(object sender, EventArgs e)
{
if(ShapeForEditing != null)
{
Network myNet = NB.GetNetwork();
myNet.RemoveShape(ShapeForEditing);
FillFormItems();
}
}
void lblShape_MoveToTop(object sender, EventArgs e)
{
if (ShapeForEditing != null)
{
Network myNet = NB.GetNetwork();
myNet.RemoveShape(ShapeForEditing);
myNet.Shapes.Insert(0, ShapeForEditing);
FillFormItems();
}
}
void lblShapeMove(int delta)
{
if (delta == 0) return;
if (ShapeForEditing == null) return;
Network myNet = NB.GetNetwork();
int index = myNet.Shapes.IndexOf(ShapeForEditing);
int newindex = index + delta;
myNet.Shapes.Remove(ShapeForEditing);
if (newindex < 0) newindex = 0;
if (newindex >= myNet.Shapes.Count) myNet.Shapes.Add(ShapeForEditing);
else myNet.Shapes.Insert(newindex, ShapeForEditing);
FillFormItems();
}
void lblShape_MoveUp(object sender, EventArgs e)
{
lblShapeMove(-1);
}
void lblShape_MoveDown(object sender, EventArgs e)
{
lblShapeMove(1);
}
void lblShape_MoveToEnd(object sender, EventArgs e)
{
if (ShapeForEditing != null)
{
Network myNet = NB.GetNetwork();
myNet.RemoveShape(ShapeForEditing);
myNet.Shapes.Add(ShapeForEditing);
FillFormItems();
}
}
private void lbShapeList_MouseDown(object sender, MouseEventArgs e)
{
}
}
}