openlp/openlp/plugins/songs/forms/editverseform.py

186 lines
7.1 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2013-01-05 22:17:30 +00:00
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
2015-12-31 22:46:06 +00:00
# Copyright (c) 2008-2016 OpenLP Developers #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
2010-04-03 23:00:05 +00:00
import re
import logging
from PyQt5 import QtCore, QtGui, QtWidgets
2010-04-03 23:00:05 +00:00
from openlp.plugins.songs.lib import VerseType
2013-08-31 18:17:38 +00:00
from .editversedialog import Ui_EditVerseDialog
2010-04-03 23:00:05 +00:00
log = logging.getLogger(__name__)
2011-07-13 13:32:19 +00:00
VERSE_REGEX = re.compile(r'---\[(.+):\D*(\d*)\D*.*\]---')
2013-02-11 19:44:04 +00:00
2015-11-07 00:49:40 +00:00
class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog):
"""
This is the form that is used to edit the verses of the song.
"""
def __init__(self, parent=None):
"""
Constructor
"""
2016-01-09 16:26:14 +00:00
super(EditVerseForm, self).__init__(parent, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
self.setupUi(self)
2015-05-25 20:03:31 +00:00
self.has_single_verse = False
self.insert_button.clicked.connect(self.on_insert_button_clicked)
self.split_button.clicked.connect(self.on_split_button_clicked)
self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed)
self.transpose_down_button.clicked.connect(self.on_transepose_down_button_clicked)
self.transpose_up_button.clicked.connect(self.on_transepose_up_button_clicked)
def insert_verse(self, verse_tag, verse_num=1):
2014-03-04 18:49:30 +00:00
"""
Insert a verse
:param verse_tag: The verse tag
:param verse_num: The verse number
"""
if self.verse_text_edit.textCursor().columnNumber() != 0:
2013-08-31 18:17:38 +00:00
self.verse_text_edit.insertPlainText('\n')
verse_tag = VerseType.translated_name(verse_tag)
2013-08-31 18:17:38 +00:00
self.verse_text_edit.insertPlainText('---[%s:%s]---\n' % (verse_tag, verse_num))
self.verse_text_edit.setFocus()
def on_split_button_clicked(self):
2014-03-04 18:49:30 +00:00
"""
The split button has been pressed
"""
text = self.verse_text_edit.toPlainText()
position = self.verse_text_edit.textCursor().position()
2013-08-31 18:17:38 +00:00
insert_string = '[---]'
2014-04-12 20:19:22 +00:00
if position and text[position - 1] != '\n':
2013-08-31 18:17:38 +00:00
insert_string = '\n' + insert_string
2014-03-04 18:49:30 +00:00
if position == len(text) or text[position] != '\n':
2013-08-31 18:17:38 +00:00
insert_string += '\n'
self.verse_text_edit.insertPlainText(insert_string)
self.verse_text_edit.setFocus()
2011-05-22 13:08:43 +00:00
def on_insert_button_clicked(self):
2014-03-04 18:49:30 +00:00
"""
The insert button has been pressed
"""
verse_type_index = self.verse_type_combo_box.currentIndex()
self.insert_verse(VerseType.tags[verse_type_index], self.verse_number_box.value())
def on_verse_type_combo_box_changed(self):
2014-03-04 18:49:30 +00:00
"""
The verse type combo has been changed
"""
self.update_suggested_verse_number()
def on_cursor_position_changed(self):
2014-03-04 18:49:30 +00:00
"""
The cursor position has been changed
"""
self.update_suggested_verse_number()
def on_transepose_up_button_clicked(self):
"""
The transpose up button clicked
"""
print('...')
def on_transepose_down_button_clicked(self):
"""
The transpose down button clicked
"""
print('...')
def update_suggested_verse_number(self):
2010-10-11 17:29:03 +00:00
"""
2013-02-24 18:13:50 +00:00
Adjusts the verse number SpinBox in regard to the selected verse type and the cursor's position.
2010-10-11 17:29:03 +00:00
"""
2015-02-23 17:40:56 +00:00
if self.has_single_verse:
return
position = self.verse_text_edit.textCursor().position()
text = self.verse_text_edit.toPlainText()
2013-02-24 18:13:50 +00:00
verse_name = VerseType.translated_names[
self.verse_type_combo_box.currentIndex()]
2010-10-11 17:29:03 +00:00
if not text:
return
2013-08-31 18:17:38 +00:00
position = text.rfind('---[%s' % verse_name, 0, position)
2010-10-11 17:29:03 +00:00
if position == -1:
self.verse_number_box.setValue(1)
2010-10-11 17:29:03 +00:00
return
text = text[position:]
2013-08-31 18:17:38 +00:00
position = text.find(']---')
2010-10-11 17:29:03 +00:00
if position == -1:
return
text = text[:position + 4]
2011-07-13 13:32:19 +00:00
match = VERSE_REGEX.match(text)
2010-10-11 17:29:03 +00:00
if match:
2011-03-03 20:18:17 +00:00
try:
verse_num = int(match.group(2)) + 1
2011-03-03 20:18:17 +00:00
except ValueError:
verse_num = 1
self.verse_number_box.setValue(verse_num)
2013-08-31 18:17:38 +00:00
def set_verse(self, text, single=False, tag='%s1' % VerseType.tags[VerseType.Verse]):
2014-03-04 18:49:30 +00:00
"""
Save the verse
:param text: The text
:param single: is this a single verse
:param tag: The tag
"""
self.has_single_verse = single
2009-11-22 20:33:39 +00:00
if single:
verse_type_index = VerseType.from_tag(tag[0], None)
2011-02-17 19:46:01 +00:00
verse_number = tag[1:]
if verse_type_index is not None:
self.verse_type_combo_box.setCurrentIndex(verse_type_index)
self.verse_number_box.setValue(int(verse_number))
self.insert_button.setVisible(False)
2009-11-22 20:33:39 +00:00
else:
2010-04-03 23:00:05 +00:00
if not text:
2013-08-31 18:17:38 +00:00
text = '---[%s:1]---\n' % VerseType.translated_names[VerseType.Verse]
self.verse_type_combo_box.setCurrentIndex(0)
self.verse_number_box.setValue(1)
self.insert_button.setVisible(True)
self.verse_text_edit.setPlainText(text)
self.verse_text_edit.setFocus()
self.verse_text_edit.moveCursor(QtGui.QTextCursor.End)
def get_verse(self):
2014-03-04 18:49:30 +00:00
"""
Extract the verse text
:return: The text
"""
return self.verse_text_edit.toPlainText(), VerseType.tags[self.verse_type_combo_box.currentIndex()], \
2013-08-31 18:17:38 +00:00
str(self.verse_number_box.value())
def get_all_verses(self):
2014-03-04 18:49:30 +00:00
"""
Extract all the verses
:return: The text
"""
text = self.verse_text_edit.toPlainText()
2013-08-31 18:17:38 +00:00
if not text.startswith('---['):
text = '---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text)
2010-07-27 09:32:52 +00:00
return text