// 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // ======================================================================= // function : Constructor // purpose : // ======================================================================= DFBrowser_AttributePaneStack::DFBrowser_AttributePaneStack(QObject* theParent) : QObject(theParent), myCurrentPane(0), myAttributesStack(0), myModule(0), myTreeLevelView(0), mySearchView(0), myEmptyWidget(0), myPaneMode(DFBrowser_AttributePaneType_ItemView) { myPaneSelector = new DFBrowserPane_AttributePaneSelector(theParent); } // ======================================================================= // function : CreateWidget // purpose : // ======================================================================= void DFBrowser_AttributePaneStack::CreateWidget(QWidget* theParent) { myAttributesStack = new QStackedWidget(theParent); ViewControl_Tools::SetWhiteBackground(myAttributesStack); myEmptyWidget = new QWidget(theParent); ViewControl_Tools::SetWhiteBackground(myEmptyWidget); myAttributesStack->addWidget(myEmptyWidget); myTreeLevelView = new DFBrowser_TreeLevelView(theParent); myAttributesStack->addWidget(myTreeLevelView->GetControl()); mySearchView = new DFBrowser_SearchView(theParent); myAttributesStack->addWidget(mySearchView->GetControl()); myAttributesStack->setCurrentWidget(myEmptyWidget); } // ======================================================================= // function : SetPaneMode // purpose : // ======================================================================= void DFBrowser_AttributePaneStack::SetPaneMode(const DFBrowser_AttributePaneType& theMode) { if (myPaneMode == theMode) return; myPaneMode = theMode; if (myPaneMode == DFBrowser_AttributePaneType_SearchView) { // clear highlight in tree model DFBrowser_TreeModel* aModel = dynamic_cast(myModule->GetOCAFViewModel()); if (aModel && aModel->HasHighlighted()) aModel->SetHighlighted(QModelIndexList()); myAttributesStack->setCurrentWidget(mySearchView->GetControl()); } else { QItemSelectionModel* aSelectionModel = myModule->GetOCAFViewSelectionModel(); QModelIndex anIndex = TreeModel_ModelBase::SingleSelected(aSelectionModel->selectedIndexes(), 0); SetCurrentItem(anIndex); } } // ======================================================================= // function : SetCurrentItem // purpose : // ======================================================================= void DFBrowser_AttributePaneStack::SetCurrentItem(const QModelIndex& theIndex) { if (myPaneMode != DFBrowser_AttributePaneType_ItemView) return; // clear highlight in tree model DFBrowser_TreeModel* aModel = dynamic_cast(myModule->GetOCAFViewModel()); if (aModel && aModel->HasHighlighted()) aModel->SetHighlighted(QModelIndexList()); myCurrentPane = 0; QWidget* aWidget = 0; TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex(theIndex); if (!anItemBase) return; if (DFBrowser_TreeLevelView::ProcessItem(theIndex)) aWidget = myTreeLevelView->GetControl(); else { DFBrowser_ItemPtr anItem = itemDynamicCast(anItemBase); if (!anItem) return; if (myAttributesStack->currentWidget() == myTreeLevelView->GetControl()) myTreeLevelView->ClearSelection(); Handle(TDF_Attribute) anAttribute = anItem->GetAttribute(); myCurrentPane = myModule->GetAttributePane(anAttribute); if (myCurrentPane) { aWidget = myCurrentPane->GetWidget(myAttributesStack, true); if (aWidget) { int aWidgetIndex = myAttributesStack->indexOf(aWidget); if (aWidgetIndex < 0) myAttributesStack->addWidget(aWidget); } myCurrentPane->Init(anAttribute); std::list aSelectionModels = myCurrentPane->GetSelectionModels(); myPaneSelector->SetCurrentSelectionModels(aSelectionModels); } } myAttributesStack->setCurrentWidget(aWidget != NULL ? aWidget : myEmptyWidget); }