Compare commits
1 Commits
master
...
reset-opti
Author | SHA1 | Date | |
---|---|---|---|
1a97bde040 |
48
setup.cfg
48
setup.cfg
@ -1,51 +1,3 @@
|
|||||||
[metadata]
|
|
||||||
name = ukatali
|
|
||||||
author = Raoul Snyman
|
|
||||||
author_email = raoul@snyman.info
|
|
||||||
description = A ChordPro GUI, written in Python and Qt5
|
|
||||||
long_description = file:README.rst
|
|
||||||
long_description_content_type = text/x-rst
|
|
||||||
url = https://git.snyman.info/raoul/ukatali
|
|
||||||
license = MIT
|
|
||||||
classifiers =
|
|
||||||
Development Status :: 3 - Alpha
|
|
||||||
Intended Audience :: End Users/Desktop
|
|
||||||
License :: OSI Approved :: MIT License
|
|
||||||
Operating System :: POSIX
|
|
||||||
Programming Language :: Python :: 3
|
|
||||||
Programming Language :: Python :: 3.7
|
|
||||||
Programming Language :: Python :: 3.8
|
|
||||||
Programming Language :: Python :: 3.9
|
|
||||||
Programming Language :: Python :: 3.10
|
|
||||||
Topic :: Utilities
|
|
||||||
keywords =
|
|
||||||
music
|
|
||||||
chords
|
|
||||||
guitar
|
|
||||||
|
|
||||||
[options]
|
|
||||||
package_dir =
|
|
||||||
= src
|
|
||||||
packages = find:
|
|
||||||
python_requires = >=3.7
|
|
||||||
setup_requires =
|
|
||||||
setuptools_scm
|
|
||||||
install_requires =
|
|
||||||
igitar
|
|
||||||
PyQt5
|
|
||||||
PyQtWebEngine
|
|
||||||
QScintilla
|
|
||||||
|
|
||||||
[options.packages.find]
|
|
||||||
where = src
|
|
||||||
|
|
||||||
[options.entry_points]
|
|
||||||
console_scripts =
|
|
||||||
ukatali = ukatali.app:run_ukutali
|
|
||||||
|
|
||||||
[bdist_wheel]
|
|
||||||
universal = 1
|
|
||||||
|
|
||||||
[pep8]
|
[pep8]
|
||||||
exclude=resources.py,vlc.py
|
exclude=resources.py,vlc.py
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
|
2
setup.py
2
setup.py
@ -1,2 +0,0 @@
|
|||||||
from setuptools import setup
|
|
||||||
setup(use_scm_version=True, setup_requires=['setuptools_scm'])
|
|
@ -2,7 +2,7 @@
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
from igitar.renderers.html import get_options, get_option_groups
|
from chordpro.renderers.html import get_options, get_option_groups
|
||||||
|
|
||||||
from ukatali.util import coerce_bool, convert_units
|
from ukatali.util import coerce_bool, convert_units
|
||||||
|
|
||||||
@ -83,6 +83,16 @@ class ConfigureDialog(QtWidgets.QDialog):
|
|||||||
self.render_options_stack = QtWidgets.QStackedWidget(self)
|
self.render_options_stack = QtWidgets.QStackedWidget(self)
|
||||||
self.render_options_stack.setObjectName("render_options_stack")
|
self.render_options_stack.setObjectName("render_options_stack")
|
||||||
self.render_layout.addWidget(self.render_options_stack)
|
self.render_layout.addWidget(self.render_options_stack)
|
||||||
|
self.render_reset_layout = QtWidgets.QHBoxLayout()
|
||||||
|
self.render_reset_layout.setObjectName('render_reset_layout')
|
||||||
|
self.render_reset_layout.setSpacing(0)
|
||||||
|
self.render_reset_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.render_reset_layout.addStretch()
|
||||||
|
self.render_reset_button = QtWidgets.QPushButton(self.renderer_page)
|
||||||
|
self.render_reset_button.setIcon(QtGui.QIcon.fromTheme('edit-reset'))
|
||||||
|
self.render_reset_button.setObjectName('render_reset_button')
|
||||||
|
self.render_reset_layout.addWidget(self.render_reset_button)
|
||||||
|
self.render_layout.addLayout(self.render_reset_layout)
|
||||||
# Export settings
|
# Export settings
|
||||||
self.export_page = QtWidgets.QWidget()
|
self.export_page = QtWidgets.QWidget()
|
||||||
self.export_page.setObjectName('export_page')
|
self.export_page.setObjectName('export_page')
|
||||||
@ -163,6 +173,7 @@ class ConfigureDialog(QtWidgets.QDialog):
|
|||||||
self.export_margin_bottom_spinbox.valueChanged.connect(on_export_margin_bottom_changed)
|
self.export_margin_bottom_spinbox.valueChanged.connect(on_export_margin_bottom_changed)
|
||||||
on_export_orientation_portait_clicked = partial(self._set_export_value, 'orientation')
|
on_export_orientation_portait_clicked = partial(self._set_export_value, 'orientation')
|
||||||
self.export_orientation_portrait_radio.toggled.connect(on_export_orientation_portait_clicked)
|
self.export_orientation_portrait_radio.toggled.connect(on_export_orientation_portait_clicked)
|
||||||
|
self.render_reset_button.clicked.connect(self.on_reset_button_clicked)
|
||||||
|
|
||||||
def retranslate_ui(self):
|
def retranslate_ui(self):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
@ -173,6 +184,9 @@ class ConfigureDialog(QtWidgets.QDialog):
|
|||||||
self.category_list_widget.item(3).setText(_translate('ConfigureDialog', 'PDF'))
|
self.category_list_widget.item(3).setText(_translate('ConfigureDialog', 'PDF'))
|
||||||
self.export_orientation_portrait_radio.setText(_translate('ConfigureDialog', 'Portrait'))
|
self.export_orientation_portrait_radio.setText(_translate('ConfigureDialog', 'Portrait'))
|
||||||
self.export_orientation_landscape_radio.setText(_translate('ConfigureDialog', 'Landscape'))
|
self.export_orientation_landscape_radio.setText(_translate('ConfigureDialog', 'Landscape'))
|
||||||
|
self.render_reset_button.setText(_translate('ConfigureDialog', 'Reset values'))
|
||||||
|
self.render_reset_button.setToolTip(_translate('ConfigureDialog',
|
||||||
|
'Reset the values for this option to the defaults'))
|
||||||
|
|
||||||
def _set_option_value(self, name, value):
|
def _set_option_value(self, name, value):
|
||||||
"""Set an option value"""
|
"""Set an option value"""
|
||||||
@ -192,6 +206,26 @@ class ConfigureDialog(QtWidgets.QDialog):
|
|||||||
value = QtGui.QPageLayout.Portrait if value else QtGui.QPageLayout.Landscape
|
value = QtGui.QPageLayout.Portrait if value else QtGui.QPageLayout.Landscape
|
||||||
self.export_values[name] = value
|
self.export_values[name] = value
|
||||||
|
|
||||||
|
def on_reset_button_clicked(self):
|
||||||
|
"""Reset all the values for the current option group"""
|
||||||
|
current_group = self.render_options_combobox.currentText().replace(' ', '_').lower()
|
||||||
|
self.settings.beginGroup('render')
|
||||||
|
for name, details in get_options(current_group).items():
|
||||||
|
if name in self.option_values:
|
||||||
|
del self.option_values[name]
|
||||||
|
if self.settings.contains(name):
|
||||||
|
self.settings.remove(name)
|
||||||
|
if details['type'] is int:
|
||||||
|
self.option_widgets[name].setValue(details['default'])
|
||||||
|
elif details['type'] is bool:
|
||||||
|
self.option_widgets[name].setChecked(details['default'])
|
||||||
|
elif 'font' in name:
|
||||||
|
value = QtGui.QFont(details['default'])
|
||||||
|
self.option_widgets[name].setCurrentFont(value)
|
||||||
|
else:
|
||||||
|
self.option_widgets[name].setText(details['default'])
|
||||||
|
self.settings.endGroup()
|
||||||
|
|
||||||
def setup_options(self):
|
def setup_options(self):
|
||||||
for group in get_option_groups():
|
for group in get_option_groups():
|
||||||
pretty_group = group.replace('_', ' ').title()
|
pretty_group = group.replace('_', ' ').title()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets, Qsci
|
from PyQt5 import QtCore, QtGui, QtWidgets, Qsci
|
||||||
from igitar.constants import KNOWN_DIRECTIVES, KNOWN_VERSE_TYPES
|
from chordpro.constants import KNOWN_DIRECTIVES, KNOWN_VERSE_TYPES
|
||||||
|
|
||||||
PALETTE_ROLES = {
|
PALETTE_ROLES = {
|
||||||
'window': QtGui.QPalette.WindowText,
|
'window': QtGui.QPalette.WindowText,
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets, Qsci, QtPrintSupport
|
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets, Qsci, QtPrintSupport
|
||||||
from igitar import Song
|
from chordpro import Song
|
||||||
from igitar.renderers.html import render, get_options
|
from chordpro.renderers.html import render, get_options
|
||||||
|
|
||||||
from ukatali.configuredialog import ConfigureDialog
|
from ukatali.configuredialog import ConfigureDialog
|
||||||
from ukatali.lexer import ChordProLexer
|
from ukatali.lexer import ChordProLexer
|
||||||
@ -345,17 +345,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
options = self._get_render_options(self.is_lyrics_mode)
|
options = self._get_render_options(self.is_lyrics_mode)
|
||||||
text = self.file_editor.text()
|
text = self.file_editor.text()
|
||||||
song = Song()
|
song = Song()
|
||||||
try:
|
song.parse(text)
|
||||||
song.parse(text)
|
return render(song, options, extra_styles)
|
||||||
return render(song, options, extra_styles)
|
|
||||||
except Exception:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def on_text_changed(self):
|
def on_text_changed(self):
|
||||||
"""Update the preview when the text changes"""
|
"""Update the preview when the text changes"""
|
||||||
|
# self.setWindowModified(True)
|
||||||
html = self._render_song()
|
html = self._render_song()
|
||||||
if html:
|
self.preview_view.setHtml(html)
|
||||||
self.preview_view.setHtml(html)
|
|
||||||
|
|
||||||
def on_export_pdf_clicked(self):
|
def on_export_pdf_clicked(self):
|
||||||
"""Export the current song to PDF"""
|
"""Export the current song to PDF"""
|
||||||
@ -383,7 +380,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
margin_top = float(self.settings.value('margin_top', 20))
|
margin_top = float(self.settings.value('margin_top', 20))
|
||||||
margin_bottom = float(self.settings.value('margin_bottom', 20))
|
margin_bottom = float(self.settings.value('margin_bottom', 20))
|
||||||
self.settings.endGroup()
|
self.settings.endGroup()
|
||||||
margins = QtCore.QMarginsF(margin_left, margin_top, margin_right, margin_bottom)
|
margins = QtCore.QMarginsF(QtCore.QMargins(margin_left, margin_top, margin_right, margin_bottom))
|
||||||
page_layout = QtGui.QPageLayout(page_size, orientation, margins, unit)
|
page_layout = QtGui.QPageLayout(page_size, orientation, margins, unit)
|
||||||
# Export to PDF
|
# Export to PDF
|
||||||
self.preview_view.page().printToPdf(str(filename), page_layout)
|
self.preview_view.page().printToPdf(str(filename), page_layout)
|
||||||
@ -407,14 +404,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
# Export to HTML
|
# Export to HTML
|
||||||
try:
|
try:
|
||||||
with filename.open('w') as html_file:
|
with filename.open('w') as html_file:
|
||||||
html = self._render_song()
|
html_file.write(self._render_song())
|
||||||
if html:
|
QtWidgets.QMessageBox.information(self, 'Export to HTML Successful',
|
||||||
html_file.write(html)
|
'Successfully exported to "{}"'.format(filename.name))
|
||||||
QtWidgets.QMessageBox.information(self, 'Export to HTML Successful',
|
|
||||||
'Successfully exported to "{}"'.format(filename.name))
|
|
||||||
else:
|
|
||||||
QtWidgets.QMessageBox.critical(self, 'Error Exporting to HTML',
|
|
||||||
'There was an error while exporting to HTML')
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
QtWidgets.QMessageBox.critical(self, 'Error Exporting to HTML',
|
QtWidgets.QMessageBox.critical(self, 'Error Exporting to HTML',
|
||||||
'There was an error while exporting to HTML:\n{e}'.format(e=e))
|
'There was an error while exporting to HTML:\n{e}'.format(e=e))
|
||||||
|
Loading…
Reference in New Issue
Block a user