OSDN Git Service

More fun with script editor
authorLatif Khalifa <latifer@streamgrid.net>
Sat, 4 Jul 2009 16:51:06 +0000 (16:51 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Sat, 4 Jul 2009 16:51:06 +0000 (16:51 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@92 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/Core/Types/RRichTextBox.cs
Radegast/Core/Types/ToolStripCheckBox.cs [new file with mode: 0644]
Radegast/GUI/Consoles/Assets/ScriptEditor.Designer.cs
Radegast/GUI/Consoles/Assets/ScriptEditor.cs
Radegast/GUI/Consoles/Assets/ScriptEditor.resx
Radegast/Properties/Resources.Designer.cs
Radegast/Properties/Resources.resx
Radegast/Radegast.csproj
Radegast/Resources/del_trans.png [new file with mode: 0644]

index 2e6015a..6f26665 100644 (file)
@@ -29,6 +29,7 @@
 // $Id$\r
 //\r
 using System;\r
+using System.Collections;\r
 using System.Collections.Generic;\r
 using System.Linq;\r
 using System.Text;\r
@@ -43,17 +44,23 @@ namespace Radegast
     public class RRichTextBox : RichTextBox\r
     {\r
 \r
-        private const short WM_PAINT = 0x00f;\r
         private bool _Paint = true;\r
         private bool monoRuntime;\r
+\r
+        //  Tool tip related private members\r
         private System.Threading.Timer ttTimer;\r
         private ToolTip ttKeyWords = new ToolTip();\r
 \r
+        // Undo/Redo members\r
+        private ArrayList mUndoList = new ArrayList();\r
+        private Stack mRedoStack = new Stack();\r
+        private bool mIsUndo = false;\r
+        private UndoRedoInfo mLastInfo = new UndoRedoInfo("", new Win32.POINT(), 0);\r
+        private int mMaxUndoRedoSteps = 50;\r
+\r
         public RRichTextBox()\r
             : base()\r
         {\r
-            SetStyle(ControlStyles.SupportsTransparentBackColor, true);\r
-            \r
             // Are we running mono?\r
             if (null == Type.GetType("Mono.Runtime"))\r
             {\r
@@ -69,26 +76,32 @@ namespace Radegast
 \r
         protected override void WndProc(ref System.Windows.Forms.Message m)\r
         {\r
-            // sometimes we want to eat the paint message so we don't have to see all the \r
-            //  flicker from when we select the text to change the color.\r
-            if (m.Msg == WM_PAINT)\r
+            switch (m.Msg)\r
             {\r
-                if (_Paint)\r
-                    base.WndProc(ref m);\r
-                else\r
-                    m.Result = IntPtr.Zero;\r
-            }\r
-            else\r
-            {\r
-                base.WndProc(ref m);\r
-            }\r
-        }\r
+                case Win32.WM_PAINT:\r
+                    if (!_Paint)\r
+                    {\r
+                        m.Result = IntPtr.Zero;\r
+                        return;\r
+                    }\r
+                    goto default;\r
 \r
-        protected override void OnPaint(PaintEventArgs e)\r
-        {\r
-            if (_Paint)\r
-            {\r
-                base.OnPaint(e);\r
+                case Win32.WM_KEYDOWN:\r
+                    switch ((Keys)(int)m.WParam)\r
+                    {\r
+                        case Keys.Z:\r
+                            Undo();\r
+                            return;\r
+\r
+                        case Keys.Y:\r
+                            Redo();\r
+                            return;\r
+                    }\r
+                    goto default;\r
+\r
+                default:\r
+                    base.WndProc(ref m);\r
+                    break;\r
             }\r
         }\r
 \r
@@ -96,7 +109,9 @@ namespace Radegast
         {\r
             _Paint = false;\r
             if (!monoRuntime)\r
+            {\r
                 Win32.LockWindowUpdate(Handle);\r
+            }\r
         }\r
 \r
         public virtual void EndUpdate()\r
@@ -140,19 +155,24 @@ namespace Radegast
 \r
         protected override void OnTextChanged(EventArgs e)\r
         {\r
-            if (monoRuntime)\r
-            {\r
-                // base.OnTextChanged(e);\r
-                // return;\r
-            }\r
-\r
             if (!_Paint) return;\r
             \r
             BeginUpdate();\r
+\r
             Win32.POINT scrollStatus = GetScrollPos();\r
             int selectionStart = SelectionStart;\r
             int selectionLength = SelectionLength;\r
 \r
+            if (!mIsUndo)\r
+            {\r
+                mRedoStack.Clear();\r
+                mUndoList.Insert(0, new UndoRedoInfo(mLastInfo.Text,scrollStatus, selectionStart));\r
+                this.LimitUndo();\r
+                mLastInfo = new UndoRedoInfo(Text, scrollStatus, selectionStart);\r
+            }\r
+\r
+            base.OnTextChanged(e);\r
+\r
             StringTokenizer tokenizer = new StringTokenizer(Text.Replace("\t", "    "));\r
             Token token;\r
             StringBuilder body = new StringBuilder();\r
@@ -208,8 +228,6 @@ namespace Radegast
             // Construct final rtf\r
             StringBuilder rtf = new StringBuilder();\r
             rtf.AppendLine(@"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}");\r
-            //rtf.Append(@"\viewkind4\uc1\pard\lang1033\f0\fs20 ");\r
-            //rtf.AppendLine(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\f0\fnil\fcharset0 Courier New;}}");\r
             rtf.AppendLine(colorTable.ToString());\r
             rtf.Append(@"\pard\f0\fs18 ");\r
             rtf.Append(body);\r
@@ -420,5 +438,89 @@ namespace Radegast
             public static extern int LockWindowUpdate(HWND hwnd);\r
         }\r
         #endregion\r
+\r
+        #region Undo/Redo Code\r
+        public new bool CanUndo\r
+        {\r
+            get\r
+            {\r
+                return mUndoList.Count > 0;\r
+            }\r
+        }\r
+        public new bool CanRedo\r
+        {\r
+            get\r
+            {\r
+                return mRedoStack.Count > 0;\r
+            }\r
+        }\r
+\r
+        private void LimitUndo()\r
+        {\r
+            while (mUndoList.Count > mMaxUndoRedoSteps)\r
+            {\r
+                mUndoList.RemoveAt(mMaxUndoRedoSteps);\r
+            }\r
+        }\r
+\r
+        public void ClearUndoRedo()\r
+        {\r
+            ClearUndo();\r
+            mRedoStack.Clear();\r
+            mUndoList.Clear();\r
+            mIsUndo = false;\r
+            mLastInfo = new UndoRedoInfo("", new Win32.POINT(), 0);\r
+        }\r
+\r
+        public new void Undo()\r
+        {\r
+            if (!CanUndo)\r
+                return;\r
+            mIsUndo = true;\r
+            mRedoStack.Push(new UndoRedoInfo(Text, GetScrollPos(), SelectionStart));\r
+            UndoRedoInfo info = (UndoRedoInfo)mUndoList[0];\r
+            mUndoList.RemoveAt(0);\r
+            BeginUpdate();\r
+            Text = info.Text;\r
+            SelectionStart = info.CursorLocation;\r
+            SetScrollPos(info.ScrollPos);\r
+            EndUpdate();\r
+            OnTextChanged(new EventArgs());\r
+            mLastInfo = info;\r
+            mIsUndo = false;\r
+        }\r
+\r
+        public new void Redo()\r
+        {\r
+            if (!CanRedo)\r
+                return;\r
+            mIsUndo = true;\r
+            mUndoList.Insert(0, new UndoRedoInfo(Text, GetScrollPos(), SelectionStart));\r
+            LimitUndo();\r
+            UndoRedoInfo info = (UndoRedoInfo)mRedoStack.Pop();\r
+            BeginUpdate();\r
+            Text = info.Text;\r
+            SelectionStart = info.CursorLocation;\r
+            SetScrollPos(info.ScrollPos);\r
+            EndUpdate();\r
+            OnTextChanged(new EventArgs());\r
+            mIsUndo = false;\r
+            EndUpdate();\r
+        }\r
+\r
+        private class UndoRedoInfo\r
+        {\r
+            public UndoRedoInfo(string text, Win32.POINT scrollPos, int cursorLoc)\r
+            {\r
+                Text = text;\r
+                ScrollPos = scrollPos;\r
+                CursorLocation = cursorLoc;\r
+            }\r
+            public readonly Win32.POINT ScrollPos;\r
+            public readonly int CursorLocation;\r
+            public readonly string Text;\r
+        }\r
+        #endregion\r
+\r
     }\r
 }
\ No newline at end of file
diff --git a/Radegast/Core/Types/ToolStripCheckBox.cs b/Radegast/Core/Types/ToolStripCheckBox.cs
new file mode 100644 (file)
index 0000000..0da63c4
--- /dev/null
@@ -0,0 +1,156 @@
+// \r
+// Radegast Metaverse Client\r
+// Copyright (c) 2009, Radegast Development Team\r
+// All rights reserved.\r
+// \r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are met:\r
+// \r
+//     * Redistributions of source code must retain the above copyright notice,\r
+//       this list of conditions and the following disclaimer.\r
+//     * Redistributions in binary form must reproduce the above copyright\r
+//       notice, this list of conditions and the following disclaimer in the\r
+//       documentation and/or other materials provided with the distribution.\r
+//     * Neither the name of the application "Radegast", nor the names of its\r
+//       contributors may be used to endorse or promote products derived from\r
+//       this software without specific prior written permission.\r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+//\r
+// $Id$\r
+//\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+using System.Windows.Forms.Design;\r
+using System.Drawing;\r
+using System.ComponentModel;\r
+\r
+namespace Radegast\r
+{\r
+    [ToolStripItemDesignerAvailability(\r
+        ToolStripItemDesignerAvailability.ToolStrip)]\r
+    public partial class ToolStripCheckBox\r
+        : ToolStripControlHost\r
+    {\r
+        public CheckBox CheckBoxControl\r
+        {\r
+            get\r
+            {\r
+                return Control as CheckBox;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Is check box ticked\r
+        /// </summary>\r
+        [Category("Appearance")]\r
+        public bool Checked\r
+        {\r
+            get\r
+            {\r
+                return CheckBoxControl.Checked;\r
+            }\r
+            set\r
+            {\r
+                CheckBoxControl.Checked = value;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Checked state\r
+        /// </summary>\r
+        [Category("Appearance")]\r
+        public CheckState CheckState\r
+        {\r
+            get\r
+            {\r
+                return CheckBoxControl.CheckState;\r
+            }\r
+            set\r
+            {\r
+                CheckBoxControl.CheckState = value;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Label text\r
+        /// </summary>\r
+        [Category("Appearance")]\r
+        public override string Text\r
+        {\r
+            get\r
+            {\r
+                return CheckBoxControl.Text;\r
+            }\r
+            set\r
+            {\r
+                CheckBoxControl.Text = value;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Occurs when check property is changed\r
+        /// </summary>\r
+        [Category("Misc")]\r
+        public event EventHandler CheckedChanged;\r
+\r
+        /// <summary>\r
+        /// Occurs when check state of the control changes\r
+        /// </summary>\r
+        [Category("Misc")]\r
+        public event EventHandler CheckStateChanged;\r
+\r
+        public ToolStripCheckBox()\r
+            : base(new CheckBox())\r
+        {\r
+            CheckBoxControl.MouseHover += new EventHandler(chk_MouseHover);\r
+        }\r
+\r
+        void chk_MouseHover(object sender, EventArgs e)\r
+        {\r
+            this.OnMouseHover(e);\r
+        }\r
\r
+        protected override void OnSubscribeControlEvents(Control c)\r
+        {\r
+            base.OnSubscribeControlEvents(c);\r
+            ((CheckBox)c).CheckedChanged += new EventHandler(ToolStripCheckBox_CheckedChanged);\r
+            ((CheckBox)c).CheckStateChanged += new EventHandler(ToolStripCheckBox_CheckStateChanged);\r
+        }\r
+\r
+        protected override void OnUnsubscribeControlEvents(Control c)\r
+        {\r
+            base.OnUnsubscribeControlEvents(c);\r
+            ((CheckBox)c).CheckedChanged -= new EventHandler(ToolStripCheckBox_CheckedChanged);\r
+            ((CheckBox)c).CheckStateChanged -= new EventHandler(ToolStripCheckBox_CheckStateChanged);\r
+        }\r
+\r
+        void ToolStripCheckBox_CheckedChanged(object sender, EventArgs e)\r
+        {\r
+            if (CheckedChanged != null)\r
+            {\r
+                CheckedChanged(this, e);\r
+            }\r
+        }\r
+\r
+        void ToolStripCheckBox_CheckStateChanged(object sender, EventArgs e)\r
+        {\r
+            if (CheckStateChanged != null)\r
+            {\r
+                CheckStateChanged(this, e);\r
+            }\r
+        }\r
+    }\r
+}
\ No newline at end of file
index 8268472..237af24 100644 (file)
@@ -61,7 +61,7 @@ namespace Radegast
             this.components = new System.ComponentModel.Container();\r
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptEditor));\r
             this.ttKeyWords = new System.Windows.Forms.ToolTip(this.components);\r
-            this.strpMenu = new System.Windows.Forms.ToolStrip();\r
+            this.tsMenu = new System.Windows.Forms.ToolStrip();\r
             this.tbtbFile = new System.Windows.Forms.ToolStripDropDownButton();\r
             this.tbtbLoadFromDisk = new System.Windows.Forms.ToolStripMenuItem();\r
             this.tbtbSave = new System.Windows.Forms.ToolStripMenuItem();\r
@@ -69,28 +69,52 @@ namespace Radegast
             this.tbtbSaveToDiskAs = new System.Windows.Forms.ToolStripMenuItem();\r
             this.tSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.tbtnExit = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.tbtnEdit = new System.Windows.Forms.ToolStripDropDownButton();\r
+            this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.findToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
             this.tbtnAttach = new System.Windows.Forms.ToolStripButton();\r
-            this.strpStatus = new System.Windows.Forms.ToolStrip();\r
+            this.tsStatus = new System.Windows.Forms.ToolStrip();\r
             this.lblScripStatus = new System.Windows.Forms.ToolStripLabel();\r
             this.lblCol = new System.Windows.Forms.ToolStripLabel();\r
             this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.lblLine = new System.Windows.Forms.ToolStripLabel();\r
             this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.tsFindReplace = new System.Windows.Forms.ToolStrip();\r
+            this.tfindClose = new System.Windows.Forms.ToolStripButton();\r
+            this.tfindFindText = new System.Windows.Forms.ToolStripTextBox();\r
+            this.tfindDoFind = new System.Windows.Forms.ToolStripButton();\r
+            this.tfindMatchCase = new Radegast.ToolStripCheckBox();\r
+            this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\r
+            this.tfindReplaceText = new System.Windows.Forms.ToolStripTextBox();\r
+            this.tfindFindNextReplace = new System.Windows.Forms.ToolStripButton();\r
+            this.tfindReplace = new System.Windows.Forms.ToolStripButton();\r
+            this.tfindReplaceAll = new System.Windows.Forms.ToolStripButton();\r
             this.rtbCode = new Radegast.RRichTextBox();\r
-            this.strpMenu.SuspendLayout();\r
-            this.strpStatus.SuspendLayout();\r
+            this.toolStripButton1 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.tsMenu.SuspendLayout();\r
+            this.tsStatus.SuspendLayout();\r
+            this.tsFindReplace.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
-            // strpMenu\r
+            // tsMenu\r
             // \r
-            this.strpMenu.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
-            this.strpMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.tsMenu.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
+            this.tsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.tbtbFile,\r
+            this.tbtnEdit,\r
             this.tbtnAttach});\r
-            this.strpMenu.Location = new System.Drawing.Point(0, 0);\r
-            this.strpMenu.Name = "strpMenu";\r
-            this.strpMenu.Size = new System.Drawing.Size(661, 25);\r
-            this.strpMenu.TabIndex = 2;\r
+            this.tsMenu.Location = new System.Drawing.Point(0, 0);\r
+            this.tsMenu.Name = "tsMenu";\r
+            this.tsMenu.Size = new System.Drawing.Size(661, 25);\r
+            this.tsMenu.TabIndex = 2;\r
             // \r
             // tbtbFile\r
             // \r
@@ -150,6 +174,100 @@ namespace Radegast
             this.tbtnExit.Visible = false;\r
             this.tbtnExit.Click += new System.EventHandler(this.tbtnExit_Click);\r
             // \r
+            // tbtnEdit\r
+            // \r
+            this.tbtnEdit.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tbtnEdit.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.undoToolStripMenuItem,\r
+            this.redoToolStripMenuItem,\r
+            this.toolStripMenuItem1,\r
+            this.cutToolStripMenuItem,\r
+            this.copyToolStripMenuItem,\r
+            this.pasteToolStripMenuItem,\r
+            this.deleteToolStripMenuItem,\r
+            this.selectAllToolStripMenuItem,\r
+            this.toolStripMenuItem2,\r
+            this.findToolStripMenuItem});\r
+            this.tbtnEdit.Image = ((System.Drawing.Image)(resources.GetObject("tbtnEdit.Image")));\r
+            this.tbtnEdit.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbtnEdit.Name = "tbtnEdit";\r
+            this.tbtnEdit.Size = new System.Drawing.Size(40, 22);\r
+            this.tbtnEdit.Text = "Edit";\r
+            // \r
+            // undoToolStripMenuItem\r
+            // \r
+            this.undoToolStripMenuItem.Name = "undoToolStripMenuItem";\r
+            this.undoToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Z";\r
+            this.undoToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.undoToolStripMenuItem.Text = "Undo";\r
+            this.undoToolStripMenuItem.Click += new System.EventHandler(this.undoToolStripMenuItem_Click);\r
+            // \r
+            // redoToolStripMenuItem\r
+            // \r
+            this.redoToolStripMenuItem.Name = "redoToolStripMenuItem";\r
+            this.redoToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Y";\r
+            this.redoToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.redoToolStripMenuItem.Text = "Redo";\r
+            this.redoToolStripMenuItem.Click += new System.EventHandler(this.redoToolStripMenuItem_Click);\r
+            // \r
+            // toolStripMenuItem1\r
+            // \r
+            this.toolStripMenuItem1.Name = "toolStripMenuItem1";\r
+            this.toolStripMenuItem1.Size = new System.Drawing.Size(161, 6);\r
+            // \r
+            // cutToolStripMenuItem\r
+            // \r
+            this.cutToolStripMenuItem.Name = "cutToolStripMenuItem";\r
+            this.cutToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+X";\r
+            this.cutToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.cutToolStripMenuItem.Text = "Cut";\r
+            this.cutToolStripMenuItem.Click += new System.EventHandler(this.cutToolStripMenuItem_Click);\r
+            // \r
+            // copyToolStripMenuItem\r
+            // \r
+            this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";\r
+            this.copyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+C";\r
+            this.copyToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.copyToolStripMenuItem.Text = "Copy";\r
+            this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click);\r
+            // \r
+            // pasteToolStripMenuItem\r
+            // \r
+            this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";\r
+            this.pasteToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+V";\r
+            this.pasteToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.pasteToolStripMenuItem.Text = "Paste";\r
+            this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click);\r
+            // \r
+            // deleteToolStripMenuItem\r
+            // \r
+            this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";\r
+            this.deleteToolStripMenuItem.ShortcutKeyDisplayString = "Del";\r
+            this.deleteToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.deleteToolStripMenuItem.Text = "Delete";\r
+            this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click);\r
+            // \r
+            // selectAllToolStripMenuItem\r
+            // \r
+            this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";\r
+            this.selectAllToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+A";\r
+            this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.selectAllToolStripMenuItem.Text = "Select All";\r
+            this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);\r
+            // \r
+            // toolStripMenuItem2\r
+            // \r
+            this.toolStripMenuItem2.Name = "toolStripMenuItem2";\r
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(161, 6);\r
+            // \r
+            // findToolStripMenuItem\r
+            // \r
+            this.findToolStripMenuItem.Name = "findToolStripMenuItem";\r
+            this.findToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+F";\r
+            this.findToolStripMenuItem.Size = new System.Drawing.Size(164, 22);\r
+            this.findToolStripMenuItem.Text = "Find";\r
+            this.findToolStripMenuItem.Click += new System.EventHandler(this.findToolStripMenuItem_Click);\r
+            // \r
             // tbtnAttach\r
             // \r
             this.tbtnAttach.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
@@ -160,20 +278,20 @@ namespace Radegast
             this.tbtnAttach.Text = "Detach";\r
             this.tbtnAttach.Click += new System.EventHandler(this.tbtnAttach_Click);\r
             // \r
-            // strpStatus\r
+            // tsStatus\r
             // \r
-            this.strpStatus.Dock = System.Windows.Forms.DockStyle.Bottom;\r
-            this.strpStatus.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
-            this.strpStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.tsStatus.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.tsStatus.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
+            this.tsStatus.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.lblScripStatus,\r
             this.lblCol,\r
             this.toolStripSeparator1,\r
             this.lblLine,\r
             this.toolStripSeparator2});\r
