diff -r d178cfa9e77f -r 28337cd092fd Viewer.py --- 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