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
22const int TOP_BAR_HEIGHT = 46;
23const int INITIAL_WIDTH = 720;
24const int INITIAL_HEIGHT = 480;
25const int MINIMAL_WIDTH = 570;
26const int SEARCH_BUTTON_LEFT = 25;
27const int SEARCH_BUTTON_WIDTH = 20;
28const int SEARCH_TEXT_WIDTH = 240;
29const QColor HIGHLIGHT_COLOR = QColor("#3366CC");
30
31class KeywordHighlighter : public QSyntaxHighlighter {
32public:
33 KeywordHighlighter(QTextDocument* parent = nullptr);
34 QString keyword;
35
36protected:
37 void highlightBlock(const QString& text) override;
38
39private:
40 QTextCharFormat keywordFormat;
41
42};
43
44BaseLogDialog::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
60BaseLogDialog::~BaseLogDialog() {
61 deleteLater();
62}
63
64void 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
89void BaseLogDialog::showEvent(QShowEvent* event) {
90 showLogData();
91}
92
93void BaseLogDialog::resizeEvent(QResizeEvent* event) {
94 _logTextBox->setGeometry(0, TOP_BAR_HEIGHT, width(), height() - TOP_BAR_HEIGHT);
95}
96
97void BaseLogDialog::appendLogLine(QString logLine) {
98 if (isVisible()) {
99 if (logLine.contains(_searchTerm, Qt::CaseInsensitive)) {
100 _logTextBox->appendPlainText(logLine.trimmed());
101 }
102 }
103}
104
105void BaseLogDialog::handleSearchButton() {
106 _searchTextBox->setFocus();
107}
108
109void BaseLogDialog::handleSearchTextChanged(QString searchText) {
110 _searchTerm = searchText;
111 _highlighter->keyword = searchText;
112 showLogData();
113}
114
115void BaseLogDialog::showLogData() {
116 _logTextBox->clear();
117 _logTextBox->insertPlainText(getCurrentLog());
118 _logTextBox->ensureCursorVisible();
119}
120
121
122
123KeywordHighlighter::KeywordHighlighter(QTextDocument* parent) : QSyntaxHighlighter(parent) {
124 keywordFormat.setForeground(HIGHLIGHT_COLOR);
125}
126
127void 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