2015-06-06 11:13:27 +12:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#--!-- coding: utf8 --!--
|
|
|
|
|
2015-06-08 08:06:57 +12:00
|
|
|
|
|
|
|
|
2015-06-06 11:13:27 +12:00
|
|
|
|
|
|
|
from qt import *
|
|
|
|
from enums import *
|
2015-06-07 02:21:08 +12:00
|
|
|
from ui.editors.editorWidget_ui import *
|
2015-06-07 05:10:44 +12:00
|
|
|
from ui.editors.customTextEdit import *
|
2015-06-07 06:29:02 +12:00
|
|
|
from functions import *
|
2015-06-06 11:13:27 +12:00
|
|
|
|
|
|
|
class editorWidget(QWidget, Ui_editorWidget_ui):
|
|
|
|
|
2015-06-07 05:10:44 +12:00
|
|
|
toggledSpellcheck = pyqtSignal(bool)
|
|
|
|
dictChanged = pyqtSignal(str)
|
|
|
|
|
2015-06-06 11:13:27 +12:00
|
|
|
def __init__(self, parent=None):
|
|
|
|
QWidget.__init__(self, parent)
|
|
|
|
self.setupUi(self)
|
|
|
|
self.currentIndex = None
|
|
|
|
self.txtEdits = []
|
|
|
|
self.scroll.setBackgroundRole(QPalette.Base)
|
2015-06-07 05:10:44 +12:00
|
|
|
self.toggledSpellcheck.connect(self.txtRedacText.toggleSpellcheck)
|
|
|
|
self.dictChanged.connect(self.txtRedacText.setDict)
|
|
|
|
self.currentDict = ""
|
|
|
|
self.spellcheck = True
|
2015-06-09 09:36:15 +12:00
|
|
|
self.folderView = "cork"
|
|
|
|
|
|
|
|
def setFolderView(self, v):
|
|
|
|
oldV = self.folderView
|
|
|
|
if v == "cork":
|
|
|
|
self.folderView = "cork"
|
2015-06-09 22:32:43 +12:00
|
|
|
elif v == "outline":
|
|
|
|
self.folderView = "outline"
|
2015-06-09 09:36:15 +12:00
|
|
|
else:
|
|
|
|
self.folderView = "text"
|
|
|
|
|
|
|
|
if oldV != self.folderView and self.currentIndex:
|
|
|
|
self.setCurrentModelIndex(self.currentIndex)
|
|
|
|
|
|
|
|
def setCorkSizeFactor(self, v):
|
|
|
|
self.corkView.itemDelegate().setCorkSizeFactor(v)
|
|
|
|
r = self.corkView.rootIndex()
|
|
|
|
for c in range(r.row()):
|
|
|
|
self.corkView.itemDelegate().sizeHintChanged.emit(r.child(c, 0))
|
2015-06-06 11:13:27 +12:00
|
|
|
|
|
|
|
def setCurrentModelIndex(self, index):
|
|
|
|
|
|
|
|
if index.isValid():
|
2015-06-06 11:32:52 +12:00
|
|
|
|
2015-06-06 11:13:27 +12:00
|
|
|
self.currentIndex = index
|
|
|
|
self._model = index.model()
|
|
|
|
|
|
|
|
item = index.internalPointer()
|
|
|
|
|
2015-06-09 22:32:43 +12:00
|
|
|
# Couting the number of selected items
|
|
|
|
sel = [index]
|
|
|
|
for i in mainWindow().treeRedacOutline.selectionModel().selection().indexes():
|
|
|
|
if i.column() != 0: continue
|
|
|
|
if i not in sel: sel.append(i)
|
2015-06-06 11:13:27 +12:00
|
|
|
|
2015-06-09 22:32:43 +12:00
|
|
|
def addTitle(itm):
|
|
|
|
edt = customTextEdit(self, html="<h{l}>{t}</h{l}>".format(l=min(itm.level()+1, 5), t=itm.title()), autoResize=True)
|
|
|
|
edt.setFrameShape(QFrame.NoFrame)
|
|
|
|
self.txtEdits.append(edt)
|
|
|
|
l.addWidget(edt)
|
|
|
|
|
|
|
|
def addLine():
|
|
|
|
line = QFrame(self.scene)
|
|
|
|
line.setFrameShape(QFrame.HLine)
|
|
|
|
line.setFrameShadow(QFrame.Sunken)
|
|
|
|
l.addWidget(line)
|
|
|
|
|
|
|
|
def addScene(itm):
|
|
|
|
edt = customTextEdit(self, index=itm.index(), spellcheck=self.spellcheck, dict=self.currentDict, autoResize=True)
|
|
|
|
edt.setFrameShape(QFrame.NoFrame)
|
|
|
|
edt.setStatusTip(itm.path())
|
|
|
|
self.toggledSpellcheck.connect(edt.toggleSpellcheck)
|
|
|
|
self.dictChanged.connect(edt.setDict)
|
|
|
|
#edt.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
|
|
|
|
self.txtEdits.append(edt)
|
|
|
|
l.addWidget(edt)
|
|
|
|
|
|
|
|
def addChildren(itm):
|
|
|
|
for c in range(itm.childCount()):
|
|
|
|
child = itm.child(c)
|
|
|
|
|
|
|
|
if child.isFolder():
|
|
|
|
addTitle(child)
|
|
|
|
addChildren(child)
|
|
|
|
|
|
|
|
else:
|
|
|
|
addScene(child)
|
|
|
|
addLine()
|
|
|
|
|
|
|
|
def addSpacer():
|
|
|
|
l.addItem(QSpacerItem(10, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding))
|
|
|
|
|
|
|
|
# Display multiple selected items
|
|
|
|
if len(sel) > 1 and False: # Buggy and not very useful, skip
|
|
|
|
self.stack.setCurrentIndex(1)
|
2015-06-06 11:13:27 +12:00
|
|
|
w = QWidget()
|
|
|
|
l = QVBoxLayout(w)
|
|
|
|
self.txtEdits = []
|
2015-06-09 22:32:43 +12:00
|
|
|
for idx in sel:
|
|
|
|
sItem = idx.internalPointer()
|
|
|
|
addTitle(sItem)
|
|
|
|
if sItem.isFolder():
|
|
|
|
addChildren(sItem)
|
|
|
|
else:
|
|
|
|
addScene(sItem)
|
|
|
|
addLine()
|
|
|
|
addSpacer()
|
|
|
|
self.scroll.setWidget(w)
|
2015-06-06 11:13:27 +12:00
|
|
|
|
2015-06-09 22:32:43 +12:00
|
|
|
elif item.isFolder() and self.folderView == "text":
|
|
|
|
self.stack.setCurrentIndex(1)
|
2015-06-06 11:13:27 +12:00
|
|
|
|
2015-06-09 22:32:43 +12:00
|
|
|
w = QWidget()
|
|
|
|
l = QVBoxLayout(w)
|
|
|
|
#self.scroll.setWidgetResizable(False)
|
2015-06-06 11:13:27 +12:00
|
|
|
|
2015-06-09 22:32:43 +12:00
|
|
|
self.txtEdits = []
|
2015-06-06 11:13:27 +12:00
|
|
|
|
|
|
|
addTitle(item)
|
|
|
|
addChildren(item)
|
2015-06-09 22:32:43 +12:00
|
|
|
addSpacer()
|
2015-06-06 11:13:27 +12:00
|
|
|
self.scroll.setWidget(w)
|
|
|
|
|
2015-06-09 09:36:15 +12:00
|
|
|
elif item.isFolder() and self.folderView == "cork":
|
|
|
|
self.stack.setCurrentIndex(2)
|
|
|
|
self.corkView.setModel(self._model)
|
|
|
|
self.corkView.setRootIndex(self.currentIndex)
|
2015-06-09 22:32:43 +12:00
|
|
|
|
|
|
|
elif item.isFolder() and self.folderView == "outline":
|
|
|
|
self.stack.setCurrentIndex(3)
|
|
|
|
self.outlineView.setModelPersos(mainWindow().mdlPersos)
|
2015-06-10 01:52:20 +12:00
|
|
|
self.outlineView.setModelLabels(mainWindow().mdlLabels)
|
2015-06-11 01:57:44 +12:00
|
|
|
self.outlineView.setModelStatus(mainWindow().mdlStatus)
|
2015-06-09 22:32:43 +12:00
|
|
|
self.outlineView.setModel(self._model)
|
|
|
|
self.outlineView.setRootIndex(self.currentIndex)
|
2015-06-09 09:36:15 +12:00
|
|
|
|
2015-06-06 11:13:27 +12:00
|
|
|
else:
|
|
|
|
self.stack.setCurrentIndex(0)
|
|
|
|
|
2015-06-07 06:29:02 +12:00
|
|
|
self._model.dataChanged.connect(self.modelDataChanged)
|
|
|
|
self.updateStatusBar()
|
|
|
|
|
2015-06-06 11:13:27 +12:00
|
|
|
else:
|
|
|
|
self.currentIndex = None
|
2015-06-07 05:10:44 +12:00
|
|
|
|
2015-06-07 06:29:02 +12:00
|
|
|
def modelDataChanged(self, topLeft, bottomRight):
|
2015-06-09 09:36:15 +12:00
|
|
|
if not self.currentIndex:
|
|
|
|
return
|
2015-06-07 06:29:02 +12:00
|
|
|
if topLeft.row() <= self.currentIndex.row() <= bottomRight.row():
|
|
|
|
self.updateStatusBar()
|
|
|
|
|
|
|
|
def updateStatusBar(self):
|
|
|
|
# Update progress
|
|
|
|
if self.currentIndex and self.currentIndex.isValid():
|
|
|
|
item = self.currentIndex.internalPointer()
|
|
|
|
|
|
|
|
wc = item.data(Outline.wordCount.value)
|
|
|
|
goal = item.data(Outline.goal.value)
|
|
|
|
pg = item.data(Outline.goalPercentage.value)
|
2015-06-07 08:39:43 +12:00
|
|
|
#mw = qApp.activeWindow()
|
|
|
|
|
|
|
|
mw = mainWindow()
|
|
|
|
|
|
|
|
if not mw: return
|
2015-06-07 06:29:02 +12:00
|
|
|
|
|
|
|
if goal:
|
|
|
|
mw.lblRedacProgress.show()
|
|
|
|
rect = mw.lblRedacProgress.geometry()
|
|
|
|
rect = QRect(QPoint(0, 0), rect.size())
|
|
|
|
self.px = QPixmap(rect.size())
|
|
|
|
self.px.fill(Qt.transparent)
|
|
|
|
p = QPainter(self.px)
|
|
|
|
drawProgress(p, rect, pg, 2)
|
|
|
|
del p
|
|
|
|
mw.lblRedacProgress.setPixmap(self.px)
|
2015-06-08 22:01:45 +12:00
|
|
|
mw.lblRedacWC.setText(self.tr("{} words / {}").format(wc, goal))
|
2015-06-07 06:29:02 +12:00
|
|
|
else:
|
|
|
|
mw.lblRedacProgress.hide()
|
2015-06-08 22:01:45 +12:00
|
|
|
mw.lblRedacWC.setText(self.tr("{} words").format(wc))
|
2015-06-07 06:29:02 +12:00
|
|
|
|
2015-06-07 05:10:44 +12:00
|
|
|
def toggleSpellcheck(self, v):
|
|
|
|
self.spellcheck = v
|
|
|
|
self.toggledSpellcheck.emit(v)
|
|
|
|
|
|
|
|
def setDict(self, dct):
|
|
|
|
self.currentDict = dct
|
2015-06-07 08:39:43 +12:00
|
|
|
self.dictChanged.emit(dct)
|
|
|
|
|
|
|
|
def showFullscreen(self):
|
|
|
|
self._parent = self.parent()
|
|
|
|
self._geometry = self.geometry()
|
|
|
|
self._fullscreen = True
|
|
|
|
currentScreen = qApp.desktop().screenNumber(self)
|
|
|
|
self.setParent(None)
|
|
|
|
mainWindow().hide()
|
2015-06-07 08:43:29 +12:00
|
|
|
|
2015-06-07 08:39:43 +12:00
|
|
|
self.stack.setStyleSheet("""
|
|
|
|
QTextEdit {{
|
|
|
|
margin-left: {m}px;
|
|
|
|
margin-right: {m}px;
|
|
|
|
}};""".format(
|
|
|
|
m=str((qApp.desktop().screenGeometry(currentScreen).width() - 800) / 2))
|
|
|
|
)
|
|
|
|
|
2015-06-08 08:06:57 +12:00
|
|
|
self.move(qApp.desktop().screenGeometry(currentScreen).topLeft())
|
2015-06-07 08:39:43 +12:00
|
|
|
QWidget.showFullScreen(self)
|
|
|
|
|
2015-06-08 08:06:57 +12:00
|
|
|
#FIXME: too big?
|
|
|
|
print(qApp.desktop().screenGeometry(currentScreen), self.geometry())
|
|
|
|
|
2015-06-07 08:39:43 +12:00
|
|
|
|
|
|
|
|
|
|
|
def keyPressEvent(self, event):
|
2015-06-07 08:43:29 +12:00
|
|
|
if event.key() in [Qt.Key_Escape, Qt.Key_F11] and self._fullscreen:
|
2015-06-07 08:39:43 +12:00
|
|
|
mainWindow().show()
|
|
|
|
self.stack.setStyleSheet("")
|
|
|
|
self.setGeometry(self._geometry)
|
|
|
|
self.setParent(self._parent)
|
|
|
|
self._parent.layout().insertWidget(1, self)
|
|
|
|
self._fullscreen = False
|
|
|
|
else:
|
|
|
|
QWidget.keyPressEvent(self, event)
|