//################################################################################################## // // Custom Visualization Core library // Copyright (C) 2011-2012 Ceetron AS // // This library is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at <> // for more details. // //################################################################################################## #include "cafPdmUiItem.h" #include "cafPdmUiEditorHandle.h" namespace caf { //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QStringList PdmOptionItemInfo::extractUiTexts(const QList& optionList) { QStringList texts; int i; for (i = 0; i < optionList.size(); ++i) { texts.push_back(optionList[i].optionUiText); } return texts; } //-------------------------------------------------------------------------------------------------- /// Finds the indexes into the optionList that the field value(s) corresponds to. /// In the case where the field is some kind of array, several indexes might be returned /// The returned bool is true if all the fieldValues were found. //-------------------------------------------------------------------------------------------------- bool PdmOptionItemInfo::findValues(const QList& optionList , QVariant fieldValue, std::vector& foundIndexes) { foundIndexes.clear(); // Find this fieldvalue in the optionlist if present // First handle lists/arrays of values if (fieldValue.type() == QVariant::List) { QList valuesSelectedInField = fieldValue.toList(); if (valuesSelectedInField.size()) { for (int i= 0 ; i < valuesSelectedInField.size(); ++i) { for (unsigned int opIdx = 0; opIdx < static_cast(optionList.size()); ++opIdx) { if (valuesSelectedInField[i] == optionList[opIdx].value) { foundIndexes.push_back(opIdx); } } } } return (static_cast(valuesSelectedInField.size()) <= foundIndexes.size()); } else // Then handle single value fields { for(unsigned int opIdx = 0; opIdx < static_cast(optionList.size()); ++opIdx) { if (optionList[opIdx].value == fieldValue) { foundIndexes.push_back(opIdx); break; } } return (foundIndexes.size() > 0); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString PdmUiItem::uiName(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_uiName.isNull())) return conInfo->m_uiName; if (defInfo && !(defInfo->m_uiName.isNull())) return defInfo->m_uiName; if (sttInfo && !(sttInfo->m_uiName.isNull())) return sttInfo->m_uiName; return QString(""); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QIcon PdmUiItem::uiIcon(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_icon.isNull())) return conInfo->m_icon; if (defInfo && !(defInfo->m_icon.isNull())) return defInfo->m_icon; if (sttInfo && !(sttInfo->m_icon.isNull())) return sttInfo->m_icon; return QIcon(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString PdmUiItem::uiToolTip(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_toolTip.isNull())) return conInfo->m_toolTip; if (defInfo && !(defInfo->m_toolTip.isNull())) return defInfo->m_toolTip; if (sttInfo && !(sttInfo->m_toolTip.isNull())) return sttInfo->m_toolTip; return QString(""); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString PdmUiItem::uiWhatsThis(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_whatsThis.isNull())) return conInfo->m_whatsThis; if (defInfo && !(defInfo->m_whatsThis.isNull())) return defInfo->m_whatsThis; if (sttInfo && !(sttInfo->m_whatsThis.isNull())) return sttInfo->m_whatsThis; return QString(""); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool PdmUiItem::isUiHidden(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_isHidden == -1)) return conInfo->m_isHidden; if (defInfo && !(defInfo->m_isHidden == -1)) return defInfo->m_isHidden; if (sttInfo && !(sttInfo->m_isHidden == -1)) return sttInfo->m_isHidden; return false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool PdmUiItem::isUiReadOnly(QString uiConfigName /*= ""*/) { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_isReadOnly == -1)) return conInfo->m_isReadOnly; if (defInfo && !(defInfo->m_isReadOnly == -1)) return defInfo->m_isReadOnly; if (sttInfo && !(sttInfo->m_isReadOnly == -1)) return sttInfo->m_isReadOnly; return false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString PdmUiItem::uiEditorTypeName(const QString& uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_editorTypeName.isEmpty())) return conInfo->m_editorTypeName; if (defInfo && !(defInfo->m_editorTypeName.isEmpty())) return defInfo->m_editorTypeName; if (sttInfo && !(sttInfo->m_editorTypeName.isEmpty())) return sttInfo->m_editorTypeName; return QString(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Qt::Alignment PdmUiItem::labelAlignment(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo) return conInfo->m_labelAlignment; if (defInfo) return defInfo->m_labelAlignment; if (sttInfo) return sttInfo->m_labelAlignment; return Qt::AlignLeft; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const PdmUiItemInfo* PdmUiItem::configInfo(QString uiConfigName) const { if (uiConfigName == "" || uiConfigName.isNull()) return NULL; std::map::const_iterator it; it = m_configItemInfos.find(uiConfigName); if (it != m_configItemInfos.end()) return &(it->second); return NULL; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const PdmUiItemInfo* PdmUiItem::defaultInfo() const { std::map::const_iterator it; it = m_configItemInfos.find(""); if (it != m_configItemInfos.end()) return &(it->second); return NULL; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void PdmUiItem::updateConnectedEditors() { std::set::iterator it; for (it = m_editors.begin(); it != m_editors.end(); ++it) { (*it)->updateUi(); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- PdmUiItem::~PdmUiItem() { std::set::iterator it; for (it = m_editors.begin(); it != m_editors.end(); ++it) { (*it)->m_pdmItem = NULL; } } } //End of namespace caf