コード例 #1
0
    def eventFilter(self, obj, event):
        if obj == self.tabBar():
            if event.type() == QEvent.MouseButtonPress and event.buttons(
            ) == Qt.LeftButton:
                # can start tab drag only if mouse is at some tab, not at empty tabbar space
                if self.tabBar().tabAt(event.pos()) >= 0:
                    self.tabDragCanStart = True
                else:
                    self.dragCanStart = True

            elif event.type() == QEvent.MouseButtonRelease:
                self.tabDragCanStart = False
                self.dragCanStart = False
                self.manager.updateDragPosition()

            elif event.type() == QEvent.MouseMove:
                self.manager.updateDragPosition()
                if self.tabDragCanStart:
                    if self.tabBar().rect().contains(event.pos()):
                        return False
                    if event.buttons() != Qt.LeftButton:
                        return False
                    toolWindow = self.currentWidget()
                    if not (toolWindow
                            and self.manager.hasToolWindow(toolWindow)):
                        return False
                    self.tabDragCanStart = False
                    #stop internal tab drag in QTabBar
                    releaseEvent = QtGui.QMouseEvent(QEvent.MouseButtonRelease,
                                                     event.pos(),
                                                     Qt.LeftButton,
                                                     Qt.LeftButton,
                                                     Qt.NoModifier)
                    QApplication.sendEvent(self.tabBar(), releaseEvent)
                    self.manager.startDrag([toolWindow])

                elif self.dragCanStart:
                    self.check_mouse_move(event)

        return QTabWidget.eventFilter(self, obj, event)
コード例 #2
0
	def eventFilter ( self, o, e ):
		if o == self.tabBar () or o == self.cornerWidget () or o == self.tabFrame or o == self.tabFrame.caption:

			# debug msg
			# if e.type () == Qt.QEvent.MouseButtonPress or e.type () == Qt.QEvent.MouseMove:
			# 	if o == self.tabBar ():
			# 		qWarning ( "eventFilter o == self.tabBar ()" )
			# 	elif o == self.cornerWidget ():
			# 		qWarning ( "eventFilter o == self.cornerWidget ()" )
			# 	elif o == self.tabFrame:
			# 		qWarning ( "eventFilter o == self.tabFrame" )
			# 	elif o == self.tabFrame.caption:
			# 		qWarning ( "eventFilter o == self.tabFrame.caption" )

			if e.type () == QEvent.MouseButtonPress and e.buttons () == QtCore.Qt.LeftButton:

				self.areaDragCanStart = False
				self.tabDragCanStart = False
	# if ((pObject == m_pTabFrame & & m_pTabFrame->m_pCaption->rect().contains ( me->pos())) | | pObject == m_pTabFrame->m_pCaption | | (pObject == tabBar() & & tabBar()->tabAt(static_cast < QMouseEvent * > (pEvent)->pos()) >= 0))

				if ( o == self.tabFrame and self.tabFrame.caption.rect ().contains (
						e.pos () ) ) or o == self.tabFrame.caption or (
						o == self.tabBar () and self.tabBar ().tabAt ( e.pos () ) >= 0 ):
					self.tabDragCanStart = True
					# qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart = true" )

				elif self.manager.config.setdefault ( QTWM_AREA_SHOW_DRAG_HANDLE, False ) and (
						o == self.cornerWidget () or ( o == self.tabBar () and self.cornerWidget ().isVisible () and
						self.manager.config.setdefault ( QTWM_AREA_EMPTY_SPACE_DRAG, False ) ) ):
					self.areaDragCanStart = True
					# qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart = true" )

				# MyCode
				# else:
				# 	self.dragCanStart = True

				if self.manager.isMainWrapper ( self.parentWidget () ):
					self.areaDragCanStart = False
					if self.count () == 1:
						self.tabDragCanStart = False

			elif e.type () == QEvent.MouseButtonRelease:
				self.tabDragCanStart = False
				# self.dragCanStart = False
				self.areaDragCanStart = False
				self.manager.updateDragPosition ()
				# qWarning ( "[QToolWindowArea] eventFilter: MouseButtonRelease" )

			elif e.type () == QEvent.MouseMove:
				self.manager.updateDragPosition ()

				if self.tabDragCanStart:
					if self.tabBar ().rect ().contains ( e.pos () ) or ( self.manager.config.setdefault (
						                                                QTWM_AREA_SHOW_DRAG_HANDLE, False ) and self.cornerWidget ().rect ().contains (
						e.pos () ) ):
						return False

					# if qApp.mouseButtons () != QtCore.Qt.LeftButton:
					if e.buttons () != QtCore.Qt.LeftButton:
						return False

					# qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart." )

					toolWindow = self.currentWidget ()
					if cast ( toolWindow, QToolWindowSingleTabAreaFrame ) == self.tabFrame:
						toolWindow = self.tabFrame.contents

					# if toolWindow is None:
					# 	return False
					if not ( toolWindow and self.manager.ownsToolWindow ( toolWindow ) ):
						return False

					self.tabDragCanStart = False
					# qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart = false" )

					# stop internal tab drag in QTabBar
					releaseEvent = QMouseEvent ( QEvent.MouseButtonRelease, e.pos (), QtCore.Qt.LeftButton,
					                             QtCore.Qt.LeftButton, QtCore.Qt.NoModifier )
					qApp.sendEvent ( self.tabBar (), releaseEvent )
					# qApp.sendEvent ( o, releaseEvent )

					self.manager.startDrag ( [ toolWindow ], self )
					# self.releaseMouse ()

				elif self.areaDragCanStart:
					if qApp.mouseButtons () == QtCore.Qt.LeftButton and not ( self.manager.config.setdefault (
						                                                QTWM_AREA_SHOW_DRAG_HANDLE, False ) and self.cornerWidget ().rect ().contains (
						self.mapFromGlobal ( QCursor.pos () ) ) ):

						# qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart." )

						toolWindows = [ ]
						for i in range ( 0, self.count () ):
							toolWindow = self.widget ( i )
							if cast ( toolWindow, QToolWindowSingleTabAreaFrame ) == self.tabFrame:
								toolWindow = self.tabFrame.contents
							toolWindows.append ( toolWindow )

						self.areaDragCanStart = False
						# qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart = false" )

						if self.cornerWidget () != None:
							releaseEvent = QMouseEvent ( Qt.QEvent.MouseButtonRelease, e.pos (), QtCore.Qt.LeftButton,
							                             QtCore.Qt.LeftButton, QtCore.Qt.NoModifier )
							qApp.sendEvent ( self.cornerWidget (), releaseEvent )
						self.manager.startDrag ( toolWindows, self )
						self.releaseMouse ()

				# elif self.dragCanStart:
				# 	self.check_mouse_move ( e )

		return QTabWidget.eventFilter ( self, o, e )