|
|
|
/***************************************************************************
|
|
|
|
editablestreamhistory.h - description
|
|
|
|
-------------------
|
|
|
|
begin : Sun Jul 9 2000
|
|
|
|
copyright : (C) 2000 by Artur Rataj
|
|
|
|
email : art@zeus.polsl.gliwice.pl
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef EDITABLESTREAMHISTORY_H
|
|
|
|
#define EDITABLESTREAMHISTORY_H
|
|
|
|
|
|
|
|
/** A template class adding undo/redo history for EDITABLE_STREAM paste and cut
|
|
|
|
* methods
|
|
|
|
* @author Artur Rataj
|
|
|
|
*/
|
|
|
|
template <class EDITABLE_STREAM> class EditableStreamHistory {
|
|
|
|
public:
|
|
|
|
/** Constructs the class with stream as an EDITABLE_STREAM and
|
|
|
|
* a given number of undo levels
|
|
|
|
*/
|
|
|
|
EditableStreamHistory(EDITABLE_STREAM* stream, const int undoLevels);
|
|
|
|
~EditableStreamHistory();
|
|
|
|
/** Cuts a stream at index, of length length.
|
|
|
|
* Uses undo/redo history.
|
|
|
|
* @return A stream that has been cut out
|
|
|
|
*/
|
|
|
|
EDITABLE_STREAM cut(const int index, const int length);
|
|
|
|
/** Pastes a stream at index. Uses undo/redo history */
|
|
|
|
void paste(const int index, EDITABLE_STREAM& pasteStream);
|
|
|
|
/** Replaces a stream at index. Uses undo/redo history */
|
|
|
|
void replace(const int index, EDITABLE_STREAM& replaceStream);
|
|
|
|
/** @return Whether undo possible */
|
|
|
|
bool undoPossible();
|
|
|
|
/** @return Whether redo possible */
|
|
|
|
bool redoPossible();
|
|
|
|
/** Undoes if possible */
|
|
|
|
void undo();
|
|
|
|
/** Redoes if possible */
|
|
|
|
void redo();
|
|
|
|
/** @return A pointer to editableStream */
|
|
|
|
EDITABLE_STREAM* editableStream();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/** An editable stream */
|
|
|
|
EDITABLE_STREAM* m_editableStream;
|
|
|
|
/** A number of undo levels */
|
|
|
|
int m_undoLevels;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> EditableStreamHistory<EDITABLE_STREAM>::
|
|
|
|
EditableStreamHistory(EDITABLE_STREAM* stream, const int undoLevels) {
|
|
|
|
m_editableStream = stream;
|
|
|
|
m_undoLevels = undoLevels;
|
|
|
|
}
|
|
|
|
template <class EDITABLE_STREAM> EditableStreamHistory<EDITABLE_STREAM>::~EditableStreamHistory() {
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> EDITABLE_STREAM
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::cut(const int index, const int length) {
|
|
|
|
EDITABLE_STREAM cut_stream = m_editableStream->cut(index, length);
|
|
|
|
return cut_stream;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> void
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::paste(const int index, EDITABLE_STREAM& pasteStream) {
|
|
|
|
m_editableStream->paste(index, pasteStream);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> void
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::replace(const int index, EDITABLE_STREAM& replaceStream) {
|
|
|
|
m_editableStream->cut(index, replaceStream.length());
|
|
|
|
m_editableStream->paste(index, replaceStream);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> bool
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::undoPossible() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> bool
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::redoPossible() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> void
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::undo() {
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> void
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::redo() {
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class EDITABLE_STREAM> EDITABLE_STREAM*
|
|
|
|
EditableStreamHistory<EDITABLE_STREAM>::editableStream() {
|
|
|
|
return m_editableStream;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|