1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/***************************************************************************
UndoSelection.cpp - Undo action for selection
-------------------
begin : Tue Jun 05 2001
copyright : (C) 2001 by Thomas Eschenbacher
email : Thomas Eschenbacher <Thomas.Eschenbacher@gmx.de>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "config.h"
#include <KLocalizedString>
#include "libkwave/SignalManager.h"
#include "libkwave/undo/UndoSelection.h"
//***************************************************************************
Kwave::UndoSelection::UndoSelection(Kwave::SignalManager &manager)
:UndoAction(),
m_manager(manager), m_offset(0), m_length(0), m_selected_tracks()
{
}
//***************************************************************************
Kwave::UndoSelection::UndoSelection(Kwave::SignalManager &manager,
QVector<unsigned int> selected_tracks,
sample_index_t offset,
sample_index_t length)
:UndoAction(),
m_manager(manager), m_offset(offset), m_length(length),
m_selected_tracks(selected_tracks)
{
}
//***************************************************************************
Kwave::UndoSelection::~UndoSelection()
{
}
//***************************************************************************
QString Kwave::UndoSelection::description()
{
return i18n("Selection");
}
//***************************************************************************
qint64 Kwave::UndoSelection::undoSize()
{
return sizeof(*this) +
(m_selected_tracks.count() * sizeof(unsigned int));
}
//***************************************************************************
qint64 Kwave::UndoSelection::redoSize()
{
return sizeof(*this) +
(m_manager.selectedTracks().count() * sizeof(unsigned int));
}
//***************************************************************************
bool Kwave::UndoSelection::store(Kwave::SignalManager &manager)
{
m_offset = manager.selection().offset();
m_length = manager.selection().length();
m_selected_tracks = manager.selectedTracks();
return true;
}
//***************************************************************************
Kwave::UndoAction *Kwave::UndoSelection::undo(Kwave::SignalManager &manager,
bool with_redo)
{
// store current selection for later redo
sample_index_t old_offset = manager.selection().offset();
sample_index_t old_length = manager.selection().length();
QVector<unsigned int> old_selected_tracks = manager.selectedTracks();
// restore the previous selection
manager.selectRange(m_offset, m_length);
manager.selectTracks(m_selected_tracks);
// store data for redo
if (with_redo) {
m_offset = old_offset;
m_length = old_length;
m_selected_tracks = old_selected_tracks;
return this;
} else {
return nullptr;
}
}
//***************************************************************************
void Kwave::UndoSelection::dump(const QString &indent)
{
qDebug("%sselect from [%lu ... %lu] (%lu)", DBG(indent),
static_cast<unsigned long int>(m_offset),
static_cast<unsigned long int>(m_offset + ((m_length) ?
(m_length - 1) : m_length)),
static_cast<unsigned long int>(m_length));
}
//***************************************************************************
//***************************************************************************
|