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.

241 lines
6.3 KiB

  1. /***************************************/
  2. /* edit.cpp: Gerbview events functions */
  3. /***************************************/
  4. #include "fctsys.h"
  5. #include "class_drawpanel.h"
  6. #include "confirm.h"
  7. #include "common.h"
  8. #include "gestfich.h"
  9. #include "appl_wxstruct.h"
  10. #include "gerbview.h"
  11. #include "pcbplot.h"
  12. #include "kicad_device_context.h"
  13. #include "gerbview_id.h"
  14. #include "class_GERBER.h"
  15. /* Process the command triggered by the left button of the mouse when a tool
  16. * is already selected.
  17. */
  18. void WinEDA_GerberFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
  19. {
  20. BOARD_ITEM* DrawStruct = GetScreen()->GetCurItem();
  21. wxString msg;
  22. if( m_ID_current_state == 0 )
  23. {
  24. if( DrawStruct && (DrawStruct->m_Flags & ~DRAW_ERASED) )
  25. {
  26. msg.Printf( wxT( "WinEDA_GerberFrame::ProcessCommand err: Struct %d, m_Flags = %X" ),
  27. (unsigned) DrawStruct->Type(),
  28. (unsigned) DrawStruct->m_Flags );
  29. DisplayError( this, msg );
  30. }
  31. else
  32. {
  33. DrawStruct = GerberGeneralLocateAndDisplay();
  34. GetScreen()->SetCurItem( DrawStruct );
  35. }
  36. }
  37. switch( m_ID_current_state )
  38. {
  39. case 0:
  40. break;
  41. case ID_NO_SELECT_BUTT:
  42. break;
  43. case ID_GERBVIEW_DELETE_ITEM_BUTT:
  44. DrawStruct = GerberGeneralLocateAndDisplay();
  45. if( DrawStruct == NULL )
  46. break;
  47. /* TODO:
  48. Delete_Item( DC, (GERBER_DRAW_ITEM*) DrawStruct );
  49. GetScreen()->SetCurItem( NULL );
  50. GetScreen()->SetModify();
  51. */
  52. break;
  53. default:
  54. DisplayError( this, wxT( "WinEDA_GerberFrame::ProcessCommand error" ) );
  55. break;
  56. }
  57. }
  58. /* Handles the selection of tools, menu, and popup menu commands.
  59. */
  60. void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event )
  61. {
  62. int id = event.GetId();
  63. int layer = GetScreen()->m_Active_Layer;
  64. GERBER* gerber_layer = g_GERBER_List[layer];
  65. wxPoint pos;
  66. wxGetMousePosition( &pos.x, &pos.y );
  67. pos.y += 20;
  68. switch( id )
  69. {
  70. case wxID_CUT:
  71. case wxID_COPY:
  72. case ID_POPUP_DELETE_BLOCK:
  73. case ID_POPUP_PLACE_BLOCK:
  74. case ID_POPUP_ZOOM_BLOCK:
  75. break;
  76. case ID_POPUP_CANCEL_CURRENT_COMMAND:
  77. DrawPanel->UnManageCursor( );
  78. /* Should not be executed, except bug */
  79. if( GetScreen()->m_BlockLocate.m_Command != BLOCK_IDLE )
  80. {
  81. GetScreen()->m_BlockLocate.m_Command = BLOCK_IDLE;
  82. GetScreen()->m_BlockLocate.m_State = STATE_NO_BLOCK;
  83. GetScreen()->m_BlockLocate.ClearItemsList();
  84. }
  85. if( m_ID_current_state == 0 )
  86. SetToolID( 0, 0, wxEmptyString );
  87. else
  88. DrawPanel->SetCursor( DrawPanel->m_PanelCursor = DrawPanel->m_PanelDefaultCursor );
  89. break;
  90. default:
  91. DrawPanel->UnManageCursor( 0, 0, wxEmptyString );
  92. break;
  93. }
  94. INSTALL_DC( dc, DrawPanel );
  95. switch( id )
  96. {
  97. case ID_EXIT:
  98. Close( TRUE );
  99. break;
  100. case ID_NEW_PROJECT:
  101. case ID_LOAD_PROJECT:
  102. Files_io( event );
  103. break;
  104. case ID_GERBVIEW_GLOBAL_DELETE:
  105. Erase_Current_Layer( TRUE );
  106. break;
  107. case ID_GET_TOOLS:
  108. // InstallToolsFrame(this, wxPoint(-1,-1) );
  109. break;
  110. case ID_FIND_ITEMS:
  111. // InstallFindFrame(this, pos);
  112. break;
  113. case ID_NO_SELECT_BUTT:
  114. SetToolID( 0, 0, wxEmptyString );
  115. break;
  116. case ID_POPUP_CLOSE_CURRENT_TOOL:
  117. SetToolID( 0, 0, wxEmptyString );
  118. break;
  119. case ID_POPUP_CANCEL_CURRENT_COMMAND:
  120. break;
  121. case ID_GERBVIEW_DELETE_ITEM_BUTT:
  122. SetToolID( id, wxCURSOR_BULLSEYE, wxT( "Delete item" ) );
  123. break;
  124. case ID_TOOLBARH_GERBVIEW_SELECT_LAYER:
  125. setActiveLayer(m_SelLayerBox->GetChoice());
  126. DrawPanel->Refresh( TRUE );
  127. break;
  128. case ID_TOOLBARH_GERBER_SELECT_TOOL:
  129. if( gerber_layer )
  130. {
  131. int tool = m_SelLayerTool->GetChoice();
  132. if( tool > 0 )
  133. tool = tool - 1 + FIRST_DCODE;
  134. else
  135. tool = 0;
  136. gerber_layer->m_Selected_Tool = tool;
  137. DrawPanel->Refresh( TRUE );
  138. }
  139. break;
  140. case ID_GERBVIEW_SHOW_LIST_DCODES:
  141. Liste_D_Codes( );
  142. break;
  143. case ID_GERBVIEW_SHOW_SOURCE:
  144. if( gerber_layer )
  145. {
  146. wxString editorname = wxGetApp().GetEditorName();
  147. if( !editorname.IsEmpty() )
  148. {
  149. wxFileName fn( gerber_layer->m_FileName );
  150. ExecuteFile( this, editorname, QuoteFullPath( fn ) );
  151. }
  152. }
  153. break;
  154. case ID_POPUP_PLACE_BLOCK:
  155. GetScreen()->m_BlockLocate.m_Command = BLOCK_MOVE;
  156. DrawPanel->m_AutoPAN_Request = FALSE;
  157. HandleBlockPlace( &dc );
  158. break;
  159. case ID_POPUP_ZOOM_BLOCK:
  160. GetScreen()->m_BlockLocate.m_Command = BLOCK_ZOOM;
  161. GetScreen()->m_BlockLocate.SetMessageBlock( this );
  162. GetScreen()->m_BlockLocate.SetMessageBlock( this );
  163. HandleBlockEnd( &dc );
  164. break;
  165. case ID_POPUP_DELETE_BLOCK:
  166. GetScreen()->m_BlockLocate.m_Command = BLOCK_DELETE;
  167. GetScreen()->m_BlockLocate.SetMessageBlock( this );
  168. HandleBlockEnd( &dc );
  169. break;
  170. case ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS:
  171. if( gerber_layer )
  172. Delete_DCode_Items( &dc, gerber_layer->m_Selected_Tool,
  173. ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer );
  174. break;
  175. default:
  176. wxMessageBox( wxT( "WinEDA_GerberFrame::Process_Special_Functions error" ) );
  177. break;
  178. }
  179. SetToolbars();
  180. }
  181. /* Called on a double click of left mouse button.
  182. */
  183. void WinEDA_GerberFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
  184. {
  185. EDA_BaseStruct* DrawStruct = GetScreen()->GetCurItem();
  186. switch( m_ID_current_state )
  187. {
  188. case 0:
  189. if( (DrawStruct == NULL) || ((DrawStruct->m_Flags & ~DRAW_ERASED) == 0) )
  190. {
  191. DrawStruct = GerberGeneralLocateAndDisplay();
  192. }
  193. break;
  194. default:
  195. break;
  196. }
  197. }