AppFwk : ComboBox : Add previous/next buttons, controlled by attributes

This commit is contained in:
Magne Sjaastad 2017-11-29 16:19:37 +01:00
parent e388a58fae
commit c001a0008f
2 changed files with 100 additions and 16 deletions

View File

@ -43,6 +43,7 @@
#include "cafFactory.h"
#include <QApplication>
#include <QComboBox>
#include <QLabel>
#include <QWheelEvent>
@ -63,6 +64,14 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
PdmUiFieldEditorHandle::updateLabelFromField(m_label, uiConfigName);
}
// Handle attributes
PdmUiComboBoxEditorAttribute attributes;
caf::PdmUiObjectHandle* uiObject = uiObj(field()->fieldHandle()->ownerObject());
if (uiObject)
{
uiObject->editorAttribute(field()->fieldHandle(), uiConfigName, &attributes);
}
if (!m_comboBox.isNull())
{
m_comboBox->setEnabled(!field()->isUiReadOnly(uiConfigName));
@ -87,14 +96,6 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
m_comboBox->setCurrentIndex(0);
}
// Handle attributes
PdmUiComboBoxEditorAttribute attributes;
caf::PdmUiObjectHandle* uiObject = uiObj(field()->fieldHandle()->ownerObject());
if (uiObject)
{
uiObject->editorAttribute(field()->fieldHandle(), uiConfigName, &attributes);
}
if (attributes.adjustWidthToContents)
{
m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
@ -102,6 +103,43 @@ void PdmUiComboBoxEditor::configureAndUpdateUi(const QString& uiConfigName)
m_comboBox->blockSignals(false);
}
if (attributes.showPreviousAndNextButtons)
{
if (m_previousItemButton.isNull())
{
m_previousItemButton = new QToolButton(m_placeholder);
connect(m_previousItemButton, SIGNAL(clicked()), this, SLOT(slotPreviousButtonPressed()));
m_previousItemButton->setToolTip("Previous");
m_previousItemButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowUp));
}
if (m_nextItemButton.isNull())
{
m_nextItemButton = new QToolButton(m_placeholder);
connect(m_nextItemButton, SIGNAL(clicked()), this, SLOT(slotNextButtonPressed()));
m_nextItemButton->setToolTip("Next");
m_nextItemButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowDown));
}
m_layout->insertWidget(1, m_previousItemButton);
m_layout->insertWidget(2, m_nextItemButton);
}
else
{
if (m_previousItemButton)
{
m_layout->removeWidget(m_previousItemButton);
m_previousItemButton->deleteLater();
}
if (m_nextItemButton)
{
m_layout->removeWidget(m_nextItemButton);
m_nextItemButton->deleteLater();
}
}
}
//--------------------------------------------------------------------------------------------------
@ -162,9 +200,16 @@ QWidget* PdmUiComboBoxEditor::createEditorWidget(QWidget * parent)
m_comboBox = new CustomQComboBox(parent);
m_comboBox->setFocusPolicy(Qt::StrongFocus);
m_placeholder = new QWidget(parent);
m_layout = new QHBoxLayout(m_placeholder);
m_layout->setContentsMargins(0,0,0,0);
m_layout->setSpacing(0);
m_layout->addWidget(m_comboBox);
connect(m_comboBox, SIGNAL(activated(int)), this, SLOT(slotIndexActivated(int)));
return m_comboBox;
return m_placeholder;
}
//--------------------------------------------------------------------------------------------------
@ -190,4 +235,30 @@ void PdmUiComboBoxEditor::slotIndexActivated(int index)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiComboBoxEditor::slotNextButtonPressed()
{
int indexCandidate = m_comboBox->currentIndex() + 1;
if (indexCandidate < m_comboBox->count())
{
slotIndexActivated(indexCandidate);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiComboBoxEditor::slotPreviousButtonPressed()
{
int indexCandidate = m_comboBox->currentIndex() - 1;
if (indexCandidate > -1 && indexCandidate < m_comboBox->count())
{
slotIndexActivated(indexCandidate);
}
}
} // end namespace caf

View File

@ -39,12 +39,14 @@
#include "cafPdmUiFieldEditorHandle.h"
#include <QString>
#include <QWidget>
#include <QPointer>
#include <QComboBox>
#include <QLabel>
#include <QComboBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QPointer>
#include <QString>
#include <QToolButton>
#include <QWidget>
namespace caf
{
@ -56,12 +58,15 @@ namespace caf
class PdmUiComboBoxEditorAttribute : public PdmUiEditorAttribute
{
public:
bool adjustWidthToContents;
PdmUiComboBoxEditorAttribute()
{
adjustWidthToContents = false;
showPreviousAndNextButtons = false;
}
public:
bool adjustWidthToContents;
bool showPreviousAndNextButtons;
};
@ -82,9 +87,17 @@ protected:
protected slots:
void slotIndexActivated(int index);
void slotNextButtonPressed();
void slotPreviousButtonPressed();
private:
QPointer<QComboBox> m_comboBox;
QPointer<QLabel> m_label;
QPointer<QToolButton> m_previousItemButton;
QPointer<QToolButton> m_nextItemButton;
QPointer<QHBoxLayout> m_layout;
QPointer<QWidget> m_placeholder;
};