using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace GanttChart
{
///
/// 甘特图控件
/// 该部分类主要是甘特图的属性
///
public partial class GanttChartView
{
#region Fonts
private Font _ColumnDateTextFont = DefaultFont;
///
/// 日期字体
///
public Font ColumnDateTextFont
{
get { return _ColumnDateTextFont; }
set { _ColumnDateTextFont = value; OnPropertyChanged(nameof(ColumnDateTextFont), value); }
}
private Font _ColumnHourTextFont = DefaultFont;
///
/// 时间字体
///
public Font ColumnHourTextFont
{
get { return _ColumnHourTextFont; }
set { _ColumnHourTextFont = value; OnPropertyChanged(nameof(ColumnHourTextFont), value); }
}
private Font _RowHeaderTextFont = DefaultFont;
///
/// 行标题字体
///
public Font RowHeaderTextFont
{
get { return _RowHeaderTextFont; }
set { _RowHeaderTextFont = value; OnPropertyChanged(nameof(RowHeaderTextFont), value); }
}
private Font _ItemTextFont = DefaultFont;
///
/// 项字体
///
public Font ItemTextFont
{
get { return _ItemTextFont; }
set { _ItemTextFont = value; OnPropertyChanged(nameof(ItemTextFont), value); }
}
private Font _TooltipTextFont = DefaultFont;
///
/// 提示文字字体
///
public Font TooltipTextFont
{
get { return _TooltipTextFont; }
set { _TooltipTextFont = value; OnPropertyChanged(nameof(TooltipTextFont), value); }
}
#endregion
#region Colors
private Color _GridColor = Color.FromArgb(210, 210, 210);
///
/// 网格颜色
///
public Color GridColor
{
get { return _GridColor; }
set { _GridColor = value; OnPropertyChanged(nameof(GridColor), value); }
}
private Color _ColumnDateTextColor = Color.FromArgb(102, 102, 102);
///
/// 日期文字颜色
///
public Color ColumnDateTextColor
{
get { return _ColumnDateTextColor; }
set { _ColumnDateTextColor = value; OnPropertyChanged(nameof(ColumnDateTextColor), value); }
}
private Color _ColumnHourTextColor = Color.FromArgb(102, 102, 102);
///
/// 小时文字颜色
///
public Color ColumnHourTextColor
{
get { return _ColumnHourTextColor; }
set { _ColumnHourTextColor = value; OnPropertyChanged(nameof(ColumnHourTextColor), value); }
}
private Color _HeaderBackColor = Color.FromArgb(247, 247, 247);
///
/// 标题背景颜色
///
public Color HeaderBackColor
{
get { return _HeaderBackColor; }
set { _HeaderBackColor = value; OnPropertyChanged(nameof(HeaderBackColor), value); }
}
private Color _ContentBackColor = Color.White;
///
/// 内容背景颜色
///
public Color ContentBackColor
{
get { return _ContentBackColor; }
set { _ContentBackColor = value; OnPropertyChanged(nameof(ContentBackColor), value); }
}
private Color _CurrentTimeLineColor = Color.Red;
///
/// 当前时间线颜色
///
public Color CurrentTimeLineColor
{
get { return _CurrentTimeLineColor; }
set { _CurrentTimeLineColor = value; OnPropertyChanged(nameof(CurrentTimeLineColor), value); }
}
private Color _ItemTextColor = Color.FromArgb(51, 51, 51);
///
/// 项文字颜色
///
public Color ItemTextColor
{
get { return _ItemTextColor; }
set { _ItemTextColor = value; OnPropertyChanged(nameof(ItemTextColor), value); }
}
private Color _ItemBackColor = Color.FromArgb(190, 190, 190);
///
/// 项背景颜色
///
public Color ItemBackColor
{
get { return _ItemBackColor; }
set { _ItemBackColor = value; OnPropertyChanged(nameof(ItemBackColor), value); }
}
private Color _ItemBorderColor = Color.FromArgb(18, 170, 11);
///
/// 项边框颜色
///
public Color ItemBorderColor
{
get { return _ItemBorderColor; }
set { _ItemBorderColor = value; OnPropertyChanged(nameof(ItemBorderColor), value); }
}
private Color _ItemStartFlagColor = Color.Red;
///
/// 项首标志颜色
///
public Color ItemStartFlagColor
{
get { return _ItemStartFlagColor; }
set { _ItemStartFlagColor = value; OnPropertyChanged(nameof(ItemStartFlagColor), value); }
}
private Color _ItemSubRangeBackColor = Color.FromArgb(153, 201, 255);
///
/// 项时间范围背景颜色
///
public Color ItemSubRangeBackColor
{
get { return _ItemSubRangeBackColor; }
set { _ItemSubRangeBackColor = value; OnPropertyChanged(nameof(ItemSubRangeBackColor), value); }
}
private Color _ItemSelectionTextColor = Color.FromArgb(18, 170, 11);
///
/// 选中项文字颜色
///
public Color ItemSelectionTextColor
{
get { return _ItemSelectionTextColor; }
set { _ItemSelectionTextColor = value; OnPropertyChanged(nameof(ItemSelectionTextColor), value); }
}
private Color _ItemSelectionBackColor = Color.FromArgb(229, 249, 229);
///
/// 选中项背景颜色
///
public Color ItemSelectionBackColor
{
get { return _ItemSelectionBackColor; }
set { _ItemSelectionBackColor = value; OnPropertyChanged(nameof(ItemSelectionBackColor), value); }
}
private Color _ItemSelectionBorderColor = Color.FromArgb(18, 170, 11);
///
/// 选中项边框颜色
///
public Color ItemSelectionBorderColor
{
get { return _ItemSelectionBorderColor; }
set { _ItemSelectionBorderColor = value; OnPropertyChanged(nameof(ItemSelectionBorderColor), value); }
}
private Color _ItemSelectionSubRangeBackColor = Color.FromArgb(153, 201, 255);
///
/// 选中项时间范围背景颜色
///
public Color ItemSelectionSubRangeBackColor
{
get { return _ItemSelectionSubRangeBackColor; }
set { _ItemSelectionSubRangeBackColor = value; OnPropertyChanged(nameof(ItemSelectionSubRangeBackColor), value); }
}
private Color _RowHeaderTextColor = Color.FromArgb(102, 102, 102);
///
/// 行标题文字颜色
///
public Color RowHeaderTextColor
{
get { return _RowHeaderTextColor; }
set { _RowHeaderTextColor = value; OnPropertyChanged(nameof(RowHeaderTextColor), value); }
}
private Color _RowSelectionHeaderTextColor = Color.FromArgb(102, 102, 102);
///
/// 选中行标题文字颜色
///
public Color RowSelectionHeaderTextColor
{
get { return _RowSelectionHeaderTextColor; }
set { _RowSelectionHeaderTextColor = value; OnPropertyChanged(nameof(RowSelectionHeaderTextColor), value); }
}
private Color _RowSelectionBorderColor = Color.FromArgb(247, 247, 247);
///
/// 选中行边框颜色
///
public Color RowSelectionBorderColor
{
get { return _RowSelectionBorderColor; }
set { _RowSelectionBorderColor = value; OnPropertyChanged(nameof(RowSelectionBorderColor), value); }
}
private Color _RowSelectionHeaderBackColor = Color.FromArgb(247, 247, 247);
///
/// 选中行标题背景颜色
///
public Color RowSelectionHeaderBackColor
{
get { return _RowSelectionHeaderBackColor; }
set { _RowSelectionHeaderBackColor = value; OnPropertyChanged(nameof(RowSelectionHeaderBackColor), value); }
}
private Color _RowSelectionContentBackColor = Color.FromArgb(247, 247, 247);
///
/// 选中行内容背景颜色
///
public Color RowSelectionContentBackColor
{
get { return _RowSelectionContentBackColor; }
set { _RowSelectionContentBackColor = value; OnPropertyChanged(nameof(RowSelectionContentBackColor), value); }
}
private Color _TooltipTextColor = Color.FromArgb(237, 237, 237);
///
/// 提示文字颜色
///
public Color TooltipTextColor
{
get { return _TooltipTextColor; }
set { _TooltipTextColor = value; OnPropertyChanged(nameof(TooltipTextColor), value); }
}
private Color _TooltipBorderColor = Color.FromArgb(102, 0, 0, 0);
///
/// 提示边框颜色
///
public Color TooltipBorderColor
{
get { return _TooltipBorderColor; }
set { _TooltipBorderColor = value; OnPropertyChanged(nameof(TooltipBorderColor), value); }
}
private Color _TooltipBackColor = Color.FromArgb(102, 0, 0, 0);
///
/// 提示背景颜色
///
public Color TooltipBackColor
{
get { return _TooltipBackColor; }
set { _TooltipBackColor = value; OnPropertyChanged(nameof(TooltipBackColor), value); }
}
private Color _TimeRangeSelecetionBackColor = Color.FromArgb(153, 201, 255);
///
/// 选中时间范围背景颜色
///
public Color TimeRangeSelecetionBackColor
{
get { return _TimeRangeSelecetionBackColor; }
set { _TimeRangeSelecetionBackColor = value; OnPropertyChanged(nameof(TimeRangeSelecetionBackColor), value); }
}
private Color _SelectionRectangleBackColor = Color.FromArgb(80, 210, 210, 210);
///
/// 选择框背景颜色
///
public Color SelectionRectangleBackColor
{
get { return _SelectionRectangleBackColor; }
set { _SelectionRectangleBackColor = value; OnPropertyChanged(nameof(SelectionRectangleBackColor), value); }
}
private Color _ItemWarnningTextColor = Color.Red;
///
/// 项警告文字颜色
///
public Color ItemWarnningTextColor
{
get { return _ItemWarnningTextColor; }
set { _ItemWarnningTextColor = value; OnPropertyChanged(nameof(ItemWarnningTextColor), value); }
}
#endregion
#region Mouse
private float _MouseWheelSensitivity = 0.5f;
///
/// 鼠标滚轮灵敏度
///
[DefaultValue(0.5f)]
public float MouseWheelSensitivity
{
get { return _MouseWheelSensitivity; }
set { _MouseWheelSensitivity = value; OnPropertyChanged(nameof(MouseWheelSensitivity), value); }
}
#endregion
#region Size
private int _ItemHeight = 30;
///
/// 项高度
///
[DefaultValue(30)]
public int ItemHeight
{
get { return _ItemHeight; }
set { _ItemHeight = value; OnPropertyChanged(nameof(ItemHeight), value); }
}
private int _RowHeaderWidth = 150;
///
/// 行标题宽度
///
[DefaultValue(150)]
public int RowHeaderWidth
{
get { return _RowHeaderWidth; }
set { _RowHeaderWidth = value; OnPropertyChanged(nameof(RowHeaderWidth), value); }
}
private int _RowHeight = 100;
///
/// 行高
///
[DefaultValue(100)]
public int RowHeight
{
get { return _RowHeight; }
set { _RowHeight = value; OnPropertyChanged(nameof(RowHeight), value); }
}
private int _ColumnDateHeight = 30;
///
/// 日期高度
///
[DefaultValue(30)]
public int ColumnDateHeight
{
get { return _ColumnDateHeight; }
set { _ColumnDateHeight = value; OnPropertyChanged(nameof(ColumnDateHeight), value); }
}
private int _ColumnHourHeight = 30;
///
/// 小时高度
///
[DefaultValue(30)]
public int ColumnHourHeight
{
get { return _ColumnHourHeight; }
set { _ColumnHourHeight = value; OnPropertyChanged(nameof(ColumnHourHeight), value); }
}
private int _DateWidth = MinDateWidth;
///
/// 日期宽度
///
[DefaultValue(MinDateWidth)]
public int DateWidth
{
get { return _DateWidth; }
set { _DateWidth = value; OnPropertyChanged(nameof(DateWidth), value); }
}
private int _HScrollHeight = 15;
///
/// 横向滚动条高度
///
[DefaultValue(15)]
public int HScrollHeight
{
get { return _HScrollHeight; }
set { _HScrollHeight = value; OnPropertyChanged(nameof(HScrollHeight), value); }
}
private int _VScrollWidth = 15;
///
/// 纵向滚动条宽度
///
[DefaultValue(15)]
public int VScrollWidth
{
get { return _VScrollWidth; }
set { _VScrollWidth = value; OnPropertyChanged(nameof(VScrollWidth), value); }
}
private int _ItemSpacing = 2;
///
/// 项的行间距
///
[DefaultValue(2)]
public int ItemSpacing
{
get { return _ItemSpacing; }
set { _ItemSpacing = value; OnPropertyChanged(nameof(ItemSpacing), value); }
}
private int _RowSpacing = 5;
///
/// 行间距
///
[DefaultValue(5)]
public int RowSpacing
{
get { return _RowSpacing; }
set { _RowSpacing = value; OnPropertyChanged(nameof(RowSpacing), value); }
}
#endregion
#region Control
private bool _IsFixedRowHeight = false;
///
/// 是否固定行高
///
[DefaultValue(false)]
public bool IsFixedRowHeight
{
get { return _IsFixedRowHeight; }
set { _IsFixedRowHeight = value; OnPropertyChanged(nameof(IsFixedRowHeight), value); }
}
private bool _EnableEdit = false;
///
/// 启用编辑
///
[DefaultValue(false)]
public bool EnableEdit
{
get { return _EnableEdit; }
set { _EnableEdit = value; OnPropertyChanged(nameof(EnableEdit), value); }
}
private bool _AllowItemNotWrap = true;
///
/// 允许项文字换行
///
[DefaultValue(true)]
public bool AllowItemNotWrap
{
get { return _AllowItemNotWrap; }
set { _AllowItemNotWrap = value; OnPropertyChanged(nameof(AllowItemNotWrap), value); }
}
private bool _IsShowItemBorder = false;
///
/// 是否显示项边框
///
[DefaultValue(false)]
public bool IsShowItemBorder
{
get { return _IsShowItemBorder; }
set { _IsShowItemBorder = value; OnPropertyChanged(nameof(IsShowItemBorder), value); }
}
private bool _AllowHeaderNotWrap = true;
///
/// 允许行标题文字换行
///
[DefaultValue(true)]
public bool AllowHeaderNotWrap
{
get { return _AllowHeaderNotWrap; }
set { _AllowHeaderNotWrap = value; OnPropertyChanged(nameof(AllowHeaderNotWrap), value); }
}
private GanttChartViewItemBlockType _BlockType = GanttChartViewItemBlockType.TextOverBlock;
///
/// 项换行模式
///
public GanttChartViewItemBlockType BlockType
{
get { return _BlockType; }
set { _BlockType = value; OnPropertyChanged(nameof(BlockType), value); }
}
private bool _IsShowSelectionBorder = false;
///
/// 显示行选中高亮边框
///
[DefaultValue(false)]
public bool IsShowSelectionBorder
{
get { return _IsShowSelectionBorder; }
set { _IsShowSelectionBorder = value; OnPropertyChanged(nameof(IsShowSelectionBorder), value); }
}
private bool _AllowSelectRange = false;
///
/// 允许选中时间范围
///
[DefaultValue(false)]
public bool AllowSelectRange
{
get { return _AllowSelectRange; }
set { _AllowSelectRange = value; OnPropertyChanged(nameof(AllowSelectRange), value); }
}
private Func _SelectionItemSameComparator = null;
///
/// 选择项的同类项比较器
///
public Func SelectionItemSameComparator
{
get { return _SelectionItemSameComparator; }
set { _SelectionItemSameComparator = value; }
}
#endregion
#region DataSource
private DateTime _StartDate = DateTime.Today;
///
/// 开始日期
///
public DateTime StartDate
{
get { return _StartDate; }
set { _StartDate = value; OnPropertyChanged(nameof(StartDate), value); }
}
private DateTime _EndDate = DateTime.Today.AddDays(1);
///
/// 结束日期
///
public DateTime EndDate
{
get { return _EndDate; }
set { _EndDate = value; OnPropertyChanged(nameof(EndDate), value); }
}
private GanttChartCollection _Rows = new GanttChartCollection();
///
/// 行集合
///
public GanttChartCollection Rows
{
get { return _Rows; }
set { _Rows = value; OnPropertyChanged(nameof(Rows), value); }
}
private GanttChartViewRow _SelectionRow = null;
///
/// 选中的行
///
public GanttChartViewRow SelectionRow
{
get { return _SelectionRow; }
set { _SelectionRow = value; OnPropertyChanged(nameof(SelectionRow), value); }
}
private GanttChartViewItem _SelectionItem = null;
///
/// 选中的项
///
public GanttChartViewItem SelectionItem
{
get { return _SelectionItem; }
set { _SelectionItem = value; OnPropertyChanged(nameof(SelectionItem), value); }
}
private TimeRange _SelectionTimeRange = null;
///
/// 选中的时间范围
///
public TimeRange SelectionTimeRange
{
get { return _SelectionTimeRange; }
set { _SelectionTimeRange = value; OnPropertyChanged(nameof(SelectionTimeRange), value); }
}
private DateTime _DateSplitTime = DateTime.MinValue;
///
/// 日分割时间
///
public DateTime DateSplitTime
{
get { return _DateSplitTime; }
set { _DateSplitTime = value; OnPropertyChanged(nameof(DateSplitTime), value); }
}
private string _DateTimeShowText = "时间";
///
/// 时间显示文本
///
[DefaultValue("时间")]
public string DateTimeShowText
{
get { return _DateTimeShowText; }
set { _DateTimeShowText = value; OnPropertyChanged(nameof(DateTimeShowText), value); }
}
private string _RowTitleShowText = "资源";
///
/// 行头显示文本
///
[DefaultValue("资源")]
public string RowTitleShowText
{
get { return _RowTitleShowText; }
set { _RowTitleShowText = value; OnPropertyChanged(nameof(RowTitleShowText), value); }
}
#endregion
#region ReadOnly
public int ColumnHeight
{
get { return ColumnDateHeight + ColumnHourHeight; }
}
public int TotalDays
{
get
{
return (int)(EndDate.Date - StartDate.Date).TotalDays + 1;
}
}
public DateTime StartTime
{
get
{
return StartDate.Date.Add(DateSplitTime - DateSplitTime.Date);
}
}
public DateTime EndTime
{
get
{
return EndDate.Date.Add(DateSplitTime - DateSplitTime.Date);
}
}
private Size TooltipSize
{
get
{
var size = TextRenderer.MeasureText(_ShowTooltipItem.Tooltip, TooltipTextFont, Size.Empty);
size.Height = size.Height + (int)((_ShowTooltipItem.Tooltip.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length - 1) * 1.7);
return size;
}
}
private Size TooltipOuterSize
{
get
{
var size = TooltipSize;
size.Width += RowSpacing * 2;
size.Height += RowSpacing * 2;
return size;
}
}
#endregion
#region Const
private const int MinDateWidth = 3 * 48;
#endregion
}
}