-            this.strpStatus.Location = new System.Drawing.Point(0, 420);\r
-            this.strpStatus.Name = "strpStatus";\r
-            this.strpStatus.Size = new System.Drawing.Size(661, 25);\r
-            this.strpStatus.TabIndex = 3;\r
+            this.tsStatus.Location = new System.Drawing.Point(0, 420);\r
+            this.tsStatus.Name = "tsStatus";\r
+            this.tsStatus.Size = new System.Drawing.Size(661, 25);\r
+            this.tsStatus.TabIndex = 3;\r
             // \r
             // lblScripStatus\r
             // \r
@@ -213,6 +331,107 @@ namespace Radegast
             this.toolStripSeparator2.Name = "toolStripSeparator2";\r
             this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\r
             // \r
+            // tsFindReplace\r
+            // \r
+            this.tsFindReplace.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.tsFindReplace.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
+            this.tsFindReplace.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.tfindClose,\r
+            this.tfindFindText,\r
+            this.tfindDoFind,\r
+            this.tfindMatchCase,\r
+            this.toolStripButton1,\r
+            this.toolStripLabel1,\r
+            this.tfindReplaceText,\r
+            this.tfindFindNextReplace,\r
+            this.tfindReplace,\r
+            this.tfindReplaceAll});\r
+            this.tsFindReplace.Location = new System.Drawing.Point(0, 395);\r
+            this.tsFindReplace.Name = "tsFindReplace";\r
+            this.tsFindReplace.Size = new System.Drawing.Size(661, 25);\r
+            this.tsFindReplace.TabIndex = 4;\r
+            this.tsFindReplace.Text = "toolStrip1";\r
+            this.tsFindReplace.Visible = false;\r
+            // \r
+            // tfindClose\r
+            // \r
+            this.tfindClose.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.tfindClose.Image = global::Radegast.Properties.Resources.del_trans;\r
+            this.tfindClose.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tfindClose.Name = "tfindClose";\r
+            this.tfindClose.Size = new System.Drawing.Size(23, 22);\r
+            this.tfindClose.Text = "Close";\r
+            this.tfindClose.Click += new System.EventHandler(this.tfindClose_Click);\r
+            // \r
+            // tfindFindText\r
+            // \r
+            this.tfindFindText.Name = "tfindFindText";\r
+            this.tfindFindText.Size = new System.Drawing.Size(120, 25);\r
+            this.tfindFindText.Leave += new System.EventHandler(this.tfindFindText_Leave);\r
+            this.tfindFindText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tfindFindText_KeyDown);\r
+            this.tfindFindText.KeyUp += new System.Windows.Forms.KeyEventHandler(this.tfindFindText_KeyUp);\r
+            this.tfindFindText.TextChanged += new System.EventHandler(this.tfindFindText_TextChanged);\r
+            // \r
+            // tfindDoFind\r
+            // \r
+            this.tfindDoFind.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tfindDoFind.Image = ((System.Drawing.Image)(resources.GetObject("tfindDoFind.Image")));\r
+            this.tfindDoFind.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tfindDoFind.Name = "tfindDoFind";\r
+            this.tfindDoFind.Size = new System.Drawing.Size(59, 22);\r
+            this.tfindDoFind.Text = "Find next";\r
+            this.tfindDoFind.Click += new System.EventHandler(this.tfindDoFind_Click);\r
+            // \r
+            // tfindMatchCase\r
+            // \r
+            this.tfindMatchCase.BackColor = System.Drawing.Color.Transparent;\r
+            this.tfindMatchCase.Checked = false;\r
+            this.tfindMatchCase.CheckState = System.Windows.Forms.CheckState.Unchecked;\r
+            this.tfindMatchCase.Name = "tfindMatchCase";\r
+            this.tfindMatchCase.Size = new System.Drawing.Size(86, 22);\r
+            this.tfindMatchCase.Text = "Match case";\r
+            // \r
+            // toolStripLabel1\r
+            // \r
+            this.toolStripLabel1.Name = "toolStripLabel1";\r
+            this.toolStripLabel1.Size = new System.Drawing.Size(48, 22);\r
+            this.toolStripLabel1.Text = "Replace";\r
+            // \r
+            // tfindReplaceText\r
+            // \r
+            this.tfindReplaceText.Name = "tfindReplaceText";\r
+            this.tfindReplaceText.Size = new System.Drawing.Size(100, 25);\r
+            // \r
+            // tfindFindNextReplace\r
+            // \r
+            this.tfindFindNextReplace.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tfindFindNextReplace.Image = ((System.Drawing.Image)(resources.GetObject("tfindFindNextReplace.Image")));\r
+            this.tfindFindNextReplace.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tfindFindNextReplace.Name = "tfindFindNextReplace";\r
+            this.tfindFindNextReplace.Size = new System.Drawing.Size(59, 22);\r
+            this.tfindFindNextReplace.Text = "Find next";\r
+            this.tfindFindNextReplace.Click += new System.EventHandler(this.tfindFindNextReplace_Click);\r
+            // \r
+            // tfindReplace\r
+            // \r
+            this.tfindReplace.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tfindReplace.Image = ((System.Drawing.Image)(resources.GetObject("tfindReplace.Image")));\r
+            this.tfindReplace.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tfindReplace.Name = "tfindReplace";\r
+            this.tfindReplace.Size = new System.Drawing.Size(52, 22);\r
+            this.tfindReplace.Text = "Replace";\r
+            this.tfindReplace.Click += new System.EventHandler(this.tfindReplace_Click);\r
+            // \r
+            // tfindReplaceAll\r
+            // \r
+            this.tfindReplaceAll.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tfindReplaceAll.Image = ((System.Drawing.Image)(resources.GetObject("tfindReplaceAll.Image")));\r
+            this.tfindReplaceAll.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tfindReplaceAll.Name = "tfindReplaceAll";\r
+            this.tfindReplaceAll.Size = new System.Drawing.Size(67, 22);\r
+            this.tfindReplaceAll.Text = "Replace all";\r
+            this.tfindReplaceAll.Click += new System.EventHandler(this.tfindReplaceAll_Click);\r
+            // \r
             // rtbCode\r
             // \r
             this.rtbCode.BackColor = System.Drawing.Color.WhiteSmoke;\r
