// Created on: 2017-06-16 // Created by: Natalia ERMOLAEVA // Copyright (c) 2017 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include <inspector/DFBrowserPane_AttributePane.hxx> #include <inspector/DFBrowserPane_ItemRole.hxx> #include <inspector/DFBrowserPane_TableView.hxx> #include <inspector/DFBrowserPane_Tools.hxx> #include <inspector/DFBrowserPane_AttributePaneModel.hxx> #include <AIS_InteractiveObject.hxx> #include <Standard_WarningsDisable.hxx> #include <QGridLayout> #include <QHeaderView> #include <QItemSelectionModel> #include <QTableView> #include <QWidget> #include <Standard_WarningsRestore.hxx> // ======================================================================= // function : Constructor // purpose : // ======================================================================= DFBrowserPane_AttributePane::DFBrowserPane_AttributePane() : DFBrowserPane_AttributePaneAPI(), myMainWidget(0), myTableView(0) { myPaneModel = new DFBrowserPane_AttributePaneModel(); getPaneModel()->SetColumnCount(getColumnCount()); getPaneModel()->SetHeaderValues(getHeaderValues(Qt::Horizontal), Qt::Horizontal); mySelectionModels.push_back(new QItemSelectionModel(myPaneModel)); } // ======================================================================= // function : GetWidget // purpose : // ======================================================================= QWidget* DFBrowserPane_AttributePane::GetWidget(QWidget* theParent, const bool isToCreate) { if (!myMainWidget && isToCreate) myMainWidget = CreateWidget(theParent); return myMainWidget; } // ======================================================================= // function : CreateWidget // purpose : // ======================================================================= QWidget* DFBrowserPane_AttributePane::CreateWidget(QWidget* theParent) { QWidget* aMainWidget = new QWidget(theParent); aMainWidget->setVisible(false); myTableView = new DFBrowserPane_TableView(aMainWidget, getTableColumnWidths()); myTableView->SetModel(myPaneModel); QTableView* aTableView = myTableView->GetTableView(); DFBrowserPane_AttributePaneModel* aPaneModel = dynamic_cast<DFBrowserPane_AttributePaneModel*>(myPaneModel); if (aPaneModel) { if (aPaneModel->GetOrientation() == Qt::Vertical) aTableView->horizontalHeader()->setVisible( !aPaneModel->HeaderValues(Qt::Horizontal).isEmpty()); else aTableView->verticalHeader()->setVisible(!aPaneModel->HeaderValues(Qt::Vertical).isEmpty()); } aTableView->setSelectionModel(mySelectionModels.front()); aTableView->setSelectionBehavior(QAbstractItemView::SelectRows); QGridLayout* aLay = new QGridLayout(aMainWidget); aLay->setContentsMargins(0, 0, 0, 0); aLay->addWidget(myTableView); return aMainWidget; } // ======================================================================= // function : Init // purpose : // ======================================================================= void DFBrowserPane_AttributePane::Init(const Handle(TDF_Attribute)& theAttribute) { QList<QVariant> aValues; GetValues(theAttribute, aValues); getPaneModel()->Init(aValues); if (myTableView) myTableView->GetTableView()->resizeColumnToContents(0); } // ======================================================================= // function : GetAttributeInfo // purpose : // ======================================================================= QVariant DFBrowserPane_AttributePane::GetAttributeInfo(const Handle(TDF_Attribute)& theAttribute, int theRole, int theColumnId) { switch (theRole) { case DFBrowserPane_ItemRole_ShortInfo: { QList<QVariant> aValues; GetShortAttributeInfo(theAttribute, aValues); QStringList anInfoList; for (QList<QVariant>::const_iterator aValuesIt = aValues.begin(); aValuesIt != aValues.end(); aValuesIt++) anInfoList.append(aValuesIt->toString()); return QVariant(anInfoList.join(", ")); } default: return DFBrowserPane_AttributePane::GetAttributeInfoByType( theAttribute.IsNull() ? "" : theAttribute->DynamicType()->Name(), theRole, theColumnId); } } // ======================================================================= // function : GetShortAttributeInfo // purpose : // ======================================================================= void DFBrowserPane_AttributePane::GetShortAttributeInfo(const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues) { QList<QVariant> aValues; GetValues(theAttribute, aValues); for (int aValuesEvenId = 1; aValuesEvenId < aValues.size(); aValuesEvenId = aValuesEvenId + 2) theValues.append(aValues[aValuesEvenId]); } // ======================================================================= // function : GetAttributeInfoByType // purpose : // ======================================================================= QVariant DFBrowserPane_AttributePane::GetAttributeInfoByType(Standard_CString theAttributeName, int theRole, int theColumnId) { if (theColumnId != 0) return QVariant(); switch (theRole) { case Qt::DisplayRole: case Qt::ToolTipRole: return QVariant(theAttributeName); case Qt::DecorationRole: return QIcon(":/icons/attribute.png"); case DFBrowserPane_ItemRole_Decoration_40x40: return QIcon(":/icons/attribute_40x40.png"); default: break; } return QVariant(); } // ======================================================================= // function : getPaneModel // purpose : // ======================================================================= DFBrowserPane_AttributePaneModel* DFBrowserPane_AttributePane::getPaneModel() const { return dynamic_cast<DFBrowserPane_AttributePaneModel*>(myPaneModel); } // ======================================================================= // function : getTableColumnWidths // purpose : // ======================================================================= QMap<int, int> DFBrowserPane_AttributePane::getTableColumnWidths() const { QMap<int, int> aValues; for (int aColumnId = 0, aCount = getPaneModel()->columnCount(); aColumnId < aCount; aColumnId++) aValues.insert(aColumnId, DFBrowserPane_Tools::DefaultPanelColumnWidth(aColumnId)); return aValues; }