/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
-LIBEDITTEXT_UNDOEDIT_EXTERN
int
- LibEditText_UndoEdit_ExecReDoInfo(
+ LibEditText_UndoEdit_ExecRedoInfo(
LibEditText_TextInfo *p_tinfo,
- LibEditText_UndoInfo *p_udinfo )
+ LibEditText_UndoInfo *p_udinfo,
+ DWord dw_line,
+ DWord dw_pos )
{
int i_result = 0x00;
- LibEditText_LineInfo *p_line;
+ DWord dw_linfoid;
+ LibEditText_LineInfo *p_line = NULL;
+ if( dw_line < p_tinfo->dw_maxline )
+ { p_line = LibEditText_Section_SearchLine( p_tinfo, dw_line ); }
if( LIBEDITTEXT_UNDOCMD_INSERTLINE == p_udinfo->b_cmd ) {
+ if( dw_line == p_tinfo->dw_maxline ) {
+ assert( INVALID_LINE != p_tinfo->dw_line_end );
+ dw_linfoid = LibEditText_LineCtrl_AddLine(
+ p_tinfo, p_tinfo->dw_line_end, (dw_line - 1), 0, 0x00, 0x01 );
+ }
+ else {
+ assert( NULL != p_line );
+ dw_linfoid = LibEditText_LineCtrl_PushLine(
+ p_tinfo, p_line->dw_id, dw_line, 0, 0x01 );
+ }
+ if( INVALID_LINE == dw_linfoid ) {
+ i_result = -0x01;
+ }
}
else if( LIBEDITTEXT_UNDOCMD_DELETELINE == p_udinfo->b_cmd ) {
-
+ assert( NULL != p_line );
+ i_result = LibEditText_LineCtrl_DeleteLine(
+ p_tinfo, p_line, dw_line, 0x01 );
}
else if( LIBEDITTEXT_UNDOCMD_INSERTSTRING == p_udinfo->b_cmd ) {
-
+ assert( NULL != p_line );
+ i_result = LibEditText_LineEdit_InsertString(
+ p_tinfo, p_line, dw_line, dw_pos,
+ p_udinfo->pb_str, p_udinfo->dw_data, 0x01 );
}
else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == p_udinfo->b_cmd ) {
-
+ assert( NULL != p_line );
+ i_result = LibEditText_LineEdit_DeleteString(
+ p_tinfo, p_line, dw_line, dw_pos, p_udinfo->dw_data, 0x01 );
}
else if( LIBEDITTEXT_UNDOCMD_INSERTCHAR == p_udinfo->b_cmd ) {
-
+ assert( NULL != p_line );
+ i_result = LibEditText_LineEdit_InsertString(
+ p_tinfo, p_line, dw_line, dw_pos,
+ &(p_udinfo->b_data), 1, 0x01 );
}
else if( LIBEDITTEXT_UNDOCMD_DELETECHAR == p_udinfo->b_cmd ) {
-
+ assert( NULL != p_line );
+ i_result = LibEditText_LineEdit_DeleteString(
+ p_tinfo, p_line, dw_line, dw_pos, 1, 0x01 );
}
else {
-
+ // INVALID UndoCommand ---
+ i_result = -0x02;
}
return i_result;
----------------------------------------------------------------------*/
LIBEDITTEXT_UNDOEDIT_EXTERN
int
- LibEditText_UndoEdit_ExecUnDoInfo(
+ LibEditText_UndoEdit_ExecRedo(
+ LibEditText_TextInfo *p_tinfo )
+{
+ int i_result = 0x00;
+ Byte *pb_undo;
+ Byte *pb_last;
+ DWord dw_line;
+ DWord dw_pos;
+ DWord dw_undosize;
+ LibEditText_UndoInfo t_udinfo;
+
+ assert( NULL != p_tinfo );
+
+ if( 0 == p_tinfo->dw_undo_last ) {
+ return 0x01;
+ }
+
+ if( p_tinfo->dw_undo_lastsize == p_tinfo->dw_undo_last ) {
+ return 0x02;
+ }
+
+ pb_undo = p_tinfo->pb_undo + p_tinfo->dw_undo_last;
+ pb_last = NULL;
+ dw_line = p_tinfo->dw_undo_line;
+ dw_pos = p_tinfo->dw_undo_pos;
+ dw_undosize = pb_undo - p_tinfo->pb_undo;
+
+ memset( &t_udinfo, 0x00, sizeof( LibEditText_UndoInfo ) );
+
+ do{
+
+ i_result = LibEditText_UndoInfo_ReadUndoInfo(
+ p_tinfo, &t_udinfo, dw_line, dw_pos, pb_undo, 0x01 );
+
+ // Exec Redo ---
+ i_result = LibEditText_UndoEdit_ExecRedoInfo( p_tinfo, &t_udinfo, dw_line, dw_pos );
+ if( 0x00 != i_result ) { return i_result; }
+
+ LibEditText_UndoInfo_ReSetRedoFlag( pb_undo );
+
+ dw_line += t_udinfo.dw_plusline;
+ dw_pos += t_udinfo.dw_pluspos;
+ dw_undosize += t_udinfo.dw_uinfosize;
+ pb_undo += t_udinfo.dw_uinfosize;
+
+ }while(( p_tinfo->dw_undo_lastsize > dw_undosize ) && ( 0x00 == t_udinfo.t_udflag.bf_chain ));
+
+ p_tinfo->dw_undo_last = dw_undosize;
+ p_tinfo->dw_undo_end = dw_undosize - t_udinfo.dw_uinfosize;
+ p_tinfo->dw_undo_line = dw_line;
+ p_tinfo->dw_undo_pos = dw_pos;
+
+ return i_result;
+}
+
+
+/***********************************************************************
+***********************************************************************/
+LIBEDITTEXT_API_UNDOEDIT
+int
+ LibEditText_ExecRedo( int i_tinfoid )
+{
+ int i_result = 0x00;
+ LibEditText_TextInfo *p_tinfo;
+
+ p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
+ if( NULL == p_tinfo ) {
+ i_result = -0x01;
+ goto goto_LibEditText_ExecRedo_post;
+ }
+
+ i_result = LibEditText_UndoEdit_ExecRedo( p_tinfo );
+
+goto_LibEditText_ExecRedo_post:
+ return i_result;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
+ LibEditText_UndoEdit_ExecUndoInfo(
LibEditText_TextInfo *p_tinfo,
LibEditText_UndoInfo *p_udinfo,
DWord dw_line,
dw_line -= t_udinfo.dw_plusline;
dw_pos -= t_udinfo.dw_pluspos;
- i_result = LibEditText_UndoEdit_ExecUnDoInfo( p_tinfo, &t_udinfo, dw_line, dw_pos );
+ i_result = LibEditText_UndoEdit_ExecUndoInfo( p_tinfo, &t_udinfo, dw_line, dw_pos );
if( 0x00 != i_result ) { return i_result; }
LibEditText_UndoInfo_SetRedoFlag( pb_undo );
pb_now = LibEditText_UndoInfo_ReadDiffValue(
&(pt_udinfo->dw_pos), pb_now, (Byte)(pt_udflag->bf_pos), b_direct );
+ pt_udinfo->dw_uinfosize = pb_now - pb_undo;
+
return 0x00;
}
----------------------------------------------------------------------*/
LIBEDITTEXT_UNDOINFO_EXTERN
void
+ LibEditText_UndoInfo_ReSetRedoFlag(
+ Byte *pb_undo )
+{
+ LibEditText_UndoFlag *pt_udflag;
+
+ assert( NULL != pb_undo );
+
+ pt_udflag = (LibEditText_UndoFlag *)(pb_undo + 1);
+
+ pt_udflag->bf_redone = 0x00;
+
+ return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDOINFO_EXTERN
+void
LibEditText_UndoInfo_SetRedoFlag(
Byte *pb_undo )
{
pt_udflag->bf_pos = LibEditText_UndoInfo_SetDiffValue(
&pb_now, dw_pos, p_tinfo->dw_undo_pos );
- p_tinfo->dw_undo_line = dw_afterline;
- p_tinfo->dw_undo_pos = dw_afterpos;
- p_tinfo->dw_undo_end = p_tinfo->dw_undo_last;
- p_tinfo->dw_undo_last = pb_now - p_tinfo->pb_undo;;
+ p_tinfo->dw_undo_line = dw_afterline;
+ p_tinfo->dw_undo_pos = dw_afterpos;
+ p_tinfo->dw_undo_end = p_tinfo->dw_undo_last;
+ p_tinfo->dw_undo_last = pb_now - p_tinfo->pb_undo;;
+ p_tinfo->dw_undo_lastsize = p_tinfo->dw_undo_last;
return 0x00;
}
p_tinfo->pb_undo = pb_undo;
p_tinfo->dw_undo_bufsize = 0;
+ p_tinfo->dw_undo_lastsize = 0;
p_tinfo->dw_undo_last = 0;
p_tinfo->dw_undo_line = 0;
p_tinfo->dw_undo_pos = 0;
p_tinfo->pb_undo = NULL;
p_tinfo->dw_undo_bufsize = 0;
+ p_tinfo->dw_undo_lastsize = 0;
p_tinfo->dw_undo_last = 0;
p_tinfo->dw_undo_line = 0;
p_tinfo->dw_undo_pos = 0;