Example #1
0
	def __init__( self, parent = None ):
		super( ToolWindowManager, self ).__init__( parent )
		self.lastUsedArea = None
		self.suggestions = []
		self.wrappers    = []
		self.areas       = []
		self.draggedToolWindows = []
		#----
		self.borderSensitivity = 12
		testSplitter = QSplitter()
		self.rubberBandLineWidth = testSplitter.handleWidth()
		self.dragIndicator = QtGui.QLabel( None, Qt.ToolTip)
		self.dragIndicator.setAttribute( Qt.WA_ShowWithoutActivating)
		mainLayout = QtGui.QVBoxLayout( self )
		mainLayout.setContentsMargins( 0, 0, 0, 0 )
		
		wrapper = ToolWindowManagerWrapper( self )
		wrapper.setWindowFlags( wrapper.windowFlags() & ~Qt.Tool )
		mainLayout.addWidget( wrapper )

		self.dropSuggestionSwitchTimer = QtCore.QTimer( self )
		self.dropSuggestionSwitchTimer.timeout.connect( self.showNextDropSuggestion )
		self.dropSuggestionSwitchTimer.setInterval( 800 )
		self.dropCurrentSuggestionIndex = 0

		palette = QtGui.QPalette()
		color = QtGui.QColor( Qt.blue )
		color.setAlpha(80)
		palette.setBrush( QtGui.QPalette.Highlight, QtGui.QBrush( color ) )
		
		self.rectRubberBand = QtGui.QRubberBand( QtGui.QRubberBand.Rectangle, self )
		self.lineRubberBand = QtGui.QRubberBand( QtGui.QRubberBand.Line, self )
		self.rectRubberBand.setPalette( palette )
		self.lineRubberBand.setPalette( palette )
		self.toolWindowList = []
Example #2
0
    def __init__(self, parent=None):
        super(ToolWindowManager, self).__init__(parent)
        self.lastUsedArea = None
        self.suggestions = []
        self.wrappers = []
        self.areas = []
        self.draggedToolWindows = []
        # ----
        self.borderSensitivity = 12
        testSplitter = QSplitter()
        self.rubberBandLineWidth = testSplitter.handleWidth()
        self.dragIndicator = QtGui.QLabel(None, Qt.ToolTip)
        self.dragIndicator.setAttribute(Qt.WA_ShowWithoutActivating)
        mainLayout = QtGui.QVBoxLayout(self)
        mainLayout.setContentsMargins(0, 0, 0, 0)

        wrapper = ToolWindowManagerWrapper(self)
        wrapper.setWindowFlags(wrapper.windowFlags() & ~Qt.Tool)
        mainLayout.addWidget(wrapper)

        self.dropSuggestionSwitchTimer = QtCore.QTimer(self)
        self.dropSuggestionSwitchTimer.timeout.connect(self.showNextDropSuggestion)
        self.dropSuggestionSwitchTimer.setInterval(800)
        self.dropCurrentSuggestionIndex = 0

        palette = QtGui.QPalette()
        color = QtGui.QColor(Qt.blue)
        color.setAlpha(80)
        palette.setBrush(QtGui.QPalette.Highlight, QtGui.QBrush(color))

        self.rectRubberBand = QtGui.QRubberBand(QtGui.QRubberBand.Rectangle, self)
        self.lineRubberBand = QtGui.QRubberBand(QtGui.QRubberBand.Line, self)
        self.rectRubberBand.setPalette(palette)
        self.lineRubberBand.setPalette(palette)
        self.toolWindowList = []
Example #3
0
    def restoreState(self, data):
        if not isinstance(data, dict):
            return
        if data["toolWindowManagerStateFormat"] != 1:
            qWarning("state format is not recognized")
            return
        self.moveToolWindows(self.toolWindowList, ToolWindowManager.NoArea)
        mainWrapper = self.findChild(ToolWindowManagerWrapper)
        if not mainWrapper:
            qWarning("can not find main wrapper")

        mainWrapper.restoreState(data["mainWrapper"])
        for windowData in data["floatingWindows"]:
            wrapper = ToolWindowManagerWrapper(self)
            wrapper.restoreState(windowData)
            wrapper.show()

        self.simplifyLayout()
        for toolWindow in self.toolWindowList:
            self.toolWindowVisibilityChanged.emit(toolWindow, toolWindow.parentWidget() != None)
