do not open same file twice

This commit is contained in:
2021-10-26 11:05:07 +02:00
parent 8fc682444d
commit 3b330b2fca
4 changed files with 74 additions and 22 deletions

View File

@@ -24,6 +24,7 @@ class BigText(QWidget):
def __init__(self, model: LogFileModel, settings: Settings): def __init__(self, model: LogFileModel, settings: Settings):
super(BigText, self).__init__() super(BigText, self).__init__()
self.model = model
self.grid = QGridLayout() self.grid = QGridLayout()
self.grid.setContentsMargins(0, 0, 0, 0) self.grid.setContentsMargins(0, 0, 0, 0)
self.grid.setHorizontalSpacing(0) self.grid.setHorizontalSpacing(0)
@@ -46,6 +47,9 @@ class BigText(QWidget):
self.grid.addWidget(self.h_scroll_bar, 1, 0) self.grid.addWidget(self.h_scroll_bar, 1, 0)
self.grid.addWidget(self.v_scroll_bar, 0, 1) self.grid.addWidget(self.v_scroll_bar, 0, 1)
def get_file(self):
return self.model.get_file()
class InnerBigText(QWidget): class InnerBigText(QWidget):
_byte_offset = 0 _byte_offset = 0

View File

@@ -10,7 +10,13 @@ class LogFileModel:
_lock = threading.RLock() _lock = threading.RLock()
def __init__(self, file): def __init__(self, file):
self._file = file self._file = os.path.realpath(file)
def get_file(self):
return self._file
def __str__(self):
return self._file
def get_tab_name(self): def get_tab_name(self):
file_name = os.path.basename(self._file) file_name = os.path.basename(self._file)

26
main.py
View File

@@ -11,6 +11,7 @@ import sys
from bigtext import BigText from bigtext import BigText
from logFileModel import LogFileModel from logFileModel import LogFileModel
from settings import Settings from settings import Settings
from tabs import Tabs
MAX_LINE_LENGTH = 4096 MAX_LINE_LENGTH = 4096
@@ -23,9 +24,9 @@ class MainWindow(QMainWindow):
self.setGeometry(0, 0, 640, 480) self.setGeometry(0, 0, 640, 480)
self.setDockNestingEnabled(True) self.setDockNestingEnabled(True)
self.tabs = self.create_tabs() self.tabs = Tabs(self.settings)
self.create_tab("/home/andi/ws/performanceDb/data/production/logs_2018-09-06_2018-09-06.csv") self.tabs.create_tab("/home/andi/ws/performanceDb/data/production/logs_2018-09-06_2018-09-06.csv")
self.create_tab("/home/andi/ws/ravenlog/example.log") self.tabs.create_tab("/home/andi/ws/ravenlog/example.log")
self.setCentralWidget(self.tabs) self.setCentralWidget(self.tabs)
@@ -54,23 +55,6 @@ class MainWindow(QMainWindow):
def on_follow_file_changed(self, e): def on_follow_file_changed(self, e):
print(e) print(e)
def create_tabs(self) -> QTabWidget:
tabs = QTabWidget()
tabs.setTabsClosable(True)
tabs.tabCloseRequested.connect(lambda index: tabs.removeTab(index) )
return 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)
self.tabs.addTab(big_text, model.get_tab_name())
# open the new tab
self.tabs.setCurrentIndex(self.tabs.count()-1)
def create_menu_bar(self) -> QMenuBar: def create_menu_bar(self) -> QMenuBar:
menu_bar = QMenuBar() menu_bar = QMenuBar()
@@ -93,7 +77,7 @@ class MainWindow(QMainWindow):
def _open_file(self) -> None: def _open_file(self) -> None:
dialog = QFileDialog(self) dialog = QFileDialog(self)
(selected_file, _filter) = dialog.getOpenFileName(caption=self.tr("Open File")) (selected_file, _filter) = dialog.getOpenFileName(caption=self.tr("Open File"))
self.create_tab(selected_file) self.tabs.create_tab(selected_file)

58
tabs.py Normal file
View 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)