diff --git a/BionxControl.pro b/BionxControl.pro index b645e15..c039c52 100644 --- a/BionxControl.pro +++ b/BionxControl.pro @@ -59,7 +59,6 @@ SOURCES += \ bcvaluedelegate.cpp \ bcvalueeditor.cpp \ bcvaluemodel.cpp \ - bcvaluewidget.cpp \ bcxmlloader.cpp \ libwin/can_drv_win.c \ libwin/mhs_can_drv.c \ @@ -82,12 +81,11 @@ HEADERS += \ bcvaluedelegate.h \ bcvalueeditor.h \ bcvaluemodel.h \ - bcvaluewidget.h \ bcxmlloader.h FORMS += \ bcmainwindow.ui \ - bcvaluewidget.ui + bcvalueeditor.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/bcdeviceview.cpp b/bcdeviceview.cpp index 9688d29..10cfbca 100644 --- a/bcdeviceview.cpp +++ b/bcdeviceview.cpp @@ -92,6 +92,7 @@ void BCDeviceView::onValueListReady( BCDevice::ID deviceID, BCValueList valueLis if(_devideID == deviceID) { _valueModel.takeValueList( valueList ); + /* const BCValueList& list = _valueModel.getValueList(); int rows = _valueModel.rowCount(); for (int r = 0; r < rows; ++r) @@ -103,6 +104,7 @@ void BCDeviceView::onValueListReady( BCDevice::ID deviceID, BCValueList valueLis openPersistentEditor(index); } } + */ } // if id } diff --git a/bcmainwindow.ui b/bcmainwindow.ui index ac0097e..bc7a09e 100644 --- a/bcmainwindow.ui +++ b/bcmainwindow.ui @@ -255,7 +255,7 @@ 0 - QAbstractItemView::EditTrigger::AnyKeyPressed|QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed|QAbstractItemView::EditTrigger::SelectedClicked + QAbstractItemView::EditTrigger::DoubleClicked false @@ -287,7 +287,7 @@ 0 - QAbstractItemView::EditTrigger::AnyKeyPressed|QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed|QAbstractItemView::EditTrigger::SelectedClicked + QAbstractItemView::EditTrigger::DoubleClicked false @@ -319,7 +319,7 @@ 0 - QAbstractItemView::EditTrigger::AnyKeyPressed|QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed|QAbstractItemView::EditTrigger::SelectedClicked + QAbstractItemView::EditTrigger::DoubleClicked false diff --git a/bcvaluedelegate.cpp b/bcvaluedelegate.cpp index 0eabfa5..77d12d3 100644 --- a/bcvaluedelegate.cpp +++ b/bcvaluedelegate.cpp @@ -45,7 +45,7 @@ #include -#include +#include BCValueDelegate::BCValueDelegate(const BCValueList& valueList, QTableView* view) : QStyledItemDelegate{view}, _valueList{valueList}, _view{view} @@ -64,11 +64,12 @@ QWidget* BCValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt Q_UNUSED(option) Q_UNUSED(index) - auto* valueEditor = new BCValueWidget(bcValue, parent); + auto* valueEditor = new BCValueEditor(bcValue, parent); // Signal für sofortige Updates - connect(valueEditor, &BCValueWidget::valueChanged, this, [this, valueEditor]() + connect(valueEditor, &BCValueEditor::valueChanged, this, [this, valueEditor](int newValue) { + qDebug() << "---val changed: " << newValue; // Commit data sofort bei Änderung emit const_cast(this)->commitData(valueEditor); }); @@ -78,6 +79,7 @@ QWidget* BCValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt void BCValueDelegate::setEditorData(QWidget *editor, const QModelIndex& index) const { + qDebug() << " setEditorData, warum?"; /* // Daten vom Model in den Editor laden const BCValue& bc = *index.data(Qt::EditRole).value(); @@ -97,33 +99,33 @@ void BCValueDelegate::setEditorData(QWidget *editor, const QModelIndex& index) c QStyledItemDelegate::setEditorData(editor, index); } */ + } void BCValueDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const { - // Daten vom Editor zurück ins Model speichern (Beim Schließen) - QSlider *slider = editor->findChild("slider"); - if (slider) + qDebug() << " hier 2!"; + if( index.column() == 1) { - int value = slider->value(); - model->setData(index, value, Qt::EditRole); - } - else - { - QStyledItemDelegate::setModelData(editor, model, index); + // Daten vom Editor zurück ins Model speichern (Beim Schließen) + BCValueEditor* slider = qobject_cast(editor); + if (slider) + { + qDebug() << " --- ok"; + int value = slider->getValue(); + model->setData(index, value, Qt::EditRole); + } + return; } + + QStyledItemDelegate::setModelData(editor, model, index); } void BCValueDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex& index) const { Q_UNUSED(index) - /* - QRect barRect = option.rect.adjusted(option.rect.width() - 55, - option.rect.height() / 2 - 2, - -8, - -option.rect.height() / 2 + 2); - */ + QRect sliderRect = option.rect.adjusted( option.rect.width() - 125, // Von rechts: 115px (Breite der Progress Bar) 0, // Oben: kein Offset @@ -150,6 +152,7 @@ QSize BCValueDelegate::sizeHint(const QStyleOptionViewItem &option, const QModel void BCValueDelegate::paint(QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { + qDebug() << " ---paint:" << index.row(); // Standard-Zeichnen (Text, Hintergrund, Selection) durchführen QStyledItemDelegate::paint(painter, option, index); @@ -158,14 +161,12 @@ void BCValueDelegate::paint(QPainter *painter, const QStyleOptionViewItem& optio if( index.column() == 1 ) { - /* if( row>-1 && row <= _valueList.size() ) { const BCValue& bcValue = *(_valueList[ index.row()].get()); if( !bcValue.isReadOnly()) paintSliderIndicator(painter,option,bcValue); } -*/ if(_rowOpacities.contains(row)) paintHighlightRow(painter,option,index.row()); @@ -182,8 +183,9 @@ void BCValueDelegate::paintHighlightRow(QPainter* painter, const QStyleOptionVie painter->setRenderHint(QPainter::Antialiasing); qreal opacity =_rowOpacities.value(row); painter->setOpacity(opacity); - // Margin von 4px - QRect itemRect = option.rect.adjusted(3, 3, -3, -3); + // Margin von 2px + const int m = 3; + QRect itemRect = option.rect.adjusted(m,m,-m,-m); // Border (2px solid #2196F3) // oranger rahmen @@ -205,23 +207,13 @@ void BCValueDelegate::paintHighlightRow(QPainter* painter, const QStyleOptionVie /** * @brief Zeichnet eine passiven Slider, um den Wertebereich des übergebenen BCValue anzuzeigen. - * @param painter - * @param option - * @param bcValue */ + void BCValueDelegate::paintSliderIndicator(QPainter* painter, const QStyleOptionViewItem& option, const BCValue& bcValue) const { - // Text und kleiner Slider-Indikator zeichnen painter->save(); - painter->setRenderHint(QPainter::Antialiasing); - /* - QRect barRect = option.rect.adjusted(option.rect.width() - 130, - option.rect.height() / 2 - 2, - -8, - -option.rect.height() / 2 + 2); -*/ QRect barRect = option.rect.adjusted(option.rect.width() - 130, option.rect.height() / 2 + 1, diff --git a/bcvalueeditor.cpp b/bcvalueeditor.cpp index 62ec5cf..def2f3b 100644 --- a/bcvalueeditor.cpp +++ b/bcvalueeditor.cpp @@ -1,19 +1,21 @@ -//#include -#include -//#include -#include -#include - -#include #include +#include + + BCValueEditor::BCValueEditor(const BCValue& bcValue, QWidget *parent ) : QWidget(parent), _bcValue{bcValue} { + setupUi(this); + _slider->setStyle(new BCSliderStyle()); setAutoFillBackground(true); + QSizePolicy sp = _commitButton->sizePolicy(); + sp.setRetainSizeWhenHidden(true); // <--- Das ist der magische Schalter + _commitButton->setSizePolicy(sp); + /* _slider = new QSlider(Qt::Horizontal, this); _slider->setRange(0, 100); _slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); @@ -34,7 +36,7 @@ BCValueEditor::BCValueEditor(const BCValue& bcValue, QWidget *parent ) layout->addWidget(_slider); layout->addWidget(_commitButton); setLayout(layout); - + */ // Wenn Slider bewegt wird -> Signal nach außen senden connect(_slider, &QSlider::valueChanged, this, [this](int val) { @@ -42,13 +44,16 @@ BCValueEditor::BCValueEditor(const BCValue& bcValue, QWidget *parent ) }); // Wenn Reset gedrückt wird -> Slider auf 0 (löst auch valueChanged aus) - connect(_commitButton, &QPushButton::clicked, this, [this](){ + connect(_commitButton, &QPushButton::clicked, this, [this]() + { _slider->setValue(0); }); + //_commitButton->setVisible( false); } int BCValueEditor::getValue() const { + qDebug() << " -- jajaja: "<< size(); return _slider->value(); } diff --git a/bcvalueeditor.h b/bcvalueeditor.h index d1fc570..02f00c9 100644 --- a/bcvalueeditor.h +++ b/bcvalueeditor.h @@ -1,13 +1,15 @@ -#ifndef BCVALUEEDITOR_H -#define BCVALUEEDITOR_H +#ifndef BCValueEditor_H +#define BCValueEditor_H + #include +#include class QSlider; class QPushButton; class BCValue; -class BCValueEditor : public QWidget +class BCValueEditor : public QWidget, private Ui::BCValueEditor { Q_OBJECT @@ -25,9 +27,6 @@ signals: private: const BCValue& _bcValue; - QSlider* _slider; - QPushButton* _commitButton; }; - -#endif // BCVALUEEDITOR_H +#endif // BCValueEditor_H diff --git a/bcvaluewidget.ui b/bcvalueeditor.ui similarity index 96% rename from bcvaluewidget.ui rename to bcvalueeditor.ui index d054130..4df281b 100644 --- a/bcvaluewidget.ui +++ b/bcvalueeditor.ui @@ -1,7 +1,7 @@ - BCValueWidget - + BCValueEditor + 0 diff --git a/bcvaluemodel.cpp b/bcvaluemodel.cpp index f9667e8..4ed48a9 100644 --- a/bcvaluemodel.cpp +++ b/bcvaluemodel.cpp @@ -181,7 +181,6 @@ Qt::ItemFlags BCValueModel::flags(const QModelIndex& index) const bool BCValueModel::setData(const QModelIndex& index, const QVariant& variant, int role) { - if (index.isValid() && role == Qt::EditRole) { BCValuePtr value = _valueList[index.row()]; diff --git a/bcvaluewidget.cpp b/bcvaluewidget.cpp deleted file mode 100644 index 872a376..0000000 --- a/bcvaluewidget.cpp +++ /dev/null @@ -1,67 +0,0 @@ - -#include -#include - - - -BCValueWidget::BCValueWidget(const BCValue& bcValue, QWidget *parent ) - : QWidget(parent), _bcValue{bcValue} -{ - setupUi(this); - - _slider->setStyle(new BCSliderStyle()); - setAutoFillBackground(true); - - - /* - _slider = new QSlider(Qt::Horizontal, this); - _slider->setRange(0, 100); - _slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - - _slider->setSingleStep(1); - _slider->setPageStep(10); - _slider->setStyle(new BCSliderStyle()); - - _commitButton = new QPushButton(this); - _commitButton->setIcon(style()->standardIcon(QStyle::SP_DialogResetButton)); - _commitButton->setFixedSize(32, 32); - - auto *layout = new QHBoxLayout(this); - // Deine gewünschten Margins für 36px Zeilenhöhe - layout->setContentsMargins(2, 2, 2, 2); - layout->setSpacing(4); - - layout->addWidget(_slider); - layout->addWidget(_commitButton); - setLayout(layout); - */ - // Wenn Slider bewegt wird -> Signal nach außen senden - connect(_slider, &QSlider::valueChanged, this, [this](int val) - { - emit valueChanged(val); - }); - - // Wenn Reset gedrückt wird -> Slider auf 0 (löst auch valueChanged aus) - connect(_commitButton, &QPushButton::clicked, this, [this](){ - _slider->setValue(0); - }); - _commitButton->setVisible( false); -} - -int BCValueWidget::getValue() const -{ - return _slider->value(); -} - -void BCValueWidget::setValue(int val) -{ - // WICHTIG: Block Signals verhindern Endlosschleifen, falls das Model - // das Widget während des Updates neu setzt (passiert manchmal bei Live-Updates). - if (val != _slider->value()) - { - bool blocked = _slider->blockSignals(true); - _slider->setValue(val); - _slider->blockSignals(blocked); - } -} - diff --git a/bcvaluewidget.h b/bcvaluewidget.h deleted file mode 100644 index 776217b..0000000 --- a/bcvaluewidget.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef BCVALUEWIDGET_H -#define BCVALUEWIDGET_H - - -#include -#include - -class QSlider; -class QPushButton; -class BCValue; - -class BCValueWidget : public QWidget, private Ui::BCValueWidget -{ - Q_OBJECT - -public: - - explicit BCValueWidget(const BCValue& bcValue, QWidget *parent = nullptr); - - int getValue() const; - void setValue(int val); - -signals: - - void valueChanged(int value); - -private: - - const BCValue& _bcValue; - -}; -#endif // BCVALUEWIDGET_H