Example #4
0
	def restoreState( self, data ):
		if not isinstance( data, dict ): return
		if data[ 'toolWindowManagerStateFormat' ] != 1:
			qWarning( 'state format is not recognized' )
			return
		self.moveToolWindows( self.toolWindowList, ToolWindowManager.NoArea )
		mainWrapper = self.findChild( ToolWindowManagerWrapper )
		if not mainWrapper:
			qWarning( 'can not find main wrapper' )

		mainWrapper.restoreState( data['mainWrapper'] )
		for windowData in data['floatingWindows']:
			wrapper = ToolWindowManagerWrapper( self )
			wrapper.restoreState( windowData )
			wrapper.show()

		self.simplifyLayout()
		for toolWindow in self.toolWindowList:
			self.toolWindowVisibilityChanged.emit( toolWindow, toolWindow.parentWidget() != None )
Example #5
0
	def moveToolWindows( self, toolWindows, area ):
		if type( area ) == int:
			area = AreaReference( area )

		for toolWindow in toolWindows:
			if not self.hasToolWindow( toolWindow ): return
			if toolWindow.parentWidget():
				self.releaseToolWindow( toolWindow )

		areaType = area.type

		if areaType == ToolWindowManager.LastUsedArea and not self.lastUsedArea:
			foundArea = self.findChild( ToolWindowManagerArea )
			if foundArea:
				area = AreaReference( ToolWindowManager.AddTo, foundArea )
			else:
				area = ToolWindowManager.EmptySpace

		if areaType == ToolWindowManager.NoArea:
			#do nothing
			pass

		elif areaType == ToolWindowManager.NewFloatingArea:
			area = self.createArea()
			area.addToolWindows( toolWindows )
			wrapper = ToolWindowManagerWrapper( self )
			wrapper.layout().addWidget( area )
			wrapper.move( QCursor.pos() )
			wrapper.show()

		elif areaType == ToolWindowManager.AddTo:
			area.area().addToolWindows( toolWindows )

		elif areaType in ( ToolWindowManager.LeftOf, ToolWindowManager.RightOf, ToolWindowManager.TopOf, ToolWindowManager.BottomOf ):
			parentSplitter = cast( area.widget.parentWidget(), QSplitter )
			wrapper = cast( area.widget.parentWidget(), ToolWindowManagerWrapper )
			if not ( parentSplitter or wrapper ):
				qWarning( 'unknown parent type' )
				return
			# import pudb; pu.db
			useParentSplitter = False
			indexInParentSplitter = 0
			if parentSplitter:
				indexInParentSplitter = parentSplitter.indexOf( area.widget )
				if parentSplitter.orientation() == Qt.Vertical:
					useParentSplitter = areaType in ( ToolWindowManager.TopOf, ToolWindowManager.BottomOf )
				else:
					useParentSplitter = areaType in ( ToolWindowManager.LeftOf, ToolWindowManager.RightOf )

			if useParentSplitter:
				if areaType in ( ToolWindowManager.BottomOf , ToolWindowManager.RightOf ):
					indexInParentSplitter += 1
				newArea = self.createArea()
				newArea.addToolWindows( toolWindows )
				parentSplitter.insertWidget( indexInParentSplitter, newArea )

			else:
				area.widget.hide()
				area.widget.setParent( None )
				splitter = self.createSplitter()
				if areaType in ( ToolWindowManager.TopOf, ToolWindowManager.BottomOf ):
					splitter.setOrientation(Qt.Vertical)
				else:
					splitter.setOrientation(Qt.Horizontal)

				splitter.addWidget( area.widget )
				area.widget.show()
				newArea = self.createArea()
				if areaType in ( ToolWindowManager.TopOf, ToolWindowManager.LeftOf ):
					splitter.insertWidget( 0, newArea )
				else:
					splitter.addWidget( newArea )

				if parentSplitter:
					parentSplitter.insertWidget( indexInParentSplitter, splitter )
				else:
					wrapper.layout().addWidget( splitter )
				newArea.addToolWindows( toolWindows )

		elif areaType == ToolWindowManager.EmptySpace:
			wrapper = self.findChild( ToolWindowManagerWrapper )
			if wrapper.isOccupied():
				self.lastUsedArea.addToolWindows( toolWindows )
			else:
				newArea = self.createArea()
				wrapper.layout().addWidget( newArea )
				newArea.addToolWindows( toolWindows )

		elif areaType == ToolWindowManager.LastUsedArea:
			self.lastUsedArea.addToolWindows( toolWindows )

		else:
			qWarning( 'invalid type' )

		self.simplifyLayout()
		for toolWindow in toolWindows:
			self.toolWindowVisibilityChanged.emit( toolWindow, toolWindow.parent() != None )
