OSDN Git Service

ファイルを分割した
authortest <test@yahoo.co.jp>
Sat, 2 Jan 2021 11:01:35 +0000 (20:01 +0900)
committertest <test@yahoo.co.jp>
Sat, 2 Jan 2021 11:01:35 +0000 (20:01 +0900)
Core/Automaion/FooTextBoxAutomationPeer.cs
Core/Automaion/FooTextBoxRangeProvider.cs [new file with mode: 0644]
Core/Core.projitems
UWP/FooEditEngine.UWP/FooEditEngine.UWP.csproj

index 7ff5095..71c765e 100644 (file)
@@ -273,337 +273,5 @@ namespace FooEditEngine
         }
     }
 
-    /// <summary>
-    /// A minimal implementation of ITextRangeProvider, used by CustomControl2AutomationPeer
-    /// A real implementation is beyond the scope of this sample
-    /// </summary>
-    sealed class FooTextBoxRangeProvider : ITextRangeProvider
-    {
-        private FooTextBox textbox;
-        private FooTextBoxAutomationPeer _peer;
-        private int start, end;
-
-        public FooTextBoxRangeProvider(FooTextBox textbox, FooTextBoxAutomationPeer peer)
-            : this(textbox,0,textbox.Document.Length,peer)
-        {
-        }
-        public FooTextBoxRangeProvider(FooTextBox textbox, int start, int length, FooTextBoxAutomationPeer peer)
-        {
-            this.textbox = textbox;
-            this.start = start;
-            this.end = start + length;
-            _peer = peer;
-        }
-
-        public void AddToSelection()
-        {
-            throw new InvalidOperationException();
-        }
-
-        public ITextRangeProvider Clone()
-        {
-            return new FooTextBoxRangeProvider(this.textbox,this.start,this.end - this.start, _peer);
-        }
-
-        public bool Compare(ITextRangeProvider o)
-        {
-            FooTextBoxRangeProvider other = o as FooTextBoxRangeProvider;
-            if (other == null)
-                throw new ArgumentNullException("null以外の値を指定してください");
-            if (this.start == other.start && this.end == other.end)
-                return true;
-            else
-                return false;
-        }
-
-        public int CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
-        {
-            FooTextBoxRangeProvider other = targetRange as FooTextBoxRangeProvider;
-            
-            if (other == null)
-                throw new ArgumentException("");
-
-            if (endpoint == TextPatternRangeEndpoint.Start)
-            {
-                if (targetEndpoint == TextPatternRangeEndpoint.Start)
-                    return this.Compare(this.start,other.start);
-                if(targetEndpoint == TextPatternRangeEndpoint.End)
-                    return this.Compare(this.start,other.end);
-            }
-            if (endpoint == TextPatternRangeEndpoint.End)
-            {
-                if (targetEndpoint == TextPatternRangeEndpoint.Start)
-                    return this.Compare(this.start, other.end);
-                if (targetEndpoint == TextPatternRangeEndpoint.End)
-                    return this.Compare(this.end, other.end);
-            }
-            throw new ArgumentException("endpointに未知の値が指定されました");
-        }
-
-        int Compare(int self, int other)
-        {
-            if (self < other)
-                return -1;
-            else if (self > other)
-                return 1;
-            else
-                return 0;
-        }
-
-        public void ExpandToEnclosingUnit(TextUnit unit)
-        {
-            Controller ctrl = this.textbox.Controller;
-            Document doc = this.textbox.Document;
-            if (unit == TextUnit.Character)
-            {
-                return;
-            }
-            if (unit == TextUnit.Format || unit == TextUnit.Word)
-            {
-                var t = doc.GetSepartor(this.start, (c) => Util.IsWordSeparator(c));
-                if (t == null)
-                    this.start = this.end = 0;
-                else
-                {
-                    this.start = t.Item1;
-                    this.end = t.Item2;
-                }
-                return;
-            }
-            if (unit == TextUnit.Line || unit == TextUnit.Paragraph)
-            {
-                var t = doc.GetSepartor(this.start, (c) => c == Document.NewLine);
-                if (t == null)
-                    this.start = this.end = 0;
-                else
-                {
-                    this.start = t.Item1;
-                    this.end = t.Item2;
-                }
-                return;
-            }
-            if (unit == TextUnit.Page || unit == TextUnit.Document)
-            {
-                this.start = 0;
-                this.end = this.textbox.Document.Length;
-                return;
-            }
-            throw new NotImplementedException();
-        }
-
-        public ITextRangeProvider FindAttribute(int attribute, Object value, bool backward)
-        {
-            return null;
-        }
-
-        public ITextRangeProvider FindText(String text, bool backward, bool ignoreCase)
-        {
-            if (backward)
-                throw new NotImplementedException();
-            textbox.Document.SetFindParam(text, false, ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None);
-            IEnumerator<SearchResult> it = textbox.Document.Find();
-            if (it.MoveNext())
-            {
-                SearchResult sr = it.Current;
-                return new FooTextBoxRangeProvider(this.textbox, sr.Start, sr.End - sr.Start + 1, _peer);
-            }
-            return null;
-        }
-
-        public Object GetAttributeValue(int attribute)
-        {
-            return null;
-        }
-
-#if METRO || WINDOWS_UWP
-        public void GetBoundingRectangles(out double[] rectangles)
-#endif
-#if WPF
-        public double[] GetBoundingRectangles()
-#endif
-        {
-            LineToIndexTable layoutLineCollection = this.textbox.LayoutLineCollection;
-            TextPoint topLeft = layoutLineCollection.GetTextPointFromIndex(this.start);
-            TextPoint bottomRight = this.textbox.LayoutLineCollection.GetTextPointFromIndex(IsNewLine(this.end) ? this.end - 1 : this.end);
-
-
-#if METRO || WINDOWS_UWP
-            float dpi;
-            Util.GetDpi(out dpi,out dpi);
-            double scale = dpi / 96;
-            Point topLeftPos = this.textbox.GetPostionFromTextPoint(topLeft);
-            Point bottomRightPos = this.textbox.GetPostionFromTextPoint(bottomRight);
-            topLeftPos = Util.GetPointInWindow(topLeftPos.Scale(scale),textbox);
-            bottomRightPos = Util.GetPointInWindow(bottomRightPos.Scale(scale),textbox);
-#endif
-#if WPF
-            Point topLeftPos = this.textbox.GetPostionFromTextPoint(topLeft);
-            Point bottomRightPos = this.textbox.GetPostionFromTextPoint(bottomRight);
-            topLeftPos = this.textbox.PointToScreen(topLeftPos);
-            bottomRightPos = this.textbox.PointToScreen(bottomRightPos);
-#endif
-
-            double width = bottomRightPos.X - topLeftPos.X;
-            if (width == 0)
-                width = 1;
-            Rectangle rect = new Rectangle(topLeftPos.X, topLeftPos.Y,
-                 width,
-                 bottomRightPos.Y - topLeftPos.Y + layoutLineCollection.GetLineHeight(bottomRight));
-
-#if METRO || WINDOWS_UWP
-            rectangles = new double[4]{
-                rect.X,
-                rect.Y,
-                rect.Width,
-                rect.Height
-            };
-#endif
-#if WPF
-            return new double[4]{
-                rect.X,
-                rect.Y,
-                rect.Width,
-                rect.Height
-            };
-#endif
-        }
-
-        bool IsNewLine(int index)
-        {
-            if (this.textbox.Document.Length > 0)
-                return this.textbox.Document[index == 0 ? 0 : index - 1] == Document.NewLine;
-            else
-                return false;
-        }
-
-        public IRawElementProviderSimple[] GetChildren()
-        {
-            return new IRawElementProviderSimple[0];
-        }
-
-        public IRawElementProviderSimple GetEnclosingElement()
-        {
-            return _peer.GetRawElementProviderSimple();
-        }
-
-        public String GetText(int maxLength)
-        {
-            if (this.textbox.Document.Length == 0)
-                return "";
-            int length = this.end - this.start;
-            if (maxLength < 0)
-                return this.textbox.Document.ToString(this.start, length);
-            else
-                return this.textbox.Document.ToString(this.start, (int)Math.Min(length, maxLength));
-        }
-
-        public int Move(TextUnit unit, int count)
-        {
-            if (count == 0)
-                return 0;
-            Controller ctrl = textbox.Controller;
-            LineToIndexTable layoutLine = textbox.LayoutLineCollection;
-            int moved = this.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, unit, count);
-            this.ExpandToEnclosingUnit(unit);
-            return moved;
-        }
-
-        public void MoveEndpointByRange(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
-        {
-            FooTextBoxRangeProvider other = targetRange as FooTextBoxRangeProvider;
-
-            if (other == null)
-                throw new ArgumentException("");
-
-            if (endpoint == TextPatternRangeEndpoint.Start)
-            {
-                if (targetEndpoint == TextPatternRangeEndpoint.Start)
-                    this.start = other.start;
-                if (targetEndpoint == TextPatternRangeEndpoint.End)
-                    this.start = other.end;
-                if (this.start > this.end)
-                    this.end = this.start;
-                return;
-            }
-            if (endpoint == TextPatternRangeEndpoint.End)
-            {
-                if (targetEndpoint == TextPatternRangeEndpoint.Start)
-                    this.end = other.start;
-                if (targetEndpoint == TextPatternRangeEndpoint.End)
-                    this.end = other.end;
-                return;
-            }
-            throw new ArgumentException("endpointに未知の値が指定されました");
-        }
-
-        public int MoveEndpointByUnit(TextPatternRangeEndpoint endpoint, TextUnit unit, int count)
-        {
-            if (count == 0)
-                return 0;
-
-            int moved = 0;
-            TextPoint caret = TextPoint.Null,newCaret = TextPoint.Null;
-            Controller ctrl = textbox.Controller;
-            LineToIndexTable layoutLine = textbox.LayoutLineCollection;
-
-            if (endpoint == TextPatternRangeEndpoint.Start)
-                caret = layoutLine.GetTextPointFromIndex(this.start);
-            else if (endpoint == TextPatternRangeEndpoint.End)
-                caret = layoutLine.GetTextPointFromIndex(this.end);
-
-            switch(unit)
-            {
-                case TextUnit.Character:
-                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Character, out moved);
-                    break;
-                case TextUnit.Format:
-                case TextUnit.Word:
-                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Word, out moved);
-                    break;
-                case TextUnit.Line:
-                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Line, out moved);
-                    break;
-                case TextUnit.Paragraph:
-                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Paragraph, out moved);
-                    break;
-                case TextUnit.Page:
-                case TextUnit.Document:
-                    this.start = 0;
-                    this.end = this.textbox.Document.Length - 1;
-                    moved = 1;
-                    break;
-            }
-
-            if (endpoint == TextPatternRangeEndpoint.Start)
-            {
-                this.start = layoutLine.GetIndexFromTextPoint(newCaret);
-                if (this.start > this.end)
-                    this.end = this.start;
-            }
-            else if (endpoint == TextPatternRangeEndpoint.End)
-            {
-                this.end = layoutLine.GetIndexFromTextPoint(newCaret);
-                if (this.end < this.start)
-                    this.start = this.end;
-            }
-            return moved;
-        }
-
-        public void RemoveFromSelection()
-        {
-            throw new InvalidOperationException();
-        }
-
-        public void ScrollIntoView(bool alignToTop)
-        {
-            int row = this.textbox.LayoutLineCollection.GetLineNumberFromIndex(alignToTop ? this.start : this.end);
-            this.textbox.ScrollIntoView(row, alignToTop);
-        }
-
-        public void Select()
-        {
-            this.textbox.Select(this.start, this.end - this.start + 1);
-        }
-    }
 #endif
 }
