public AspectWindowPane(IDEInterop ide) { try { this.ide = ide; KeyboardShortcutHelper.control = this; //Hardcoded language Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru"); InitializeComponent(); Adapter = new AspectCore.TreeViewAdapter(Manager, tvAspects); fmSelectPoint = new FmSelectPoint(ide, treeManager); SynchronizeUndoButtons(); if (treeManager.GetParsersCount() == 0) { GlobalData.traceAction(Strings.NoParsers); } GlobalData.traceAction("Загрузка плагина завершена"); GlobalData.traceAction("Версия .net: " + System.Environment.Version); GlobalData.traceAction(System.Environment.Is64BitProcess ? "64-разрядный процесс" : "32-разрядный процесс"); //костыль tvAspects.Scrollable = true; } catch (Exception exc) { ExceptionInfoHelper.ShowInfo(exc); } }
public AspectWindowPane(IDEInterop ide) { try { this.ide = ide; KeyboardShortcutHelper.control = this; //Hardcoded language Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru"); InitializeComponent(); Adapter = new AspectCore.TreeViewAdapter(Manager, tvAspects); fmSelectPoint = new FmSelectPoint(ide, treeManager); SynchronizeUndoButtons(); if (treeManager.GetParsersCount() == 0) GlobalData.traceAction(Strings.NoParsers); GlobalData.traceAction("Загрузка плагина завершена"); GlobalData.traceAction("Версия .net: " + System.Environment.Version); GlobalData.traceAction(System.Environment.Is64BitProcess ? "64-разрядный процесс" : "32-разрядный процесс"); //костыль tvAspects.Scrollable = true; } catch (Exception exc) { ExceptionInfoHelper.ShowInfo(exc); } }
/// <summary> /// Вычисляет место для вставки узла при перетаскивании /// </summary> /// <param name="tv">Дерево</param> /// <param name="x">Экранные координаты курсора</param> /// <param name="y">Экранные координаты курсора</param> /// <param name="NewParent">Узел, являющийся новым родителем</param> /// <param name="NewPos">Позиция среди подузлов этого родителя</param> public static void GetPositionToInsert(TreeView tv, TreeViewAdapter tva, int x, int y, out TreeNode NewParent, out int NewPos) { Point pt = tv.PointToClient(new Point(x, y)); TreeNode DestinationNode = tv.GetNodeAt(pt); if (DestinationNode == null) { NewParent = null; NewPos = tv.Nodes.Count; return; } int kind; PointOfInterest pti = tva.GetPointByNode(DestinationNode); bool NestingAllowed = pti != null; int border = DestinationNode.Bounds.Height / 4; if (pt.Y <= (DestinationNode.Bounds.Top + border)) kind = -1; //верхняя четверть - перед узлом else if (pt.Y >= (DestinationNode.Bounds.Bottom - border)) { if (!DestinationNode.IsExpanded) kind = 1; //нижняя четверть неразвернутого узла - после узла else kind = 0; //нижняя четверть развернутого узла - внутрь } else kind = 0; //Иначе - внутрь if (kind == 0 && ! NestingAllowed) if (pt.Y <= (DestinationNode.Bounds.Top + 2*border)) kind = -1; //если внутрь нельзя и верхняя половина - перед узлом else kind = 1; //Внутрь нельзя и нижняя половина - после узла if (kind == -1) { //Перед узлом NewParent = DestinationNode.Parent; if (NewParent == null) NewPos = tv.Nodes.IndexOf(DestinationNode); else NewPos = DestinationNode.Parent.Nodes.IndexOf(DestinationNode); } else if (kind == 1) { //После узла NewParent = DestinationNode.Parent; if (NewParent == null) NewPos = tv.Nodes.IndexOf(DestinationNode) + 1; else NewPos = DestinationNode.Parent.Nodes.IndexOf(DestinationNode) + 1; } else { //Внутрь узла NewParent = DestinationNode; NewPos = DestinationNode.Nodes.Count; } }
private void RebuildParsedTree() { tvParsedPoints.Nodes.Clear(); SetNotes(ParsedPoints); AspectManager.WorkingAspect = ParsedPoints; tvAdapter = new TreeViewAdapter(AspectManager, tvParsedPoints); tvAdapter.RebuildTree(); }
public static void AddPoint(IDEInterop ide, TreeManager treeManager, AspectManager Manager, TreeViewAdapter Adapter, TreeNode NewParent, Action Callback) { if (ide.GetCurrentDocumentFileName() == "") return; string Text = ide.GetCurrentLine().Trim(); if (Text == "") return; List<PointOfInterest> points = FindPointUnderCursor(ide, treeManager); if (points != null) foreach (PointOfInterest pt in points) { pt.FileName = Manager.GetRelativePath(pt.FileName); pt.Text = Text; } ShowPointDialog(Adapter, points, NewParent, true, Callback); }
/// <summary> /// Возвращает номер курсора, который нужно показать в данной точке /// </summary> /// <param name="tv">TreeView, надо которым перемещается узел</param> /// <param name="node">Перемещаемый узел</param> /// <param name="x">Координаты курсора</param> /// <param name="y">Координаты курсора</param> /// <returns>-1 - обычный курсор, перемещать в эту точку нельзя /// 0 - курсор, указывающий на добавление нового уровня /// 1 - курсор, указывающий на добавление узла на том же уровне</returns> public static int GetCursorKind(TreeView tv, TreeViewAdapter tva, TreeNode node, int x, int y) { TreeNode Dst; int pos; CursorHelper.GetPositionToInsert(tv, tva, x, y, out Dst, out pos); if (!CursorHelper.NestingAllowed(node, Dst) ||// нельзя перемещать узел в своего же потомка (Dst == node.Parent && (node.Index == pos || node.Index == pos - 1)) // не надо двигать, если положение и так совпадет ) { return(-1); } if (Dst != null && Dst == tv.GetNodeAt(tv.PointToClient(new Point(x, y)))) { return(0); } else { return(1); } }
/// <summary> /// Вычисляет место для вставки узла при перетаскивании /// </summary> /// <param name="tv">Дерево</param> /// <param name="x">Экранные координаты курсора</param> /// <param name="y">Экранные координаты курсора</param> /// <param name="NewParent">Узел, являющийся новым родителем</param> /// <param name="NewPos">Позиция среди подузлов этого родителя</param> public static void GetPositionToInsert(TreeView tv, TreeViewAdapter tva, int x, int y, out TreeNode NewParent, out int NewPos) { Point pt = tv.PointToClient(new Point(x, y)); TreeNode DestinationNode = tv.GetNodeAt(pt); if (DestinationNode == null) { NewParent = null; NewPos = tv.Nodes.Count; return; } int kind; PointOfInterest pti = tva.GetPointByNode(DestinationNode); bool NestingAllowed = pti != null; int border = DestinationNode.Bounds.Height / 4; if (pt.Y <= (DestinationNode.Bounds.Top + border)) { kind = -1; //верхняя четверть - перед узлом } else if (pt.Y >= (DestinationNode.Bounds.Bottom - border)) { if (!DestinationNode.IsExpanded) { kind = 1; //нижняя четверть неразвернутого узла - после узла } else { kind = 0; //нижняя четверть развернутого узла - внутрь } } else { kind = 0; //Иначе - внутрь } if (kind == 0 && !NestingAllowed) { if (pt.Y <= (DestinationNode.Bounds.Top + 2 * border)) { kind = -1; //если внутрь нельзя и верхняя половина - перед узлом } else { kind = 1; //Внутрь нельзя и нижняя половина - после узла } } if (kind == -1) { //Перед узлом NewParent = DestinationNode.Parent; if (NewParent == null) { NewPos = tv.Nodes.IndexOf(DestinationNode); } else { NewPos = DestinationNode.Parent.Nodes.IndexOf(DestinationNode); } } else if (kind == 1) { //После узла NewParent = DestinationNode.Parent; if (NewParent == null) { NewPos = tv.Nodes.IndexOf(DestinationNode) + 1; } else { NewPos = DestinationNode.Parent.Nodes.IndexOf(DestinationNode) + 1; } } else { //Внутрь узла NewParent = DestinationNode; NewPos = DestinationNode.Nodes.Count; } }
public fmAddPoint(TreeViewAdapter Adapter) { InitializeComponent(); this.Adapter = Adapter; }
public static void EditPointAnchor(IDEInterop ide, TreeManager treeManager, AspectManager Manager, TreeViewAdapter Adapter, TreeNode Node, Action Callback) { if (ide.GetCurrentDocumentFileName() == "") return; string Text = ide.GetCurrentLine().Trim(); if (Text == "") return; List<PointOfInterest> points = FindPointUnderCursor(ide, treeManager); PointOfInterest OriginalPoint = Adapter.GetPointByNode(Node); if (points != null) foreach (PointOfInterest pt in points) { pt.FileName = Manager.GetRelativePath(pt.FileName); pt.Title = OriginalPoint.Title; pt.Note = OriginalPoint.Note; pt.Text = Text; } ShowPointDialog(Adapter, points, Node, false, Callback); }
/// <summary> /// Показать диалог добавления привязки к точке /// </summary> /// <param name="point"></param> /// <param name="td"></param> /// <returns></returns> private static void ShowPointDialog(TreeViewAdapter Adapter, List<PointOfInterest> point, TreeNode Node, bool IsNewNode, Action Callback) { fmAddPoint fm = new fmAddPoint(Adapter); fm.SyncronizeControlsWithPoint(point, Node, IsNewNode, Callback); fm.Show(); }
/// <summary> /// Возвращает номер курсора, который нужно показать в данной точке /// </summary> /// <param name="tv">TreeView, надо которым перемещается узел</param> /// <param name="node">Перемещаемый узел</param> /// <param name="x">Координаты курсора</param> /// <param name="y">Координаты курсора</param> /// <returns>-1 - обычный курсор, перемещать в эту точку нельзя /// 0 - курсор, указывающий на добавление нового уровня /// 1 - курсор, указывающий на добавление узла на том же уровне</returns> public static int GetCursorKind(TreeView tv, TreeViewAdapter tva, TreeNode node, int x, int y) { TreeNode Dst; int pos; CursorHelper.GetPositionToInsert(tv, tva, x, y, out Dst, out pos); if (!CursorHelper.NestingAllowed(node, Dst)// нельзя перемещать узел в своего же потомка || (Dst == node.Parent && (node.Index == pos || node.Index == pos - 1))// не надо двигать, если положение и так совпадет ) return -1; if (Dst != null && Dst == tv.GetNodeAt(tv.PointToClient(new Point(x, y)))) return 0; else return 1; }