Exemplo n.º 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 = []
Exemplo n.º 2
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 )
Exemplo n.º 3
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 )