Salome HOME
Copyright update 2022
[modules/gui.git] / src / SalomeApp / pluginsdemo / salome_plugins.py
old mode 100755 (executable)
new mode 100644 (file)
index eaeb93c..3f47bd2
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2010-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2010-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -28,11 +28,11 @@ if DEMO_IS_ACTIVATED:
   try:
     import GEOM
     from salome.geom import geomBuilder
-    geompy = geomBuilder.New(salome.myStudy)
+    geompy = geomBuilder.New()
     
     import SMESH, SALOMEDS
     from salome.smesh import smeshBuilder
-    smesh =  smeshBuilder.New(salome.myStudy)
+    smesh =  smeshBuilder.New()
   except:
     DEMO_IS_ACTIVATED = False
 
@@ -48,8 +48,7 @@ if DEMO_IS_ACTIVATED:
       from salome.geom import geomBuilder
 
       # Intialize the geompy factory with the active study
-      activeStudy = context.study
-      geompy = geomBuilder.New(activeStudy)
+      geompy = geomBuilder.New()
 
       # Create the objects
       Vx = geompy.MakeVectorDXDYDZ(10, 0, 0)
@@ -76,8 +75,7 @@ if DEMO_IS_ACTIVATED:
       from salome.geom import geomBuilder
 
       # Intialize the geompy factory with the active study
-      activeStudy = context.study
-      geompy = geomBuilder.New(activeStudy)
+      geompy = geomBuilder.New()
 
       # Create the objects
       Vx = geompy.MakeVectorDXDYDZ(10, 0, 0)
@@ -122,7 +120,6 @@ if DEMO_IS_ACTIVATED:
 
   def tube_shapewithgui(context):
       global tubebuilder, xalome, dialog
-      activeStudy = context.study
 
       # Get the parameter values from a gui dialog box. If the dialog is
       # closed using the Ok button, then the data are requested from the
@@ -130,8 +127,8 @@ if DEMO_IS_ACTIVATED:
       dialog.exec_()
       if dialog.wasOk():
           radius, length, width = dialog.getData()
-          shape = tubebuilder.createGeometry(activeStudy, radius, length, width)
-          entry = xalome.addToStudy(activeStudy, shape, "Tube" )
+          shape = tubebuilder.createGeometry(radius, length, width)
+          entry = xalome.addToStudy(shape, "Tube" )
           xalome.displayShape(entry)
 
 
@@ -147,7 +144,6 @@ if DEMO_IS_ACTIVATED:
   #
   def tube_meshwithgui(context):
       global tube, dialog
-      activeStudy = context.study
 
       # Get the parameter values from a gui dialog box. If the dialog is
       # closed using the Ok button, then the data are requested from the
@@ -155,7 +151,7 @@ if DEMO_IS_ACTIVATED:
       dialog.exec_()
       if dialog.wasOk():
           radius, length, width = dialog.getData()
