do not open same file twice
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
26
main.py
@@ -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
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