From 90a411c397cb58f0a1a43d3ee14d025a42306211 Mon Sep 17 00:00:00 2001 From: Jiawei_Ye <1241818274@qq.com> Date: Tue, 31 Aug 2021 20:34:44 +0800 Subject: [PATCH] =?UTF-8?q?ui=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/Client.pro | 7 +- Client/codeeditor.cpp | 110 ++++++ Client/codeeditor.h | 57 +++ Client/highlighter.h | 45 --- Client/kuang.cpp | 3 +- Client/kuang.ui | 70 +++- Client/mainwindow.cpp | 27 +- Client/mainwindow.ui | 338 +++++++++--------- Client/{highlighter.cpp => myhighlighter.cpp} | 93 ++--- Client/myhighlighter.h | 36 ++ Client/system.qrc | 9 + Client/system/img/addOnFinal.png | Bin 0 -> 5766 bytes Client/system/img/bicqBlue.png | Bin 0 -> 12306 bytes Client/system/img/bicqGreen.png | Bin 0 -> 11095 bytes Client/system/img/dot.png | Bin 0 -> 2939 bytes Client/system/img/gitOnFinal.png | Bin 0 -> 4941 bytes Client/system/img/gitWhite.png | Bin 0 -> 6318 bytes Client/system/img/messageOnFinal.png | Bin 0 -> 5842 bytes Client/system/img/searchOnFinal.png | Bin 0 -> 6287 bytes Client/system/img/test.png | Bin 0 -> 6462 bytes Client/typedef.h | 10 + Client/userlogin.cpp | 2 +- Client/userlogin.ui | 12 +- Client/userregister.ui | 160 ++++++++- Client/widget.cpp | 39 +- Client/widget.h | 7 +- Client/widget.ui | 48 +-- 27 files changed, 736 insertions(+), 337 deletions(-) create mode 100644 Client/codeeditor.cpp create mode 100644 Client/codeeditor.h delete mode 100644 Client/highlighter.h rename Client/{highlighter.cpp => myhighlighter.cpp} (39%) create mode 100644 Client/myhighlighter.h create mode 100644 Client/system/img/addOnFinal.png create mode 100644 Client/system/img/bicqBlue.png create mode 100644 Client/system/img/bicqGreen.png create mode 100644 Client/system/img/dot.png create mode 100644 Client/system/img/gitOnFinal.png create mode 100644 Client/system/img/gitWhite.png create mode 100644 Client/system/img/messageOnFinal.png create mode 100644 Client/system/img/searchOnFinal.png create mode 100644 Client/system/img/test.png create mode 100644 Client/typedef.h diff --git a/Client/Client.pro b/Client/Client.pro index 8b498b3..e60b656 100644 --- a/Client/Client.pro +++ b/Client/Client.pro @@ -21,13 +21,14 @@ SOURCES += \ Session/onlinesession.cpp \ clientdatacenter.cpp \ clientmain.cpp \ + codeeditor.cpp \ databaseoperation.cpp \ - highlighter.cpp \ kuang.cpp \ main.cpp \ mainwindow.cpp \ message.cpp \ messagemodel.cpp \ + myhighlighter.cpp \ userlogin.cpp \ usermodel.cpp \ userregister.cpp \ @@ -39,9 +40,11 @@ HEADERS += \ Session/onlinesession.h \ clientdatacenter.h \ clientmain.h \ + codeeditor.h \ databaseoperation.h \ + myhighlighter.h \ + typedef.h \ userregister.cpp \ - highlighter.h \ kuang.h \ ltest.h \ mainwindow.h \ diff --git a/Client/codeeditor.cpp b/Client/codeeditor.cpp new file mode 100644 index 0000000..30f668a --- /dev/null +++ b/Client/codeeditor.cpp @@ -0,0 +1,110 @@ +#include "codeeditor.h" +#include + +CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent) +{ + lineNumberArea = new LineNumberArea(this); + + connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int))); + connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int))); + connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine())); + + updateLineNumberAreaWidth(0); + setMode(BROWSE); +} +int CodeEditor::lineNumberAreaWidth() +{ + int digits = 1; + int max = qMax(1, blockCount()); + while (max >= 10) { + max /= 10; + ++digits; + } + + int space = 3 + fontMetrics().width(QLatin1Char('9')) * digits; + + return space; +} + +void CodeEditor::updateLineNumberAreaWidth(int /* newBlockCount */) +{ + setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); +} + +void CodeEditor::updateLineNumberArea(const QRect &rect, int dy) +{ + if (dy) + lineNumberArea->scroll(0, dy); + else + lineNumberArea->update(0, rect.y(), lineNumberArea->width(), rect.height()); + + if (rect.contains(viewport()->rect())) + updateLineNumberAreaWidth(0); +} + +void CodeEditor::resizeEvent(QResizeEvent *e) +{ + QPlainTextEdit::resizeEvent(e); + + QRect cr = contentsRect(); + lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); +} +void CodeEditor::highlightCurrentLine() +{ + QList extraSelections; + + if (!isReadOnly()) { + QTextEdit::ExtraSelection selection; + + QColor lineColor = QColor(Qt::yellow).lighter(160); + + selection.format.setBackground(lineColor); + selection.format.setProperty(QTextFormat::FullWidthSelection, true); + //selection.cursor = textCursor(); + //selection.cursor.clearSelection(); + extraSelections.append(selection); + } + + setExtraSelections(extraSelections); +} + +void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) +{ + QPainter painter(lineNumberArea); + painter.fillRect(event->rect(), Qt::lightGray); + + + QTextBlock block = firstVisibleBlock(); + int blockNumber = block.blockNumber(); + int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); + int bottom = top + (int) blockBoundingRect(block).height(); + + while (block.isValid() && top <= event->rect().bottom()) { + if (block.isVisible() && bottom >= event->rect().top()) { + QString number = QString::number(blockNumber + 1); + painter.setPen(Qt::black); + painter.drawText(-2, top, lineNumberArea->width(), fontMetrics().height(), + Qt::AlignRight, number); + } + + block = block.next(); + top = bottom; + bottom = top + (int) blockBoundingRect(block).height(); + ++blockNumber; + } +} +void CodeEditor::setMode(editorMode mode) +{ + if(mode == BROWSE) + { + this->setReadOnly(true); + this->setStyleSheet("background:#f2f2f3;"); + highlightCurrentLine(); + } + else if(mode == EDIT) + { + this->setReadOnly(false); + this->setStyleSheet("background:#ffffff;"); + highlightCurrentLine(); + } +} diff --git a/Client/codeeditor.h b/Client/codeeditor.h new file mode 100644 index 0000000..c6cf84e --- /dev/null +++ b/Client/codeeditor.h @@ -0,0 +1,57 @@ +#ifndef CODEEDITOR_H +#define CODEEDITOR_H +#include +#include + +#include +#include +#include +#include +#include +#include +class LineNumberArea; + +class CodeEditor : public QPlainTextEdit +{ + Q_OBJECT + +public: + CodeEditor(QWidget *parent = 0); + void setMode(editorMode mode); + void lineNumberAreaPaintEvent(QPaintEvent *event); + int lineNumberAreaWidth(); + +protected: + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + +private slots: + void updateLineNumberAreaWidth(int newBlockCount); + void highlightCurrentLine(); + void updateLineNumberArea(const QRect &, int); + +private: + QWidget *lineNumberArea; +}; + + +class LineNumberArea : public QWidget +{ +public: + LineNumberArea(CodeEditor *editor) : QWidget(editor) { + codeEditor = editor; + } + + QSize sizeHint() const Q_DECL_OVERRIDE { + return QSize(codeEditor->lineNumberAreaWidth(), 0); + } + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE { + codeEditor->lineNumberAreaPaintEvent(event); + } + +private: + CodeEditor *codeEditor; +}; + +#endif // CODEEDITOR_H diff --git a/Client/highlighter.h b/Client/highlighter.h deleted file mode 100644 index 493e59d..0000000 --- a/Client/highlighter.h +++ /dev/null @@ -1,45 +0,0 @@ - -#ifndef HIGHLIGHTER_H -#define HIGHLIGHTER_H - -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QTextDocument; -QT_END_NAMESPACE - -//! [0] -class Highlighter : public QSyntaxHighlighter //继承QSyntaxHightliaghter -{ - Q_OBJECT - -public: - Highlighter(QTextDocument *parent = 0);//构造函数传一个 QTextDocument 对象 给父类 - -protected: - void highlightBlock(const QString &text) override;//重写父类这个函数 自动调用 - -private: - - struct HighlightingRule//语法规则结构体,包含正则表达式模式串和匹配的样式 - { - QRegularExpression pattern; - QTextCharFormat format; - }; - QVector highlightingRules;//规则的集合,可以定义多个高亮规则 - - QRegularExpression commentStartExpression; //注释的高亮,使用highliangBlock()匹配,下文提到 - QRegularExpression commentEndExpression; - - QTextCharFormat keywordFormat;//高亮样式,关键词,一下顾名思义 - QTextCharFormat classFormat; - QTextCharFormat singleLineCommentFormat; - QTextCharFormat multiLineCommentFormat; - QTextCharFormat quotationFormat; - QTextCharFormat functionFormat; -}; -//! [0] - -#endif // HIGHLIGHTER_H diff --git a/Client/kuang.cpp b/Client/kuang.cpp index 0733e6f..e054fea 100644 --- a/Client/kuang.cpp +++ b/Client/kuang.cpp @@ -26,7 +26,8 @@ Kuang::Kuang(const QString &username,QJsonObject data,QWidget *parent): else { ui->name->setText(temp[0].toObject()["Username"].toString()); } - ui->name->setPixmap(QPixmap(":/img/system/img/LittleRed.svg")); + ui->profile->setPixmap(QPixmap(":/img/system/img/LittleRed.svg")); + } // GROUP diff --git a/Client/kuang.ui b/Client/kuang.ui index b09634e..1ccd57f 100644 --- a/Client/kuang.ui +++ b/Client/kuang.ui @@ -22,41 +22,99 @@ 70 + + ArrowCursor + + + Qt::ClickFocus + Form + + false + + + QWidget::hover +{ + background-color::rgb(200,198,198); +} + - 10 + 20 10 50 50 + + QLabel +{ + background-color:transparent; +} + - QFrame::Box + QFrame::NoFrame profile + + true + - 70 - 15 + 80 + 10 161 - 41 + 21 + + + Microsoft YaHei + 14 + + + + QLabel +{ + background-color:transparent; +} + - QFrame::Box + QFrame::NoFrame name + + + + 0 + 0 + 253 + 70 + + + + QLabel::hover +{ + background-color:rgb(198,198,198); +} + + + + + + label + profile + name diff --git a/Client/mainwindow.cpp b/Client/mainwindow.cpp index d823044..509be21 100644 --- a/Client/mainwindow.cpp +++ b/Client/mainwindow.cpp @@ -15,14 +15,25 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); ui->tabWidget->setAttribute(Qt::WA_StyledBackground); -// QToolButton* btnSearch = new QToolButton; -// btnSearch->setCursor(Qt::PointingHandCursor);//如果不设置鼠标样式,鼠标移动到按钮上依旧显示为编辑框的鼠标样式 -// btnSearch->setIcon(QPixmap(":/img/system/img/search.png")); -// btnSearch->setIconSize(QSize(20,20)); -// btnSearch->setStyleSheet("QToolButton{border:none;}"); -// QWidgetAction* action = new QWidgetAction(ui->search); -// action->setDefaultWidget(btnSearch); -// ui->search->addAction(action, QLineEdit::TrailingPosition); + + QJsonObject data = {{ "MsgType", "SessionData" }, {"SessionID", 1}, {"SessionType", "FRIEND"} }; + QJsonArray members; + members.append(QJsonObject{{"Username", "小蓝"}}); + members.append(QJsonObject{{"Username", "xxx"}}); + data["Members"]=members; + Kuang *k = new Kuang("小蓝", data, this); + friendlayout = new QVBoxLayout(ui->frd); + friendlayout->setContentsMargins(0,0,0,0); + friendlayout->addWidget(k); + + QToolButton* btnSearch = new QToolButton; + btnSearch->setCursor(Qt::PointingHandCursor);//如果不设置鼠标样式,鼠标移动到按钮上依旧显示为编辑框的鼠标样式 + btnSearch->setIcon(QPixmap(":/img/system/img/search.png")); + btnSearch->setIconSize(QSize(20,20)); + btnSearch->setStyleSheet("QToolButton{border:none;}"); + QWidgetAction* action = new QWidgetAction(ui->search); + action->setDefaultWidget(btnSearch); + ui->search->addAction(action, QLineEdit::TrailingPosition); } MainWindow::~MainWindow() diff --git a/Client/mainwindow.ui b/Client/mainwindow.ui index 9e1370e..b7b339b 100644 --- a/Client/mainwindow.ui +++ b/Client/mainwindow.ui @@ -15,16 +15,13 @@ - :/img/system/img/bicq.png:/img/system/img/bicq.png + :/img/system/img/bicqGreen.png:/img/system/img/bicqGreen.png 1.000000000000000 - QMainWindow -{ - border-radius: 8px; -} + @@ -56,11 +53,11 @@ QTabWidget{ - background-color:rgb(46,46,46); + background-color:rgb(1,73,124); } QTabBar::tab { - background-color:rgb(46,46,46); + background-color:rgb(1,73,124); width:70px; height:70px; } @@ -78,7 +75,7 @@ QTabBar::tab:hover QTabWidget::Rounded - 1 + 0 @@ -108,7 +105,7 @@ QTabBar::tab:hover :/img/system/img/personalOff.png - :/img/system/img/personalOn.png + :/img/system/img/test.png @@ -248,7 +245,7 @@ QTabBar::tab:hover QFrame::NoFrame - nick name: + Nickname: @@ -276,7 +273,7 @@ QTabBar::tab:hover QFrame::NoFrame - user name: + Username: Qt::AutoText @@ -382,7 +379,7 @@ QLineEdit::focus :/system/system/img/message.png :/img/system/img/messageOff.png - :/img/system/img/messageOn.png:/system/system/img/message.png + :/img/system/img/messageOnFinal.png:/system/system/img/message.png @@ -430,101 +427,6 @@ QLineEdit::focus 0 - - - - - 370 - 30 - - - - - 16777215 - 30 - - - - QFrame::NoFrame - - - QFrame::Plain - - - - - 40 - 0 - 40 - 30 - - - - background-color: rgb(255, 255, 255); - - - - - - - :/img/system/img/git.png:/img/system/img/git.png - - - - 30 - 30 - - - - false - - - true - - - - - - 0 - 0 - 40 - 30 - - - - background-color: rgb(255, 255, 255); - - - - - - - :/img/system/img/face.png:/img/system/img/face.png - - - - 25 - 25 - - - - true - - - false - - - false - - - false - - - true - - - - @@ -551,23 +453,19 @@ QLineEdit::focus } QToolBox::tab { - background:rgb(245,245,245); + background:rgb(235,235,235); color:rgb(0,0,0); - border:1px solid black; - border-radius:5px; } QToolBox::tab::hover{ background:rgb(255,255,255); color:rgb(18,150,219); - border:1px solid black; - border-radius:5px; } - 1 + 2 - 1 + 0 @@ -594,7 +492,7 @@ QToolBox::tab::hover{ 0 0 253 - 540 + 543 @@ -607,7 +505,7 @@ QToolBox::tab::hover{ 0 0 253 - 540 + 543 @@ -616,47 +514,6 @@ QToolBox::tab::hover{ - - - - - 0 - 0 - - - - - 370 - 350 - - - - QListWidget -{ -background-color: rgb(245, 245, 245); -color:rgb(51,51,51); -border: 1px solid rgb(245, 245, 245); -outline:0px;} -QListWidget::Item{background-color: rgb(245, 245, 245);} -QListWidget::Item:hover{background-color: rgb(245, 245, 245); } -QListWidget::item:selected{ - background-color: rgb(245, 245, 245); - color:black; - border: 1px solid rgb(245, 245, 245); -} -QListWidget::item:selected:!active{border: 1px solid rgb(245, 245, 245); background-color: rgb(245, 245, 245); color:rgb(51,51,51); } - - - QFrame::NoFrame - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - @@ -698,13 +555,28 @@ QListWidget::item:selected:!active{border: 1px solid rgb(245, 245, 245); backgr - 0 + 93 30 + + + 93 + 30 + + + + + Microsoft YaHei + 10 + + PointingHandCursor + + color: rgb(96,96,96); + send @@ -763,6 +635,148 @@ QListWidget::item:selected:!active{border: 1px solid rgb(245, 245, 245); backgr + + + + + 0 + 0 + + + + + 370 + 350 + + + + QListWidget +{ +background-color: rgb(245, 245, 245); +color:rgb(51,51,51); +border: 1px solid rgb(245, 245, 245); +outline:0px;} +QListWidget::Item{background-color: rgb(245, 245, 245);} +QListWidget::Item:hover{background-color: rgb(245, 245, 245); } +QListWidget::item:selected{ + background-color: rgb(245, 245, 245); + color:black; + border: 1px solid rgb(245, 245, 245); +} +QListWidget::item:selected:!active{border: 1px solid rgb(245, 245, 245); background-color: rgb(245, 245, 245); color:rgb(51,51,51); } + + + QFrame::NoFrame + + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAlwaysOff + + + + + + + + 370 + 30 + + + + + 16777215 + 30 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + 40 + 0 + 40 + 30 + + + + PointingHandCursor + + + background-color: rgb(255, 255, 255); + + + + + + + :/img/system/img/git.png:/img/system/img/git.png + + + + 30 + 30 + + + + false + + + true + + + + + + 0 + 0 + 40 + 30 + + + + PointingHandCursor + + + background-color: rgb(255, 255, 255); + + + + + + + :/img/system/img/face.png:/img/system/img/face.png + + + + 25 + 25 + + + + false + + + false + + + false + + + false + + + true + + + + @@ -773,7 +787,7 @@ QListWidget::item:selected:!active{border: 1px solid rgb(245, 245, 245); backgr :/system/system/img/searchOff.png :/img/system/img/searchOff.png - :/img/system/img/searchOn.png:/system/system/img/searchOff.png + :/img/system/img/searchOnFinal.png:/system/system/img/searchOff.png @@ -924,7 +938,7 @@ QLineEdit::focus - 用户名或昵称或群聊ID + 用户名或昵称 @@ -949,7 +963,7 @@ QLineEdit::focus :/system/system/img/addOff.png :/img/system/img/addOff.png - :/img/system/img/addOn.png:/system/system/img/addOff.png + :/img/system/img/addOnFinal.png:/system/system/img/addOff.png @@ -1040,7 +1054,7 @@ QLineEdit::focus :/img/system/img/gitOff.png - :/img/system/img/gitOn.png + :/img/system/img/gitOnFinal.png diff --git a/Client/highlighter.cpp b/Client/myhighlighter.cpp similarity index 39% rename from Client/highlighter.cpp rename to Client/myhighlighter.cpp index bcdd881..6a997a9 100644 --- a/Client/highlighter.cpp +++ b/Client/myhighlighter.cpp @@ -1,14 +1,13 @@ -#include "highlighter.h" +#include "myhighlighter.h" -//! [0] -Highlighter::Highlighter(QTextDocument *parent) +MyHighLighter::MyHighLighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { HighlightingRule rule; - keywordFormat.setForeground(Qt::red);//设定关键词的高亮样式 + keywordFormat.setForeground(Qt::darkBlue); keywordFormat.setFontWeight(QFont::Bold); - QStringList keywordPatterns; //关键词集合,关键都以正则表达式表示 下面的可以改为我们想要的关键词 + QStringList keywordPatterns; keywordPatterns << "\\bchar\\b" << "\\bclass\\b" << "\\bconst\\b" << "\\bdouble\\b" << "\\benum\\b" << "\\bexplicit\\b" << "\\bfriend\\b" << "\\binline\\b" << "\\bint\\b" @@ -18,91 +17,75 @@ Highlighter::Highlighter(QTextDocument *parent) << "\\bslots\\b" << "\\bstatic\\b" << "\\bstruct\\b" << "\\btemplate\\b" << "\\btypedef\\b" << "\\btypename\\b" << "\\bunion\\b" << "\\bunsigned\\b" << "\\bvirtual\\b" - << "\\bvoid\\b" << "\\bvolatile\\b" << "\\bbool\\b" - << "\\bdef\\b"<< "\\binclude\\b"<< "\\bself\\b"<< "\\btype\\b" - << "\\bimport\\b"<< "\\bfrom\\b"<< "\\bbreak\\b"<< "\\band\\b"<< "\\bor\\b" - << "\\bif\\b"<< "\\btry\\b"<< "\\bexcept\\b"<< "\\bNone\\b"<< "\\bwith\\b" - << "\\bencoding\\b"<< "\\breturn\\b"<< "\\bnot\\b"<< "\\belif\\b"<< "\\belse\\b"; + << "\\bvoid\\b" << "\\bvolatile\\b" <<"\\bdef\\b" + << "\\binclude\\b" << "\\breturn\\b" <<"\\bbreak\\b" + << "\\bcontinue\\b" << "\\bif\\b" <<"\\belse\\b" + << "\\belif\\b" << "\\band\\b" <<"\\bTrue\\b" + << "\\bself\\b" << "\\bnn\\b" <<"\\bimport\\b" + << "\\bin\\b" << "\\bfor\\b" <<"\\bis\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegularExpression(pattern); + rule.pattern = QRegExp(pattern); rule.format = keywordFormat; highlightingRules.append(rule); -//! [0] //! [1] } -//! [1] - -//! [2] - classFormat.setFontWeight(QFont::Bold);//添加Qt的类到高亮规则中 + classFormat.setFontWeight(QFont::Bold); classFormat.setForeground(Qt::darkMagenta); - rule.pattern = QRegularExpression("\\bQ[A-Za-z]+\\b"); + rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b"); rule.format = classFormat; highlightingRules.append(rule); -//! [2] -//! [3] - singleLineCommentFormat.setForeground(Qt::darkBlue);//单行注释 - rule.pattern = QRegularExpression("//[^\n]*"); + singleLineCommentFormat.setForeground(Qt::red); + rule.pattern = QRegExp("//[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); - multiLineCommentFormat.setForeground(Qt::darkBlue);//多行注释,只设定了样式,具体匹配在highlightBlock中设置 -//! [3] + multiLineCommentFormat.setForeground(Qt::red); -//! [4] - quotationFormat.setForeground(Qt::darkGreen);//字符串 - rule.pattern = QRegularExpression("\".*\""); + quotationFormat.setForeground(Qt::darkGreen); + rule.pattern = QRegExp("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); -//! [4] -//! [5] - functionFormat.setFontItalic(true);//函数 + functionFormat.setFontItalic(true); functionFormat.setForeground(Qt::blue); - rule.pattern = QRegularExpression("\\b[A-Za-z0-9_]+(?=\\()"); + rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); -//! [5] -//! [6] - commentStartExpression = QRegularExpression("/\\*");//多行注释的匹配正则表达式 - commentEndExpression = QRegularExpression("\\*/"); + commentStartExpression = QRegExp("/\\*"); + commentEndExpression = QRegExp("\\*/"); } -//! [6] -//! [7] -void Highlighter::highlightBlock(const QString &text)//应用高亮规则,也用于区块的高亮,比如多行注释 +void MyHighLighter::highlightBlock(const QString &text) { - foreach (const HighlightingRule &rule, highlightingRules) {//文本采用高亮规则 - QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text); - while (matchIterator.hasNext()) { - QRegularExpressionMatch match = matchIterator.next(); - setFormat(match.capturedStart(), match.capturedLength(), rule.format); + 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); } } -//! [7] //! [8] - setCurrentBlockState(0); //以下是多行注释的匹配 -//! [8] -//! [9] + setCurrentBlockState(0); + int startIndex = 0; if (previousBlockState() != 1) - startIndex = text.indexOf(commentStartExpression); + startIndex = commentStartExpression.indexIn(text); + -//! [9] //! [10] while (startIndex >= 0) { -//! [10] //! [11] - QRegularExpressionMatch match = commentEndExpression.match(text, startIndex); - int endIndex = match.capturedStart(); - int commentLength = 0; + int endIndex = commentEndExpression.indexIn(text, startIndex); + int commentLength; if (endIndex == -1) { setCurrentBlockState(1); commentLength = text.length() - startIndex; } else { commentLength = endIndex - startIndex - + match.capturedLength(); + + commentEndExpression.matchedLength(); } setFormat(startIndex, commentLength, multiLineCommentFormat); - startIndex = text.indexOf(commentStartExpression, startIndex + commentLength); + startIndex = commentStartExpression.indexIn(text, startIndex + commentLength); } } -//! [11] diff --git a/Client/myhighlighter.h b/Client/myhighlighter.h new file mode 100644 index 0000000..edd2c7a --- /dev/null +++ b/Client/myhighlighter.h @@ -0,0 +1,36 @@ +#ifndef MYHIGHLIGHTER_H +#define MYHIGHLIGHTER_H +#include +#include +#include +class MyHighLighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + MyHighLighter(QTextDocument *parent = 0); + +protected: + void highlightBlock(const QString &text) Q_DECL_OVERRIDE; + +private: + struct HighlightingRule + { + QRegExp pattern; + QTextCharFormat format; + }; + QVector highlightingRules; + + QRegExp commentStartExpression; + QRegExp commentEndExpression; + + QTextCharFormat keywordFormat; + QTextCharFormat classFormat; + QTextCharFormat singleLineKey; + QTextCharFormat singleLineValue; + QTextCharFormat singleLineCommentFormat; + QTextCharFormat multiLineCommentFormat; + QTextCharFormat quotationFormat; + QTextCharFormat functionFormat; +}; +#endif // MYHIGHLIGHTER_H diff --git a/Client/system.qrc b/Client/system.qrc index 286d58d..97afe8b 100644 --- a/Client/system.qrc +++ b/Client/system.qrc @@ -22,5 +22,14 @@ system/img/LittlePink.svg system/img/LittleRed.svg system/img/bicqWhite.png + system/img/gitWhite.png + system/img/test.png + system/img/bicqBlue.png + system/img/bicqGreen.png + system/img/dot.png + system/img/addOnFinal.png + system/img/gitOnFinal.png + system/img/messageOnFinal.png + system/img/searchOnFinal.png diff --git a/Client/system/img/addOnFinal.png b/Client/system/img/addOnFinal.png new file mode 100644 index 0000000000000000000000000000000000000000..cc83baf29100e997df66e5120b5b52891d3d3f6d GIT binary patch literal 5766 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 literal 0 HcmV?d00001 diff --git a/Client/system/img/bicqBlue.png b/Client/system/img/bicqBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce6ec252f5827ebb95597ff3eaeda6f75dbbad4 GIT binary patch literal 12306 zcmaL7WmubC(={C2ilmeR!J)Vom*Vd3ULX*xxH}ZL;_mKH+`T}s;;yB*I}~_xJ@@zf z`;nZ-ne51(nLV@Cnu$_p#uN_Oj#KTHQ06JzXvKZ?73Q}CI@zbb5@fU1Jq0s z9|8d609gr94G*JJUyL+j$)>mSn{j)1dH4~=*+f*jGJHhplN;Ms^q?IC)RBQaZBJPo zxR~^uPXS{SgS2r9%HjQZtdS!9^AB4Lal%(@0U~Z*+(1#BJv(;6%si>WzAtW1|9VzV zoOn9cIW##0IXafl&Y`J3ht5jb{F;_Znv3PvR3XY%fz$BaAM>WU^O3|b9`wmw;vL*V zK9-pTPK)**0`>m8$AaBYz?&kLPuNo|^45zSknfu34cIS$VQZ{^>W^?KG2!r!@Dd(e zu1pNAPyWvM+Z~r4OH)7qG(tF_X0T~%GeoJX1*cAnR_N0C2-7gfKTklt^S||rfyZx8 z0N3g!<2)TZ_u5A$2jpf>58}m)y1fiHImm7tfDOY5wLPcDhewVQ!4qkGei<%|(DPr> zNKTB#8yF*e--*>iJ3Y<6NL~G>9v7K=xK8@xFBU;a^=x{LC6-|3r zbnF^X#h2A5o<(P+&rM8=X7Cl5>IdqWK<SP^J$v zOc>@EL+X%UZBiGiW~EBg&k9s`G6&=npyj&kcBW}EE-M@44;MxQ(v?CIW*E^g-r^|b zHcMiE!8&=u)&YZ3K3*IvW*3{YQa-hEcHdFHPY^`Z#YBF@Q7t51ZjMj)<$=bqQ2_VU zBXqP6$Ybj4={RsO%(d~9i)G&0q|^(BRf;1V^%=@@VNM|zCqze^ftT;d%{7R134aDD z#()HF123sL%KfQa;>o4ClQdh9m^$2Pru}Pv-;~v>Bf?E85I#+bp_F^eh{K8MY-Q{l zWqx@1b@#4`-TGt>=v4|C%t0gh6#g62V$K2%$})-gG{vO{;tF*uP)pb$H+;aWtTDw- zuhiYj_yzl<-D(bn^|sM~ylesfxWvh{^-~y@+JxBla|Sbc0WvTm=HWLN#t(DzEnRr5 z#7`)w_i1P^N!B;{!5TkR9*maZDXklu?wJvJtH%wf5a8rB?D5zK^*GQ?eDdm34Pt1KY$q*oPW`kgjC~s(k5$nn)nf3 z<5pW&E)V_(UAqZh);t3}1IS^`K-|AkkK=zo+g*Xw@VKEq*oLgSdk-2&HZ71O-qxq| z)tTrO(o7~HpI#eDs%t2yY7%SDU~(AXAi7&>_w1m{n7%3doaeC2d2{f7m2UybM|~m8 zJr|?_##t2O!bqX9+0zZfqrqe<;;wpG>qh< zGg(_n>`y2T+W)*7Y9i05u-;I-AEr!y*B10`>-x$%prRz^UGr|c%R^_)(ogo&P%KKb zVn-S0^>5w+jn#Ya0^y@U9;2K$EqCWcCp(FNF6e6GKlgyU8?Rrz+Owgrxxwc(jQ}5rt3mI6ZjO9qf~U8(f9;9sjU5(YVFCNfdPKhIE!WVTW}4TK^zb)_0|6+D5&AUdmDzxMrj$a|4hlrHZI^}17Hp~~2flUjHVw-T!z|P4mu9()F zhR-fIp3t*|BuZbL#eJ96nEj*S zbw`OH*FVEamY4WGOX!hObd;Lx3mD?1+aGVg__Npb(Un$O7B}7^P!f|(2tso!;HHO+ zm-T@lr4)(qc%n#1va=FL@Qf4l1_PN<6FAG*1AF=JycjL~9fP!8| zQT3}Wpslo%iyKoL+d#*Cc5}$iJ&Sf=MFL*KU@6Q$lKaKVdN$ zK-b!Zyv@f^Peo=e@keKURnp>ZRNhYiUWvr@ViVDL(rtmAZKpRry`?D8aZ~+{+UWY*ECg#eoeUQ4}AB%)z|DW5_S9e0nDhi@gYj<}p zPCc*p3rCn?d29Ebr4Ye84)H^$?=$e=ZYeh%f`7q{z#fqlp=ff36i{#@W&|jDGgEfG zg}2`|uBXnw$nO5O`!A?jR_mooK%>SY)gJJmww!MoQzPR(Ttvd)f};zK6>Yb@UrCgS zihKr1IUJq0`ft-td3`;#50`qy%A1G^MYAl%eNsl*w6NQ!gzr9ubh}ivZrv45Q$4&4dpqp8bO1Rj$7PhBYcr zsLuXankK5j%h}0FN-vI0XZp=l4#R@9m90EEN`oOr-@dd3Iiqk0ZBuL0q_brj-*X2w zgF*x=4!IxvW*LcS&A}wyivORPh8h?2He$TJIYgx};r;IKy?dT(6li91wTuo&S0&7wmBhSJap+Y-ZB_MwS z7+SGP>iH%!N6@TYW)2T^lW=vJ^3p*3$7FF}iM8KiTZ(vIyab+|E~XS?IUfg$&9`g4 zEpl&KfG*WF!#G@UG^1kPd(~6?4Nsw<{4UW|F(%vvxh5;|&erpG1l#TRprxHs-8#-r zZ*u%w-yz*6$%xwYzI>-_U$v9AgVnwdSI}Z>l*PR>W+?(I7}*?!aUv3!0Qd$b!X&p( zfytj6s}1s9xHyc@=KYEV@bQF>g=|3WH=(Oz0xf}^>gr$Y#J;R54EB^-*G`LSFfWLC z0lCVU8Hfj*zb=%meB*JooD z?)3aP6`yn?HSO_@3&T;|y`Mad7N%kJk7xOBe@)?jmlaK9zYA1viSO*?p1sGk~; zYahID{yct`|H9cbW_G^qyeMwxe-ZPq-IvBXgO1B9@5DhP*!wOKmp{DfyS~I?UfJcJ zk_mlF^H^bzD7ls@v2%#Y;(Z?T)BXhRewNFD7HfL4{d=kVjW3Rq`5Qht4PIG?Ct_>j zsa~iL@?+EY$&{p0ANXaMwQSzUSqP9JQz3|%s3HuKap7L(R=SzWDqjlL$iLpxt*n-2 zoNu%oP~RWr^qei9*&iw^5Wj{SRJgGFeUB8<+TbGziChXA_#M=5dDD%0k|$$6UF7*839i}yLV>?u((aaYb?N<2_;_Zv1Srt(v8&;6 zCtE_}v$hRw8y5@X_h=Y~C(IAsV~c|Kpt!W|3OdI> zIp3>W=0FA;@KVJdclOh*%JE~43!IHoS-O6cG7L0C*#P+En!o*~BN4J}H-M#Qc5zsG zc0xEnrpc#6u5OgAE<-P*9mCxaF15*3ye+d`o^%FuI;W=9awJ|>&_3W5{DQ%f#2Q7e zMzW|yUKDFz9NkW}2ht#S^l8KbQq6hv8i?2!}iLQ0hs_A^J*Zfbi{-&Jm{y$j{k!2%km z$qfota*Zu9yWkKq&Wrx!J@=s#`((W#XSy@WDOvMeudz6nJ2E{s{l|7+4!L_EH9xM8`wSF73?x;5oistuF(oLleac@v6b7 zae*t~V*Y#FAxwDRs+qrW){Gw*N!YX1R9+N8|OF37-T8jL5Wm zy(8e4Az4@ja*=cI^hw4r+*%#0;4khO^YMzEvOY><8Dz;Ff2k$W^o~CZY{#XG45yW zUooa&DdMeLTz;i8H0GDf!N_Ba08hQpMODOc8NFD>MjpkxYDB6>m;*U zQp%5A@tnuyf&+jd*1WLk#e3cBGzja+KQUy{#HPh;{DKm{0EKH+>KS9w)9Di92%8Sy7uErtmkIefsiaGb$|&A~e?S{kw+a$I7eTHft?Oo# z^gMFG!hIXpv899Y@^j>IY`}=T{n6fSvXw?-3KO|jm$G%_ zYGXhDl^k4U9xJr0K88rhMeq+`!)a+$%5o&bbz2Y1Gl&Ji&2a;oq8T(ppR?-Y`jZ*% zfUdl3`I7u&SF}`g5i*~%_`uJ{H3r!^SLXac>*%U>Nht-y+ZQvQi+zTt? z*eny9(u~IuP2a>gDdS5wn2LG(V!E3>-G#H>(-Vq^yFpNZs^W8<7Q?7)vYO&umr-Ij zZ5os`zLnJrZvP%6Dqj99%2)QLok0!BX^zX7qSuFfI5fXyyt zm6yqCrxIrgQYI7_MH*dEvl^awUkOx2==BB8{Pm~!yyq^8>BsEkgtYGm&N>*d$qXe$ zU7DQ9x&3zP49&6RMSM~n3-|5(_@e2l(dU%*=s!E!O3Tz_y&B|~8buC^;|y-vdA>dU zCIVg=(n^&lGB$5zh2cuDnlN429aF~*PA{#;Yelo&x`69kpI`ZzX!$g2sTw^+ZfFfR zreIx^ZAUcBgf-DhXC58A7m34@HT($@_YL~5U-|jw@eRu>q61K2#IGg&k)6!(jUChX zJ|IKP-t`>Kz>Vz6KyO}GUt9ARgKR2QsvnDS+F3w>Bhay2{^k)6^Sx!xvTr zdG>$7Eys6NIjTabw-BHdlxjDphuC?=&zlTa1&3RMOcZ^(F;6h?er77smg?PNS*!fh z>VDwEc|7x_3mQ<9KJLM;=qg_KPhTswd+CVlY>%odKWck$+!v`HGhEb4%0^f)TCQUsM`;)r*Qdr;htkjqIP7*Y4 z`5!PO^bXnYNLryconBnK53P2^J~_zAJuUQgv_cG?X5_E@{`-1#gMR-K4 z$^xm&JR>*?2ThY~%e6|N#oq;8$1iNY$cW7JRl>jb8d$5?dFbfbZ3N}n&#JWbEFXw;yvfrbG(_pLq=4&_#M}~6 zoMm?wC`HtouF43s*u+k{!+#*e_4TOX!St=E`hv&5c@!R^Jt5%`7RSJkre{%?1xWlL z?TR?M=dEngTHx>>XWC*^q+&7TmU3k~&L<1t{y0CkE93-fMk#wJj&_VlpX*Uq-n8E9 zGTjRmY<9h=HubE_a&kGJAaTYLbg`+n^SX?wKus`Rpuu~x*??h1f_q%bbd9S3O;HdF zoi3$*@=5_?`lHOZ^ndY?!99v!A3i_@pX8!xo4pHuzrU~=n~qb*!KW*?NX0_YF~9U$ z7bpDv5n-wX^W{P$nLx2k2d1&%iU47bJmVnQmIsU7_ibRTBpqEnMM<_&*Hhfr*vs5B zriVZB#(H@V@HMzy^22*>AlnXFn&ZVd!}Kc-$czc!|M+`FBZc_t73xfU8QhnH_D(A! zZRegd0m0{{+4m@;<~o@^YPEp2n=ehtTw{|iH;nk5bO*D0D=y{Z7R#|R zL0P-fT&B)0GZw$j-=?G**U1D=c9s#ZI;Eh|wWWz(4sCW^Zv72W!thopOx}elA&Tzt zw#tVdtxViIFu4vqS(JDw*)VKNot^C7ZB$-G-}Jk$ybz?l3x)51ib~Y{QOFK8)t!E3mEyyp06T=%5-ThHG(IH zk@g5;<+m5@6JQmzuj5fzjug5?vXN_geb;IH4b;w5T{J>suILyKlf(jg666jDDZdtz zwuJL)(-{trZ{8Umzt2vR8+ucnryg-(2x2VKAdhn zPk9E@H9k}VbGpz(FG)`6F}bQwUlAt%O;X<}x0{t*&y0ct4wL?q!&tqOpnJRfQ)%1` zl#az};zDMRhO^VG_Jh1U&Nhm@GJOJol&0ER) z*wfGZD(IZBVCZobkf~Ae%H<71<+KK9e_QEvRsH)A+`?&N5@c-&lUF9})6WpLH+{^7 zOhH~Iw}F+1*?6P5Lc#_TKBf#ngNQ8a_L0t>Ztv54`%mqm>G$#ZC>PO?gY%>!O`1xm zXv1T{!#K#m1N=vHBrVi0*GX9lZXiba#qOM0->3&#E5ePy3QGd<;Bvi3klk)W$noJO zfO808h8a|! zaV)X`haBz9s^4gblS^aZBdXaHm}3J%{SH*z;`0iT;gIS&=#sO%;-cZC85L_(^!moT z+050AJ(>7z7OF~ob0+_KD^oaqABgoxJA6JgKk5H%B@fG`$kg;$D^e?>DK+#YS}eQB z;JfY)mEb0{##Ucvb5$zbYikwxbZTun-?(()(_dw6Kj@u1uyksfTCqY6`VLKpe-B8q zU8kT*V_P>1H5k_0?z;hU6N(oDcK;$9yjoeUs$o%P71m-ie&}Y>I3WXSaa>c*hI_yE zkAf^Yr*+*fy#jnVoS~Ti5DypM#vsg%)0|(82{D_mXZjjQRFCDKDsJ!Wd@rG!*WfAr zAEGy^W1=uZF@(q;Y=skTkVI<^LVF?z&v`G_;JI&;9N-y#@BpS&GqU-X_FgiVOz443 zLEJw~Vo^`506k?ux2-G6pNyoaZdqSf0~597!%W;PixbuT zi9H515w+T-FiNf`%oU1p^wsC5K5`RFuF+y@GB>orI*a1COqKlM76Lo+((BJy;O>+$ z`{6I(m7WaiTVzhHQ+~QY7R4q&hl8y0w;9)U`zaROGalThFpx=XuY?v<|Jtg|R5mi$ zj%z{`ndk$mNI>h>oY#1ao)ovX!=&l3-D_v(H0KVp?(Y88Bsz_UpRCQ0lk$9bTM$Po zAs<9&2MJv8SvHc{Ii4chKXln}F47|W2Jnum>JH%$B=Uouaz~j+S|T-M_aIBnWEz71W*}nhot&j z!L&a*S0VBpxU8gkz{Vbh69>dD3^^hl7{5X_2-8opt9UN@f_>&n1zD-TtEA#jszHi7E8}7Un6GQZ8wtHI7_D^T| z&o8K_gQLCYGogMGR4#-J>MNqi=}fDS@M&*9`)eWb{K5!-&(lU*&kfJWiHKMjZSYHh z4)`KQ^7w(wJ4G?A#)9io6?dVwP?ilqJdCs>Ps$QKHI&e)SyDyW?dvEaF`+z^LpWJr ziAP`zi+v=GkvA7^mjStC0YXH0Cmie`(45+{z?2oa_Ko}OyWLwml#C$hNr8$+lSiv0 zxM@1P-&-LAR@4ICEManZaiQJ{c0%dXVjr-Yi&M7V9))m+Zs%vIju+SQ&ICzD3A5d& zkUo)9y1>*+V2>=0EA7ehku3nGs$mX~8u4>i#OuW?eb)FdNu*h3!q~x*RXqO!v1lmc zk7FbEkGO_N1)+HQ8*Pey;o#yR}El zx<8L<-4Z77d!!{^)7vr@=0^^w&3@YCc-yJ1mYfz`G%hyHDIPGAfk`>4>8NZPr*+&e zMFTciE2r+PjQ?F7#>lJLrUiG_-{`G-!*~3%VB_J`28W9pn+>04L}jXTSO-hhxTy@C zOe)Zp%BB8EC9&0PA9HtVWK=X8D?>!TI^K8fIXw-xr58q{TwYC~o}G5p?3foLTY3+5 zr>|S_WHm6zS1T?^iG81Io0j)a9~(YZE8Jd6m>c z?6txP3Zqr4J$r>pa@7&zRCD6i5b2~TxW>c!6d#ej@jcCaW)zOx%f@WEe6^UM>6-RQ+{~^e5G;0H z)ToZ^LM}}BXtk#Woh}3!3FSb?XE$5j=3d@b_p;6`!}gFqo~I^?v$0a#dg$>y1?sD< z-#WcS#uPP2`zq&Gj$o_OWp<_x4|)+EnHKrRUWGxBnyh0h77Sg9BK;@tG*m%ysiq}o zLd$a<1Ox3$!`+_O3b8#HYy@&C^ZK>fx`#M-U^(PzUNzAKPp;=`bryK(4MPb4coJvj zW|j8PG<+GxN!|h22IOWJMVHu722?3++)3psSO<@2AVDEg2|Fe|`e)?9kvhs%f{4Gv%NiXeIgpFL5{<8e*@X)C zyx!3{RKHv$(a{KDU4;9vQQAf)tyAs0C>rwU-Du7aFeJ72F?lleu5#OLG+P$JNI~|0 z;c`UZoo;By9bAjJrMsx*3P?JLFk-{42U{S?l!N!=7lW2?Yva;bm8o|Z<f#`xeC-@bJ`qZ4mQdn$Oi;ck3E@@Ta zGYvU!(~DoTQfucQO+~aIRRr?|&an_{=4&$yzY?w2JwInDm<>R{Z)WkAWIebA3Ai-iq#VZOaRa*K+w2K3@b zle;w^j_a10Q4je@@v^%@P?sj%Is*96o6+uf^TU4W`C^@1Bo(|?6IS&1d#(I?F-Kv* zR*lFF^_m&YjXL}f&EWVzn?_16;;p_{%bAr}Vhl-w3RlB`y??XJg0j7)^HxL8T5DUx zKY@eLJOrx-$^w~1w_75D76T#3Ml=NTyTzT201TUCru$;OTK(7MVaK&@oYkr1Ar5ld zOa$;3x!8S$DMCUWNx|>j7_{m9f^?a>T63bOVBJ!q?IJ^KndAt>k}qv1D2`pjoHszc z)np<<>UZ<<^f4-p5ZTC%#^8Usg-Mf6>6W-E>Z6L3MQUiivK;$~$?j*!p2mgL1#!ji z>vK8PbETS_%pfNlOsk<#pT|xbvdFUppm}Rw_1O+&nvIBj-gl@OYhrnKXL7QH{N(S+ z%;UT6A`H9LYi3a}MnBpV-SUKUvEd7|v4@2&9&V)$$?M}0fR?bUC1 zy=0SEaJrgH-isTrhCt{XlNOM_WI+nc`N+e3GbBfhWDr;f2?BWnp#G9XBy3ct9$b`b zww1cGf(eX>OtOSt3;~yG8u<%6v}{Y=|| zFcxo82u`&~odK}kB~2}Dy=O_cJP@|gc&?7GgfYp#rQ_zEF#GJ7^ZDgEq$K6DlI{6zRT|Y;zDO@K%WtB8DzH(D(3ws6@XHPn zNMig|;8(k~s|m`fYck}(7~`v&p4%mQK(}sb6{ZOjEk0C@!{yO|4t+b}7GqW$|or}Oy7`u#X{-0OJ{fk9w0sHP?MyGsw zge@{_Y4=qFSaT>0y`{a}~~rmjIsw(5IRN zk2gWC(0h1~Omt(BMqdE4yP^AIXN?CEL0f=cC8borUJ}$JA^a}I_R@5AI#aXXjW&6> zDfs4G@@fb}w5aous=tjPc`rHjLjs3%c61K7zCL%ldEDo|dn_I4=rrb!j_uo_4yJ0d zyt1OQ8u7h%eEt9!PtKFgdt^QD>{m&QiGnBvB)EV>~~i>(bh8`0V;23aYD zVS}+T=3Swn8|fc8J1E-;F8Rki-~=efM9o;*!LrYxnM7v+?cWxL)hi*;Z~yV#SGci>AqU-E~r;}85J0g_H`hhgu8^u4CtaN1QD1*dDRR{xtk z0L>bjq%a@%h%;>On}k=yG82%s%Of!7+9*JDnm%aO5nHYN0PiQ2(9nm_O3YG;~QA#zp1Ceeqwypp*WciZ_}bRRnvwsDeKRgy)RCfAiqUUn3CE0_V~Bf zc)g>m%a;c7B{5x@TE!ca{n)}2XG?&e(|36&TVrvZz@m=0pmdx@OYL2%4qizlof^LB zzaNARxnw9Q5&{VAI_pDm;)QSJrdlk-ZV3TmvP2fRAYSa}xJ`nI93)H3KORVI8G5R~~& z_;q>GdQVS3S{pX{-~fgh)IUlw_6e&Mqbt4Bq9d7y5Qs7jt_mPFiS@R06J9Wu+Q!NwVyx@7!b z-jy_z*)L5?yKSmgzE3gCLMxdSc_Dg!u}M}(+59=@k6OM?G1dm_A`&6e*JWwJVhD@! z^Ul1(EVYEjr*hX#RrwA9lTT~c07c$0$EFd~fPG5<2^B^PLY{?eWPY$rw41%=A-VQ$ zX*dY5g*)9XUO+@8!_?tIoF*)Uqq);GVug&&v6-bboQZbDU!cD&YMT6`W_QDbdNlA{ zz&gE7{@mA3Y_r?j0JXIg;gf5Fp}auT70&Oya*3+q3n$oU4PjUDl(2CAH#2Ec5ff@l zP}g~xh1g#$zFEVVsdMFT`Jr$h=*y*g)5|}m3ZRond>v_coN1HrsYHZmCVUb03VuqG940?812_V14*2;Vc!)feM!uan_%c7qh2WHWD_gZR+;!6J;dk^O@X< z#3nax{S@P6G~A9~T`v0+c;{!3(tzb(o7vHay=rc80?`lBB80Q>9^XH2FE!T3mE|TpLNw#C$fqwDqU-9RD&!vHzu8t=WAe0q!ffXtL zQ|az5tPXq#M6HRxXPvH%^ip>l3!@4vQQzotMQ#=^H9RhENG)*_N%ZS(Xp}n_j`D@% zzni7rY8szdUat(WVT3tF$rt6d)=2x zt+5Hh_*WrLP``A^Fh}qwY>Ea(6&-M%rayzYce@z_4gEg#V}*V!8~AV7eZYg_xaJ#d r#NF-XGnThb7!qt)`Tys&H|$zV-x1+$a}C&#KR{MeNuox~B&6UNTYN&2vPz%Km>m3 zH^29I|9Jn{o*mD#<2mm8y018|^SoZ^>#CCygNXqE0I8;iiXrwo_U}W8kNvJQuP?%0 zfPseU%7FSQregpA0?<@ZG7hsnizdopHfj3XaQ=zIf%G*AL{2l{9-r_vi0v1($}paa z6HTUxgn@znD)RV5lOopZ$uxH|TZW1%&^dC9EjhW&E7qwin&A7J=A@DmWepdf-~FPY z2^*iTjuoo!uii_FZf<7_+Rd2+pDY}A2cu-J*{Ss$Vg^B$B>E2dgP@mqSF}7#6~APN zNrucz{1AJWJpB4n8b3&>X*FD9*kUVMtUibhwxr$Z;;vB-v;bJnl$JRUXRcf`z8OksWV}qi@vOizXITf(e+L#&Z34qJ z6sz&}H^Ivv29=h^b_FxjS`;C>&p|?PNd|KdJ+2EnneIWQ2mI!UcMP=l;r2N8n>jU< zi*F(Z#Ehhk_Kl>*@`QiBL=n+8rhwmS!Z5AR|1J2qZkATc?ymZYx{WH}v*pK%$jV%( zXsto!%eb7ChLU3q60x!bAw@3F)EtGG5a_{E8nU_ckJdcSo-t|*^u}rFk38OaTx<3U z9p|@RP7Eq}sh5>pNReD=b=uMGkbHNco1mPzK$<%TGK+IHvl|3TzYE|l&zt-xve~W1 zCcI)42cr`&JX@XWN{!6*WrRu?mTAc{!Zk>MPxyuGQ1v$=-3u{x>t$+zPqhZx-|x#C zN+rFX6>xHDR;*S@{i-{}$(uGq(_@~S@ZMe*drvi$E7}uUlwI*+7othaw^iK^PX@a= zZJlRYCP{yB1gz&E=XIb5t6a4Ly9|Gbf^8$2X%w5b9+^O z6BB4Yh2Xiy~lHTPhFH()IX5b2%qxeNN73?bnh9dt-|MP59? zm>blc1mQB}a~m-)p%gccE&aBkb{Q2v-XnwfP6+ICEgikc>D`1Lkq`(s87f`YV&lTX zObG3509(`_Gpw3eI@#uLTZMlTXXWb3KnJuEMeqLq*Cp@^^)BfXC7h*zKbAMuqG+_k zq~S1~L^N5!rutSm*A>>w&D~??YifW{(|NRDrwAVK&F#L<4QJFVc$?Qgm0zmfmJ+)h z|Kd6z;tl!%h}|XgNL`NPcNJ2WYP*ms(?Z3d7~`Atk*WhJ5JL>Fev=>+bv>06~(PslljuMzaY#jx7z?&BWFRBe%aPTw_Lr0I<~sD$x#mG|?iOtWu zqyQ5xUzZ{3BMrs+lp+bGD2&#}DQuQVOOm*>i^%!OMF0ET+M@Ruz_rOufp_8c>)lGG zJE}cn&+XC6IQqQcUc~KOzogI@Zb17IWK2D}HtI!dYQnUBt1R^M3jFTq(V>Wmi~8zz zwx1cu7*{yD$Q6?!`aEj}>pwa@3G+>IT@v4YgX?#_>VWpVNXblc@jJ~wVLg&gc|WIj zk4j~Qtf%(f^;U7v(JGL)XC9mn=6!Q}J60cHGo8eeQ{sa4 zY})wGD`{+KO0-+DyIGvuFs>*TdeXBNaR#Tr)uS-&I%P1TVvta)Gvkk_Se!=vLyF!Y}EX0~PncPg-+tkKg-e>=EiU;WstaBU8=fQ?BFoli$hX&=%92c{<9W5mRRE z$R@d_rPpCEZPZ8sFF>^C14GZ;4}SE2E$t@nixeY`jzdQoUiLiP-zxenWO7qlG`e3{ zxZr|yL%tXvoifh|)^J_qkev#GgCzLZz1o8QjriEAWgLXy);K)4j^cu8(Nj1xn(=z3 z4SIm1-ao4|jEgCT^QlqBaLSP>I@-KVZ^!F=1ko!!u#|rpXP)~uFp1INi}L~f)DjrL zg8!!(wtx;cp0-fFj;SRVKe;7E-u!HuYVvwq(#nzS5EKB5g-zk{U;x5-dQY5c&5ME9 zIxW53+r-7^0Vwm>>RZg=jnRh?;2Xaho^Yf6KvhJ(lQPyx8F;ANU-x<#TJ$3}pEE^M zhv6*^aP)RRdVR_EW!#G8yVNTW#$X(Nvoy+Ehbn_q_)}ujZ;mZtq!l4~ice-*Z`hD@ z;fz9v?;JqW^>J{z0Vw1f=LK+Hp>e1#azu+VbBl5&#V&t>wG>;hmmIyzF0!0idBms0 z3sgzlLK@}i?1`R|Dc);u6xfM}M9@Spe+-HCL-DVM5l0wj>@j{$WM?_I;I8(g2qfuv zi81bqtV4&@1w3#yz!`{Byzzm~qt=7?5PnaAtpwiFK%+jbt;Yr;Uwo*1aG|#;33}|> zN*!nc+ww&CVHCy|rXrVI57$>4eD||EG;pvN;lw_(hegAX6M{I ztGBPML6=?|sZe+#4<=`lz|RiBQ)T$@-#NXf^KMgyg=G5uX=d;nynT1_Z+iuAyXIb{ z`tX+qq#1n*KYCEr>|^xE6uJxfYC4rAQeETEDs){4ZMY8wA53R_Z$kpJav5(67h>4& z6SQxS_D8)=6+Z2I7pq}Yw25lU=S2@xeuyR7iJC0KC7$W>L4){$^2RTp;0$8is4?z~ z1P+vEPDznnRn0&de8E;1)CD#*sGKqE;IS4jk=$WYjlgtSR^5%_|nuHgw*- zupUeF7Xbb_!5HCo`3KM93Uet9RKqCH7qWYgt54#eZNR=rws>^j7~c;p>B{rKXC5e< zo{az+E%n8>he@Y09BOo`(|soiw6z?eyl#cwz9w|^;8hRe57h-qgffdi?`IP1{~NXT zht*>7inF%}U~}-nDyNs6qs_lwuJ2guU6e>(+7o-e>a9YUMF@v}^1F<(+0zIv-+qq5 z;0qE0P0udss9P1%OT#~!d@T$002KoMz^6#pc8Nvt|v6qgkxlmXx%h+3~$#(0Dg{0zP zlEAeZYXSECmt#iU^SUgkH6plm)kE6sD5*T|`XM)>Ynur7udK~H@+oh^`kBpjyRnBV z|C%tvc}T4HJyl-=Zq3Wi$r?&40}dTYb7edjZQyp)#0b<%&X+A;wL2z{ER$g3Ye3@$E;E%BB;q6VRiJDc7r#Dut(=Y9t-5KJa;3@ z`5H<7whmy~lnh%j)zR5|D) zbgOOg0PC6frw0$k_fBVB^yylhk6V3$OdC>{Siva`GG)XRF@ ze6;b2QR9pNB#b{fo>3t+=d%mpReR%HQ(Jsm^W&}00~U#V7d2ZMt8My z`jXeq8;YzV`DitD@{A$YJ}s|Zp~2-rzr6U~wqiC|Q2Nm|-Gc#U zqTwU+C`!(0Z1d)M+%Ri9YWyl5s=Yq$)SE7x(YC@VAwzA%kK;*-%_BeST55nZ22f{{ zb>8LC?C&n1AfkkRC(Kr^8W6Rn19#(lt7jv4#wk$vgnyC@PYb61&M`=jAMQPOF{tGD zP7Dj!({_bCYK+ffU^(s2H=N+jGmY_PKq+g{VDr7vov5L<)5*CrBAag66FSlG;_0$b zYHYq>0M$4KS4~H82?m~9?LxqT1csa1iXM;7MLd{38vm(3CUh-@p>2rAT+5xuE}=A! z-}Sjj$1K=VX;6!;ZRhkZyUtp%Dk+=z`LwaE_@7Z|vEI0=ePwPPR8q6J6-h6u#sd8( zM;ug>iH_YAQV4i22hA?dl@zexRu)E;`i%7>J3rTFadgFK?s3)0GF%`AFbmD}# zG9Rj&g+pGxj(JcKQ3BsPPx>~rkAB0y7+BB06~q}Kw(Rx;#&xk{97~$>FQS&AS)uev zx*WNUWOItr;6aQm_pH_kZjh{Ev11-3PK+1-ryRd9#yeNx%cGn7efRBru^}qHKQ|s_ zqYLj$jQ4^X@g{+O(#X(W&HfBGu8O$EtNv<(_Y`F12~mU9$v^iD<`gTUx4CzHf?KWoQHb5A6vzF=04#=KXkD5A6Z_9DlasL_g#d9Yfvo;WCgziIFy&(( zxGBE2EgViJn5g=87&D|c5b#p&+Abk^xfo|@X*ZL8A}q_xT9#1zTAp6nIYZb!qdmdn zPW84`Z|iTx!SsY=6xVkv0I>?!UOHngU-zJ|>F1UO7aS4EyjOqn(M%RwqqXU{j;I-8 zeu4oi-CX5|l@pyoh!MeUMy3XFKN6wVU-!sK@&Qv*$Zj3zTjlP(Jn|4%!l6E16d$*S01bgw z?!shWb9J5gtZ0H8k3FgDu*Xbp>JyR{hb@LSOXdXQ>>hw$a>!8sC8gluX~TOl$Xc5o zom0NFvBh4kyxrh6QJ50DU?8Q0mHc%2uwfWm_W zKa|j#<|6bAouXt$lT&kD7-*V8+}}{!OHXA`FXxDBz$OhAdxOE^Q}(qLgP%igfhi~& z0)=unBC+*qOjmvIQI_9!##gWap!$$lqI*5=U?p2eXRaE?uAyLn(~$|;IBhJk$cWL| zZdqu@Q&DZX z+H(A~laLSg6f>Vt=j-|Oy}1dMcQANR+{u44Z@bRoEjvhZdfC11zhrE&@N*Y` zj&GMCoSX|q2a;l8vNywv>^M)h*PO;PL!(D-Hiu@ZK8c*hgodzMH7YlKp-!UtPyP8< z?1Es_3EoLW%*&{1&1Cko_F*OSPTVM{wAwzp?xjJV<_j{7ox33E$|p@;{B43b7zX*- zf<0cn%RE8|O+vhw8dQY@Cs z;+p+Iu3a-F>^PAZq6f=ESvj1>d$zt2372`0j#@);8mk_q2)?*3acz-3AiD_-+J>(pi>^`S}z5-;3~CNvlBy z;!oD|BZ4`-@|RxQ#_jUvX&b}Fz-yMh#`D5Rb1TTJfP+ zYYuZMpl4yzy03%!~s9>{Ek*dd>O-{2xskCM#i31Db2>9 zHk4lVt35WuQZG~Gf8CwdVhnby2?6H>Y$3lDs0BBy2;4auZbzD>nU(9_H zFIB5Q9Nb2LEA;s-c!kh>IXI)Ng>aCnR*tPL`c%ZDfINr*+n4tUMLc%?HTTypUdhDC z$5W>#R5X05c7pplRkiYmTXj!Yfdcn2_09A4tH{k7#<&AOSp4|9gm%7vZ!Vig?2q}Q zcVEXp8TWCL2KIzcA)osGA~xNizH43z<+y;hl=k0**D2dBd~tBkC=8iM zWk;pQ zX|IJ#X0D4B-PTHZbKPU}Du!;-q)#?tArvS-M!-o4FXmiXM(0R*Ckrw?)EgAB>faQ< zjsM-B*^InfLOQYPDU4g3F&NSoiPvltpLrmEwAQ?Mm-91$vzK^ax9Un!;a_YrN+$)7 zf$G~=ERxPxfj4L-zGAse!Gf;nHR!nEZxKb|+^$=1rIT)!>?JlhE24T>-?v5jgP}<- z)reUgUYswX+vCl;u}_=A!4xJ?`@>IlXg=csPLJisdNb;D5qV?w=qYV@plA5qh+kPT zKC3lK*rZ+L*h<#ToMn|T#|Z~@DTeHDFY4x!Ns6|Gwszyzq`j^AF)t^(z_+S-Oo7X^ zhrB5_JrNx0ZA>>;69u+-9#AO5m8l;J4L z>{M~4exf+DoZz06e$Ac~;k^2%a>Y*Sj?YNih7g`soUsnLn)P%WvF*sEd4leIQv@7|x1eMMd zfFbk(7LdQW@xWeX zaknJnC#nc8AnqpWIsVx@jkZ7e!?6j+P0>E7$C~ zUW$K8<(TeXI~K#6ynTr5uwm&In-mK{n5519wfJD)@Mn1eJ@E!`?JM+oVe24dZH>p_ zvZ8%hYrz*XlY^cVIz~c^>Wh4eYTxt8o`dTE>bUy?Zm-xF7&U>YKvE;l4vyjUb931- zLU!%5_+4;!zH4hL(fu}FXL6&X?OQ*-f9j<Icst=Lem3|46nd5JJ449=3N4^m@q0OB*q3#}O?ez&PZ*@kC3Irn3KOAAj?BFC&d26RQ zDws#}_ns|YZ!_F|Y5wyZh)9oW=k$*D2vmh(un_nAQ0$lbQ;o~lj_$10Qq3^r$}O5O zs9W#AnvXZl`|aWqz0Y)Z<@&>J1=5{grf9_hQI8W&9vhmOtHdZGa@82wdYLC5d))xC2F4Z4v_?Wm2(bZ2|zQ_6n;^z+kBS8%lUE@UMg%|Qh({`iO z5wjChsFS5loRHLDN%Nqms-61OCBd?zry`dk-l=cwvtqzHz3l z&TDGyi$z%2%<6=J&VSU&_u{n~6yN2sso!OK%$w%Z2xE3yT<~1=#I5{7C?#G+--=YK zD}S!c`uWpYfH|1+%hy9(nT6`+b6SVIua;9VJ8G4$q9&FSq!(cX3=B=86)#TK5MOYA zi9xKsie*gZ_R?;I3ePL-g3qp@ThCoGWU`YhLu4T7Ij;;XJNPu4V9OBAXX61EYXf(q zz$+p^H}Q$4W9tQ8kb$CeaLMY@p?z1kC+${H2mY1XBHg+GL{IYCU!)!COq_K z#*KEqMDtAjzio5tAtECsJ}i9Ef_IDd!)V!4zA_K&T!ptT!k##eNTF+Ok-4cTp)^UJi+IYPQ0aaCamkjI!(d$caW zkq@BZjoa>p{L!icIrMu}M0s{Z?#B8hbyY2gs>#jjPC9okpTPSMT_b7;9#4rGr>ycM ze{ZwRngxUHo;NOEi6`HA$|Amdf>c=kqdX!}$PyI!l_yiAQW#BiLQdtz{LtAdw?e9H zx-$Tgu8TMKBB!LDO$(JW&4;X(cb8-EQ~t0zZXD!A@>0mF~_Mpi`seltKhKgbLUJIKZg$Vhu@d6Yf2 zzushQ<rO@7tl5=*da6A zWGZXm3>dca%55Zk2KMH z%xZdXk<{ElxbD!F1We&vCi!nHN2GgfBp(ycYQ!4A=Yqop`omfBlG9#^o6a9gm|48K z`+8PGD_zEW(3dD16+Y+%V(JtvbJF#Ma>2o;!5&?=#}qXrCC5__g%;d$$bqK z4*OwM8wYRgIUpf}y2*j+?EC%3Zc%Uq)Q!MEt!bLTBPRpS?#(y3uFL!2X@Qs%`NPIW z5+mAARRV@iv=#0F!7SL$_Kw!5O8`>wa7zh%ny&AV`pr@L3fudMLc`2GqCeU{X7!K&-#C~v$>A0ffhry|ki#l$Km z!CtrIIkh|%Ac0RUmdXEkyUMdjcQtJ!H3co$MUM~ zn8K8OGyw>1Bjrt+A$+T<(pf<&mo93CRm40`07co$A|JE*2p?`ghMUiINF> z3`)z9!Tl@I&EEuqgGgmb*5IF?Oyg9(1X*OZ@6Rw1xd!8qCp|JJgDi`fSSIjdRhU7u ze0^1$Nu84NXg<4f!*yB&D{y6ENeSAKW-?wbY5zO!gy&5ASvub7TKfU~kK~D0W!jxG zW9v4S^zqg-D)`1gl|^yAN+j zhHR#PJvDii1CmiWg9F2?zzh~)gb0~Njlw!yvCFS67VYcDn>D@)J*kMLVK$pf&MVDM zD`tJVw*k@6WoGv*LJs5gq1v&w0Mv427Ba?HIEJ=vXn@URYLSY++FLVO6<3(vAGKC_ ztNgLjDwMuPAwlJAhSD#yq=L!$jhIOD;i+?VIgXqu<_VEs{4)w0Wci==KEfb5 z3wnk9_#yW=P7%$8Rp?B)Abg{)y6*wld8-GT{{%(y9Ts3gR>62AcH^E-M4`C*Ma*!k0_D(b;Fpcnmq~$>S7hzRHWX?m4}*sS za4l*jfvp{!>u#9#I@!4+dC+Hpff(E{cc+R2%AEsrPVEcVg7Z%_G%? z)M?cq_Q?T%dr57iNO=EI{1hD}#{o}cyd8m`;e-1(Ila#elUdEY_(`m2;klK^ zPX(t0^2n1AjDP1H`Q|}0RodhUY5UDca=$p0X^ZQ(&heliOv3xOb;2Y6DN890HDq)A zI^eoW!=O8F+^WFfTc@k5fwP^Nmxc1OOkpGaGDEK)!v8NXE%PVGm_emx^M)Pf8|-|k z(+0W!><51AFOJvO#9RKp*oPy(Dd_&s-+uiSd`(_^9OuS@osHjsz?*dP{Qu9;*LZKI}%|SH`g?SK2+|bqneJRposVFGj?YcCrTfg4*@bM+a zffveJUt8=fq@>b=)dKpVe_2T=^*`gP{cU4hznh3~gk9@_ILZ-AjmN4g<>WKu&UgXR z$#VA9YUuOn&u;ssJySM+Lf%AI4HwbQdv>|J8ILJ`+uc=&qVA5e3u73ZgoN?jsL)R` zVBnUEu;fWt;)i)L01_bzW|)D{&8LAxfcYB?qVgevZ~}Mfh;kxemE`;7gfQe#TZV=T z7}jd@m3YJog#Og*c>NA2NmeZ1@G}Ikku|DHhnc}t(DlBuLSV6Jt4DBQ$W_%Fg9lX- z0dHo7o;e7e4*rtw4Thy0%gHRfk8NCG{yrB!7#eDH|v;zy{-Gr|9{1 zx@VxQw=N8`GuA>cuw-SI1t4~|;cz}-HJ%v=x= zdh2dlTefR~M_NEhK9Km>pWmumG~=9FsmhHHD%(*QZGnI=&o5RQMM(4)hmf0t?Si6q>kD#H$Tz&-A4VgX!nC8{wLQ_Z zp-z!houd5MA72;yQY>LC@EW7fx)+Z6S1;R|F8*GOvMJ9F$cZ@296WCfM#0ywwBQS* z-ulmF^Fw@moVTX@&fweo&NjJ15#}&BYJu=^ANr9 z;bWLLbD6xZzT929Ce*=whwnY1+lHGJnWqfTd#-9itrJdLr?2tWZr2%-jy265|4vMe zLbv(KVcBK4Z@!UwB(-XZMd!Kuvm%vU2JzUHP9JfJ3c9by=nr;4?y^=L`xReLi{7D_ zayj?hYQm8X!hTb6D7kl`^_c!P;#Gw|T4Q}S3>ohvq|n&#jYcfA9YOf~{Ko(LEp*oB z<J z+%l`Qk=6LlX>NSYSL8^o(Mt+FbK?2YLd~+q)|<;w|2ZKZK$&Q6Ps@v~Rsgrx+;c{2 z=x6Ap=8{GnCAw|F?N7_R(fP#!&gUr(tQ1-h7M)!XK53CuE#s>1sC&RjeS@Y=TzIlg zOhovlv!U7L1+3KG8bCiIY-*+)bwz^as7|%7ZXf-A<=7s=R|FNzzNt5fieBsz~KbUPVsv5l<4I~n60&>koXzAI_;u!@q;b@EgF`Z*pdAiQ$)!x5-0N3#-*Q z2Cr|T?eY<5>Q!N_y9$nN)0ci1E`TomNoLbp_!u`BXa&OFRRp2Qlb()i; zFeGG$OW>!`vqEn5g|C^p*iF0$nnUNwpfRNvDvdVo(Qn1e;P>ME!+6W+=I;$(5&?CQ zCpeGe4Cpjjk|(#OO|&40tZ1w!lP#HdwIe0n{Kqmp_T1KAOhTDn=YBUQh@eRorn;BI zb#~Acw+dCNe&#%dT4rdtHRC;8=4lMjkF%TxWo_sKO>9g_Wfa&!DiV`Vz> zZPt*yQ4G9sfAy4l{Y*k`ZRBk9nQ)RT3C=PAOPhY02oIvZX^i51#03j>0k!_>;}zOM z1_$*3>W4B0{6?pI;#};Pl?YM&Ssx<^YDi+ge9;goaI+H;V(}G@)-xmZ7kEl@iy5~X z9ISVghaN+@*Rb48xT;Fu$K6+o36u0WI&Di~Egd~;au+})l7@SlDQ+QSqBGaunJ^xx zP(GAE4uNX)#wqAR<|r*IbHX*CQ>z^Y_yu=VwxS z6ktxHk1r3cw0{1;5Y3m!|}sj66q(GC03o*YrxBub}Yz1XFB|&g-F?1&yk-z|fBa zTOXU1w)PNlN^7CsVV1S`#0@o;w7y4QM*>)#vHH2P_F4zYD1U9M7g*HM*$N_tm%1)!T`G- zcH~qKzSa<`R%>jFG>72G6E)p1&KMS>PCPtRuC@)$Q}Va57ZJvM zxYp4ATk~;LkOSKNF`oF@VgD_(^{1&Q8kvCtDUoj#B{lColk%E5FN$UYJY0ftb}PNF zoqnn16yD-sQo_Lr^b8N{7~%a4x1Xt+C(r<g|2r~8c@0=?CE{Jp*EUfp(jM&efe;(6WqvU)xn)Y2!J(e zC$;|ZZ0T1{t>QccpR+L8O(*AKIS_@(cz-*Cj`T|#ts6n19Pg3v^Rv9zI7@`ZmVx;+ z#OTSoU;#F`TYP)XEyT2gzyHD6-=|Idxg9&WM`D`k8GY{3nX?~kGK?DIkd0T}V4|v& zouhTHBMAux*u1(Cf`;iIO(zyRc=WWu^-EnDQ%ePPbNI!fk2c4S#qDD_9}gVil1}ne0!$u%1`` zS0BE2&Kf4lPpP`QMvIa;`z%5AX%9QO^ZEfY)nbR*3Zq(o zsUHvT34>g0i20q1{>!al?-JKOJpNPF;u#rlQ>gxEnDMnQZ1=OVUR{IEtJn5JaGQi% z()pRQ*YgfdPOC+xlJ6DQ5w2>G!3nq^5uM5ZT1=ibv1J9=RE#PnYf^_@lvB0G3QC8* z&zqM!BHo@XFh9<){^-6xjsFRwf!~u4CrV$eB2f=sKlv_`-V{r3%-i%ljmxGl0y)T8 z=$xlfPxaoLy6~D`Z{7g*AY`)UkYgvPWk0-7%z6CmHHW#o5bB1Lp;BL9-a9di@1>iH zKl;o3;Y50yoCJQhF4Pl`KtD|?cvEagycNh_?2xmMf6>=j|IchIz-I2M?+FxaN=b8S z0yVnt&Zie%@2kW?TTJRQ?a*B*JsO_epDop_Of(*Z6D4)BGO26ZqxEi7`7lGIKMY5XqsBc<)r>VUxC^s&x1qS9An)gp|+EfnsO4M4_5KT8e4}2VjCn58Z zsM+Y>(bb3#oSGM(jvT9r1V*`lIY>CIb`&g{u3vfwLbc=uriBGFm{h;lNB6(MRmjPT zKl4F0rQY3hYw)md1Y;F%El1_$N%$=PBmH%VFPbDWo?D*BcfcL3PIFaAU2oBjKhlaw z6+237VO%xB=OJv_nqDc|5e5tUM0ZEzKWVtnqfTe->rs5I9{b- z{NiKP`-gzFr($s+Bja^=p|R|W=Q-D5f0wgjB9Lx3|x?haH}+4=9R zg&;nr$=^VnD;ovDs$3sHXs0*7JlfjlIgpNEa(>YPOwX4)yqscUaldj8S4q?OhRS|N zabSWL`Cr}Oe^t1q?B<9jE;;?JA543Aj#qJ{*-%6Cz)-#1}BlRM+V zpFg``Wqwh|0&INV0lCjVtKTIKxW$I=T{;@~rhl#sn^lZ~lS4R!dUStCEa}POxBf1w zXUqT@EQy2BA%3LiO}{qj+WC+8l!2`9X!Hy#EZokUn&yHTRRL3C$-~yA5aSJ9)se&B zUH3?T4?m7%&sSGG?4J6)B{X(#Y&Y`bFkjIC%dsfFxL@>F7EjmoNaPU74IW>)I#Y}4 zen?#NCF|6pkH1I%W#o5;R z6X_XuwpAR8Kev6q{n3n}u2h3`CEubxaisT!Klh&AWp4>T)FscgxTx)DIa-=XM(l6F zy3%()&6r%?o9eknft(sJdO=@aF$Iw{$WCgS*iFI69+=tpPh$Qy@`#8P-yErHJ}`l$ zvMYC{dJHK$F2aj`A2-A^&E}D=Nw=sLa&y`8B3fTkzwhWywbk_LXueX;QK?)wcvufc zFL{bNU^@1^HKF~2Mn&ul(zN=eZuKA*=MQ-8wuI7`%(Co>Fm=sWuf}PRe}CV!C=N?0 zQ+Aav&@HOxxqJBIS~NC?CiCylwgKmbz;c!EY)cnEHqHPM-FjWOB%!oGw~OZYwR|`7 zC>H!#F$ukXg2MjIwhsGk!?ZR_EIlLqea3pYL+4-l?F)YtS8oAZ=8sa#sp(I1IR#u8 z^NOH9Gm1LS#r$wGNn}@bsuX=Lr%$(zSYS|Lf}P51WmMfOHLuqGJq>Yyty)~xhw&;* z_WTP_%=S_#*?8c%VpN6bBFct!)Qq)2vG89r5engSb+nTcbX4__tEB5h11#1e9D_u7K z@*9)Se!X{2P|t9xG67X^Q2ko6-cq3Hs~>#R|89%%RzxX568~fgbSAOYn*Ai=!y3lE zcEJOn7$THlw;OHSC4REsgkHo%wOSt;3Ygs{#pH*(P_uUv!A;K;lTF!gCFAC;rcXC= zu+d|N_f=G`(;#6JYDEb;Mnb)#I{Ox0!zkf-%6A%nZ*2rNl$FgswSmCts7g^G*OgBC z=gO4kBuKf2zo8MuB44z|WEXc1?A&|bF2bnMl#_4adAJqc_itc1#xr@3%B8lR3|6Wk z#;olPc6wd@qBb;2AW|)S;5q0%sxq|2j3q3qJHWjyQU#B09YrzLneY6LuDjSEwz0C| zDC%}c$?wxaSXkkqu!mSd`FqLcjj?68{O8Z|nLl<>u4OVss|h@1SrF{lj)>z8eC-pn zmkib0&ry$lnqST~dVDbZja)R#80@JV+kU(@bX(GEeMnO-d!JsVeX@!KNK$NZ6!Eu_ z&1B)NHk8<@9?1?<^B(<)+F04LOD(E&X7Cs8#=4*JO}r)VT^$-c-(cI5*>xuFGAD)# zJg5+%!7fago%?cj4I*MB>&at|kJRH6 z&}YsPOB@iJhu!j?jy=3#v1@+4JXI)|kO42T!~{VS+dJ?5XW3s6O1lg(gXb+#>|jVo zeVAb$7v`!8l&a7qNQVebf1&2whkv{BrX9HG5~fc!gobHV&RwA5nX0?R^RiHyL7ld) z(nkC9w}O?9VlJWdlw!omOvfE=F*YvJ_}NMnY)>E*CNY7;@JV>w)+RPase@>fLV7>M z3$>?GCI@Y=({uQyU*7oZl1+nH4#7p=h<{K|U1!)VT9-2(CXaT_Eb+&kGl1tMQfhle zixb*=_pUKquLLBb)1)DmbvT&Hld-Owvu0EN3K@;v;>LW$bGC@^A%_0tX8FARwt>uk z;ka{-@H}lw!wjK!lCYHbuCYhlScrHIi_qPXSqphCGE0BWi*@h-mK-*vfgl?8wn*pA zLf?@rHOotq{4h-uVi}z|`#0o4CF<9cM)wo=W|8T1&lypX)k~+b`&8%MrUNO>+BeU< z7uXu_gYeC^jJwI?jJr@W{i37t?11hUBRKh>+!QYH6}J<(K~Mfl1k10>*-kytN#LA* zz4TM`>>PuCy3%{|i_WU0=hu2p{6L9_)r_o_x4O;K%>DHzA z0O{+D`hk~u^AC51Ih`Bd6t&}D`LOT+rxSHJ+n8O#H3@?_WQb!AxgsEu8ax)Wlfj^A z^PaKE-4HE3uicXto8=WeNb2zWegI2GcoXy0-g02zP%6dn0f;w%%!)6tE=OWSB~dWO zmx~a~VjKjk`j#6rDh@y#AF%M+0Fd#L0C-+J1-Q(;<-uG%52d=CB$UWvqSaT#lZE-aR&-6Y-Esbz2+N#wGqENy&o^p6xb2T;)=$3jD|OKmWDIrg75ZQQ!J^!8t#<+GE?uz#LPle>3{b zR6AsSfzK=qGvia*)?O{kg5!h-3%C6wkL+3)3|Es~2V?Qf_=W7KKd*KCG%iirJp~o? zCM!4W8lIT;%BrHiRCtq%x>x^>DCNU_t=c#0j1aVIBa|uZLs1pycCKbpWS4Zet1|<} z46<^=HMS<*V40Ekh<_2Kr|4djw{b_f6;%i7@sYal4K-ivIBU`tpC!Pu|L*7c=QRz+ zmj0xoif5T^xl-1a2CN+f0%ZIo z{Gx1>T|9#YKq;OFPq9JRT^k=2XuU8~?JT2RTviPk-{FF*F3E2OaFD(bS-}@}!M^-R z*ixn%puE#95X}iEs|=n5!toMp5WQ$=%bLfSne}uN20W*BkPGlzg9>AI_*4_jC46>< za{VDg!h1_V>;lz@z0dHbST<&+_u|75l;X&QjSR24qH%_Q^8MIf{wb^XqN+997P3UM zE7|_2oyl&T9B^(Pk%fyQDqO)Ud=@WxMxj@}F2?3hA)9jDY4$py)xL#MOf=)ZG<=Fz zhu{Gdvq-Am39=oOcAlw~JxJu!zcT-%G?12}020ROA#x`rOJvfo%BMVu5-L&~nDxMP zquv(DR6TY@;;J1pb3sSn)6#Dj;8ElE&hg5=iej?*Iom(F!UsXFsHAc5T|+XJ`uN`V z{KLfo|08VthzmeoRez_b63WI32|XpH9}6I5U);!i{vHG(zJCnO?EsK`=9Q*{PJ|;C QclSuISJ^hR|9{W@A0j6DZ~y=R literal 0 HcmV?d00001 diff --git a/Client/system/img/gitWhite.png b/Client/system/img/gitWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..e0851f766146608826f56de946a62fe43c053c25 GIT binary patch literal 6318 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 J#{d6^{RhEk3N!!! literal 0 HcmV?d00001 diff --git a/Client/system/img/searchOnFinal.png b/Client/system/img/searchOnFinal.png new file mode 100644 index 0000000000000000000000000000000000000000..c0318459e7a69404a89f2ed137e0ebb78c8d73ed GIT binary patch literal 6287 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 FzW|Ce&x`;7 literal 0 HcmV?d00001 diff --git a/Client/system/img/test.png b/Client/system/img/test.png new file mode 100644 index 0000000000000000000000000000000000000000..560ecc55412835dd6a3142ed498017745391552f GIT binary patch literal 6462 zcmd6L_MJfbKYkA!}K%5nIuYqNonz zcVhN}@dverAu3 zRZbOGscVXsS)ff=sQ%!k-EFs^_S9YL6h#Jubfj2&8yQuMk=zV<5}l9~Ql|7WYt<=z z)p_Eg-`(C-vg)Mu@sea%@3|S6?TL`+NgIiC5#`(=7Yisy6D?`EMl%`%9H0&6&>4nL= zv4ilbyVg6~fYCjcu!gJJx-*@rHfMb>dY8QSt82LVRd}WUOcXyvxx2=dNy$ej&N9?B z&6y31W`c00Wp9VaY|^@m3iJXEI7piVhBlg@A%ck(T6{Ig*(4{tX-Oe8m#lO2NNs@v zg~6|S$aHdq+WL_C`mhYi9r375gymA;fRE=(_lGatov<{QeJB#6Y?(Bk8#QJv@&SS( zD#7#>%mT-wM{OD&chp^H(3q{ChkFyGlQv}Jq%R(y#)LMGY`(@Kjl?uV{+8=4-72jE z1cfJ9m_8owQ|q> z6>&FW;4m_u)4@CxcJHnWo0DQ{-lhHh>ekF-Q}jRAG*oY?Uq!Gs7L`-T&S{u;q?tg% z?oUPC3+9u~D8e`UJSx|=2~uiZ#bCbU?ST&z?Ixe}z75Tu*mv8l?%ui3jQT@aSOCpD zi`z;YahA@ZF3jaD5p23Q(7iJ6yjCZRuppQpe*h56Y8ZG%CzPx7?YG?}A{(Wvu06qa zzpv2+E1OK?>R;x43ZFlUG0}G5h0yxAJ=^N+h*}MOXt;y{q+F*rIhc&$^^fRyvTqSC z%bW78Ok_BOnjn4}kzzg;=44}&YEI>22P_$0{h&LJF)f^Tb1p-Y5*1vWAlq5z34{dSbmA(Lbj7Xu6NK}SlV`_usRt=%^T-vPYavFEQV!-mTCiB=8o;u; zvmrzX0b7}hi<`2xW*90X{iU`oF^=+Ri9t~yrqcR1CpX?Y4Jb; z1j7ja>R9cc+Oe(5*c^;miZ@B{AW2TzKxcl?Ez2|>8damjJY6{!wxw_L%Z1M!53W0WHc6`qlWlB= z|DC%xruVWQT(`MNopRTjAx12}B~2Fba8U0-+&uE z{DN(8R0q{uYP6S;(ni0>!Ec(GmewGJNtZbq);|V1V9JQ+Flz3@6!P zmVnDm(w)mn69Nao37*}y3U1VggC(Vd)@^wLYgT`;+=VcU^FjGvp z88pagwZ&F76CJ~v=XBvM;CAoOd^>`5njP>sXz%er2>PtS@ZFIl2+j`K#|B$Kr=wWy zlfd#P(r3fudCDU|@43kmIP?Zyp{Yx9$nI9vy>v>OI%l!`3cp|WgoQFfR;Q_Ea;x=O zCcG9I#7!GQp0MzMM^jEgw+UGkTecw%$@<)+0=-etWwtFw5Hj0}%TLNYhL)jgYnI);wJeKU$T;H!Q_eiujj`ue=~5$cm11W zdGN_+!Dd^42DF9t?PPKfCaW`zy&Wk}+l#f4gj29wKmJ&8tX zHi|w1!J_&jppb0luNPY(%HNIoa$#;q>t;~uh8z=ln`LFu#22%=K=$c+3op_T%*D>W>EQwCj&$n`9K1*m^q}ogOj8cc=pLOTcwFESebQ@DO?(a)}+S_;&n(pl~7dwE4VpQ6BIKxZ?1>0q@i5UK#e;lXq z=JNO*-m-sVM!Y>hLqjR;T$?gA&8sN?H&`3& zS~<$Gm2*WWu982Nlbm2aywS@zYKxQ@R}(3d9>O_e9rz~u%zY#TO=}Dbj~Tcs%^)Rp z3Q&ao#-EN>U*&Yyi2Ra{zBXXA6?j!uUHfuftv6vV_QURb%$V?VAcS8CQ; z-@pE`%UM9F?)s&F&gA*U*s_0)$)15Jv~W`X(?8DJtfhkX=OYb&tB_a?KT>%drn!_!i&(^8nH`yxw(bmV>Wv01WzpK^vB`6-j3jkIBlGE5FEOUWt+ zj%0{GVr2dYYoaavht8G@D7g3H3kB|UJOHsgQ0NU)s*b7NyDHtyTVkxmy=4v<6nHw^ zMVeAyBglH>(A>zo zM@k!y^@(ndeU3c)2Spj%2(|t=_-t`bu->ACG8Qpr{S37#3(>4nD|2YKJ`JZ}TZHo| z^Lj5Bf6Hm@EcW%W*C%Y$o*AtfAn5Oqi+|ylZDLndG8$`f#-4NIF8-ErTyRMbZa!u; zTWi_W*Yly8La0OYrOe=&I0oia-q-(f(T`Pfqr!ZU08f1%w^54oMm-)eg{n!;R1Eus znmq8qr(dwix^Os)O(dl`B_hnKAA9~%uY!Y`nX)iRyh|X35Q?d~7f?WQgb zWyU{d6%U3cHf`swL!P|CFCuO=b;)|P5SU*61p_yJznCBiaJ2zA8*mA({7`eJiQNXc zkG9hvKTml$k{I82kJyR@EmMDlcOpORqPI%LC9|WwSiYAA4(;7zK8KwgQsuevPk+&p zwja*_e!s?Z{9Yj?c;QLR&oFnbxA>eqK-RlFh5#F@R8;=w!<7rT*5rfOt+%_B)4)`* z2^QMQqp`ziM@+*B4t8)==;H0G@WgXpR7|N@}&bsg#cR%6UZh7Ny&5tVQ zVRB~2*o7eEVpE@wCdA_2uWB@oF<>-A9e8&4!$t;;sHTFQ{Ffg;fm2v1C zTX@7EeMad@NsKKJ3OxAX*@ktaj7z-0IN5}IyMjYeJ!?<{%MR0jeQ7EG?$p@PR)Ixj zmof5Pd#RX%X$1Y~^wY&SURhiERbtso9emyvS9rm4L{bID>ul&l*JqN|Xu_YhWj9Qt zVF$E-t;T75PHcog!@`@=kl!EN5*)NhK?x!v{E)%^8YBZvAJF#y&k7C+h*qqXz&tY3 zwI`F_&m6aFuXpw@v%q}!b$|%#0D(&BaV6LllH%F};ttV4i66HMGQ+^mwFKb{0~d76 zXyg#qdgwE}qV_l}#d!);ppUh#6)hh)?GUVQZF$1CG;krl$$}^Qd!doRDLfIi;QSqh z42+nwEz3PMSo=tUvC%EDi^l5&uPP`Oa{#{SRHk}6uy{s= z$jg~+vv+Q1h^Wz><3Mn(5p|;6#iVo_sL2e4OJbLY9;HaMfkCZ zn5F!Q6JfUv9{Grt-Z`$hrgf5aZy-~dE<>+4CmMg_Aspwh!n5lVjHeT@Q|ZRq^S6Oi zWfH0k^d5Ktg~GqU0l938f5+gB-?!su*wrTPk&~j3W@vKC;)O)e3uC`8Qwg300=U{D zdZv(Pxj7Jqpu}!+ZF59^8qQFNpY0^UD$=z{;|pUcA6oDvg#<}>e!{s&J0=lUst_gM z10tQJOW;Wd;m=-7NYFpdNUg@K0Arh6Gw$0{a)oEDoLXMN7^IZEpG^q4o_%i`&WKzj zeZo#TrD~gHXZlrQs|sOr?F_7ddIh)BFgPWqo} zBk2UpOQ+0{V{$US{_F7PW6%oHS=xlu(E*%E*SX>Cf1r}bO|C0AWs{+(_hAIP%eI$T z%B%uZ9J~FUPDb8rtf#jCZk4E>6aGn`FJowi~|16&J1!0&8T!@P5Nb{Qnwtq$@(toWrm+%prn`T5*(b>~Mcy@?1 zk=m@7#Q$^tjKD=cT8_QjMxSYkV63xeTBR~JDI?Otv$i3O5O__%x2WHMSY#;WqI7Q$ z0=$#gUrMl8gE2DbL)Jy$*4COu8BMrp!LNQ5UmXk7IY5{Q)M$rQ|BMTM%0DVbXuXcH zt#97@*`(l;C09)my|qN`cHYXQ4?+Ffk-wU{d-?BByID$ess6En#TU8(vrzF&`0V6iG;YR>Xzp&Z;CLCMY5y!A5{i-;}AE6dZaDpYQ zvEo40(_!G^8}RJ~;hIJ~_=UQsr{a%@Kyh$@ht1;->zM>(yBls0}N=m zxQe5ghV7*=z19VS!}#OW^yl}~RA&t# k=@NqNY~@800DP3u1buC`thjd+jI@oS-+2qW|KBk3KLErBGXMYp literal 0 HcmV?d00001 diff --git a/Client/typedef.h b/Client/typedef.h new file mode 100644 index 0000000..499a81d --- /dev/null +++ b/Client/typedef.h @@ -0,0 +1,10 @@ +#ifndef TYPEDEF_H +#define TYPEDEF_H + +typedef enum{ + BROWSE, + EDIT, +}editorMode; + + +#endif // TYPEDEF_H diff --git a/Client/userlogin.cpp b/Client/userlogin.cpp index 51a97b9..7eab7d0 100644 --- a/Client/userlogin.cpp +++ b/Client/userlogin.cpp @@ -23,7 +23,7 @@ UserLogin::UserLogin(QWidget *parent) this->hide(); emit registerButtonClicked(); }); - +#define UIDEBUG #ifndef UIDEBUG //点击登录发送登录信息 connect(ui->btnLogIn,&QPushButton::clicked,[=](){ diff --git a/Client/userlogin.ui b/Client/userlogin.ui index 0e4a538..4da7a6e 100644 --- a/Client/userlogin.ui +++ b/Client/userlogin.ui @@ -27,7 +27,7 @@ - :/img/system/img/bicq.png:/img/system/img/bicq.png + :/img/system/img/bicqGreen.png:/img/system/img/bicqGreen.png @@ -39,7 +39,7 @@ 165 - 30 + 50 100 100 @@ -148,7 +148,7 @@ QPushButton::hover{ - Usesrname + Username @@ -302,7 +302,7 @@ QPushButton::hover{ } - Sign in + Sign In @@ -316,7 +316,7 @@ QPushButton::hover{ 110 - 150 + 170 201 51 @@ -334,7 +334,7 @@ QPushButton::hover{ } - Sign in to BICQ + Sign In to BICQ diff --git a/Client/userregister.ui b/Client/userregister.ui index 7e0bb34..dbaabbf 100644 --- a/Client/userregister.ui +++ b/Client/userregister.ui @@ -23,14 +23,14 @@ - Form + UserRegister - :/img/system/img/bicq.png:/img/system/img/bicq.png + :/img/system/img/bicqGreen.png:/img/system/img/bicqGreen.png - background-color: rgb(255, 255, 255); + @@ -64,7 +64,7 @@ - Usesrname + Username @@ -305,14 +305,14 @@ QPushButton::hover{ } - Sign in + Sign Up - 165 - 30 + 50 + 60 100 100 @@ -330,9 +330,9 @@ QPushButton::hover{ - 110 - 150 - 211 + 160 + 50 + 231 51 @@ -349,7 +349,145 @@ QPushButton::hover{ } - Sign up to BICQ + Sign Up to + + + + + + 163 + 103 + 20 + 20 + + + + + 20 + 20 + + + + + 10 + 10 + + + + QLabel +{ + background-color:transparent; +} + + + + + + :/img/system/img/dot.png + + + true + + + + + + 174 + 96 + 20 + 20 + + + + + 20 + 20 + + + + + 10 + 10 + + + + QLabel +{ + background-color:transparent; +} + + + + + + :/img/system/img/dot.png + + + true + + + + + + 150 + 106 + 20 + 20 + + + + + 20 + 20 + + + + + 10 + 10 + + + + QLabel +{ + background-color:transparent; +} + + + + + + :/img/system/img/dot.png + + + true + + + + + + 303 + 46 + 101 + 51 + + + + + Microsoft YaHei + 20 + 75 + true + + + + QLabel +{ + color: rgb(18,150,219); +} + + + BICQ diff --git a/Client/widget.cpp b/Client/widget.cpp index 58453cd..6a5bfa6 100644 --- a/Client/widget.cpp +++ b/Client/widget.cpp @@ -1,34 +1,38 @@ #include "widget.h" #include "ui_widget.h" -#include "highlighter.h" -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include "myhighlighter.h" +#include "codeeditor.h" +#include "typedef.h" +#include Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); - + configEditor = new CodeEditor(); + configEditor->setMode(BROWSE); + ui->gridLayout_3->addWidget(configEditor); connect (ui->listWidget, &QListWidget::itemDoubleClicked, this, &Widget::showContents); } Widget::~Widget() { delete ui; + } void Widget::on_pushButton_clicked() { - QString giturl = "https://gitee.com/api/v5/repos/" + ui->lineEdit->text() + "/" + - ui->lineEdit_2->text() + "/git/trees/master"; - QByteArray file = get(giturl); + QByteArray file = get(ui->lineEdit->text ()); QJsonDocument newjson = QJsonDocument::fromJson(file); QJsonObject jsonObject = newjson.object (); @@ -60,14 +64,20 @@ void Widget::showContents(QListWidgetItem * nowItem) { QJsonValue iconArray = array.at(i); QJsonObject icon = iconArray.toObject(); + if(icon["path"].toString ()==nowItem->text ()) { QByteArray content = get(icon["url"].toString ()); QJsonDocument newjson = QJsonDocument::fromJson(content); QJsonObject jsonObject = newjson.object (); - ui->textEdit->setText ( QByteArray::fromBase64(jsonObject["content"].toString ().toUtf8 ())); - Highlighter * h = new Highlighter(ui->textEdit->document ()); + configEditor->setPlainText(QByteArray::fromBase64(jsonObject["content"].toString ().toUtf8 ()).data ()); + //ui->gridLayout->addWidget(configEditor); + QString text = "def hhh()"; + MyHighLighter *highlighter = new MyHighLighter(configEditor->document()); + + //Highlighter * h = new Highlighter(ui->textEdit->document ()); + } } @@ -77,7 +87,6 @@ void Widget::showContents(QListWidgetItem * nowItem) // git commit try at: https://gitee.com/api/v5/repos/jasonliu233/gitstudy/commits/master // git tree at: https://gitee.com/api/v5/repos/jasonliu233/zhishigongcheng/git/trees/master - int captureGitRepo(QString raw, QList &authors, QList &repos, QList &commits) { QRegExp reg("@\\[((?:[^ ,\\,])+),[ ]*((?:[^ ,\\,])+)(?:,[ ]*((?:[^ ,\\,])*))?\\]"); int pos = 0, initial = authors.size(); diff --git a/Client/widget.h b/Client/widget.h index 201451b..0e1b5ef 100644 --- a/Client/widget.h +++ b/Client/widget.h @@ -7,6 +7,8 @@ #include #include #include +#include + QT_BEGIN_NAMESPACE namespace Ui { class Widget; } @@ -42,11 +44,10 @@ private slots: private: Ui::Widget *ui; QJsonValue arrayValue; + CodeEditor *configEditor; }; + int captureGitRepo(QString raw, QList &authors, QList &repos, QList &commits); QString generateGitMessage(QString owner, QString repo, QString sha); -QByteArray get(const QString &str_url); - #endif // WIDGET_H - diff --git a/Client/widget.ui b/Client/widget.ui index 0ea2faa..9613d09 100644 --- a/Client/widget.ui +++ b/Client/widget.ui @@ -107,17 +107,28 @@ QLineEdit::focus 80 + + PointingHandCursor + - background-color: rgb(46,46,46); + QPushButton{ + border:1px solid rgb(55,63,85); + border-radius: 10px; + background-color:rgb(22,138,173); +} +QPushButton::hover{ + + border:1px solid rgb(55,63,85); + border-radius: 10px; + background-color:rgb(18,150,219); +} - - :/img/system/img/gitBtnOff.png - :/img/system/img/gitBtnOn.png - + + :/img/system/img/gitWhite.png:/img/system/img/gitWhite.png @@ -214,22 +225,6 @@ border-style: solid; - - - - - Microsoft Yi Baiti - 12 - - - - background-color: rgb(245, 245, 245); - - - QFrame::NoFrame - - - @@ -279,8 +274,17 @@ border-style: solid; + + + + 0 + + + - + + + -- Gitee