AppFwk : TableEditor - Show text in lightGray when field is readonly

This commit is contained in:
Magne Sjaastad 2017-01-17 12:55:13 +01:00
parent 3488ada29d
commit d8114decec
2 changed files with 44 additions and 8 deletions

View File

@ -71,6 +71,16 @@ PdmUiTableItemEditor::~PdmUiTableItemEditor()
//--------------------------------------------------------------------------------------------------
void PdmUiTableItemEditor::configureAndUpdateUi(const QString& uiConfigName)
{
caf::PdmUiObjectHandle* uiObject = dynamic_cast<caf::PdmUiObjectHandle*>(this->pdmItem());
if (uiObject)
{
// Call uiOrdering method, as this method is responsible for control of
// object states like hidden/readOnly, etc...
caf::PdmUiOrdering dummy;
uiObject->uiOrdering(uiConfigName, dummy);
}
QModelIndex miStart = m_model->index(m_row, 0);
QModelIndex miEnd = m_model->index(m_row, m_model->columnCount());

View File

@ -189,6 +189,18 @@ bool PdmUiTableViewModel::setData(const QModelIndex &index, const QVariant &valu
//--------------------------------------------------------------------------------------------------
QVariant PdmUiTableViewModel::data(const QModelIndex &index, int role /*= Qt::DisplayRole */) const
{
if (role == Qt::TextColorRole)
{
PdmFieldHandle* fieldHandle = getField(index);
if (fieldHandle && fieldHandle->uiCapability())
{
if (fieldHandle->uiCapability()->isUiReadOnly(m_currentConfigName))
{
return Qt::lightGray;
}
}
}
if (role == Qt::DisplayRole || role == Qt::EditRole)
{
PdmFieldHandle* fieldHandle = getField(index);
@ -215,7 +227,10 @@ QVariant PdmUiTableViewModel::data(const QModelIndex &index, int role /*= Qt::Di
{
if (!displayText.isEmpty()) displayText += ", ";
displayText += options.at(index).optionUiText;
if (index < options.size())
{
displayText += options.at(index).optionUiText;
}
}
}
}
@ -310,20 +325,31 @@ void PdmUiTableViewModel::setPdmData(PdmChildArrayFieldHandle* listField, const
m_pdmList = listField;
m_currentConfigName = configName;
PdmUiOrdering config;
PdmUiOrdering configForFirstRow;
if (m_pdmList && m_pdmList->size() > 0)
if (m_pdmList)
{
PdmObjectHandle* firstObject = m_pdmList->at(0);
PdmUiOrdering dummy;
PdmUiObjectHandle* uiObject = uiObj(firstObject);
if (uiObject)
for (size_t i = 0; i < listField->size(); i++)
{
uiObject->uiOrdering(configName, config);
PdmObjectHandle* pdmObjHandle = m_pdmList->at(i);
PdmUiObjectHandle* uiObject = uiObj(pdmObjHandle);
if (uiObject)
{
if (i == 0)
{
uiObject->uiOrdering(configName, configForFirstRow);
}
else
{
uiObject->uiOrdering(configName, dummy);
}
}
}
}
const std::vector<PdmUiItem*>& uiItems = config.uiItems();
const std::vector<PdmUiItem*>& uiItems = configForFirstRow.uiItems();
// Set all fieldViews to be unvisited
std::map<QString, PdmUiFieldEditorHandle*>::iterator it;