¶ó. ±×·ì Á¤º¸ÀÇ »ç¿ë

ÆíÁý ·¹Äڵ带 ±×·ìÀ¸·Î ¹­´Â ±Ùº»ÀûÀÎ ÀÌÀ¯´Â Ãë¼Ò/Àç½ÇÇà½Ã¿¡ ÀÌ ¸í·ÉµéÀ» ÇѲ¨¹ø¿¡ ½ÇÇàÇϱâ À§Çؼ­ÀÌ´Ù. ·¹ÄÚµåÀÇ ±×·ì Ç¥½ÄÀº °á±¹ Undo, Redo ÇÔ¼ö¿¡¼­ »ç¿ëµÇ¸ç ¿À·ÎÁö ÀÌ ÇÔ¼öµé¸¸ÀÌ tick°ªÀ» ÂüÁ¶ÇÑ´Ù. ¸ÕÀú ±×·ì¿¡ ¼ÓÇÑ ·¹Äڵ带 ÇѲ¨¹ø¿¡ Ãë¼ÒÇϵµ·Ï Undo ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void CApiEdit::Undo()

{

     int from, to, len, dest;

    int tick;

 

     if (pUR[nowur].action == UR_NONE || pUR[nowur].status==UR_CANCELED) {

          nowur--;

     }

 

     SelStart=SelEnd=0;

    tick=pUR[nowur].tick;

 

    for (;;) {

          switch (pUR[nowur].action) {

              ....

          }

          pUR[nowur].status=UR_CANCELED;

        if (tick==0 || nowur==0)

           break;

        if (tick!=pUR[nowur-1].tick)

           break;

        nowur--;

    }

 

     ArrangeModified();

}

 

ÀÌ ¸í·ÉÀ» ¹Þ¾ÒÀ» ¶§ nowur À§Ä¡ÀÇ ·¹ÄÚµå Çϳª¸¸ Ãë¼ÒÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó nowur ÀÌÈÄ °°Àº ±×·ì¿¡ ¼ÓÇÑ ¸ðµç ·¹Äڵ带 ÇѲ¨¹ø¿¡ Ãë¼ÒÇØ¾ß ÇÑ´Ù. Ãë¼ÒÇÒ ·¹ÄÚµåÀÇ Æ½°ªÀ» ¸ÕÀú Á¶»çÇÏ°í ·çÇÁ¸¦ µ¹¸ç ÀÌ ·¹ÄÚµå¿Í °°Àº ƽ°ªÀ» °¡Áö´Â ¸ðµç ·¹Äڵ带 ¿¬¼ÓÀûÀ¸·Î Ãë¼ÒÇÑ´Ù. Ãë¼Ò ·çÇÁ°¡ Á¾·áµÉ Á¶°ÇÀº ´ÙÀ½ ¼¼ °¡Áö´Ù.

ù ¹ø°·Î nowur À§Ä¡ÀÇ ·¹Äڵ尡 ±×·ì¿¡ ¼ÓÇÏÁö ¾Ê´Â ´Üµ¶ ·¹ÄÚµåÀÏ ¶§´Ù. ·¹ÄÚµåÀÇ tick°ªÀÌ 0ÀÌ¸é ´Üµ¶ ·¹ÄÚµåÀÓÀ» ½±°Ô ¾Ë ¼ö ÀÖ´Ù. ÀÌ °æ¿ìµµ ÃÖ¼ÒÇÑ ÇÑ ¹øÀº Ãë¼Ò¸¦ ÇØ¾ß ÇϹǷΠÀÏ´Ü ·çÇÁ·Î ÁøÀÔÀº ÇØ¾ß ÇÏ¸ç ±×·¡¼­ Á¶°Ç Á¡°Ë¹®ÀÌ ·çÇÁ ³¡¿¡ ÀÖ´Ù. ÀÌ Á¶°Ç¿¡ ÀÇÇØ ´Üµ¶ ·¹ÄÚµåÀÏ ¶§´Â ±× ·¹ÄÚµå Çϳª¸¸ Ãë¼ÒµÈ´Ù.

µÎ ¹ø°´Â ¿¬¼ÓÀûÀ¸·Î Ãë¼Ò¸¦ ÇÏ´Ù°¡ ù ¹ø° ·¹Äڵ带 ¸¸³­ °æ¿ìÀÌ´Ù. ù ¹ø° ·¹Äڵ尡 ±×·ìÀÌ¸é ´õ ÀÌÀüÀÇ ·¹Äڵ尡 ¾øÀ¸¹Ç·Î ¾ð´õ ÇÃ·Î¿ì ¹æÁö¸¦ À§ÇØ ·çÇÁ¸¦ ºüÁ® ³ª°¡¾ß ÇÑ´Ù. À̶§ ÀÌ ·¹Äڵ尡 Á¤¸» ±×·ìÀÇ ¼±µÎÀÎÁö ¾Æ´ÑÁö´Â Á¤È®È÷ ¾Ë ¼ö ¾øÀ¸¸ç ¾Ë ÇÊ¿äµµ ¾ø´Ù. »óÇѼ± Á¦ÇÑ¿¡ ÀÇÇØ ±×·ìÀÇ Ç㸮°¡ Àß·Á ³ª°¬´õ¶óµµ ³²¾Æ ÀÖ´Â ·¹ÄÚµå±îÁö¸¸ Ãë¼ÒÇÏ¸é µÈ´Ù.

