summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/GUI/Window1.py
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/GUI/Window1.py')
-rw-r--r--Build/source/utils/asymptote/GUI/Window1.py119
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()