~tigefa/retext/retext

« back to all changes in this revision

Viewing changes to ReText/window.py

  • Committer: Dmitry Shachnev
  • Date: 2014-05-03 11:51:15 UTC
  • Revision ID: git-v1:ace0e1991b43c97a9879361bca0b371020f46b82
Drop Qt 4.x support

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 
6
6
import markups
7
7
from subprocess import Popen
8
 
from ReText import QtCore, QtPrintSupport, QtGui, QtWidgets, QtWebKitWidgets, \
9
 
 icon_path, DOCTYPE_MARKDOWN, DOCTYPE_REST, app_name, app_version, globalSettings, \
10
 
 settings, readListFromSettings, writeListToSettings, writeToSettings, \
11
 
 datadirs, enchant, enchant_available
 
8
from ReText import icon_path, DOCTYPE_MARKDOWN, DOCTYPE_REST, app_name, \
 
9
 app_version, globalSettings, settings, readListFromSettings, \
 
10
 writeListToSettings, writeToSettings, datadirs, enchant, enchant_available
12
11
from ReText.webpages import wpInit, wpUpdateAll
13
12
from ReText.dialogs import HtmlDialog, LocaleDialog
14
13
from ReText.config import ConfigDialog
15
14
from ReText.highlighter import ReTextHighlighter
16
15
from ReText.editor import ReTextEdit
17
16
 
18
 
(QDir, QFile, QFileInfo, QIODevice, QLocale, QRect, QTemporaryFile, QTextCodec,
19
 
 QTextStream, QTimer, QUrl, Qt) = (QtCore.QDir, QtCore.QFile, QtCore.QFileInfo,
20
 
 QtCore.QIODevice, QtCore.QLocale, QtCore.QRect, QtCore.QTemporaryFile,
21
 
 QtCore.QTextCodec, QtCore.QTextStream, QtCore.QTimer, QtCore.QUrl, QtCore.Qt)
22
 
(QDesktopServices, QFont, QFontMetrics, QIcon, QKeySequence, QTextCursor,
23
 
 QTextDocument) = (QtGui.QDesktopServices, QtGui.QFont, QtGui.QFontMetrics,
24
 
 QtGui.QIcon, QtGui.QKeySequence, QtGui.QTextCursor, QtGui.QTextDocument)
25
 
(QAction, QActionGroup, QApplication, QCheckBox, QComboBox, QDesktopWidget, QDialog,
26
 
 QFileDialog, QFontDialog, QInputDialog, QLabel, QLineEdit, QMainWindow, QMenuBar,
27
 
 QMessageBox, QSplitter, QTabWidget, QTextBrowser, QTextEdit, QToolBar) = (
28
 
 QtWidgets.QAction, QtWidgets.QActionGroup, QtWidgets.QApplication, QtWidgets.QCheckBox,
29
 
 QtWidgets.QComboBox, QtWidgets.QDesktopWidget, QtWidgets.QDialog, QtWidgets.QFileDialog,
30
 
 QtWidgets.QFontDialog, QtWidgets.QInputDialog, QtWidgets.QLabel, QtWidgets.QLineEdit,
31
 
 QtWidgets.QMainWindow, QtWidgets.QMenuBar, QtWidgets.QMessageBox, QtWidgets.QSplitter,
32
 
 QtWidgets.QTabWidget, QtWidgets.QTextBrowser, QtWidgets.QTextEdit, QtWidgets.QToolBar)
33
 
(QPrintDialog, QPrintPreviewDialog, QPrinter) = (QtPrintSupport.QPrintDialog,
34
 
 QtPrintSupport.QPrintPreviewDialog, QtPrintSupport.QPrinter)
35
 
(QWebPage, QWebView) = (QtWebKitWidgets.QWebPage, QtWebKitWidgets.QWebView)
36
 
 
37
 
useAppDisplayName = hasattr(QApplication, 'applicationDisplayName')
 
17
from PyQt5.QtCore import QDir, QFile, QFileInfo, QIODevice, QLocale, QRect, \
 
18
 QTextCodec, QTextStream, QTimer, QUrl, Qt
 
19
from PyQt5.QtGui import QDesktopServices, QFont, QFontMetrics, QIcon, \
 
20
 QKeySequence, QTextCursor, QTextDocument, QTextDocumentWriter
 
21
from PyQt5.QtWidgets import QAction, QActionGroup, QApplication, QCheckBox, \
 
22
 QComboBox, QDesktopWidget, QDialog, QFileDialog, QFontDialog, QInputDialog, \
 
23
 QLineEdit, QMainWindow, QMenuBar, QMessageBox, QSplitter, QTabWidget, \
 
