mirror of https://github.com/mgba-emu/mgba.git
Clean up rendering of logging grid checkboxes
This commit is contained in:
parent
a1945cb57a
commit
2529ea6da4
|
@ -74,6 +74,7 @@ set(SOURCE_FILES
|
||||||
AudioProcessor.cpp
|
AudioProcessor.cpp
|
||||||
CheatsModel.cpp
|
CheatsModel.cpp
|
||||||
CheatsView.cpp
|
CheatsView.cpp
|
||||||
|
CheckBoxDelegate.cpp
|
||||||
ConfigController.cpp
|
ConfigController.cpp
|
||||||
ColorPicker.cpp
|
ColorPicker.cpp
|
||||||
CoreManager.cpp
|
CoreManager.cpp
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* Copyright (c) 2013-2022 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#include "CheckBoxDelegate.h"
|
||||||
|
#include <QStyle>
|
||||||
|
#include <QAbstractItemView>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
using namespace QGBA;
|
||||||
|
|
||||||
|
CheckBoxDelegate::CheckBoxDelegate(QObject* parent)
|
||||||
|
: QStyledItemDelegate(parent)
|
||||||
|
{
|
||||||
|
// initializers only
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckBoxDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
QAbstractItemView* view = qobject_cast<QAbstractItemView*>(option.styleObject);
|
||||||
|
if (view && (index.flags() & Qt::ItemIsUserCheckable)) {
|
||||||
|
// Set up style options
|
||||||
|
QStyleOptionViewItem newOption(option);
|
||||||
|
initStyleOption(&newOption, index);
|
||||||
|
if (view->currentIndex() == index && (newOption.state & QStyle::State_HasFocus)) {
|
||||||
|
newOption.state |= QStyle::State_KeyboardFocusChange;
|
||||||
|
}
|
||||||
|
if (newOption.checkState == Qt::PartiallyChecked) {
|
||||||
|
newOption.state |= QStyle::State_NoChange;
|
||||||
|
} else if (newOption.checkState == Qt::Checked) {
|
||||||
|
newOption.state |= QStyle::State_On;
|
||||||
|
} else {
|
||||||
|
newOption.state |= QStyle::State_Off;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw background
|
||||||
|
view->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &newOption, painter, view);
|
||||||
|
|
||||||
|
// Draw checkbox
|
||||||
|
int checkWidth = view->style()->pixelMetric(QStyle::PM_IndicatorWidth);
|
||||||
|
int checkHeight = view->style()->pixelMetric(QStyle::PM_IndicatorHeight);
|
||||||
|
int xMargin = (newOption.rect.width() - checkWidth) / 2;
|
||||||
|
int yMargin = (newOption.rect.height() - checkHeight) / 2;
|
||||||
|
newOption.rect.setRect(newOption.rect.left() + xMargin, newOption.rect.top() + yMargin, checkWidth, checkHeight);
|
||||||
|
view->style()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &newOption, painter, view);
|
||||||
|
} else {
|
||||||
|
QStyledItemDelegate::paint(painter, option, index);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Copyright (c) 2013-2022 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
|
||||||
|
namespace QGBA {
|
||||||
|
|
||||||
|
class CheckBoxDelegate : public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CheckBoxDelegate(QObject* parent = nullptr);
|
||||||
|
|
||||||
|
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
#include "SettingsView.h"
|
#include "SettingsView.h"
|
||||||
|
|
||||||
#include "AudioProcessor.h"
|
#include "AudioProcessor.h"
|
||||||
|
#include "CheckBoxDelegate.h"
|
||||||
#include "ConfigController.h"
|
#include "ConfigController.h"
|
||||||
#include "Display.h"
|
#include "Display.h"
|
||||||
#include "GBAApp.h"
|
#include "GBAApp.h"
|
||||||
|
@ -355,9 +356,11 @@ SettingsView::SettingsView(ConfigController* controller, InputController* inputC
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ui.loggingView->setModel(&m_logModel);
|
m_ui.loggingView->setModel(&m_logModel);
|
||||||
|
m_ui.loggingView->setItemDelegate(new CheckBoxDelegate(m_ui.loggingView));
|
||||||
m_ui.loggingView->setHorizontalHeader(new RotatedHeaderView(Qt::Horizontal));
|
m_ui.loggingView->setHorizontalHeader(new RotatedHeaderView(Qt::Horizontal));
|
||||||
m_ui.loggingView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
m_ui.loggingView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
m_ui.loggingView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
m_ui.loggingView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
|
connect(m_ui.loggingView, SIGNAL(clicked(QModelIndex)), m_ui.loggingView, SLOT(setCurrentIndex(QModelIndex)));
|
||||||
|
|
||||||
connect(m_ui.logFileBrowse, &QAbstractButton::pressed, [this] () {
|
connect(m_ui.logFileBrowse, &QAbstractButton::pressed, [this] () {
|
||||||
QString path = GBAApp::app()->getSaveFileName(this, "Select log file");
|
QString path = GBAApp::app()->getSaveFileName(this, "Select log file");
|
||||||
|
|
Loading…
Reference in New Issue