settingsWindow
diff --git a/src/mainWindow.py b/src/mainWindow.py
index 844e0f7e..ed2e7950 100644
--- a/src/mainWindow.py
+++ b/src/mainWindow.py
@@ -457,6 +457,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if sttgns.contains("searchState"):
state = False if sttgns.value("searchState") == "false" else True
self.grpSearch.restoreState(state)
+ if sttgns.contains("revisionsState"):
+ state = [False if v == "false" else True for v in sttgns.value("revisionsState")]
+ self.redacMetadata.revisions.restoreState(state)
def closeEvent(self, event):
@@ -469,6 +472,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
sttgns.setValue("redacInfosState", self.tabRedacInfos.currentIndex())
sttgns.setValue("cheatSheetState", self.grpCheatSheet.saveState())
sttgns.setValue("searchState", self.grpSearch.saveState())
+ sttgns.setValue("revisionsState", self.redacMetadata.revisions.saveState())
# Specific settings to save before quitting
settings.lastTab = self.tabMain.currentIndex()
diff --git a/src/ui/revisions.py b/src/ui/revisions.py
index 5bd1ca90..2601a27d 100644
--- a/src/ui/revisions.py
+++ b/src/ui/revisions.py
@@ -9,6 +9,7 @@ from functions import *
import models.references as Ref
import datetime
import difflib
+import re
class revisions(QWidget, Ui_revisions):
@@ -21,6 +22,10 @@ class revisions(QWidget, Ui_revisions):
self.listDelegate = listCompleterDelegate(self)
self.list.setItemDelegate(self.listDelegate)
self.list.itemActivated.connect(self.showDiff)
+ self.btnDelete.setEnabled(False)
+ self.btnRestore.clicked.connect(self.restore)
+ self.btnRestore.setEnabled(False)
+
#self.list.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.menu = QMenu(self)
@@ -101,12 +106,21 @@ class revisions(QWidget, Ui_revisions):
return self.tr("{} seconds ago").format(str(delta.seconds))
def showDiff(self):
- #FIXME: doesn't work for HTML formatting.
+ # UI stuff
+ self.actShowSpaces.setEnabled(self.actShowDiff.isChecked())
+ self.actDiffOnly.setEnabled(self.actShowDiff.isChecked())
+
+ #FIXME: Errors in line number
i = self.list.currentItem()
if not i:
+ self.btnDelete.setEnabled(False)
+ self.btnRestore.setEnabled(False)
return
+ self.btnDelete.setEnabled(True)
+ self.btnRestore.setEnabled(True)
+
ts = i.data(Qt.UserRole)
item = self._index.internalPointer()
@@ -145,25 +159,40 @@ class revisions(QWidget, Ui_revisions):
skip = False
continue
+ # Same line
if op == " " and not self.actDiffOnly.isChecked():
if item.type() == "t2t":
txt = Ref.basicT2TFormat(txt)
mydiff += "{}{}".format(txt, extra)
+
elif op == "- " and op2 == "+ ":
if self.actDiffOnly.isChecked():
- mydiff += "
{}:
".format(str(n))
+ mydiff += "
{}
".format(
+ self.tr("Line {}:").format(str(n)))
s = difflib.SequenceMatcher(None, txt, txt2, autojunk=False)
+ newline = ""
for tag, i1, i2, j1, j2 in s.get_opcodes():
if tag == "equal":
- mydiff += txt[i1:i2]
+ newline += txt[i1:i2]
elif tag == "delete":
- mydiff += "{}".format(_format(txt[i1:i2]))
+ newline += "{}".format(_format(txt[i1:i2]))
elif tag == "insert":
- mydiff += "{}".format(_format(txt2[j1:j2]))
+ newline += "{}".format(_format(txt2[j1:j2]))
elif tag == "replace":
- mydiff += "{}".format(_format(txt[i1:i2]))
- mydiff += "{}".format(_format(txt2[j1:j2]))
- mydiff += extra
+ newline += "{}".format(_format(txt[i1:i2]))
+ newline += "{}".format(_format(txt2[j1:j2]))
+
+ # Few ugly tweaks for html diffs
+ newline = re.sub(r"(()",
+ "\\1\\2\\3", newline)
+ newline = re.sub(r"cenrighter\" style=\" -qt-block-indent:0; -qt-user-state:0; \">(.*?)
",
+ "\\1
", newline)
+ newline = re.sub(r"centeright\" style=\" -qt-block-indent:0; -qt-user-state:0; \">(.*)
",
+ "\\1
", newline)
+ newline = re.sub(r")(.*?)()(.*?)>(.*?)
",
+ "\\1\\5\\3
", newline)
+
+ mydiff += newline + extra
skip = True
elif op == "- ":
if self.actDiffOnly.isChecked():
@@ -176,6 +205,34 @@ class revisions(QWidget, Ui_revisions):
self.view.setText(mydiff)
+ def restore(self):
+ i = self.list.currentItem()
+ if not i:
+ return
+ ts = i.data(Qt.UserRole)
+ item = self._index.internalPointer()
+ textBefore = [r[1] for r in item.revisions() if r[0] == ts][0]
+ index = self._index.sibling(self._index.row(), Outline.text.value)
+ self._index.model().setData(index, textBefore)
+ #item.setData(Outline.text.value, textBefore)
+
+
+ def saveState(self):
+ return [
+ self.actShowDiff.isChecked(),
+ self.actShowVersion.isChecked(),
+ self.actShowSpaces.isChecked(),
+ self.actDiffOnly.isChecked(),
+ ]
+
+ def restoreState(self, state):
+ self.actShowDiff.setChecked(state[0])
+ self.actShowVersion.setChecked(state[1])
+ self.actShowSpaces.setChecked(state[2])
+ self.actDiffOnly.setChecked(state[3])
+ self.actShowSpaces.setEnabled(self.actShowDiff.isChecked())
+ self.actDiffOnly.setEnabled(self.actShowDiff.isChecked())
+
class listCompleterDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
diff --git a/src/ui/revisions_ui.py b/src/ui/revisions_ui.py
index c8f84716..7bd8ce5d 100644
--- a/src/ui/revisions_ui.py
+++ b/src/ui/revisions_ui.py
@@ -57,11 +57,9 @@ class Ui_revisions(object):
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.btnRestore = QtWidgets.QPushButton(self.layoutWidget)
- self.btnRestore.setEnabled(False)
self.btnRestore.setObjectName("btnRestore")
self.horizontalLayout_2.addWidget(self.btnRestore)
self.btnDelete = QtWidgets.QPushButton(self.layoutWidget)
- self.btnDelete.setEnabled(False)
self.btnDelete.setObjectName("btnDelete")
self.horizontalLayout_2.addWidget(self.btnDelete)
self.verticalLayout_2.addWidget(self.splitter)
diff --git a/src/ui/revisions_ui.ui b/src/ui/revisions_ui.ui
index 5f2d098f..333ce9d9 100644
--- a/src/ui/revisions_ui.ui
+++ b/src/ui/revisions_ui.ui
@@ -93,9 +93,6 @@
-
-
- false
-
Restore
@@ -103,9 +100,6 @@
-
-
- false
-
Delete
diff --git a/src/ui/views/metadataView.py b/src/ui/views/metadataView.py
index fbdcb7cd..c99304fb 100644
--- a/src/ui/views/metadataView.py
+++ b/src/ui/views/metadataView.py
@@ -79,11 +79,11 @@ class metadataView(QWidget, Ui_metadataView):
self.grpSummary.saveState(),
self.grpNotes.saveState(),
self.grpRevisions.saveState(),
+ self.revisions.saveState()
]
def restoreState(self, state):
- self.grpProperties.restoreState(state[0]),
- self.grpSummary.restoreState(state[1]),
- self.grpNotes.restoreState(state[2]),
- self.grpRevisions.restoreState(state[3]),
-
\ No newline at end of file
+ self.grpProperties.restoreState(state[0])
+ self.grpSummary.restoreState(state[1])
+ self.grpNotes.restoreState(state[2])
+ self.grpRevisions.restoreState(state[3])
\ No newline at end of file