public IEntity2ControlInterface GetNearestTopEntity() { if (LastClick.column == -1 || LastClick.level == -1 || table.Columns[LastClick.column].Entities.Count == 0) { return(null); } IEntity2ControlInterface result = table.Columns[LastClick.column].Entities .OrderByDescending(e => e.BottomLevel) .Where(e => e.BottomLevel <= LastClick.level) .FirstOrDefault(); return(result); }
/// <summary> /// Отрисовать сущность в виде прямоугольника со сглаженными сторонами и текстом внутри. /// Многова-то вызовов ScaleToControl. Надо будет обкумекать, как это порешать. Например, предрассчёт сократит вызовы с 4х до 2х. /// </summary> /// <param name="g"></param> /// <param name="entity">Сущность для отрисовки.</param> /// <param name="leftside">Левый край отрисовки сущности.</param> /// <param name="width">Ширина отрисовки сущности.</param> void PaintEntity(Graphics g, IEntity2ControlInterface entity, int leftside, int width) { //нарисуем сглаженный прямоугольник Rectangle entRect = new Rectangle(leftside, tableTop + ScaleLevelsToControl(entity.TopLevel), width, ScaleLevelsToControl(entity.BottomLevel) - ScaleLevelsToControl(entity.TopLevel)); GraphicsPath entShape = GetBarShape(entRect, 10); //10 - магическое число, смотрится хорошо g.FillPath(Brushes.LightYellow, entShape); g.DrawPath(new Pen(Brushes.DarkGreen, 2f), entShape); //напишем в нём текст Font drawFont = new Font("Arial", 10); SolidBrush drawBrush = new SolidBrush(Color.Black); RectangleF strRect = new RectangleF((float)entRect.X + 2f, (float)entRect.Y + 2f, entRect.Width - 4f, entRect.Height - 4f); StringFormat format = new StringFormat(StringFormatFlags.LineLimit | StringFormatFlags.NoWrap); format.Alignment = StringAlignment.Center; g.DrawString(entity.StringToShow, drawFont, drawBrush, strRect, format); }
private void MouseClickHandler(object sender, MouseEventArgs e) { LastClick.column = GetAbsoluteColumnNumberOfClick(e.Location); LastClick.level = GetVerticalValueOfClick(e.Location); if (e.Button == MouseButtons.Right) { //покажем подсказку по этому месту IEntity2ControlInterface clicked = GetEntityOnClick(); if (clicked != null) { if (tt == null) { tt = new ToolTip(); tt.Active = true; tt.InitialDelay = 10; } tt.Show(clicked.StringToShow, this); } } }
public bool IsIntersectWith(IEntity2ControlInterface second) { throw new NotImplementedException(); }