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