60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
import os
|
|
from typing import Mapping
|
|
|
|
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 settings import Settings
|
|
|
|
class Tabs(QWidget):
|
|
|
|
tabs_by_index = {}
|
|
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.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 _close_tab(self, tab_index: int):
|
|
full_tab: FullTabWidget = self.tabs.widget(tab_index)
|
|
del self.tabs_by_filename[full_tab.file_view.get_file()]
|
|
self.tabs.removeTab(tab_index)
|
|
|
|
|