59 lines
1.8 KiB
Python
59 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 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)
|
|
big_text = BigText(model, self.settings)
|
|
|
|
if big_text.get_file() in self.tabs_by_filename:
|
|
for tab_index in range(0, self.tabs.count()):
|
|
widget : BigText = self.tabs.widget(tab_index)
|
|
if widget.get_file() == big_text.get_file():
|
|
self.tabs.setCurrentIndex(tab_index)
|
|
break
|
|
else:
|
|
tab_index = self.tabs.addTab(big_text, model.get_tab_name())
|
|
self.tabs_by_filename[big_text.get_file()] = big_text
|
|
self.tabs.setCurrentIndex(tab_index)
|
|
|
|
def _close_tab(self, tab_index: int):
|
|
big_text: BigText = self.tabs.widget(tab_index)
|
|
del self.tabs_by_filename[big_text.get_file()]
|
|
self.tabs.removeTab(tab_index)
|
|
|
|
|