#1830 AppFwk : Add heading concept

This commit is contained in:
Magne Sjaastad
2017-09-07 07:09:14 +02:00
parent 71db603e11
commit aef886a26e
4 changed files with 41 additions and 7 deletions

View File

@@ -67,6 +67,16 @@ PdmOptionItemInfo::PdmOptionItemInfo(const QString& anOptionUiText, caf::PdmObje
m_value = QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(obj)); m_value = QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(obj));
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmOptionItemInfo PdmOptionItemInfo::createHeader(const QString& anOptionUiText, bool anIsDimmed /*= false*/, QIcon anIcon /*= QIcon()*/)
{
PdmOptionItemInfo header(anOptionUiText, QVariant(), anIsDimmed, anIcon);
return header;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -99,6 +109,14 @@ bool PdmOptionItemInfo::isDimmed() const
return m_isDimmed; return m_isDimmed;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmOptionItemInfo::isHeading() const
{
return !m_value.isValid();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -89,11 +89,14 @@ public:
PdmOptionItemInfo(const QString& anOptionUiText, const QVariant& aValue, bool anIsDimmed = false, QIcon anIcon = QIcon()); PdmOptionItemInfo(const QString& anOptionUiText, const QVariant& aValue, bool anIsDimmed = false, QIcon anIcon = QIcon());
PdmOptionItemInfo(const QString& anOptionUiText, caf::PdmObjectHandle* obj, bool anIsDimmed = false, QIcon anIcon = QIcon()); PdmOptionItemInfo(const QString& anOptionUiText, caf::PdmObjectHandle* obj, bool anIsDimmed = false, QIcon anIcon = QIcon());
static PdmOptionItemInfo createHeader(const QString& anOptionUiText, bool anIsDimmed = false, QIcon anIcon = QIcon());
void setLevel(int level); void setLevel(int level);
const QString optionUiText() const; const QString optionUiText() const;
const QVariant value() const; const QVariant value() const;
bool isDimmed() const; bool isDimmed() const;
bool isHeading() const;
const QIcon icon() const; const QIcon icon() const;
int level() const; int level() const;

View File

@@ -70,7 +70,7 @@ public:
m_proxyDoubleField = 0; m_proxyDoubleField = 0;
if (!(m_proxyDoubleField == 3)) { std::cout << "Double is not 3 " << std::endl; } if (!(m_proxyDoubleField == 3)) { std::cout << "Double is not 3 " << std::endl; }
CAF_PDM_InitFieldNoDefault(&m_multiSelectList, "SelectedItems", " ", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_multiSelectList, "SelectedItems", "Multi Select Field", "", "", "");
m_multiSelectList.xmlCapability()->setIOReadable(false); m_multiSelectList.xmlCapability()->setIOReadable(false);
m_multiSelectList.xmlCapability()->setIOWritable(false); m_multiSelectList.xmlCapability()->setIOWritable(false);
m_multiSelectList.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName()); m_multiSelectList.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName());
@@ -122,8 +122,7 @@ public:
options.push_back(caf::PdmOptionItemInfo(text, text)); options.push_back(caf::PdmOptionItemInfo(text, text));
text = "Second"; text = "Second";
options.push_back(caf::PdmOptionItemInfo(text, text)); options.push_back(caf::PdmOptionItemInfo::createHeader(text));
{ {
text = "Second_a"; text = "Second_a";
@@ -139,6 +138,7 @@ public:
options.push_back(itemInfo); options.push_back(itemInfo);
} }
/*
static int s_additionalSubItems = 0; static int s_additionalSubItems = 0;
s_additionalSubItems++; s_additionalSubItems++;
for (auto i = 0; i < s_additionalSubItems; i++) for (auto i = 0; i < s_additionalSubItems; i++)
@@ -148,6 +148,7 @@ public:
itemInfo.setLevel(1); itemInfo.setLevel(1);
options.push_back(itemInfo); options.push_back(itemInfo);
} }
*/
int additionalSubItems = 0; int additionalSubItems = 0;

View File

@@ -80,7 +80,17 @@ void caf::PdmUiTreeSelectionQModel::setOptions(caf::PdmUiFieldEditorHandle* fiel
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
Qt::ItemFlags caf::PdmUiTreeSelectionQModel::flags(const QModelIndex &index) const Qt::ItemFlags caf::PdmUiTreeSelectionQModel::flags(const QModelIndex &index) const
{ {
if (index.isValid())
{
int optionItemIndex = toOptionItemIndex(index);
if (!m_options[optionItemIndex].isHeading())
{
return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable; return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable;
}
}
return QAbstractItemModel::flags(index);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -148,11 +158,13 @@ QVariant caf::PdmUiTreeSelectionQModel::data(const QModelIndex &index, int role
{ {
CAF_ASSERT(index.internalId() < m_options.size()); CAF_ASSERT(index.internalId() < m_options.size());
int optionItemIndex = toOptionItemIndex(index);
if (role == Qt::DisplayRole) if (role == Qt::DisplayRole)
{ {
return m_options[toOptionItemIndex(index)].optionUiText(); return m_options[optionItemIndex].optionUiText();
} }
else if (role == Qt::CheckStateRole) else if (role == Qt::CheckStateRole && !m_options[optionItemIndex].isHeading())
{ {
CAF_ASSERT(m_uiFieldHandle); CAF_ASSERT(m_uiFieldHandle);
@@ -162,7 +174,7 @@ QVariant caf::PdmUiTreeSelectionQModel::data(const QModelIndex &index, int role
for (QVariant v : valuesSelectedInField) for (QVariant v : valuesSelectedInField)
{ {
int indexInField = v.toInt(); int indexInField = v.toInt();
if (indexInField == toOptionItemIndex(index)) if (indexInField == optionItemIndex)
{ {
return Qt::Checked; return Qt::Checked;
} }