do not open same file twice
This commit is contained in:
58
tabs.py
Normal file
58
tabs.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user