History

Factor LogDialog

Atlante45 committed 9 years ago

Commit 2962dd61 parent fcb74bc6 files · +226 −173Browse files

Showing the changes to interface/src/ui/BaseLogDialog.cpp (1 of 6 files). Show all

Unified · Split

interface/src/ui/BaseLogDialog.cpp+139−0
@@ -0,0 +1,139 @@
1+//
2+// BaseLogDialog.cpp
3+// interface/src/ui
4+//
5+// Created by Clement Brisset on 1/31/17.
6+// Copyright 2017 High Fidelity, Inc.
7+//
8+// Distributed under the Apache License, Version 2.0.
9+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10+//
11+
12+#include "BaseLogDialog.h"
13+
14+#include <QDir>
15+#include <QLineEdit>
16+#include <QPlainTextEdit>
17+#include <QPushButton>
18+#include <QSyntaxHighlighter>
19+
20+#include <PathUtils.h>
21+
22+const int TOP_BAR_HEIGHT = 46;
23+const int INITIAL_WIDTH = 720;
24+const int INITIAL_HEIGHT = 480;
25+const int MINIMAL_WIDTH = 570;
26+const int SEARCH_BUTTON_LEFT = 25;
27+const int SEARCH_BUTTON_WIDTH = 20;
28+const int SEARCH_TEXT_WIDTH = 240;
29+const QColor HIGHLIGHT_COLOR = QColor("#3366CC");
30+
31+class KeywordHighlighter : public QSyntaxHighlighter {
32+public:
33+ KeywordHighlighter(QTextDocument* parent = nullptr);
34+ QString keyword;
35+
36+protected:
37+ void highlightBlock(const QString& text) override;
38+
39+private:
40+ QTextCharFormat keywordFormat;
41+
42+};
43+
44+BaseLogDialog::BaseLogDialog(QWidget* parent) : QDialog(parent, Qt::Window) {
45+ setWindowTitle("Base Log");
46+ setAttribute(Qt::WA_DeleteOnClose);
47+
48+ QFile styleSheet(PathUtils::resourcesPath() + "styles/log_dialog.qss");
49+ if (styleSheet.open(QIODevice::ReadOnly)) {
50+ QDir::setCurrent(PathUtils::resourcesPath());
51+ setStyleSheet(styleSheet.readAll());
52+ }
53+
54+ initControls();
55+
56+ resize(INITIAL_WIDTH, INITIAL_HEIGHT);
57+ setMinimumWidth(MINIMAL_WIDTH);
58+}
59+
60+BaseLogDialog::~BaseLogDialog() {
61+ deleteLater();
62+}
63+
64+void BaseLogDialog::initControls() {
65+ _searchButton = new QPushButton(this);
66+ // set object name for css styling
67+ _searchButton->setObjectName("searchButton");
68+ _leftPad = SEARCH_BUTTON_LEFT;
69+ _searchButton->setGeometry(_leftPad, ELEMENT_MARGIN, SEARCH_BUTTON_WIDTH, ELEMENT_HEIGHT);
70+ _leftPad += SEARCH_BUTTON_WIDTH;
71+ _searchButton->show();
72+ connect(_searchButton, SIGNAL(clicked()), SLOT(handleSearchButton()));
73+
74+ _searchTextBox = new QLineEdit(this);
75+ // disable blue outline in Mac
76+ _searchTextBox->setAttribute(Qt::WA_MacShowFocusRect, false);
77+ _searchTextBox->setGeometry(_leftPad, ELEMENT_MARGIN, SEARCH_TEXT_WIDTH, ELEMENT_HEIGHT);
78+ _leftPad += SEARCH_TEXT_WIDTH + CHECKBOX_MARGIN;
79+ _searchTextBox->show();
80+ connect(_searchTextBox, SIGNAL(textChanged(QString)), SLOT(handleSearchTextChanged(QString)));
81+
82+ _logTextBox = new QPlainTextEdit(this);
83+ _logTextBox->setReadOnly(true);
84+ _logTextBox->show();
85+ _highlighter = new KeywordHighlighter(_logTextBox->document());
86+
87+}
88+
89+void BaseLogDialog::showEvent(QShowEvent* event) {
90+ showLogData();
91+}
92+
93+void BaseLogDialog::resizeEvent(QResizeEvent* event) {
94+ _logTextBox->setGeometry(0, TOP_BAR_HEIGHT, width(), height() - TOP_BAR_HEIGHT);
95+}
96+
97+void BaseLogDialog::appendLogLine(QString logLine) {
98+ if (isVisible()) {
99+ if (logLine.contains(_searchTerm, Qt::CaseInsensitive)) {
100+ _logTextBox->appendPlainText(logLine.trimmed());
101+ }
102+ }
103+}
104+
105+void BaseLogDialog::handleSearchButton() {
106+ _searchTextBox->setFocus();
107+}
108+
109+void BaseLogDialog::handleSearchTextChanged(QString searchText) {
110+ _searchTerm = searchText;
111+ _highlighter->keyword = searchText;
112+ showLogData();
113+}
114+
115+void BaseLogDialog::showLogData() {
116+ _logTextBox->clear();
117+ _logTextBox->insertPlainText(getCurrentLog());
118+ _logTextBox->ensureCursorVisible();
119+}
120+
121+
122+
123+KeywordHighlighter::KeywordHighlighter(QTextDocument* parent) : QSyntaxHighlighter(parent) {
124+ keywordFormat.setForeground(HIGHLIGHT_COLOR);
125+}
126+
127+void KeywordHighlighter::highlightBlock(const QString& text) {
128+ if (keyword.isNull() || keyword.isEmpty()) {
129+ return;
130+ }
131+
132+ int index = text.indexOf(keyword, 0, Qt::CaseInsensitive);
133+ int length = keyword.length();
134+
135+ while (index >= 0) {
136+ setFormat(index, length, keywordFormat);
137+ index = text.indexOf(keyword, index + length, Qt::CaseInsensitive);
138+ }
139+}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t