733 lines
29 KiB
C#
733 lines
29 KiB
C#
using CaeGlobals;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using CaeModel;
|
|
using CPSO.Commands;
|
|
|
|
namespace CPSO.Forms
|
|
{
|
|
public partial class FrmMaterialLibrary : Form
|
|
{
|
|
// Variables
|
|
private Controller _controller;
|
|
private bool _modelChanged;
|
|
private FrmMaterial _frmMaterial;
|
|
private int _yPadding;
|
|
private object _previousControl;
|
|
private bool _prevClickDouble;
|
|
static bool _collapsed = true;
|
|
|
|
|
|
// Properties
|
|
|
|
|
|
// Constructors
|
|
public FrmMaterialLibrary(Controller controller)
|
|
{
|
|
InitializeComponent();
|
|
//
|
|
_controller = controller;
|
|
_modelChanged = false;
|
|
_previousControl = null;
|
|
//
|
|
_controller.Model.UnitSystem.SetConverterUnits();
|
|
}
|
|
|
|
|
|
// Event handlers
|
|
private void FrmMaterialLibrary_Load(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (_controller.Model != null)
|
|
{
|
|
ListViewItem item;
|
|
foreach (var entry in _controller.Model.Materials)
|
|
{
|
|
item = lvModelMaterials.Items.Add(entry.Value.Name);
|
|
item.Name = entry.Value.Name;
|
|
item.Tag = entry.Value; // do not clone, to determine if the material changed
|
|
}
|
|
if (lvModelMaterials.Items.Count > 0)
|
|
{
|
|
lvModelMaterials.Items[0].Selected = true;
|
|
_previousControl = lvModelMaterials;
|
|
}
|
|
}
|
|
// Load material libraries
|
|
string fileName = Path.Combine(Application.StartupPath, Globals.MaterialLibraryFileName);
|
|
LoadMaterialLibraryFromFile(fileName);
|
|
//
|
|
foreach (var materialLibraryFile in _controller.Settings.General.GetMaterialLibraryFiles())
|
|
{
|
|
LoadMaterialLibraryFromFile(materialLibraryFile);
|
|
}
|
|
//
|
|
TreeNode materialNode;
|
|
GetNodeContainingFirstMaterial(cltvLibrary.Nodes[0], out materialNode);
|
|
if (materialNode != null) cltvLibrary.SelectedNode = materialNode;
|
|
else cltvLibrary.SelectedNode = cltvLibrary.Nodes[0];
|
|
if (_previousControl == null) _previousControl = cltvLibrary;
|
|
//
|
|
_frmMaterial = new FrmMaterial(_controller);
|
|
_frmMaterial.Text = "Preview Material Properties";
|
|
_frmMaterial.VisibleChanged += _frmMaterial_VisibleChanged;
|
|
_frmMaterial.PrepareFormForPreview();
|
|
//
|
|
if (cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
Material previewMaterial = (Material)cltvLibrary.SelectedNode.Tag.DeepClone();
|
|
_frmMaterial.Material = previewMaterial;
|
|
}
|
|
//
|
|
_yPadding = gbLibraries.Bottom - gbLibraryMaterials.Top;
|
|
//
|
|
gbLibraries.IsCollapsed = _collapsed;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
}
|
|
private void _frmMaterial_VisibleChanged(object sender, EventArgs e)
|
|
{
|
|
if (_frmMaterial.Visible) { }
|
|
else
|
|
{
|
|
if (cbPreview.Checked) cbPreview.Checked = false;
|
|
}
|
|
|
|
}
|
|
private void gbLibraries_OnCollapsedChanged(object sender)
|
|
{
|
|
int newPadding = gbLibraries.Bottom - gbLibraryMaterials.Top;
|
|
if (newPadding != _yPadding)
|
|
{
|
|
int delta = newPadding - _yPadding;
|
|
gbLibraryMaterials.Top += delta;
|
|
gbModelMaterials.Top += delta;
|
|
btnCopyToModel.Top += delta;
|
|
btnCopyToLibrary.Top += delta;
|
|
btnMoveUp.Top += delta;
|
|
btnMoveDown.Top += delta;
|
|
//
|
|
gbLibraryMaterials.Height -= delta;
|
|
gbModelMaterials.Height -= delta;
|
|
}
|
|
_collapsed = gbLibraries.IsCollapsed;
|
|
}
|
|
// Libraries
|
|
private void btnNew_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
|
{
|
|
saveFileDialog.Filter = "Material library files | *.lib";
|
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
MaterialLibraryItem materialLibrary = new MaterialLibraryItem("Materials");
|
|
SaveMaterialLibraryToFile(saveFileDialog.FileName, materialLibrary);
|
|
//
|
|
LoadMaterialLibraryFromFile(saveFileDialog.FileName);
|
|
_controller.AddMaterialLibraryFile(saveFileDialog.FileName);
|
|
SetControlStates();
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
private void btnAdd_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
using (OpenFileDialog openFileDialog = new OpenFileDialog())
|
|
{
|
|
openFileDialog.Filter = "Material library files | *.lib";
|
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
LoadMaterialLibraryFromFile(openFileDialog.FileName);
|
|
_controller.AddMaterialLibraryFile(openFileDialog.FileName);
|
|
SetControlStates();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (ex is CaeException ce) ExceptionTools.Show(this, ce);
|
|
}
|
|
}
|
|
private void btnRemove_Click(object sender, EventArgs e)
|
|
{
|
|
if (lvLibraries.PossiblySelectedItems.Count == 1)
|
|
{
|
|
_controller.RemoveMaterialLibraryFile(lvLibraries.PossiblySelectedItems[0].Text);
|
|
//
|
|
int selectedId = lvLibraries.PossiblySelectedItems[0].Index;
|
|
lvLibraries.SelectedIndices.Clear();
|
|
lvLibraries.Items.RemoveAt(selectedId);
|
|
//
|
|
if (selectedId < lvLibraries.Items.Count) lvLibraries.Items[selectedId].Selected = true;
|
|
else if (lvLibraries.Items.Count > 0) lvLibraries.Items[lvLibraries.Items.Count - 1].Selected = true;
|
|
else if (lvLibraries.Items.Count == 0) SetControlStates();
|
|
}
|
|
}
|
|
private void lvLibraries_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (lvLibraries.PossiblySelectedItems.Count == 1)
|
|
{
|
|
MaterialLibraryItem mli = (MaterialLibraryItem)lvLibraries.PossiblySelectedItems[0].Tag;
|
|
ClearTree();
|
|
FillTree(mli, cltvLibrary.Nodes[0]);
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
private void LibraryChanged()
|
|
{
|
|
if (lvLibraries.PossiblySelectedItems.Count == 1)
|
|
{
|
|
MaterialLibraryItem materialLibrary = (MaterialLibraryItem)lvLibraries.PossiblySelectedItems[0].Tag;
|
|
materialLibrary.Items.Clear();
|
|
TreeNodesToItemList(cltvLibrary.Nodes[0], materialLibrary);
|
|
//
|
|
if (!lvLibraries.PossiblySelectedItems[0].Text.EndsWith("*")) lvLibraries.PossiblySelectedItems[0].Text += "*";
|
|
}
|
|
}
|
|
private bool AnyLibraryChanged()
|
|
{
|
|
foreach (ListViewItem item in lvLibraries.Items)
|
|
{
|
|
if (item.Text.EndsWith("*")) return true;
|
|
}
|
|
return false;
|
|
}
|
|
private void SetControlStates()
|
|
{
|
|
bool enabled = true;
|
|
if (lvLibraries.Items.Count == 0)
|
|
{
|
|
ClearTree();
|
|
tbCategoryName.Text = "";
|
|
//
|
|
enabled = false;
|
|
}
|
|
//
|
|
gbLibraryMaterials.Enabled = enabled;
|
|
btnCopyToModel.Enabled = enabled;
|
|
btnCopyToLibrary.Enabled = enabled;
|
|
}
|
|
private void ClearTree()
|
|
{
|
|
cltvLibrary.BeginUpdate();
|
|
cltvLibrary.Nodes[0].Nodes.Clear();
|
|
cltvLibrary.EndUpdate();
|
|
}
|
|
//
|
|
private void cltvLibrary_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (cltvLibrary.SelectedNode != null)
|
|
{
|
|
cltvLibrary.SelectedNode.EnsureVisible();
|
|
tbCategoryName.Text = cltvLibrary.SelectedNode.Text;
|
|
//
|
|
if (cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
if (_frmMaterial != null)
|
|
{
|
|
Material previewMaterial = (Material)cltvLibrary.SelectedNode.Tag.DeepClone();
|
|
_frmMaterial.Material = previewMaterial;
|
|
}
|
|
}
|
|
}
|
|
if (!_prevClickDouble) _previousControl = cltvLibrary;
|
|
_prevClickDouble = false;
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
private void cltvLibrary_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (cltvLibrary.SelectedNode != null && cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
btnCopyToModel_Click(null, null);
|
|
}
|
|
_prevClickDouble = true;
|
|
}
|
|
//
|
|
private void lvModelMaterials_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
_previousControl = lvModelMaterials;
|
|
//
|
|
if (lvModelMaterials.PossiblySelectedItems != null && lvModelMaterials.PossiblySelectedItems.Count == 1 &&
|
|
lvModelMaterials.PossiblySelectedItems[0].Tag != null)
|
|
{
|
|
if (_frmMaterial.Material != null)
|
|
{
|
|
Material previewMaterial = (Material)lvModelMaterials.PossiblySelectedItems[0].Tag.DeepClone();
|
|
_frmMaterial.Material = previewMaterial;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
private void lvModelMaterials_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (lvModelMaterials.PossiblySelectedItems != null && lvModelMaterials.PossiblySelectedItems.Count == 1 &&
|
|
lvModelMaterials.PossiblySelectedItems[0].Tag != null)
|
|
{
|
|
btnCopyToLibrary_Click(null, null);
|
|
}
|
|
}
|
|
//
|
|
private void tbCategoryName_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
e.SuppressKeyPress = true; // no beep
|
|
}
|
|
}
|
|
private void tbCategoryName_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter) btnRename_Click(null, null);
|
|
}
|
|
//
|
|
private void btnAddCategory_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
TreeNode parentNode;
|
|
if (cltvLibrary.SelectedNode != null) parentNode = cltvLibrary.SelectedNode;
|
|
else parentNode = cltvLibrary.Nodes[0];
|
|
|
|
if (parentNode.Tag == null)
|
|
{
|
|
TreeNode node = parentNode.Nodes.Add("NewCategory");
|
|
node.Name = "NewCategory";
|
|
|
|
parentNode.Expand();
|
|
cltvLibrary.SelectedNode = node;
|
|
cltvLibrary.SelectedNode.EnsureVisible();
|
|
ApplyFormattingRecursive(node);
|
|
cltvLibrary.Focus();
|
|
|
|
tbCategoryName.Text = node.Name;
|
|
tbCategoryName.Focus();
|
|
|
|
LibraryChanged();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
}
|
|
private void btnDeleteFromLibrary_Click(object sender, EventArgs e)
|
|
{
|
|
TreeNode parent = cltvLibrary.SelectedNode.Parent;
|
|
if (cltvLibrary.SelectedNode != null && parent != null)
|
|
{
|
|
int selectedId = cltvLibrary.SelectedNode.Index;
|
|
//
|
|
parent.Nodes.Remove(cltvLibrary.SelectedNode);
|
|
LibraryChanged();
|
|
//
|
|
if (selectedId == parent.Nodes.Count) selectedId--;
|
|
if (selectedId >= 0) cltvLibrary.SelectedNode = parent.Nodes[selectedId];
|
|
else cltvLibrary.SelectedNode = parent;
|
|
}
|
|
}
|
|
private void btnRename_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (cltvLibrary.SelectedNode != null && cltvLibrary.SelectedNode.Text != tbCategoryName.Text && cltvLibrary.SelectedNode.Parent != null)
|
|
{
|
|
if (!cltvLibrary.SelectedNode.Parent.Nodes.ContainsKey(tbCategoryName.Text))
|
|
{
|
|
Material test = new Material(tbCategoryName.Text); // test the name
|
|
cltvLibrary.SelectedNode.Text = tbCategoryName.Text;
|
|
cltvLibrary.SelectedNode.Name = tbCategoryName.Text;
|
|
if (cltvLibrary.SelectedNode.Tag != null) ((Material)cltvLibrary.SelectedNode.Tag).Name = tbCategoryName.Text;
|
|
//
|
|
LibraryChanged();
|
|
}
|
|
else throw new CaeException("The node '" + cltvLibrary.SelectedNode.Parent.Text +
|
|
"' already contains the node named '" + tbCategoryName.Text + "'.");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
}
|
|
//
|
|
private void btnDeleteFromModel_Click(object sender, EventArgs e)
|
|
{
|
|
if (lvModelMaterials.PossiblySelectedItems.Count == 1)
|
|
{
|
|
int selectedIndex = lvModelMaterials.PossiblySelectedItems[0].Index;
|
|
lvModelMaterials.Items.Remove(lvModelMaterials.PossiblySelectedItems[0]);
|
|
_modelChanged = true;
|
|
//
|
|
if (lvModelMaterials.Items.Count > 0)
|
|
{
|
|
// Select the same index
|
|
if (selectedIndex < lvModelMaterials.Items.Count) lvModelMaterials.Items[selectedIndex].Selected = true;
|
|
// Select the last item
|
|
else lvModelMaterials.Items[selectedIndex - 1].Selected = true;
|
|
}
|
|
//
|
|
lvModelMaterials.Focus();
|
|
}
|
|
}
|
|
//
|
|
private void btnCopyToLibrary_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (lvModelMaterials.PossiblySelectedItems.Count == 1 && cltvLibrary.SelectedNode != null)
|
|
{
|
|
TreeNode categoryNode;
|
|
if (cltvLibrary.SelectedNode.Tag == null) categoryNode = cltvLibrary.SelectedNode; // Category
|
|
else categoryNode = cltvLibrary.SelectedNode.Parent; // Material
|
|
//
|
|
if (categoryNode == null)
|
|
throw new CaeException("Please select a library category to which the material should be added.");
|
|
//
|
|
string materialName = lvModelMaterials.PossiblySelectedItems[0].Text;
|
|
int count = 1;
|
|
while (categoryNode.Nodes.ContainsKey(materialName))
|
|
{
|
|
materialName = lvModelMaterials.PossiblySelectedItems[0].Text + "_Model-" + count;
|
|
count++;
|
|
}
|
|
//
|
|
ListViewItem libraryMaterialItem = lvModelMaterials.PossiblySelectedItems[0];
|
|
Material libraryMaterial = (Material)libraryMaterialItem.Tag.DeepClone();
|
|
libraryMaterial.Name = materialName;
|
|
// Check for equations
|
|
if (libraryMaterial.ContainsEquation())
|
|
throw new CaeException("A material containing equations cannot be added to the library.");
|
|
//
|
|
TreeNode newMaterialNode = categoryNode.Nodes.Add(libraryMaterial.Name);
|
|
newMaterialNode.Name = newMaterialNode.Text;
|
|
newMaterialNode.Tag = libraryMaterial;
|
|
//
|
|
categoryNode.Expand();
|
|
cltvLibrary.SelectedNode = newMaterialNode;
|
|
_previousControl = cltvLibrary;
|
|
//
|
|
LibraryChanged();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
finally
|
|
{
|
|
_controller.Model.UnitSystem.SetConverterUnits();
|
|
}
|
|
}
|
|
private void btnCopyToModel_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (cltvLibrary.SelectedNode != null && cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
string materialName = cltvLibrary.SelectedNode.Text;
|
|
int count = 1;
|
|
while (lvModelMaterials.Items.ContainsKey(materialName))
|
|
{
|
|
materialName = cltvLibrary.SelectedNode.Text + "_Library-" + count;
|
|
count++;
|
|
}
|
|
ListViewItem modelMaterialItem = lvModelMaterials.Items.Add(materialName);
|
|
modelMaterialItem.Name = modelMaterialItem.Text;
|
|
//
|
|
Material modelMaterial = (Material)cltvLibrary.SelectedNode.Tag.DeepClone();
|
|
modelMaterial.Name = modelMaterialItem.Name;
|
|
modelMaterialItem.Tag = modelMaterial;
|
|
// Deselect
|
|
modelMaterialItem.Selected = true;
|
|
//
|
|
lvModelMaterials.Focus();
|
|
_previousControl = lvModelMaterials;
|
|
//
|
|
_modelChanged = true;
|
|
|
|
}
|
|
else throw new CaeException("Please select the material in the library materials " +
|
|
"to be copied to the model materials.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
finally
|
|
{
|
|
_controller.Model.UnitSystem.SetConverterUnits();
|
|
}
|
|
}
|
|
//
|
|
private void cbPreview_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (cbPreview.Checked)
|
|
{
|
|
_frmMaterial.Location = new Point(Location.X + Width - 12, Location.Y);
|
|
_frmMaterial.Show(this);
|
|
}
|
|
else _frmMaterial.Hide();
|
|
}
|
|
//
|
|
private void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (lvLibraries.PossiblySelectedItems.Count == 1)
|
|
{
|
|
SaveMaterialLibrary(lvLibraries.PossiblySelectedItems[0]);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
}
|
|
private void btnOK_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (_controller.Model != null && _modelChanged)
|
|
{
|
|
string[] materialsToDelete = _controller.Model.Materials.Keys.ToArray();
|
|
if (materialsToDelete.Length > 0) _controller.RemoveMaterialsCommand(materialsToDelete);
|
|
//
|
|
foreach (ListViewItem item in lvModelMaterials.Items) _controller.AddMaterialCommand((Material)item.Tag);
|
|
}
|
|
Close();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ExceptionTools.Show(this, ex);
|
|
}
|
|
}
|
|
//
|
|
private void FrmMaterialLibrary_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (e.CloseReason == CloseReason.UserClosing && AnyLibraryChanged())
|
|
{
|
|
DialogResult response = MessageBoxes.ShowWarningQuestionYesNoCancel(
|
|
"Save all material libraries before closing?");
|
|
if (response == DialogResult.Yes) SaveAllMaterialLibraries();
|
|
else if (response == DialogResult.Cancel) e.Cancel = true;
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
finally { _controller.SetSelectByToDefault(); }
|
|
}
|
|
|
|
|
|
// Methods
|
|
private void SaveAllMaterialLibraries()
|
|
{
|
|
foreach (ListViewItem item in lvLibraries.Items) SaveMaterialLibrary(item);
|
|
}
|
|
private void SaveMaterialLibrary(ListViewItem item)
|
|
{
|
|
if (item.Text.EndsWith("*"))
|
|
{
|
|
MaterialLibraryItem materialLibrary = (MaterialLibraryItem)item.Tag;
|
|
SaveMaterialLibraryToFile(item.Name, materialLibrary);
|
|
item.Text = item.Name;
|
|
}
|
|
}
|
|
private void SaveMaterialLibraryToFile(string fileName, MaterialLibraryItem materialLibrary)
|
|
{
|
|
materialLibrary.DumpToFile(fileName);
|
|
}
|
|
private void TreeNodesToItemList(TreeNode node, MaterialLibraryItem materialLibraryItem)
|
|
{
|
|
materialLibraryItem.Expanded = node.IsExpanded;
|
|
//
|
|
foreach (TreeNode childNode in node.Nodes)
|
|
{
|
|
MaterialLibraryItem childItem = new MaterialLibraryItem(childNode.Name);
|
|
if (childNode.Tag != null) childItem.Tag = (Material)childNode.Tag.DeepClone();
|
|
materialLibraryItem.Items.Add(childItem);
|
|
//
|
|
TreeNodesToItemList(childNode, childItem);
|
|
}
|
|
}
|
|
//
|
|
private void LoadMaterialLibraryFromFile(string fileName)
|
|
{
|
|
if (File.Exists(fileName))
|
|
{
|
|
foreach (ListViewItem item in lvLibraries.Items)
|
|
{
|
|
if (item.Name == fileName) throw new CaeException("The selected material library is already open.");
|
|
}
|
|
MaterialLibraryItem materialLibrary = Tools.LoadDumpFromFile<MaterialLibraryItem>(fileName);
|
|
//
|
|
lvLibraries.SelectedIndices.Clear();
|
|
ListViewItem libraryItem = lvLibraries.Items.Add(fileName);
|
|
libraryItem.Name = libraryItem.Text;
|
|
libraryItem.Tag = materialLibrary;
|
|
libraryItem.Selected = true;
|
|
}
|
|
}
|
|
private void FillTree(MaterialLibraryItem materialLibraryItem, TreeNode node)
|
|
{
|
|
node.TreeView.BeginUpdate();
|
|
//
|
|
ItemListToTreeNodes(materialLibraryItem, node);
|
|
ApplyFormattingRecursive(cltvLibrary.Nodes[0]);
|
|
//
|
|
node.TreeView.EndUpdate();
|
|
}
|
|
private void ItemListToTreeNodes(MaterialLibraryItem materialLibraryItem, TreeNode node)
|
|
{
|
|
TreeNode childNode;
|
|
foreach (MaterialLibraryItem childItem in materialLibraryItem.Items)
|
|
{
|
|
childNode = node.Nodes.Add(childItem.Name);
|
|
childNode.Name = childItem.Name;
|
|
//
|
|
if (childItem.Tag != null) childNode.Tag = childItem.Tag.DeepClone();
|
|
else ItemListToTreeNodes(childItem, childNode);
|
|
}
|
|
//
|
|
if (materialLibraryItem.Expanded) node.Expand();
|
|
}
|
|
//
|
|
private void ApplyFormattingRecursive(TreeNode node)
|
|
{
|
|
if (node.Tag == null) node.ForeColor = SystemColors.Highlight;
|
|
else node.ForeColor = Color.Black;
|
|
//
|
|
foreach (TreeNode childNode in node.Nodes)
|
|
{
|
|
ApplyFormattingRecursive(childNode);
|
|
}
|
|
}
|
|
//
|
|
private void GetNodeContainingFirstMaterial(TreeNode node, out TreeNode firstNodeWithMaterial)
|
|
{
|
|
firstNodeWithMaterial = null;
|
|
//
|
|
if (node.Tag != null)
|
|
{
|
|
firstNodeWithMaterial = node;
|
|
return;
|
|
}
|
|
//
|
|
foreach (TreeNode childNode in node.Nodes)
|
|
{
|
|
GetNodeContainingFirstMaterial(childNode, out firstNodeWithMaterial);
|
|
if (firstNodeWithMaterial != null) return;
|
|
}
|
|
}
|
|
private void btnMoveUp_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (_previousControl == cltvLibrary)
|
|
{
|
|
if (cltvLibrary.SelectedNode != null && cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
TreeNode parent = cltvLibrary.SelectedNode.Parent;
|
|
int currentIndex = cltvLibrary.SelectedNode.Index;
|
|
TreeNode node = cltvLibrary.SelectedNode;
|
|
if (currentIndex > 0)
|
|
{
|
|
parent.Nodes.RemoveAt(currentIndex);
|
|
parent.Nodes.Insert(currentIndex - 1, node);
|
|
}
|
|
LibraryChanged();
|
|
cltvLibrary.Focus();
|
|
}
|
|
}
|
|
else if (_previousControl == lvModelMaterials)
|
|
{
|
|
if (lvModelMaterials.PossiblySelectedItems != null && lvModelMaterials.PossiblySelectedItems[0].Tag != null)
|
|
{
|
|
int currentIndex = lvModelMaterials.PossiblySelectedItems[0].Index;
|
|
ListViewItem item = lvModelMaterials.Items[currentIndex];
|
|
if (currentIndex > 0)
|
|
{
|
|
lvModelMaterials.Items.RemoveAt(currentIndex);
|
|
lvModelMaterials.Items.Insert(currentIndex - 1, item);
|
|
}
|
|
}
|
|
_modelChanged = true;
|
|
lvModelMaterials.Focus();
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
private void btnMoveDown_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (_previousControl == cltvLibrary)
|
|
{
|
|
if (cltvLibrary.SelectedNode != null && cltvLibrary.SelectedNode.Tag != null)
|
|
{
|
|
TreeNode parent = cltvLibrary.SelectedNode.Parent;
|
|
int currentIndex = cltvLibrary.SelectedNode.Index;
|
|
TreeNode node = cltvLibrary.SelectedNode;
|
|
if (currentIndex < parent.Nodes.Count - 1)
|
|
{
|
|
parent.Nodes.RemoveAt(currentIndex);
|
|
parent.Nodes.Insert(currentIndex + 1, node);
|
|
}
|
|
LibraryChanged();
|
|
cltvLibrary.Focus();
|
|
}
|
|
}
|
|
else if (_previousControl == lvModelMaterials)
|
|
{
|
|
if (lvModelMaterials.PossiblySelectedItems != null && lvModelMaterials.PossiblySelectedItems[0].Tag != null)
|
|
{
|
|
int currentIndex = lvModelMaterials.PossiblySelectedItems[0].Index;
|
|
ListViewItem item = lvModelMaterials.Items[currentIndex];
|
|
if (currentIndex < lvModelMaterials.Items.Count - 1)
|
|
{
|
|
lvModelMaterials.Items.RemoveAt(currentIndex);
|
|
lvModelMaterials.Items.Insert(currentIndex + 1, item);
|
|
}
|
|
}
|
|
_modelChanged = true;
|
|
lvModelMaterials.Focus();
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
|
|
|
|
}
|
|
}
|