diff --git a/wobuzz/ui/playlist_tabs/__init__.py b/wobuzz/ui/playlist_tabs/__init__.py index 9270c1a..e66c743 100644 --- a/wobuzz/ui/playlist_tabs/__init__.py +++ b/wobuzz/ui/playlist_tabs/__init__.py @@ -1,5 +1,4 @@ #!/usr/bin/python3 from .tab_widget import PlaylistTabs -from .tab_bar import PlaylistTabBar -from .tab_title import TabTitle \ No newline at end of file + diff --git a/wobuzz/ui/playlist_tabs/tab_bar.py b/wobuzz/ui/playlist_tabs/tab_bar.py index 02b9f18..84af0af 100644 --- a/wobuzz/ui/playlist_tabs/tab_bar.py +++ b/wobuzz/ui/playlist_tabs/tab_bar.py @@ -1,8 +1,10 @@ #!/usr/bin/python3 -from PyQt6.QtGui import QDragEnterEvent +from PyQt6.QtGui import QDragEnterEvent, QContextMenuEvent from PyQt6.QtWidgets import QTabBar +from .tab_context_menu import PlaylistContextMenu + class PlaylistTabBar(QTabBar): def __init__(self, parent=None): @@ -11,6 +13,8 @@ class PlaylistTabBar(QTabBar): self.tab_widget = parent self.app = parent.library.app + self.context_menu = PlaylistContextMenu(self) + self.setAcceptDrops(True) self.tabBarClicked.connect(self.on_click) @@ -33,3 +37,13 @@ class PlaylistTabBar(QTabBar): self.app.player.start_playlist(playlist) + def contextMenuEvent(self, event: QContextMenuEvent, title=None): + if title is None: + pos = event.pos() + + index = self.tabAt(pos) + title = self.tabButton(index, QTabBar.ButtonPosition.RightSide) + print(index) + + self.context_menu.exec(event.globalPos(), title) + diff --git a/wobuzz/ui/playlist_tabs/tab_context_menu.py b/wobuzz/ui/playlist_tabs/tab_context_menu.py new file mode 100644 index 0000000..8ed9269 --- /dev/null +++ b/wobuzz/ui/playlist_tabs/tab_context_menu.py @@ -0,0 +1,29 @@ +#!/usr/bin/python3 + +from PyQt6.QtCore import QPoint +from PyQt6.QtGui import QAction +from PyQt6.QtWidgets import QMenu, QTabBar + + +class PlaylistContextMenu(QMenu): + def __init__(self, parent=None): + super().__init__(parent) + + self.tab_bar: QTabBar = parent + + self.playlist_title = None + + self.rename_action = QAction("Rename") + + self.addAction(self.rename_action) + + self.rename_action.triggered.connect(self.rename) + + def exec(self, pos: QPoint, title): + self.playlist_title = title + + super().exec(pos) + + def rename(self): + self.playlist_title.setFocus() + diff --git a/wobuzz/ui/playlist_tabs/tab_title.py b/wobuzz/ui/playlist_tabs/tab_title.py index 0c4ef38..0f4bd79 100644 --- a/wobuzz/ui/playlist_tabs/tab_title.py +++ b/wobuzz/ui/playlist_tabs/tab_title.py @@ -16,7 +16,9 @@ class TabTitle(QLineEdit): self.setStyleSheet("QLineEdit {background: transparent;}") - self.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.setFocusPolicy(Qt.FocusPolicy.TabFocus) + + self.returnPressed.connect(self.clearFocus) def mouseDoubleClickEvent(self, event: QMouseEvent): self.tab_bar.tabBarDoubleClicked.emit(self.index) @@ -25,3 +27,6 @@ class TabTitle(QLineEdit): self.tab_bar.tabBarClicked.emit(self.index) self.tab_bar.setCurrentIndex(self.index) + def contextMenuEvent(self, event): + self.tab_bar.contextMenuEvent(event, self) +