def addWidget(self, widgetInfo, x= -1, y=-1, caption = "", widgetSettings = {}, extra=None): qApp.setOverrideCursor(Qt.WaitCursor) newwidget = orngCanvasItems.CanvasWidget(self.canvas, self.canvasView, widgetInfo, self.canvasDlg.defaultPic, self.canvasDlg, widgetSettings, extra) if x==-1 or y==-1: if self.widgets != []: x = self.widgets[-1].x() + 110 y = self.widgets[-1].y() else: x = 30 y = 150 newwidget.setCoords(x, y) # move the widget to a valid position if necessary invalidPosition = (self.canvasView.findItemTypeCount(self.canvas.collidingItems(newwidget), orngCanvasItems.CanvasWidget) > 0) if invalidPosition: for r in range(20, 200, 20): for fi in [90, -90, 180, 0, 45, -45, 135, -135]: xOff = r * math.cos(math.radians(fi)) yOff = r * math.sin(math.radians(fi)) rect = QRectF(x+xOff, y+yOff, 48, 48) invalidPosition = self.canvasView.findItemTypeCount(self.canvas.items(rect), orngCanvasItems.CanvasWidget) > 0 if not invalidPosition: newwidget.setCoords(x+xOff, y+yOff) break if not invalidPosition: break if caption == "": caption = newwidget.caption if self.getWidgetByCaption(caption): i = 2 while self.getWidgetByCaption(caption + " (" + str(i) + ")"): i+=1 caption = caption + " (" + str(i) + ")" newwidget.updateText(caption) newwidget.instance.setWindowTitle(caption) self.widgets.append(newwidget) self.canvas.update() try: newwidget.show() newwidget.updateTooltip() newwidget.setProcessing(1) if self.canvasDlg.settings["saveWidgetsPosition"]: newwidget.instance.restoreWidgetPosition() newwidget.setProcessing(0) orngHistory.logAddWidget(self.schemaID, id(newwidget), (newwidget.widgetInfo.category, newwidget.widgetInfo.name), newwidget.x(), newwidget.y()) except: type, val, traceback = sys.exc_info() sys.excepthook(type, val, traceback) # we pretend that we handled the exception, so that it doesn't crash canvas qApp.restoreOverrideCursor() #self.update_guide() return newwidget
def addWidget(self, widgetInfo, x=-1, y=-1, caption="", widgetSettings={}, extra=None): qApp.setOverrideCursor(Qt.WaitCursor) newwidget = orngCanvasItems.CanvasWidget(self.canvas, self.canvasView, widgetInfo, self.canvasDlg.defaultPic, self.canvasDlg, widgetSettings, extra) if x == -1 or y == -1: if self.widgets != []: x = self.widgets[-1].x() + 110 y = self.widgets[-1].y() else: x = 30 y = 150 newwidget.setCoords(x, y) # move the widget to a valid position if necessary invalidPosition = (self.canvasView.findItemTypeCount( self.canvas.collidingItems(newwidget), orngCanvasItems.CanvasWidget) > 0) if invalidPosition: for r in range(20, 200, 20): for fi in [90, -90, 180, 0, 45, -45, 135, -135]: xOff = r * math.cos(math.radians(fi)) yOff = r * math.sin(math.radians(fi)) rect = QRectF(x + xOff, y + yOff, 48, 48) invalidPosition = self.canvasView.findItemTypeCount( self.canvas.items(rect), orngCanvasItems.CanvasWidget) > 0 if not invalidPosition: newwidget.setCoords(x + xOff, y + yOff) break if not invalidPosition: break if caption == "": caption = newwidget.caption if self.getWidgetByCaption(caption): i = 2 while self.getWidgetByCaption(caption + " (" + str(i) + ")"): i += 1 caption = caption + " (" + str(i) + ")" newwidget.updateText(caption) newwidget.instance.setWindowTitle(caption) self.widgets.append(newwidget) self.canvas.update() try: newwidget.show() newwidget.updateTooltip() newwidget.setProcessing(1) if self.canvasDlg.settings["saveWidgetsPosition"]: newwidget.instance.restoreWidgetPosition() newwidget.setProcessing(0) orngHistory.logAddWidget( self.schemaID, id(newwidget), (newwidget.widgetInfo.category, newwidget.widgetInfo.name), newwidget.x(), newwidget.y()) except: type, val, traceback = sys.exc_info() sys.excepthook( type, val, traceback ) # we pretend that we handled the exception, so that it doesn't crash canvas qApp.restoreOverrideCursor() #self.update_guide() return newwidget