fix #7885: Lyric pasting should break at hyphens
This commit is contained in:
parent
044c4bfe63
commit
da6e8929b5
5 changed files with 45 additions and 16 deletions
|
@ -241,7 +241,7 @@ void Lyrics::layout1()
|
|||
// paste
|
||||
//---------------------------------------------------------
|
||||
|
||||
void Lyrics::paste()
|
||||
void Lyrics::paste(MuseScoreView* scoreview)
|
||||
{
|
||||
#if defined(Q_OS_MAC) || defined(Q_OS_WIN)
|
||||
QClipboard::Mode mode = QClipboard::Clipboard;
|
||||
|
@ -252,15 +252,36 @@ void Lyrics::paste()
|
|||
QStringList sl = txt.split(QRegExp("\\s+"), QString::SkipEmptyParts);
|
||||
if (sl.isEmpty())
|
||||
return;
|
||||
|
||||
QStringList hyph = sl[0].split("-");
|
||||
bool minus = false;
|
||||
if(hyph.length() > 1) {
|
||||
insertText(hyph[0]);
|
||||
hyph.removeFirst();
|
||||
sl[0] = hyph.join("-");
|
||||
minus = true;
|
||||
}
|
||||
else if (sl.length() > 1 && sl[1] == "-") {
|
||||
insertText(sl[0]);
|
||||
sl.removeFirst();
|
||||
sl.removeFirst();
|
||||
minus = true;
|
||||
}
|
||||
else {
|
||||
insertText(sl[0]);
|
||||
sl.removeFirst();
|
||||
}
|
||||
|
||||
insertText(sl[0]);
|
||||
layout();
|
||||
score()->setLayoutAll(true);
|
||||
score()->end();
|
||||
sl.removeFirst();
|
||||
txt = sl.join(" ");
|
||||
|
||||
QApplication::clipboard()->setText(txt, mode);
|
||||
if (minus)
|
||||
scoreview->lyricsMinus();
|
||||
else
|
||||
scoreview->lyricsTab(false, false, true);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
|
|
@ -81,7 +81,10 @@ class Lyrics : public Text {
|
|||
|
||||
void clearSeparator() { _separator.clear(); } // TODO: memory leak
|
||||
QList<Line*>* separatorList() { return &_separator; }
|
||||
virtual void paste() override;
|
||||
|
||||
using Text::paste;
|
||||
void paste(MuseScoreView * scoreview);
|
||||
|
||||
Text* verseNumber() const { return _verseNumber; }
|
||||
void setVerseNumber(Text* t) { _verseNumber = t; }
|
||||
|
||||
|
|
|
@ -60,6 +60,13 @@ class MuseScoreView {
|
|||
virtual void startEdit(Element*, int startGrip) = 0;
|
||||
virtual void drawBackground(QPainter*, const QRectF&) const = 0;
|
||||
virtual void setDropTarget(const Element*) {}
|
||||
|
||||
virtual void lyricsTab(bool /*back*/, bool /*end*/, bool /*moveOnly*/) {}
|
||||
virtual void lyricsReturn() {}
|
||||
virtual void lyricsEndEdit() {}
|
||||
virtual void lyricsUpDown(bool /*up*/, bool /*end*/) {}
|
||||
virtual void lyricsMinus() {}
|
||||
virtual void lyricsUnderscore() {}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2379,12 +2379,10 @@ void ScoreView::normalCut()
|
|||
void ScoreView::editPaste()
|
||||
{
|
||||
if (editObject->isText()) {
|
||||
static_cast<Text*>(editObject)->paste();
|
||||
QClipboard::Mode mode = QClipboard::Clipboard;
|
||||
// QClipboard::Mode mode = QClipboard::Selection;
|
||||
QString txt = QApplication::clipboard()->text(mode);
|
||||
if (editObject->type() == Element::LYRICS && !txt.isEmpty())
|
||||
lyricsTab(false, false, true);
|
||||
if (editObject->type() == Element::LYRICS)
|
||||
static_cast<Lyrics*>(editObject)->paste(this);
|
||||
else
|
||||
static_cast<Text*>(editObject)->paste();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -208,12 +208,12 @@ class ScoreView : public QWidget, public MuseScoreView {
|
|||
void dragSymbol(const QPointF& pos);
|
||||
bool dragMeasureAnchorElement(const QPointF& pos);
|
||||
void updateGrips();
|
||||
void lyricsTab(bool back, bool end, bool moveOnly);
|
||||
void lyricsReturn();
|
||||
void lyricsEndEdit();
|
||||
void lyricsUpDown(bool up, bool end);
|
||||
void lyricsMinus();
|
||||
void lyricsUnderscore();
|
||||
virtual void lyricsTab(bool back, bool end, bool moveOnly) override;
|
||||
virtual void lyricsReturn() override;
|
||||
virtual void lyricsEndEdit() override;
|
||||
virtual void lyricsUpDown(bool up, bool end) override;
|
||||
virtual void lyricsMinus() override;
|
||||
virtual void lyricsUnderscore() override;
|
||||
void harmonyEndEdit();
|
||||
void harmonyTab(bool back);
|
||||
void harmonyBeatsTab(bool noterest, bool back);
|
||||
|
|
Loading…
Reference in a new issue