1 #include "mainwindow.hh"
2 #include "ui_mainwindow.h"
3 #include "listwithsearch.hh"
4 #include "../../../src/easylogging++.h"
5 
6 #include <QFile>
7 #include <QTextStream>
8 #include <QMessageBox>
9 
10 class LogTerminal : public el::LogDispatchCallback {
11 public:
setTerminalBox(QPlainTextEdit * t)12     void setTerminalBox(QPlainTextEdit* t)
13     {
14         m_terminalBox = t;
15     }
16 protected:
handle(const el::LogDispatchData * data)17     void handle(const el::LogDispatchData* data) noexcept override
18       {
19           dispatch(data->logMessage()->logger()->logBuilder()->build(data->logMessage(), false));
20       }
21 private:
22     QPlainTextEdit* m_terminalBox;
23 
dispatch(el::base::type::string_t && logLine)24     void dispatch(el::base::type::string_t&& logLine) noexcept
25     {
26         m_terminalBox->appendPlainText(QString::fromStdString(logLine));
27         m_terminalBox->ensureCursorVisible();
28     }
29 };
30 
MainWindow(QWidget * parent)31 MainWindow::MainWindow(QWidget *parent) :
32     QMainWindow(parent),
33     ui(new Ui::MainWindow)
34 {
35     ui->setupUi(this);
36     this->setWindowTitle("Fast Dictionary Sample - Easylogging++");
37     list = new ListWithSearch(ListWithSearch::kCaseInsensitive, this);
38     this->setGeometry(0, 0, 800, 600);
39     initializeDictionary("words.txt");
40     list->setFocus();
41     connect(list, SIGNAL(selectionMade(QString)), this, SLOT(onSelectionMade(QString)));
42     ui->labelAbout->setText("Easylogging++ v" + QString::fromStdString(el::VersionInfo::version()));
43 
44     el::Helpers::installLogDispatchCallback<LogTerminal>("LogTerminal");
45     LogTerminal* logTerminal = el::Helpers::logDispatchCallback<LogTerminal>("LogTerminal");
46     logTerminal->setTerminalBox(ui->plainTextEdit);
47 }
48 
~MainWindow()49 MainWindow::~MainWindow()
50 {
51     el::Helpers::uninstallLogDispatchCallback<LogTerminal>("LogTerminal");
52     delete list;
53     delete ui;
54 }
55 
resizeEvent(QResizeEvent *)56 void MainWindow::resizeEvent(QResizeEvent *)
57 {
58     list->setGeometry(0, 0, 300, height() - 100);
59     int contentsX = list->geometry().x() + list->geometry().width() + 10;
60     ui->wordLabel->setGeometry(contentsX, 0, width() - list->width(), height());
61     ui->labelAbout->setGeometry(contentsX, height() - 150, width(), 50);
62     ui->plainTextEdit->setGeometry(0, height() - 100, width(), 100);
63     ui->buttonInfo->setGeometry (width() - ui->buttonInfo->width() - 5, height() - ui->buttonInfo->height() - 105, ui->buttonInfo->width(), ui->buttonInfo->height());
64 }
65 
onSelectionMade(const QString & word)66 void MainWindow::onSelectionMade(const QString &word)
67 {
68     ui->wordLabel->setText(word);
69 }
70 
initializeDictionary(const QString & wordsFile)71 void MainWindow::initializeDictionary(const QString& wordsFile) {
72     TIMED_FUNC(initializeDictionaryTimer);
73 
74     QFile file("<Words_file_path>/easyloggingpp/samples/Qt/fast-dictionary/" + wordsFile);
75     if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
76         QTextStream inStream(&file);
77         while (!file.atEnd()) {
78             VLOG_EVERY_N(10000, 1) << "Still loading dictionary, this is iteration #" <<  ELPP_COUNTER_POS ;
79             list->add(inStream.readLine());
80         }
81     } else {
82         LOG(ERROR) << "Unable to open words.txt";
83     }
84 
85 }
86 
on_buttonInfo_clicked()87 void MainWindow::on_buttonInfo_clicked()
88 {
89     QString infoText = QString("") +
90             QString("This sample is to demonstrate a some usage of Easylogging++ and other possibilities.") +
91             QString("You may use this sample as starting point of how you may log your Qt/C++ application.") +
92             QString("Dictionary application has nothing to do with what happens internally in Easylogging++, in fact") +
93             QString("this is just another application made for sample purpose.\n\n") +
94             QString("This sample was originally made on 16G ram and 3.9GHz processor running Linux Mint 14 (Cinnamon) so it might") +
95             QString("perform slow on your machine. But regardless of performance of this sample, Easylogging++") +
96             QString(" itself should perform pretty good.");
97     QMessageBox::information(this, "Information about this sample", infoText);
98 }
99