Salome HOME
Base class for all smesh operations
authorsln <sln@opencascade.com>
Tue, 23 Aug 2005 08:54:21 +0000 (08:54 +0000)
committersln <sln@opencascade.com>
Tue, 23 Aug 2005 08:54:21 +0000 (08:54 +0000)
src/SMESHGUI/SMESHGUI_Operation.cxx [new file with mode: 0755]
src/SMESHGUI/SMESHGUI_Operation.h [new file with mode: 0755]

diff --git a/src/SMESHGUI/SMESHGUI_Operation.cxx b/src/SMESHGUI/SMESHGUI_Operation.cxx
new file mode 100755 (executable)
index 0000000..c26f5f6
--- /dev/null
@@ -0,0 +1,226 @@
+//  SALOME SMESHGUI
+//
+//  Copyright (C) 2005  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : SMESHGUI_Operation.h
+//  Author : Sergey LITONIN
+//  Module : SALOME
+
+#include "SMESHGUI_Operation.h"
+#include <SMESHGUI.h>
+#include <SMESHGUI_Dialog.h>
+
+#include <SalomeApp_Study.h>
+
+#include <SUIT_MessageBox.h>
+#include <SUIT_Desktop.h>
+
+#include <qstringlist.h>
+
+/*
+  Class       : SMESHGUI_Operation
+  Description : Base class for all SMESH operations
+*/
+
+//=======================================================================
+// name    : SMESHGUI_Operation
+// Purpose : Constructor
+//=======================================================================
+SMESHGUI_Operation::SMESHGUI_Operation()
+: SalomeApp_Operation()
+{
+}
+
+//=======================================================================
+// name    : ~SMESHGUI_Operation
+// Purpose : Destructor
+//=======================================================================
+SMESHGUI_Operation::~SMESHGUI_Operation()
+{
+}
+
+//=======================================================================
+// name    : getSMESHGUI
+// Purpose : Get SMESH module
+//=======================================================================
+SMESHGUI* SMESHGUI_Operation::getSMESHGUI() const
+{
+  return dynamic_cast<SMESHGUI*>( module() );
+}
+
+//=======================================================================
+// name    : startOperation
+// Purpose : Start opeartion
+//=======================================================================
+void SMESHGUI_Operation::startOperation()
+{
+  if( dlg() )
+  {
+    disconnect( dlg(), SIGNAL( dlgOk() ), this, SLOT( onOk() ) );
+    disconnect( dlg(), SIGNAL( dlgApply() ), this, SLOT( onApply() ) );
+    disconnect( dlg(), SIGNAL( dlgCancel() ), this, SLOT( onCancel() ) );
+    disconnect( dlg(), SIGNAL( dlgClose() ), this, SLOT( onCancel() ) );
+    
+    if( dlg()->testButtonFlags( QtxDialog::OK ) )
+      connect( dlg(), SIGNAL( dlgOk() ), this, SLOT( onOk() ) );
+      
+    if( dlg()->testButtonFlags( QtxDialog::Apply ) )
+      connect( dlg(), SIGNAL( dlgApply() ), this, SLOT( onApply() ) );
+      
+    if( dlg()->testButtonFlags( QtxDialog::Cancel ) )
+      connect( dlg(), SIGNAL( dlgCancel() ), this, SLOT( onCancel() ) );
+      
+    //if( dlg()->testButtonFlags( QtxDialog::Close ) )
+    //if dialog hasn't close, cancel, no and etc buttons, dlgClose will be emitted when dialog is closed not by OK
+    connect( dlg(), SIGNAL( dlgClose() ), this, SLOT( onCancel() ) );
+
+    initDialog();
+  }
+
+  SalomeApp_Operation::startOperation();
+}
+
+//=======================================================================
+// name    : isReadyToStart
+// Purpose : Verify whether operation is ready to start
+//=======================================================================
+bool SMESHGUI_Operation::isReadyToStart() const
+{
+  if ( !SalomeApp_Operation::isReadyToStart() )
+    return false;
+  else if ( getSMESHGUI() == 0 )
+  {
+    SUIT_MessageBox::warn1( desktop(), tr( "SMESH_WRN_WARNING" ),
+      tr( "NO_MODULE" ), tr( "SMESH_BUT_OK" ) );
+    return false;
+  }
+  else if ( isStudyLocked() )
+    return false;
+  
+  return true;
+}
+
+//=======================================================================
+// name    : setDialogActive
+// Purpose : 
+//=======================================================================
+void SMESHGUI_Operation::setDialogActive( const bool active )
+{
+  SalomeApp_Operation::setDialogActive( active );
+
+  SMESHGUI_Dialog* d = dynamic_cast<SMESHGUI_Dialog*>( dlg() );
+  if( d )
+    d->setContentActive( active );
+
+}
+
+//=======================================================================
+// name    : studyDS
+// Purpose :
+//=======================================================================
+_PTR(Study) SMESHGUI_Operation::studyDS() const
+{
+  SalomeApp_Study* s = dynamic_cast<SalomeApp_Study*>( study() );
+  return s->studyDS();
+}
+
+//=======================================================================
+// name    : onOk
+// Purpose :
+//=======================================================================
+void SMESHGUI_Operation::onOk()
+{
+  if( onApply() )
+    commit();
+  else
+    abort();
+}
+
+//=======================================================================
+// name    : onApply
+// Purpose :
+//=======================================================================
+bool SMESHGUI_Operation::onApply()
+{
+  return false;
+}
+
+//=======================================================================
+// name    : onClose
+// Purpose :
+//=======================================================================
+void SMESHGUI_Operation::onCancel()
+{
+  abort();
+}
+
+//=======================================================================
+// name    : initDialog
+// Purpose :
+//=======================================================================
+void SMESHGUI_Operation::initDialog()
+{
+}
+
+/*!
+ * \brief Verifies whether study of operation is locked
+  * \param theMess - specifies whether message box must be shown if study is locked
+  * \return State of study.
+*
+* Verifies whether study of operation is locked. If second parameter is TRUE and study
+* is locked when corresponding message box appears
+*/
+bool SMESHGUI_Operation::isStudyLocked( const bool theMess ) const
+{
+  if ( studyDS() )
+  {
+    if ( studyDS()->GetProperties()->IsLocked() )
+    {
+      if ( theMess )
+        SUIT_MessageBox::warn1 ( SMESHGUI::desktop(), QObject::tr( "WRN_WARNING" ),
+          QObject::tr( "WRN_STUDY_LOCKED" ), QObject::tr( "BUT_OK" ) );
+      return true;
+    }
+  }
+  
+  return false;
+}
+
+/*!
+ * \brief Verifies whether given operator is valid for this one
+  * \param theOtherOp - other operation
+  * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise
+*
+* Virtual method redefined from base class verifies whether given operator is valid for
+* this one (i.e. can be started "above" this operator). In current implementation method
+* retuns false if theOtherOp operation is not intended for deleting objects or mesh
+* elements.
+*/
+bool SMESHGUI_Operation::isValid( SUIT_Operation* theOtherOp ) const
+{
+  static QStringList anOps;
+  if ( anOps.count() == 0 )
+  {
+    anOps.append( "SMESHGUI_DeleteOp" );
+    // to do add other operations here
+  }
+
+  return theOtherOp && theOtherOp->inherits( "SMESHGUI_Operation" ) &&
+         ( !anOps.contains( theOtherOp->className() ) || anOps.contains( className() ) );
+
+  return true;
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SMESHGUI/SMESHGUI_Operation.h b/src/SMESHGUI/SMESHGUI_Operation.h
new file mode 100755 (executable)
index 0000000..3bc76d4
--- /dev/null
@@ -0,0 +1,62 @@
+//  SALOME SMESHGUI
+//
+//  Copyright (C) 2005  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : SMESHGUI_Operation.h
+//  Author : Sergey LITONIN
+//  Module : SALOME
+
+
+#ifndef SMESHGUI_Operation_H
+#define SMESHGUI_Operation_H
+
+#include <SalomeApp_Operation.h>
+#include <SALOMEDSClient.hxx>
+
+class SMESHGUI;
+
+/*
+  Class       : SMESHGUI_Operation
+  Description : Base class for all SMESH operations
+*/
+
+class SMESHGUI_Operation : public SalomeApp_Operation
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_Operation();
+  virtual ~SMESHGUI_Operation();
+
+protected:
+  //! sets the dialog widgets to state just after operation start
+  virtual void      initDialog();
+
+  virtual void      startOperation();
+  virtual bool      isReadyToStart() const;
+  
+  //! Set according dialog active or inactive
+  virtual void      setDialogActive( const bool );
+
+  SMESHGUI*         getSMESHGUI() const;
+  bool              isStudyLocked( const bool = true ) const;
+
+  _PTR(Study)       studyDS() const;
+  
+  virtual bool      isValid( SUIT_Operation* ) const;
+
+protected slots:
+  virtual void onOk();
+  virtual bool onApply();
+  virtual void onCancel();
+};
+
+#endif
+
+
+
+
+
+