@@ -221,7 +440,7 @@ namespace Radegast
             this.rtbCode.HideSelection = false;\r
             this.rtbCode.Location = new System.Drawing.Point(0, 25);\r
             this.rtbCode.Name = "rtbCode";\r
-            this.rtbCode.Size = new System.Drawing.Size(661, 395);\r
+            this.rtbCode.Size = new System.Drawing.Size(661, 370);\r
             this.rtbCode.TabIndex = 1;\r
             this.rtbCode.Text = "";\r
             this.rtbCode.WordWrap = false;\r
@@ -229,19 +448,27 @@ namespace Radegast
             this.rtbCode.SelectionChanged += new System.EventHandler(this.rtbCode_SelectionChanged);\r
             this.rtbCode.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.rtbCode_KeyPress);\r
             // \r
+            // toolStripButton1\r
+            // \r
+            this.toolStripButton1.Name = "toolStripButton1";\r
+            this.toolStripButton1.Size = new System.Drawing.Size(6, 25);\r
+            // \r
             // ScriptEditor\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
             this.Controls.Add(this.rtbCode);\r
-            this.Controls.Add(this.strpStatus);\r
-            this.Controls.Add(this.strpMenu);\r
+            this.Controls.Add(this.tsFindReplace);\r
+            this.Controls.Add(this.tsStatus);\r
+            this.Controls.Add(this.tsMenu);\r
             this.Name = "ScriptEditor";\r
             this.Size = new System.Drawing.Size(661, 445);\r
