import os from typing import Mapping, Optional from PyQt6.QtWidgets import * from PyQt6.QtCore import * from PyQt6.QtGui import * from bigtext import BigText from fulltabwidget import FullTabWidget from logFileModel import LogFileModel from raven.plugins.ravenlog.Tab import Tab from ravenui import RavenUI from settings import Settings class Tabs(QWidget): def __init__(self, settings: Settings): super(Tabs, self).__init__() self.settings = settings self.tabs = QTabWidget() self.tabs.setTabsClosable(True) self.tabs.setMovable(True) self.tabs.tabCloseRequested.connect(self._close_tab) self.tabs.currentChanged.connect(self._current_tab_changed) self.layout = QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.addWidget(self.tabs) def add_tab(self, tab: Tab): # if tab already exists then open it for tab_index in range(0, self.tabs.count()): widget: Tab = self.tabs.widget(tab_index) if widget.unique_id == tab.unique_id: self.tabs.setCurrentIndex(tab_index) return tab_index = self.tabs.addTab(tab, tab.title) self.tabs.setCurrentIndex(tab_index) def _current_tab_changed(self, tab_index: int): tab: Tab = self.tabs.widget(tab_index) if tab: RavenUI.update_window_title(tab.title) RavenUI.update_status_bar(tab.get_status_text()) else: RavenUI.update_window_title("") RavenUI.update_status_bar("") def _close_tab(self, tab_index: int): full_tab: Tab = self.tabs.widget(tab_index) full_tab.destruct() self.tabs.removeTab(tab_index) def destruct(self): while self.tabs.count() > 0: self._close_tab(0) def _current_tab(self) -> int: return self.tabs.currentIndex() def current_file(self) -> Optional[str]: if self.tabs.currentIndex() < 0: return None tab: Tab = self.tabs.widget(self.tabs.currentIndex()) return tab.get_file()