]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
PAL9807 - some dialogs in VISU must be non-modal
authorasl <asl@opencascade.com>
Thu, 6 Oct 2005 06:53:51 +0000 (06:53 +0000)
committerasl <asl@opencascade.com>
Thu, 6 Oct 2005 06:53:51 +0000 (06:53 +0000)
src/VISUGUI/Makefile.in
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI_DialogRunner.cxx [new file with mode: 0644]
src/VISUGUI/VisuGUI_DialogRunner.h [new file with mode: 0644]
src/VISUGUI/VisuGUI_Prs3dTools.h

index b0c97a00cce9f6b33e163cdd7e237de8b2ec8217..88fccafa0086921dcf294e830f112225c73853ac 100644 (file)
@@ -69,7 +69,8 @@ LIB_SRC =     VisuGUI.cxx \
                VisuGUI_CutLinesDlg.cxx \
                VisuGUI_CutPlanesDlg.cxx \
                VisuGUI_StreamLinesDlg.cxx \
-               VisuGUI_VectorsDlg.cxx
+               VisuGUI_VectorsDlg.cxx \
+               VisuGUI_DialogRunner.cxx
 
 LIB_MOC =      VisuGUI.h \
                VisuGUI_Selection.h \
@@ -90,7 +91,8 @@ LIB_MOC =     VisuGUI.h \
                VisuGUI_CutLinesDlg.h \
                VisuGUI_CutPlanesDlg.h \
                VisuGUI_StreamLinesDlg.h \
-               VisuGUI_VectorsDlg.h
+               VisuGUI_VectorsDlg.h \
+               VisuGUI_DialogRunner.h
 
 LIB_CLIENT_IDL = SALOME_Exception.idl \
                 VISU_Gen.idl \
index b33dcf47c4b83a0573d9072183ae17a6a7f2660c..4583e339e85223fd7c32234df80be12aa5c63b03 100644 (file)
@@ -583,7 +583,7 @@ void
 VisuGUI::
 OnCreatePlot3D()
 {
-  CreatePrs3d<VISU::Plot3D_i,VisuGUI_Plot3DDlg,1>(this);
+  CreatePrs3d<VISU::Plot3D_i,VisuGUI_Plot3DDlg,0>(this);
 }
 
 void
@@ -697,7 +697,7 @@ OnEditScalarMap()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::ScalarMap_i, VisuGUI_ScalarBarDlg,0>(this, aPrs3d);
+    EditPrs3d<VISU::ScalarMap_i, VisuGUI_ScalarBarDlg,1>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -711,7 +711,7 @@ OnEditDeformedShape()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::DeformedShape_i, VisuGUI_DeformedShapeDlg,0>(this, aPrs3d);
+    EditPrs3d<VISU::DeformedShape_i, VisuGUI_DeformedShapeDlg,1>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -725,7 +725,7 @@ OnEditCutPlanes()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::CutPlanes_i, VisuGUI_CutPlanesDlg,1>(this, aPrs3d);
+    EditPrs3d<VISU::CutPlanes_i, VisuGUI_CutPlanesDlg,0>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -739,7 +739,7 @@ OnEditCutLines()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::CutLines_i, VisuGUI_CutLinesDlg,1>(this, aPrs3d);
+    EditPrs3d<VISU::CutLines_i, VisuGUI_CutLinesDlg,0>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -753,7 +753,7 @@ OnEditIsoSurfaces()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg,0>(this, aPrs3d);
+    EditPrs3d<VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg,1>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -767,7 +767,7 @@ OnEditVectors()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::Vectors_i, VisuGUI_VectorsDlg,0>(this, aPrs3d);
+    EditPrs3d<VISU::Vectors_i, VisuGUI_VectorsDlg,1>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -781,7 +781,7 @@ OnEditStreamLines()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::StreamLines_i, VisuGUI_StreamLinesDlg,0>(this, aPrs3d);
+    EditPrs3d<VISU::StreamLines_i, VisuGUI_StreamLinesDlg,1>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
@@ -795,7 +795,7 @@ OnEditPlot3D()
 {
   Handle(SALOME_InteractiveObject) anIO;
   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
-    EditPrs3d<VISU::Plot3D_i, VisuGUI_Plot3DDlg,1>(this, aPrs3d);
+    EditPrs3d<VISU::Plot3D_i, VisuGUI_Plot3DDlg,0>(this, aPrs3d);
     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
       aViewWindow->highlight(anIO, 1);
     }
