Files
krowlog/tabs.py
Andreas Huber 614968ca4b move the log file viewer to its own plugin
We plan to have multiple different types of tabs.
2021-12-04 16:53:02 +01:00

71 lines
2.1 KiB
Python

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()