using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Media;
using System.Globalization;
using System.Threading;
using MultiLayout;
using MultiLayout.UiModule;
namespace MultiLayout.MainEdit
{
///
/// 编辑界面的图表区
///
public class MeGraphTabItem : INotifyPropertyChanged
{
public TabItem mTabItem;
///
/// 唯一标识码
///
public int ID = 0;
public string Title { get; set; } = "??";
[PropertyChanged.DoNotCheckEquality]
public int ColCnt { get; set; } = 1;
[PropertyChanged.DoNotCheckEquality]
public int RowCnt { get; set; } = 1;
public List RowDefinitions { get; } = new List();
public List ColumnDefinitions { get; } = new List();
public List Components = new List();
public event Action RCChanged;
public MeGraphTabItem()
{
RefreshRC();
}
bool refresh(List list, int cnt)
{
int n = cnt - list.Count();
if (n == 0)
return false;
if (n > 0)
{
for (int i = 0; i < n; i++)
{
list.Add(false);
}
}
else
{
list.RemoveRange(cnt, -n);
}
return true;
}
void RefreshRC()
{
bool b1 = refresh(RowDefinitions, RowCnt);
bool b2 = refresh(ColumnDefinitions, ColCnt);
if (b1 || b2)
{
//把在范围外的控件缩小,或删除
MakeComponentRectVaild();
RCChanged?.Invoke(this);
}
}
public void RefreshRC(int rowcnt, int colcnt)
{
RowCnt = rowcnt;
ColCnt = colcnt;
RefreshRC();
}
public bool IsComponentRectVaild(System.Drawing.Rectangle rect)
{
return IsComponentRectVaild(rect, null);
}
public bool IsComponentRectVaild(System.Drawing.Rectangle rect, MeGraphComponent component)
{
//判断超出范围
if (!new System.Drawing.Rectangle(0, 0, ColCnt, RowCnt).Contains(rect))
{
return false;
}
//判断是否与其它控件有交集
for (int i = 0; i < Components.Count(); i++)
{
if (Components[i] == component)
continue;
if (rect.IntersectsWith(Components[i].Rect))
return false;
}
return true;
}
void MakeComponentRectVaild()
{
System.Drawing.Rectangle total = new System.Drawing.Rectangle(0, 0, ColCnt, RowCnt);
for (int i = 0; i < Components.Count(); i++)
{
System.Drawing.Rectangle r = Components[i].Rect;
if (r.IntersectsWith(total))
{
r.Intersect(total);
Components[i].Rect = r;
}
else
{
//删除
Components.RemoveAt(i);
i--;
continue;
}
}
}
///
/// 获取空的位置
///
///
public System.Drawing.Point GetFreeLocal()
{
//System.Drawing.Point
//System.Drawing.Rectangle.
for (int y = 0; y < RowCnt; y++)
{
for (int x = 0; x < ColCnt; x++)
{
System.Drawing.Point p = new System.Drawing.Point(x, y);
bool isContains = false;
foreach (MeGraphComponent c in Components)
{
if (c.Rect.Contains(p))
{
isContains = true;
break;
}
}
if (!isContains)
return p;
}
}
return new System.Drawing.Point(-1, -1);
}
///
///
///
///
protected void NotifyPropertyChanged(string propertyname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
public event PropertyChangedEventHandler PropertyChanged;
}
///
/// 编辑界面的图表区 对应 FlyLayout 的 GraphComponent 信息
///
public class MeGraphComponent : MeFlyComponent
{
public System.Drawing.Rectangle Rect { get; set; }
public MeGraphTabItem mItem;
}
///
/// 组件类型
///
public class MeComponentType : INotifyPropertyChanged
{
///
///
///
//public string ModuleName { get; set; }
///
///
///
public IUiModule2 Module { get; set; }
///
///
///
public Brush Background { get; set; }
///
///
///
public string Header { get; set; }
///
/// 只能添加一次
///
public bool IsUnique { get; set; }
///
/// 当只能添加一次,且当前已经添加了,isenable=false
///
public bool IsEnable
{
get {
if (IsUnique && Count > 0)
{
return false;
}
else
{
return true;
}
}
}
///
/// 当前一共添加了多少控件
///
public int Count { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
///
/// 编辑界面的 组件 对应 FlyLayout 的 FlyComponent 信息
///
public class MeFlyComponent : INotifyPropertyChanged
{
///
/// 唯一标识码
///
public int ID = 0;
///
/// 对应在grid中的button
///
public Button mButton;
public event PropertyChangedEventHandler PropertyChanged;
public MeComponentType Type { get; set; }
///
/// 服务容器名称
///
public string ServiceContainerName { get; set; }
}
}