Index: scribus/scribusdoc.cpp =================================================================== --- scribus/scribusdoc.cpp (wersja 15654) +++ scribus/scribusdoc.cpp (kopia robocza) @@ -6169,7 +6169,7 @@ { ParagraphStyle newStyle; newStyle.setParent(name.isEmpty()? Style::INHERIT_PARENT : name); - itemSelection_ApplyParagraphStyle(newStyle, customSelection, true); + itemSelection_ApplyParagraphStyle(newStyle, customSelection); } @@ -6861,6 +6861,7 @@ void ScribusDoc::itemSelection_EraseParagraphStyle(Selection* customSelection) { + Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection; assert(itemSelection!=0); uint selectedItemCount=itemSelection->count(); @@ -6869,11 +6870,13 @@ UndoTransaction* activeTransaction = NULL; if (selectedItemCount > 1) activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::ApplyTextStyle, tr( "remove direct paragraph formatting" ), Um::IFont)); + for (uint aa = 0; aa < selectedItemCount; ++aa) { PageItem *currItem = itemSelection->itemAt(aa); // int currItemTextCount = currItem->lastInFrame() + 1 - currItem->firstInFrame(); // if (currItemTextCount > 0 && ( appMode == modeEdit || !FRAMESELECTION_EDITS_DEFAULTSTYLE)) + int currItemTextCount = currItem->itemText.length(); if ((currItemTextCount > 0) && (appMode == modeEdit)) { @@ -6918,7 +6921,63 @@ changed(); regionsChanged()->update(QRectF()); } +void ScribusDoc::itemSelection_ResetParagraphStyle(Selection* customSelection) +{ + Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection; + assert(itemSelection!=0); + uint selectedItemCount=itemSelection->count(); + if (selectedItemCount == 0) + return; + UndoTransaction* activeTransaction = NULL; + if (selectedItemCount > 1) + activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::ApplyTextStyle, tr( "remove direct paragraph formatting" ), Um::IFont)); + for (uint aa = 0; aa < selectedItemCount; ++aa) + { + PageItem *currItem = itemSelection->itemAt(aa); + int currItemTextCount = currItem->itemText.length(); + if ((currItemTextCount == 0) || (appMode != modeEdit)) + { + ParagraphStyle dstyle(currItem->itemText.defaultStyle()); + dstyle.applyStyle(currItem->itemText.defaultStyle()); + currItem->itemText.setDefaultStyle(dstyle); + } + if (currItemTextCount > 0) + { + int start = currItem->asPathText() ? currItem->itemText.startOfItem(currItem->firstInFrame()) : 0; + int stop = currItem->asPathText() ? currItem->itemText.endOfItem(currItem->lastInFrame()) : currItemTextCount; + if (appMode == modeEdit) + { + start = currItem->itemText.startOfSelection(); + stop = currItem->itemText.endOfSelection(); + if (start >= stop) + start = stop = qMax(0, qMin(currItem->itemText.length(), currItem->CPos)); + } + for (int pos=start; pos < stop; ++pos) + { + if (currItem->itemText.text(pos) == SpecialChars::PARSEP) + { + currItem->itemText.applyStyle(pos, currItem->itemText.paragraphStyle(pos), true); + } + } + currItem->itemText.applyStyle(stop, currItem->itemText.paragraphStyle(start), true); + currItem->invalid = true; + } + if (currItem->asPathText()) + currItem->updatePolyClip(); + currItem->invalidateLayout(); + } + if (activeTransaction) + { + activeTransaction->commit(); + delete activeTransaction; + activeTransaction = NULL; + } + changed(); + regionsChanged()->update(QRectF()); +} + void ScribusDoc::itemSelection_ApplyParagraphStyle(const ParagraphStyle & newStyle, Selection* customSelection, bool rmDirectFormatting) { Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection; Index: scribus/scribusdoc.h =================================================================== --- scribus/scribusdoc.h (wersja 15654) +++ scribus/scribusdoc.h (kopia robocza) @@ -919,6 +919,7 @@ void itemSelection_ApplyCharStyle(const CharStyle & newstyle, Selection* customSelection=0); void itemSelection_SetCharStyle(const CharStyle & newstyle, Selection* customSelection=0); void itemSelection_EraseParagraphStyle(Selection* customSelection=0); + void itemSelection_ResetParagraphStyle(Selection* customSelection=0); void itemSelection_EraseCharStyle(Selection* customSelection=0); void itemSelection_SetNamedParagraphStyle(const QString & name, Selection* customSelection=0); Index: scribus/ui/propertiespalette.cpp =================================================================== --- scribus/ui/propertiespalette.cpp (wersja 15654) +++ scribus/ui/propertiespalette.cpp (kopia robocza) @@ -4364,7 +4364,7 @@ return; if (HaveDoc) { - doc->itemSelection_EraseParagraphStyle(); + doc->itemSelection_ResetParagraphStyle(); CharStyle emptyCStyle; doc->itemSelection_SetCharStyle(emptyCStyle); }