ukatali/src/ukatali/mainwindow.py

235 lines
12 KiB
Python

# -*- coding: utf-8 -*-
from pathlib import Path
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets, Qsci
OPEN_COUNT = 0
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setup_ui()
def setup_ui(self):
self.setObjectName("MainWindow")
self.resize(800, 600)
self.editorWidget = QtWidgets.QWidget(self)
self.editorWidget.setObjectName("editorWidget")
self.editorLayout = QtWidgets.QVBoxLayout(self.editorWidget)
self.editorLayout.setContentsMargins(0, 0, 0, 0)
self.editorLayout.setSpacing(0)
self.editorLayout.setObjectName("editorLayout")
self.fileEditor = Qsci.QsciScintilla(self.editorWidget)
self.fileEditor.setFont(QtGui.QFont("monospace"))
self.fileEditor.setColor(QtWidgets.QApplication.palette().windowText().color())
self.fileEditor.setCaretWidth(2)
self.fileEditor.setCaretForegroundColor(QtWidgets.QApplication.palette().windowText().color())
self.fileEditor.setMarginsBackgroundColor(QtWidgets.QApplication.palette().window().color())
self.fileEditor.setMarginsForegroundColor(QtWidgets.QApplication.palette().windowText().color())
self.fileEditor.setMarginLineNumbers(1, True)
self.fileEditor.setMarginWidth(1, "000")
self.fileEditor.setObjectName("fileEditor")
self.editorLayout.addWidget(self.fileEditor)
self.setCentralWidget(self.editorWidget)
self.menubar = QtWidgets.QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 28))
self.menubar.setObjectName("menubar")
self.fileMenu = QtWidgets.QMenu(self.menubar)
self.fileMenu.setObjectName("fileMenu")
self.editMenu = QtWidgets.QMenu(self.menubar)
self.editMenu.setObjectName("editMenu")
self.settingsMenu = QtWidgets.QMenu(self.menubar)
self.settingsMenu.setObjectName("settingsMenu")
self.helpMenu = QtWidgets.QMenu(self.menubar)
self.helpMenu.setObjectName("helpMenu")
self.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(self)
self.statusbar.setObjectName("statusbar")
self.setStatusBar(self.statusbar)
self.previewDock = QtWidgets.QDockWidget(self)
self.previewDock.setObjectName("previewDock")
self.previewDockContents = QtWidgets.QWidget()
self.previewDockContents.setObjectName("previewDockContents")
self.previewLayout = QtWidgets.QVBoxLayout(self.previewDockContents)
self.previewLayout.setContentsMargins(0, 0, 0, 0)
self.previewLayout.setSpacing(0)
self.previewLayout.setObjectName("previewLayout")
self.previewView = QtWebEngineWidgets.QWebEngineView(self.previewDockContents)
self.previewView.setUrl(QtCore.QUrl("about:blank"))
self.previewView.setObjectName("previewView")
self.previewLayout.addWidget(self.previewView)
self.previewDock.setWidget(self.previewDockContents)
self.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.previewDock)
self.toolBar = QtWidgets.QToolBar(self)
self.toolBar.setObjectName("toolBar")
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.newAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-new")
self.newAction.setIcon(icon)
self.newAction.setObjectName("newAction")
self.openAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-open")
self.openAction.setIcon(icon)
self.openAction.setObjectName("openAction")
self.saveAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-save")
self.saveAction.setIcon(icon)
self.saveAction.setObjectName("saveAction")
self.saveAsAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-save-as")
self.saveAsAction.setIcon(icon)
self.saveAsAction.setObjectName("saveAsAction")
self.printAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-print")
self.printAction.setIcon(icon)
self.printAction.setObjectName("printAction")
self.exportAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("document-export")
self.exportAction.setIcon(icon)
self.exportAction.setObjectName("exportAction")
self.undoAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("edit-undo")
self.undoAction.setIcon(icon)
self.undoAction.setObjectName("undoAction")
self.redoAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("edit-redo")
self.redoAction.setIcon(icon)
self.redoAction.setObjectName("redoAction")
self.cutAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("edit-cut")
self.cutAction.setIcon(icon)
self.cutAction.setObjectName("cutAction")
self.copyAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("edit-copy")
self.copyAction.setIcon(icon)
self.copyAction.setObjectName("copyAction")
self.pasteAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("edit-paste")
self.pasteAction.setIcon(icon)
self.pasteAction.setObjectName("pasteAction")
self.configureAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("configure")
self.configureAction.setIcon(icon)
self.configureAction.setObjectName("configureAction")
self.aboutAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("help-about")
self.aboutAction.setIcon(icon)
self.aboutAction.setObjectName("aboutAction")
self.exitAction = QtWidgets.QAction(self)
icon = QtGui.QIcon.fromTheme("application-exit")
self.exitAction.setIcon(icon)
self.exitAction.setObjectName("exitAction")
self.fileMenu.addAction(self.newAction)
self.fileMenu.addAction(self.openAction)
self.fileMenu.addAction(self.saveAction)
self.fileMenu.addAction(self.saveAsAction)
self.fileMenu.addSeparator()
self.fileMenu.addAction(self.exportAction)
self.fileMenu.addAction(self.printAction)
self.fileMenu.addSeparator()
self.fileMenu.addAction(self.exitAction)
self.editMenu.addAction(self.undoAction)
self.editMenu.addAction(self.redoAction)
self.editMenu.addSeparator()
self.editMenu.addAction(self.cutAction)
self.editMenu.addAction(self.copyAction)
self.editMenu.addAction(self.pasteAction)
self.settingsMenu.addAction(self.configureAction)
self.helpMenu.addAction(self.aboutAction)
self.menubar.addAction(self.fileMenu.menuAction())
self.menubar.addAction(self.editMenu.menuAction())
self.menubar.addAction(self.settingsMenu.menuAction())
self.menubar.addAction(self.helpMenu.menuAction())
self.toolBar.addAction(self.newAction)
self.toolBar.addAction(self.openAction)
self.toolBar.addAction(self.saveAction)
self.toolBar.addSeparator()
self.toolBar.addAction(self.exportAction)
self.toolBar.addAction(self.printAction)
self.toolBar.addSeparator()
self.toolBar.addAction(self.undoAction)
self.toolBar.addAction(self.redoAction)
self.toolBar.addSeparator()
self.toolBar.addAction(self.cutAction)
self.toolBar.addAction(self.copyAction)
self.toolBar.addAction(self.pasteAction)
self.toolBar.addSeparator()
self.toolBar.addAction(self.configureAction)
self.retranslate_ui()
self.exitAction.triggered.connect(self.close)
self.undoAction.triggered.connect(self.fileEditor.undo)
self.redoAction.triggered.connect(self.fileEditor.redo)
self.cutAction.triggered.connect(self.fileEditor.cut)
self.copyAction.triggered.connect(self.fileEditor.copy)
self.pasteAction.triggered.connect(self.fileEditor.paste)
# QtCore.QMetaObject.connectSlotsByName(self)
self.openAction.triggered.connect(self.on_open_clicked)
def retranslate_ui(self):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("MainWindow", "Ukatali"))
self.fileMenu.setTitle(_translate("MainWindow", "&File"))
self.editMenu.setTitle(_translate("MainWindow", "&Edit"))
self.settingsMenu.setTitle(_translate("MainWindow", "&Settings"))
self.helpMenu.setTitle(_translate("MainWindow", "&Help"))
self.previewDock.setWindowTitle(_translate("MainWindow", "Preview"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
self.newAction.setText(_translate("MainWindow", "&New"))
self.newAction.setToolTip(_translate("MainWindow", "Create a new ChordPro file"))
self.newAction.setShortcut(_translate("MainWindow", "Ctrl+N"))
self.openAction.setText(_translate("MainWindow", "&Open..."))
self.openAction.setToolTip(_translate("MainWindow", "Open an existing ChordPro file"))
self.openAction.setShortcut(_translate("MainWindow", "Ctrl+O"))
self.saveAction.setText(_translate("MainWindow", "&Save"))
self.saveAction.setToolTip(_translate("MainWindow", "Save the current ChordPro file"))
self.saveAction.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.saveAsAction.setText(_translate("MainWindow", "Save &As..."))
self.saveAsAction.setToolTip(_translate("MainWindow", "Save the current file under a new name"))
self.saveAsAction.setShortcut(_translate("MainWindow", "Ctrl+Shift+S"))
self.printAction.setText(_translate("MainWindow", "&Print"))
self.printAction.setToolTip(_translate("MainWindow", "Print the current ChordPro file"))
self.printAction.setShortcut(_translate("MainWindow", "Ctrl+P"))
self.exportAction.setText(_translate("MainWindow", "&Export..."))
self.exportAction.setToolTip(_translate("MainWindow", "Export the current file as a different format"))
self.exportAction.setShortcut(_translate("MainWindow", "Ctrl+E"))
self.undoAction.setText(_translate("MainWindow", "&Undo"))
self.undoAction.setToolTip(_translate("MainWindow", "Undo the last edit"))
self.undoAction.setShortcut(_translate("MainWindow", "Ctrl+Z"))
self.redoAction.setText(_translate("MainWindow", "&Redo"))
self.redoAction.setToolTip(_translate("MainWindow", "Redo the last undone action"))
self.redoAction.setShortcut(_translate("MainWindow", "Ctrl+Shift+Z"))
self.cutAction.setText(_translate("MainWindow", "Cu&t"))
self.cutAction.setToolTip(_translate("MainWindow", "Cut the currently selected text"))
self.cutAction.setShortcut(_translate("MainWindow", "Ctrl+X"))
self.copyAction.setText(_translate("MainWindow", "&Copy"))
self.copyAction.setToolTip(_translate("MainWindow", "Copy the currently selected text to the clipboard"))
self.copyAction.setShortcut(_translate("MainWindow", "Ctrl+C"))
self.pasteAction.setText(_translate("MainWindow", "&Paste"))
self.pasteAction.setToolTip(_translate("MainWindow", "Paste the current clipboard text into the editor"))
self.pasteAction.setShortcut(_translate("MainWindow", "Ctrl+V"))
self.configureAction.setText(_translate("MainWindow", "&Configure..."))
self.configureAction.setToolTip(_translate("MainWindow", "Configure Ukatali"))
self.aboutAction.setText(_translate("MainWindow", "&About"))
self.aboutAction.setToolTip(_translate("MainWindow", "About Ukatali"))
self.exitAction.setText(_translate("MainWindow", "E&xit"))
self.exitAction.setToolTip(_translate("MainWindow", "Quit Ukatali"))
self.exitAction.setShortcut(_translate("MainWindow", "Alt+F4"))
def on_open_clicked(self):
"""Open the file"""
if QtCore.QSettings().value('files/last-directory'):
last_directory = QtCore.QSettings().value('files/last-directory')
else:
last_directory = ''
filename = QtWidgets.QFileDialog.getOpenFileName(self, "Open file", last_directory,
filter="All files *")
if isinstance(filename, tuple):
filename = filename[0]
if not filename:
return
file_path = Path(filename)
if file_path.exists():
QtCore.QSettings().setValue('files/last-directory', str(file_path.parent))
self.fileEditor.setText(file_path.open().read())