-          mesh = tubebuilder.createModel(activeStudy, radius, length, width)
+          mesh = tubebuilder.createModel(radius, length, width)
 
 
   salome_pluginsmanager.AddFunction('DEMO/Tube mesh from parameters',
@@ -179,7 +175,6 @@ if DEMO_IS_ACTIVATED:
   dialogWithApply.setData(tubebuilder.DEFAULT_RADIUS,
                           tubebuilder.DEFAULT_LENGTH,
                           tubebuilder.DEFAULT_WIDTH)
-  activeStudy = None
   previewShapeEntry = None
 
   DEFAULT_FOLDER_NAME="TubeList"
@@ -189,7 +184,7 @@ if DEMO_IS_ACTIVATED:
   def acceptCallback():
       """Action to be done when click on Ok"""
       global tubebuilder, xalome
-      global dialogWithApply, activeStudy
+      global dialogWithApply
       global previewShapeEntry, deletePreviewShape
       global DEFAULT_FOLDER_NAME,DEFAULT_SHAPE_NAME
 
@@ -199,8 +194,8 @@ if DEMO_IS_ACTIVATED:
           deletePreviewShape()
 
       radius, length, width = dialogWithApply.getData()
-      shape = tubebuilder.createGeometry(activeStudy, radius, length, width)
-      entry = xalome.addToStudy(activeStudy, shape, DEFAULT_SHAPE_NAME, DEFAULT_FOLDER_NAME)
+      shape = tubebuilder.createGeometry(radius, length, width)
+      entry = xalome.addToStudy(shape, DEFAULT_SHAPE_NAME, DEFAULT_FOLDER_NAME)
       xalome.displayShape(entry)
 
   def rejectCallback():
@@ -218,7 +213,7 @@ if DEMO_IS_ACTIVATED:
   def applyCallback():
       """Action to be done when click on Apply"""
       global tubebuilder, xalome
-      global dialogWithApply, activeStudy
+      global dialogWithApply
       global previewShapeEntry, deletePreviewShape
       global PREVIEW_COLOR, DEFAULT_SHAPE_NAME, DEFAULT_FOLDER_NAME, PREVIEW_SHAPE_NAME
 
@@ -228,16 +223,16 @@ if DEMO_IS_ACTIVATED:
 
       # Then we can create the new shape with the new parameter values
       radius, length, width = dialogWithApply.getData()
-      shape = tubebuilder.createGeometry(activeStudy, radius, length, width)
+      shape = tubebuilder.createGeometry(radius, length, width)
       # We apply a specific color on the shape for the preview state
       shape.SetColor(PREVIEW_COLOR)
-      previewShapeEntry = xalome.addToStudy(activeStudy, shape, PREVIEW_SHAPE_NAME, DEFAULT_FOLDER_NAME )
+      previewShapeEntry = xalome.addToStudy(shape, PREVIEW_SHAPE_NAME, DEFAULT_FOLDER_NAME )
       xalome.displayShape(previewShapeEntry)
 
   def deletePreviewShape():
       """This delete the shape currently being displayed as a preview"""
-      global activeStudy, previewShapeEntry, xsalome
-      xalome.deleteShape(activeStudy,previewShapeEntry)
+      global previewShapeEntry, xsalome
+      xalome.deleteShape(previewShapeEntry)
       previewShapeEntry = None
 
   # Connection of callback functions to the dialog butoon click signals
@@ -251,8 +246,7 @@ if DEMO_IS_ACTIVATED:
       required callback functions to be associated to the button
       signals.
       """
-      global dialogWithApply, activeStudy
-      activeStudy = context.study
+      global dialogWithApply
       dialogWithApply.open()
 
 
@@ -267,25 +261,59 @@ if DEMO_IS_ACTIVATED:
 def runSalomeShellSession(context):
     import os,subprocess
     import salome_version
+    import platform
+    from PyQt5.Qt import QMessageBox
+    from SalomePyQt import SalomePyQt
+
     version = salome_version.getVersion(full=True)
-    kernel_appli_dir = os.environ['KERNEL_ROOT_DIR']
-    command = ""
-    if os.path.exists("/usr/bin/gnome-terminal"):
-      command = 'gnome-terminal -t "SALOME %s - Shell session" -e "%s/salome shell" &'%(version,kernel_appli_dir)
-    elif os.path.exists("/usr/bin/konsole"):
-      command = 'PATH="/usr/bin:/sbin:/bin" LD_LIBRARY_PATH="" konsole -e "%s/salome shell" &'%(kernel_appli_dir)
-    elif os.path.exists("/usr/bin/xterm"):
-      command = 'xterm -T "SALOME %s - Shell session" -e "%s/salome shell" &'%(version,kernel_appli_dir)
-    else:
-      print("Neither xterm nor gnome-terminal nor konsole is installed.")
-
-    if command is not "":
+    runner = 'run_salome.exe' if platform.system() == 'Windows' else 'salome'
+
+    command = ''
+    for env_var in ('PRODUCT_ROOT_DIR', 'SALOME_ROOT_DIR', 'KERNEL_ROOT_DIR'):
+      script_dir = os.getenv(env_var)
+      if script_dir and os.path.isfile(os.path.join(script_dir, runner)):
+        command = os.path.join(script_dir, runner)
+        break
+
+    if command:
+      if platform.system() == 'Windows':
+        command = 'call "%s" shell' % command
+      else:
+        if os.path.exists("/usr/bin/xterm"):
+          command = 'xterm -T "SALOME %s - Shell session" -e "%s" shell &' % (version, command)
+        else:
+          QMessageBox.critical(SalomePyQt.getDesktop(), "Error", "xterm does not seem to be installed")
+          return
+
       try:
         subprocess.check_call(command, shell = True)
       except Exception as e:
-        print("Error: ",e)
-
+        print("Error: ", e)
 
 salome_pluginsmanager.AddFunction('SALOME shell session',
                                   'Execute a SALOME shell session in an external xterm',
                                   runSalomeShellSession)
+
+# -------------------------------------------------------------------------
+# Example 4: run CODE
+def runCodeEditor(context):
+    import os,subprocess
+    import salome_version
+    import shutil
+    from PyQt5.Qt import QMessageBox
+    from SalomePyQt import SalomePyQt
+    try:
+      command = shutil.which('code')
+      if command:
+        try:
+          subprocess.check_call(command, shell = True)
+        except Exception as e:
+          print("Error: ",e)
+      else:
+        QMessageBox.critical(SalomePyQt.getDesktop(), "Error", "Visual Studio Code executable is not found")
+    except Exception as e:
+      print("Error: ",e)
+
+salome_pluginsmanager.AddFunction('Launch VS Code (debugger)',
+                                  'Execute Visual Studio Code',
+                                  runCodeEditor)