Browse Source

Mainwindow: show unsaved files

master
Denis Tereshkin 7 years ago
parent
commit
ea68335124
  1. 14
      src/nailab/ui/mainwindow.py
  2. 34
      src/nailab/ui/strategywidget.py

14
src/nailab/ui/mainwindow.py

@ -30,8 +30,10 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui = Ui_MainWindow() self.ui = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
def openTrades(self): def savedChanged(self):
pass for i in range(0, self.ui.tabs.count()):
print(i, self.ui.tabs.widget(i).is_saved())
self.update_tab_name(i)
def newStrategy(self): def newStrategy(self):
self._makeEditor(content=new_strategy_template) self._makeEditor(content=new_strategy_template)
@ -44,6 +46,13 @@ class MainWindow(QtWidgets.QMainWindow):
self._makeEditor(filename, os.path.basename(filename), f.read()) self._makeEditor(filename, os.path.basename(filename), f.read())
settings.setValue("open_strategy_path", os.path.dirname(filename)) settings.setValue("open_strategy_path", os.path.dirname(filename))
def update_tab_name(self, index):
tabname = os.path.basename(self.ui.tabs.widget(index).source_file)
if not self.ui.tabs.widget(index).is_saved():
tabname += " *"
self.ui.tabs.setTabText(index, tabname)
def saveStrategy(self): def saveStrategy(self):
settings = QtCore.QSettings() settings = QtCore.QSettings()
currentWidget = self.ui.tabs.currentWidget() currentWidget = self.ui.tabs.currentWidget()
@ -81,4 +90,5 @@ class MainWindow(QtWidgets.QMainWindow):
editor = StrategyWidget(self.datasourcemanager, source_file, self, content) editor = StrategyWidget(self.datasourcemanager, source_file, self, content)
self.sources.append(source_file) self.sources.append(source_file)
self.ui.tabs.addTab(editor, tab_name) self.ui.tabs.addTab(editor, tab_name)
editor.savedChanged.connect(self.savedChanged)

34
src/nailab/ui/strategywidget.py

@ -1,5 +1,6 @@
import os.path import os.path
import datetime
import numpy as np import numpy as np
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
@ -27,13 +28,18 @@ class FileModifiedHandler(FileSystemEventHandler):
class StrategyWidget(QtWidgets.QWidget): class StrategyWidget(QtWidgets.QWidget):
savedChanged = QtCore.pyqtSignal(name="savedChanged")
def __init__(self, datasourcemanager, source_file, parent=None, content=None): def __init__(self, datasourcemanager, source_file, parent=None, content=None):
super().__init__(parent) super().__init__(parent)
self.ui = Ui_StrategyWidget() self.ui = Ui_StrategyWidget()
self.ui.setupUi(self) self.ui.setupUi(self)
self.source_file = source_file self.saved = False
self.save_timestamp = datetime.datetime.now()
self.ui.editor.textChanged.connect(self.editorTextChanged)
s = QtCore.QSettings() s = QtCore.QSettings()
@ -51,6 +57,11 @@ class StrategyWidget(QtWidgets.QWidget):
if content is not None: if content is not None:
self.ui.editor.setText(content) self.ui.editor.setText(content)
self.source_file = source_file
if self.source_file is not None:
self.saved = True
lexer = QsciLexerPython() lexer = QsciLexerPython()
lexer.setFont(font) lexer.setFont(font)
self.ui.editor.setLexer(lexer) self.ui.editor.setLexer(lexer)
@ -78,6 +89,15 @@ class StrategyWidget(QtWidgets.QWidget):
except Exception as e: except Exception as e:
print("Exception: ", e) print("Exception: ", e)
def is_saved(self):
return self.saved
def editorTextChanged(self):
saved = self.saved
self.saved = False
if saved:
self.savedChanged.emit()
def addDataSource(self): def addDataSource(self):
dlg = NewDataSourceDialog(self) dlg = NewDataSourceDialog(self)
if dlg.exec() == QtWidgets.QDialog.Accepted: if dlg.exec() == QtWidgets.QDialog.Accepted:
@ -109,8 +129,13 @@ class StrategyWidget(QtWidgets.QWidget):
def save(self): def save(self):
self.save_timestamp = datetime.datetime.now()
with open(self.source_file, "w") as f: with open(self.source_file, "w") as f:
f.write(self.ui.editor.text()) f.write(self.ui.editor.text())
saved = self.saved
self.saved = True
if not saved:
self.savedChanged.emit()
def get_time_window(self): def get_time_window(self):
if self.ui.rb_allData.isChecked(): if self.ui.rb_allData.isChecked():
@ -248,9 +273,10 @@ class StrategyWidget(QtWidgets.QWidget):
def file_modified(self, fname): def file_modified(self, fname):
try: try:
if self.source_file is not None and os.path.samefile(self.source_file, fname): if datetime.datetime.now() - self.save_timestamp > datetime.timedelta(seconds=2):
with open(self.source_file, "r") as f: if self.source_file is not None and os.path.samefile(self.source_file, fname):
self.ui.editor.setText(f.read()) with open(self.source_file, "r") as f:
self.ui.editor.setText(f.read())
except: except:
# Saving file from the outside generates a lot of events, as temporary and backup files are created and removed. # Saving file from the outside generates a lot of events, as temporary and backup files are created and removed.
# Hence, we ignore errors # Hence, we ignore errors

Loading…
Cancel
Save