¼¼ ¹ø°´Â ÀÌÀü ·¹ÄÚµåÀÇ ±×·ì ID°¡ ÇöÀç ±×·ìÀÇ ID¿Í ´Ù¸¦ ¶§ÀÌ´Ù. À̶§´Â ¿¬¼ÓµÈ µÎ °³ÀÇ ±×·ìÀÌ ÀÎÁ¢ÇØ Àְųª ¾Æ´Ï¸é ÀÌÀü ·¹Äڵ尡 ´Üµ¶ ·¹ÄÚµåÀÏ °ÍÀÌ´Ù. ¾î·µç ÀÌ Á¶°ÇÀÌ ¸¸Á·µÇ¸é ±×·ì³»ÀÇ ¸ðµç ·¹Äڵ带 Ãë¼ÒÇßÀ¸¹Ç·Î ¹«»çÈ÷ ÀÓ¹«¸¦ ¿Ï·áÇÑ °ÍÀÌ´Ù. nowurÀÌ ÇöÀç ÀÛ¼ºÁßÀÎ ·¹ÄÚµå ¶Ç´Â ¹æ±Ý Ãë¼ÒµÈ ·¹Äڵ带 °¡¸®Å°µµ·Ï Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î nowur-- º¸´Ù ´õ ¾Õ¿¡¼­ ÀÌ Á¶°Ç Á¡°ËÀ» ÇØ¾ß ÇÑ´Ù. ¾Õ¿¡¼­µµ ÇÑ ¹ø °­Á¶¸¦ ÇßÁö¸¸ nowurÀ» ¾î¶»°Ô Á¤ÀÇÇϴ°¡¿¡ µû¶ó ÀÌ µÎ ÄÚµåÀÇ ¼ø¼­°¡ °áÁ¤µÇ¸ç ÀÌ ¼ø¼­°¡ Ʋ¸®¸é °÷°÷¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÑ´Ù.

RedoÀÇ Äڵ嵵 °ÅÀÇ À¯»çÇÏ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çϵµ·Ï ÇÏÀÚ.

 

void CApiEdit::Redo()

{

     int from, to, len;

    int tick;

 

     SelStart=SelEnd=0;

    tick=pUR[nowur].tick;

 

    for (;;) {

          switch (pUR[nowur].action) {

              ....

          }

          pUR[nowur].status=UR_MAKING;

          NextRecord();

        if (tick==0)

           break;

        if (tick!=pUR[nowur].tick)

           break;

     }

 

     ArrangeModified();

}

 

´Üµ¶ ·¹ÄÚµåÀÏ ¶§´Â ÇÑ ¹ø¸¸ Àç½ÇÇàÇÏ°í ±×·ìÀÏ ¶§´Â °°Àº ±×·ì¿¡ ¼ÓÇÑ ¸ðµç ·¹Äڵ带 ´Ù Àç½ÇÇàÇÑ´Ù. UndoÀÇ °æ¿ì¿Í´Â ´Þ¸® nowurÀÇ À§Ä¡¸¦ Á¤È®ÇÏ°Ô À¯ÁöÇϱâ À§ÇØ NextRecord È£ÃâÀÌ ·çÇÁ Á¾·á Á¶°Ç Á¡°Ëº¸´Ù ¸ÕÀú ÀÖ¾î¾ß ÇÑ´Ù. Ãë¼Ò ·¹ÄÚµå ¹è¿­ÀÇ Á¦ÀÏ ³¡¿¡´Â Ç×»ó ºó ·¹Äڵ尡 Çϳª ÀÖÀ¸¸ç ÀÌ ·¹ÄÚµåÀÇ tick°ªÀº 0À̱⠶§¹®¿¡ ¿À¹ö Ç÷οì Á¡°ËÀº ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

 

ÀÌ»óÀ¸·Î Ãë¼Ò¿Í Àç½ÇÇà¿¡ °ü·ÃµÈ ¸ðµç ½Ç½ÀÀ» ¸¶Ä£´Ù. ¿¹Á¦¸¦ ½ÇÇàÇغ¸¸é »ðÀÔ, »èÁ¦, À̵¿µ¿ÀÛÀ» <Ctrl+Z>·Î Ãë¼ÒÇÒ ¼ö ÀÖÀ¸¸ç ¼±Åÿµ¿ªÀ» ´ëüÇßÀ» ¶§µµ ÇÑ ¹øÀÇ Ãë¼Ò·Î ¿ø·¡´ë·Î µ¹¸± ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÀåÀÇ ÄÚµå´Â Á¶±Ý ³­À̵µ°¡ ÀÖÁö¸¸ ³ª¸§´ë·Î ¿¬±¸ÇØ º¼¸¸ÇÑ °¡Ä¡°¡ ÀÖÀ¸¸ç °ü·Ã À̷е鿡 ´ëÇØ Àß Á¤¸®ÇسõÀ¸¸é ¾ðÁ¨°¡´Â ½Ç¹«¿¡ Å©°Ô µµ¿òÀÌ µÉ °ÍÀÌ´Ù.