--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2015 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+QT_SALOME_VERSION=@QT_SALOME_VERSION@
+
+try:
+ from PyQt@QT_SALOME_VERSION@.Qt import *
+except:
+ pass
+
+__CONNECT__ = 0
+__DISCONNECT__ = 1
+
+def Connect(*args):
+ """
+ Connects signal of sender to slot of reciever or function.
+
+ Examples:
+
+ 1. Connect(sender, signal, reciever, slot)
+ - sender: sender of the signal
+ - signal: string value in the form 'signal_name(type1,type2,...)'
+ - reciever: reciever of the signal
+ - slot: string value in the form 'slot_name(type1,type2,...)'
+
+ 2. Connect(sender, signal, function)
+ - sender: sender of the signal
+ - signal: string value in the form 'signal_name(type1,type2,...)'
+ - function: function instance
+ """
+ if len(args) == 4:
+ _process(args[0], args[1], args[2], args[3], __CONNECT__)
+ elif len(args) == 3:
+ _process(args[0], args[1], None, args[2], __CONNECT__)
+ else:
+ RuntimeError("Bad number of arguments, expected 3 or 4 !!!")
+
+def Disconnect(*args):
+ """
+ Disconnects signal of sender to slot of reciever or function.
+
+ Examples:
+
+ 1. Disconnect(sender, signal, reciever, slot)
+ - sender: sender of the signal
+ - signal: string value in the form 'signal_name(type1,type2,...)'
+ - reciever: reciever of the signal
+ - slot: string value in the form 'slot_name(type1,type2,...)'
+
+ 2. Disconnect(sender, signal, function)
+ - sender: sender of the signal
+ - signal: string value in the form 'signal_name(type1,type2,...)'
+ - function: function instance
+ """
+ if len(args) == 4:
+ _process(args[0], args[1], args[2], args[3], __DISCONNECT__)
+ elif len(args) == 3:
+ _process(args[0], args[1], None, args[2], __DISCONNECT__)
+ else:
+ RuntimeError("Bad number of arguments, expected 3 or 4 !!!")
+
+def _process(sender,signal,reciever,slot,operation):
+ isFunc = False
+ slotname = ""
+ if isinstance(slot, str):
+ n = slot.find("(")
+ if n > 0:
+ slotname = slot[:n]
+
+ if callable(slot):
+ isFunc = True
+
+ if QT_SALOME_VERSION == 4:
+ _call = None
+ if operation == __CONNECT__:
+ _call = QObject.connect
+ elif operation == __DISCONNECT__:
+ _call = QObject.disconnect
+ if isFunc:
+ _call(sender,SIGNAL(signal),slot)
+ else:
+ _call(sender,SIGNAL(signal),reciever,SLOT(slot))
+ else:
+ signame = ""
+ n = signal.find("(")
+ if n > 0:
+ signame = signal[:n]
+
+ tmp = signal[(n+1):]
+ m = tmp.rfind(")")
+ types = tmp[:m]
+
+ if len(signame) > 0 and (len(slotname) > 0 or isFunc):
+ arg1 = ""
+ arg2 = ""
+ op = ""
+ rcv = ""
+ if len(types.strip()) > 0:
+ arg1 = "[" + types + "]"
+ if operation == __DISCONNECT__:
+ op = "dis"
+ if reciever is not None and not isFunc:
+ rcv= "reciever."
+ if isFunc:
+ arg2 = "slot"
+ else:
+ arg2 = slotname
+
+ command = "sender." + signame + arg1 + "." + op + "connect(" + rcv + arg2 + ")"
+ exec(command)
+ else:
+ raise RuntimeError("Bad signal '%s' or slot '%s' format !!!"%(signal, slot))