From 05802f64396df8079cf0be7ad38266800a53622e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 7 Sep 2021 17:02:07 -0700 Subject: [PATCH] Add a lyrics mode --- src/ukatali/mainwindow.py | 62 +++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/ukatali/mainwindow.py b/src/ukatali/mainwindow.py index fd2f100..ff8be1b 100644 --- a/src/ukatali/mainwindow.py +++ b/src/ukatali/mainwindow.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import os from pathlib import Path from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets, Qsci, QtPrintSupport @@ -19,6 +18,7 @@ class MainWindow(QtWidgets.QMainWindow): self.setup_ui() self.settings = QtCore.QSettings() self.filename = None + self.is_lyrics_mode = False self.configure_dialog = ConfigureDialog(self) def setup_ui(self): @@ -67,6 +67,10 @@ class MainWindow(QtWidgets.QMainWindow): self.preview_layout.setContentsMargins(0, 0, 0, 0) self.preview_layout.setSpacing(0) self.preview_layout.setObjectName('preview_layout') + self.preview_toolbar = QtWidgets.QToolBar(self.preview_dock_contents) + self.preview_toolbar.setMovable(False) + self.preview_toolbar.setObjectName('preview_toolbar') + self.preview_layout.addWidget(self.preview_toolbar) self.preview_view = QtWebEngineWidgets.QWebEngineView(self.preview_dock_contents) self.preview_view.setUrl(QtCore.QUrl('about:blank')) self.preview_view.setObjectName('preview_view') @@ -74,6 +78,7 @@ class MainWindow(QtWidgets.QMainWindow): self.preview_dock.setWidget(self.preview_dock_contents) self.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.preview_dock) self.toolbar = QtWidgets.QToolBar(self) + self.toolbar.setMovable(False) self.toolbar.setObjectName('toolbar') self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolbar) self.new_action = QtWidgets.QAction(self) @@ -117,25 +122,25 @@ class MainWindow(QtWidgets.QMainWindow): self.cut_action.setIcon(icon) self.cut_action.setObjectName('cut_action') self.copy_action = QtWidgets.QAction(self) - icon = QtGui.QIcon.fromTheme('edit-copy') - self.copy_action.setIcon(icon) + self.copy_action.setIcon(QtGui.QIcon.fromTheme('edit-copy')) self.copy_action.setObjectName('copy_action') self.paste_action = QtWidgets.QAction(self) - icon = QtGui.QIcon.fromTheme('edit-paste') - self.paste_action.setIcon(icon) + self.paste_action.setIcon(QtGui.QIcon.fromTheme('edit-paste')) self.paste_action.setObjectName('paste_action') self.configure_action = QtWidgets.QAction(self) - icon = QtGui.QIcon.fromTheme('configure') - self.configure_action.setIcon(icon) + self.configure_action.setIcon(QtGui.QIcon.fromTheme('configure')) self.configure_action.setObjectName('configure_action') self.about_action = QtWidgets.QAction(self) - icon = QtGui.QIcon.fromTheme('help-about') - self.about_action.setIcon(icon) + self.about_action.setIcon(QtGui.QIcon.fromTheme('help-about')) self.about_action.setObjectName('about_action') self.exit_action = QtWidgets.QAction(self) - icon = QtGui.QIcon.fromTheme('application-exit') - self.exit_action.setIcon(icon) + self.exit_action.setIcon(QtGui.QIcon.fromTheme('application-exit')) self.exit_action.setObjectName('exit_action') + self.hide_chords_action = QtWidgets.QAction(self) + self.hide_chords_action.setCheckable(True) + self.hide_chords_action.setChecked(False) + self.hide_chords_action.setIcon(QtGui.QIcon.fromTheme('view-hidden')) + self.hide_chords_action.setObjectName('hide_chords_action') self.file_menu.addAction(self.new_action) self.file_menu.addAction(self.open_action) self.file_menu.addAction(self.save_action) @@ -175,6 +180,7 @@ class MainWindow(QtWidgets.QMainWindow): self.toolbar.addAction(self.paste_action) self.toolbar.addSeparator() self.toolbar.addAction(self.configure_action) + self.preview_toolbar.addAction(self.hide_chords_action) self.retranslate_ui() self.exit_action.triggered.connect(self.close) @@ -193,6 +199,7 @@ class MainWindow(QtWidgets.QMainWindow): self.configure_action.triggered.connect(self.on_configure_clicked) self.file_editor.textChanged.connect(self.on_text_changed) self.preview_view.page().pdfPrintingFinished.connect(self.on_pdf_finished) + self.hide_chords_action.triggered.connect(self.on_hide_chords_clicked) def retranslate_ui(self): _translate = QtCore.QCoreApplication.translate @@ -246,6 +253,7 @@ class MainWindow(QtWidgets.QMainWindow): self.exit_action.setText(_translate('MainWindow', 'E&xit')) self.exit_action.setToolTip(_translate('MainWindow', 'Quit Ukatali')) self.exit_action.setShortcut(_translate('MainWindow', 'Alt+F4')) + self.hide_chords_action.setText(_translate('MainWindow', 'Hide Chords')) def on_new_clicked(self): """Start a new file""" @@ -311,7 +319,7 @@ class MainWindow(QtWidgets.QMainWindow): if self.configure_dialog.exec() == QtWidgets.QDialog.Accepted and self.file_editor.text(): self.on_text_changed() - def _get_render_options(self): + def _get_render_options(self, is_lyrics_mode=False): """Get all the render options from the settings""" options = {} self.settings.beginGroup('render') @@ -325,19 +333,19 @@ class MainWindow(QtWidgets.QMainWindow): elif details['type'] is bool: value = coerce_bool(value) options[name] = value + if is_lyrics_mode and 'indent' in name: + options[name] = 0 + elif is_lyrics_mode and 'is_hidden' in name: + options[name] = True self.settings.endGroup() return options def _render_song(self, extra_styles=None): """Render the current song and return the HTML""" - options = self._get_render_options() + options = self._get_render_options(self.is_lyrics_mode) text = self.file_editor.text() song = Song() song.parse(text) - if song.metadata.get('copyright'): - extra_styles = extra_styles or '' - extra_styles += os.linesep - extra_styles += '@page {{ @bottom-left {{ content: "{}"; }} }}'.format(song.metadata.get('copyright')) return render(song, options, extra_styles) def on_text_changed(self): @@ -411,16 +419,18 @@ class MainWindow(QtWidgets.QMainWindow): else: QtWidgets.QMessageBox.critical(self, 'Error Exporting to PDF', 'There was an error while exporting to PDF') + def on_print_finished(self, is_success): + print(is_success) + def on_print_clicked(self): """Print the current song""" - - def _on_print_finished(is_success): - print(is_success) - - # print(QtPrintSupport.QPrinterInfo.defaultPrinterName()) - # default_printer = QtPrintSupport.QPrinterInfo.defaultPrinter() - # print(default_printer) - printer = QtPrintSupport.QPrinter() + printer = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution) print_dialog = QtPrintSupport.QPrintDialog(printer, self.preview_view.page().view()) if print_dialog.exec() == QtWidgets.QDialog.Accepted: - self.preview_view.page().print(printer, _on_print_finished) + self.preview_view.page().print(printer, self.on_print_finished) + + def on_hide_chords_clicked(self, is_checked): + """Hide the chords in the preview window""" + self.is_lyrics_mode = is_checked + if self.file_editor.text(): + self.on_text_changed()