# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
current_plugins_manager=None
def initialize(module,name,basemenuname,menuname):
- if not plugins.has_key(name):
+ if name not in plugins:
if module:
plugins[name]={}
else:
plugins[name]=[]
if module:
d=sgPyQt.getDesktop()
- if plugins[name].has_key(d):return
+ if d in plugins[name]:return
plugins[name][d]=PluginsManager(module,name,basemenuname,menuname)
else:
plugins[name].append(PluginsManager(module,name,basemenuname,menuname))
class PluginsManager:
def __init__(self,module,name,basemenuname,menuname):
self.name=name
- self.basemenuname=unicode(basemenuname, "utf-8")
- self.menuname=unicode(menuname, "utf-8")
+ self.basemenuname=basemenuname
+ self.menuname=menuname
self.module=module
self.registry={}
self.handlers={}
self.lasttime=0
self.plugindirs=[]
self.plugins_files=[]
+ self.toolbar = None
# MODULES plugins directory.
# The SALOME modules may provides natively some plugins. These
# MODULES plugins are supposed to be located in the
# installation folder of the module, in the subdirectory
# "share/salome/plugins". We first look for these directories.
+ searched = []
for key in os.environ.keys():
if key.endswith("_ROOT_DIR"):
rootpath=os.environ[key]
dirpath=os.path.join(rootpath,PLUGIN_PATH_PATTERN)
- if os.path.isdir(dirpath) and dirpath not in self.plugindirs:
+ if os.path.isdir(dirpath) and dirpath not in self.plugindirs + searched:
logger.debug("Looking for plugins in the directory %s ..."%dirpath)
walktree(dirpath,self.analyseFile)
+ if dirpath not in self.plugindirs and dirpath not in searched:
+ searched.append(dirpath)
# USER plugins directory
user_dir = os.path.expanduser("~/.config/salome/Plugins")
else:
self.menu=QMenu(self.menuname,self.basemenu)
self.basemenu.addMenu(self.menu)
+ self.toolbar=sgPyQt.createTool(self.menuname)
self.menu.menuAction().setVisible(False)
self.basemenu.aboutToShow.connect(self.importPlugins)
+ self.importPlugins() # to create toolbar immediately
+
def analyseFile(self,filename):
"""
This function checks if the specified file is a plugins python
self.plugindirs.append(dirpath)
logger.debug("The directory %s has been added to plugin paths"%dirpath)
- def AddFunction(self,name,description,script):
+ def AddFunction(self,name,description,script,icon=None):
""" Add a plugin function
"""
- self.registry[name]=script,description
+ self.registry[name]=script,description,icon
self.entries.append(name)
def handler(obj=self,script=script):
def importPlugins(self):
"""Execute the salome_plugins file that contains plugins definition """
+ ior_fake_ns = None
+ prefix_ior = "--iorfakens="
+ presence_ior = [elt for elt in QApplication.arguments() if elt[:len(prefix_ior)]==prefix_ior]
+ if any(presence_ior):
+ ior_fake_ns = presence_ior[-1][len(prefix_ior):]
if self.lasttime ==0 or salome.myStudy == None:
- salome.salome_init(embedded=1)
+ salome.salome_init(embedded=True,iorfakensfile=ior_fake_ns)
lasttime=0
sys.path.insert(0,directory)
logger.debug("The directory %s has been added to PYTHONPATH"%directory)
try:
- execfile(plugins_file,globals(),{})
+ with open(plugins_file, 'rb') as fp:
+ exec(compile(fp.read(), plugins_file, 'exec'), globals(), {})
except:
- logger.fatal("Error while loading plugins from file %s"%plugins_file)
+ logger.critical("Error while loading plugins from file %s"%plugins_file)
traceback.print_exc()
self.updateMenu()
def updateMenu(self):
"""Update the Plugins menu"""
self.menu.clear()
+ sgPyQt.clearTool(self.menuname)
for entry in self.entries:
names=entry.split("/")
if len(names) < 1:continue
submenus[str(menu.title())]=menu
while len(names) > 1:
name=names.pop(0)
- if submenus.has_key(name):
+ if name in submenus:
amenu=submenus[name]
else:
amenu=QMenu(name,parentMenu)
name=names.pop(0)
act=parentMenu.addAction(name,self.handlers[entry])
act.setStatusTip(self.registry[entry][1])
+ icon = self.registry[entry][2] if len(self.registry[entry])>2 else None
+ if icon is not None and not icon.isNull() and icon.availableSizes():
+ act.setIcon(icon)
+ sgPyQt.createTool(act, self.toolbar)
self.menu.menuAction().setVisible(True)
-def AddFunction(name,description,script):
+def AddFunction(name,description,script,icon=None):
""" Add a plugin function
Called by a user to register a function (script)
"""
- return current_plugins_manager.AddFunction(name,description,script)
+ return current_plugins_manager.AddFunction(name,description,script,icon)
def entries():
""" Return the list of entries in menu: can be sorted or modified in place to customize menu content """