Stator bug fix for UNDO / REDO

This commit is contained in:
斟酌 鵬兄 2016-04-05 04:36:29 +08:00
parent fcfe5d9b60
commit 11dbf01ddf
4 changed files with 37 additions and 17 deletions

View File

@ -30,6 +30,8 @@
this.__cursor = Cursor; this.__cursor = Cursor;
this.__stator = new Stator( Cursor ); this.__stator = new Stator( Cursor );
this.__minReach = 0;
this.__insertLen = 0;
// Initialize this stack // Initialize this stack
this.__rec( "", true ); this.__rec( "", true );
@ -57,18 +59,27 @@
if( this.__stack ) if( this.__stack )
{ {
// If nothings changed // If nothings changed
if( this.__insertLength == 0 if( this.__minReach == 0
&& this.__punch == 0
&& this.__contentUndo === "" && this.__contentUndo === ""
) return; ) return;
if( this.__punch < this.__minReach )
{
this.__minReach = this.__punch;
}
this.__stack.store( this.__stack.store(
this.__stator.save( this.__insertLength, this.__contentUndo ) this.__stator.save(
this.__insertLen
, this.__contentUndo
, -this.__minReach )
); );
this.__cursor.rec.record( this.__stack ); this.__cursor.rec.record( this.__stack );
} }
this.__insertLength = 0; this.__punch = 0;
this.__contentUndo = ""; this.__contentUndo = "";
this.__stack = new Stack(); this.__stack = new Stack();
} }
@ -78,7 +89,14 @@
// todo // todo
} }
this.__insertLength += c.length; if( this.__punch < this.__minReach )
{
this.__insertLen = 0;
this.__minReach = this.__punch;
}
this.__punch += c.length;
this.__insertLen += c.length;
}; };
INSERT.prototype.__specialKey = function( e, inputChar ) INSERT.prototype.__specialKey = function( e, inputChar )
@ -96,7 +114,7 @@
var f = cur.aPos; var f = cur.aPos;
if( this.__insertLength <= 0 ) if( this.__punch <= this.__minReach )
{ {
this.__contentUndo = feeder.content.substr( f, 1 ) + this.__contentUndo; this.__contentUndo = feeder.content.substr( f, 1 ) + this.__contentUndo;
} }
@ -105,7 +123,8 @@
feeder.content.substring( 0, f ) feeder.content.substring( 0, f )
+ feeder.content.substring( f + 1 ); + feeder.content.substring( f + 1 );
this.__insertLength --; if( 0 < this.__insertLen ) this.__insertLen --;
this.__punch --;
} }
else if( e.kMap( "Del" ) ) else if( e.kMap( "Del" ) )
{ {
@ -126,6 +145,9 @@
INSERT.prototype.handler = function( e ) INSERT.prototype.handler = function( e )
{ {
e.preventDefault(); e.preventDefault();
if( e.ModKeys ) return;
var inputChar = Translate( e.key ); var inputChar = Translate( e.key );
if( inputChar.length != 1 ) if( inputChar.length != 1 )
@ -160,7 +182,6 @@
feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) ); feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
this.__rec( inputChar ); this.__rec( inputChar );
}; };
INSERT.prototype.getMessage = function() INSERT.prototype.getMessage = function()

View File

@ -294,7 +294,7 @@
var i = 0; var i = 0;
do do
{ {
if( line.lineNum == l ) break; if( line.lineNum == l || line.placeholder ) break;
pstart += line.toString().length + 1; pstart += line.toString().length + 1;
} }
while( line = line.next ); while( line = line.next );

View File

@ -147,7 +147,9 @@
if( 0 < this.__off ) if( 0 < this.__off )
{ {
d += this.__off; if( 0 < d && phantomSpace )
d += this.__off;
this.__off = 0; this.__off = 0;
} }

View File

@ -8,17 +8,12 @@
this.__startState = this.__saveCur(); this.__startState = this.__saveCur();
}; };
Stator.prototype.save = function( insertLength, contentUndo ) Stator.prototype.save = function( insertLength, contentUndo, removeLen )
{ {
if( removeLen == undefined ) removeLen = 0;
var cur = this.__cursor; var cur = this.__cursor;
var feeder = cur.feeder; var feeder = cur.feeder;
var startPos = this.__startPosition; var startPos = this.__startPosition - removeLen;
if( insertLength < 0 )
{
startPos += insertLength;
insertLength = 0;
}
var sSt = this.__startState; var sSt = this.__startState;
var eSt = this.__saveCur(); var eSt = this.__saveCur();
@ -38,6 +33,7 @@
cur.PEnd = st.p + 1; cur.PEnd = st.p + 1;
cur.X = st.x; cur.X = st.x;
cur.Y = st.y; cur.Y = st.y;
cur.pX = st.cpX - 1;
feeder.panX = st.px; feeder.panX = st.px;
feeder.panY = st.py; feeder.panY = st.py;
@ -54,6 +50,7 @@
p: c.PStart p: c.PStart
, x: c.X , x: c.X
, y: c.Y , y: c.Y
, cpX: c.pX
, px: c.feeder.panX , px: c.feeder.panX
, py: c.feeder.panY , py: c.feeder.panY
}; };