Exemplo n.º 1
0
        /// <summary>
        /// キャレットの移動に合わせて選択する
        /// </summary>
        /// <param name="isSelected">選択状態にするかどうか</param>
        /// <remarks>
        /// キャレットを移動後、このメソッドを呼び出さない場合、Select()メソッドは正常に機能しません
        /// </remarks>
        void SelectWithMoveCaret(bool isSelected)
        {
            if (this.Document.CaretPostion.col < 0 || this.Document.CaretPostion.row < 0)
            {
                return;
            }

            if (this.Document.FireUpdateEvent == false)
            {
                throw new InvalidOperationException("");
            }

            int CaretPostion = this.View.GetIndexFromLayoutLine(this.Document.CaretPostion);

            SelectCollection Selections = this.View.Selections;

            if (isSelected)
            {
                this.Document.Select(this.Document.AnchorIndex, CaretPostion - this.Document.AnchorIndex);
            }
            else
            {
                this.Document.AnchorIndex = CaretPostion;
                this.Document.Select(CaretPostion, 0);
            }
        }
Exemplo n.º 2
0
        private string GetTextFromLineSelectArea(SelectCollection Selections)
        {
            Selection sel = Util.NormalizeIMaker <Selection>(Selections.First());

            string str = this.Document.ToString(sel.start, sel.length);

            return(str);
        }
Exemplo n.º 3
0
 public static void GetSelection(Controller controller, SelectCollection selectons, out TextRange sel)
 {
     if (controller.RectSelection && selectons.Count > 0)
     {
         sel.Index  = selectons[0].start;
         sel.Length = 0;
     }
     else
     {
         sel.Index  = controller.SelectionStart;
         sel.Length = controller.SelectionLength;
     }
 }
Exemplo n.º 4
0
        string GetTextFromRectangleSelectArea(SelectCollection Selections)
        {
            StringBuilder temp = new StringBuilder();

            if (Selections.First().start < Selections.Last().start)
            {
                for (int i = 0; i < this.View.Selections.Count; i++)
                {
                    Selection sel = Util.NormalizeIMaker <Selection>(Selections[i]);

                    string str = this.Document.ToString(sel.start, sel.length);
                    if (str.IndexOf(Environment.NewLine) == -1)
                    {
                        temp.AppendLine(str);
                    }
                    else
                    {
                        temp.Append(str);
                    }
                }
            }
            else
            {
                for (int i = this.View.Selections.Count - 1; i >= 0; i--)
                {
                    Selection sel = Util.NormalizeIMaker <Selection>(Selections[i]);

                    string str = this.Document.ToString(sel.start, sel.length).Replace(Document.NewLine.ToString(), Environment.NewLine);
                    if (str.IndexOf(Environment.NewLine) == -1)
                    {
                        temp.AppendLine(str);
                    }
                    else
                    {
                        temp.Append(str);
                    }
                }
            }
            return(temp.ToString());
        }
