mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 20:49:41 +00:00
Allow users to select syntax highlighting colours. Should resolve Feature #2507.
This commit is contained in:
parent
b6878c2e0c
commit
9cbda0ffad
5 changed files with 182 additions and 17 deletions
|
@ -262,6 +262,42 @@ void CSMSettings::UserSettings::buildSettingModelDefaults()
|
||||||
Setting *monoFont = createSetting (Type_CheckBox, "mono-font", "Use monospace font");
|
Setting *monoFont = createSetting (Type_CheckBox, "mono-font", "Use monospace font");
|
||||||
monoFont->setDefaultValue ("true");
|
monoFont->setDefaultValue ("true");
|
||||||
monoFont->setToolTip ("Whether to use monospaced fonts on script edit subview.");
|
monoFont->setToolTip ("Whether to use monospaced fonts on script edit subview.");
|
||||||
|
|
||||||
|
QString tooltip =
|
||||||
|
"\n#RGB (each of R, G, and B is a single hex digit)"
|
||||||
|
"\n#RRGGBB"
|
||||||
|
"\n#RRRGGGBBB"
|
||||||
|
"\n#RRRRGGGGBBBB"
|
||||||
|
"\nA name from the list of colors defined in the list of SVG color keyword names."
|
||||||
|
"\nX11 color names may also work.";
|
||||||
|
|
||||||
|
Setting *formatInt = createSetting (Type_LineEdit, "colour-int", "Highlight Colour: Int");
|
||||||
|
formatInt->setDefaultValues (QStringList() << "Dark magenta");
|
||||||
|
formatInt->setToolTip ("(Default: Green) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatFloat = createSetting (Type_LineEdit, "colour-float", "Highlight Colour: Float");
|
||||||
|
formatFloat->setDefaultValues (QStringList() << "Magenta");
|
||||||
|
formatFloat->setToolTip ("(Default: Magenta) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatName = createSetting (Type_LineEdit, "colour-name", "Highlight Colour: Name");
|
||||||
|
formatName->setDefaultValues (QStringList() << "Gray");
|
||||||
|
formatName->setToolTip ("(Default: Gray) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatKeyword = createSetting (Type_LineEdit, "colour-keyword", "Highlight Colour: Keyword");
|
||||||
|
formatKeyword->setDefaultValues (QStringList() << "Red");
|
||||||
|
formatKeyword->setToolTip ("(Default: Red) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatSpecial = createSetting (Type_LineEdit, "colour-special", "Highlight Colour: Special");
|
||||||
|
formatSpecial->setDefaultValues (QStringList() << "Dark yellow");
|
||||||
|
formatSpecial->setToolTip ("(Default: Dark yellow) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatComment = createSetting (Type_LineEdit, "colour-comment", "Highlight Colour: Comment");
|
||||||
|
formatComment->setDefaultValues (QStringList() << "Green");
|
||||||
|
formatComment->setToolTip ("(Default: Green) Use one of the following formats:" + tooltip);
|
||||||
|
|
||||||
|
Setting *formatId = createSetting (Type_LineEdit, "colour-id", "Highlight Colour: Id");
|
||||||
|
formatId->setDefaultValues (QStringList() << "Blue");
|
||||||
|
formatId->setToolTip ("(Default: Blue) Use one of the following formats:" + tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -92,13 +92,16 @@ CSVWorld::ScriptEdit::ScriptEdit (const CSMDoc::Document& document, ScriptHighli
|
||||||
|
|
||||||
connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting()));
|
connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting()));
|
||||||
|
|
||||||
|
CSMSettings::UserSettings &userSettings = CSMSettings::UserSettings::instance();
|
||||||
|
connect (&userSettings, SIGNAL (userSettingUpdated(const QString &, const QStringList &)),
|
||||||
|
this, SLOT (updateUserSetting (const QString &, const QStringList &)));
|
||||||
|
|
||||||
mUpdateTimer.setSingleShot (true);
|
mUpdateTimer.setSingleShot (true);
|
||||||
|
|
||||||
// TODO: provide a font selector dialogue
|
// TODO: provide a font selector dialogue
|
||||||
mMonoFont.setStyleHint(QFont::TypeWriter);
|
mMonoFont.setStyleHint(QFont::TypeWriter);
|
||||||
std::string useMonoFont =
|
|
||||||
CSMSettings::UserSettings::instance().setting("script-editor/mono-font", "true").toStdString();
|
if (userSettings.setting("script-editor/mono-font", "true") == "true")
|
||||||
if (useMonoFont == "true")
|
|
||||||
setFont(mMonoFont);
|
setFont(mMonoFont);
|
||||||
|
|
||||||
mLineNumberArea = new LineNumberArea(this);
|
mLineNumberArea = new LineNumberArea(this);
|
||||||
|
@ -107,10 +110,13 @@ CSVWorld::ScriptEdit::ScriptEdit (const CSMDoc::Document& document, ScriptHighli
|
||||||
connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
|
connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
|
||||||
connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
|
connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
|
||||||
|
|
||||||
std::string showStatusBar =
|
showLineNum(userSettings.settingValue("script-editor/show-linenum") == "true");
|
||||||
CSMSettings::UserSettings::instance().settingValue("script-editor/show-linenum").toStdString();
|
}
|
||||||
|
|
||||||
showLineNum(showStatusBar == "true");
|
void CSVWorld::ScriptEdit::updateUserSetting (const QString &name, const QStringList &list)
|
||||||
|
{
|
||||||
|
if (mHighlighter->updateUserSetting (name, list))
|
||||||
|
updateHighlighting();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::ScriptEdit::showLineNum(bool show)
|
void CSVWorld::ScriptEdit::showLineNum(bool show)
|
||||||
|
|
|
@ -96,7 +96,12 @@ namespace CSVWorld
|
||||||
void updateHighlighting();
|
void updateHighlighting();
|
||||||
|
|
||||||
void updateLineNumberAreaWidth(int newBlockCount);
|
void updateLineNumberAreaWidth(int newBlockCount);
|
||||||
|
|
||||||
void updateLineNumberArea(const QRect &, int);
|
void updateLineNumberArea(const QRect &, int);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
void updateUserSetting (const QString &name, const QStringList &list);
|
||||||
};
|
};
|
||||||
|
|
||||||
class LineNumberArea : public QWidget
|
class LineNumberArea : public QWidget
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include <components/compiler/scanner.hpp>
|
#include <components/compiler/scanner.hpp>
|
||||||
#include <components/compiler/extensions0.hpp>
|
#include <components/compiler/extensions0.hpp>
|
||||||
|
|
||||||
|
#include "../../model/settings/usersettings.hpp"
|
||||||
|
|
||||||
bool CSVWorld::ScriptHighlighter::parseInt (int value, const Compiler::TokenLoc& loc,
|
bool CSVWorld::ScriptHighlighter::parseInt (int value, const Compiler::TokenLoc& loc,
|
||||||
Compiler::Scanner& scanner)
|
Compiler::Scanner& scanner)
|
||||||
{
|
{
|
||||||
|
@ -78,46 +80,77 @@ CSVWorld::ScriptHighlighter::ScriptHighlighter (const CSMWorld::Data& data, Mode
|
||||||
: QSyntaxHighlighter (parent), Compiler::Parser (mErrorHandler, mContext), mContext (data),
|
: QSyntaxHighlighter (parent), Compiler::Parser (mErrorHandler, mContext), mContext (data),
|
||||||
mMode (mode)
|
mMode (mode)
|
||||||
{
|
{
|
||||||
/// \todo replace this with user settings
|
CSMSettings::UserSettings &userSettings = CSMSettings::UserSettings::instance();
|
||||||
|
|
||||||
|
QColor color = QColor();
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting("script-editor/colour-int", "Dark magenta"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::darkMagenta);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::darkMagenta);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Int, format));
|
mScheme.insert (std::make_pair (Type_Int, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-float", "Magenta"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::magenta);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::magenta);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Float, format));
|
mScheme.insert (std::make_pair (Type_Float, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-name", "Gray"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::gray);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::gray);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Name, format));
|
mScheme.insert (std::make_pair (Type_Name, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-keyword", "Red"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::red);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::red);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Keyword, format));
|
mScheme.insert (std::make_pair (Type_Keyword, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-special", "Dark yellow"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::darkYellow);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::darkYellow);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Special, format));
|
mScheme.insert (std::make_pair (Type_Special, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-comment", "Green"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::green);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::green);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Comment, format));
|
mScheme.insert (std::make_pair (Type_Comment, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
color.setNamedColor(userSettings.setting ("script-editor/colour-id", "Blue"));
|
||||||
|
if (!color.isValid())
|
||||||
|
color = QColor(Qt::blue);
|
||||||
|
|
||||||
QTextCharFormat format;
|
QTextCharFormat format;
|
||||||
format.setForeground (Qt::blue);
|
format.setForeground (color);
|
||||||
mScheme.insert (std::make_pair (Type_Id, format));
|
mScheme.insert (std::make_pair (Type_Id, format));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,3 +176,86 @@ void CSVWorld::ScriptHighlighter::invalidateIds()
|
||||||
{
|
{
|
||||||
mContext.invalidateIds();
|
mContext.invalidateIds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSVWorld::ScriptHighlighter::updateUserSetting (const QString &name, const QStringList &list)
|
||||||
|
{
|
||||||
|
if (list.empty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QColor color = QColor();
|
||||||
|
|
||||||
|
if (name == "script-editor/colour-int")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Int] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-float")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Float] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-name")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Name] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-keyword")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Keyword] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-special")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Special] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-comment")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Comment] = format;
|
||||||
|
}
|
||||||
|
else if (name == "script-editor/colour-id")
|
||||||
|
{
|
||||||
|
color.setNamedColor(list.at(0));
|
||||||
|
if (!color.isValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QTextCharFormat format;
|
||||||
|
format.setForeground (color);
|
||||||
|
mScheme[Type_Id] = format;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -87,6 +87,8 @@ namespace CSVWorld
|
||||||
virtual void highlightBlock (const QString& text);
|
virtual void highlightBlock (const QString& text);
|
||||||
|
|
||||||
void invalidateIds();
|
void invalidateIds();
|
||||||
|
|
||||||
|
bool updateUserSetting (const QString &name, const QStringList &list);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue