mirror of
https://github.com/TES3MP/TES3MP.git
synced 2025-09-29 16:11:37 -04:00
Merge pull request #210 from OpenMW/master
Add OpenMW commits up to 3 May 2017
This commit is contained in:
commit
79691254a4
@ -152,10 +152,12 @@ void CSMPrefs::State::declare()
|
|||||||
setRange (0, 10000);
|
setRange (0, 10000);
|
||||||
declareInt ("error-height", "Initial height of the error panel", 100).
|
declareInt ("error-height", "Initial height of the error panel", 100).
|
||||||
setRange (100, 10000);
|
setRange (100, 10000);
|
||||||
|
declareBool ("highlight-occurrences", "Highlight other occurrences of selected names", true);
|
||||||
declareSeparator();
|
declareSeparator();
|
||||||
declareColour ("colour-int", "Highlight Colour: Integer Literals", QColor ("darkmagenta"));
|
declareColour ("colour-int", "Highlight Colour: Integer Literals", QColor ("darkmagenta"));
|
||||||
declareColour ("colour-float", "Highlight Colour: Float Literals", QColor ("magenta"));
|
declareColour ("colour-float", "Highlight Colour: Float Literals", QColor ("magenta"));
|
||||||
declareColour ("colour-name", "Highlight Colour: Names", QColor ("grey"));
|
declareColour ("colour-name", "Highlight Colour: Names", QColor ("grey"));
|
||||||
|
declareColour ("colour-highlight", "Highlight Colour: Highlighting", QColor("palegreen"));
|
||||||
declareColour ("colour-keyword", "Highlight Colour: Keywords", QColor ("red"));
|
declareColour ("colour-keyword", "Highlight Colour: Keywords", QColor ("red"));
|
||||||
declareColour ("colour-special", "Highlight Colour: Special Characters", QColor ("darkorange"));
|
declareColour ("colour-special", "Highlight Colour: Special Characters", QColor ("darkorange"));
|
||||||
declareColour ("colour-comment", "Highlight Colour: Comments", QColor ("green"));
|
declareColour ("colour-comment", "Highlight Colour: Comments", QColor ("green"));
|
||||||
|
@ -51,6 +51,7 @@ CSVWorld::ScriptEdit::ScriptEdit(
|
|||||||
mDefaultFont(font()),
|
mDefaultFont(font()),
|
||||||
mMonoFont(QFont("Monospace")),
|
mMonoFont(QFont("Monospace")),
|
||||||
mTabCharCount(4),
|
mTabCharCount(4),
|
||||||
|
mMarkOccurrences(true),
|
||||||
mDocument(document),
|
mDocument(document),
|
||||||
mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive)
|
mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive)
|
||||||
{
|
{
|
||||||
@ -88,6 +89,8 @@ CSVWorld::ScriptEdit::ScriptEdit(
|
|||||||
<<CSMWorld::UniversalId::Type_Script
|
<<CSMWorld::UniversalId::Type_Script
|
||||||
<<CSMWorld::UniversalId::Type_Region;
|
<<CSMWorld::UniversalId::Type_Region;
|
||||||
|
|
||||||
|
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(markOccurrences()));
|
||||||
|
|
||||||
mCommentAction = new QAction (tr ("Comment Selection"), this);
|
mCommentAction = new QAction (tr ("Comment Selection"), this);
|
||||||
connect(mCommentAction, SIGNAL (triggered()), this, SLOT (commentSelection()));
|
connect(mCommentAction, SIGNAL (triggered()), this, SLOT (commentSelection()));
|
||||||
CSMPrefs::Shortcut *commentShortcut = new CSMPrefs::Shortcut("script-editor-comment", this);
|
CSMPrefs::Shortcut *commentShortcut = new CSMPrefs::Shortcut("script-editor-comment", this);
|
||||||
@ -242,6 +245,13 @@ void CSVWorld::ScriptEdit::settingChanged(const CSMPrefs::Setting *setting)
|
|||||||
mTabCharCount = setting->toInt();
|
mTabCharCount = setting->toInt();
|
||||||
setTabWidth();
|
setTabWidth();
|
||||||
}
|
}
|
||||||
|
else if (*setting == "Scripts/highlight-occurrences")
|
||||||
|
{
|
||||||
|
mMarkOccurrences = setting->isTrue();
|
||||||
|
mHighlighter->setMarkedWord("");
|
||||||
|
updateHighlighting();
|
||||||
|
mHighlighter->setMarkOccurrences(mMarkOccurrences);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptEdit::idListChanged()
|
void CSVWorld::ScriptEdit::idListChanged()
|
||||||
@ -296,6 +306,25 @@ void CSVWorld::ScriptEdit::updateLineNumberArea(const QRect &rect, int dy)
|
|||||||
updateLineNumberAreaWidth(0);
|
updateLineNumberAreaWidth(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptEdit::markOccurrences()
|
||||||
|
{
|
||||||
|
if (mMarkOccurrences)
|
||||||
|
{
|
||||||
|
QTextCursor cursor = textCursor();
|
||||||
|
|
||||||
|
// prevent infinite recursion with cursor.select(),
|
||||||
|
// which ends up calling this function again
|
||||||
|
// could be fixed with blockSignals, but mDocument is const
|
||||||
|
disconnect(this, SIGNAL(cursorPositionChanged()), this, 0);
|
||||||
|
cursor.select(QTextCursor::WordUnderCursor);
|
||||||
|
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(markOccurrences()));
|
||||||
|
|
||||||
|
QString word = cursor.selectedText();
|
||||||
|
mHighlighter->setMarkedWord(word.toStdString());
|
||||||
|
mHighlighter->rehighlight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptEdit::commentSelection()
|
void CSVWorld::ScriptEdit::commentSelection()
|
||||||
{
|
{
|
||||||
QTextCursor begin = textCursor();
|
QTextCursor begin = textCursor();
|
||||||
|
@ -55,6 +55,7 @@ namespace CSVWorld
|
|||||||
QFont mDefaultFont;
|
QFont mDefaultFont;
|
||||||
QFont mMonoFont;
|
QFont mMonoFont;
|
||||||
int mTabCharCount;
|
int mTabCharCount;
|
||||||
|
bool mMarkOccurrences;
|
||||||
QAction *mCommentAction;
|
QAction *mCommentAction;
|
||||||
QAction *mUncommentAction;
|
QAction *mUncommentAction;
|
||||||
|
|
||||||
@ -117,9 +118,12 @@ namespace CSVWorld
|
|||||||
|
|
||||||
void updateLineNumberArea(const QRect &, int);
|
void updateLineNumberArea(const QRect &, int);
|
||||||
|
|
||||||
|
void markOccurrences();
|
||||||
|
|
||||||
void commentSelection();
|
void commentSelection();
|
||||||
|
|
||||||
void uncommentSelection();
|
void uncommentSelection();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class LineNumberArea : public QWidget
|
class LineNumberArea : public QWidget
|
||||||
|
@ -72,7 +72,11 @@ void CSVWorld::ScriptHighlighter::highlight (const Compiler::TokenLoc& loc, Type
|
|||||||
// compensate for bug in Compiler::Scanner (position of token is the character after the token)
|
// compensate for bug in Compiler::Scanner (position of token is the character after the token)
|
||||||
index -= length;
|
index -= length;
|
||||||
|
|
||||||
setFormat (index, length, mScheme[type]);
|
QTextCharFormat scheme = mScheme[type];
|
||||||
|
if (mMarkOccurrences && type == Type_Name && loc.mLiteral == mMarkedWord)
|
||||||
|
scheme.merge(mScheme[Type_Highlight]);
|
||||||
|
|
||||||
|
setFormat (index, length, scheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSVWorld::ScriptHighlighter::ScriptHighlighter (const CSMWorld::Data& data, Mode mode,
|
CSVWorld::ScriptHighlighter::ScriptHighlighter (const CSMWorld::Data& data, Mode mode,
|
||||||
@ -105,6 +109,16 @@ void CSVWorld::ScriptHighlighter::highlightBlock (const QString& text)
|
|||||||
catch (...) {} // ignore syntax errors
|
catch (...) {} // ignore syntax errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptHighlighter::setMarkOccurrences(bool flag)
|
||||||
|
{
|
||||||
|
mMarkOccurrences = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVWorld::ScriptHighlighter::setMarkedWord(const std::string& name)
|
||||||
|
{
|
||||||
|
mMarkedWord = name;
|
||||||
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptHighlighter::invalidateIds()
|
void CSVWorld::ScriptHighlighter::invalidateIds()
|
||||||
{
|
{
|
||||||
mContext.invalidateIds();
|
mContext.invalidateIds();
|
||||||
@ -117,7 +131,7 @@ bool CSVWorld::ScriptHighlighter::settingChanged (const CSMPrefs::Setting *setti
|
|||||||
static const char *const colours[Type_Id+2] =
|
static const char *const colours[Type_Id+2] =
|
||||||
{
|
{
|
||||||
"colour-int", "colour-float", "colour-name", "colour-keyword",
|
"colour-int", "colour-float", "colour-name", "colour-keyword",
|
||||||
"colour-special", "colour-comment", "colour-id",
|
"colour-special", "colour-comment", "colour-highlight", "colour-id",
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -125,7 +139,10 @@ bool CSVWorld::ScriptHighlighter::settingChanged (const CSMPrefs::Setting *setti
|
|||||||
if (setting->getKey()==colours[i])
|
if (setting->getKey()==colours[i])
|
||||||
{
|
{
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (setting->toColor());
|
if (i == Type_Highlight)
|
||||||
|
format.setBackground (setting->toColor());
|
||||||
|
else
|
||||||
|
format.setForeground (setting->toColor());
|
||||||
mScheme[static_cast<Type> (i)] = format;
|
mScheme[static_cast<Type> (i)] = format;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define CSV_WORLD_SCRIPTHIGHLIGHTER_H
|
#define CSV_WORLD_SCRIPTHIGHLIGHTER_H
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <QSyntaxHighlighter>
|
#include <QSyntaxHighlighter>
|
||||||
|
|
||||||
@ -30,7 +31,8 @@ namespace CSVWorld
|
|||||||
Type_Keyword = 3,
|
Type_Keyword = 3,
|
||||||
Type_Special = 4,
|
Type_Special = 4,
|
||||||
Type_Comment = 5,
|
Type_Comment = 5,
|
||||||
Type_Id = 6
|
Type_Highlight = 6,
|
||||||
|
Type_Id = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Mode
|
enum Mode
|
||||||
@ -47,6 +49,8 @@ namespace CSVWorld
|
|||||||
CSMWorld::ScriptContext mContext;
|
CSMWorld::ScriptContext mContext;
|
||||||
std::map<Type, QTextCharFormat> mScheme;
|
std::map<Type, QTextCharFormat> mScheme;
|
||||||
Mode mMode;
|
Mode mMode;
|
||||||
|
bool mMarkOccurrences;
|
||||||
|
std::string mMarkedWord;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -91,6 +95,10 @@ namespace CSVWorld
|
|||||||
|
|
||||||
virtual void highlightBlock (const QString& text);
|
virtual void highlightBlock (const QString& text);
|
||||||
|
|
||||||
|
void setMarkOccurrences(bool);
|
||||||
|
|
||||||
|
void setMarkedWord(const std::string& name);
|
||||||
|
|
||||||
void invalidateIds();
|
void invalidateIds();
|
||||||
|
|
||||||
bool settingChanged (const CSMPrefs::Setting *setting);
|
bool settingChanged (const CSMPrefs::Setting *setting);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user