Added boolean value update
This commit is contained in:
@@ -67,8 +67,18 @@ QWidget* BCValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
|
||||
|
||||
if( bcValue.isBoolean() )
|
||||
{
|
||||
auto* toogleSwitch = new BCToggleSwitch{parent};
|
||||
return toogleSwitch;
|
||||
auto* toggleSwitch = new BCToggleSwitch{parent};
|
||||
toggleSwitch->setChecked(bcValue.isChecked() );
|
||||
|
||||
// Signal für sofortige Updates
|
||||
connect(toggleSwitch, &BCToggleSwitch::toggled, this, [this, toggleSwitch](bool checked)
|
||||
{
|
||||
qDebug() << "--- toggled: " << checked;
|
||||
// Commit data sofort bei Änderung
|
||||
emit const_cast<BCValueDelegate*>(this)->commitData(toggleSwitch);
|
||||
});
|
||||
|
||||
return toggleSwitch;
|
||||
}
|
||||
|
||||
BCValue::ValueRange params;
|
||||
@@ -86,6 +96,7 @@ QWidget* BCValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
|
||||
emit const_cast<BCValueDelegate*>(this)->commitData(valueSlider);
|
||||
});
|
||||
|
||||
/*
|
||||
// Signal für sofortige Updates
|
||||
connect(valueSlider, &BCValueSlider::valueCommited, this, [this, valueSlider](int newValue)
|
||||
{
|
||||
@@ -93,6 +104,7 @@ QWidget* BCValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
|
||||
// Commit data sofort bei Änderung
|
||||
emit const_cast<BCValueDelegate*>(this)->commitData(valueSlider);
|
||||
});
|
||||
*/
|
||||
|
||||
return valueSlider;
|
||||
}
|
||||
@@ -112,34 +124,44 @@ void BCValueDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionVi
|
||||
Q_UNUSED(index)
|
||||
|
||||
const BCValue& bcValue = *(_valueList[ index.row()].get());
|
||||
QRect editorRect;
|
||||
QRect editorRect = bcValue.isBoolean() ? adjustEditorRect(option.rect, 0, 6, -130, -6) : adjustEditorRect(option.rect, 0, 0, 8, 0);
|
||||
|
||||
/*
|
||||
if( !bcValue.isBoolean())
|
||||
{
|
||||
editorRect = clipToSliderRect( option.rect );
|
||||
editorRect = adjustEditorRect( option.rect,0,0,8,0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
editorRect = option.rect.adjusted(option.rect.width() - cTextBlockOffset,4,0,0);
|
||||
editorRect = adjustEditorRect(option.rect, 0, 6, -130, -6);
|
||||
}
|
||||
*/
|
||||
|
||||
editor->setGeometry(editorRect);
|
||||
}
|
||||
|
||||
|
||||
void BCValueDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const
|
||||
{
|
||||
if( index.column() == 1)
|
||||
{
|
||||
// Daten vom Editor zurück ins Model speichern (Beim Schließen)
|
||||
BCValueSlider* slider = qobject_cast<BCValueSlider*>(editor);
|
||||
if (slider)
|
||||
{
|
||||
int value = slider->value();
|
||||
model->setData(index, value, Qt::EditRole);
|
||||
}
|
||||
if (index.column() != 1)
|
||||
return;
|
||||
}
|
||||
|
||||
QStyledItemDelegate::setModelData(editor, model, index);
|
||||
QVariant reValue;
|
||||
|
||||
const BCValue& bcValue = *(_valueList[index.row()].get());
|
||||
if (bcValue.isBoolean())
|
||||
{
|
||||
if (BCToggleSwitch* toggleSswitch = qobject_cast<BCToggleSwitch*>(editor))
|
||||
reValue = toggleSswitch->isChecked() ? 1 : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (BCValueSlider* slider = qobject_cast<BCValueSlider*>(editor))
|
||||
reValue = slider->value();
|
||||
}
|
||||
|
||||
model->setData(index, reValue, Qt::EditRole);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +174,7 @@ void BCValueDelegate::paint(QPainter *painter, const QStyleOptionViewItem& optio
|
||||
QStyleOptionViewItem opt = option;
|
||||
initStyleOption(&opt, index);
|
||||
|
||||
const BCValue& bcValue = *(_valueList[ index.row()].get());
|
||||
const BCValue& bcValue = *(_valueList[ index.row()].get());
|
||||
|
||||
if( bcValue.isBoolean() )
|
||||
{
|
||||
@@ -208,56 +230,29 @@ void BCValueDelegate::paintBooleanValue( QPainter *painter, const QStyleOptionVi
|
||||
text, // Der zu zeichnende String
|
||||
textRole // Die ermittelte Farb-Rolle
|
||||
);
|
||||
return;
|
||||
/*
|
||||
// 1. Standard-Optionen für die Zelle holen
|
||||
QStyleOptionViewItem opt = option;
|
||||
//initStyleOption(&opt, index);
|
||||
|
||||
// 2. Den originalen Text ('0' oder '1') ausblenden, damit er nicht hinter der Checkbox steht
|
||||
opt.text = "";
|
||||
|
||||
// Zuerst den Hintergrund der Zelle zeichnen (wichtig für Selektions-Farben etc.)
|
||||
// Wir übergeben nullptr für das Widget, da QStyledItemDelegate ohnehin unabhängig zeichnet
|
||||
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, nullptr);
|
||||
|
||||
|
||||
// 4. Optionen für die Checkbox konfigurieren
|
||||
QStyleOptionButton cbOpt;
|
||||
cbOpt.state = isChecked ? QStyle::State_On : QStyle::State_Off;
|
||||
cbOpt.state |= QStyle::State_Enabled; // Damit die Checkbox nicht ausgegraut/deaktiviert aussieht
|
||||
|
||||
// 5. Größe und Position berechnen (Zentriert in der Zelle)
|
||||
// Wir fragen das System nach der korrekten Größe für eine Checkbox
|
||||
QRect checkRect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &cbOpt, nullptr);
|
||||
|
||||
// Checkbox exakt in der Mitte des zur Verfügung stehenden Zellenbereichs platzieren
|
||||
cbOpt.rect = QStyle::alignedRect(option.direction, Qt::AlignLeft| Qt::AlignVCenter, checkRect.size(), option.rect);
|
||||
|
||||
// 6. Die native Checkbox zeichnen
|
||||
QApplication::style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &cbOpt, painter, nullptr);
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
QRect BCValueDelegate::clipToSliderRect( const QRect& rect, int buttonOffset ) const
|
||||
QRect BCValueDelegate::adjustEditorRect( const QRect& rect, int x1, int y1, int x2, int y2 ) const
|
||||
{
|
||||
return rect.adjusted
|
||||
(
|
||||
rect.width() - cTextBlockOffset, // Von rechts: cTextBlockOffset (==130) px (Breite der Progress Bar)
|
||||
0, // Oben: kein Offset
|
||||
-buttonOffset, // Rechts: 8px Padding
|
||||
0 // Unten: kein Offset
|
||||
rect.width() - cTextBlockOffset + x1, // Von rechts: cTextBlockOffset (==130) px (Breite der Progress Bar)
|
||||
y1, // Oben: kein Offset
|
||||
x2, // Rechts: 8px Padding
|
||||
y2 // Unten: kein Offset
|
||||
);
|
||||
}
|
||||
|
||||
// option.rect.adjusted(option.rect.width() - cTextBlockOffset,4,0,0);
|
||||
|
||||
/**
|
||||
* @brief Zeichnet der 'Sliderindicator', also den Anteil des Gesamtwerts als Fortschrittsbalken
|
||||
*/
|
||||
|
||||
void BCValueDelegate::paintPlainSliderIndicator(QPainter* painter, const QRect& rect, double ratio )const
|
||||
{
|
||||
QRect sliderRect = clipToSliderRect( rect, 35 );
|
||||
//BCValueSliderOld::paintSliderIndicator(painter, sliderRect, ratio );
|
||||
QRect sliderRect = adjustEditorRect( rect, 0, 0, -35, 0 );
|
||||
// Kleinen Slider-Indikator zeichnen
|
||||
painter->save();
|
||||
painter->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
Reference in New Issue
Block a user