Files
wg_cpso/CPSO/Forms/00_Common/FrmNewModel.cs

353 lines
14 KiB
C#
Raw Normal View History

2026-03-25 18:20:24 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CaeGlobals;
using CaeModel;
namespace CPSO.Forms
{
class FrmNewModel : UserControls.FrmPropertyListView, IFormBase
{
// Variables
private string _geometryAndModelOrResults;
private ViewUnitSystem _viewUnitSystem;
private ModelSpaceEnum _modelSpace;
private GroupBox gbModelSpace;
private RadioButton rb2DPlaneStress;
private RadioButton rb3D;
private Controller _controller;
private int _lvSelectedIndex;
private RadioButton rb2DAxisymmetric;
private RadioButton rb2DPlaneStrain;
private bool _focusOK;
private bool _cancelPossible;
// Properties
// SetLoad and GetLoad to distinguish from Load event
public UnitSystem UnitSystem
{
get { return _viewUnitSystem != null ? _viewUnitSystem.GetBase() : null; }
set
{
var clone = value.DeepClone();
if (clone is UnitSystem us) _viewUnitSystem = new ViewUnitSystem(us);
else throw new NotImplementedException();
}
}
public ModelSpaceEnum ModelSpace { get { return _modelSpace; } set { _modelSpace = value; } }
// Constructors
public FrmNewModel()
: this(null)
{
}
public FrmNewModel(Controller controller)
: base(1.4)
{
InitializeComponent();
//
_controller = controller;
_viewUnitSystem = null;
//
btnOkAddNew.Visible = false;
//
MethodInfo m = typeof(RadioButton).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
if (m != null)
{
m.Invoke(rb2DPlaneStress, new object[] { ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true });
m.Invoke(rb3D, new object[] { ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true });
}
rb2DPlaneStress.MouseDoubleClick += rbModelSpace_DoubleClick;
rb3D.MouseDoubleClick += rbModelSpace_DoubleClick;
}
private void InitializeComponent()
{
this.gbModelSpace = new System.Windows.Forms.GroupBox();
this.rb2DAxisymmetric = new System.Windows.Forms.RadioButton();
this.rb2DPlaneStrain = new System.Windows.Forms.RadioButton();
this.rb2DPlaneStress = new System.Windows.Forms.RadioButton();
this.rb3D = new System.Windows.Forms.RadioButton();
this.gbType.SuspendLayout();
this.gbProperties.SuspendLayout();
this.gbModelSpace.SuspendLayout();
this.SuspendLayout();
//
// gbType
//
this.gbType.Location = new System.Drawing.Point(12, 90);
this.gbType.Size = new System.Drawing.Size(310, 128);
this.gbType.TabIndex = 101;
this.gbType.Text = "Unit System Type";
//
// lvTypes
//
this.lvTypes.Size = new System.Drawing.Size(298, 100);
this.lvTypes.TabIndex = 5;
this.lvTypes.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvTypes_MouseDoubleClick);
//
// gbProperties
//
this.gbProperties.Location = new System.Drawing.Point(12, 224);
this.gbProperties.Size = new System.Drawing.Size(310, 271);
this.gbProperties.TabIndex = 102;
this.gbProperties.Text = "Units";
//
// propertyGrid
//
this.propertyGrid.Size = new System.Drawing.Size(298, 243);
this.propertyGrid.TabIndex = 10;
this.propertyGrid.TabStop = false;
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(160, 501);
this.btnOK.TabIndex = 0;
//
// btnCancel
//
this.btnCancel.Location = new System.Drawing.Point(241, 501);
//
// btnOkAddNew
//
this.btnOkAddNew.Location = new System.Drawing.Point(79, 501);
//
// gbModelSpace
//
this.gbModelSpace.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gbModelSpace.Controls.Add(this.rb2DAxisymmetric);
this.gbModelSpace.Controls.Add(this.rb2DPlaneStrain);
this.gbModelSpace.Controls.Add(this.rb2DPlaneStress);
this.gbModelSpace.Controls.Add(this.rb3D);
this.gbModelSpace.Location = new System.Drawing.Point(12, 12);
this.gbModelSpace.Name = "gbModelSpace";
this.gbModelSpace.Size = new System.Drawing.Size(310, 72);
this.gbModelSpace.TabIndex = 100;
this.gbModelSpace.TabStop = false;
this.gbModelSpace.Text = "Model Space";
//
// rb2DAxisymmetric
//
this.rb2DAxisymmetric.AutoSize = true;
this.rb2DAxisymmetric.Location = new System.Drawing.Point(189, 47);
this.rb2DAxisymmetric.Name = "rb2DAxisymmetric";
this.rb2DAxisymmetric.Size = new System.Drawing.Size(115, 19);
this.rb2DAxisymmetric.TabIndex = 4;
this.rb2DAxisymmetric.Text = "2D Axisymmetric";
this.rb2DAxisymmetric.UseVisualStyleBackColor = true;
//
// rb2DPlaneStrain
//
this.rb2DPlaneStrain.AutoSize = true;
this.rb2DPlaneStrain.Location = new System.Drawing.Point(189, 22);
this.rb2DPlaneStrain.Name = "rb2DPlaneStrain";
this.rb2DPlaneStrain.Size = new System.Drawing.Size(104, 19);
this.rb2DPlaneStrain.TabIndex = 3;
this.rb2DPlaneStrain.Text = "2D Plane Strain";
this.rb2DPlaneStrain.UseVisualStyleBackColor = true;
//
// rb2DPlaneStress
//
this.rb2DPlaneStress.AutoSize = true;
this.rb2DPlaneStress.Location = new System.Drawing.Point(6, 47);
this.rb2DPlaneStress.Name = "rb2DPlaneStress";
this.rb2DPlaneStress.Size = new System.Drawing.Size(104, 19);
this.rb2DPlaneStress.TabIndex = 2;
this.rb2DPlaneStress.Text = "2D Plane Stress";
this.rb2DPlaneStress.UseVisualStyleBackColor = true;
//
// rb3D
//
this.rb3D.AutoSize = true;
this.rb3D.Checked = true;
this.rb3D.Location = new System.Drawing.Point(6, 22);
this.rb3D.Name = "rb3D";
this.rb3D.Size = new System.Drawing.Size(39, 19);
this.rb3D.TabIndex = 1;
this.rb3D.TabStop = true;
this.rb3D.Text = "3D";
this.rb3D.UseVisualStyleBackColor = true;
//
// FrmNewModel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.ClientSize = new System.Drawing.Size(334, 536);
this.Controls.Add(this.gbModelSpace);
this.Name = "FrmNewModel";
this.Text = "Properties";
this.VisibleChanged += new System.EventHandler(this.FrmNewModel_VisibleChanged);
this.Controls.SetChildIndex(this.gbModelSpace, 0);
this.Controls.SetChildIndex(this.gbProperties, 0);
this.Controls.SetChildIndex(this.btnCancel, 0);
this.Controls.SetChildIndex(this.btnOK, 0);
this.Controls.SetChildIndex(this.btnOkAddNew, 0);
this.Controls.SetChildIndex(this.gbType, 0);
this.gbType.ResumeLayout(false);
this.gbProperties.ResumeLayout(false);
this.gbModelSpace.ResumeLayout(false);
this.gbModelSpace.PerformLayout();
this.ResumeLayout(false);
}
// Overrides
private void FrmNewModel_VisibleChanged(object sender, EventArgs e)
{
if (Visible)
{
if (_lvSelectedIndex != -1)
{
lvTypes.Items[_lvSelectedIndex].Focused = true;
lvTypes.Items[_lvSelectedIndex].Selected = true;
_lvSelectedIndex = -1;
}
if (_focusOK)
{
btnOK.Select();
_focusOK = false;
}
}
}
protected override void OnListViewTypeSelectedIndexChanged()
{
if (lvTypes.Enabled && lvTypes.SelectedItems != null && lvTypes.SelectedItems.Count > 0)
{
object itemTag = lvTypes.SelectedItems[0].Tag;
if (itemTag is ViewUnitSystem vus) _viewUnitSystem = vus;
else throw new NotImplementedException();
//
propertyGrid.SelectedObject = itemTag;
try
{
// Get start point grid item
GridItem gi = propertyGrid.EnumerateAllItems().First((item) =>
item.PropertyDescriptor != null &&
item.PropertyDescriptor.DisplayName.TrimStart(new char[] { '\t' }) == "Length unit");
// Select it
gi.Select();
}
catch { }
//
propertyGrid.Refresh();
//
lvTypes.Select();
}
}
protected override void OnListViewTypeMouseUp()
{
// Prevent calling propertyGrid.Select();
}
protected override void OnApply(bool onOkAddNew)
{
try
{
_modelSpace = ModelSpaceEnum.Undefined;
if (rb3D.Checked) _modelSpace = ModelSpaceEnum.ThreeD;
else if (rb2DPlaneStress.Checked) _modelSpace = ModelSpaceEnum.PlaneStress;
else if (rb2DPlaneStrain.Checked) _modelSpace = ModelSpaceEnum.PlaneStrain;
else if (rb2DAxisymmetric.Checked) _modelSpace = ModelSpaceEnum.Axisymmetric;
else throw new NotSupportedException();
//
_viewUnitSystem = (ViewUnitSystem)propertyGrid.SelectedObject;
if (_viewUnitSystem == null) throw new CaeException("No unit system selected.");
UnitSystem = _viewUnitSystem.GetBase();
//
Hide();
//
DialogResult = DialogResult.OK;
}
catch (Exception ex)
{
ExceptionTools.Show(this, ex);
}
}
protected override void OnHideOrClose()
{
if (_cancelPossible) base.OnHideOrClose();
}
protected override bool OnPrepareForm(string stepName, string geometryAndModelOrResults)
{
propertyGrid.SelectedObject = null;
SetCancelPossible(false);
//
if (geometryAndModelOrResults == "New Model" || geometryAndModelOrResults == "Results")
_geometryAndModelOrResults = geometryAndModelOrResults;
else throw new ArgumentException();
//
if (geometryAndModelOrResults == "New Model")
{
gbModelSpace.Enabled = true;
Text = "Model Properties";
}
else
{
gbModelSpace.Enabled = false;
Text = "Results Properties";
}
// Add list view items
UnitSystemType defaultUnitSystemType = _controller.Settings.General.UnitSystemType;
UnitSystemType[] unitSystemTypes = new UnitSystemType[] { UnitSystemType.UNIT_LESS,
UnitSystemType.M_KG_S_C,
UnitSystemType.MM_TON_S_C,
UnitSystemType.M_TON_S_C,
UnitSystemType.IN_LB_S_F};
//
ListViewItem item;
lvTypes.Items.Clear();
//
_lvSelectedIndex = -1;
foreach (var unitSystemType in unitSystemTypes)
{
item = new ListViewItem(unitSystemType.GetDescription());
item.Tag = new ViewUnitSystem(new UnitSystem(unitSystemType));
lvTypes.Items.Add(item);
if (unitSystemType == defaultUnitSystemType) _lvSelectedIndex = lvTypes.Items.Count - 1;
}
//
_focusOK = true;
//
return true;
}
// Event handlers
private void lvTypes_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && e.Clicks == 2) OnApply(false);
}
private void rbModelSpace_DoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && e.Clicks == 2) OnApply(false);
}
// Methods
public void SetCancelPossible(bool cancelPossible)
{
_cancelPossible = cancelPossible;
//
if (_cancelPossible)
{
// Show Cancel button
btnCancel.Visible = true;
btnOK.Left = (btnOkAddNew.Left + btnCancel.Left) / 2;
}
else
{
// Hide Cancel button
btnCancel.Visible = false;
btnOK.Left = btnCancel.Left;
}
}
}
}