Example #6
0
    def moveToolWindows(self, toolWindows, area):
        if type(area) == int:
            area = AreaReference(area)

        for toolWindow in toolWindows:
            if not self.hasToolWindow(toolWindow):
                return
            if toolWindow.parentWidget():
                self.releaseToolWindow(toolWindow)

        areaType = area.type

        if areaType == ToolWindowManager.LastUsedArea and not self.lastUsedArea:
            foundArea = self.findChild(ToolWindowManagerArea)
            if foundArea:
                area = AreaReference(ToolWindowManager.AddTo, foundArea)
            else:
                area = ToolWindowManager.EmptySpace

        if areaType == ToolWindowManager.NoArea:
            # do nothing
            pass

        elif areaType == ToolWindowManager.NewFloatingArea:
            area = self.createArea()
            area.addToolWindows(toolWindows)
            wrapper = ToolWindowManagerWrapper(self)
            wrapper.layout().addWidget(area)
            wrapper.move(QCursor.pos())
            wrapper.show()

        elif areaType == ToolWindowManager.AddTo:
            area.area().addToolWindows(toolWindows)

        elif areaType in (
            ToolWindowManager.LeftOf,
            ToolWindowManager.RightOf,
            ToolWindowManager.TopOf,
            ToolWindowManager.BottomOf,
        ):
            parentSplitter = cast(area.widget.parentWidget(), QSplitter)
            wrapper = cast(area.widget.parentWidget(), ToolWindowManagerWrapper)
            if not (parentSplitter or wrapper):
                qWarning("unknown parent type")
                return
                # import pudb; pu.db
            useParentSplitter = False
            indexInParentSplitter = 0
            if parentSplitter:
                indexInParentSplitter = parentSplitter.indexOf(area.widget)
                if parentSplitter.orientation() == Qt.Vertical:
                    useParentSplitter = areaType in (ToolWindowManager.TopOf, ToolWindowManager.BottomOf)
                else:
                    useParentSplitter = areaType in (ToolWindowManager.LeftOf, ToolWindowManager.RightOf)

            if useParentSplitter:
                if areaType in (ToolWindowManager.BottomOf, ToolWindowManager.RightOf):
                    indexInParentSplitter += 1
                newArea = self.createArea()
                newArea.addToolWindows(toolWindows)
                parentSplitter.insertWidget(indexInParentSplitter, newArea)

            else:
                area.widget.hide()
                area.widget.setParent(None)
                splitter = self.createSplitter()
                if areaType in (ToolWindowManager.TopOf, ToolWindowManager.BottomOf):
                    splitter.setOrientation(Qt.Vertical)
                else:
                    splitter.setOrientation(Qt.Horizontal)

                splitter.addWidget(area.widget)
                area.widget.show()
                newArea = self.createArea()
                if areaType in (ToolWindowManager.TopOf, ToolWindowManager.LeftOf):
                    splitter.insertWidget(0, newArea)
                else:
                    splitter.addWidget(newArea)

                if parentSplitter:
                    parentSplitter.insertWidget(indexInParentSplitter, splitter)
                else:
                    wrapper.layout().addWidget(splitter)
                newArea.addToolWindows(toolWindows)

        elif areaType == ToolWindowManager.EmptySpace:
            wrapper = self.findChild(ToolWindowManagerWrapper)
            if wrapper.isOccupied():
                self.lastUsedArea.addToolWindows(toolWindows)
            else:
                newArea = self.createArea()
                wrapper.layout().addWidget(newArea)
                newArea.addToolWindows(toolWindows)

        elif areaType == ToolWindowManager.LastUsedArea:
            self.lastUsedArea.addToolWindows(toolWindows)

        else:
            qWarning("invalid type")

        self.simplifyLayout()
        for toolWindow in toolWindows:
            self.toolWindowVisibilityChanged.emit(toolWindow, toolWindow.parent() != None)