Skip to content

Commit

Permalink
fix(SideTabWidget): autoexpand toggle during animation
Browse files Browse the repository at this point in the history
  • Loading branch information
du33169 committed Aug 22, 2024
1 parent 399d8cb commit 530b0fc
Showing 1 changed file with 25 additions and 9 deletions.
34 changes: 25 additions & 9 deletions src/QoreWidgets/__pyside6__/__sideTabWidget__/sideTabWidget.py
Original file line number Diff line number Diff line change
@@ -44,6 +44,7 @@ class SideTabBar(QTabBar):
def __init__(self, parent: "SideTabWidget") -> None:
super().__init__(parent)
self.fold=True
self.targetFold=True
self.par:SideTabWidget=parent
self.init_animation()
self.update_target_width()
@@ -53,7 +54,7 @@ def update_target_width(self):

self.setMinimumWidth(targetWidth)
self.setMaximumWidth(targetWidth)
print(targetWidth)
# print(targetWidth)

def init_animation(self):
self.animationMax = QPropertyAnimation(self, b"maximumWidth")
@@ -69,21 +70,28 @@ def init_animation(self):

def on_finished():
# print('done')
self.fold=not self.fold
self.fold=self.targetFold
self.foldStateChanged.emit(self.fold)
# print(self.fold)
self.animationGroup.finished.connect(on_finished)

def toggle(self):
tfold=not self.fold
def setFold(self, newFold:bool)->None:
if newFold == self.targetFold:
return
self.targetFold=newFold
if self.targetFold != self.fold:# animation is running
self.animationGroup.stop()
start=self.width()
end=self.par.expandWidth if not tfold else self.par.foldWidth
end=self.par.expandWidth if not self.targetFold else self.par.foldWidth
self.animationMax.setStartValue(start)
self.animationMax.setEndValue(end)
self.animationMin.setStartValue(start)
self.animationMin.setEndValue(end)
self.animationGroup.start()

def toggle(self):
self.setFold(not self.fold)

def paintEvent(self, event):
painter = QStylePainter(self)
option = QStyleOptionTab()
@@ -104,13 +112,15 @@ def tabSizeHint(self, index):
return size

def enterEvent(self, event: QEvent) -> None:
if self.par.autoExpand and self.fold:
self.toggle()
# print('enter')
if self.par.autoExpand and self.targetFold:
self.setFold(False)
return super().enterEvent(event)

def leaveEvent(self, event: QEvent) -> None:
if self.par.autoExpand and not self.fold:
self.toggle()
# print('leave')
if self.par.autoExpand and not self.targetFold:
self.setFold(True)
return super().leaveEvent(event)

class MenuButton(QPushButton):
@@ -163,6 +173,12 @@ def setFolded(self, fold:bool)->None:
if fold!= self.isFolded():
self.tabbar.toggle()

# def leaveEvent(self, event: QEvent) -> None:
# # sometimes tabbar cannot trigger the leaveEvent if mouse moves too fast, so we need to check the fold state here as a safeguard
# super().leaveEvent(event)
# if self.autoExpand and not self.isFolded():
# self.setFolded(True)

#@override
def setIconSize(self, size:QSize):
super().setIconSize(size)

0 comments on commit 530b0fc

Please sign in to comment.