219 lines
7.8 KiB
Python
219 lines
7.8 KiB
Python
from includes import *
|
|
from decompositionView import DecompositionView
|
|
from solutionView import SolutionView
|
|
from prototypeObjects import PrototypeManager
|
|
from glViewer import *
|
|
|
|
class Viewport(QtGui.QScrollArea):
|
|
def __init__(self, viewportMngr, vpType=None, shareWidget=None, parent=None):
|
|
QtGui.QScrollArea.__init__(self, parent)
|
|
self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
|
|
|
|
self.moveActive = False
|
|
self.zoomActive = False
|
|
self.rotateActive = False
|
|
self.name = ""
|
|
self.viewportManager = viewportMngr
|
|
self.glViewport = None
|
|
self.solutionView = None
|
|
|
|
self.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Sunken)
|
|
|
|
#self.setFrameShape(QtGui.QFrame.StyledPanel)
|
|
#self.setFrameShadow(QtGui.QFrame.Plain)
|
|
self.setWidgetResizable(True)
|
|
|
|
self.setViewport(vpType, shareWidget)
|
|
self.createActions()
|
|
self.createToolbar()
|
|
self.createVerticalSplit()
|
|
self.createTriggers()
|
|
|
|
def setViewport(self,vpType, shareWidget=None):
|
|
self.setName(vpType)
|
|
self.glViewport = GLViewport(self, vpType, shareWidget, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
|
|
def setMoveActive(self, active):
|
|
self.moveActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.TRANSLATE)
|
|
|
|
def setZoomActive(self, active):
|
|
self.zoomActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.ZOOM)
|
|
|
|
def setRotateActive(self, active):
|
|
self.rotateActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.ROTATE)
|
|
|
|
|
|
def setGridVisibility(self, visibility=True):
|
|
self.gridVisible = visibility
|
|
|
|
def isMoveActive(self):
|
|
return self.moveActive
|
|
|
|
def isZoomActive(self):
|
|
return self.zoomActive
|
|
|
|
def isRotateActive(self):
|
|
return self.rotateActive
|
|
|
|
def isGridVisible(self):
|
|
return self.gridVisible
|
|
|
|
def isActive(self):
|
|
if self.viewportManager.getActiveViewportType() == self:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def doSync(self, active):
|
|
if self.solutionView != None:
|
|
self.solutionView.synchronise()
|
|
|
|
def createActions(self):
|
|
self.editGroup = QtGui.QActionGroup(self)
|
|
self.editGroup.setExclusive(True)
|
|
self.actionMove = QtGui.QAction(self.tr("Move"), self)
|
|
self.actionMove.setCheckable(True)
|
|
self.actionZoom = QtGui.QAction(self.tr("Zoom"), self)
|
|
self.actionZoom.setCheckable(True)
|
|
self.actionRotate = QtGui.QAction(self.tr("Rotate"), self)
|
|
self.actionRotate.setCheckable(True)
|
|
self.actionSync = QtGui.QAction(self.tr("Sync"), self)
|
|
self.editGroup.addAction(self.actionMove)
|
|
self.editGroup.addAction(self.actionZoom)
|
|
self.editGroup.addAction(self.actionRotate)
|
|
self.editGroup.addAction(self.actionSync)
|
|
if self.glViewport.getViewportType() != ViewportType.PERSPECTIVE:
|
|
self.actionRotate.setVisible(False)
|
|
if self.glViewport.getViewportType() != ViewportType.SOLUTION:
|
|
self.actionSync.setVisible(False)
|
|
|
|
def createToolbar(self):
|
|
self.toolbar = QtGui.QToolBar(self)
|
|
self.toolbar.setMaximumHeight(30)
|
|
self.toolbar.addAction(self.actionMove)
|
|
self.toolbar.addAction(self.actionZoom)
|
|
self.toolbar.addAction(self.actionRotate)
|
|
self.toolbar.addAction(self.actionSync)
|
|
|
|
self.viewportList = QtGui.QComboBox()
|
|
self.viewportList.addItem("Top")
|
|
self.viewportList.addItem("Front")
|
|
self.viewportList.addItem("Side")
|
|
self.viewportList.addItem("Perspective")
|
|
self.viewportList.addItem("Decomposition")
|
|
self.viewportList.addItem("Solution")
|
|
self.viewportList.setCurrentIndex(self.viewportList.findText(self.name))
|
|
self.viewportList.setMinimumWidth(100)
|
|
self.toolbar.addWidget(self.viewportList)
|
|
self.updateAction = UpdateActionCommand(self.getMainWindow())
|
|
|
|
|
|
def createVerticalSplit(self):
|
|
self.splitterVertical = QtGui.QSplitter()
|
|
self.splitterVertical.setHandleWidth(1)
|
|
self.splitterVertical.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Raised)
|
|
self.splitterVertical.setOrientation(QtCore.Qt.Vertical)
|
|
self.splitterVertical.addWidget(self.toolbar)
|
|
self.splitterVertical.addWidget(self.glViewport)
|
|
self.setWidget(self.splitterVertical)
|
|
self.toolbar.resize(200,1)
|
|
|
|
def createTriggers(self):
|
|
QtCore.QObject.connect(self.viewportList,QtCore.SIGNAL("currentIndexChanged(const QString &)"), self.changeViewport)
|
|
QtCore.QObject.connect(self.actionMove, QtCore.SIGNAL("triggered(bool)"), self.setMoveActive)
|
|
QtCore.QObject.connect(self.actionRotate, QtCore.SIGNAL("triggered(bool)"), self.setRotateActive)
|
|
QtCore.QObject.connect(self.actionZoom, QtCore.SIGNAL("triggered(bool)"), self.setZoomActive)
|
|
QtCore.QObject.connect(self.actionSync, QtCore.SIGNAL("triggered(bool)"), self.doSync)
|
|
|
|
def keyPressEvent(self, keyEvent):
|
|
self.glViewport.keyPressEvent(keyEvent)
|
|
|
|
def keyReleaseEvent(self, keyEvent):
|
|
self.glViewport.keyReleaseEvent(keyEvent)
|
|
|
|
def changeViewport(self, viewportName):
|
|
if self.name == viewportName:
|
|
return
|
|
else:
|
|
tool = self.glViewport.currentTool
|
|
self.glViewport.close()
|
|
|
|
if viewportName == "Top":
|
|
self.glViewport = GLViewport(self, ViewportType.TOP, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Side":
|
|
self.glViewport = GLViewport(self, ViewportType.SIDE, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Front":
|
|
self.glViewport = GLViewport(self, ViewportType.FRONT, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Perspective":
|
|
self.glViewport = GLViewport(self, ViewportType.PERSPECTIVE, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Decomposition":
|
|
self.glViewport = DecompositionView(self, self.viewportManager, ViewportType.DECOMPOSITION, PrototypeManager()) #self.getMainWindow().compositionView #
|
|
elif viewportName == "Solution":
|
|
self.solutionView = SolutionView(self.getMainWindow(), self.viewportManager, ViewportType.SOLUTION, PrototypeManager(), True)
|
|
self.glViewport = self.solutionView.solutionWidget
|
|
|
|
|
|
self.setActions()
|
|
for action in self.editGroup.actions():
|
|
action.setChecked(False)
|
|
self.splitterVertical.addWidget(self.glViewport)
|
|
self.setName(self.glViewport.viewportType)
|
|
self.glViewport.currentTool = tool
|
|
if self.glViewport.viewportType != ViewportType.DECOMPOSITION:
|
|
self.glViewport.makeCurrent()
|
|
|
|
def setActions(self):
|
|
if self.glViewport.getViewportType() == ViewportType.PERSPECTIVE:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(True)
|
|
self.actionSync.setVisible(False)
|
|
elif self.glViewport.getViewportType() == ViewportType.SOLUTION:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(True)
|
|
self.actionSync.setVisible(True)
|
|
elif self.glViewport.getViewportType() == ViewportType.DECOMPOSITION:
|
|
self.actionMove.setVisible(False)
|
|
self.actionZoom.setVisible(False)
|
|
self.actionRotate.setVisible(False)
|
|
self.actionSync.setVisible(False)
|
|
else:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(False)
|
|
self.actionSync.setVisible(False)
|
|
|
|
|
|
def setName(self, vpType):
|
|
if vpType == ViewportType.TOP:
|
|
self.name = "Top"
|
|
elif vpType == ViewportType.SIDE:
|
|
self.name = "Side"
|
|
elif vpType == ViewportType.FRONT:
|
|
self.name = "Front"
|
|
elif vpType == ViewportType.PERSPECTIVE:
|
|
self.name = "Perspective"
|
|
elif vpType == ViewportType.DECOMPOSITION:
|
|
self.name = "Decomposition"
|
|
elif vpType == ViewportType.SOLUTION:
|
|
self.name = "Solution"
|
|
|
|
def getMainWindow(self):
|
|
return self.viewportManager.getMainWindow()
|
|
|
|
def updateViewports(self):
|
|
self.viewportManager.updateViewports()
|
|
|
|
def resetViewport(self):
|
|
self.glViewport.setCameraView()
|
|
|
|
def mousePressEvent(self, mouseEvent):
|
|
self.viewportManager.activeViewport = self
|