CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions
Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner Class Reference
Inheritance diagram for Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner:
Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner Vispa.Gui.WidgetContainer.WidgetContainer Vispa.Gui.ZoomableScrollableWidgetOwner.ZoomableScrollableWidgetOwner Vispa.Views.BoxDecayView.BoxDecayContainer Vispa.Views.LineDecayView.LineDecayContainer Vispa.Views.WidgetView.WidgetView Vispa.Views.BoxDecayView.BoxDecayView Vispa.Views.LineDecayView.LineDecayView Vispa.Plugins.ConfigEditor.ConfigEditorBoxView.ConfigEditorBoxView Vispa.Plugins.EdmBrowser.EdmBrowserBoxView.EdmBrowserBoxView Vispa.Plugins.ConfigEditor.ConfigEditorBoxView.ConnectionStructureView Vispa.Plugins.ConfigEditor.ConfigEditorBoxView.SequenceStructureView

Public Member Functions

def deleteSelectedConnections
 
def getWidgetByName
 
def hideMenuWidgets
 
def portConnection
 
def propagateEventUnderConnectionWidget
 
def updateConnections
 
- Public Member Functions inherited from Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner
def deselectAllWidgets
 
def enableMultiSelect
 
def initWidgetMovement
 
def keyPressEvent
 
def lastMovedWidgets
 
def mouseMoveEvent
 
def mousePressEvent
 
def mouseReleaseEvent
 
def multiSelectEnabled
 
def selectedWidgets
 
def widgetAboutToDelete
 
def widgetDoubleClicked
 
def widgetDragged
 
def widgetSelected
 

Detailed Description

Interface for classes containing ConnectableWidgets

Only makes sense if implementing class also inherits QWidget or class inheriting QWidget.

Definition at line 11 of file ConnectableWidgetOwner.py.

Member Function Documentation

def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.deleteSelectedConnections (   self)
def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.getWidgetByName (   self,
  name 
)
Returns module with given name or None if there is no such one.

Definition at line 17 of file ConnectableWidgetOwner.py.

