private DataTable GetARandomTable()
        {
            DataTable dt = new DataTable(string.Format("Table{0}", tableCount));

            int nRows = r.Next(100) + 5;
            int nCols = r.Next(20) + 5;

            for (int i = 0; i < nCols; ++i)
            {
                dt.Columns.Add(new DataColumn(RangeInfo.GetAlphaLabel(i + 1)));
            }

            tableCount++;

            for (int i = 0; i < nRows; ++i)
            {
                DataRow dr = dt.NewRow();
                for (int j = 0; j < nCols; ++j)
                {
                    if (j == 0)
                    {
                        dr[j] = i + 1;
                    }
                    else
                    {
                        dr[j] = r.Next(1000);
                    }
                }
                dt.Rows.Add(dr);
            }
            dt.DefaultView.AllowNew = false;
            return(dt);
        }
        /// <summary>
        /// Execute operation
        /// </summary>
        public override void Execute()
        {
            var tb = ts.CurrentTB;
            prevText.Clear();

            ts.OnTextChanging(ref insertedText);

            tb.Selection.BeginUpdate();
            tb.BeginUpdate();
            for (int i = ranges.Count - 1; i >= 0; i--)
            {
                tb.Selection.Start = ranges[i].Start;
                tb.Selection.End = ranges[i].End;
                prevText.Add(tb.Selection.Text);
                ClearSelected(ts);
                if (insertedText != "")
                    InsertTextCommand.InsertText(insertedText, ts);
            }
            if (ranges.Count > 0)
                ts.OnTextChanged(ranges[0].Start.iLine, ranges[ranges.Count - 1].End.iLine);
            tb.EndUpdate();
            tb.Selection.EndUpdate();
            ts.NeedRecalc(new TextSource.TextSourceTextChangedEventArgs(0, 1));

            lastSel = new RangeInfo(tb.Selection);
        }
Beispiel #3
0
        private void Generate()
        {
            //create some sample data
            viewModel.NRows = viewModel.r.Next(10) + 2;
            viewModel.nCols = viewModel.r.Next(3) + 1;
            double[,] a     = new double[viewModel.nRows, viewModel.nCols];//{{1.1,2.1},{3.1,4.1}};
            for (int row = 0; row < viewModel.nRows; ++row)
            {
                for (int col = 0; col < viewModel.nCols; ++col)
                {
                    a[row, col] = ((double)viewModel.r.Next(100)) / 10;
                }
            }
            //create a ArrayCalcData object and pass it this array
            viewModel.data = new ArrayCalcData(a);

            //create an CalcEngine object using this ArrayCalcData object
            CalcEngine engine = new CalcEngine(viewModel.data);

            //Turn on dependency tracking so values set with the Set button
            //take effect immediately
            engine.UseDependencies = true;

            //call RecalculateRange so any formulas in the data can be initially computed.
            engine.RecalculateRange(RangeInfo.Cells(1, 1, viewModel.nRows + 1, viewModel.nCols + 1), viewModel.data);

            viewModel.ShowObject();
        }
        private void generateBtn_Click(object sender, RoutedEventArgs e)
        {
            //create some sample data
            this.nRows  = r.Next(1, 5) + 2;
            this.nCols  = r.Next(2, 4) + 1;
            double[,] a = new double[nRows, nCols];//{{1.1,2.1},{3.1,4.1}};
            for (int row = 0; row < nRows; ++row)
            {
                for (int col = 0; col < nCols; ++col)
                {
                    a[row, col] = ((double)r.Next(100)) / 10;
                }
            }

            //create a ArrayCalcData object and pass it this array
            this.data = new ArrayCalcData(a);

            //create an CalcEngine object using this ArrayCalcData object
            CalcEngine engine = new CalcEngine(this.data);

            //Turn on dependency tracking so values set with the Set button
            //take effect immediately
            engine.UseDependencies = true;

            //call RecalculateRange so any formulas in the data can be initially computed.
            engine.RecalculateRange(RangeInfo.Cells(1, 1, nRows + 1, nCols + 1), data);
            ShowObject();
        }
