Viewer.py
changeset 97 28337cd092fd
parent 95 ee66a9a1748b
child 98 ec5d7af033d8
--- a/Viewer.py	Wed Sep 19 13:28:04 2007 +0200
+++ b/Viewer.py	Wed Sep 19 13:32:24 2007 +0200
@@ -53,17 +53,35 @@
     
     def OnDropText(self, x, y, data):
         values = eval(data)
-        if values[1] in ["function", "functionBlock", "program"]:
-            id = self.ParentWindow.GetNewId()
-            block = FBD_Block(self.ParentWindow, values[0], values[2], id)
-            block.SetPosition(x, y)
-            width, height = block.GetMinSize()
-            block.SetSize(width, height)
-            self.ParentWindow.AddBlock(block)
-            self.ParentWindow.Controler.AddCurrentElementEditingBlock(id,values[0], values[2])
-            self.ParentWindow.RefreshBlockModel(block)
-            self.ParentWindow.RefreshScrollBars()
-            self.ParentWindow.Refresh()
+        if values[1] == "program":
+            message = wx.MessageDialog(self.ParentWindow, "Programs can't be used by other POUs!", "Error", wx.OK|wx.ICON_ERROR)
+            message.ShowModal()
+            message.Destroy()
+        elif values[1] in ["function", "functionBlock", "program"]:
+            name, type = self.ParentWindow.Controler.GetCurrentElementEditingType()
+            if name == values[0]:
+                message = wx.MessageDialog(self.ParentWindow, "\"%s\" can't use itself!"%name, "Error", wx.OK|wx.ICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+            elif type == "function" and values[1] != "function":
+                message = wx.MessageDialog(self.ParentWindow, "Function Blocks can't be used by Functions!", "Error", wx.OK|wx.ICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+            elif self.ParentWindow.Controler.PouIsUsedBy(name, values[0]):
+                message = wx.MessageDialog(self.ParentWindow, "\"%s\" is already used by \"%s\"!"%(name, values[0]), "Error", wx.OK|wx.ICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+            else:
+                id = self.ParentWindow.GetNewId()
+                block = FBD_Block(self.ParentWindow, values[0], values[2], id)
+                block.SetPosition(x, y)
+                width, height = block.GetMinSize()
+                block.SetSize(width, height)
+                self.ParentWindow.AddBlock(block)
+                self.ParentWindow.Controler.AddCurrentElementEditingBlock(id, values[0], values[2])
+                self.ParentWindow.RefreshBlockModel(block)
+                self.ParentWindow.RefreshScrollBars()
+                self.ParentWindow.Refresh()
         elif values[1] != "location":
             id = self.ParentWindow.GetNewId()
             if values[1] == "Output":
@@ -976,7 +994,7 @@
             if event.ControlDown() and event.ShiftDown():
                 self.Scroll(0, ypos)
             elif event.ControlDown():
-                self.Scroll(max(0, xpos - 1), ypos)
+                event.Skip()
             elif self.SelectedElement:
                 self.SelectedElement.Move(-scaling[0], 0)
                 self.SelectedElement.RefreshModel()
@@ -987,7 +1005,7 @@
             if event.ControlDown() and event.ShiftDown():
                 self.Scroll(xmax, ypos)
             elif event.ControlDown():
-                self.Scroll(min(xpos + 1, xmax), ypos)
+                event.Skip()
             elif self.SelectedElement:
                 self.SelectedElement.Move(scaling[0], 0)
                 self.SelectedElement.RefreshModel()
@@ -998,7 +1016,7 @@
             if event.ControlDown() and event.ShiftDown():
                 self.Scroll(xpos, 0)
             elif event.ControlDown():
-                self.Scroll(xpos, max(0, ypos - 1))
+                event.Skip()
             elif self.SelectedElement:
                 self.SelectedElement.Move(0, -scaling[1])
                 self.SelectedElement.RefreshModel()
@@ -1009,13 +1027,15 @@
             if event.ControlDown() and event.ShiftDown():
                 self.Scroll(xpos, ymax)
             elif event.ControlDown():
-                self.Scroll(xpos, min(ypos + 1, ymax))
+                event.Skip()
             elif self.SelectedElement:
                 self.SelectedElement.Move(0, scaling[1])
                 self.SelectedElement.RefreshModel()
                 self.RefreshBuffer()
                 self.RefreshScrollBars()
                 self.Refresh(False)
+        else:
+            event.Skip()
 
 #-------------------------------------------------------------------------------
 #                          Model adding functions