mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-13 07:14:49 +00:00
Qt: implement simple find dialog for logs (#3941)
This commit is contained in:
parent
83b541ea9d
commit
19d181fa4c
@ -912,6 +912,7 @@
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="rpcs3qt\about_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\find_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\gamepads_settings_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\game_compatibility.cpp" />
|
||||
<ClCompile Include="rpcs3qt\game_list_grid.cpp" />
|
||||
@ -1286,6 +1287,7 @@
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"</Command>
|
||||
</CustomBuild>
|
||||
<ClInclude Include="rpcs3qt\find_dialog.h" />
|
||||
<ClInclude Include="rpcs3qt\custom_table_widget_item.h" />
|
||||
<ClInclude Include="rpcs3qt\gamepads_settings_dialog.h" />
|
||||
<CustomBuild Include="rpcs3qt\game_compatibility.h">
|
||||
|
@ -584,6 +584,9 @@
|
||||
<ClCompile Include="rpcs3qt\game_compatibility.cpp">
|
||||
<Filter>Gui\game list</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="rpcs3qt\find_dialog.cpp">
|
||||
<Filter>Gui\misc dialogs</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="\rpcs3qt\*.h">
|
||||
@ -661,6 +664,9 @@
|
||||
<ClInclude Include="evdev_joystick_handler.h">
|
||||
<Filter>Io\evdev</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="rpcs3qt\find_dialog.h">
|
||||
<Filter>Gui\misc dialogs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="rpcs3qt\custom_table_widget_item.h">
|
||||
<Filter>Gui\game list</Filter>
|
||||
</ClInclude>
|
||||
|
73
rpcs3/rpcs3qt/find_dialog.cpp
Normal file
73
rpcs3/rpcs3qt/find_dialog.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
#include "find_dialog.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
|
||||
find_dialog::find_dialog(QTextEdit* edit, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), m_text_edit(edit)
|
||||
{
|
||||
setWindowTitle(tr("Find string"));
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
|
||||
m_find_bar = new QLineEdit();
|
||||
m_find_bar->setPlaceholderText(tr("Search..."));
|
||||
|
||||
m_find_first = new QPushButton(tr("First"));
|
||||
m_find_last = new QPushButton(tr("Last"));
|
||||
m_find_next = new QPushButton(tr("Next"));
|
||||
m_find_previous = new QPushButton(tr("Previous"));
|
||||
|
||||
QHBoxLayout* button_layout = new QHBoxLayout();
|
||||
button_layout->addWidget(m_find_first);
|
||||
button_layout->addWidget(m_find_last);
|
||||
button_layout->addWidget(m_find_next);
|
||||
button_layout->addWidget(m_find_previous);
|
||||
|
||||
QVBoxLayout* layout = new QVBoxLayout();
|
||||
layout->addWidget(m_find_bar);
|
||||
layout->addLayout(button_layout);
|
||||
setLayout(layout);
|
||||
|
||||
connect(m_find_first, &QPushButton::pressed, this, &find_dialog::find_first);
|
||||
connect(m_find_last, &QPushButton::pressed, this, &find_dialog::find_last);
|
||||
connect(m_find_next, &QPushButton::pressed, this, &find_dialog::find_next);
|
||||
connect(m_find_previous, &QPushButton::pressed, this, &find_dialog::find_previous);
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
find_dialog::~find_dialog()
|
||||
{
|
||||
}
|
||||
|
||||
void find_dialog::find_first()
|
||||
{
|
||||
if (!m_text_edit || m_find_bar->text().isEmpty())
|
||||
return;
|
||||
|
||||
m_text_edit->moveCursor(QTextCursor::Start);
|
||||
m_text_edit->find(m_find_bar->text());
|
||||
}
|
||||
|
||||
void find_dialog::find_last()
|
||||
{
|
||||
if (!m_text_edit || m_find_bar->text().isEmpty())
|
||||
return;
|
||||
|
||||
m_text_edit->moveCursor(QTextCursor::End);
|
||||
m_text_edit->find(m_find_bar->text(), QTextDocument::FindBackward);
|
||||
}
|
||||
|
||||
void find_dialog::find_next()
|
||||
{
|
||||
if (!m_text_edit || m_find_bar->text().isEmpty())
|
||||
return;
|
||||
|
||||
m_text_edit->find(m_find_bar->text());
|
||||
}
|
||||
|
||||
void find_dialog::find_previous()
|
||||
{
|
||||
if (!m_text_edit || m_find_bar->text().isEmpty())
|
||||
return;
|
||||
|
||||
m_text_edit->find(m_find_bar->text(), QTextDocument::FindBackward);
|
||||
}
|
27
rpcs3/rpcs3qt/find_dialog.h
Normal file
27
rpcs3/rpcs3qt/find_dialog.h
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include <QTextEdit>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
|
||||
class find_dialog : public QDialog
|
||||
{
|
||||
public:
|
||||
find_dialog(QTextEdit* edit, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
|
||||
~find_dialog();
|
||||
|
||||
private:
|
||||
QTextEdit* m_text_edit;
|
||||
QLineEdit* m_find_bar;
|
||||
QPushButton* m_find_first;
|
||||
QPushButton* m_find_last;
|
||||
QPushButton* m_find_next;
|
||||
QPushButton* m_find_previous;
|
||||
|
||||
private Q_SLOTS:
|
||||
void find_first();
|
||||
void find_last();
|
||||
void find_next();
|
||||
void find_previous();
|
||||
};
|
@ -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);
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "Utilities/Log.h"
|
||||
|
||||
#include "gui_settings.h"
|
||||
#include "find_dialog.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
@ -12,6 +13,7 @@
|
||||
#include <QTextEdit>
|
||||
#include <QActionGroup>
|
||||
#include <QTimer>
|
||||
#include <QKeyEvent>
|
||||
|
||||
class log_frame : public QDockWidget
|
||||
{
|
||||
@ -31,6 +33,7 @@ Q_SIGNALS:
|
||||
protected:
|
||||
/** Override inherited method from Qt to allow signalling when close happened.*/
|
||||
void closeEvent(QCloseEvent* event);
|
||||
bool eventFilter(QObject* object, QEvent* event) override;
|
||||
private Q_SLOTS:
|
||||
void UpdateUI();
|
||||
private:
|
||||
@ -39,6 +42,10 @@ private:
|
||||
|
||||
void CreateAndConnectActions();
|
||||
|
||||
QTabWidget* m_tabWidget;
|
||||
|
||||
std::unique_ptr<find_dialog> m_find_dialog;
|
||||
|
||||
QList<QColor> m_color;
|
||||
QColor m_color_stack;
|
||||
QTextEdit *m_log;
|
||||
|
Loading…
x
Reference in New Issue
Block a user