Beispiel #5
0
        public Disease(string id, byte strength, RangeInfo temperature_range, RangeInfo temperature_half_lives, RangeInfo pressure_range, RangeInfo pressure_half_lives)
            : base(id, null, null)
        {
            name    = new StringKey("STRINGS.DUPLICANTS.DISEASES." + id.ToUpper() + ".NAME");
            this.id = id;
            DiseaseVisualization.Info info = Assets.instance.DiseaseVisualization.GetInfo(id);
            overlayColour        = info.overlayColour;
            temperatureRange     = temperature_range;
            temperatureHalfLives = temperature_half_lives;
            pressureRange        = pressure_range;
            pressureHalfLives    = pressure_half_lives;
            PopulateElemGrowthInfo();
            ApplyRules();
            string str = Strings.Get("STRINGS.DUPLICANTS.DISEASES." + id.ToUpper() + ".LEGEND_HOVERTEXT").ToString();

            overlayLegendHovertext = str + DUPLICANTS.DISEASES.LEGEND_POSTAMBLE;
            Attribute attribute  = new Attribute(id + "Min", "Minimum" + id.ToString(), string.Empty, string.Empty, 0f, Attribute.Display.Normal, false, null, null);
            Attribute attribute2 = new Attribute(id + "Max", "Maximum" + id.ToString(), string.Empty, string.Empty, 1E+07f, Attribute.Display.Normal, false, null, null);

            amountDeltaAttribute = new Attribute(id + "Delta", id.ToString(), string.Empty, string.Empty, 0f, Attribute.Display.Normal, false, null, null);
            amount = new Amount(id, id + " " + DUPLICANTS.DISEASES.GERMS, id + " " + DUPLICANTS.DISEASES.GERMS, attribute, attribute2, amountDeltaAttribute, false, Units.Flat, 0.01f, true, null, null);
            Db.Get().Attributes.Add(attribute);
            Db.Get().Attributes.Add(attribute2);
            Db.Get().Attributes.Add(amountDeltaAttribute);
            cureSpeedBase           = new Attribute(id + "CureSpeed", false, Attribute.Display.Normal, false, 0f, null, null);
            cureSpeedBase.BaseValue = 1f;
            cureSpeedBase.SetFormatter(new ToPercentAttributeFormatter(1f, GameUtil.TimeSlice.None));
            Db.Get().Attributes.Add(cureSpeedBase);
        }
Beispiel #6
0
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
        {
            var cell = sheet.Cells[range.FromRow, range.FromColumn, range.ToRow, range.ToColumn];

            cell.Style.HorizontalAlignment = Align;

            base.ApplyToSheet(sheet, range, value);
        }
 public virtual void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
 {
     if (range != null)
     {
         _lastRow    = range.ToRow >= range.FromRow ? range.ToRow : range.FromRow;
         _lastColumn = range.ToColumn >= range.FromColumn ? range.ToColumn : range.FromColumn;
     }
 }
        public object GetValueRowCol(int row, int col)
        {
            object value = null;
            var    key   = RangeInfo.GetAlphaLabel(col) + row;

            this.values.TryGetValue(key, out value);
            return(value);
        }