Exemplo n.º 5
0
        private void RepleaceSelectionArea(SelectCollection Selections, string value, bool updateInsertPoint = false)
        {
            if (value == null)
            {
                return;
            }

            if (this.RectSelection == false)
            {
                Selection sel = Selection.Create(this.Document.AnchorIndex, 0);
                if (Selections.Count > 0)
                {
                    sel = Util.NormalizeIMaker <Selection>(this.View.Selections.First());
                }

                this.Document.Replace(sel.start, sel.length, value);
                return;
            }

            if (this.Document.FireUpdateEvent == false)
            {
                throw new InvalidOperationException("");
            }

            int StartIndex = this.SelectionStart;

            SelectCollection newInsertPoint = new SelectCollection();

            if (this.SelectionLength == 0)
            {
                int i;

                this.Document.UndoManager.BeginUndoGroup();

                this.Document.FireUpdateEvent = false;

                string[] line = value.Split(new string[] { Document.NewLine.ToString() }, StringSplitOptions.RemoveEmptyEntries);

                TextPoint Current = this.View.GetLayoutLineFromIndex(this.SelectionStart);

                for (i = 0; i < line.Length && Current.row < this.View.LayoutLines.Count; i++, Current.row++)
                {
                    if (Current.col > this.View.LayoutLines[Current.row].Length)
                    {
                        Current.col = this.View.LayoutLines[Current.row].Length;
                    }
                    StartIndex = this.View.GetIndexFromLayoutLine(Current);
                    this.Document.Replace(StartIndex, 0, line[i]);
                    StartIndex += line[i].Length;
                }

                for (; i < line.Length; i++)
                {
                    StartIndex = this.Document.Length;
                    string str = Document.NewLine + line[i];
                    this.Document.Replace(StartIndex, 0, str);
                    StartIndex += str.Length;
                }

                this.Document.FireUpdateEvent = true;

                this.Document.UndoManager.EndUndoGroup();
            }
            else
            {
                SelectCollection temp = new SelectCollection(this.View.Selections); //コピーしないとReplaceCommandを呼び出した段階で書き換えられてしまう

                this.Document.UndoManager.BeginUndoGroup();

                this.Document.FireUpdateEvent = false;

                if (temp.First().start < temp.Last().start)
                {
                    for (int i = temp.Count - 1; i >= 0; i--)
                    {
                        Selection sel = Util.NormalizeIMaker <Selection>(temp[i]);

                        StartIndex = sel.start;

                        this.Document.Replace(sel.start, sel.length, value);

                        newInsertPoint.Add(Selection.Create(sel.start + (value.Length - sel.length) * i, 0));
                    }
                }
                else
                {
                    for (int i = 0; i < temp.Count; i++)
                    {
                        Selection sel = Util.NormalizeIMaker <Selection>(temp[i]);

                        StartIndex = sel.start;

                        this.Document.Replace(sel.start, sel.length, value);

                        newInsertPoint.Add(Selection.Create(sel.start + (value.Length - sel.length) * i, 0));
                    }
                }

                this.Document.FireUpdateEvent = true;

                this.Document.UndoManager.EndUndoGroup();
            }
            this.JumpCaret(StartIndex);
            if (updateInsertPoint && newInsertPoint.Count > 0)
            {
                this.View.Selections = newInsertPoint;
            }
        }
Exemplo n.º 6
0
        private void ReplaceBeforeSelectionArea(SelectCollection Selections, int removeLength, string insertStr)
        {
            if (removeLength == 0 && insertStr.Length == 0)
            {
                return;
            }

            if (this.RectSelection == false || this.Document.FireUpdateEvent == false)
            {
                throw new InvalidOperationException();
            }

            SelectCollection temp = this.View.Selections;
            int selectStart       = temp.First().start;
            int selectEnd         = temp.Last().start + temp.Last().length;

            //ドキュメント操作後に行うとうまくいかないので、あらかじめ取得しておく
            TextPoint start = this.View.LayoutLines.GetTextPointFromIndex(selectStart);
            TextPoint end   = this.View.LayoutLines.GetTextPointFromIndex(selectEnd);

            bool reverse = temp.First().start > temp.Last().start;

            int lineHeadIndex = this.View.LayoutLines.GetIndexFromLineNumber(this.View.LayoutLines.GetLineNumberFromIndex(selectStart));

            if (selectStart - removeLength < lineHeadIndex)
            {
                return;
            }

            this.Document.UndoManager.BeginUndoGroup();
            this.Document.FireUpdateEvent = false;

            if (reverse)
            {
                for (int i = 0; i < temp.Count; i++)
                {
                    this.ReplaceBeforeSelection(temp[i], removeLength, insertStr);
                }
            }
            else
            {
                for (int i = temp.Count - 1; i >= 0; i--)
                {
                    this.ReplaceBeforeSelection(temp[i], removeLength, insertStr);
                }
            }

            this.Document.FireUpdateEvent = true;
            this.Document.UndoManager.EndUndoGroup();

            int delta = insertStr.Length - removeLength;

            start.col += delta;
            end.col   += delta;

            if (reverse)
            {
                this.JumpCaret(start.row, start.col);
            }
            else
            {
                this.JumpCaret(end.row, end.col);
            }

            this.Document.Select(start, 0, end.row - start.row);
        }