X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=tools%2FPyEditor%2Fsrc%2FPyEditor_Editor.cxx;h=6fe34f1960928ee616d6aa81d686922843803007;hb=0cba7a96b2b1a43c3ad029b375cffcee118a1aa4;hp=fff2e04254d89b13770fcb7b767597ef27413cd4;hpb=91cc8846bfa36302f7ade6cb8aa380f03e90423e;p=modules%2Fgui.git diff --git a/tools/PyEditor/src/PyEditor_Editor.cxx b/tools/PyEditor/src/PyEditor_Editor.cxx index fff2e0425..6fe34f196 100644 --- a/tools/PyEditor/src/PyEditor_Editor.cxx +++ b/tools/PyEditor/src/PyEditor_Editor.cxx @@ -23,11 +23,15 @@ #include "PyEditor_Editor.h" #include "PyEditor_LineNumberArea.h" #include "PyEditor_PyHighlighter.h" +#include "PyEditor_Completer.h" #include "PyEditor_Settings.h" +#include "PyEditor_Keywords.h" #include #include +#include + /*! \class PyEditor_Editor \brief Widget to show / edit Python scripts. @@ -38,20 +42,28 @@ \param parent parent widget */ PyEditor_Editor::PyEditor_Editor( QWidget* parent ) - : QPlainTextEdit( parent ) + : QPlainTextEdit( parent ), + myCompletionPolicy( Always ) { + myStdKeywords = new PyEditor_StandardKeywords( this ); + myUserKeywords = new PyEditor_Keywords( this ); + myUserKeywords->append( "print", 0, Qt::red ); + // Set up line number area myLineNumberArea = new PyEditor_LineNumberArea( this ); myLineNumberArea->setMouseTracking( true ); // Set up syntax highighter - mySyntaxHighlighter = new PyEditor_PyHighlighter( this->document() ); + mySyntaxHighlighter = new PyEditor_PyHighlighter( this->document(), + myStdKeywords, myUserKeywords ); // Set-up settings PyEditor_Settings* settings = PyEditor_Settings::settings(); if ( settings ) setSettings( *settings ); + myCompleter = new PyEditor_Completer( this, myStdKeywords, myUserKeywords ); + // Connect signals connect( this, SIGNAL( blockCountChanged( int ) ), this, SLOT( updateLineNumberAreaWidth( int ) ) ); connect( this, SIGNAL( updateRequest( QRect, int ) ), this, SLOT( updateLineNumberArea( QRect, int ) ) ); @@ -98,6 +110,9 @@ void PyEditor_Editor::setSettings( const PyEditor_Settings& settings ) // Set size white spaces setTabStopWidth( mySettings.tabSize() * 10 ); + // Set completion policy + setCompletionPolicy( (CompletionPolicy)mySettings.completionPolicy() ); + // Update current line highlight updateHighlightCurrentLine(); @@ -108,6 +123,54 @@ void PyEditor_Editor::setSettings( const PyEditor_Settings& settings ) viewport()->update(); } +/*! + \brief Gets the current completion policy + \return completion policy +*/ +PyEditor_Editor::CompletionPolicy PyEditor_Editor::completionPolicy() const +{ + return myCompletionPolicy; +} + +/*! + \brief Sets the current completion policy + \param policy completion policy +*/ +void PyEditor_Editor::setCompletionPolicy( const CompletionPolicy& policy ) +{ + myCompletionPolicy = policy; +} + +/*! + \brief Gets the all user keywords. + \param event key press event + \return keyword string list +*/ +QStringList PyEditor_Editor::keywords() const +{ + return myUserKeywords->keywords(); +} + +/*! + \brief Add the user keywords. + \param kws keywords string list + \param type keywords type + \param color keywords color +*/ +void PyEditor_Editor::appendKeywords( const QStringList& kws, int type, const QColor& color ) +{ + myUserKeywords->append( kws, type, color ); +} + +/*! + \brief Remove the user keywords. + \param kws keywords string list +*/ +void PyEditor_Editor::removeKeywords( const QStringList& kws ) +{ + myUserKeywords->remove( kws ); +} + /*! Delete current selection contents. */ @@ -151,6 +214,12 @@ void PyEditor_Editor::keyPressEvent( QKeyEvent* event ) aCursor.endEditBlock(); event->accept(); } + else if ( aKey == Qt::Key_Space && aCtrl && !aShift && + ( completionPolicy() == Manual || completionPolicy() == Always ) ) + { + myCompleter->perform(); + event->accept(); + } else if ( event == QKeySequence::MoveToStartOfLine || event == QKeySequence::SelectStartOfLine ) { QTextCursor aCursor = this->textCursor(); @@ -824,3 +893,21 @@ QString PyEditor_Editor::text() const { return toPlainText(); } + +/*! + \brief Get user keywords dictionary. + \return keywords dictionary +*/ +PyEditor_Keywords* PyEditor_Editor::userKeywords() const +{ + return myUserKeywords; +} + +/*! + \brief Get standard keywords dictionary. + \return keywords dictionary +*/ +PyEditor_Keywords* PyEditor_Editor::standardKeywords() const +{ + return myStdKeywords; +}