diff --git a/src/VISUGUI/VisuGUI_DialogRunner.cxx b/src/VISUGUI/VisuGUI_DialogRunner.cxx
new file mode 100644 (file)
index 0000000..f8e15e8
--- /dev/null
@@ -0,0 +1,66 @@
+// File:       VisuGUI_DialogRunner.cxx
+// Created:    Thu Oct  6 10:17:39 2005
+// Author:     Alexander SOLOVYOV
+//             <asl@multiplex.nnov.opencascade.com>
+
+#include "VisuGUI_DialogRunner.h"
+
+#include <qdialog.h>
+#include <qapplication.h>
+
+VisuGUI_DialogRunner::VisuGUI_DialogRunner( QDialog* dlg )
+: QObject(),
+  myDlg( dlg ),
+  myInLoop( false )
+{
+  if( myDlg )
+  {
+    connect( myDlg, SIGNAL( destroyed() ), this, SLOT( onDialogDelete() ) );
+    myDlg->installEventFilter( this );
+  }
+}
+
+VisuGUI_DialogRunner::~VisuGUI_DialogRunner()
+{
+}
+
+int VisuGUI_DialogRunner::run( const bool modal )
+{
+  if( myInLoop || !myDlg )
+    return -1;
+
+  qDebug( "start" );
+  if( modal )
+    return myDlg->exec();
+
+  myInLoop = true;
+  myDlg->show();
+  qDebug( "enter loop" );
+  qApp->enter_loop();
+  qDebug( "after loop" );
+  return myDlg->result();
+}
+
+void VisuGUI_DialogRunner::onDialogDelete()
+{
+  if( myInLoop )
+    qApp->exit_loop();
+
+  myDlg = 0;
+  myInLoop = false;
+}
+
+bool VisuGUI_DialogRunner::eventFilter( QObject* o, QEvent* e )
+{
+  if( o==myDlg && e && ( e->type()==QEvent::Close || e->type()==QEvent::Hide ) )
+  {
+    if( myInLoop && !myDlg->isMinimized() )
+    {
+      myInLoop = false;
+      qApp->exit_loop();
+    }
+    return false;
+  }
+  else
+    return QObject::eventFilter( o, e );
+}
diff --git a/src/VISUGUI/VisuGUI_DialogRunner.h b/src/VISUGUI/VisuGUI_DialogRunner.h
new file mode 100644 (file)
index 0000000..8fb16ec
--- /dev/null
@@ -0,0 +1,30 @@
+
+
+#ifndef DIALOG_RUNNER_HEADER
+#define DIALOG_RUNNER_HEADER
+
+#include <qobject.h>
+
+class QDialog;
+
+class VisuGUI_DialogRunner : public QObject
+{
+  Q_OBJECT
+
+public:
+  VisuGUI_DialogRunner( QDialog* );
+  virtual ~VisuGUI_DialogRunner();
+
+  int run( const bool );
+
+  virtual bool eventFilter( QObject*, QEvent* );
+
+private slots:
+  void onDialogDelete();
+
+private:
+  QDialog*   myDlg;
+  bool       myInLoop;
+};
+
+#endif
index 2e97024594d5a9b39ee6250adabc88464f33db02..c2fb731e4f868a6eb789375b6cc006cc4f75ff78 100644 (file)
 #define VisuGUI_Prs3dTools_HeaderFile
 
 #include "VisuGUI_Tools.h"
+#include "VisuGUI_DialogRunner.h"
 
 int runAndWait( QDialog* dlg, const bool modal )
 {
+  VisuGUI_DialogRunner r( dlg );
+  return r.run( modal );
+/*
   if( modal )
     return dlg->exec();
 
   dlg->show();
 
+  qDebug( "enter loop" );
   qApp->enter_loop();
+  qDebug( "end of loop" );
 
-  return dlg->result();
+  int res = dlg->result();
+  qDebug( QString( "Result : %1" ).arg( res ) );
+  return dlg->result();*/
 }
 
 namespace VISU