-            this.strpMenu.ResumeLayout(false);\r
-            this.strpMenu.PerformLayout();\r
-            this.strpStatus.ResumeLayout(false);\r
-            this.strpStatus.PerformLayout();\r
+            this.tsMenu.ResumeLayout(false);\r
+            this.tsMenu.PerformLayout();\r
+            this.tsStatus.ResumeLayout(false);\r
+            this.tsStatus.PerformLayout();\r
+            this.tsFindReplace.ResumeLayout(false);\r
+            this.tsFindReplace.PerformLayout();\r
             this.ResumeLayout(false);\r
             this.PerformLayout();\r
 \r
@@ -251,7 +478,7 @@ namespace Radegast
 \r
         private System.Windows.Forms.ToolTip ttKeyWords;\r
         private RRichTextBox rtbCode;\r
-        private System.Windows.Forms.ToolStrip strpMenu;\r
+        private System.Windows.Forms.ToolStrip tsMenu;\r
         private System.Windows.Forms.ToolStripDropDownButton tbtbFile;\r
         private System.Windows.Forms.ToolStripMenuItem tbtbSave;\r
         private System.Windows.Forms.ToolStripMenuItem tbtbSaveToDiskAs;\r
@@ -259,12 +486,34 @@ namespace Radegast
         private System.Windows.Forms.ToolStripButton tbtnAttach;\r
         private System.Windows.Forms.ToolStripSeparator tSeparator1;\r
         private System.Windows.Forms.ToolStripMenuItem tbtnExit;\r
