Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge pull request #1507 from NathanW2/code_editor
Code editor using QScintilla. Thanks to Salvatore Larosa for the initial work.
- Loading branch information
Showing
with
603 additions
and 61 deletions.
- +4 −0 python/gui/gui.sip
- +22 −0 python/gui/qgscodeeditor.sip
- +15 −0 python/gui/qgscodeeditorpython.sip
- +10 −0 python/gui/qgscodeeditorsql.sip
- +3 −3 src/app/qgsprojectproperties.cpp
- +1 −0 src/core/CMakeLists.txt
- +7 −0 src/gui/CMakeLists.txt
- +139 −0 src/gui/qgscodeeditor.cpp
- +78 −0 src/gui/qgscodeeditor.h
- +136 −0 src/gui/qgscodeeditorpython.cpp
- +62 −0 src/gui/qgscodeeditorpython.h
- +47 −0 src/gui/qgscodeeditorsql.cpp
- +41 −0 src/gui/qgscodeeditorsql.h
- +8 −8 src/gui/qgsexpressionbuilderwidget.cpp
- +10 −29 src/ui/qgsexpressionbuilder.ui
- +20 −21 src/ui/qgsprojectpropertiesbase.ui
@@ -0,0 +1,22 @@ | ||
class QgsCodeEditor: QsciScintilla | ||
{ | ||
%TypeHeaderCode | ||
#include <qgscodeeditor.h> | ||
%End | ||
|
||
public: | ||
QgsCodeEditor( QWidget *parent /TransferThis/ = 0, QString title = "" , bool folding = false, bool margin = false ); | ||
~QgsCodeEditor(); | ||
|
||
/** Set margin visible state | ||
* @param margin Set margin in the editor | ||
*/ | ||
void setMarginVisible( bool margin ); | ||
bool marginVisible(); | ||
|
||
/** Set folding visible state | ||
* @param folding Set folding in the editor | ||
*/ | ||
void setFoldingVisible( bool folding); | ||
bool foldingVisible(); | ||
}; |
@@ -0,0 +1,15 @@ | ||
class QgsCodeEditorPython: QgsCodeEditor | ||
{ | ||
%TypeHeaderCode | ||
#include <qgscodeeditorpython.h> | ||
%End | ||
|
||
public: | ||
QgsCodeEditorPython( QWidget *parent /TransferThis/ = 0, const QList<QString> &filenames = QList<QString>() ); | ||
~QgsCodeEditorPython(); | ||
|
||
void loadAPIs(const QList<QString> &filenames ); | ||
|
||
bool loadScript( const QString &script ); | ||
|
||
}; |
@@ -0,0 +1,10 @@ | ||
class QgsCodeEditorSQL: QgsCodeEditor | ||
{ | ||
%TypeHeaderCode | ||
#include <qgscodeeditorsql.h> | ||
%End | ||
|
||
public: | ||
QgsCodeEditorSQL( QWidget *parent /TransferThis/ = 0 ); | ||
~QgsCodeEditorSQL(); | ||
}; |
@@ -0,0 +1,139 @@ | ||
/*************************************************************************** | ||
qgscodeeditor.cpp - A base code editor for QGIS and plugins. Provides | ||
a base editor using QScintilla for editors | ||
-------------------------------------- | ||
Date : 06-Oct-2013 | ||
Copyright : (C) 2013 by Salvatore Larosa | ||
Email : lrssvtml (at) gmail (dot) com | ||
*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#include "qgscodeeditor.h" | ||
|
||
#include <QSettings> | ||
#include <QWidget> | ||
#include <QFont> | ||
#include <QDebug> | ||
|
||
QgsCodeEditor::QgsCodeEditor( QWidget *parent, QString title, bool folding, bool margin ) | ||
: QsciScintilla( parent ) | ||
, mWidgetTitle( title ) | ||
, mFolding( folding ) | ||
, mMargin( margin ) | ||
{ | ||
if ( !parent && mWidgetTitle.isEmpty() ) | ||
{ | ||
setWindowTitle( "QScintilla2 Text Editor" ); | ||
setMinimumSize( 800, 300 ); | ||
} | ||
else | ||
{ | ||
setWindowTitle( mWidgetTitle ); | ||
} | ||
setSciWidget(); | ||
setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); | ||
} | ||
|
||
QgsCodeEditor::~QgsCodeEditor() | ||
{ | ||
} | ||
|
||
void QgsCodeEditor::setSciWidget() | ||
{ | ||
setUtf8( true ); | ||
setCaretLineVisible( true ); | ||
setCaretLineBackgroundColor( QColor( "#fcf3ed" ) ); | ||
|
||
setBraceMatching( QsciScintilla::SloppyBraceMatch ); | ||
setMatchedBraceBackgroundColor( QColor( "#b7f907" ) ); | ||
// whether margin will be shown | ||
setMarginVisible( mMargin ); | ||
// whether margin will be shown | ||
setFoldingVisible( mFolding ); | ||
// indentation | ||
setAutoIndent( true ); | ||
setIndentationWidth( 4 ); | ||
setTabIndents( true ); | ||
setBackspaceUnindents( true ); | ||
setTabWidth( 4 ); | ||
// autocomplete | ||
setAutoCompletionThreshold( 2 ); | ||
setAutoCompletionSource( QsciScintilla::AcsAPIs ); | ||
} | ||
|
||
void QgsCodeEditor::setTitle( QString title ) | ||
{ | ||
setWindowTitle( title ); | ||
} | ||
|
||
void QgsCodeEditor::setMarginVisible( bool margin ) | ||
{ | ||
mMargin = margin; | ||
if ( margin ) | ||
{ | ||
QFont marginFont( "Courier", 10 ); | ||
setMarginLineNumbers( 1, true ); | ||
setMarginsFont( marginFont ); | ||
setMarginWidth( 1, "00000" ); | ||
setMarginsForegroundColor( QColor( "#3E3EE3" ) ); | ||
setMarginsBackgroundColor( QColor( "#f9f9f9" ) ); | ||
} | ||
else | ||
{ | ||
setMarginWidth( 0, 0 ); | ||
setMarginWidth( 1, 0 ); | ||
setMarginWidth( 2, 0 ); | ||
} | ||
} | ||
|
||
void QgsCodeEditor::setFoldingVisible( bool folding ) | ||
{ | ||
mFolding = folding; | ||
if ( folding ) | ||
{ | ||
setFolding( QsciScintilla::PlainFoldStyle ); | ||
setFoldMarginColors( QColor( "#f4f4f4" ), QColor( "#f4f4f4" ) ); | ||
} | ||
else | ||
{ | ||
setFolding( QsciScintilla::NoFoldStyle ); | ||
} | ||
} | ||
|
||
// Settings for font and fontsize | ||
bool QgsCodeEditor::isFixedPitch( const QFont& font ) | ||
{ | ||
const QFontInfo fi( font ); | ||
return fi.fixedPitch(); | ||
} | ||
|
||
QFont QgsCodeEditor::getMonospaceFont() | ||
{ | ||
QFont font( "monospace" ); | ||
if ( isFixedPitch( font ) ) | ||
{ | ||
return font; | ||
} | ||
font.setStyleHint( QFont::Monospace ); | ||
if ( isFixedPitch( font ) ) | ||
{ | ||
return font; | ||
} | ||
font.setStyleHint( QFont::TypeWriter ); | ||
if ( isFixedPitch( font ) ) | ||
{ | ||
return font; | ||
} | ||
font.setFamily( "courier" ); | ||
if ( isFixedPitch( font ) ) | ||
{ | ||
return font; | ||
} | ||
return font; | ||
} |
@@ -0,0 +1,78 @@ | ||
/*************************************************************************** | ||
qgscodeeditor.h - A base code editor for QGIS and plugins. Provides | ||
a base editor using QScintilla for editors | ||
-------------------------------------- | ||
Date : 06-Oct-2013 | ||
Copyright : (C) 2013 by Salvatore Larosa | ||
Email : lrssvtml (at) gmail (dot) com | ||
*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#ifndef QGSCODEEDITOR_H | ||
#define QGSCODEEDITOR_H | ||
|
||
#include <QString> | ||
// qscintilla includes | ||
#include <Qsci/qsciapis.h> | ||
|
||
|
||
class QWidget; | ||
|
||
/** \ingroup gui | ||
* A text editor based on QScintilla2. | ||
* \note added in 2.6 | ||
*/ | ||
class GUI_EXPORT QgsCodeEditor : public QsciScintilla | ||
{ | ||
Q_OBJECT | ||
|
||
public: | ||
/** | ||
* Construct a new code editor. | ||
* | ||
* @param parent The parent QWidget | ||
* @param title The title to show in the code editor dialog | ||
* @param folding False: Enable margin for code editor | ||
* @param margin False: Enable folding for code editor | ||
* @note added in 2.6 | ||
*/ | ||
QgsCodeEditor( QWidget *parent = 0, QString title = "" , bool folding = false, bool margin = false ); | ||
~QgsCodeEditor(); | ||
|
||
/** Set the widget title */ | ||
void setTitle( QString ); | ||
|
||
/** Set margin visible state | ||
* @param margin Set margin in the editor | ||
*/ | ||
void setMarginVisible( bool margin ); | ||
bool marginVisible() { return mMargin; } | ||
|
||
/** Set folding visible state | ||
* @param folding Set folding in the editor | ||
*/ | ||
void setFoldingVisible( bool folding ); | ||
bool foldingVisible() { return mFolding; } | ||
|
||
protected: | ||
|
||
bool isFixedPitch( const QFont& font ); | ||
|
||
QFont getMonospaceFont(); | ||
|
||
private: | ||
|
||
void setSciWidget(); | ||
|
||
QString mWidgetTitle; | ||
bool mFolding; | ||
bool mMargin; | ||
}; | ||
|
||
#endif |
Oops, something went wrong.