]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2513: Provide selection for selector in undocked window
authorvsv <vsv@opencascade.com>
Fri, 6 Jul 2018 12:38:31 +0000 (15:38 +0300)
committervsv <vsv@opencascade.com>
Fri, 6 Jul 2018 12:38:31 +0000 (15:38 +0300)
src/ModuleBase/ModuleBase_ListView.cpp
src/ModuleBase/ModuleBase_ListView.h
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/XGUI/XGUI_PropertyPanel.cpp

index d1dc0158ab1b8a47c0ffb3d98790bbdefda7cc82..a245b9e6f49d7147f2fc6d3a1ab045a87e3974ac 100644 (file)
@@ -24,7 +24,6 @@
 #include <QAction>
 #include <QApplication>
 #include <QClipboard>
-#include <QListWidget>
 #include <QWidget>
 
 #ifndef WIN32
 
 const int ATTRIBUTE_SELECTION_INDEX_ROLE = Qt::UserRole + 1;
 
-/**
-* Customization of a List Widget to make it to be placed on full width of container
-*/
-class CustomListWidget : public QListWidget
-{
-public:
-  /// Constructor
-  /// \param theParent a parent widget
-  CustomListWidget(QWidget* theParent)
-    : QListWidget(theParent)
-  {
-  }
-
-  /// Redefinition of virtual method
-  virtual QSize        sizeHint() const
-  {
-    int aHeight = 2*QFontMetrics(font()).height();
-    QSize aSize = QListWidget::sizeHint();
-    return QSize(aSize.width(), aHeight);
-  }
-
-  /// Redefinition of virtual method
-  virtual QSize        minimumSizeHint() const
-  {
-    int aHeight = 4/*2*/*QFontMetrics(font()).height();
-    QSize aSize = QListWidget::minimumSizeHint();
-    return QSize(aSize.width(), aHeight);
-  }
-
-#ifndef WIN32
-// The code is necessary only for Linux because
-//it can not update viewport on widget resize
-protected:
-  void resizeEvent(QResizeEvent* theEvent)
-  {
-    QListWidget::resizeEvent(theEvent);
-    QTimer::singleShot(5, viewport(), SLOT(repaint()));
-  }
-#endif
-};
-
 //********************************************************************
 ModuleBase_ListView::ModuleBase_ListView(QWidget* theParent, const QString& theObjectName,
   const QString& theToolTip)
@@ -98,6 +56,7 @@ ModuleBase_ListView::ModuleBase_ListView(QWidget* theParent, const QString& theO
 
   myListControl->setContextMenuPolicy(Qt::ActionsContextMenu);
   connect(myListControl, SIGNAL(itemSelectionChanged()), SLOT(onListSelection()));
+  connect(myListControl, SIGNAL(activated()), this, SIGNAL(listActivated()));
 }
 
 //********************************************************************
index 9fd0f578a7d09013169b0a2c8bf426dc7f473a6b..6cafd597ccfea31a5270d657f7fcc8cd18f7f1cb 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <QModelIndex>
 #include <QObject>
+#include <QListWidget>
 
 #include <set>
 
@@ -32,6 +33,59 @@ class QAction;
 class QListWidget;
 class QWidget;
 
+
+/**
+* Customization of a List Widget to make it to be placed on full width of container
+*/
+class CustomListWidget : public QListWidget
+{
+  Q_OBJECT
+public:
+  /// Constructor
+  /// \param theParent a parent widget
+  CustomListWidget(QWidget* theParent)
+    : QListWidget(theParent)
+  {
+  }
+
+  /// Redefinition of virtual method
+  virtual QSize        sizeHint() const
+  {
+    int aHeight = 2 * QFontMetrics(font()).height();
+    QSize aSize = QListWidget::sizeHint();
+    return QSize(aSize.width(), aHeight);
+  }
+
+  /// Redefinition of virtual method
+  virtual QSize        minimumSizeHint() const
+  {
+    int aHeight = 4/*2*/ * QFontMetrics(font()).height();
+    QSize aSize = QListWidget::minimumSizeHint();
+    return QSize(aSize.width(), aHeight);
+  }
+
+signals:
+  void activated();
+
+protected:
+  virtual void mouseReleaseEvent(QMouseEvent* e) {
+    QListWidget::mouseReleaseEvent(e);
+    emit activated();
+  }
+
+#ifndef WIN32
+  // The code is necessary only for Linux because
+  //it can not update viewport on widget resize
+protected:
+  void resizeEvent(QResizeEvent* theEvent)
+  {
+    QListWidget::resizeEvent(theEvent);
+    QTimer::singleShot(5, viewport(), SLOT(repaint()));
+  }
+#endif
+};
+
+
 /**
 * \ingroup GUI
 * An extension of QListWidget to provide Undo/Redo functionality
@@ -85,10 +139,13 @@ protected slots:
   /// Slot is called on selection of list of selected items
   void onListSelection();
 
+
 signals:
   /// Signal about delete action click
   void deleteActionClicked();
 
+  void listActivated();
+
 protected:
   QListWidget* myListControl; ///< List control
 
index 8dd40756b4624142c35352026fe920dd84d87919..44b11938f331a0a4a3e4d4cf2bbab89c1ae8cc94 100755 (executable)
@@ -155,6 +155,7 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen
   myListView = new ModuleBase_ListView(this, anObjName, aToolTip);
   connect(myListView->getControl(), SIGNAL(itemSelectionChanged()), SLOT(onListSelection()));
   connect(myListView, SIGNAL(deleteActionClicked()), SLOT(onDeleteItem()));
+  connect(myListView, SIGNAL(listActivated()), SLOT(onListActivated()));
 
   aMainLay->addWidget(myListView->getControl(), 2, 0, 1, -1);
   aMainLay->setRowStretch(2, 1);
@@ -1019,3 +1020,9 @@ void ModuleBase_WidgetMultiSelector::onFeatureAccepted()
 {
   defaultValues[myFeatureId + attributeID()] = myDefMode;
 }
+
+void ModuleBase_WidgetMultiSelector::onListActivated()
+{
+  //focusTo();
+  emitFocusInWidget();
+}
\ No newline at end of file
index 221ba0e6b36f782818276f7af2c03b34ff4e2a15..1a40c13039cbd13a795a93da7441f84a470dd3db 100755 (executable)
@@ -130,6 +130,8 @@ protected slots:
   /// Slot is called on selection of list of selected items
   void onListSelection();
 
+  void onListActivated();
+
 protected:
   /// Returns true if the event is processed. The default implementation is empty, returns false.
   virtual bool processDelete();
index 0ea8af4c0ff6df79df8ed9ca836e4eb447cb5ea4..3ce0ed1713e41f3b2a26160b78c0b9e764042641 100755 (executable)
@@ -402,8 +402,8 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
 #endif
   ModuleBase_ModelWidget* aFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
                                                                          aFocusWidget);
-  if (aFocusMWidget)
-    aFocusMWidget->setHighlighted(false);
+  //if (aFocusMWidget)
+  //  aFocusMWidget->setHighlighted(false);
 
   QWidget* aNewFocusWidget = 0;
   if (aFocusWidget) {
@@ -459,9 +459,13 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
 
     ModuleBase_ModelWidget* aNewFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
                                                                               aNewFocusWidget);
-    if (aNewFocusMWidget)
+    if (aNewFocusMWidget) {
+      if (aFocusMWidget) {
+        aFocusMWidget->setHighlighted(false);
+      }
       aNewFocusMWidget->emitFocusInWidget();
-    isChangedFocus = true;
+      isChangedFocus = true;
+    }
   }
   return isChangedFocus;
 }