//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- PdmUiFieldEditorHandle* PdmUiTableViewModel::getEditor(const QModelIndex &index) { PdmFieldHandle* field = getField(index); if (!field) { return NULL; } PdmUiFieldEditorHandle* editor = NULL; std::map<QString, PdmUiFieldEditorHandle*>::iterator it; it = m_fieldEditors.find(field->keyword()); if (it != m_fieldEditors.end()) { editor = it->second; if (editor) { if (field) { editor->setField(field->uiCapability()); } } } return editor; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Qt::ItemFlags PdmUiTableViewModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::ItemIsEnabled; Qt::ItemFlags flagMask = QAbstractItemModel::flags(index); if (isRepresentingBoolean(index)) { flagMask = flagMask | Qt::ItemIsUserCheckable; } else { flagMask = flagMask | Qt::ItemIsEditable; } PdmFieldHandle* field = getField(index); PdmUiFieldHandle* uiFieldHandle = field->uiCapability(); if (uiFieldHandle) { if (uiFieldHandle->isUiReadOnly(m_currentConfigName)) { flagMask = flagMask ^ Qt::ItemIsEditable; } } return flagMask; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool PdmUiTableViewModel::setData(const QModelIndex &index, const QVariant &value, int role /*= Qt::EditRole*/) { if (role == Qt::CheckStateRole) { if (isRepresentingBoolean(index)) { // Clear current selection, UI does not behave well for multiple selection SelectionManager::instance()->clear(SelectionManager::CURRENT); bool toggleOn = (value == Qt::Checked); PdmFieldHandle* field = getField(index); PdmUiFieldHandle* uiFieldHandle = field->uiCapability(); PdmUiCommandSystemProxy::instance()->setUiValueToField(uiFieldHandle, toggleOn); return true; } } return false; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QVariant PdmUiTableViewModel::data(const QModelIndex &index, int role /*= Qt::DisplayRole */) const { if (role == Qt::DisplayRole || role == Qt::EditRole) { PdmFieldHandle* fieldHandle = getField(index); PdmUiFieldHandle* uiFieldHandle = fieldHandle->uiCapability(); if (uiFieldHandle) { bool fromMenuOnly = false; QList<PdmOptionItemInfo> valueOptions = uiFieldHandle->valueOptions(&fromMenuOnly); if (!valueOptions.isEmpty()) { int listIndex = uiFieldHandle->uiValue().toInt(); if (listIndex == -1) { return ""; } return valueOptions[listIndex].optionUiText; } QVariant val; PdmObjectHandle* objForRow = this->pdmObjectForRow(index.row()); PdmUiObjectHandle* uiObjForRow = uiObj(objForRow); if (uiObjForRow) { // NOTE: Redesign // To be able to get formatted string, an editor attribute concept is used // TODO: Create a function in pdmObject like this // virtual void defineDisplayString(const PdmFieldHandle* field, QString uiConfigName) {} PdmUiLineEditorAttributeUiDisplayString leab; uiObjForRow->editorAttribute(fieldHandle, m_currentConfigName, &leab); if (!leab.m_displayString.isEmpty()) { val = leab.m_displayString; } else { val = uiFieldHandle->uiValue(); } } else { val = uiFieldHandle->uiValue(); } return val; } else { assert(false); } } else if (role == Qt::CheckStateRole) { if (isRepresentingBoolean(index)) { PdmUiFieldHandle* uiFieldHandle = getField(index)->uiCapability(); if (uiFieldHandle) { QVariant val = uiFieldHandle->uiValue(); bool isToggledOn = val.toBool(); if (isToggledOn) { return Qt::Checked; } else { return Qt::Unchecked; } } else { return QVariant(); } } } return QVariant(); }