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 <QDebug>
|
||||
#include <QPainter>
|
||||
|
||||
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
|
||||
{
|
||||
// Check which type the editor should be
|
||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index));
|
||||
|
||||
qDebug() << data.m_valueCategory;
|
||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index, Qt::UserRole));
|
||||
|
||||
switch (data.m_valueCategory) {
|
||||
case TC_ASSIGNABLE_RANGE:
|
||||
@ -21,12 +40,12 @@ QWidget *AssignableEditorDelegate::createEditor(QWidget *parent, const QStyleOpt
|
||||
case TC_ASSIGNABLE_RANGE_INT:
|
||||
return new IntRangeEditor(parent, data);
|
||||
default:
|
||||
return nullptr;
|
||||
return QStyledItemDelegate::createEditor(parent, option, index);
|
||||
}
|
||||
case TC_ASSIGNABLE_ENUM:
|
||||
return new EnumEditor(parent, data);
|
||||
default:
|
||||
return nullptr;
|
||||
return QStyledItemDelegate::createEditor(parent, option, index);
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,22 +53,49 @@ void AssignableEditorDelegate::updateEditorGeometry(QWidget *editor, const QStyl
|
||||
editor->setGeometry(option.rect);
|
||||
}
|
||||
|
||||
void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index));
|
||||
QStandardItemModel *s_model = qobject_cast<QStandardItemModel*>(model);
|
||||
void AssignableEditorDelegate::setEditorData(QWidget* editor, const QModelIndex &index) const {
|
||||
AssignableData data = qvariant_cast<AssignableData>(index.model()->data(index, Qt::UserRole));
|
||||
|
||||
/*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: {
|
||||
EnumEditor *ed = qobject_cast<EnumEditor*>(editor);
|
||||
// Set the editor item text to current selection
|
||||
s_model->itemFromIndex(index)->setText(ed->value());
|
||||
EnumEditor *ed = static_cast<EnumEditor*>(editor);
|
||||
data.setValue(ed->value());
|
||||
v.setValue(data);
|
||||
|
||||
s_model->setData(index, v, Qt::UserRole);
|
||||
s_model->setData(index, ed->value(), Qt::DisplayRole);
|
||||
break;
|
||||
}
|
||||
case TC_ASSIGNABLE_RANGE:
|
||||
switch (data.m_rangeInfo.range_data_type) {
|
||||
case TC_ASSIGNABLE_RANGE_INT: {
|
||||
IntRangeEditor *ed = qobject_cast<IntRangeEditor*>(editor);
|
||||
s_model->itemFromIndex(index)->setText(QString(ed->value()));
|
||||
IntRangeEditor *ed = static_cast<IntRangeEditor*>(editor);
|
||||
data.setValue(ed->value());
|
||||
v.setValue(data);
|
||||
|
||||
s_model->setData(index, v, Qt::UserRole);
|
||||
s_model->setData(index, ed->value(), Qt::DisplayRole);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -57,5 +103,5 @@ void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
@ -7,8 +7,10 @@ class AssignableEditorDelegate : public QStyledItemDelegate {
|
||||
Q_OBJECT
|
||||
public:
|
||||
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 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) {
|
||||
/*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->init_callback() != TC_SUCCESS) {
|
||||
@ -42,7 +43,7 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
||||
|
||||
if (root == NULL) {
|
||||
return;
|
||||
}*/
|
||||
}
|
||||
|
||||
QStandardItemModel *assignableModel = new QStandardItemModel(0, 2);
|
||||
// Add header items
|
||||
@ -78,7 +79,7 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
||||
QVariant v;
|
||||
AssignableData data(node);
|
||||
v.setValue(data);
|
||||
editorItem->setData(v, Qt::EditRole);
|
||||
editorItem->setData(v, Qt::UserRole);
|
||||
//editorItem->setText(node->name);
|
||||
rowItems.append(editorItem);
|
||||
}
|
||||
@ -92,11 +93,8 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
||||
|
||||
QStandardItem *parentItem = assignableModel->invisibleRootItem();
|
||||
|
||||
|
||||
// Get root nodes from manager
|
||||
//QVector <tc_assignable_node_t*> rootNodes = m_assignableManager->rootNodes();
|
||||
|
||||
//delete m_assignableManager;
|
||||
//QList <tc_assignable_node_t*> rootNodes = m_assignableManager->rootNodes();
|
||||
|
||||
/*for (tc_assignable_node_t *root : rootNodes) {
|
||||
traverse(root, parentItem);
|
||||
@ -104,9 +102,9 @@ void AssignableWidget::genAssignableTree(QTreeView *treeView) {
|
||||
|
||||
|
||||
// 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);
|
||||
}*/
|
||||
}
|
||||
|
||||
m_assignableTreeView->setModel(assignableModel);
|
||||
|
||||
|
@ -20,6 +20,8 @@ IntRangeEditor::IntRangeEditor(QWidget *parent) : QWidget(parent) {
|
||||
m_slider->setDisabled(true);
|
||||
|
||||
setLayout(m_mainLayout);
|
||||
// Avoids the display text from overlapping during editing
|
||||
setAutoFillBackground(true);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
setLayout(m_mainLayout);
|
||||
setAutoFillBackground(true);
|
||||
}
|
||||
|
||||
int IntRangeEditor::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) {
|
||||
m_range = range;
|
||||
|
||||
|
@ -16,6 +16,7 @@ public:
|
||||
IntRangeEditor(QWidget *parent = nullptr);
|
||||
IntRangeEditor(QWidget *parent = nullptr, const AssignableData &data = nullptr);
|
||||
int value();
|
||||
void setValue(int64_t value);
|
||||
void setRange(const tc_assignable_range_int_t &range);
|
||||
private:
|
||||
QHBoxLayout *m_mainLayout;
|
||||
|
Loading…
Reference in New Issue
Block a user