diff options
Diffstat (limited to 'graphics/asymptote/GUI/Window1.py')
-rw-r--r-- | graphics/asymptote/GUI/Window1.py | 93 |
1 files changed, 87 insertions, 6 deletions
diff --git a/graphics/asymptote/GUI/Window1.py b/graphics/asymptote/GUI/Window1.py index 3da918ff6c..a21137a023 100644 --- a/graphics/asymptote/GUI/Window1.py +++ b/graphics/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') @@ -1079,7 +1098,12 @@ 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") @@ -2425,3 +2449,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() |