Git commit bd05f88d5dd1de5dd6f3dbd3dd3220cdf3d43f9e by Thomas Eschenbacher. Committed on 25/02/2017 at 12:52. Pushed by eschenbacher into branch 'master'.
allow special value -1 as index for label:delete(...) to delete _all_ labels M +1 -0 CHANGES M +5 -3 doc/en/index.docbook M +32 -9 libkwave/SignalManager.cpp https://commits.kde.org/kwave/bd05f88d5dd1de5dd6f3dbd3dd3220cdf3d43f9e diff --git a/CHANGES b/CHANGES index 70d85c0d..fad166c8 100644 --- a/CHANGES +++ b/CHANGES @@ -44,6 +44,7 @@ * renamed command "delete_label" -> "label:delete" * renamed command "edit_label" -> "label:edit" * implemented loading and saving of labels + * allow special value -1 as index for label:delete to delete _all_ labels 0.9.2 [2016-06-26] diff --git a/doc/en/index.docbook b/doc/en/index.docbook index 59403a03..89218ac7 100644 --- a/doc/en/index.docbook +++ b/doc/en/index.docbook @@ -3320,7 +3320,7 @@ <!-- @COMMAND@ delete_track(index) --> <sect2 id="cmd_sect_delete_track"><title id="cmd_title_delete_track">&no-i18n-cmd_delete_track;</title> <simplesect> - <title>&i18n-cmd_syntax;<command>&no-i18n-cmd_label_delete;</command>(<replaceable>index</replaceable>)</title> + <title>&i18n-cmd_syntax;<command>&no-i18n-cmd_delete_track;</command>(<replaceable>index</replaceable>)</title> <para> Deletes a track, identified by its index (starting from zero). If no track with the given index exists, this command exits with an error. @@ -3483,12 +3483,14 @@ <simplesect> <title>&i18n-cmd_syntax;<command>&no-i18n-cmd_label_delete;</command>(<replaceable>index</replaceable>)</title> <para> - Deletes a label, identified by its index (starting from zero). + Deletes a label, identified by its index (starting from zero), or all + labels when using the special value -1 as index. If no label with the given index exists, this command does nothing. </para> </simplesect> <simplesect><title>Parameters</title><informaltable frame='none'><tgroup cols='2'><tbody> - <row><entry><parameter>index</parameter>:</entry><entry>index of the label to delete, starting with 0</entry></row> + <row><entry><parameter>index</parameter>:</entry><entry>index of the label to delete, + starting with 0 or -1 to delete all labels</entry></row> </tbody></tgroup></informaltable></simplesect> </sect2> diff --git a/libkwave/SignalManager.cpp b/libkwave/SignalManager.cpp index a21ad8e9..48f4554b 100644 --- a/libkwave/SignalManager.cpp +++ b/libkwave/SignalManager.cpp @@ -1905,20 +1905,43 @@ Kwave::Label Kwave::SignalManager::addLabel(sample_index_t pos, void Kwave::SignalManager::deleteLabel(int index, bool with_undo) { Kwave::LabelList labels(m_meta_data); + int count = Kwave::toInt(labels.count()); + if (!count) return; - if ((index < 0) || (index >= Kwave::toInt(labels.count()))) return; + if (index == -1) { + // special handling for index == -1 -> delete all labels - Kwave::MetaData label(labels.at(index)); + if (with_undo) startUndoTransaction(i18n("Delete All Labels")); - // register the undo action - if (with_undo) { - Kwave::UndoTransactionGuard undo(*this, i18n("Delete Label")); - if (!registerUndoAction(new(std::nothrow) - UndoDeleteMetaDataAction(Kwave::MetaDataList(label)))) - return; + for (index = count - 1; index >= 0; index--) { + Kwave::MetaData label(labels.at(index)); + if (with_undo) { + if (!registerUndoAction(new(std::nothrow) + UndoDeleteMetaDataAction(Kwave::MetaDataList(label)))) + break; + } + m_meta_data.remove(label); + } + } else { + // delete a single label + if ((index < 0) || (index >= count)) return; + + Kwave::MetaData label(labels.at(index)); + + // register the undo action + if (with_undo) { + startUndoTransaction(i18n("Delete Label")); + if (!registerUndoAction(new(std::nothrow) + UndoDeleteMetaDataAction(Kwave::MetaDataList(label)))) { + abortUndoTransaction(); + return; + } + } + + m_meta_data.remove(label); } - m_meta_data.remove(label); + if (with_undo) closeUndoTransaction(); // register this as a modification setModified(true);
