mirror of https://github.com/leafspark/AutoGGUF
feat(window): add minimize/maximize button
- add minimize and maximize button to title bar - improve smoothness of window moving - prevent moving window below taskbar
This commit is contained in:
parent
81b2d4137b
commit
79deff70ed
|
@ -1,4 +1,4 @@
|
||||||
from PySide6.QtCore import QPoint
|
from PySide6.QtCore import QPoint, Qt
|
||||||
from PySide6.QtWidgets import QHBoxLayout, QLabel, QMenuBar, QPushButton, QWidget
|
from PySide6.QtWidgets import QHBoxLayout, QLabel, QMenuBar, QPushButton, QWidget
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,7 +43,29 @@ def __init__(self, parent=None) -> None:
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Enable mouse tracking for smoother movement
|
||||||
|
self.setMouseTracking(True)
|
||||||
|
|
||||||
|
# Add maximize button
|
||||||
|
self.maximize_button = QPushButton("□")
|
||||||
|
self.maximize_button.setFixedSize(30, 30)
|
||||||
|
self.maximize_button.setStyleSheet(
|
||||||
|
"""
|
||||||
|
QPushButton {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 2px;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
self.maximize_button.clicked.connect(self.toggle_maximize)
|
||||||
|
|
||||||
layout.addWidget(self.minimize_button)
|
layout.addWidget(self.minimize_button)
|
||||||
|
layout.addWidget(self.maximize_button)
|
||||||
layout.addWidget(self.close_button)
|
layout.addWidget(self.close_button)
|
||||||
|
|
||||||
self.minimize_button.clicked.connect(self.parent.showMinimized)
|
self.minimize_button.clicked.connect(self.parent.showMinimized)
|
||||||
|
@ -51,22 +73,40 @@ def __init__(self, parent=None) -> None:
|
||||||
|
|
||||||
self.start = QPoint(0, 0)
|
self.start = QPoint(0, 0)
|
||||||
self.pressing = False
|
self.pressing = False
|
||||||
|
self.isMaximized = False # Flag to track maximization state
|
||||||
|
self.normal_size = None # Store the normal window size
|
||||||
|
|
||||||
def mousePressEvent(self, event) -> None:
|
def mousePressEvent(self, event) -> None:
|
||||||
self.start = self.mapToGlobal(event.pos())
|
if event.button() == Qt.LeftButton:
|
||||||
|
self.start = event.globalPos() - self.parent.frameGeometry().topLeft()
|
||||||
self.pressing = True
|
self.pressing = True
|
||||||
|
|
||||||
def mouseMoveEvent(self, event) -> None:
|
def mouseMoveEvent(self, event) -> None:
|
||||||
if self.pressing:
|
if self.pressing:
|
||||||
end = self.mapToGlobal(event.pos())
|
new_pos = event.globalPos() - self.start
|
||||||
movement = end - self.start
|
screen = self.parent.screen()
|
||||||
self.parent.setGeometry(
|
screen_geo = screen.availableGeometry()
|
||||||
self.parent.x() + movement.x(),
|
|
||||||
self.parent.y() + movement.y(),
|
# Check if the new position would put the titlebar below the taskbar
|
||||||
self.parent.width(),
|
if (
|
||||||
self.parent.height(),
|
new_pos.y() + self.parent.height() > screen_geo.bottom()
|
||||||
)
|
): # Use screen_geo.bottom()
|
||||||
self.start = end
|
new_pos.setY(screen_geo.bottom() - self.parent.height())
|
||||||
|
|
||||||
|
self.parent.move(new_pos)
|
||||||
|
|
||||||
def mouseReleaseEvent(self, event) -> None:
|
def mouseReleaseEvent(self, event) -> None:
|
||||||
self.pressing = False
|
self.pressing = False
|
||||||
|
|
||||||
|
def toggle_maximize(self):
|
||||||
|
if self.isMaximized:
|
||||||
|
self.parent.showNormal()
|
||||||
|
if self.normal_size:
|
||||||
|
self.parent.resize(self.normal_size)
|
||||||
|
self.maximize_button.setText("□") # Change back to maximize symbol
|
||||||
|
self.isMaximized = False
|
||||||
|
else:
|
||||||
|
self.normal_size = self.parent.size() # Store the current size
|
||||||
|
self.parent.showMaximized()
|
||||||
|
self.maximize_button.setText("❐") # Change to restore symbol
|
||||||
|
self.isMaximized = True
|
||||||
|
|
Loading…
Reference in New Issue