diff options
Diffstat (limited to 'Build/source/utils/asymptote/GUI/Window1.py')
-rw-r--r-- | Build/source/utils/asymptote/GUI/Window1.py | 119 |
1 files changed, 102 insertions, 17 deletions
diff --git a/Build/source/utils/asymptote/GUI/Window1.py b/Build/source/utils/asymptote/GUI/Window1.py index 134d3cd1968..21d9691e642 100644 --- a/Build/source/utils/asymptote/GUI/Window1.py +++ b/Build/source/utils/asymptote/GUI/Window1.py @@ -32,6 +32,7 @@ import xasyStrings as xs import PrimitiveShape import InplaceAddObj +import ContextWindow import CustMatTransform import SetCustomAnchor @@ -127,6 +128,7 @@ class MainWindow1(Qw.QMainWindow): devicePixelRatio=self.devicePixelRatio() self.ui.setupUi(self) self.ui.menubar.setNativeMenuBar(False) + self.setWindowIcon(Qg.QIcon("../asy.ico")) self.settings = xo.BasicConfigs.defaultOpt self.keyMaps = xo.BasicConfigs.keymaps @@ -229,7 +231,7 @@ class MainWindow1(Qw.QMainWindow): self.previewCurve = None self.mouseDown = False - self.globalObjectCounter = 0 + self.globalObjectCounter = 1 self.fileItems = [] self.drawObjects = [] @@ -569,9 +571,6 @@ class MainWindow1(Qw.QMainWindow): self.ui.txtTerminalPrompt.clear() def btnFillOnClick(self, checked): - if self.currentModeStack == [SelectionMode.selectEdit]: - if isinstance(self.addMode,xbi.InteractiveBezierEditor): - self.addMode.swapObjFill() #Check for crashes self.currAddOptions['fill'] = checked self.ui.btnOpenCurve.setEnabled(not checked) self.ui.btnOpenPoly.setEnabled(not checked) @@ -893,16 +892,34 @@ class MainWindow1(Qw.QMainWindow): if result: self.execCustomCommand(commandText) - def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None): + def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None, fill = False): + dashPattern = pen['dashPattern'] #? if not pen: pen = self.currentPen else: pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options']) + if dashPattern: + pen.setDashPattern(dashPattern) newItem = x2a.xasyShape(path, self.asyEngine, pen = pen, transform = transform) + if fill: + newItem.swapFill() newItem.setKey(key) self.fileItems.append(newItem) + def addXasyArrowFromPath(self, pen, transform, key, arrowSettings, code, dashPattern = None): + if not pen: + pen = self.currentPen + else: + pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options']) + if dashPattern: + pen.setDashPattern(dashPattern) + + newItem = x2a.asyArrow(self.asyEngine, pen, transform, key, canvas=self.xasyDrawObj, code=code) + newItem.setKey(key) + newItem.arrowSettings = arrowSettings + self.fileItems.append(newItem) + def addXasyTextFromData(self, text, location, pen, transform, key, align, fontSize): if not pen: pen = self.currentPen @@ -998,6 +1015,8 @@ class MainWindow1(Qw.QMainWindow): ext = 'asy' else: ext = ext[1][1:] + if ext == '': + ext='asy' if ext == 'asy': pathToFile = os.path.splitext(file)[0]+'.'+ext asyFile = io.open(os.path.realpath(pathToFile), 'w') @@ -1060,9 +1079,10 @@ class MainWindow1(Qw.QMainWindow): for item in xasyObjects['objects']: key=item['transfKey'] - if(key) in obj.transfKeymap.keys(): - continue - obj.maxKey=max(obj.maxKey,int(key)) + if existsAsy: + if(key) in obj.transfKeymap.keys(): + continue + obj.maxKey=max(obj.maxKey,int(key)) if item['type'] == 'xasyScript': print("Uh oh, there should not be any asy objects loaded") @@ -1078,12 +1098,18 @@ class MainWindow1(Qw.QMainWindow): linkSet = item['links'] path = x2a.asyPath(self.asyEngine) path.initFromNodeList(nodeSet, linkSet) - self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey']) + self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey'], fill = item['fill']) + + elif item['type'] == 'asyArrow': + self.addXasyArrowFromPath(item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings'], item['code']) + #self.addXasyArrowFromPath(item['oldpath'], item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings']) + else: print("ERROR") self.asy2psmap = x2a.asyTransform(xasyObjects['asy2psmap']) - self.globalObjectCounter = obj.maxKey+1 + if existsAsy: + self.globalObjectCounter = obj.maxKey+1 self.asyfyCanvas() @@ -1923,7 +1949,7 @@ class MainWindow1(Qw.QMainWindow): preCanvas.setPen(minorGridCol) self.makePenCosmetic(preCanvas) for xMinor in range(1, minorGridCount + 1): - xCoord = x + ((xMinor / (minorGridCount + 1)) * majorGrid) + xCoord = round(x + ((xMinor / (minorGridCount + 1)) * majorGrid)) preCanvas.drawLine(Qc.QLine(xCoord, -9999, xCoord, 9999)) preCanvas.drawLine(Qc.QLine(-xCoord, -9999, -xCoord, 9999)) @@ -1931,20 +1957,22 @@ class MainWindow1(Qw.QMainWindow): preCanvas.setPen(minorGridCol) self.makePenCosmetic(preCanvas) for yMinor in range(1, minorGridCount + 1): - yCoord = y + ((yMinor / (minorGridCount + 1)) * majorGrid) + yCoord = round(y + ((yMinor / (minorGridCount + 1)) * majorGrid)) preCanvas.drawLine(Qc.QLine(-9999, yCoord, 9999, yCoord)) preCanvas.drawLine(Qc.QLine(-9999, -yCoord, 9999, -yCoord)) preCanvas.setPen(majorGridCol) self.makePenCosmetic(preCanvas) - preCanvas.drawLine(Qc.QLine(-9999, y, 9999, y)) - preCanvas.drawLine(Qc.QLine(-9999, -y, 9999, -y)) + roundY = round(y) + preCanvas.drawLine(Qc.QLine(-9999, roundY, 9999, roundY)) + preCanvas.drawLine(Qc.QLine(-9999, -roundY, 9999, -roundY)) for x in np.arange(0, 2 * x_range + 1, majorGrid): preCanvas.setPen(majorGridCol) self.makePenCosmetic(preCanvas) - preCanvas.drawLine(Qc.QLine(x, -9999, x, 9999)) - preCanvas.drawLine(Qc.QLine(-x, -9999, -x, 9999)) + roundX = round(x) + preCanvas.drawLine(Qc.QLine(roundX, -9999, roundX, 9999)) + preCanvas.drawLine(Qc.QLine(-roundX, -9999, -roundX, 9999)) def drawPolarGrid(self, preCanvas): center = Qc.QPointF(0, 0) @@ -2046,7 +2074,7 @@ class MainWindow1(Qw.QMainWindow): with Qg.QPainter(self.postCanvasPixmap) as postCanvas: postCanvas.setRenderHints(self.mainCanvas.renderHints()) postCanvas.setTransform(self.getScrsTransform()) - # self.makePenCosmetic(postCanvas) + self.makePenCosmetic(postCanvas) self.drawTransformPreview(postCanvas) @@ -2423,3 +2451,60 @@ class MainWindow1(Qw.QMainWindow): self.quickUpdate() else: self.ui.statusbar.showMessage('No object to paste') + + def contextMenuEvent(self, event): + #Note that we can't get anything from self.selectOnHover() here. + try: + self.contextWindowIndex = self.selectObject()[0] #for arrowifying + maj = self.contextWindowIndex[0] + except: + return + + if self.fileItems[maj] is not None: + self.contextWindowObject = self.fileItems[maj] #For arrowifying + self.contextWindow = ContextWindow.AnotherWindow(self.fileItems[maj],self) + self.contextWindow.setMinimumWidth(420) + #self.setCentralWidget(self.contextWindow) #I don't know what this does tbh. + self.contextWindow.show() + + def focusInEvent(self,event): + if self.mainCanvas.isActive(): + self.quickUpdate() + + def replaceObject(self,objectIndex,newObject): + maj, minor = self.contextWindowIndex + selectedObj = self.drawObjects[maj][minor] + + parent = selectedObj.parent() + + if isinstance(parent, x2a.xasyScript): + objKey=(selectedObj.key, selectedObj.keyIndex) + self.hiddenKeys.add(objKey) + self.undoRedoStack.add(self.createAction( + SoftDeletionChanges(selectedObj.parent(), objKey) + )) + self.softDeleteObj((maj, minor)) + else: + index = self.fileItems.index(selectedObj.parent()) + + self.undoRedoStack.add(self.createAction( + HardDeletionChanges(selectedObj.parent(), index) + )) + + self.fileItems.remove(selectedObj.parent()) + + self.fileItems.append(newObject) + self.drawObjects.append(newObject.generateDrawObjects(True)) #THIS DOES WORK, IT'S JUST REGENERATING THE SHAPE. + + self.checkUndoRedoButtons() + self.fileChanged = True + + self.clearSelection() + #self.asyfyCanvas() + #self.quickUpdate() + + def terminateContextWindow(self): + if self.contextWindow is not None: + self.contextWindow.close() + self.asyfyCanvas() + self.quickUpdate() |