diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index dc09c27b25..fbe424d154 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -1374,6 +1374,7 @@ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + Moc%27ing %(Identity)... @@ -2178,4 +2179,4 @@ - + \ No newline at end of file diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index ea8a978c8a..2ffaca09b5 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -1439,6 +1439,9 @@ rpcs3 + + Gui\widgets + diff --git a/rpcs3/rpcs3qt/custom_tree_widget.h b/rpcs3/rpcs3qt/custom_tree_widget.h new file mode 100644 index 0000000000..5f7a6cb01f --- /dev/null +++ b/rpcs3/rpcs3qt/custom_tree_widget.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include + +// Allows to double click the items in order to de/select them +class custom_tree_widget : public QTreeWidget +{ + using QTreeWidget::QTreeWidget; + +public: + void set_checkable_by_double_click_callback(std::function cb) + { + m_checkable_by_dc_cb = std::move(cb); + } + + void mouseDoubleClickEvent(QMouseEvent* event) + { + QTreeWidget::mouseDoubleClickEvent(event); + + if (!event || !m_checkable_by_dc_cb) return; + + const QPoint pos = event->pos(); + QTreeWidgetItem* item = itemAt(pos); + + if (!item || !(item->flags() & Qt::ItemIsUserCheckable)) return; + + const int column = columnAt(pos.x()); + if (!m_checkable_by_dc_cb(item, column)) return; + + const QModelIndex index = indexFromItem(item, column); + if (!index.isValid()) return; + + QStyleOptionViewItem option; + option.initFrom(this); + option.rect = visualRect(index); + option.features = QStyleOptionViewItem::HasCheckIndicator; + + const QRect checkbox_region = style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &option, this); + if (checkbox_region.contains(pos)) return; + + const Qt::CheckState current_state = item->checkState(column); + item->setCheckState(column, (current_state == Qt::CheckState::Checked) ? Qt::CheckState::Unchecked : Qt::CheckState::Checked); + } + +private: + std::function m_checkable_by_dc_cb; +}; diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.cpp b/rpcs3/rpcs3qt/patch_manager_dialog.cpp index 930c999e9e..a58c4b8662 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/patch_manager_dialog.cpp @@ -95,6 +95,12 @@ patch_manager_dialog::patch_manager_dialog(std::shared_ptr gui_set ui->configurable_double_spin_box->setEnabled(false); ui->configurable_double_spin_box->setVisible(false); + // Allow to double click the patches in order to de/select them + ui->patch_tree->set_checkable_by_double_click_callback([](QTreeWidgetItem* item, int column) + { + return item && !item->isDisabled() && (item->flags() & Qt::ItemIsUserCheckable) && static_cast(item->data(column, node_level_role).toInt()) == node_level::patch_level; + }); + // Create connects connect(ui->patch_filter, &QLineEdit::textChanged, this, &patch_manager_dialog::filter_patches); connect(ui->patch_tree, &QTreeWidget::currentItemChanged, this, &patch_manager_dialog::handle_item_selected); diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.ui b/rpcs3/rpcs3qt/patch_manager_dialog.ui index 6daeea160c..a9b224a0a7 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.ui +++ b/rpcs3/rpcs3qt/patch_manager_dialog.ui @@ -20,7 +20,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -49,9 +49,9 @@ - + - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu 20 @@ -70,10 +70,10 @@ - QFrame::NoFrame + QFrame::Shape::NoFrame - QAbstractScrollArea::AdjustToContents + QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents true @@ -121,7 +121,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -143,7 +143,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -162,7 +162,7 @@ - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -184,7 +184,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -206,7 +206,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -228,7 +228,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -250,7 +250,7 @@ true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -269,13 +269,13 @@ - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop true - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByMouse @@ -324,10 +324,10 @@ - Qt::Vertical + Qt::Orientation::Vertical - QSizePolicy::MinimumExpanding + QSizePolicy::Policy::MinimumExpanding @@ -348,12 +348,19 @@ - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save + QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save + + + custom_tree_widget + QTreeWidget +
rpcs3qt/custom_tree_widget.h
+
+