-        private System.Windows.Forms.ToolStrip strpStatus;\r
+        private System.Windows.Forms.ToolStrip tsStatus;\r
         private System.Windows.Forms.ToolStripLabel lblScripStatus;\r
         private System.Windows.Forms.ToolStripLabel lblCol;\r
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\r
         private System.Windows.Forms.ToolStripLabel lblLine;\r
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\r
         private System.Windows.Forms.ToolStripMenuItem tbtbSaveToDisk;\r
+        private System.Windows.Forms.ToolStripDropDownButton tbtnEdit;\r
+        private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;\r
+        private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;\r
+        private System.Windows.Forms.ToolStripMenuItem findToolStripMenuItem;\r
+        private System.Windows.Forms.ToolStrip tsFindReplace;\r
+        private System.Windows.Forms.ToolStripButton tfindClose;\r
+        private System.Windows.Forms.ToolStripTextBox tfindFindText;\r
+        private ToolStripCheckBox tfindMatchCase;\r
+        private System.Windows.Forms.ToolStripButton tfindDoFind;\r
+        private System.Windows.Forms.ToolStripLabel toolStripLabel1;\r
+        private System.Windows.Forms.ToolStripTextBox tfindReplaceText;\r
+        private System.Windows.Forms.ToolStripButton tfindFindNextReplace;\r
+        private System.Windows.Forms.ToolStripButton tfindReplace;\r
+        private System.Windows.Forms.ToolStripButton tfindReplaceAll;\r
+        private System.Windows.Forms.ToolStripSeparator toolStripButton1;\r
     }\r
 }\r
