mirror of
https://github.com/Lurkki14/tuxclocker.git
synced 2025-02-25 18:55:24 -06:00
qt: use Qt::UserRole to store assignable data
This commit is contained in:
parent
aea64c9261
commit
c7df1d72e8
@ -4,16 +4,35 @@
|
|||||||
#include <IntRangeEditor.h>
|
#include <IntRangeEditor.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
AssignableEditorDelegate::AssignableEditorDelegate(QObject *parent) : QStyledItemDelegate(parent) {
|
AssignableEditorDelegate::AssignableEditorDelegate(QObject *parent) : QStyledItemDelegate(parent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssignableEditorDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
|
||||||
|
/*if (index.data().canConvert<AssignableData>()) {
|
||||||
|
// Display current value of item when not editing
|
||||||
|
qDebug() << option.state;
|
||||||
|
if (!(option.state & QStyle::State_Selected)) {
|
||||||
|
AssignableData data = qvariant_cast<AssignableData>(index.data());
|
||||||
|
painter->drawText(option.rect, Qt::AlignCenter, QString::number(data.value().toInt()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//AssignableData data = qvariant_cast<AssignableData>(index.data());
|
||||||
|
//painter->drawText(option.rect, Qt::AlignCenter, QString::number(data.value().toInt()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
QStyledItemDelegate::paint(painter, option, index);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
QStyledItemDelegate::paint(painter, option, index);
|
||||||
|
}
|
||||||
|
|
||||||
QWidget *AssignableEditorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
QWidget *AssignableEditorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
// Check which type the editor should be
|
// Check which type the editor should be
|
||||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index));
|
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index, Qt::UserRole));
|
||||||
|
|
||||||
qDebug() << data.m_valueCategory;
|
|
||||||
|
|
||||||
switch (data.m_valueCategory) {
|
switch (data.m_valueCategory) {
|
||||||
case TC_ASSIGNABLE_RANGE:
|
case TC_ASSIGNABLE_RANGE:
|
||||||
@ -21,12 +40,12 @@ QWidget *AssignableEditorDelegate::createEditor(QWidget *parent, const QStyleOpt
|
|||||||
case TC_ASSIGNABLE_RANGE_INT:
|
case TC_ASSIGNABLE_RANGE_INT:
|
||||||
return new IntRangeEditor(parent, data);
|
return new IntRangeEditor(parent, data);
|
||||||
default:
|
default:
|
||||||
return nullptr;
|
return QStyledItemDelegate::createEditor(parent, option, index);
|
||||||
}
|
}
|
||||||
case TC_ASSIGNABLE_ENUM:
|
case TC_ASSIGNABLE_ENUM:
|
||||||
return new EnumEditor(parent, data);
|
return new EnumEditor(parent, data);
|
||||||
default:
|
default:
|
||||||
return nullptr;
|
return QStyledItemDelegate::createEditor(parent, option, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,22 +53,49 @@ void AssignableEditorDelegate::updateEditorGeometry(QWidget *editor, const QStyl
|
|||||||
editor->setGeometry(option.rect);
|
editor->setGeometry(option.rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
void AssignableEditorDelegate::setEditorData(QWidget* editor, const QModelIndex &index) const {
|
||||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index));
|
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index, Qt::UserRole));
|
||||||
QStandardItemModel *s_model = qobject_cast<QStandardItemModel*>(model);
|
|
||||||
|
|
||||||
/*switch (data.m_valueCategory) {
|
switch (data.m_valueCategory) {
|
||||||
|
case TC_ASSIGNABLE_RANGE:
|
||||||
|
switch (data.m_rangeInfo.range_data_type) {
|
||||||
|
case TC_ASSIGNABLE_RANGE_INT: {
|
||||||
|
IntRangeEditor *ed = static_cast<IntRangeEditor*>(editor);
|
||||||
|
ed->setValue(data.value().toInt());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
||||||
|
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index, Qt::UserRole));
|
||||||
|
QVariant v;
|
||||||
|
QStandardItemModel *s_model = static_cast<QStandardItemModel*>(model);
|
||||||
|
|
||||||
|
switch (data.m_valueCategory) {
|
||||||
case TC_ASSIGNABLE_ENUM: {
|
case TC_ASSIGNABLE_ENUM: {
|
||||||
EnumEditor *ed = qobject_cast<EnumEditor*>(editor);
|
EnumEditor *ed = static_cast<EnumEditor*>(editor);
|
||||||
// Set the editor item text to current selection
|
data.setValue(ed->value());
|
||||||
s_model->itemFromIndex(index)->setText(ed->value());
|
v.setValue(data);
|
||||||
|
|
||||||
|
s_model->setData(index, v, Qt::UserRole);
|
||||||
|
s_model->setData(index, ed->value(), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TC_ASSIGNABLE_RANGE:
|
case TC_ASSIGNABLE_RANGE:
|
||||||
switch (data.m_rangeInfo.range_data_type) {
|
switch (data.m_rangeInfo.range_data_type) {
|
||||||
case TC_ASSIGNABLE_RANGE_INT: {
|
case TC_ASSIGNABLE_RANGE_INT: {
|
||||||
IntRangeEditor *ed = qobject_cast<IntRangeEditor*>(editor);
|
IntRangeEditor *ed = static_cast<IntRangeEditor*>(editor);
|
||||||
s_model->itemFromIndex(index)->setText(QString(ed->value()));
|
data.setValue(ed->value());
|
||||||
|
v.setValue(data);
|
||||||
|
|
||||||
|
s_model->setData(index, v, Qt::UserRole);
|
||||||
|
s_model->setData(index, ed->value(), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -57,5 +103,5 @@ void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,10 @@ class AssignableEditorDelegate : public QStyledItemDelegate {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AssignableEditorDelegate(QObject *parent = nullptr);
|
AssignableEditorDelegate(QObject *parent = nullptr);
|
||||||
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
|
||||||
|
|
||||||
|
void paint(QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
void setEditorData(QWidget * editor, const QModelIndex &index) const;
|
||||||
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
|
||||||
};
|
};
|
||||||
|
@ -26,7 +26,8 @@ AssignableWidget::~AssignableWidget() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
||||||
/*tc_module_t *nv_mod = tc_module_find(TC_CATEGORY_ASSIGNABLE, "nvidia");
|
|
||||||
|
tc_module_t *nv_mod = tc_module_find(TC_CATEGORY_ASSIGNABLE, "nvidia");
|
||||||
|
|
||||||
if (nv_mod != NULL) {
|
if (nv_mod != NULL) {
|
||||||
if (nv_mod->init_callback() != TC_SUCCESS) {
|
if (nv_mod->init_callback() != TC_SUCCESS) {
|
||||||
@ -42,7 +43,7 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
|||||||
|
|
||||||
if (root == NULL) {
|
if (root == NULL) {
|
||||||
return;
|
return;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
QStandardItemModel *assignableModel = new QStandardItemModel(0, 2);
|
QStandardItemModel *assignableModel = new QStandardItemModel(0, 2);
|
||||||
// Add header items
|
// Add header items
|
||||||
@ -78,7 +79,7 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
|||||||
QVariant v;
|
QVariant v;
|
||||||
AssignableData data(node);
|
AssignableData data(node);
|
||||||
v.setValue(data);
|
v.setValue(data);
|
||||||
editorItem->setData(v, Qt::EditRole);
|
editorItem->setData(v, Qt::UserRole);
|
||||||
//editorItem->setText(node->name);
|
//editorItem->setText(node->name);
|
||||||
rowItems.append(editorItem);
|
rowItems.append(editorItem);
|
||||||
}
|
}
|
||||||
@ -92,11 +93,8 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
|||||||
|
|
||||||
QStandardItem *parentItem = assignableModel->invisibleRootItem();
|
QStandardItem *parentItem = assignableModel->invisibleRootItem();
|
||||||
|
|
||||||
|
|
||||||
// Get root nodes from manager
|
// Get root nodes from manager
|
||||||
//QVector <tc_assignable_node_t*> rootNodes = m_assignableManager->rootNodes();
|
//QList <tc_assignable_node_t*> rootNodes = m_assignableManager->rootNodes();
|
||||||
|
|
||||||
//delete m_assignableManager;
|
|
||||||
|
|
||||||
/*for (tc_assignable_node_t *root : rootNodes) {
|
/*for (tc_assignable_node_t *root : rootNodes) {
|
||||||
traverse(root, parentItem);
|
traverse(root, parentItem);
|
||||||
@ -104,9 +102,9 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
|||||||
|
|
||||||
|
|
||||||
// We don't want to display root nodes from the modules
|
// We don't want to display root nodes from the modules
|
||||||
/*for (uint32_t i = 0; i < root->children_count; i++) {
|
for (uint32_t i = 0; i < root->children_count; i++) {
|
||||||
traverse(root->children_nodes[i], parentItem);
|
traverse(root->children_nodes[i], parentItem);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
m_assignableTreeView->setModel(assignableModel);
|
m_assignableTreeView->setModel(assignableModel);
|
||||||
|
|
||||||
|
@ -20,6 +20,8 @@ IntRangeEditor::IntRangeEditor(QWidget *parent) : QWidget(parent) {
|
|||||||
m_slider->setDisabled(true);
|
m_slider->setDisabled(true);
|
||||||
|
|
||||||
setLayout(m_mainLayout);
|
setLayout(m_mainLayout);
|
||||||
|
// Avoids the display text from overlapping during editing
|
||||||
|
setAutoFillBackground(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
IntRangeEditor::IntRangeEditor(QWidget* parent, const AssignableData &data) : QWidget(parent) {
|
IntRangeEditor::IntRangeEditor(QWidget* parent, const AssignableData &data) : QWidget(parent) {
|
||||||
@ -40,12 +42,17 @@ IntRangeEditor::IntRangeEditor(QWidget* parent, const AssignableData &data) : QW
|
|||||||
m_slider->setRange(data.m_rangeInfo.int_range.min, data.m_rangeInfo.int_range.max);
|
m_slider->setRange(data.m_rangeInfo.int_range.min, data.m_rangeInfo.int_range.max);
|
||||||
|
|
||||||
setLayout(m_mainLayout);
|
setLayout(m_mainLayout);
|
||||||
|
setAutoFillBackground(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
int IntRangeEditor::value() {
|
int IntRangeEditor::value() {
|
||||||
return m_slider->value();
|
return m_slider->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IntRangeEditor::setValue(int64_t value) {
|
||||||
|
m_slider->setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
void IntRangeEditor::setRange(const tc_assignable_range_int_t &range) {
|
void IntRangeEditor::setRange(const tc_assignable_range_int_t &range) {
|
||||||
m_range = range;
|
m_range = range;
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ public:
|
|||||||
IntRangeEditor(QWidget *parent = nullptr);
|
IntRangeEditor(QWidget *parent = nullptr);
|
||||||
IntRangeEditor(QWidget *parent = nullptr, const AssignableData &data = nullptr);
|
IntRangeEditor(QWidget *parent = nullptr, const AssignableData &data = nullptr);
|
||||||
int value();
|
int value();
|
||||||
|
void setValue(int64_t value);
|
||||||
void setRange(const tc_assignable_range_int_t &range);
|
void setRange(const tc_assignable_range_int_t &range);
|
||||||
private:
|
private:
|
||||||
QHBoxLayout *m_mainLayout;
|
QHBoxLayout *m_mainLayout;
|
||||||
|
Loading…
Reference in New Issue
Block a user