using CaeGlobals;
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;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace UserControls
{
public partial class FrmPropertyListView : FrmProperties
{
// Variables
protected int _preselectIndex;
//
protected int _numItems;
protected int _maxTopLvHeight;
protected int _minTopLvHeight;
protected int _initialFormHeight;
protected int _initialTopGbHeight;
protected int _initialTopLvHeight;
protected int _initialBetweenHeight;
protected int _initialBottomGbHeight;
// Constructors
public FrmPropertyListView()
: this(2.0)
{
}
///
///
///
/// Larger value means wider second column. Default = 2.0
public FrmPropertyListView(double labelRatio)
: base(labelRatio)
{
InitializeComponent();
//
_preselectIndex = -1;
_numItems = -1;
}
// Event handlers
private void FrmPropertyListView_Resize(object sender, EventArgs e)
{
if (_numItems == lvTypes.Items.Count)
{
int delta = Height - _initialFormHeight;
int deltaTop = delta;
if (_initialTopLvHeight + deltaTop > _maxTopLvHeight) deltaTop = _maxTopLvHeight - _initialTopLvHeight;
if (_initialTopLvHeight + deltaTop < _minTopLvHeight) deltaTop = _minTopLvHeight - _initialTopLvHeight;
int deltaBottom = delta - deltaTop;
//
gbType.Height = _initialTopGbHeight + deltaTop;
gbProperties.Top = gbType.Bottom + _initialBetweenHeight;
gbProperties.Height = _initialBottomGbHeight + deltaBottom;
}
}
private void FrmPropertyListView_VisibleChanged(object sender, EventArgs e)
{
if (Visible)
{
// Set max list view height based on number of items
_maxTopLvHeight = 0;
foreach (ListViewItem item in lvTypes.Items) _maxTopLvHeight += item.Bounds.Height;
_minTopLvHeight = _maxTopLvHeight / lvTypes.Items.Count * 3; // show at least three items
_maxTopLvHeight += 4;
_minTopLvHeight += 4;
_maxTopLvHeight = Math.Max(_maxTopLvHeight, lvTypes.Height);
//
_initialFormHeight = Height;
_initialTopGbHeight = gbType.Height;
_initialTopLvHeight = lvTypes.Height;
_initialBetweenHeight = gbProperties.Top - gbType.Bottom;
_initialBottomGbHeight = gbProperties.Height;
//
_numItems = lvTypes.Items.Count;
//
OnListViewTypeSelectedIndexChanged();
}
}
private void lvTypes_SelectedIndexChanged(object sender, EventArgs e)
{
OnListViewTypeSelectedIndexChanged();
//
if (lvTypes.SelectedItems != null && lvTypes.SelectedItems.Count == 1)
{
ListViewItem listViewItem = lvTypes.SelectedItems[0];
lvTypes.EnsureVisible(listViewItem.Index);
}
}
private void lvTypes_MouseUp(object sender, MouseEventArgs e)
{
OnListViewTypeMouseUp();
}
// Methods
public override bool PrepareForm(string stepName, string itemToEditName)
{
lvTypes.Enabled = true;
//
bool result = base.PrepareForm(stepName, itemToEditName);
//
PreselectListViewItem(_preselectIndex);
//
return result;
}
protected virtual void OnListViewTypeSelectedIndexChanged()
{
}
protected virtual void OnListViewTypeMouseUp()
{
//propertyGrid.Select();
}
public void SetPreselectListViewItem(int index)
{
// Used by Advisor
_preselectIndex = index;
}
public void PreselectListViewItem(int index)
{
_preselectIndex = index;
//
if (_preselectIndex >= 0 && _preselectIndex < lvTypes.Items.Count)
{
lvTypes.Items[_preselectIndex].Selected = true;
lvTypes.Enabled = false;
_preselectIndex = -1;
}
}
}
}