GetCurrentScintilla() static private méthode

static private GetCurrentScintilla ( ) : IntPtr
Résultat System.IntPtr
        private void lstComments_SelectedIndexChanged(object sender, EventArgs e)
        {
            IntPtr curScintilla = IntPtr.Zero;

            try
            {
                // highlight the commented segment
                curScintilla = PluginBase.GetCurrentScintilla();

                // get selected comment
                int intSelection = (int)lstComments.SelectedIndex;

                if (intSelection >= 0)
                {
                    Comment comment = new Comment();

                    comment = file.Comments[intSelection];

                    // get selection start and end from comment
                    int selectionStartLine = comment.StartLine;
                    int selectionStartCol  = comment.StartColumn;
                    int selectionEndLine   = comment.EndLine;
                    int selectionEndCol    = comment.EndColumn;

                    // convert to position
                    int selectionStartPos = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionStartLine, 0) + selectionStartCol;
                    int selectionEndPos   = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionEndLine, 0) + selectionEndCol;

                    // goto the starting line
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GOTOLINE, selectionEndLine + 100, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GOTOLINE, selectionStartLine - 1, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GRABFOCUS, 0, 0);

                    // select the segment
                    Win32.SendMessage(curScintilla, SciMsg.SCI_SETSELECTIONSTART, selectionStartPos, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_SETSELECTIONEND, selectionEndPos, 0);
                }
                else
                {
                    // goto the starting line
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GOTOLINE, 100, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GOTOLINE, -1, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_GRABFOCUS, 0, 0);

                    Win32.SendMessage(curScintilla, SciMsg.SCI_SETSELECTIONSTART, 0, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_SETSELECTIONEND, 0, 0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Marshal.Release(curScintilla);
            }
        }
        internal static string GetCurrentFileText(int length = -1)
        {
            if (length == -1)
            {
                length = Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETLENGTH, 0, 0).ToInt32();
            }

            var text = new StringBuilder(length + 1);

            Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETTEXT, length + 1, text);

            return(text.ToString());
        }
        private void button1_Click(object sender, EventArgs e)
        {
            int line;

            if (!int.TryParse(textBox1.Text, out line))
            {
                return;
            }
            IntPtr curScintilla = PluginBase.GetCurrentScintilla();

            Win32.SendMessage(curScintilla, SciMsg.SCI_ENSUREVISIBLE, line - 1, 0);
            Win32.SendMessage(curScintilla, SciMsg.SCI_GOTOLINE, line - 1, 0);
            Win32.SendMessage(curScintilla, SciMsg.SCI_GRABFOCUS, 0, 0);
        }
        public void bufferChanged()
        {
            IntPtr curScintilla = IntPtr.Zero;

            try
            {
                // Get current filename
                StringBuilder path = new StringBuilder(Win32.MAX_PATH);
                Win32.SendMessage(PluginBase.nppData._nppHandle, NppMsg.NPPM_GETFULLCURRENTPATH, 0, path);

                // initialize CommentFile
                file.FileName = String.Format("{0}.ano", path.ToString());

                file.LoadComments();

                bindComments();

                // highlight all comments
                curScintilla = PluginBase.GetCurrentScintilla();

                foreach (Comment comment in file.Comments)
                {
                    // get selection start and end from comment
                    int selectionStartLine = comment.StartLine;
                    int selectionStartCol  = comment.StartColumn;
                    int selectionEndLine   = comment.EndLine;
                    int selectionEndCol    = comment.EndColumn;

                    // convert to position
                    int selectionStartPos = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionStartLine, 0) + selectionStartCol;
                    int selectionEndPos   = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionEndLine, 0) + selectionEndCol;

                    // Highlight
                    Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETSTYLE, 20, 7);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETFORE, 20, 0x00FFFF);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETALPHA, 20, 32);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_SETINDICATORCURRENT, 20, 0);
                    Win32.SendMessage(curScintilla, SciMsg.SCI_INDICATORFILLRANGE, selectionStartPos, selectionEndPos - selectionStartPos);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Marshal.Release(curScintilla);
            }
        }
        private void btnAddComment_Click(object sender, EventArgs e)
        {
            IntPtr curScintilla = IntPtr.Zero;

            try
            {
                curScintilla = PluginBase.GetCurrentScintilla();

                int selectionStartPos = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_GETSELECTIONSTART, 0, 0);
                int selectionEndPos   = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_GETSELECTIONEND, 0, 0);

                int selectionStartLine = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_LINEFROMPOSITION, selectionStartPos, 0);
                int selectionEndLine   = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_LINEFROMPOSITION, selectionEndPos, 0);

                int selectionStartCol = selectionStartPos - (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionStartLine, 0);
                int selectionEndCol   = selectionEndPos - (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionEndLine, 0);

                using (frmAddComment frm = new frmAddComment())
                {
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        file.AddComment(selectionStartLine, selectionEndLine, selectionStartCol, selectionEndCol, frm.Comment.CommentText);

                        bindComments();

                        // Highlight
                        Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETSTYLE, 20, 7);
                        Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETFORE, 20, 0x00FFFF);
                        Win32.SendMessage(curScintilla, SciMsg.SCI_INDICSETALPHA, 20, 50);
                        Win32.SendMessage(curScintilla, SciMsg.SCI_SETINDICATORCURRENT, 20, 0);
                        Win32.SendMessage(curScintilla, SciMsg.SCI_INDICATORFILLRANGE, selectionStartPos, selectionEndPos - selectionStartPos);

                        // select the latest item
                        lstComments.SelectedIndex = lstComments.Items.Count - 1;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Marshal.Release(curScintilla);
            }
        }
        private void btnReport_Click(object sender, EventArgs e)
        {
            IntPtr curScintilla = IntPtr.Zero;

            try
            {
                // Get the report
                String report = file.Report();

                // Open a new document
                Win32.SendMessage(PluginBase.nppData._nppHandle, NppMsg.NPPM_MENUCOMMAND, 0, NppMenuCmd.IDM_FILE_NEW);

                // Get the current scintilla
                curScintilla = PluginBase.GetCurrentScintilla();

                Win32.SendMessage(curScintilla, SciMsg.SCI_APPENDTEXT, report.Length, report);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void btnDeleteComment_Click(object sender, EventArgs e)
        {
            IntPtr curScintilla = IntPtr.Zero;

            try
            {
                int intSelection = (int)lstComments.SelectedIndex;

                Comment comment = new Comment();

                comment = file.Comments[intSelection];

                // get selection start and end from comment
                int selectionStartLine = comment.StartLine;
                int selectionStartCol  = comment.StartColumn;
                int selectionEndLine   = comment.EndLine;
                int selectionEndCol    = comment.EndColumn;

                // convert to position
                curScintilla = PluginBase.GetCurrentScintilla();
                int selectionStartPos = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionStartLine, 0) + selectionStartCol;
                int selectionEndPos   = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_POSITIONFROMLINE, selectionEndLine, 0) + selectionEndCol;

                // Remove highlight
                Win32.SendMessage(curScintilla, SciMsg.SCI_INDICATORCLEARRANGE, selectionStartPos, selectionEndPos - selectionStartPos);

                file.DeleteComment(comment);

                bindComments();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Marshal.Release(curScintilla);
            }
        }
 private void frmGoToLine_KeyDown(object sender, KeyEventArgs e)
 {
     if ((e.KeyData == Keys.Return) || (e.Alt && (e.KeyCode == Keys.G)))
     {
         button1.PerformClick();
         e.Handled = true;
     }
     else if (e.KeyData == Keys.Escape)
     {
         Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GRABFOCUS, 0, 0);
     }
     else if (e.KeyCode == Keys.Tab)
     {
         Control next = GetNextControl((Control)sender, !e.Shift);
         while ((next == null) || (!next.TabStop))
         {
             next = GetNextControl(next, !e.Shift);
         }
         next.Focus();
         e.Handled = true;
     }
 }
