// Created on: 2020-01-25 // Created by: Natalia ERMOLAEVA // Copyright (c) 2020 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 //! Class that uses parameter size as recommended size for the widget. //! If the control is placed in a dock widget of the main window, it will not be resized on free size by resizing the main window. class ViewControl_PredefinedSizeWidget : public QWidget { public: //! Constructor ViewControl_PredefinedSizeWidget (QWidget* theParent, const QSize& theSize) : QWidget (theParent) { SetPredefinedSize (theSize); } //! Destructor virtual ~ViewControl_PredefinedSizeWidget() {} //! Sets default size of control, that is used by the first control show //! \param theDefaultWidth the width value //! \param theDefaultHeight the height value void SetPredefinedSize (const QSize& theSize) { myDefaultSize = theSize;} //! Returns predefined size if both values are positive, otherwise parent size hint virtual QSize sizeHint() const Standard_OVERRIDE { return myDefaultSize.isValid() ? myDefaultSize : QWidget::sizeHint(); } private: QSize myDefaultSize; //!< default size, empty size if it should not be used }; // ======================================================================= // function : Constructor // purpose : // ======================================================================= ViewControl_PropertyView::ViewControl_PropertyView (QWidget* theParent, const QSize& thePredefinedSize) : QObject (theParent), myOwnSelectionChangeBlocked (false) { myMainWidget = new ViewControl_PredefinedSizeWidget (theParent, QSize (1, 100)); if (!thePredefinedSize.isEmpty()) ((ViewControl_PredefinedSizeWidget*)myMainWidget)->SetPredefinedSize (thePredefinedSize); QVBoxLayout* aLayout = new QVBoxLayout (myMainWidget); aLayout->setContentsMargins (0, 0, 0, 0); QScrollArea* anArea = new QScrollArea (myMainWidget); myAttributesStack = new QStackedWidget (myMainWidget); anArea->setWidget (myAttributesStack); anArea->setWidgetResizable( true ); aLayout->addWidget (anArea); myEmptyWidget = new QWidget (myAttributesStack); myAttributesStack->addWidget (myEmptyWidget); myTableWidget = new QWidget (myAttributesStack); myTableWidgetLayout = new QVBoxLayout (myTableWidget); myTableWidgetLayout->setContentsMargins (0, 0, 0, 0); myAttributesStack->addWidget (myTableWidget); myAttributesStack->setCurrentWidget (myEmptyWidget); // create table ViewControl_Table* aTable = new ViewControl_Table (myMainWidget); ViewControl_TableModel* aModel = new ViewControl_TableModel(aTable->TableView()); aTable->SetModel (aModel); connect (aTable->TableView()->selectionModel(), SIGNAL (selectionChanged (const QItemSelection&, const QItemSelection&)), this, SLOT(onTableSelectionChanged (const QItemSelection&, const QItemSelection&))); connect (aModel, SIGNAL (dataChanged(const QModelIndex&, const QModelIndex&, const QVector&)), this, SIGNAL (propertyViewDataChanged())); myTableWidgetLayout->addWidget (aTable->GetControl()); myTable = aTable; } // ======================================================================= // function : Init // purpose : // ======================================================================= void ViewControl_PropertyView::Init (ViewControl_TableModelValues* theTableValues) { ViewControl_Table* aTable = Table(); if (theTableValues) { aTable->Init (theTableValues); ViewControl_Tools::SetDefaultHeaderSections (aTable->TableView(), Qt::Horizontal); } aTable->SetActive (theTableValues != 0); if (theTableValues) myAttributesStack->setCurrentWidget (myTableWidget); else myAttributesStack->setCurrentWidget (myEmptyWidget); } // ======================================================================= // function : Init // purpose : // ======================================================================= void ViewControl_PropertyView::Init (QWidget*) { } // ======================================================================= // function : ClearActiveTablesSelection // purpose : // ======================================================================= void ViewControl_PropertyView::ClearActiveTablesSelection() { bool aWasBlocked = myOwnSelectionChangeBlocked; myOwnSelectionChangeBlocked = true; QList aTables; ViewControl_Table* aTable = Table(); if (aTable->IsActive()) aTable->TableView()->selectionModel()->clearSelection(); myOwnSelectionChangeBlocked = aWasBlocked; } // ======================================================================= // function : Clear // purpose : // ======================================================================= void ViewControl_PropertyView::Clear() { ViewControl_Table* aTable = Table(); if (aTable->IsActive()) { ViewControl_TableModel* aModel = dynamic_cast (aTable->TableView()->model()); aModel->SetModelValues (0); aTable->SetActive (true); } myAttributesStack->setCurrentWidget (myEmptyWidget); } // ======================================================================= // function : SaveState // purpose : // ======================================================================= void ViewControl_PropertyView::SaveState (ViewControl_PropertyView* thePropertyView, QMap& theItems, const QString& thePrefix) { ViewControl_Table* aTable = thePropertyView->Table(); int aColumnWidth = aTable->TableView()->columnWidth (0); theItems[thePrefix + "column_width_0"] = QString::number (aColumnWidth); } // ======================================================================= // function : RestoreState // purpose : // ======================================================================= bool ViewControl_PropertyView::RestoreState (ViewControl_PropertyView* thePropertyView, const QString& theKey, const QString& theValue, const QString& thePrefix) { if (theKey == thePrefix + "column_width_0") { bool isOk; int aWidth = theValue.toInt (&isOk); if (isOk) thePropertyView->Table()->TableView()->horizontalHeader()->setDefaultSectionSize (aWidth); } else return false; return true; } // ======================================================================= // function : onTableSelectionChanged // purpose : // ======================================================================= void ViewControl_PropertyView::onTableSelectionChanged (const QItemSelection&, const QItemSelection&) { if (myOwnSelectionChangeBlocked) return; emit propertyViewSelectionChanged(); }