You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.0 KiB

  1. /********************************************************/
  2. /* Effacements : Routines de sauvegarde et d'effacement */
  3. /********************************************************/
  4. #include "fctsys.h"
  5. #include "common.h"
  6. #include "gerbview.h"
  7. #include "protos.h"
  8. /* Routines externes : */
  9. /* Routines Locales */
  10. /***********************************************/
  11. void WinEDA_GerberFrame::UnDeleteItem( wxDC* DC )
  12. /***********************************************/
  13. /* Restitution d'un element (MODULE ou TRACK ) Efface
  14. */
  15. {
  16. BOARD_ITEM* item;
  17. BOARD_ITEM* next;
  18. int net_code;
  19. if( !g_UnDeleteStackPtr )
  20. return;
  21. g_UnDeleteStackPtr--;
  22. item = g_UnDeleteStack[g_UnDeleteStackPtr];
  23. if( item == NULL )
  24. return; // Ne devrait pas se produire
  25. switch( item->Type() )
  26. {
  27. case TYPEVIA:
  28. case TYPETRACK:
  29. for( ; item; item = next )
  30. {
  31. next = item->Next();
  32. item->SetState( DELETED, OFF ); /* Effacement du bit DELETED */
  33. Trace_Segment( DrawPanel, DC, (TRACK*) item, GR_OR );
  34. }
  35. item = g_UnDeleteStack[g_UnDeleteStackPtr];
  36. net_code = ((TRACK*) item)->GetNet();
  37. m_Pcb->Add( item );
  38. g_UnDeleteStack[g_UnDeleteStackPtr] = NULL;
  39. break;
  40. default:
  41. DisplayError( this, wxT( "Undelete struct: type Struct inattendu" ) );
  42. break;
  43. }
  44. }
  45. /********************************************************************/
  46. BOARD_ITEM* SaveItemEfface( BOARD_ITEM* PtItem, int nbitems )
  47. /********************************************************************/
  48. /* Sauvegarde d'un element aux fins de restitution par Undelete
  49. * Supporte actuellement : Module et segments de piste
  50. */
  51. {
  52. BOARD_ITEM* NextS, * PtStruct = PtItem;
  53. int ii;
  54. if( (PtItem == NULL) || (nbitems == 0) )
  55. return NULL;
  56. if( g_UnDeleteStackPtr >= UNDELETE_STACK_SIZE )
  57. {
  58. /* Delete last deleted item, and shift stack. */
  59. g_UnDeleteStack[0]->DeleteStructure();
  60. for( ii = 0; ii < (g_UnDeleteStackPtr - 1); ii++ )
  61. {
  62. g_UnDeleteStack[ii] = g_UnDeleteStack[ii + 1];
  63. }
  64. g_UnDeleteStackPtr--;;
  65. }
  66. g_UnDeleteStack[g_UnDeleteStackPtr++] = PtItem;
  67. switch( PtStruct->Type() )
  68. {
  69. case TYPEVIA:
  70. case TYPETRACK:
  71. {
  72. EDA_BaseStruct* Back = NULL;
  73. g_UnDeleteStack[g_UnDeleteStackPtr - 1] = PtStruct;
  74. for( ; nbitems > 0; nbitems--, PtStruct = NextS )
  75. {
  76. NextS = PtStruct->Next();
  77. ( (TRACK*) PtStruct )->UnLink();
  78. PtStruct->SetState( DELETED, ON );
  79. if( nbitems <= 1 )
  80. NextS = NULL; /* fin de chaine */
  81. PtStruct->Pnext = NextS;
  82. PtStruct->Pback = Back; Back = PtStruct;
  83. if( NextS == NULL )
  84. break;
  85. }
  86. }
  87. break;
  88. default:
  89. break;
  90. }
  91. return g_UnDeleteStack[g_UnDeleteStackPtr - 1];
  92. }