index 3110ea2..acbf21c 100644 (file)
@@ -283,6 +283,7 @@ namespace Radegast
                 fileName = dlg.FileName;\r
                 scriptName = Path.GetFileName(fileName);\r
                 SetTitle();\r
+                rtbCode.ClearUndoRedo();\r
                 rtbCode.Text = File.ReadAllText(fileName);\r
             }\r
         }\r
@@ -321,6 +322,10 @@ namespace Radegast
 \r
         private void rtbCode_KeyDown(object sender, KeyEventArgs e)\r
         {\r
+            if (e.Modifiers == Keys.Control && e.KeyCode == Keys.F)\r
+            {\r
+                findToolStripMenuItem_Click(null, null);\r
+            }\r
             if (e.KeyCode == Keys.Tab)\r
             {\r
                 rtbCode.SelectedText = "    ";\r
@@ -378,5 +383,236 @@ namespace Radegast
                 }\r
             }\r
         }\r
+\r
+        #region Edit menu handlers\r
+        private void undoToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            rtbCode.Undo();\r
+        }\r
+\r
+        private void redoToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            rtbCode.Redo();\r
+        }\r
+\r
+        private void cutToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            if (rtbCode.SelectionLength > 0)\r
+            {\r
+                Clipboard.SetText(rtbCode.SelectedText);\r
+                rtbCode.SelectedText = string.Empty;\r
+            }\r
+        }\r
+\r
+        private void copyToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            if (rtbCode.SelectionLength > 0)\r
+            {\r
+                Clipboard.SetText(rtbCode.SelectedText);\r
+            }\r
+        }\r
+\r
+        private void pasteToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            string clip = Clipboard.GetText();\r
+\r
+            if (!string.IsNullOrEmpty(clip))\r
+            {\r
+                rtbCode.SelectedText = clip;\r
+            }\r
+        }\r
+\r
+        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            rtbCode.SelectedText = string.Empty;\r
+        }\r
+\r
+        private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            rtbCode.SelectionStart = 0;\r
+            rtbCode.SelectionLength = rtbCode.Text.Length;\r
+        }\r
+\r
+        private void findToolStripMenuItem_Click(object sender, EventArgs e)\r
+        {\r
+            tsFindReplace.Show();\r
+            tfindFindText.Focus();\r
+        }\r
+        #endregion\r
+\r
+        private void tfindClose_Click(object sender, EventArgs e)\r
+        {\r
+            tsFindReplace.Hide();\r
+        }\r
+\r
+        private class FindHistoryItem\r
+        {\r
+            public FindHistoryItem(string term, int ss, int sl)\r
+            {\r
+                Term = term;\r
+                SelStart = ss;\r
+                SelLength = sl;\r
+            }\r
+\r
+            public string Term;\r
+            public int SelStart;\r
+            public int SelLength;\r
+\r
+            public override string ToString()\r
+            {\r
+                return Term;\r
+            }\r
+        }\r
+\r
+        Dictionary<string, FindHistoryItem> FindHistory = new Dictionary<string, FindHistoryItem>();\r
+        FindHistoryItem startPos;\r
+\r
+        private void tfindFindText_TextChanged(object sender, EventArgs e)\r
+        {\r
+            string st = tfindFindText.Text;\r
+\r
+            if (startPos == null)\r
+            {\r
+                startPos = new FindHistoryItem(string.Empty, rtbCode.SelectionStart, rtbCode.SelectionLength);\r
+                FindHistory[startPos.Term] = startPos;\r
+            }\r
+\r
+            StringComparison type;\r
+\r
+            if (tfindMatchCase.Checked)\r
+            {\r
+                type = StringComparison.Ordinal;\r
+            }\r
+            else\r
+            {\r
+                type = StringComparison.OrdinalIgnoreCase;\r
+            }\r
+\r
+            if (FindHistory.ContainsKey(st))\r
+            {\r
+                tfindFindText.BackColor = Color.FromKnownColor(KnownColor.Window);\r
+                tfindDoFind.Enabled = true;\r
+                FindHistoryItem h = FindHistory[st];\r
+                rtbCode.BeginUpdate();\r
+                rtbCode.Select(h.SelStart, h.SelLength);\r
+                rtbCode.ScrollToCaret();\r
+                rtbCode.EndUpdate();\r
+            }\r
+\r
+            if (st == string.Empty)\r
+            {\r
+                FindHistory.Clear();\r
+                tfindFindText.BackColor = Color.FromKnownColor(KnownColor.Window);\r
+                tfindDoFind.Enabled = true;\r
+                startPos = null;\r
+                return;\r
+            }\r
+\r
+            int pos = rtbCode.Text.IndexOf(st, rtbCode.SelectionStart, type);\r
+\r
+            if (pos != -1)\r
+            {\r
+                tfindFindText.BackColor = Color.FromKnownColor(KnownColor.Window);\r
+                tfindDoFind.Enabled = true;\r
+                FindHistory[st] = new FindHistoryItem(st, pos, st.Length);\r
+                rtbCode.BeginUpdate();\r
+                rtbCode.Select(pos, st.Length);\r
+                rtbCode.ScrollToCaret();\r
+                rtbCode.EndUpdate();\r
+            }\r
+            else\r
+            {\r
+                tfindFindText.BackColor = Color.FromArgb(200, 0, 0);\r
+                tfindDoFind.Enabled = false;\r
+            }\r
+        }\r
+\r
+        private void tfindFindText_KeyDown(object sender, KeyEventArgs e)\r
+        {\r
+            if (e.KeyCode == Keys.Enter)\r
+            {\r
+                e.SuppressKeyPress = true;\r
+            }\r
+        }\r
+\r
+        private void tfindFindText_KeyUp(object sender, KeyEventArgs e)\r
+        {\r
+            switch (e.KeyCode)\r
+            {\r
+                case Keys.Enter:\r
+                    tfindDoFind_Click(null, null);\r
+                    e.Handled = true;\r
+                    e.SuppressKeyPress = true;\r
+                    break;\r
+            }\r
+        }\r
+\r
+        private void tfindDoFind_Click(object sender, EventArgs e)\r
+        {\r
+            FindHistory.Clear();\r
+            startPos = null;\r
+            int len = rtbCode.SelectionLength;\r
+            rtbCode.SelectionLength = 0;\r
+            rtbCode.SelectionStart += len;\r
+            tfindFindText_TextChanged(sender, e);\r
+        }\r
+\r
+        private void tfindFindText_Leave(object sender, EventArgs e)\r
+        {\r
+            startPos = null;\r
+            FindHistory.Clear();\r
+        }\r
+\r
+        private void tfindFindNextReplace_Click(object sender, EventArgs e)\r
+        {\r
+            tfindDoFind_Click(null, null);\r
+        }\r
+\r
+        private void tfindReplace_Click(object sender, EventArgs e)\r
+        {\r
+            if (tfindFindText.Text.Length > 0 && rtbCode.SelectionLength > 0)\r
+            {\r
+                rtbCode.SelectedText = tfindReplaceText.Text;\r
+                tfindDoFind_Click(null, null);\r
+            }\r
+        }\r
+\r
+        private static string ReplaceEx(string original, string pattern, string replacement)\r
+        {\r
+            int count, position0, position1;\r
+            count = position0 = position1 = 0;\r
+            string upperString = original.ToUpper();\r
+            string upperPattern = pattern.ToUpper();\r
+            int inc = (original.Length / pattern.Length) * (replacement.Length - pattern.Length);\r
+            char[] chars = new char[original.Length + Math.Max(0, inc)];\r
+            while ((position1 = upperString.IndexOf(upperPattern, position0)) != -1)\r
+            {\r
+                for (int i = position0; i < position1; ++i)\r
+                    chars[count++] = original[i];\r
+                for (int i = 0; i < replacement.Length; ++i)\r
+                    chars[count++] = replacement[i];\r
+                position0 = position1 + pattern.Length;\r
+            }\r
+            if (position0 == 0) return original;\r
+            for (int i = position0; i < original.Length; ++i)\r
+                chars[count++] = original[i];\r
+            return new string(chars, 0, count);\r
+        }\r
+\r
+        private void tfindReplaceAll_Click(object sender, EventArgs e)\r
+        {\r
+            if (tfindFindText.Text.Length > 0)\r
+            {\r
+                if (tfindMatchCase.Checked)\r
+                {\r
+                    rtbCode.Text.Replace(tfindFindText.Text, tfindReplaceText.Text);\r
+                }\r
+                else\r
+                {\r
+                    rtbCode.Text = ReplaceEx(rtbCode.Text, tfindFindText.Text, tfindReplaceText.Text);\r
+                }\r
+            }\r
+        }\r
+\r
     }\r
 }\r
