manuskript/src/ui/editors/editorWidget.py

203 lines
7.2 KiB
Python
Raw Normal View History

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 *
from ui.editors.editorWidget_ui import *
2015-06-07 05:10:44 +12:00
from ui.editors.customTextEdit import *
from ui.editors.corkDelegate import *
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
self.folderView = "cork"
self.corkView.setResizeMode(QListView.Adjust)
self.corkView.setWrapping(True)
self.corkView.setItemDelegate(corkDelegate())
self.corkView.setSpacing(5)
self.corkView.setStyleSheet("""QListView {
background:#926239;
}""")
def setFolderView(self, v):
oldV = self.folderView
if v == "cork":
self.folderView = "cork"
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()
if item.isFolder() and self.folderView == "text":
2015-06-06 11:13:27 +12:00
self.stack.setCurrentIndex(1)
w = QWidget()
l = QVBoxLayout(w)
#self.scroll.setWidgetResizable(False)
self.txtEdits = []
def addTitle(itm):
edt = customTextEdit(self, html="<h{l}>{t}</h{l}>".format(l=min(itm.level()+1, 5), t=itm.title()), autoResize=True)
2015-06-06 11:13:27 +12:00
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)
2015-06-06 11:13:27 +12:00
edt.setFrameShape(QFrame.NoFrame)
2015-06-06 11:32:52 +12:00
edt.setStatusTip(itm.path())
2015-06-07 05:10:44 +12:00
self.toggledSpellcheck.connect(edt.toggleSpellcheck)
self.dictChanged.connect(edt.setDict)
2015-06-06 11:13:27 +12:00
#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()
addTitle(item)
addChildren(item)
l.addItem(QSpacerItem(10, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding))
self.scroll.setWidget(w)
elif item.isFolder() and self.folderView == "cork":
self.stack.setCurrentIndex(2)
self.corkView.setModel(self._model)
self.corkView.setRootIndex(self.currentIndex)
2015-06-06 11:13:27 +12:00
else:
self.stack.setCurrentIndex(0)
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
def modelDataChanged(self, topLeft, bottomRight):
if not self.currentIndex:
return
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)
#mw = qApp.activeWindow()
mw = mainWindow()
if not mw: return
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))
else:
mw.lblRedacProgress.hide()
2015-06-08 22:01:45 +12:00
mw.lblRedacWC.setText(self.tr("{} words").format(wc))
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
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
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())
QWidget.showFullScreen(self)
2015-06-08 08:06:57 +12:00
#FIXME: too big?
print(qApp.desktop().screenGeometry(currentScreen), self.geometry())
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:
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)