Beispiel #9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="tb">Underlaying textbox</param>
 /// <param name="ranges">List of ranges for replace</param>
 /// <param name="insertedText">Text for inserting</param>
 public RemoveLinesCommand(TextSource ts, List <int> iLines)
     : base(ts)
 {
     //sort iLines
     iLines.Sort();
     //
     this.iLines = iLines;
     lastSel     = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
Beispiel #10
0
 public RadiationGerms()
     : base(ID, 255,
            temperature_range: new RangeInfo(0.0f, 0, float.PositiveInfinity, float.PositiveInfinity),
            temperature_half_lives: RangeInfo.Idempotent(),
            pressure_range: new RangeInfo(0.0f, 0, float.PositiveInfinity, float.PositiveInfinity),
            pressure_half_lives: RangeInfo.Idempotent())
 {
     strength = 255;
 }
Beispiel #11
0
        protected BasicRegexStateMachineActivationContextInfo(RangeInfo <T> rangeInfo)
        {
            if (rangeInfo == null)
            {
                throw new ArgumentNullException(nameof(rangeInfo));
            }

            this.rangeInfo = rangeInfo;
        }
Beispiel #12
0
 /// <summary>
 /// 调整索引。
 /// </summary>
 /// <param name="infos">索引信息列表。</param>
 /// <param name="offset">要调整的索引值。</param>
 private static void AdujstIndex <T>(List <T> infos, int offset) where T : RangeInfo
 {
     for (int i = 0; i < infos.Count; ++i)
     {
         RangeInfo info = infos[i];
         info.StartIndex += offset;
         info.EndIndex   += offset;
     }
 }
Beispiel #13
0
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
        {
            sheet.Cells[Row == 0 ? range.FromRow : Row, Column == 0 ? range.FromColumn : Column
                        , EndRow == 0 ? range.ToRow : EndRow, EndColumn == 0 ? range.ToColumn : EndColumn].Merge = true;
            sheet.Cells[Row == 0 ? range.FromRow : Row, Column == 0 ? range.FromColumn : Column
                        , EndRow == 0 ? range.ToRow : EndRow, EndColumn == 0 ? range.ToColumn : EndColumn].Value = value;

            base.ApplyToSheet(sheet, range, value);
        }
Beispiel #14
0
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
        {
            var cell = sheet.Cells[range.FromRow, range.FromColumn, range.ToRow, range.ToColumn];

            cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
            cell.Style.Fill.BackgroundColor.SetColor(Color);

            base.ApplyToSheet(sheet, range, value);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="ts">Underlaying TextSource</param>
 /// <param name="iLines">List of line indices to be removed</param>
 public RemoveLinesCommand(TextSource ts, List<int> iLines)
     : base(ts)
 {
     //sort iLines
     iLines.Sort();
     //
     this.iLines = iLines;
     lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
Beispiel #16
0
        public BasicRegexStateMachineActivationContextInfo(RangeSet <T> accreditedSet)
        {
            if (accreditedSet == null)
            {
                throw new ArgumentNullException(nameof(accreditedSet));
            }

            this.rangeInfo     = accreditedSet.RangeInfo;
            this.accreditedSet = accreditedSet;
        }
Beispiel #17
0
 private static Tuple<uint, byte[]> FindShaEntry(BinaryReader reader, byte[] hash, RangeInfo range)
 {
     foreach (Tuple<uint, byte[]> entry in IterateShas(reader, range.Start, range.End - range.Start))
     {
         if (entry.Item2.Take(hash.Length).SequenceEqual(hash))
         {
             return entry;
         }
     }
     return null;
 }
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
        {
            var cell = sheet.Cells[range.FromRow, range.FromColumn, range.ToRow, range.ToColumn];

            cell.Style.Border.Top.Style    = Top;
            cell.Style.Border.Right.Style  = Right;
            cell.Style.Border.Bottom.Style = Bottom;
            cell.Style.Border.Left.Style   = Left;

            base.ApplyToSheet(sheet, range, value);
        }
Beispiel #19
0
 public void AllValuesSingleAddress()
 {
     using (var excelPackage = new ExcelPackage())
     {
         var worksheet = excelPackage.Workbook.Worksheets.Add("sheet1");
         var rangeInfo = new RangeInfo(worksheet, new ExcelAddress("B2"));
         Assert.AreEqual(1, rangeInfo.AllValues().Count());
         Assert.IsTrue(new List <object> {
             null
         }.SequenceEqual(rangeInfo.AllValues()));
     }
 }
Beispiel #20
0
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range, object value)
        {
            string[] headers = value as string[];

            int count = StartColumn;

            foreach (var header in headers)
            {
                sheet.Cells[StartRow, count, StartRow, count].Value = header;
                count++;
            }
        }
Beispiel #21
0
        public override void ApplyToSheet(ExcelWorksheet sheet, RangeInfo range)
        {
            if (this.MarginKind == MarginKinds.Row)
            {
                range.FromRow += NumberOfCells;
            }
            else if (this.MarginKind == MarginKinds.Column)
            {
                range.FromColumn += NumberOfCells;
            }

            base.ApplyToSheet(sheet, range);
        }
        public void SetValueRowCol(object value, int row, int col)
        {
            var key = RangeInfo.GetAlphaLabel(col) + row;

            if (!values.ContainsKey(key))
            {
                values.Add(key, value);
            }
            else if (values.ContainsKey(key) && values[key] != value)
            {
                values[key] = value;
            }
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="ts">Underlaying textsource</param>
 /// <param name="ranges">List of ranges for replace</param>
 public ReplaceMultipleTextCommand(TextSource ts, List<ReplaceRange> ranges)
     : base(ts)
 {
     //sort ranges by place
     ranges.Sort((r1, r2) =>
     {
         if (r1.ReplacedRange.Start.iLine == r2.ReplacedRange.Start.iLine)
             return r1.ReplacedRange.Start.iChar.CompareTo(r2.ReplacedRange.Start.iChar);
         return r1.ReplacedRange.Start.iLine.CompareTo(r2.ReplacedRange.Start.iLine);
     });
     //
     this.ranges = ranges;
     lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
        /// <summary>
        /// Execute operation
        /// </summary>
        public override void Execute()
        {
            var tb = ts.CurrentTB;

            string temp = null;
            ts.OnTextChanging(ref temp);
            if (temp == "")
                throw new ArgumentOutOfRangeException();

            deletedText = tb.Selection.Text;
            ClearSelected(ts);
            lastSel = new RangeInfo(tb.Selection);
            ts.OnTextChanged(lastSel.Start.iLine, lastSel.Start.iLine);
        }
Beispiel #25
0
 public void AllValuesSingleRange()
 {
     using (var excelPackage = new ExcelPackage())
     {
         var worksheet = excelPackage.Workbook.Worksheets.Add("sheet1");
         worksheet.Cells["C2"].Value = "2";
         worksheet.Cells["B3"].Value = 4;
         worksheet.Cells["C4"].Value = "hey";
         var rangeInfo = new RangeInfo(worksheet, new ExcelAddress("B2:C4"));
         Assert.AreEqual(6, rangeInfo.AllValues().Count());
         Assert.IsTrue(new List <object> {
             null, "2", 4, null, null, "hey"
         }.SequenceEqual(rangeInfo.AllValues()));
     }
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="ts">Underlaying TextSource</param>
 /// <param name="ranges">List of ranges for replace</param>
 /// <param name="insertedText">Text for inserting</param>
 public ReplaceTextCommand(TextSource ts, List<Range> ranges, string insertedText)
     : base(ts)
 {
     //sort ranges by place
     ranges.Sort((r1, r2) =>
     {
         if (r1.Start.iLine == r2.Start.iLine)
             return r1.Start.iChar.CompareTo(r2.Start.iChar);
         return r1.Start.iLine.CompareTo(r2.Start.iLine);
     });
     //
     this.ranges = ranges;
     this.insertedText = insertedText;
     lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
Beispiel #27
0
 void _server_OnRequestSendingBody(RequestInfo request, ResponseInfo response, System.Net.Sockets.Socket requestSocket)
 {
     if (response.UserTag != null)
     {
         FileInfo  finf  = response.UserTag as FileInfo;
         RangeInfo range = null;
         if (request.Header.ContainsKey("range"))
         {
             List <RangeInfo> lstRange = ResponseInfo.GetRange(request.Header["Range"], finf.Length);
             if (lstRange.Count > 0)
             {
                 range = lstRange[0];
             }
         }
         if (range == null)
         {
             range     = new RangeInfo();
             range.End = finf.Length - 1;
         }
         if (finf != null)
         {
             byte[] buff = new byte[512 * 1024];
             int    read = 0;
             using (FileStream stm = finf.Open(FileMode.Open))
             {
                 stm.Position = range.Start;
                 long totleLen = range.Length;
                 while (true)
                 {
                     read = stm.Read(buff, 0, buff.Length);
                     if (read > totleLen)
                     {
                         read = (int)totleLen;
                     }
                     if (read > 0)
                     {
                         requestSocket.Send(buff, 0, read, SocketFlags.None);
                         totleLen -= read;
                     }
                     if (read <= 0 || totleLen <= 0)
                     {
                         break;
                     }
                 }
             }
         }
     }
 }
Beispiel #28
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="ts">Underlaying textsource</param>
 /// <param name="ranges">List of ranges for replace</param>
 public ReplaceMultipleTextCommand(TextSource ts, List <ReplaceRange> ranges)
     : base(ts)
 {
     //sort ranges by place
     ranges.Sort((r1, r2) =>
     {
         if (r1.ReplacedRange.Start.iLine == r2.ReplacedRange.Start.iLine)
         {
             return(r1.ReplacedRange.Start.iChar.CompareTo(r2.ReplacedRange.Start.iChar));
         }
         return(r1.ReplacedRange.Start.iLine.CompareTo(r2.ReplacedRange.Start.iLine));
     });
     //
     this.ranges = ranges;
     lastSel     = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
Beispiel #29
0
        private RangeInfo GetRangeObject(object[] attributes, PropertyInfo prop)
        {
            var cellAttr = attributes.FirstOrDefault(x => iLocatableType.IsInstanceOfType(x));

            if (cellAttr == null)
            {
                throw new NoCellAttributeException(
                          string.Format("There is no Cell / Cells attribute on the {0} property", prop.Name));
            }

            var range = (cellAttr as ILocatable).GetRange();

            var rangeInfo = new RangeInfo(range);

            return(rangeInfo);
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            GridDashboardItem  grid      = (GridDashboardItem)dashboardViewer1.Dashboard.Items[0];
            GridItemFormatRule rangeRule = grid.FormatRules[0];

            FormatConditionGradientRangeBar rangeCondition =
                (FormatConditionGradientRangeBar)rangeRule.Condition;

            rangeCondition.Generate(new BarStyleSettings(Color.PaleVioletRed),
                                    new BarStyleSettings(Color.PaleGreen), 9);
            RangeInfo middleRange = rangeCondition.RangeSet[4];

            middleRange.StyleSettings = new BarStyleSettings(Color.SkyBlue);

            rangeRule.Condition = rangeCondition;
        }
        private void ShowFormulas(bool show, CalcGridDataBoundGrid grid)
        {
            DataTable dt = grid.DataSource as DataTable;

            engine.IgnoreValueChanged = true;

            if (show)
            {
                for (int row = 0; row < dt.Rows.Count; ++row)
                {
                    for (int col = 0; col < dt.Columns.Count; ++col)
                    {
                        //All calls into CalcEngine are 1-based:
                        string s = this.engine.GetFormulaRowCol(grid, row + 1, col + 1);
                        if (s.Length > 0)
                        {
                            //No calculation as ValueChanged is not raised.
                            grid[row + 1, col + 1].Text = s;
                        }
                    }
                }
            }
            else
            {
                for (int row = 0; row < dt.Rows.Count; ++row)
                {
                    for (int col = 0; col < dt.Columns.Count; ++col)
                    {
                        //All calls into CalcEngine are 1-based:
                        string s = this.engine.GetFormulaRowCol(grid, row + 1, col + 1);
                        if (s.Length > 0)
                        {
                            //Get the value:
                            Syncfusion.Calculate.GridSheetFamilyItem family = Syncfusion.Calculate.CalcEngine.GetSheetFamilyItem(grid);
                            string cell = (family.ParentObjectToToken == null) ? "" : family.ParentObjectToToken[grid].ToString();

                            cell += RangeInfo.GetAlphaLabel(col + 1) + (row + 1).ToString();
                            s     = this.engine.GetValueFromParentObject(cell);
                            grid[row + 1, col + 1].Text = s;
                        }
                    }
                    this.gridDataBoundGrid1.Binder.EndEdit();
                }
            }
            engine.IgnoreValueChanged = false;
        }
Beispiel #32
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="tb">Underlaying textbox</param>
 /// <param name="ranges">List of ranges for replace</param>
 /// <param name="insertedText">Text for inserting</param>
 public ReplaceTextCommand(TextSource ts, List <Range> ranges, string insertedText)
     : base(ts)
 {
     //sort ranges by place
     ranges.Sort((r1, r2) =>
     {
         if (r1.Start.iLine == r2.Start.iLine)
         {
             return(r1.Start.iChar.CompareTo(r2.Start.iChar));
         }
         return(r1.Start.iLine.CompareTo(r2.Start.iLine));
     });
     //
     this.ranges       = ranges;
     this.insertedText = insertedText;
     lastSel           = sel = new RangeInfo(ts.CurrentTB.Selection);
 }
Beispiel #33
0
        /// <summary>
        /// Execute operation
        /// </summary>
        public override void Execute()
        {
            var tb = ts.CurrentTB;

            string temp = null;

            ts.OnTextChanging(ref temp);
            if (temp == "")
            {
                throw new ArgumentOutOfRangeException();
            }

            deletedText = tb.Selection.Text;
            ClearSelected(ts);
            lastSel = new RangeInfo(tb.Selection);
            ts.OnTextChanged(lastSel.Start.iLine, lastSel.Start.iLine);
        }
Beispiel #34
0
        private void OnUpdateVisibleItems()
        {
            var startItem = (int)Math.Floor(_fileListScrollViewer.VerticalOffset);
            var itemCount = (int)Math.Ceiling(_fileListScrollViewer.ViewportHeight);

            if (startItem < 0)
            {
                startItem = 0;
            }

            var rangeInfo = new RangeInfo(startItem, itemCount);

            if (!rangeInfo.Equals(VisibleItems))
            {
                VisibleItems = rangeInfo;
            }
        }
Beispiel #35
0
        public override GitPackIndexEntry GetEntry(byte[] hash)
        {
            using (BinaryReader reader = new BinaryReader(_file(FileAccess.Read)))
            {
                // Get the value from the fanout table to figure out where to start
                RangeInfo range = GetFanout(reader, FanoutStart, hash[0]);

                // Seek to it
                reader.BaseStream.Seek(ShaTableStart + (range.Start * ShaTableEntrySize), SeekOrigin.Begin);

                // Start searching
                Tuple <uint, byte[]> shaEntry = FindShaEntry(reader, hash, range);
                if (shaEntry != null)
                {
                    return(GetEntry(reader, shaEntry.Item1, range.TableLength, shaEntry.Item2));
                }
            }
            return(null);
        }
Beispiel #36
0
        public override IEnumerable <GitPackIndexEntry> GetEntries()
        {
            using (BinaryReader reader = new BinaryReader(_file(FileAccess.Read)))
            {
                RangeInfo range = GetFanout(reader, FanoutStart, 0);

                // Read Shas
                reader.BaseStream.Seek(ShaTableStart, SeekOrigin.Begin);
                byte[][] shas = IterateShas(reader, 0, range.TableLength).Select(t => t.Item2).ToArray();

                // Read Offsets
                reader.BaseStream.Seek(ShaTableStart + (OffsetTableMultiplier * range.TableLength), SeekOrigin.Begin);
                for (int i = 0; i < range.TableLength; i++)
                {
                    uint start = reader.ReadNetworkUInt32();
                    yield return(new GitPackIndexEntry(start, shas[i]));
                }
            }
        }
        /// <summary>
        /// Execute operation
        /// </summary>
        public override void Execute()
        {
            var tb = ts.CurrentTB;
            prevText.Clear();

            ts.OnTextChanging();

            tb.Selection.BeginUpdate();
            for (int i = iLines.Count - 1; i >= 0; i--)
            {
                var iLine = iLines[i];

                prevText.Add(ts[iLine].Text);//backward
                ts.RemoveLine(iLine);
                //ts.OnTextChanged(ranges[i].Start.iLine, ranges[i].End.iLine);
            }
            tb.Selection.Start = new Place(0, 0);
            tb.Selection.EndUpdate();
            ts.NeedRecalc(new TextSource.TextSourceTextChangedEventArgs(0, 1));

            lastSel = new RangeInfo(tb.Selection);
        }
 public override void Execute()
 {
     //remember selection
     lastSel = new RangeInfo(ts.CurrentTB.Selection);
 }