References Vispa.Share.BasicDataAccessor.BasicDataAccessor.children(), Vispa.Plugins.EdmBrowser.EventContentDataAccessor.EventContentDataAccessor.children(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor.children(), Vispa.Plugins.ConfigEditor.ToolDataAccessor.ToolDataAccessor.children(), Folder.children(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor.children(), and Vispa.Views.LineDecayView.LineDecayContainer.children().

17 
18  def getWidgetByName(self, name):
19  """ Returns module with given name or None if there is no such one.
20  """
21  for widget in [child for child in self.children() if hasattr(child, 'title')]:
22  if widget.title() == name:
23  return widget
24  return None
def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.hideMenuWidgets (   self)

Definition at line 91 of file ConnectableWidgetOwner.py.

References Vispa.Share.BasicDataAccessor.BasicDataAccessor.children(), Vispa.Plugins.EdmBrowser.EventContentDataAccessor.EventContentDataAccessor.children(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor.children(), Vispa.Plugins.ConfigEditor.ToolDataAccessor.ToolDataAccessor.children(), Folder.children(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor.children(), and Vispa.Views.LineDecayView.LineDecayContainer.children().

91 
92  def hideMenuWidgets(self):
93  for child in self.children():
94  if isinstance(child, MenuWidget):
95  child.hide()
def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.portConnection (   self,
  port1,
  port2 = None 
)
Returns the PortConnection if there is a connection in this ConnectableWidgetOwner that is attached to the given port.

Otherwise None will be returned.

Definition at line 42 of file ConnectableWidgetOwner.py.

References Vispa.Share.BasicDataAccessor.BasicDataAccessor.children(), Vispa.Plugins.EdmBrowser.EventContentDataAccessor.EventContentDataAccessor.children(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor.children(), Vispa.Plugins.ConfigEditor.ToolDataAccessor.ToolDataAccessor.children(), Folder.children(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor.children(), and Vispa.Views.LineDecayView.LineDecayContainer.children().

42 
43  def portConnection(self, port1, port2=None):
44  """ Returns the PortConnection if there is a connection in this ConnectableWidgetOwner that is attached to the given port.
45 
46  Otherwise None will be returned.
47  """
48  for connection in [child for child in self.children() if isinstance(child, PortConnection)]:
49  if connection.attachedToPort(port1) and (not port2 or connection.attachedToPort(port2)):
50  return connection
51  return None
def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.propagateEventUnderConnectionWidget (   self,
  connection,
  event 
)
This function propagates an event to one of it's children.

If a connection widget is clicked in an area where it does not draw the connection line, the event should be forwarded to the underlying widget if there is such one.
However the default behavior of Qt is to propagate the event to the connection's parent. This should be an ConnectableWidgetOwner object.
This function is a workaround searching for any child widget at event.pos() which is not the initial connection.
If it finds such a widget a new event with correct position in the new widget's own frame is created and sent to the widget.
This function calls grabMouse() on the found child. The child should make sure releaseMouse() will be called e.g. in mouseReleaseEvent().

Currently supported events: QEvent.MouseButtonPress, QEvent.MouseButtonDblClick.

Definition at line 52 of file ConnectableWidgetOwner.py.

References Vispa.Share.BasicDataAccessor.BasicDataAccessor.children(), Vispa.Plugins.EdmBrowser.EventContentDataAccessor.EventContentDataAccessor.children(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor.children(), Vispa.Plugins.ConfigEditor.ToolDataAccessor.ToolDataAccessor.children(), Folder.children(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor.children(), Vispa.Views.LineDecayView.LineDecayContainer.children(), and edm.contains().

52 
53  def propagateEventUnderConnectionWidget(self, connection, event):
54  """ This function propagates an event to one of it's children.
55 
56  If a connection widget is clicked in an area where it does not draw the connection line, the event should be forwarded to the underlying widget if there is such one.
57  However the default behavior of Qt is to propagate the event to the connection's parent. This should be an ConnectableWidgetOwner object.
58  This function is a workaround searching for any child widget at event.pos() which is not the initial connection.
59  If it finds such a widget a new event with correct position in the new widget's own frame is created and sent to the widget.
60  This function calls grabMouse() on the found child. The child should make sure releaseMouse() will be called e.g. in mouseReleaseEvent().
61 
62  Currently supported events: QEvent.MouseButtonPress, QEvent.MouseButtonDblClick.
63  """
64  logging.debug("%s: propagateEventUnderConnectionWidget() - %s" % (self.__class__.__name__, str(event.type())))
65 
66  workspacePos = connection.mapToParent(event.pos())
67  for child in reversed(self.children()):
68  if not child==connection and isinstance(child,QWidget) and child.geometry().contains(workspacePos):
69  # do not forward event to connections which do not cross the mouse click point, this is important to prevent infinite loop error
70  if isinstance(child,PortConnection) and not child.belongsToRoute(workspacePos):
71  continue
72 # if event.type() == QEvent.MouseButtonDblClick or \
73 # event.type() == QEvent.MouseButtonPress or \
74 # event.type() == QEvent.MouseButtonRelease or \
75 # event.type() == QEvent.MouseMove or \
76 # event.type() == QEvent.DragEnter or \
77 # event.type() == QEvent.Drop:
78 
79  childPos = child.mapFromParent(workspacePos)
80  grandChild = child.childAt(childPos)
81  if grandChild:
82  child = grandChild
83  childPos = child.mapFromParent(childPos)
84  if event.type() == QEvent.MouseButtonPress:
85  child.grabMouse(QCursor(Qt.ClosedHandCursor))
86  child.setFocus()
87  newEvent = QMouseEvent(event.type(), childPos, event.button(), event.buttons(), event.modifiers())
88  QCoreApplication.instance().sendEvent(child, newEvent)
89  return True
90  return False
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:38
def Vispa.Gui.ConnectableWidgetOwner.ConnectableWidgetOwner.updateConnections (   self)
Updates all connection.

Definition at line 25 of file ConnectableWidgetOwner.py.

References Vispa.Share.BasicDataAccessor.BasicDataAccessor.children(), Vispa.Plugins.EdmBrowser.EventContentDataAccessor.EventContentDataAccessor.children(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor.children(), Vispa.Plugins.ConfigEditor.ToolDataAccessor.ToolDataAccessor.children(), Folder.children(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor.children(), and Vispa.Views.LineDecayView.LineDecayContainer.children().

Referenced by Vispa.Views.BoxDecayView.BoxDecayContainer.autolayoutAlgorithm(), Vispa.Gui.WidgetContainer.WidgetContainer.autosize(), and Vispa.Gui.ZoomableScrollableWidgetOwner.ZoomableScrollableWidgetOwner.setZoom().

25 
26  def updateConnections(self):
27  """ Updates all connection.
28  """
29  #logging.debug(self.__class__.__name__ +": updateConnections()")
30  for child in self.children():
31  if isinstance(child, ConnectableWidgetOwner):
32  child.updateConnections()
33  if isinstance(child, PortConnection):
34  child.updateConnection()