Qt: implement simple find dialog for logs (#3941)

This commit is contained in:
Megamouse 2018-01-05 00:41:10 +01:00 committed by Ivan
parent 83b541ea9d
commit 19d181fa4c
6 changed files with 151 additions and 6 deletions

View file

@ -102,22 +102,24 @@ static gui_listener s_gui_listener;
log_frame::log_frame(std::shared_ptr<gui_settings> guiSettings, QWidget *parent) : QDockWidget(tr("Log"), parent), xgui_settings(guiSettings)
{
QTabWidget* tabWidget = new QTabWidget;
m_tabWidget = new QTabWidget;
m_log = new QTextEdit(tabWidget);
m_log = new QTextEdit(m_tabWidget);
m_log->setObjectName("log_frame");
m_log->setReadOnly(true);
m_log->setContextMenuPolicy(Qt::CustomContextMenu);
m_log->installEventFilter(this);
m_tty = new QTextEdit(tabWidget);
m_tty = new QTextEdit(m_tabWidget);
m_tty->setObjectName("tty_frame");
m_tty->setReadOnly(true);
m_tty->setContextMenuPolicy(Qt::CustomContextMenu);
m_tty->installEventFilter(this);
tabWidget->addTab(m_log, tr("Log"));
tabWidget->addTab(m_tty, tr("TTY"));
m_tabWidget->addTab(m_log, tr("Log"));
m_tabWidget->addTab(m_tty, tr("TTY"));
setWidget(tabWidget);
setWidget(m_tabWidget);
// Open or create TTY.log
m_tty_file.open(fs::get_config_dir() + "TTY.log", fs::read + fs::create);
@ -259,6 +261,12 @@ void log_frame::CreateAndConnectActions()
menu->exec(mapToGlobal(pos));
});
connect(m_tabWidget, &QTabWidget::currentChanged, [this](int index)
{
if (m_find_dialog)
m_find_dialog->close();
});
LoadSettings();
}
@ -435,3 +443,25 @@ void log_frame::closeEvent(QCloseEvent *event)
QDockWidget::closeEvent(event);
Q_EMIT LogFrameClosed();
}
bool log_frame::eventFilter(QObject* object, QEvent* event)
{
if (object != m_log && object != m_tty)
{
return QDockWidget::eventFilter(object, event);
}
if (event->type() == QEvent::KeyPress)
{
QKeyEvent* e = (QKeyEvent*)event;
if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_F)
{
if (m_find_dialog && m_find_dialog->isVisible())
m_find_dialog->close();
m_find_dialog = std::make_unique<find_dialog>((QTextEdit*)object, this);
}
}
return QDockWidget::eventFilter(object, event);
}