Initial commit: ACE-Step UI - Open source music generation interface
This commit is contained in:
Executable
+117
@@ -0,0 +1,117 @@
|
||||
(function ( PKAE ) {
|
||||
'use strict';
|
||||
|
||||
function PKState ( _depth, app ) {
|
||||
if (!_depth) _depth = 1;
|
||||
|
||||
var q = this;
|
||||
|
||||
var _id = 1;
|
||||
var _fireEvent = app.fireEvent;
|
||||
var _listenFor = app.listenFor;
|
||||
|
||||
var undo_state_list = [];
|
||||
var redo_state_list = [];
|
||||
|
||||
q.getLastUndoState = function () {
|
||||
return (undo_state_list [ undo_state_list.length - 1]);
|
||||
};
|
||||
|
||||
q.pushUndoState = function ( state ) {
|
||||
if (!state) return (false);
|
||||
|
||||
if (!state.id) state.id = ++_id;
|
||||
if (undo_state_list.length >= _depth) undo_state_list.shift ();
|
||||
|
||||
if (undo_state_list.length > 0)
|
||||
{
|
||||
if (undo_state_list[undo_state_list.length - 1].id !== state.id - 1)
|
||||
undo_state_list = [];
|
||||
}
|
||||
if (redo_state_list.length > 0)
|
||||
{
|
||||
if (redo_state_list[0].id !== state.id + 1)
|
||||
redo_state_list = [];
|
||||
}
|
||||
|
||||
undo_state_list.push ( state );
|
||||
|
||||
_fireEvent ( 'StatePush', undo_state_list.length );
|
||||
_fireEvent ( 'DidStateChange', undo_state_list, redo_state_list);
|
||||
|
||||
return (true);
|
||||
};
|
||||
|
||||
q.popUndoState = function () {
|
||||
var last_state =undo_state_list.pop ();
|
||||
|
||||
if (last_state) {
|
||||
if (redo_state_list.length > 0)
|
||||
{
|
||||
if (redo_state_list[0].id !== last_state.id + 1)
|
||||
redo_state_list = [];
|
||||
}
|
||||
|
||||
var temp = app.engine.wavesurfer.backend.buffer;
|
||||
_fireEvent ( 'StateDidPop', last_state, 1 );
|
||||
|
||||
last_state.data = temp;
|
||||
redo_state_list.unshift (last_state);
|
||||
|
||||
_fireEvent ( 'DidStateChange', undo_state_list, redo_state_list);
|
||||
}
|
||||
|
||||
return (last_state);
|
||||
};
|
||||
|
||||
q.shiftRedoState = function () {
|
||||
var last_state = redo_state_list.shift ();
|
||||
|
||||
if (last_state) {
|
||||
if (undo_state_list.length > 0)
|
||||
{
|
||||
if (undo_state_list[undo_state_list.length - 1].id !== last_state.id - 1)
|
||||
undo_state_list = [];
|
||||
}
|
||||
|
||||
var temp = app.engine.wavesurfer.backend.buffer;
|
||||
_fireEvent ( 'StateDidPop', last_state, 0 );
|
||||
|
||||
last_state.data = temp;
|
||||
undo_state_list.push (last_state);
|
||||
|
||||
_fireEvent ( 'DidStateChange', undo_state_list, redo_state_list);
|
||||
}
|
||||
|
||||
return (last_state);
|
||||
};
|
||||
|
||||
q.clearAllState = function () {
|
||||
undo_state_list = [];
|
||||
redo_state_list = [];
|
||||
|
||||
_fireEvent ( 'StateClearAll' );
|
||||
_fireEvent ( 'DidStateChange', [], []);
|
||||
};
|
||||
|
||||
_listenFor ('StateRequestPush', function ( _state ) {
|
||||
q.pushUndoState ( _state );
|
||||
});
|
||||
_listenFor ('StateRequestUndo', function () {
|
||||
q.popUndoState ();
|
||||
});
|
||||
_listenFor ('StateRequestRedo', function () {
|
||||
q.shiftRedoState ();
|
||||
});
|
||||
_listenFor ('StateRequestClearAll', function () {
|
||||
q.clearAllState ();
|
||||
});
|
||||
_listenFor ('StateRequestLastState', function () {
|
||||
_fireEvent ('StateDidLastState', q.getLastUndoState ());
|
||||
});
|
||||
// -
|
||||
};
|
||||
|
||||
PKAE._deps.state = PKState;
|
||||
|
||||
})( PKAudioEditor );
|
||||
Reference in New Issue
Block a user