diff --git a/Core/Automaion/FooTextBoxRangeProvider.cs b/Core/Automaion/FooTextBoxRangeProvider.cs
new file mode 100644 (file)
index 0000000..8fcb2e5
--- /dev/null
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 2013 FooProject
+ * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+#if METRO || WINDOWS_UWP
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Media;
+using Windows.UI.Xaml.Automation;
+using Windows.UI.Xaml.Automation.Peers;
+using Windows.UI.Xaml.Automation.Provider;
+using Windows.UI.Xaml.Automation.Text;
+#if METRO
+using FooEditEngine.Metro;
+#else
+using FooEditEngine.UWP;
+#endif
+#endif
+#if WPF
+using System.Windows.Automation;
+using System.Windows.Automation.Peers;
+using System.Windows.Automation.Provider;
+using System.Windows.Automation.Text;
+using FooEditEngine.WPF;
+#endif
+
+namespace FooEditEngine
+{
+#if ENABLE_AUTMATION
+    /// <summary>
+    /// A minimal implementation of ITextRangeProvider, used by CustomControl2AutomationPeer
+    /// A real implementation is beyond the scope of this sample
+    /// </summary>
+    sealed class FooTextBoxRangeProvider : ITextRangeProvider
+    {
+        private FooTextBox textbox;
+        private FooTextBoxAutomationPeer _peer;
+        private int start, end;
+
+        public FooTextBoxRangeProvider(FooTextBox textbox, FooTextBoxAutomationPeer peer)
+            : this(textbox, 0, textbox.Document.Length, peer)
+        {
+        }
+        public FooTextBoxRangeProvider(FooTextBox textbox, int start, int length, FooTextBoxAutomationPeer peer)
+        {
+            this.textbox = textbox;
+            this.start = start;
+            this.end = start + length;
+            _peer = peer;
+        }
+
+        public void AddToSelection()
+        {
+            throw new InvalidOperationException();
+        }
+
+        public ITextRangeProvider Clone()
+        {
+            return new FooTextBoxRangeProvider(this.textbox, this.start, this.end - this.start, _peer);
+        }
+
+        public bool Compare(ITextRangeProvider o)
+        {
+            FooTextBoxRangeProvider other = o as FooTextBoxRangeProvider;
+            if (other == null)
+                throw new ArgumentNullException("null以外の値を指定してください");
+            if (this.start == other.start && this.end == other.end)
+                return true;
+            else
+                return false;
+        }
+
+        public int CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
+        {
+            FooTextBoxRangeProvider other = targetRange as FooTextBoxRangeProvider;
+
+            if (other == null)
+                throw new ArgumentException("");
+
+            if (endpoint == TextPatternRangeEndpoint.Start)
+            {
+                if (targetEndpoint == TextPatternRangeEndpoint.Start)
+                    return this.Compare(this.start, other.start);
+                if (targetEndpoint == TextPatternRangeEndpoint.End)
+                    return this.Compare(this.start, other.end);
+            }
+            if (endpoint == TextPatternRangeEndpoint.End)
+            {
+                if (targetEndpoint == TextPatternRangeEndpoint.Start)
+                    return this.Compare(this.start, other.end);
+                if (targetEndpoint == TextPatternRangeEndpoint.End)
+                    return this.Compare(this.end, other.end);
+            }
+            throw new ArgumentException("endpointに未知の値が指定されました");
+        }
+
+        int Compare(int self, int other)
+        {
+            if (self < other)
+                return -1;
+            else if (self > other)
+                return 1;
+            else
+                return 0;
+        }
+
+        public void ExpandToEnclosingUnit(TextUnit unit)
+        {
+            Controller ctrl = this.textbox.Controller;
+            Document doc = this.textbox.Document;
+            if (unit == TextUnit.Character)
+            {
+                return;
+            }
+            if (unit == TextUnit.Format || unit == TextUnit.Word)
+            {
+                var t = doc.GetSepartor(this.start, (c) => Util.IsWordSeparator(c));
+                if (t == null)
+                    this.start = this.end = 0;
+                else
+                {
+                    this.start = t.Item1;
+                    this.end = t.Item2;
+                }
+                return;
+            }
+            if (unit == TextUnit.Line || unit == TextUnit.Paragraph)
+            {
+                var t = doc.GetSepartor(this.start, (c) => c == Document.NewLine);
+                if (t == null)
+                    this.start = this.end = 0;
+                else
+                {
+                    this.start = t.Item1;
+                    this.end = t.Item2;
+                }
+                return;
+            }
+            if (unit == TextUnit.Page || unit == TextUnit.Document)
+            {
+                this.start = 0;
+                this.end = this.textbox.Document.Length;
+                return;
+            }
+            throw new NotImplementedException();
+        }
+
+        public ITextRangeProvider FindAttribute(int attribute, Object value, bool backward)
+        {
+            return null;
+        }
+
+        public ITextRangeProvider FindText(String text, bool backward, bool ignoreCase)
+        {
+            if (backward)
+                throw new NotImplementedException();
+            textbox.Document.SetFindParam(text, false, ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None);
+            IEnumerator<SearchResult> it = textbox.Document.Find();
+            if (it.MoveNext())
+            {
+                SearchResult sr = it.Current;
+                return new FooTextBoxRangeProvider(this.textbox, sr.Start, sr.End - sr.Start + 1, _peer);
+            }
+            return null;
+        }
+
+        public Object GetAttributeValue(int attribute)
+        {
+            return null;
+        }
+
+#if METRO || WINDOWS_UWP
+        public void GetBoundingRectangles(out double[] rectangles)
+#endif
+#if WPF
+        public double[] GetBoundingRectangles()
+#endif
+        {
+            LineToIndexTable layoutLineCollection = this.textbox.LayoutLineCollection;
+            TextPoint topLeft = layoutLineCollection.GetTextPointFromIndex(this.start);
+            TextPoint bottomRight = this.textbox.LayoutLineCollection.GetTextPointFromIndex(IsNewLine(this.end) ? this.end - 1 : this.end);
+
+
+#if METRO || WINDOWS_UWP
+            float dpi;
+            Util.GetDpi(out dpi, out dpi);
+            double scale = dpi / 96;
+            Point topLeftPos = this.textbox.GetPostionFromTextPoint(topLeft);
+            Point bottomRightPos = this.textbox.GetPostionFromTextPoint(bottomRight);
+            topLeftPos = Util.GetPointInWindow(topLeftPos.Scale(scale), textbox);
+            bottomRightPos = Util.GetPointInWindow(bottomRightPos.Scale(scale), textbox);
+#endif
+#if WPF
+            Point topLeftPos = this.textbox.GetPostionFromTextPoint(topLeft);
+            Point bottomRightPos = this.textbox.GetPostionFromTextPoint(bottomRight);
+            topLeftPos = this.textbox.PointToScreen(topLeftPos);
+            bottomRightPos = this.textbox.PointToScreen(bottomRightPos);
+#endif
+
+            double width = bottomRightPos.X - topLeftPos.X;
+            if (width == 0)
+                width = 1;
+            Rectangle rect = new Rectangle(topLeftPos.X, topLeftPos.Y,
+                 width,
+                 bottomRightPos.Y - topLeftPos.Y + layoutLineCollection.GetLineHeight(bottomRight));
+
+#if METRO || WINDOWS_UWP
+            rectangles = new double[4]{
+                rect.X,
+                rect.Y,
+                rect.Width,
+                rect.Height
+            };
+#endif
+#if WPF
+            return new double[4]{
+                rect.X,
+                rect.Y,
+                rect.Width,
+                rect.Height
+            };
+#endif
+        }
+
+        bool IsNewLine(int index)
+        {
+            if (this.textbox.Document.Length > 0)
+                return this.textbox.Document[index == 0 ? 0 : index - 1] == Document.NewLine;
+            else
+                return false;
+        }
+
+        public IRawElementProviderSimple[] GetChildren()
+        {
+            return new IRawElementProviderSimple[0];
+        }
+
+        public IRawElementProviderSimple GetEnclosingElement()
+        {
+            return _peer.GetRawElementProviderSimple();
+        }
+
+        public String GetText(int maxLength)
+        {
+            if (this.textbox.Document.Length == 0)
+                return "";
+            int length = this.end - this.start;
+            if (maxLength < 0)
+                return this.textbox.Document.ToString(this.start, length);
+            else
+                return this.textbox.Document.ToString(this.start, (int)Math.Min(length, maxLength));
+        }
+
+        public int Move(TextUnit unit, int count)
+        {
+            if (count == 0)
+                return 0;
+            Controller ctrl = textbox.Controller;
+            LineToIndexTable layoutLine = textbox.LayoutLineCollection;
+            int moved = this.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, unit, count);
+            this.ExpandToEnclosingUnit(unit);
+            return moved;
+        }
+
+        public void MoveEndpointByRange(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)
+        {
+            FooTextBoxRangeProvider other = targetRange as FooTextBoxRangeProvider;
+
+            if (other == null)
+                throw new ArgumentException("");
+
+            if (endpoint == TextPatternRangeEndpoint.Start)
+            {
+                if (targetEndpoint == TextPatternRangeEndpoint.Start)
+                    this.start = other.start;
+                if (targetEndpoint == TextPatternRangeEndpoint.End)
+                    this.start = other.end;
+                if (this.start > this.end)
+                    this.end = this.start;
+                return;
+            }
+            if (endpoint == TextPatternRangeEndpoint.End)
+            {
+                if (targetEndpoint == TextPatternRangeEndpoint.Start)
+                    this.end = other.start;
+                if (targetEndpoint == TextPatternRangeEndpoint.End)
+                    this.end = other.end;
+                return;
+            }
+            throw new ArgumentException("endpointに未知の値が指定されました");
+        }
+
+        public int MoveEndpointByUnit(TextPatternRangeEndpoint endpoint, TextUnit unit, int count)
+        {
+            if (count == 0)
+                return 0;
+
+            int moved = 0;
+            TextPoint caret = TextPoint.Null, newCaret = TextPoint.Null;
+            Controller ctrl = textbox.Controller;
+            LineToIndexTable layoutLine = textbox.LayoutLineCollection;
+
+            if (endpoint == TextPatternRangeEndpoint.Start)
+                caret = layoutLine.GetTextPointFromIndex(this.start);
+            else if (endpoint == TextPatternRangeEndpoint.End)
+                caret = layoutLine.GetTextPointFromIndex(this.end);
+
+            switch (unit)
+            {
+                case TextUnit.Character:
+                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Character, out moved);
+                    break;
+                case TextUnit.Format:
+                case TextUnit.Word:
+                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Word, out moved);
+                    break;
+                case TextUnit.Line:
+                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Line, out moved);
+                    break;
+                case TextUnit.Paragraph:
+                    newCaret = ctrl.GetNextCaret(caret, count, MoveFlow.Paragraph, out moved);
+                    break;
+                case TextUnit.Page:
+                case TextUnit.Document:
+                    this.start = 0;
+                    this.end = this.textbox.Document.Length - 1;
+                    moved = 1;
+                    break;
+            }
+
+            if (endpoint == TextPatternRangeEndpoint.Start)
+            {
+                this.start = layoutLine.GetIndexFromTextPoint(newCaret);
+                if (this.start > this.end)
+                    this.end = this.start;
+            }
+            else if (endpoint == TextPatternRangeEndpoint.End)
+            {
+                this.end = layoutLine.GetIndexFromTextPoint(newCaret);
+                if (this.end < this.start)
+                    this.start = this.end;
+            }
+            return moved;
+        }
+
+        public void RemoveFromSelection()
+        {
+            throw new InvalidOperationException();
+        }
+
+        public void ScrollIntoView(bool alignToTop)
+        {
+            int row = this.textbox.LayoutLineCollection.GetLineNumberFromIndex(alignToTop ? this.start : this.end);
+            this.textbox.ScrollIntoView(row, alignToTop);
+        }
+
+        public void Select()
+        {
+            this.textbox.Select(this.start, this.end - this.start + 1);
+        }
+    }
+#endif
+}
index 509ae4f..4a40cc9 100644 (file)
@@ -11,6 +11,7 @@
   <ItemGroup>
     <Compile Include="$(MSBuildThisFileDirectory)AutoCompleteBoxBase.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Automaion\FooTextBoxAutomationPeer.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Automaion\FooTextBoxRangeProvider.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)CacheManager.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)CollectionDebugView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)CompleteCollection.cs" />
index f4cebc0..547bbaa 100644 (file)
@@ -40,7 +40,7 @@
     <PlatformTarget>x86</PlatformTarget>
     <DebugSymbols>true</DebugSymbols>
     <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+    <DefineConstants>TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;ENABLE_AUTMATION</DefineConstants>
     <NoWarn>;2008</NoWarn>
     <DebugType>full</DebugType>
     <PlatformTarget>x86</PlatformTarget>
@@ -50,7 +50,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
     <PlatformTarget>x86</PlatformTarget>
     <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;ENABLE_AUTMATION</DefineConstants>
     <Optimize>true</Optimize>
     <NoWarn>;2008</NoWarn>
     <DebugType>pdbonly</DebugType>