Files
krowlog/tabs.py

81 lines
2.6 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 ravenui import RavenUI
from settings import Settings
class Tabs(QWidget):
tabs_by_filename = {}
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 create_tab(self, file: str):
if not os.path.isfile(file):
message = QMessageBox(QMessageBox.Icon.Warning, "File not found",
"'%s' is not a file or cannot be opened" % (file))
message.exec()
return
model = LogFileModel(file, self.settings)
full_tab = FullTabWidget(model)
if model.get_file() in self.tabs_by_filename:
for tab_index in range(0, self.tabs.count()):
widget: FullTabWidget = self.tabs.widget(tab_index)
if widget.get_file() == model.get_file():
self.tabs.setCurrentIndex(tab_index)
break
else:
tab_index = self.tabs.addTab(full_tab, model.get_tab_name())
self.tabs_by_filename[model.get_file()] = full_tab
self.tabs.setCurrentIndex(tab_index)
def _current_tab_changed(self, tab_index: int):
full_tab: FullTabWidget = self.tabs.widget(tab_index)
if full_tab:
file = full_tab.file_view.get_file()
file_name = os.path.basename(file)
RavenUI.update_window_title(file_name)
def _close_tab(self, tab_index: int):
full_tab: FullTabWidget = self.tabs.widget(tab_index)
full_tab.destruct()
del self.tabs_by_filename[full_tab.file_view.get_file()]
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
full_tab: FullTabWidget = self.tabs.widget(self.tabs.currentIndex())
return full_tab.get_file()