fix #7885: Lyric pasting should break at hyphens

This commit is contained in:
lasconic 2014-03-22 14:54:15 +01:00
parent 044c4bfe63
commit da6e8929b5
5 changed files with 45 additions and 16 deletions

View file

@ -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);
}
//---------------------------------------------------------

View file

@ -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; }

View file

@ -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() {}
};

View file

@ -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();
}
}

View file

@ -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);