index 759d4bf..c671a83 100644 (file)
   <metadata name="ttKeyWords.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>17, 17</value>\r
   </metadata>\r
-  <metadata name="strpMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+  <metadata name="tsMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>132, 17</value>\r
   </metadata>\r
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
         s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
 </value>\r
   </data>\r
+  <data name="tbtnEdit.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
   <data name="tbtnAttach.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
         s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
 </value>\r
   </data>\r
-  <metadata name="strpStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+  <metadata name="tsStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>237, 17</value>\r
   </metadata>\r
+  <metadata name="tsFindReplace.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+    <value>331, 17</value>\r
+  </metadata>\r
+  <data name="tfindDoFind.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
+  <data name="tfindFindNextReplace.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
+  <data name="tfindReplace.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
+  <data name="tfindReplaceAll.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 0390089..de6ab90 100644 (file)
@@ -47,7 +47,7 @@ namespace Radegast.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Overrides the currentColor thread's CurrentUICulture property for all\r
+        ///   Overrides the current thread's CurrentUICulture property for all\r
         ///   resource lookups using this strongly typed resource class.\r
         /// </summary>\r
         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
@@ -116,6 +116,13 @@ namespace Radegast.Properties {
             }\r
         }\r
         \r
+        public static System.Drawing.Bitmap del_trans {\r
+            get {\r
+                object obj = ResourceManager.GetObject("del_trans", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
         public static System.Drawing.Bitmap delete_16 {\r
             get {\r
                 object obj = ResourceManager.GetObject("delete_16", resourceCulture);\r
@@ -481,8 +488,7 @@ namespace Radegast.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to llkeywords version 2\r
-        ///\r
+        ///   Looks up a localized string similar to # $Id$\r
         ///# sections\r
         ///[word .5, .1, .3]\r
         ///default             Name of default state that all scripts must have\r
@@ -495,7 +501,7 @@ namespace Radegast.Properties {
         ///string                      String type\r
         ///key                         Key type.  Use NULL_KEY to test for empty keys.\r
         ///vector                      Vector type of 3 floats.  Used to represent 3D motion, Euler angles, and color.:Access components by .x, .y. or .z\r
-        ///rotation            Rotation type of 4 floats.  Used t [rest of string was truncated]&quot;;.\r
+        ///rotation     [rest of string was truncated]&quot;;.\r
         /// </summary>\r
         public static string lsl_keywords {\r
             get {\r
index 4cf550c..f2ac3fe 100644 (file)
   <data name="lsl_keywords" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\Resources\lsl_keywords.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\r
   </data>\r
+  <data name="del_trans" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\del_trans.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 1a4ffec..a3facfe 100644 (file)
       <SubType>Component</SubType>\r
     </Compile>\r
     <Compile Include="Core\Types\StringTokenizer.cs" />\r
+    <Compile Include="Core\Types\ToolStripCheckBox.cs">\r
+      <SubType>Component</SubType>\r
+    </Compile>\r
     <Compile Include="Core\Types\TransparentButton.cs">\r
       <SubType>Component</SubType>\r
     </Compile>\r
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
     </None>\r
     <None Include="Resources\lsl_keywords.txt" />\r
+    <None Include="Resources\del_trans.png" />\r
     <Content Include="slmap.html">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </Content>\r
diff --git a/Radegast/Resources/del_trans.png b/Radegast/Resources/del_trans.png
new file mode 100644 (file)
index 0000000..39e7679
Binary files /dev/null and b/Radegast/Resources/del_trans.png differ