mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 17:30:35 +05:00
CCAR: remove geom_pluginsmanager.py now uses salome_pluginsmanager.py
This commit is contained in:
parent
1e62059b15
commit
f078b7f5de
@ -1101,12 +1101,12 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
|
|||||||
|
|
||||||
// import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
|
// import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
|
||||||
PyGILState_STATE gstate = PyGILState_Ensure();
|
PyGILState_STATE gstate = PyGILState_Ensure();
|
||||||
PyObject* pluginsmanager=PyImport_ImportModule((char*)"geom_pluginsmanager");
|
PyObject* pluginsmanager=PyImport_ImportModule((char*)"salome_pluginsmanager");
|
||||||
if(pluginsmanager==NULL)
|
if(pluginsmanager==NULL)
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"");
|
PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom","New Entity","Other");
|
||||||
if(result==NULL)
|
if(result==NULL)
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
Py_XDECREF(result);
|
Py_XDECREF(result);
|
||||||
|
@ -29,8 +29,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am
|
|||||||
# Libraries targets
|
# Libraries targets
|
||||||
lib_LTLIBRARIES = libGEOM.la
|
lib_LTLIBRARIES = libGEOM.la
|
||||||
|
|
||||||
salomepython_PYTHON = geom_pluginsmanager.py
|
|
||||||
|
|
||||||
# header files
|
# header files
|
||||||
salomeinclude_HEADERS = \
|
salomeinclude_HEADERS = \
|
||||||
GeometryGUI.h \
|
GeometryGUI.h \
|
||||||
|
@ -1,171 +0,0 @@
|
|||||||
"""
|
|
||||||
This module is imported from C++ (GeometryGUI.cxx)
|
|
||||||
and initialized (call to initialize function)
|
|
||||||
|
|
||||||
A plugins manager is created at import (singleton object).
|
|
||||||
|
|
||||||
The plugins manager creates a submenu Plugins in the "New Entity" menu.
|
|
||||||
|
|
||||||
The plugins manager searches all files named geom_plugins.py in special directories and executes them.
|
|
||||||
|
|
||||||
The directories are :
|
|
||||||
- $HOME/.salome/Plugins
|
|
||||||
- $HOME/$APPLI/Plugins
|
|
||||||
- the directory where this file is installed
|
|
||||||
- a list of directories given by SALOME_PLUGINS_PATH environment variable (paths separated by ":")
|
|
||||||
|
|
||||||
These files should contain python code that register functions into the plugins manager.
|
|
||||||
|
|
||||||
geom_plugins.py example::
|
|
||||||
|
|
||||||
import geom_pluginsmanager
|
|
||||||
|
|
||||||
def about(context):
|
|
||||||
from PyQt4.QtGui import QMessageBox
|
|
||||||
QMessageBox.about(None, "About GEOM pluginmanager", "GEOM plugins manager in GEOM module ")
|
|
||||||
|
|
||||||
geom_pluginsmanager.AddFunction('AboutGEOM','About GEOM plugins manager',about)
|
|
||||||
|
|
||||||
First import the python module geom_pluginsmanager
|
|
||||||
Second write a function with one argument context (it's an object with 3 attributes)
|
|
||||||
Third register the function with a call to AddFunction (entry in menu plugins, tooltip, function)
|
|
||||||
|
|
||||||
context attributes:
|
|
||||||
- sg : the SALOME Swig interface
|
|
||||||
- studyId : the SALOME studyId that must be used to execute the plugin
|
|
||||||
- study : the SALOME study object that must be used to execute the plugin
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os,sys,traceback
|
|
||||||
from PyQt4 import QtGui
|
|
||||||
from PyQt4 import QtCore
|
|
||||||
|
|
||||||
import salome
|
|
||||||
|
|
||||||
SEP=":"
|
|
||||||
if sys.platform == "win32":
|
|
||||||
SEP = ";"
|
|
||||||
|
|
||||||
# Get SALOME PyQt interface
|
|
||||||
import SalomePyQt
|
|
||||||
sgPyQt = SalomePyQt.SalomePyQt()
|
|
||||||
|
|
||||||
# Get SALOME Swig interface
|
|
||||||
import libSALOME_Swig
|
|
||||||
sg = libSALOME_Swig.SALOMEGUI_Swig()
|
|
||||||
|
|
||||||
def initialize():
|
|
||||||
plugins.activate()
|
|
||||||
|
|
||||||
class Context:
|
|
||||||
def __init__(self,sg):
|
|
||||||
self.sg=sg
|
|
||||||
self.studyId=salome.sg.getActiveStudyId()
|
|
||||||
self.study= salome.myStudyManager.GetStudyByID(self.studyId)
|
|
||||||
|
|
||||||
class Plugins:
|
|
||||||
def __init__(self):
|
|
||||||
self.registry={}
|
|
||||||
self.handlers={}
|
|
||||||
self.lasttime=0
|
|
||||||
self.plugindirs=[]
|
|
||||||
self.plugins_files=[]
|
|
||||||
|
|
||||||
# USER plugins directory
|
|
||||||
user_dir = os.path.expanduser("~/.salome/Plugins")
|
|
||||||
self.plugindirs.append(user_dir)
|
|
||||||
|
|
||||||
# APPLI plugins directory
|
|
||||||
appli=os.getenv("APPLI")
|
|
||||||
if appli:
|
|
||||||
appli_dir=os.path.join(os.path.expanduser("~"),appli,"Plugins")
|
|
||||||
self.plugindirs.append(appli_dir)
|
|
||||||
|
|
||||||
#SALOME_PLUGINS_PATH environment variable (list of directories separated by ":")
|
|
||||||
pluginspath=os.getenv("SALOME_PLUGINS_PATH")
|
|
||||||
if pluginspath:
|
|
||||||
for directory in pluginspath.split(SEP):
|
|
||||||
self.plugindirs.append(directory)
|
|
||||||
|
|
||||||
#Add also the directory GEOMGUI
|
|
||||||
self.plugindirs.append(os.path.dirname(__file__))
|
|
||||||
|
|
||||||
a=QtGui.QAction("Plugins",sgPyQt.getPopupMenu("New Entity"))
|
|
||||||
self.menu=QtGui.QMenu("Plugins",sgPyQt.getPopupMenu("New Entity"))
|
|
||||||
a.setMenu(self.menu)
|
|
||||||
mid=sgPyQt.createMenu(a,"New Entity")
|
|
||||||
self.menu.connect(self.menu,QtCore.SIGNAL("aboutToShow()"),self.importPlugins)
|
|
||||||
|
|
||||||
def AddFunction(self,name,description,script,script_type=None):
|
|
||||||
""" Add a plugin function
|
|
||||||
"""
|
|
||||||
self.registry[name]=script,description,script_type
|
|
||||||
|
|
||||||
def handler(obj=self,script=script):
|
|
||||||
try:
|
|
||||||
script(Context(sgPyQt))
|
|
||||||
except:
|
|
||||||
s=traceback.format_exc()
|
|
||||||
QtGui.QMessageBox.warning(None,"Exception occured",s)
|
|
||||||
|
|
||||||
self.handlers[name]=handler
|
|
||||||
|
|
||||||
def importPlugins(self):
|
|
||||||
"""Import the geom_plugins module that contains plugins definition """
|
|
||||||
if self.lasttime ==0:
|
|
||||||
studyId=sg.getActiveStudyId()
|
|
||||||
salome.salome_init(embedded=1)
|
|
||||||
|
|
||||||
lasttime=0
|
|
||||||
|
|
||||||
plugins_files=[]
|
|
||||||
for directory in self.plugindirs:
|
|
||||||
plugins_file = os.path.join(directory,"geom_plugins.py")
|
|
||||||
if os.path.isfile(plugins_file):
|
|
||||||
plugins_files.append((directory,plugins_file))
|
|
||||||
lasttime=max(lasttime,os.path.getmtime(plugins_file))
|
|
||||||
|
|
||||||
plugins_files.sort()
|
|
||||||
|
|
||||||
if not plugins_files:
|
|
||||||
self.registry.clear()
|
|
||||||
self.handlers.clear()
|
|
||||||
self.lasttime=0
|
|
||||||
self.menu.clear()
|
|
||||||
return
|
|
||||||
|
|
||||||
if self.plugins_files != plugins_files or lasttime > self.lasttime:
|
|
||||||
self.registry.clear()
|
|
||||||
self.handlers.clear()
|
|
||||||
self.lasttime=lasttime
|
|
||||||
for directory,salome_plugins_file in plugins_files:
|
|
||||||
if directory not in sys.path:
|
|
||||||
sys.path.insert(0,directory)
|
|
||||||
try:
|
|
||||||
execfile(salome_plugins_file,globals(),{})
|
|
||||||
except:
|
|
||||||
print "Error while loading plugins from file:",salome_plugins_file
|
|
||||||
traceback.print_exc()
|
|
||||||
|
|
||||||
self.updateMenu()
|
|
||||||
|
|
||||||
def updateMenu(self):
|
|
||||||
"""Update the Plugins menu"""
|
|
||||||
self.menu.clear()
|
|
||||||
for name,handler in self.handlers.items():
|
|
||||||
act=self.menu.addAction(name,handler)
|
|
||||||
|
|
||||||
def activate(self):
|
|
||||||
"""Add the Plugins menu to the specified menu"""
|
|
||||||
|
|
||||||
def deactivate(self):
|
|
||||||
"""Remove the Plugins menu from Tools menu (not implemented)"""
|
|
||||||
|
|
||||||
plugins=Plugins()
|
|
||||||
|
|
||||||
def AddFunction(name,description,script,script_type=None):
|
|
||||||
""" Add a plugin function
|
|
||||||
Called by a user to register a function (script)
|
|
||||||
"""
|
|
||||||
return plugins.AddFunction(name,description,script,script_type)
|
|
@ -35,8 +35,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am
|
|||||||
# ===============================================================
|
# ===============================================================
|
||||||
#
|
#
|
||||||
|
|
||||||
salomepython_PYTHON=geom_plugins.py
|
|
||||||
|
|
||||||
# Scripts to be installed.
|
# Scripts to be installed.
|
||||||
dist_salomescript_DATA = \
|
dist_salomescript_DATA = \
|
||||||
geompy.py \
|
geompy.py \
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
import geom_pluginsmanager
|
|
||||||
|
|
||||||
def about(context):
|
|
||||||
from PyQt4.QtGui import QMessageBox
|
|
||||||
QMessageBox.about(None, "About GEOM pluginmanager", """GEOM plugins manager in GEOM module """)
|
|
||||||
|
|
||||||
geom_pluginsmanager.AddFunction('AboutGEOM','About GEOM plugins manager',about)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user