24
 QTextBrowser, QTextEdit, QToolBar
 
25
from PyQt5.QtPrintSupport import QPrintDialog, QPrintPreviewDialog, QPrinter
 
26
from PyQt5.QtWebKitWidgets import QWebPage, QWebView
38
27
 
39
28
def getSaveFileName(*args):
40
29
        result = QFileDialog.getSaveFileName(*args)
41
30
        return result[0] if isinstance(result, tuple) else result
42
31
 
43
 
def setWindowTitle(window, title):
44
 
        if not useAppDisplayName:
45
 
                title += ' \u2014 ' + app_name
46
 
        QMainWindow.setWindowTitle(window, title)
47
 
 
48
 
dialogTitle = '' if useAppDisplayName else app_name
49
 
 
50
32
class ReTextWindow(QMainWindow):
51
33
        def __init__(self, parent=None):
52
34
                QMainWindow.__init__(self, parent)
248
230
                menuFile.addSeparator()
249
231
                menuExport = menuFile.addMenu(self.tr('Export'))
250
232
                menuExport.addAction(self.actionPerfectHtml)
251
 
                if hasattr(QtGui, 'QTextDocumentWriter'): # PYSIDE-177
252
 
                        menuExport.addAction(self.actionOdf)
 
233
                menuExport.addAction(self.actionOdf)
253
234
                menuExport.addAction(self.actionPdf)
254
235
                if self.extensionActions:
255
236
                        menuExport.addSeparator()
283
264
                menuFormat.addAction(self.actionBold)
284
265
                menuFormat.addAction(self.actionItalic)
285
266
                menuFormat.addAction(self.actionUnderline)
286
 
                if QtCore.__package__ != 'PySide': # PYSIDE-213
287
 
                        menuEdit.addAction(self.actionWebKit)
 
267
                menuEdit.addAction(self.actionWebKit)
288
268
                menuEdit.addSeparator()
289
269
                menuEdit.addAction(self.actionViewHtml)
290
270
                menuEdit.addAction(self.actionLivePreview)
518
498
                if self.fileNames[ind]:
519
499
                        self.setCurrentFile()
520
500
                else:
521
 
                        setWindowTitle(self, self.tr('New document') + '[*]')
 
501
                        self.setWindowTitle(self.tr('New document') + '[*]')
522
502
                        self.docTypeChanged()
523
503
                self.modificationChanged(self.editBoxes[ind].document().isModified())
524
504
                if globalSettings.restorePreviewState:
591
571
        
592
572
        def openConfigDialog(self):
593
573
                dlg = ConfigDialog(self)
594
 
                setWindowTitle(dlg, self.tr('Preferences'))
 
574
                dlg.setWindowTitle(self.tr('Preferences'))
595
575
                dlg.show()
596
576
        
597
577
        def enableSC(self, yes):
614
594
                        localedlg = LocaleDialog(self, defaultText=self.sl)
615
595
                else:
616
596
                        localedlg = LocaleDialog(self)
617
 
                localedlg.setWindowTitle(dialogTitle)
618
597
                if localedlg.exec_() != QDialog.Accepted:
619
598
                        return
620
599
                sl = localedlg.localeEdit.text()
624
603
                                sl = str(sl)
625
604
                                enchant.Dict(sl)
626
605
                        except Exception as e:
627
 
                                QMessageBox.warning(self, dialogTitle, str(e))
 
606
                                QMessageBox.warning(self, '', str(e))
628
607
                        else:
629
608
                                self.sl = sl
630
609
                                self.enableSC(self.actionEnableSC.isChecked())
740
719
        
741
720
        def startWpgen(self):
742
721
                if not self.fileNames[self.ind]:
743
 
                        return QMessageBox.warning(self, dialogTitle, self.tr("Please, save the file somewhere."))
 
722
                        return QMessageBox.warning(self, '', self.tr("Please, save the file somewhere."))
744
723
                if not QFile.exists("template.html"):
745
724
                        try:
746
725
                                wpInit()
747
726
                        except IOError as e:
748
727
                                e = str(e)
