Пример #1
0
        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);
            }
        }
Пример #2
0
        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;
            }

        }
Пример #4
0
 private void RebuildParsedTree()
 {
     tvParsedPoints.Nodes.Clear();
     SetNotes(ParsedPoints);
     AspectManager.WorkingAspect = ParsedPoints;
     tvAdapter = new TreeViewAdapter(AspectManager, tvParsedPoints);
     tvAdapter.RebuildTree();
 }
Пример #5
0
        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);
        }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <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;
            }
        }
Пример #8
0
 public fmAddPoint(TreeViewAdapter Adapter)
 {
     InitializeComponent();
     this.Adapter = Adapter;
 }
Пример #9
0
        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);
        }
Пример #10
0
 /// <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;
 }
Пример #12
0
 public fmAddPoint(TreeViewAdapter Adapter)
 {
     InitializeComponent();
     this.Adapter = Adapter;
 }