forked from teamnwah/openmw-tes3coop
Merge remote-tracking branch 'cc9cii/highlight-colours'
This commit is contained in:
commit
17747a2dd9
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");
|
||||
monoFont->setDefaultValue ("true");
|
||||
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);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -31,11 +31,11 @@ bool CSVWorld::ScriptEdit::event (QEvent *event)
|
|||
if (event->type()==QEvent::ShortcutOverride)
|
||||
{
|
||||
QKeyEvent *keyEvent = static_cast<QKeyEvent *> (event);
|
||||
|
||||
|
||||
if (keyEvent->matches (QKeySequence::Undo) || keyEvent->matches (QKeySequence::Redo))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return QPlainTextEdit::event (event);
|
||||
}
|
||||
|
||||
|
@ -92,13 +92,16 @@ CSVWorld::ScriptEdit::ScriptEdit (const CSMDoc::Document& document, ScriptHighli
|
|||
|
||||
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);
|
||||
|
||||
// TODO: provide a font selector dialogue
|
||||
mMonoFont.setStyleHint(QFont::TypeWriter);
|
||||
std::string useMonoFont =
|
||||
CSMSettings::UserSettings::instance().setting("script-editor/mono-font", "true").toStdString();
|
||||
if (useMonoFont == "true")
|
||||
|
||||
if (userSettings.setting("script-editor/mono-font", "true") == "true")
|
||||
setFont(mMonoFont);
|
||||
|
||||
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(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
|
||||
|
||||
std::string showStatusBar =
|
||||
CSMSettings::UserSettings::instance().settingValue("script-editor/show-linenum").toStdString();
|
||||
showLineNum(userSettings.settingValue("script-editor/show-linenum") == "true");
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -56,7 +56,7 @@ namespace CSVWorld
|
|||
protected:
|
||||
|
||||
bool event (QEvent *event);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
ScriptEdit (const CSMDoc::Document& document, ScriptHighlighter::Mode mode,
|
||||
|
@ -96,7 +96,12 @@ namespace CSVWorld
|
|||
void updateHighlighting();
|
||||
|
||||
void updateLineNumberAreaWidth(int newBlockCount);
|
||||
|
||||
void updateLineNumberArea(const QRect &, int);
|
||||
|
||||
public slots:
|
||||
|
||||
void updateUserSetting (const QString &name, const QStringList &list);
|
||||
};
|
||||
|
||||
class LineNumberArea : public QWidget
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#include <components/compiler/scanner.hpp>
|
||||
#include <components/compiler/extensions0.hpp>
|
||||
|
||||
#include "../../model/settings/usersettings.hpp"
|
||||
|
||||
bool CSVWorld::ScriptHighlighter::parseInt (int value, const Compiler::TokenLoc& loc,
|
||||
Compiler::Scanner& scanner)
|
||||
{
|
||||
|
@ -78,46 +80,77 @@ CSVWorld::ScriptHighlighter::ScriptHighlighter (const CSMWorld::Data& data, Mode
|
|||
: QSyntaxHighlighter (parent), Compiler::Parser (mErrorHandler, mContext), mContext (data),
|
||||
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;
|
||||
format.setForeground (Qt::darkMagenta);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::magenta);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::gray);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::red);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::darkYellow);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::green);
|
||||
format.setForeground (color);
|
||||
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;
|
||||
format.setForeground (Qt::blue);
|
||||
format.setForeground (color);
|
||||
mScheme.insert (std::make_pair (Type_Id, format));
|
||||
}
|
||||
|
||||
|
@ -143,3 +176,86 @@ void CSVWorld::ScriptHighlighter::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);
|
||||
|
||||
void invalidateIds();
|
||||
|
||||
bool updateUserSetting (const QString &name, const QStringList &list);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue