void ChangeListLevelCommand::redo() { if (!m_first) { KoTextCommandBase::redo(); UndoRedoFinalizer finalizer(this); for (int i = 0; i < m_blocks.size(); ++i) { m_lists.value(i)->updateStoredList(m_blocks.at(i)); QTextBlock currentBlock(m_blocks.at(i)); KoTextBlockData userData(currentBlock); userData.setCounterWidth(-1.0); } } else { for (int i = 0; i < m_blocks.size() && m_lists.value(i); ++i) { if (!m_lists.value(i)->style()->hasLevelProperties(m_levels.value(i))) { KoListLevelProperties llp = m_lists.value(i)->style()->levelProperties(m_levels.value(i)); if (llp.alignmentMode() == false) { //old list mode, see KoListLevelProperties::alignmentMode() documentation llp.setIndent((m_levels.value(i)-1) * 20); //TODO make this configurable } else { llp.setTabStopPosition(MARGIN_DEFAULT*(m_levels.value(i)+1)); llp.setMargin(MARGIN_DEFAULT*(m_levels.value(i)+1)); llp.setTextIndent(- MARGIN_DEFAULT); } llp.setDisplayLevel(llp.displayLevel() + m_coefficient); llp.setLevel(m_levels.value(i)); m_lists.value(i)->style()->setLevelProperties(llp); } m_lists.value(i)->add(m_blocks.at(i), m_levels.value(i)); } } m_first = false; }
ChangeListCommand::ChangeListCommand(const QTextCursor &cursor, KoListStyle::Style style, int level, ChangeFlags flags, QUndoCommand *parent) : TextCommandBase(parent), m_flags(flags), m_first(true) { const bool styleCompletelySetAlready = extractTextBlocks(cursor, level, style); QSet<int> levels = m_levels.values().toSet(); KoListStyle listStyle; // If the style is already completely set, we unset it instead if (styleCompletelySetAlready) style = KoListStyle::None; foreach (int lev, levels) { KoListLevelProperties llp; llp.setLevel(lev); llp.setStyle(style); if (KoListStyle::isNumberingStyle(style)) { llp.setStartValue(1); llp.setListItemSuffix("."); } if (lev > 1) llp.setIndent((lev-1) * 20); // make this configurable listStyle.setLevelProperties(llp); }