749
 
                                return QMessageBox.warning(self, dialogTitle, self.tr(
 
728
                                return QMessageBox.warning(self, '', self.tr(
750
729
                                'Failed to copy default template, please create template.html manually.')
751
730
                                + '\n\n' + e)
752
731
                wpUpdateAll()
753
 
                msgBox = QMessageBox(QMessageBox.Information, dialogTitle,
 
732
                msgBox = QMessageBox(QMessageBox.Information, '',
754
733
                self.tr("Webpages saved in <code>html</code> directory."), QMessageBox.Ok)
755
734
                showButton = msgBox.addButton(self.tr("Show directory"), QMessageBox.AcceptRole)
756
735
                msgBox.exec_()
761
740
                if self.fileNames[self.ind]:
762
741
                        QDesktopServices.openUrl(QUrl.fromLocalFile(QFileInfo(self.fileNames[self.ind]).path()))
763
742
                else:
764
 
                        QMessageBox.warning(self, dialogTitle, self.tr("Please, save the file somewhere."))
 
743
                        QMessageBox.warning(self, '', self.tr("Please, save the file somewhere."))
765
744
        
766
745
        def setCurrentFile(self):
767
746
                self.setWindowTitle("")
880
859
                        supportedExtensions += markup.file_extensions
881
860
                fileFilter = ' (' + str.join(' ', ['*'+ext for ext in supportedExtensions]) + ');;'
882
861
                fileNames = QFileDialog.getOpenFileNames(self, self.tr("Select one or several files to open"), "",
883
 
                self.tr("Supported files") + fileFilter + self.tr("All files (*)"))
884
 
                if isinstance(fileNames, tuple):
885
 
                        # PySide or PyQt5
886
 
                        fileNames = fileNames[0]
887
 
                for fileName in fileNames:
 
862
                        self.tr("Supported files") + fileFilter + self.tr("All files (*)"))
 
863
                for fileName in fileNames[0]:
888
864
                        self.openFileWrapper(fileName)
889
865
        
890
866
        def openFileWrapper(self, fileName):
941
917
        def showEncodingDialog(self):
942
918
                if not self.maybeSave(self.ind):
943
919
                        return
944
 
                encoding, ok = QInputDialog.getItem(self, dialogTitle,
 
920
                encoding, ok = QInputDialog.getItem(self, '',
945
921
                        self.tr('Select file encoding from the list:'),
946
922
                        [bytes(b).decode() for b in QTextCodec.availableCodecs()],
947
923
                        0, False)
988
964
                                self.setWindowModified(False)
989
965
                                return True
990
966
                        else:
991
 
                                QMessageBox.warning(self, dialogTitle,
 
967
                                QMessageBox.warning(self, '',
992
968
                                self.tr("Cannot save to file because it is read-only!"))
993
969
                return False
994
970
        
1037
1013
                        self.tr("OpenDocument text files (*.odt)"))
1038
1014
                if not QFileInfo(fileName).suffix():
1039
1015
                        fileName += ".odt"
1040
 
                writer = QtGui.QTextDocumentWriter(fileName)
 
1016
                writer = QTextDocumentWriter(fileName)
1041
1017
                writer.setFormat("odf")
1042
1018
                writer.write(document)
1043
1019
        
1079
1055
                self.updatePreviewBox()
1080
1056
                printer = self.standardPrinter()
1081
1057
                dlg = QPrintDialog(printer, self)
1082
 
                setWindowTitle(dlg, self.tr("Print document"))
 
1058
                dlg.setWindowTitle(self.tr("Print document"))
1083
1059
                if (dlg.exec_() == QDialog.Accepted):
1084
1060
                        document = self.getDocumentForPrint()
1085
1061
                        if document != None:
1118
1094
                        Popen(str(command), shell=True).wait()
1119
1095
                except Exception as error:
1120
1096
                        errorstr = str(error)
1121
 
                        QMessageBox.warning(self, dialogTitle, self.tr('Failed to execute the command:')
 
1097
                        QMessageBox.warning(self, '', self.tr('Failed to execute the command:')
1122
1098
                        + '\n' + errorstr)
1123
1099
                QFile(tmpname).remove()
1124
1100
                if of:
1195
1171
                if not self.editBoxes[ind].document().isModified():
1196
1172
                        return True
1197
1173
                self.tabWidget.setCurrentIndex(ind)
1198
 
                ret = QMessageBox.warning(self, dialogTitle,
 
1174
                ret = QMessageBox.warning(self, '',
1199
1175
                        self.tr("The document has been modified.\nDo you want to save your changes?"),
1200
1176
                        QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
1201
1177
                if ret == QMessageBox.Save:
1219
1195
                except Exception:
1220
1196
                        return self.printError()
1221
1197
                winTitle = self.getDocumentTitle(baseName=True)
1222
 
                setWindowTitle(htmlDlg, winTitle+" ("+self.tr("HTML code")+")")
 
1198
                htmlDlg.setWindowTitle(winTitle+" ("+self.tr("HTML code")+")")
1223
1199
                htmlDlg.textEdit.setPlainText(htmltext.rstrip())
1224
1200
                htmlDlg.hl.rehighlight()
1225
1201
                htmlDlg.show()