Exemple #9
0
        public static string GetDocumentText(IntPtr curScintilla)
        {
            IntPtr hCurrScintilla = PluginBase.GetCurrentScintilla();
            int    textLen        = (int)Win32.SendMessage(hCurrScintilla, SciMsg.SCI_GETSELTEXT, 0, 0);
            IntPtr ptrText        = Marshal.AllocHGlobal(textLen);

            Win32.SendMessage(hCurrScintilla, SciMsg.SCI_GETSELTEXT, 0, ptrText);
            // get it as string but truncated..
            string s = Marshal.PtrToStringAnsi(ptrText);

            // or everything.. well as byte array
            byte[] b = new byte[textLen];
            Marshal.Copy(ptrText, b, 0, textLen);

            Marshal.FreeHGlobal(ptrText);
            return(s);

            //int start = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_GETSELECTIONNEND, 0, 0);
            //int end = (int)Win32.SendMessage(curScintilla, SciMsg.SCI_GETSELECTIONNEND, 0, 0);
            //int textLen2 = end - start;
            //StringBuilder sb = new StringBuilder();
            //Win32.SendMessage(curScintilla, SciMsg.SCI_GETSELTEXT, 0, sb);
            //return sb.ToString();
        }
Exemple #10
0
        internal void CharAdded(char c)
        {
            try
            {
                // Add 'end' after certain statements
                if (((eolMode == SciMsg.SC_EOL_CR || eolMode == SciMsg.SC_EOL_CRLF) && c == '\n') || (eolMode == SciMsg.SC_EOL_LF && c == '\r'))
                {
                    var curLineBuilder = new StringBuilder(512); //TODO: get line length from Scintilla
                    var lineNum        = (int)Win32.SendMessage(pluginBase.nppData._nppHandle, NppMsg.NPPM_GETCURRENTLINE, 0, 0);
                    Win32.SendMessage(pluginBase.GetCurrentScintilla(), SciMsg.SCI_GETLINE, lineNum - 1, curLineBuilder);
                    var curLine = curLineBuilder.ToString();

                    var match = endsRegex.Match(curLine);
                    if (match.Success)
                    {
                        lastAutoInsertLine = -1;
                        Win32.SendMessage(pluginBase.GetCurrentScintilla(), SciMsg.SCI_INSERTTEXT, -1, string.Format("{0}{1}end", eol, match.Groups[1].Value));
                        pluginBase.SendScintillaMessage(SciMsg.SCI_TAB);
                    }
                }
                // add closing array bracket
                else if (c == '[')
                {
                    var curLineBuilder = new StringBuilder(512); //TODO: get line length from Scintilla
                    var lineNum        = (int)Win32.SendMessage(pluginBase.nppData._nppHandle, NppMsg.NPPM_GETCURRENTLINE, 0, 0);
                    var linePos        = pluginBase.SendScintillaMessage(SciMsg.SCI_POSITIONFROMLINE, lineNum);
                    Win32.SendMessage(pluginBase.GetCurrentScintilla(), SciMsg.SCI_GETLINE, lineNum, curLineBuilder);
                    var curLine = curLineBuilder.ToString();
                    var curPos  = pluginBase.SendScintillaMessage(SciMsg.SCI_GETCURRENTPOS);

                    if (AreMoreOf('[', ']', curLine)) // if there are more opening brackets than closing ones
                    {
                        var posInLine = curPos - linePos;
                        if (posInLine == curLine.Length - eol.Length || (posInLine < curLine.Length && curLine[posInLine] == ' ')) // only add if caret is left of whitespace, or at EOL
                        {
                            lastAutoInsertLine = lineNum;
                            Win32.SendMessage(pluginBase.GetCurrentScintilla(), SciMsg.SCI_INSERTTEXT, -1, "]");
                        }
                    }
                }
                // ignore closing array bracket if we already auto-inserted it
                else if (c == ']')
                {
                    var curLineBuilder = new StringBuilder(512); //TODO: get line length from Scintilla
                    var lineNum        = (int)Win32.SendMessage(pluginBase.nppData._nppHandle, NppMsg.NPPM_GETCURRENTLINE, 0, 0);
                    if (lastAutoInsertLine != lineNum)
                    {
                        return;
                    }
                    var linePos = pluginBase.SendScintillaMessage(SciMsg.SCI_POSITIONFROMLINE, lineNum);
                    Win32.SendMessage(pluginBase.GetCurrentScintilla(), SciMsg.SCI_GETLINE, lineNum, curLineBuilder);
                    var curLine = curLineBuilder.ToString();
                    var curPos  = pluginBase.SendScintillaMessage(SciMsg.SCI_GETCURRENTPOS);

                    if (AreMoreOf(']', '[', curLine)) // if there are more closing brackets than opening ones
                    {
                        var posInLine = curPos - linePos;
                        if (posInLine < curLine.Length && curLine[posInLine] == ']') // only add if caret is left of whitespace, or at EOL
                        {
                            pluginBase.SendScintillaMessage(SciMsg.SCI_CHARRIGHT);
                            pluginBase.SendScintillaMessage(SciMsg.SCI_DELETEBACK);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error while handling character key press: " + e.Message + "\r\n" + e.StackTrace, "Ruby. Boo!");
            }
        }