diff --git a/src/musredit/PTextEdit.cpp b/src/musredit/PTextEdit.cpp index eccf09a3..ab76b703 100644 --- a/src/musredit/PTextEdit.cpp +++ b/src/musredit/PTextEdit.cpp @@ -55,6 +55,8 @@ using namespace std; #include #include #include +#include +#include #include @@ -390,11 +392,17 @@ void PTextEdit::setupEditActions() menu->addMenu(addSubMenu); menu->addSeparator(); - a = new QAction( tr( "(Un)Co&mment" ), this ); + a = new QAction( tr( "Co&mment" ), this ); a->setShortcut( tr("Ctrl+M") ); - a->setStatusTip( tr("Edit (Un)Comment Selected Lines") ); + a->setStatusTip( tr("Edit Comment Selected Lines") ); connect( a, SIGNAL( triggered() ), this, SLOT( editComment() ) ); menu->addAction(a); + + a = new QAction( tr( "Unco&mment" ), this ); + a->setShortcut( tr("Ctrl+Shift+M") ); + a->setStatusTip( tr("Edit Uncomment Selected Lines") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editUncomment() ) ); + menu->addAction(a); } //---------------------------------------------------------------------------------------------------- @@ -1264,109 +1272,80 @@ void PTextEdit::editComment() QTextCursor curs = currentEditor()->textCursor(); + if (curs.hasComplexSelection()) { // multiple selections + // multiple selections (STILL MISSING) + } else if (curs.hasSelection()) { // simple selection + int pos = curs.position(); + int secStart = curs.selectionStart(); // keep start position of the selection + int secEnd = curs.selectionEnd(); // keep end position of the selection + curs.clearSelection(); + curs.setPosition(secStart); // set the anchor to the start of the selection + curs.movePosition(QTextCursor::StartOfBlock); + do { + curs.insertText("#"); + } while (curs.movePosition(QTextCursor::NextBlock) && (curs.position() <= secEnd)); + curs.setPosition(pos+1); + } else { // no selection + int pos = curs.position(); + curs.clearSelection(); + curs.movePosition(QTextCursor::StartOfLine); + curs.insertText("#"); + curs.setPosition(pos+1); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

+ */ +void PTextEdit::editUncomment() +{ + if ( !currentEditor() ) + return; + + + QTextCursor curs = currentEditor()->textCursor(); + if (curs.hasComplexSelection()) { // multiple selections (STILL MISSING) } else if (curs.hasSelection()) { - // simple selection (STILL MISSING) + int pos = curs.position(); + int secStart = curs.selectionStart(); // keep start position of the selection + int secEnd = curs.selectionEnd(); // keep end position of the selection + curs.clearSelection(); + curs.setPosition(secStart); // set the anchor to the start of the selection + curs.movePosition(QTextCursor::StartOfBlock); + while (curs.position() < secEnd) { + QString line = curs.block().text(); + if (line.startsWith("#")) { + line.remove(0, 1); + curs.select(QTextCursor::BlockUnderCursor); + curs.removeSelectedText(); + curs.insertText("\n"+line); + pos -= 1; + } + curs.movePosition(QTextCursor::NextBlock); + } + curs.setPosition(pos); + currentEditor()->setTextCursor(curs); // needed to update document cursor } else { // no selection + int pos = curs.position(); curs.clearSelection(); curs.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); QString line = curs.block().text(); - if (line.startsWith("# ")) { - line.remove(0, 2); + if (line.startsWith("#")) { + line.remove(0, 1); curs.select(QTextCursor::BlockUnderCursor); curs.removeSelectedText(); if (currentEditor()->textCursor().columnNumber() == 0) curs.insertText(line); else curs.insertText("\n"+line); - curs.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); - } else { - curs.insertText("# "); + pos -= 1; } - currentEditor()->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); + curs.setPosition(pos); + currentEditor()->setTextCursor(curs); // needed to update document cursor } - -// NEEDS TO BE REWORKED. Qt4.6 far too different compared to Qt3.x -/* - QString str; - if (currentEditor()->textCursor().hasSelection()) { // selected text present - int paraFrom, paraTo; - int indexFrom, indexTo; - // get selection - currentEditor()->getSelection(¶From, &indexFrom, ¶To, &indexTo); - // check that indexFrom == 0, if not change the selection accordingly - if (indexFrom != 0) { - indexFrom = 0; - currentEditor()->setSelection(paraFrom, indexFrom, paraTo, indexTo); - } - // check that cursor is not in next line without selecting anything - if (indexTo == 0) { - paraTo--; - indexTo++; - } - // check that indexTo == end of line of paraTo - if ((indexTo != (int)currentEditor()->text(paraTo).length()) && (indexTo != 0)) { - indexTo = currentEditor()->text(paraTo).length(); - currentEditor()->setSelection(paraFrom, indexFrom, paraTo, indexTo); - } - // get selection text - str = currentEditor()->selectedText(); - // check line by line if (un)comment is needed - QStringList strList = QStringList::split("\n", str, TRUE); - for (QStringList::Iterator it = strList.begin(); it != strList.end(); ++it) { - str = *it; - if (str.trimmed().startsWith("#")) { // comment -> uncomment it - int idx = -1; - for (unsigned int i=0; i<(*it).length(); i++) { - if ((*it)[i] == '#') { - idx = i; - break; - } - } - (*it).remove(idx,1); - if ((*it)[idx] == ' ') { - (*it).remove(idx,1); - } - } else { // no comment -> comment it - (*it).prepend("# "); - } - } - str = strList.join("\n"); - currentEditor()->insert(str); - // set the cursor position - currentEditor()->setCursorPosition(++paraTo, 0); - } else { // no text selected - int para, index; - currentEditor()->getCursorPosition(¶, &index); - // get current text line - str = currentEditor()->text(para); - // check if it is a comment line or not - if (str.trimmed().startsWith("#")) { // comment -> uncomment it - str = currentEditor()->text(para); - int idx = -1; - for (unsigned int i=0; i comment it - if (!str.isEmpty()) - str.prepend("# "); - } - // select current line - currentEditor()->setSelection(para, 0, para, currentEditor()->text(para).length()); - // insert altered text - currentEditor()->insert(str); - // set the cursor position - currentEditor()->setCursorPosition(para, 0); - } -*/ } //---------------------------------------------------------------------------------------------------- diff --git a/src/musredit/PTextEdit.h b/src/musredit/PTextEdit.h index 48738564..5973105a 100644 --- a/src/musredit/PTextEdit.h +++ b/src/musredit/PTextEdit.h @@ -103,6 +103,7 @@ private slots: void editFindPrevious(); void editFindAndReplace(); void editComment(); + void editUncomment(); void textFamily( const QString &f ); void textSize( const QString &p ); diff --git a/src/musredit/musredit.pro b/src/musredit/musredit.pro index 96878e90..cac93e9e 100644 --- a/src/musredit/musredit.pro +++ b/src/musredit/musredit.pro @@ -25,6 +25,11 @@ CONFIG += qt \ QT += xml +# This is only needed for SL5.1 +exists ( /opt/fontconfig-2.8.0/lib/libfontconfig.so ) { + unix:LIBS += -L/opt/fontconfig-2.8.0/lib/ -lfontconfig +} + HEADERS = musredit.h \ PHelp.h \ PTextEdit.h \