RabbitCommon v2.3.3
Loading...
Searching...
No Matches
DockDebugLog.cpp
1// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2// Author Kang Lin <kl222@126.com>
3
4#include <QMenu>
5#include <QSettings>
6#include <QScrollBar>
7#include <QInputDialog>
8
9#include "DockDebugLog.h"
10#include "ui_DockDebugLog.h"
11#include "TitleBar.h"
12#include "Log.h"
13#include "RabbitCommonDir.h"
14#include "RabbitCommonTools.h"
15#include "DlgFilter.h"
16
17CDockDebugLog* g_pDcokDebugLog = nullptr;
18
19CDockDebugLog::CDockDebugLog(QWidget *parent) :
20 QDockWidget(parent),
21 ui(new Ui::CDockDebugLog)
22{
23 // Must set ObjectName then restore it. See: saveState help document
24 setObjectName("dockDebugLog");
25 ui->setupUi(this);
26 this->hide();
27
28 bool check = connect(this, &QDockWidget::visibilityChanged, this, [=](bool visible) {
29 if (visible) {
30 ui->txtDebugLog->horizontalScrollBar()->setValue(0);
31 }
32 });
33 Q_ASSERT(check);
34 check = connect(this, SIGNAL(sigAddLog(QString)),
35 this, SLOT(slotAddLog(QString)));
36 Q_ASSERT(check);
37
38 static QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
39 QSettings::IniFormat);
40
41 RabbitCommon::CTitleBar* pDockTitleBar = new RabbitCommon::CTitleBar(this);
42 if(pDockTitleBar) {
43 // Set title widget
44 setTitleBarWidget(pDockTitleBar);
45
46 // Create filter pushbutton in title bar
47 QMenu* pMenu = new QMenu(tr("Tools"), pDockTitleBar);
48 QPushButton* pWrap = pDockTitleBar->CreateSmallPushButton(
49 QIcon::fromTheme("tools"), pDockTitleBar);
50 pWrap->setToolTip(tr("Wrap"));
51 pWrap->setMenu(pMenu);
52 QList<QWidget*> lstWidget;
53 lstWidget << pWrap;
54 pDockTitleBar->AddWidgets(lstWidget);
55
56 QString szTitle;
57
58 szTitle = tr("Clear");
59 pMenu->addAction(QIcon::fromTheme("edit-clear"), szTitle, [&](){
60 ui->txtDebugLog->clear();
61 });
62
63 szTitle = tr("Wrap");
64 QIcon iconWrap;
65 int nWrap = QPlainTextEdit::NoWrap;
66 nWrap = set.value("DockDebugLog/Wrap", nWrap).toInt();
67 if(nWrap == QPlainTextEdit::NoWrap)
68 {
69 szTitle = tr("Wrap");
70 iconWrap = QIcon::fromTheme("text-wrap");
71 } else {
72 szTitle = tr("No wrap");
73 iconWrap = QIcon::fromTheme("format-justify-fill");
74 }
75 ui->txtDebugLog->setLineWrapMode((QPlainTextEdit::LineWrapMode)nWrap);
76 pMenu->addAction(iconWrap, szTitle, this, [&](){
77 QAction* p = qobject_cast<QAction*>(sender());
78 p->setCheckable(true);
79 if(ui->txtDebugLog->lineWrapMode() == QPlainTextEdit::NoWrap)
80 {
81 p->setText(tr("No wrap"));
82 p->setIcon(QIcon::fromTheme("format-justify-fill"));
83 p->setChecked(true);
84 ui->txtDebugLog->setLineWrapMode(QPlainTextEdit::WidgetWidth);
85 } else {
86 p->setText(tr("Wrap"));
87 p->setIcon(QIcon::fromTheme("text-wrap"));
88 p->setChecked(false);
89 ui->txtDebugLog->setLineWrapMode(QPlainTextEdit::NoWrap);
90 }
91 int nWrap = ui->txtDebugLog->lineWrapMode();
92 set.setValue("DockDebugLog/Wrap", nWrap);
93 });
94
95 QString szInclude = set.value("DockDebugLog/Filter/Include").toString();
96 SetInclude(szInclude);
97 QString szExclude = set.value("DockDebugLog/Filter/Exclude").toString();
98 SetExclude(szExclude);
99 pMenu->addAction(QIcon::fromTheme("filter"), tr("Filter"), [&](){
100 QString szInclude = set.value("DockDebugLog/Filter/Include").toString();
101 QString szExclude = set.value("DockDebugLog/Filter/Exclude").toString();
102 CDlgFilter f(this);
103 f.SetFilter(szInclude, szExclude);
104 if(QDialog::Accepted == RC_SHOW_WINDOW(&f)) {
105 f.GetFilter(szInclude, szExclude);
106 this->SetInclude(szInclude);
107 this->SetExclude(szExclude);
108 set.setValue("DockDebugLog/Filter/Include", szInclude);
109 set.setValue("DockDebugLog/Filter/Exclude", szExclude);
110 }
111 });
112
113 int nMaxBlockCount = set.value("DockDebugLog/MaximumBlockCount", ui->txtDebugLog->maximumBlockCount()).toInt();
114 ui->txtDebugLog->setMaximumBlockCount(nMaxBlockCount);
115 pMenu->addAction(tr("Set maximum block count"), [&](){
116 bool ok = false;
117 int count = QInputDialog::getInt(this,
118 tr("Set maximum block count"),
119 tr("Set maximum block count"),
120 ui->txtDebugLog->maximumBlockCount(),
121 0, 100000, 1, &ok);
122 if(ok) {
123 this->ui->txtDebugLog->setMaximumBlockCount(count);
124 set.setValue("DockDebugLog/MaximumBlockCount", ui->txtDebugLog->maximumBlockCount());
125 }
126 });
127
128 pMenu->addSeparator();
129 pMenu->addAction(QIcon::fromTheme("document-open"),
130 QObject::tr("Open Log configure file"),
131 [](){RabbitCommon::OpenLogConfigureFile();});
132 pMenu->addAction(QIcon::fromTheme("document-open"),
133 QObject::tr("Open Log file"),
134 [](){RabbitCommon::OpenLogFile();});
135 pMenu->addAction(QIcon::fromTheme("folder-open"),
136 tr("Open log folder"), [](){
137 RabbitCommon::OpenLogFolder();
138 });
139 }
140}
141
142CDockDebugLog::~CDockDebugLog()
143{
144 g_pDcokDebugLog = nullptr;
145 delete ui;
146}
147
148int CDockDebugLog::SetInclude(const QString &szInclude)
149{
150 m_reInclude = QRegularExpression(szInclude);
151 return 0;
152}
153
154int CDockDebugLog::SetExclude(const QString &szExclude)
155{
156 m_reExclude = QRegularExpression(szExclude);
157 return 0;
158}
159
160void CDockDebugLog::slotAddLog(const QString &szLog)
161{
162 if(m_reInclude.isValid() && !m_reInclude.pattern().isEmpty()) {
163 QRegularExpressionMatch m = m_reInclude.match(szLog);
164 if(!m.hasMatch()) {
165 return;
166 }
167 }
168 if(m_reExclude.isValid() && !m_reExclude.pattern().isEmpty()) {
169 QRegularExpressionMatch m = m_reExclude.match(szLog);
170 if(m.hasMatch()) {
171 return;
172 }
173 }
174 ui->txtDebugLog->appendPlainText(szLog);
175 return;
176}
Set filter dialog.
Definition DlgFilter.h:18
The CDockDebugLog class.
The cursom title bar for QWidget, QDockWidget etc.
Definition TitleBar.h:48
int AddWidgets(QList< QWidget * > pLstWidget)
Add user-defined buttons.
Definition TitleBar.cpp:144