mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 02:50:46 -06:00
a first version of syntax hightlighted sql input fields and sql log
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <QScrollBar>
|
||||
|
||||
#include "sqlitedb.h"
|
||||
#include "sqlitesyntaxhighlighter.h"
|
||||
/*
|
||||
* Constructs a sqlLogForm as a child of 'parent', with the
|
||||
* name 'name' and widget flags set to 'f'.
|
||||
@@ -64,6 +65,14 @@ void SQLLogDock::setupUi()
|
||||
userLogText->setObjectName(QString::fromUtf8("userLogText"));
|
||||
userLogText->setReadOnly(true);
|
||||
|
||||
QFont font;
|
||||
font.setFamily("Courier");
|
||||
font.setFixedPitch(true);
|
||||
font.setPixelSize(11);
|
||||
userLogText->setFont(font);
|
||||
|
||||
userSqliteHighlighter = new SQLiteSyntaxHighlighter(userLogText->document());
|
||||
|
||||
gridLayout->addWidget(userLogText, 0, 0, 1, 1);
|
||||
logStack->addWidget(WStackPage);
|
||||
WStackPage->setLayout(gridLayout);
|
||||
@@ -78,6 +87,9 @@ void SQLLogDock::setupUi()
|
||||
appLogText = new QTextEdit(WStackPage1);
|
||||
appLogText->setObjectName(QString::fromUtf8("appLogText"));
|
||||
appLogText->setReadOnly(true);
|
||||
appLogText->setFont(font);
|
||||
|
||||
appSqliteHighlighter = new SQLiteSyntaxHighlighter(appLogText->document());
|
||||
|
||||
logStack->addWidget(WStackPage1);
|
||||
vboxLayout1->addWidget(appLogText);
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <QtGui/QVBoxLayout>
|
||||
#include <QtGui/QWidget>
|
||||
|
||||
class SQLiteSyntaxHighlighter;
|
||||
|
||||
class SQLLogDock : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -39,6 +41,9 @@ private:
|
||||
QVBoxLayout *vboxLayout1;
|
||||
QTextEdit *appLogText;
|
||||
|
||||
SQLiteSyntaxHighlighter* userSqliteHighlighter;
|
||||
SQLiteSyntaxHighlighter* appSqliteHighlighter;
|
||||
|
||||
void setupUi();
|
||||
void retranslateUi();
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "editform.h"
|
||||
#include "findform.h"
|
||||
#include "SQLLogDock.h"
|
||||
#include "sqlitesyntaxhighlighter.h"
|
||||
|
||||
void MainWindow::setupUi()
|
||||
{
|
||||
@@ -387,6 +388,13 @@ void MainWindow::setupUi()
|
||||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(sqlTextEdit->sizePolicy().hasHeightForWidth());
|
||||
sqlTextEdit->setSizePolicy(sizePolicy1);
|
||||
QFont font;
|
||||
font.setFamily("Courier");
|
||||
font.setFixedPitch(true);
|
||||
font.setPixelSize(11);
|
||||
sqlTextEdit->setFont(font);
|
||||
|
||||
sqliteHighlighter = new SQLiteSyntaxHighlighter(sqlTextEdit->document());
|
||||
|
||||
vboxLayout3->addWidget(sqlTextEdit);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
class SQLLogDock;
|
||||
class editForm;
|
||||
class findForm;
|
||||
class SQLiteSyntaxHighlighter;
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
@@ -126,6 +127,8 @@ private:
|
||||
QMenu *PopupMenu;
|
||||
QMenu *recentFilesMenu;
|
||||
|
||||
SQLiteSyntaxHighlighter* sqliteHighlighter;
|
||||
|
||||
enum { MaxRecentFiles = 5 };
|
||||
QAction *recentFileActs[MaxRecentFiles];
|
||||
QAction *recentSeparatorAct;
|
||||
|
||||
82
src/sqlitesyntaxhighlighter.cpp
Normal file
82
src/sqlitesyntaxhighlighter.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "sqlitesyntaxhighlighter.h"
|
||||
|
||||
SQLiteSyntaxHighlighter::SQLiteSyntaxHighlighter(QTextDocument *parent) :
|
||||
QSyntaxHighlighter(parent)
|
||||
{
|
||||
HighlightingRule rule;
|
||||
|
||||
keywordFormat.setForeground(Qt::darkBlue);
|
||||
keywordFormat.setFontWeight(QFont::Bold);
|
||||
QStringList keywordPatterns;
|
||||
keywordPatterns
|
||||
<< "\\bREINDEX\\b" << "\\bINDEXED\\b" << "\\bINDEX\\b"
|
||||
<< "\\bDESC\\b" << "\\bESCAPE\\b" << "\\bEACH\\b"
|
||||
<< "\\bCHECK\\b" << "\\bKEY\\b" << "\\bBEFORE\\b"
|
||||
<< "\\bFOREIGN\\b" << "\\bFOR\\b" << "\\bIGNORE\\b"
|
||||
<< "\\bREGEXP\\b" << "\\bEXPLAIN\\b" << "\\bINSTEAD\\b"
|
||||
<< "\\bADD\\b" << "\\bDATABASE\\b" << "\\bAS\\b"
|
||||
<< "\\bSELECT\\b" << "\\bTABLE\\b" << "\\bLEFT\\b"
|
||||
<< "\\bTHEN\\b" << "\\bEND\\b" << "\\bDEFERRABLE\\b"
|
||||
<< "\\bELSE\\b" << "\\bEXCEPT\\b" << "\\bTRANSACTION\\b"
|
||||
<< "\\bACTION\\b" << "\\bON\\b" << "\\bNATURAL\\b"
|
||||
<< "\\bALTER\\b" << "\\bRAISE\\b" << "\\bEXCLUSIVE\\b"
|
||||
<< "\\bEXISTS\\b" << "\\bSAVEPOINT\\b" << "\\bINTERSECT\\b"
|
||||
<< "\\bTRIGGER\\b" << "\\bREFERENCES\\b" << "\\bCONSTRAINT\\b"
|
||||
<< "\\bINTO\\b" << "\\bOFFSET\\b" << "\\bOF\\b"
|
||||
<< "\\bSET\\b" << "\\bTEMPORARY\\b" << "\\bTEMP\\b"
|
||||
<< "\\bOR\\b" << "\\bUNIQUE\\b" << "\\bQUERY\\b"
|
||||
<< "\\bATTACH\\b" << "\\bHAVING\\b" << "\\bGROUP\\b"
|
||||
<< "\\bUPDATE\\b" << "\\bBEGIN\\b" << "\\bINNER\\b"
|
||||
<< "\\bRELEASE\\b" << "\\bBETWEEN\\b" << "\\bNOTNULL\\b"
|
||||
<< "\\bNOT\\b" << "\\bNO\\b" << "\\bNULL\\b"
|
||||
<< "\\bLIKE\\b" << "\\bCASCADE\\b" << "\\bASC\\b"
|
||||
<< "\\bDELETE\\b" << "\\bCASE\\b" << "\\bCOLLATE\\b"
|
||||
<< "\\bCREATE\\b" << "\\bCURRENT_DATE\\b" << "\\bDETACH\\b"
|
||||
<< "\\bIMMEDIATE\\b" << "\\bJOIN\\b" << "\\bINSERT\\b"
|
||||
<< "\\bMATCH\\b" << "\\bPLAN\\b" << "\\bANALYZE\\b"
|
||||
<< "\\bPRAGMA\\b" << "\\bABORT\\b" << "\\bVALUES\\b"
|
||||
<< "\\bVIRTUAL\\b" << "\\bLIMIT\\b" << "\\bWHEN\\b"
|
||||
<< "\\bWHERE\\b" << "\\bRENAME\\b" << "\\bAFTER\\b"
|
||||
<< "\\bREPLACE\\b" << "\\bAND\\b" << "\\bDEFAULT\\b"
|
||||
<< "\\bAUTOINCREMENT\\b" << "\\bTO\\b" << "\\bIN\\b"
|
||||
<< "\\bCAST\\b" << "\\bCOLUMN\\b" << "\\bCOMMIT\\b"
|
||||
<< "\\bCONFLICT\\b" << "\\bCROSS\\b" << "\\bCURRENT_TIMESTAMP\\b"
|
||||
<< "\\bCURRENT_TIME\\b" << "\\bPRIMARY\\b" << "\\bDEFERRED\\b"
|
||||
<< "\\bDISTINCT\\b" << "\\bIS\\b" << "\\bDROP\\b"
|
||||
<< "\\bFAIL\\b" << "\\bFROM\\b" << "\\bFULL\\b"
|
||||
<< "\\bGLOB\\b" << "\\bBY\\b" << "\\bIF\\b"
|
||||
<< "\\bISNULL\\b" << "\\bORDER\\b" << "\\bRESTRICT\\b"
|
||||
<< "\\bOUTER\\b" << "\\bRIGHT\\b" << "\\bROLLBACK\\b"
|
||||
<< "\\bROW\\b" << "\\bUNION\\b"
|
||||
<< "\\bUSING\\b" << "\\bVACUUM\\b" << "\\bVIEW\\b"
|
||||
<< "\\bINITIALLY\\b" << "\\bALL\\b" << "\\bSELECT\\b";
|
||||
|
||||
foreach (const QString &pattern, keywordPatterns) {
|
||||
rule.pattern = QRegExp(pattern);
|
||||
rule.pattern.setCaseSensitivity(Qt::CaseInsensitive);
|
||||
rule.format = keywordFormat;
|
||||
highlightingRules.append(rule);
|
||||
}
|
||||
|
||||
quotationFormat.setForeground(Qt::darkRed);
|
||||
rule.pattern = QRegExp("\".*\"");
|
||||
rule.format = quotationFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
rule.pattern = QRegExp("'.*'");
|
||||
rule.format = quotationFormat;
|
||||
highlightingRules.append(rule);
|
||||
}
|
||||
|
||||
void SQLiteSyntaxHighlighter::highlightBlock(const QString &text)
|
||||
{
|
||||
foreach (const HighlightingRule &rule, highlightingRules) {
|
||||
QRegExp expression(rule.pattern);
|
||||
int index = expression.indexIn(text);
|
||||
while (index >= 0) {
|
||||
int length = expression.matchedLength();
|
||||
setFormat(index, length, rule.format);
|
||||
index = expression.indexIn(text, index + length);
|
||||
}
|
||||
}
|
||||
}
|
||||
33
src/sqlitesyntaxhighlighter.h
Normal file
33
src/sqlitesyntaxhighlighter.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef SQLITESYNTAXHIGHLIGHTER_H
|
||||
#define SQLITESYNTAXHIGHLIGHTER_H
|
||||
|
||||
#include <QSyntaxHighlighter>
|
||||
|
||||
class SQLiteSyntaxHighlighter : public QSyntaxHighlighter
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SQLiteSyntaxHighlighter(QTextDocument *parent = 0);
|
||||
|
||||
protected:
|
||||
void highlightBlock(const QString &text);
|
||||
|
||||
private:
|
||||
struct HighlightingRule
|
||||
{
|
||||
QRegExp pattern;
|
||||
QTextCharFormat format;
|
||||
};
|
||||
QVector<HighlightingRule> highlightingRules;
|
||||
|
||||
QRegExp commentStartExpression;
|
||||
QRegExp commentEndExpression;
|
||||
|
||||
QTextCharFormat keywordFormat;
|
||||
QTextCharFormat singleLineCommentFormat;
|
||||
QTextCharFormat multiLineCommentFormat;
|
||||
QTextCharFormat quotationFormat;
|
||||
|
||||
};
|
||||
|
||||
#endif // SQLITESYNTAXHIGHLIGHTER_H
|
||||
@@ -30,7 +30,8 @@ HEADERS += \
|
||||
preferencesform.h \
|
||||
mainwindow.h \
|
||||
createtabledialog.h \
|
||||
SQLLogDock.h
|
||||
SQLLogDock.h \
|
||||
sqlitesyntaxhighlighter.h
|
||||
SOURCES += \
|
||||
browsermain.cpp \
|
||||
sqlitedb.cpp \
|
||||
@@ -54,7 +55,8 @@ SOURCES += \
|
||||
preferencesform.cpp \
|
||||
mainwindow.cpp \
|
||||
createtabledialog.cpp \
|
||||
SQLLogDock.cpp
|
||||
SQLLogDock.cpp \
|
||||
sqlitesyntaxhighlighter.cpp
|
||||
unix {
|
||||
UI_DIR = .ui
|
||||
MOC_DIR = .moc
|
||||
|
||||
Reference in New Issue
Block a user