From: vsv Date: Fri, 30 Oct 2015 12:32:14 +0000 (+0300) Subject: Issue #888: Do not highlight non selectable tree items in Object Browser X-Git-Tag: V_2.0.0_alfa1~60 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=28344a52b5954b3f7444691ca36301a6d1dd77b2;p=modules%2Fshaper.git Issue #888: Do not highlight non selectable tree items in Object Browser --- diff --git a/src/XGUI/XGUI_DataModel.cpp b/src/XGUI/XGUI_DataModel.cpp index bac4aedae..afb0aba04 100644 --- a/src/XGUI/XGUI_DataModel.cpp +++ b/src/XGUI/XGUI_DataModel.cpp @@ -375,13 +375,13 @@ QVariant XGUI_DataModel::data(const QModelIndex& theIndex, int theRole) const case Qt::DecorationRole: return QIcon(myXMLReader.rootFolderIcon(theIndexRow).c_str()); case Qt::ForegroundRole: - if ((flags(theIndex) & Qt::ItemIsEditable) == 0) + if ((theIndex.flags() & Qt::ItemIsEditable) == 0) return QBrush(Qt::lightGray); return ACTIVE_COLOR; } } else { // an object or sub-document if (theRole == Qt::ForegroundRole) { - if ((flags(theIndex) & Qt::ItemIsEditable) == 0) + if ((theIndex.flags() & Qt::ItemIsEditable) == 0) return QBrush(Qt::lightGray); return ACTIVE_COLOR; } diff --git a/src/XGUI/XGUI_ObjectsBrowser.cpp b/src/XGUI/XGUI_ObjectsBrowser.cpp index 147d0c3be..992ed73ac 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.cpp +++ b/src/XGUI/XGUI_ObjectsBrowser.cpp @@ -61,6 +61,8 @@ private: XGUI_DataTree::XGUI_DataTree(QWidget* theParent) : QTreeView(theParent) { + myStyle = new XGUI_TreeViewStyle(); + setStyle(myStyle); setHeaderHidden(true); setEditTriggers(QAbstractItemView::NoEditTriggers); setSelectionBehavior(QAbstractItemView::SelectRows); @@ -169,6 +171,37 @@ void XGUI_DataTree::onDoubleClick(const QModelIndex& theIndex) } } +void XGUI_DataTree::drawRow(QPainter* thePainter, + const QStyleOptionViewItem& theOptions, + const QModelIndex& theIndex) const +{ + QStyleOptionViewItemV4 aOptions = theOptions; + myStyle->setIndex(theIndex); + QTreeView::drawRow(thePainter, aOptions, theIndex); +} + +//******************************************************************** +//******************************************************************** +//******************************************************************** +void XGUI_TreeViewStyle::drawPrimitive(PrimitiveElement theElement, + const QStyleOption* theOption, + QPainter* thePainter, const QWidget* theWidget) const +{ + if ((theElement == QStyle::PE_PanelItemViewRow) || (theElement == QStyle::PE_PanelItemViewItem)) { + const QStyleOptionViewItemV4* aOptions = qstyleoption_cast(theOption); + if (myIndex.isValid() && ((myIndex.flags() & Qt::ItemIsSelectable) == 0)) { + QStyle::State aState = aOptions->state; + if ((aState & QStyle::State_MouseOver) != 0) + aState &= ~QStyle::State_MouseOver; + QStyleOptionViewItemV4* aOpt = (QStyleOptionViewItemV4*) aOptions; + aOpt->state = aState; + QWindowsVistaStyle::drawPrimitive(theElement, aOpt, thePainter, theWidget); + } + } + QWindowsVistaStyle::drawPrimitive(theElement, theOption, thePainter, theWidget); +} + + //******************************************************************** //******************************************************************** //******************************************************************** diff --git a/src/XGUI/XGUI_ObjectsBrowser.h b/src/XGUI/XGUI_ObjectsBrowser.h index 8c33e24f9..9816e1e2c 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.h +++ b/src/XGUI/XGUI_ObjectsBrowser.h @@ -12,6 +12,7 @@ #include #include #include +#include class ModuleBase_IDocumentDataModel; class XGUI_DataModel; @@ -51,6 +52,27 @@ private: bool myIsSelected; }; +/** +* \ingroup GUI +* Implementation of XGUI_DataTree custom style +*/ +class XGUI_TreeViewStyle : public QWindowsVistaStyle +{ + Q_OBJECT +public: + XGUI_TreeViewStyle() : QWindowsVistaStyle() {} + + void drawPrimitive(PrimitiveElement theElement, const QStyleOption* theOption, + QPainter* thePainter, const QWidget* theWidget = 0) const; + + void setIndex(const QModelIndex& theIndex) { myIndex = theIndex; } + QModelIndex index() const { return myIndex; } + +private: + QModelIndex myIndex; +}; + + /** * \ingroup GUI * Implementation of Data Tree object for Object Browser @@ -90,6 +112,11 @@ public slots: /// Redefinition of virtual method virtual void resizeEvent(QResizeEvent* theEvent); + virtual void drawRow(QPainter* thePainter, + const QStyleOptionViewItem& theOptions, + const QModelIndex& theIndex) const; +private: + XGUI_TreeViewStyle* myStyle; }; /**\class XGUI_ObjectsBrowser