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.

701 lines
19 KiB

  1. /****************************/
  2. /* EESchema - libframe.cpp */
  3. /****************************/
  4. /* Gestion de la frame d'edition des composants en librairie
  5. */
  6. #include "fctsys.h"
  7. #include "gr_basic.h"
  8. #include "common.h"
  9. #include "program.h"
  10. #include "libcmp.h"
  11. #include "general.h"
  12. #include "bitmaps.h"
  13. #include "protos.h"
  14. #include "id.h"
  15. #include "libedit.xpm"
  16. /*****************************/
  17. /* class WinEDA_LibeditFrame */
  18. /*****************************/
  19. BEGIN_EVENT_TABLE(WinEDA_LibeditFrame, wxFrame)
  20. COMMON_EVENTS_DRAWFRAME
  21. EVT_CLOSE(WinEDA_LibeditFrame::OnCloseWindow)
  22. EVT_SIZE(WinEDA_LibeditFrame::OnSize)
  23. EVT_TOOL_RANGE(ID_ZOOM_PLUS_BUTT, ID_ZOOM_PAGE_BUTT,
  24. WinEDA_LibeditFrame::Process_Zoom)
  25. // Tools et boutons de Libedit:
  26. /* Main horizontal toolbar */
  27. EVT_TOOL_RANGE( ID_LIBEDIT_START_H_TOOL, ID_LIBEDIT_END_H_TOOL,
  28. WinEDA_LibeditFrame::Process_Special_Functions)
  29. EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_PART_NUMBER,
  30. WinEDA_LibeditFrame::Process_Special_Functions)
  31. EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_ALIAS,
  32. WinEDA_LibeditFrame::Process_Special_Functions)
  33. /* Right Vertical toolbar */
  34. EVT_TOOL( ID_NO_SELECT_BUTT,WinEDA_LibeditFrame::Process_Special_Functions)
  35. EVT_TOOL_RANGE( ID_LIBEDIT_START_V_TOOL, ID_LIBEDIT_END_V_TOOL,
  36. WinEDA_LibeditFrame::Process_Special_Functions)
  37. /* PopUp events and commands: */
  38. EVT_MENU_RANGE(ID_POPUP_START_RANGE, ID_POPUP_END_RANGE,
  39. WinEDA_LibeditFrame::Process_Special_Functions )
  40. // Annulation de commande en cours
  41. EVT_MENU_RANGE(ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
  42. WinEDA_LibeditFrame::Process_Special_Functions )
  43. // PopUp Menus pour Zooms trait�s dans drawpanel.cpp
  44. END_EVENT_TABLE()
  45. WinEDA_LibeditFrame::WinEDA_LibeditFrame(wxWindow * father, WinEDA_App *parent,
  46. const wxString & title, const wxPoint& pos, const wxSize& size):
  47. WinEDA_DrawFrame(father, LIBEDITOR_FRAME, parent, title, pos, size)
  48. {
  49. m_FrameName = wxT("LibeditFrame");
  50. m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines
  51. m_Draw_Grid = TRUE; // TRUE pour avoir la axes dessinee
  52. // Give an icon
  53. SetIcon(wxIcon(libedit_xpm));
  54. m_CurrentScreen = ScreenLib;
  55. GetSettings();
  56. SetSize(m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y);
  57. if ( DrawPanel ) DrawPanel-> m_Block_Enable = TRUE;
  58. ReCreateHToolbar();
  59. ReCreateVToolbar();
  60. DisplayLibInfos();
  61. Show(TRUE);
  62. }
  63. /**********************************************/
  64. WinEDA_LibeditFrame::~WinEDA_LibeditFrame(void)
  65. /**********************************************/
  66. {
  67. m_Parent->LibeditFrame = NULL;
  68. m_CurrentScreen = ScreenSch;
  69. }
  70. /***********************************************************/
  71. void WinEDA_LibeditFrame::OnCloseWindow(wxCloseEvent & Event)
  72. /***********************************************************/
  73. {
  74. LibraryStruct *Lib;
  75. if( m_CurrentScreen->IsModify() )
  76. {
  77. if( ! IsOK(this, _("LibEdit: Part modified!, Continue ?") ) )
  78. {
  79. Event.Veto(); return;
  80. }
  81. else m_CurrentScreen->ClrModify();
  82. }
  83. for (Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext)
  84. {
  85. if( Lib->m_Modified )
  86. {
  87. wxString msg;
  88. msg.Printf( _("Library %s modified!, Continue ?"), Lib->m_Name.GetData());
  89. if( ! IsOK(this, msg) )
  90. {
  91. Event.Veto(); return;
  92. }
  93. }
  94. }
  95. SaveSettings();
  96. Destroy();
  97. }
  98. /******************************************/
  99. void WinEDA_LibeditFrame::SetToolbars(void)
  100. /******************************************/
  101. /* Enable or disable tools of the differents toolbars,
  102. according to the current conditions or options
  103. */
  104. {
  105. if( m_HToolBar == NULL ) return;
  106. if ( CurrentLib == NULL )
  107. {
  108. if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,FALSE);
  109. }
  110. else
  111. {
  112. if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,TRUE);
  113. }
  114. if ( CurrentLibEntry == NULL )
  115. {
  116. if ( m_HToolBar )
  117. {
  118. m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE);
  119. m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,FALSE);
  120. m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,FALSE);
  121. m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,FALSE);
  122. m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE);
  123. m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE);
  124. m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE);
  125. m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE);
  126. m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, FALSE);
  127. m_SelpartBox->Enable( FALSE);
  128. m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,FALSE);
  129. m_HToolBar->EnableTool(ID_LIBEDIT_REDO,FALSE);
  130. }
  131. g_EditPinByPinIsOn = FALSE;
  132. m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
  133. if ( m_VToolBar )
  134. {
  135. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, FALSE);
  136. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, FALSE);
  137. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, FALSE);
  138. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, FALSE);
  139. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, FALSE);
  140. m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, FALSE);
  141. m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, FALSE);
  142. m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, FALSE);
  143. m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, FALSE);
  144. }
  145. }
  146. else
  147. {
  148. if ( m_HToolBar )
  149. {
  150. m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE);
  151. m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,TRUE);
  152. m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,TRUE);
  153. m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,TRUE);
  154. if ( (CurrentLibEntry->m_UnitCount > 1) || g_AsDeMorgan )
  155. m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, TRUE);
  156. else
  157. m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE);
  158. m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
  159. m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, g_AsDeMorgan);
  160. m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, g_AsDeMorgan);
  161. /* Enable the "get doc" tool */
  162. bool enable_dtool = FALSE;
  163. if ( ! CurrentAliasName.IsEmpty() )
  164. {
  165. int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName);
  166. if ( AliasLocation >= 0 )
  167. if ( ! CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME].IsEmpty() )
  168. enable_dtool = TRUE;
  169. }
  170. else if ( ! CurrentLibEntry->m_DocFile.IsEmpty() ) enable_dtool = TRUE;
  171. if ( enable_dtool ) m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, TRUE);
  172. else m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE);
  173. m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, TRUE);
  174. m_SelpartBox->Enable( (CurrentLibEntry->m_UnitCount > 1 ) ? TRUE : FALSE);
  175. if ( GetScreen() )
  176. {
  177. m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,GetScreen()->m_UndoList);
  178. m_HToolBar->EnableTool(ID_LIBEDIT_REDO,GetScreen()->m_RedoList);
  179. }
  180. }
  181. if ( m_VToolBar )
  182. {
  183. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, TRUE);
  184. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, TRUE);
  185. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, TRUE);
  186. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, TRUE);
  187. m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, TRUE);
  188. m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, TRUE);
  189. m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, TRUE);
  190. m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, TRUE);
  191. m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, TRUE);
  192. }
  193. }
  194. DisplayUnitsMsg();
  195. }
  196. /**************************************/
  197. int WinEDA_LibeditFrame::BestZoom(void)
  198. /**************************************/
  199. {
  200. int dx, dy, ii,jj ;
  201. int bestzoom;
  202. wxSize size;
  203. EDA_Rect BoundaryBox;
  204. if ( CurrentLibEntry )
  205. {
  206. BoundaryBox = CurrentLibEntry->GetBoundaryBox(CurrentUnit, CurrentConvert);
  207. dx = BoundaryBox.GetWidth();
  208. dy = BoundaryBox.GetHeight();
  209. }
  210. else
  211. {
  212. dx = m_CurrentScreen->m_CurrentSheet->m_Size.x;
  213. dy = m_CurrentScreen->m_CurrentSheet->m_Size.y;
  214. }
  215. size = DrawPanel->GetClientSize();
  216. size.x -= 60; // Pour marges haut et bas
  217. ii = abs (dx / size.x);
  218. jj = abs (dy / size.y);
  219. /* determination du zoom existant le plus proche */
  220. bestzoom = MAX(ii, jj) + 1;
  221. if ( CurrentLibEntry )
  222. {
  223. m_CurrentScreen->m_Curseur = BoundaryBox.Centre();
  224. }
  225. else
  226. {
  227. m_CurrentScreen->m_Curseur.x = 0;
  228. m_CurrentScreen->m_Curseur.y = 0;
  229. }
  230. return(bestzoom);
  231. }
  232. /*************************************************************************/
  233. void WinEDA_LibeditFrame::Process_Special_Functions(wxCommandEvent& event)
  234. /*************************************************************************/
  235. {
  236. int id = event.GetId();
  237. wxPoint pos;
  238. wxClientDC dc(DrawPanel);
  239. DrawPanel->m_IgnoreMouseEvents = TRUE;
  240. DrawPanel->PrepareGraphicContext(&dc);
  241. wxGetMousePosition(&pos.x, &pos.y);
  242. pos.y += 20;
  243. switch ( id ) // Arret de la commande de d�placement en cours
  244. {
  245. case ID_POPUP_LIBEDIT_END_CREATE_ITEM:
  246. case ID_POPUP_LIBEDIT_PIN_EDIT:
  247. case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM:
  248. case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM:
  249. case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM:
  250. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM:
  251. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM:
  252. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM:
  253. case ID_POPUP_LIBEDIT_CANCEL_EDITING :
  254. case ID_POPUP_ZOOM_BLOCK:
  255. case ID_POPUP_DELETE_BLOCK:
  256. case ID_POPUP_COPY_BLOCK:
  257. case ID_POPUP_SELECT_ITEMS_BLOCK:
  258. case ID_POPUP_INVERT_BLOCK:
  259. case ID_POPUP_PLACE_BLOCK:
  260. case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT:
  261. case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT:
  262. break;
  263. case ID_POPUP_LIBEDIT_DELETE_ITEM:
  264. if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
  265. DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
  266. break;
  267. default:
  268. if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
  269. DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
  270. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString );
  271. break;
  272. }
  273. switch ( id )
  274. {
  275. case ID_LIBEDIT_SAVE_CURRENT_LIB:
  276. if( m_CurrentScreen->IsModify() )
  277. {
  278. if( IsOK(this, _("Include last component changes") ) )
  279. SaveOnePartInMemory();
  280. }
  281. SaveActiveLibrary();
  282. break;
  283. case ID_LIBEDIT_NEW_PART:
  284. {
  285. g_EditPinByPinIsOn = FALSE;
  286. LibItemToRepeat = NULL;
  287. CreateNewLibraryPart();
  288. GetScreen()->ClearUndoRedoList();
  289. ReDrawPanel();
  290. SetToolbars();
  291. break;
  292. }
  293. case ID_LIBEDIT_SELECT_CURRENT_LIB:
  294. SelectActiveLibrary();
  295. break;
  296. case ID_LIBEDIT_SELECT_PART:
  297. LibItemToRepeat = NULL;
  298. if ( LoadOneLibraryPart() )
  299. {
  300. g_EditPinByPinIsOn = FALSE;
  301. GetScreen()->ClearUndoRedoList();
  302. SetToolbars();
  303. }
  304. ReDrawPanel();
  305. break;
  306. case ID_LIBEDIT_SAVE_CURRENT_PART:
  307. SaveOnePartInMemory();
  308. break;
  309. case ID_LIBEDIT_GET_FRAME_EDIT_PART:
  310. InstallLibeditFrame(pos);
  311. break;
  312. case ID_LIBEDIT_DELETE_PART:
  313. LibItemToRepeat = NULL;
  314. DeleteOnePart();
  315. break;
  316. case ID_LIBEDIT_IMPORT_PART:
  317. LibItemToRepeat = NULL;
  318. ImportOnePart();
  319. GetScreen()->ClearUndoRedoList();
  320. ReDrawPanel();
  321. break;
  322. case ID_LIBEDIT_EXPORT_PART:
  323. ExportOnePart(FALSE);
  324. break;
  325. case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART:
  326. ExportOnePart(TRUE);
  327. break;
  328. case ID_LIBEDIT_CHECK_PART :
  329. if ( CurrentLibEntry )
  330. if ( TestPins(CurrentLibEntry) == FALSE )
  331. DisplayInfo(this, _(" Tst Pins OK!") );
  332. break;
  333. case ID_DE_MORGAN_NORMAL_BUTT:
  334. m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, TRUE);
  335. m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE);
  336. LibItemToRepeat = NULL;
  337. CurrentConvert = 1;
  338. ReDrawPanel();
  339. break;
  340. case ID_DE_MORGAN_CONVERT_BUTT:
  341. m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE);
  342. m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, TRUE);
  343. LibItemToRepeat = NULL;
  344. CurrentConvert = 2;
  345. ReDrawPanel();
  346. break;
  347. case ID_LIBEDIT_VIEW_DOC:
  348. if ( CurrentLibEntry )
  349. {
  350. wxString docfilename;
  351. if ( ! CurrentAliasName.IsEmpty() )
  352. {
  353. int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName);
  354. if ( AliasLocation >= 0 )
  355. docfilename = CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME];
  356. }
  357. else docfilename = CurrentLibEntry->m_DocFile;
  358. if ( ! docfilename.IsEmpty() )
  359. GetAssociatedDocument(this, g_RealLibDirBuffer, docfilename);
  360. }
  361. break;
  362. case ID_LIBEDIT_EDIT_PIN_BY_PIN:
  363. g_EditPinByPinIsOn = g_EditPinByPinIsOn ? FALSE : TRUE;
  364. m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
  365. break;
  366. case ID_LIBEDIT_SELECT_PART_NUMBER:
  367. {
  368. int ii = m_SelpartBox->GetChoice();
  369. if ( ii < 0 ) return;
  370. LibItemToRepeat = NULL;
  371. CurrentUnit = ii + 1;
  372. ReDrawPanel();
  373. }
  374. break;
  375. case ID_LIBEDIT_SELECT_ALIAS:
  376. {
  377. int ii = m_SelAliasBox->GetChoice();
  378. if ( ii < 0 ) return;
  379. LibItemToRepeat = NULL;
  380. if ( ii > 0 ) CurrentAliasName = m_SelAliasBox->GetValue();
  381. else CurrentAliasName.Empty();
  382. ReDrawPanel();
  383. }
  384. break;
  385. case ID_POPUP_LIBEDIT_PIN_EDIT:
  386. InstallPineditFrame(this, &dc, pos);
  387. break;
  388. case ID_LIBEDIT_PIN_BUTT:
  389. if ( CurrentLibEntry )
  390. {
  391. SetToolID( id, wxCURSOR_PENCIL, _("Add Pin"));
  392. }
  393. else
  394. {
  395. SetToolID( id, wxCURSOR_ARROW, _("Set Pin Opt"));
  396. InstallPineditFrame(this, &dc, pos);
  397. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
  398. }
  399. break;
  400. case ID_POPUP_LIBEDIT_CANCEL_EDITING :
  401. if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
  402. DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
  403. else
  404. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
  405. break;
  406. case ID_NO_SELECT_BUTT:
  407. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
  408. break;
  409. case ID_LIBEDIT_BODY_TEXT_BUTT:
  410. SetToolID( id, wxCURSOR_PENCIL, _("Add Text"));
  411. break;
  412. case ID_LIBEDIT_BODY_RECT_BUTT:
  413. SetToolID( id, wxCURSOR_PENCIL, _("Add Rectangle"));
  414. break;
  415. case ID_LIBEDIT_BODY_CIRCLE_BUTT:
  416. SetToolID( id, wxCURSOR_PENCIL, _("Add Circle"));
  417. break;
  418. case ID_LIBEDIT_BODY_ARC_BUTT:
  419. SetToolID( id, wxCURSOR_PENCIL, _("Add Arc"));
  420. break;
  421. case ID_LIBEDIT_BODY_LINE_BUTT:
  422. SetToolID( id, wxCURSOR_PENCIL, _("Add Line"));
  423. break;
  424. case ID_LIBEDIT_ANCHOR_ITEM_BUTT :
  425. SetToolID( id, wxCURSOR_HAND, _("Anchor"));
  426. break;
  427. case ID_LIBEDIT_IMPORT_BODY_BUTT :
  428. SetToolID( id, wxCURSOR_ARROW, _("Import"));
  429. LoadOneSymbol(&dc);
  430. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
  431. break;
  432. case ID_LIBEDIT_EXPORT_BODY_BUTT :
  433. SetToolID( id, wxCURSOR_ARROW, _("Export"));
  434. SaveOneSymbol();
  435. SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
  436. break;
  437. case ID_POPUP_LIBEDIT_END_CREATE_ITEM:
  438. DrawPanel->MouseToCursorSchema();
  439. if ( CurrentDrawItem )
  440. {
  441. EndDrawGraphicItem(&dc);
  442. }
  443. break;
  444. case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM:
  445. if ( CurrentDrawItem )
  446. {
  447. DrawPanel->CursorOff(&dc);
  448. switch ( CurrentDrawItem->m_StructType )
  449. {
  450. case COMPONENT_ARC_DRAW_TYPE:
  451. case COMPONENT_CIRCLE_DRAW_TYPE:
  452. case COMPONENT_RECT_DRAW_TYPE:
  453. case COMPONENT_POLYLINE_DRAW_TYPE:
  454. case COMPONENT_LINE_DRAW_TYPE:
  455. EditGraphicSymbol(&dc, CurrentDrawItem);
  456. break;
  457. case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE:
  458. EditSymbolText(&dc, CurrentDrawItem);
  459. break;
  460. default:;
  461. }
  462. DrawPanel->CursorOn(&dc);
  463. }
  464. break;
  465. case ID_LIBEDIT_DELETE_ITEM_BUTT:
  466. if ( CurrentLibEntry == NULL) { wxBell(); break; }
  467. SetToolID( id, wxCURSOR_BULLSEYE, _("Delete item"));
  468. break;
  469. case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT:
  470. // Delete the last created segment, while creating a polyline draw item
  471. if ( CurrentDrawItem == NULL) break;
  472. DrawPanel->MouseToCursorSchema();
  473. DeleteDrawPoly(&dc);
  474. break;
  475. case ID_POPUP_LIBEDIT_DELETE_ITEM:
  476. if ( CurrentDrawItem == NULL) break;
  477. DrawPanel->MouseToCursorSchema();
  478. DrawPanel->CursorOff(&dc);
  479. SaveCopyInUndoList(CurrentLibEntry);
  480. if ( CurrentDrawItem->m_StructType == COMPONENT_PIN_DRAW_TYPE )
  481. {
  482. DeletePin(&dc, CurrentLibEntry, (LibDrawPin*)CurrentDrawItem);
  483. }
  484. else
  485. {
  486. if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur)
  487. DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
  488. else DeleteOneLibraryDrawStruct(DrawPanel, &dc, CurrentLibEntry,CurrentDrawItem, TRUE);
  489. }
  490. CurrentDrawItem = NULL;
  491. m_CurrentScreen->SetModify();
  492. DrawPanel->CursorOn(&dc);
  493. break;
  494. case ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST:
  495. if ( CurrentDrawItem == NULL) break;
  496. DrawPanel->MouseToCursorSchema();
  497. if ( CurrentDrawItem->m_StructType == COMPONENT_PIN_DRAW_TYPE )
  498. StartMovePin(&dc);
  499. else if ( CurrentDrawItem->m_StructType == COMPONENT_FIELD_DRAW_TYPE )
  500. StartMoveField(&dc, (LibDrawField *) CurrentDrawItem);
  501. else StartMoveDrawSymbol(&dc);
  502. break;
  503. case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT:
  504. if ( CurrentDrawItem == NULL) break;
  505. DrawPanel->CursorOff(&dc);
  506. DrawPanel->MouseToCursorSchema();
  507. if ( (CurrentDrawItem->m_Flags & IS_NEW) == 0 )
  508. SaveCopyInUndoList(CurrentLibEntry);
  509. RotateSymbolText(&dc);
  510. DrawPanel->CursorOn(&dc);
  511. break;
  512. case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM:
  513. if ( CurrentDrawItem == NULL) break;
  514. DrawPanel->CursorOff(&dc);
  515. DrawPanel->MouseToCursorSchema();
  516. if ( CurrentDrawItem->m_StructType == COMPONENT_FIELD_DRAW_TYPE )
  517. {
  518. SaveCopyInUndoList(CurrentLibEntry);
  519. RotateField(&dc, (LibDrawField *) CurrentDrawItem);
  520. }
  521. DrawPanel->CursorOn(&dc);
  522. break;
  523. case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM:
  524. if ( CurrentDrawItem == NULL) break;
  525. DrawPanel->CursorOff(&dc);
  526. if ( CurrentDrawItem->m_StructType == COMPONENT_FIELD_DRAW_TYPE )
  527. {
  528. EditField(&dc, (LibDrawField *) CurrentDrawItem);
  529. }
  530. DrawPanel->CursorOn(&dc);
  531. break;
  532. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM:
  533. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM:
  534. case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM:
  535. if ( (CurrentDrawItem == NULL) ||
  536. (CurrentDrawItem->m_StructType != COMPONENT_PIN_DRAW_TYPE) )
  537. break;
  538. SaveCopyInUndoList(CurrentLibEntry);
  539. GlobalSetPins(&dc, (LibDrawPin *) CurrentDrawItem, id);
  540. DrawPanel->MouseToCursorSchema();
  541. break;
  542. case ID_POPUP_ZOOM_BLOCK:
  543. DrawPanel->m_AutoPAN_Request = FALSE;
  544. GetScreen()->BlockLocate.m_Command = BLOCK_ZOOM;
  545. HandleBlockEnd(&dc);
  546. break;
  547. case ID_POPUP_DELETE_BLOCK:
  548. DrawPanel->m_AutoPAN_Request = FALSE;
  549. GetScreen()->BlockLocate.m_Command = BLOCK_DELETE;
  550. DrawPanel->MouseToCursorSchema();
  551. HandleBlockEnd(&dc);
  552. break;
  553. case ID_POPUP_COPY_BLOCK:
  554. DrawPanel->m_AutoPAN_Request = FALSE;
  555. GetScreen()->BlockLocate.m_Command = BLOCK_COPY;
  556. DrawPanel->MouseToCursorSchema();
  557. HandleBlockPlace(&dc);
  558. break;
  559. case ID_POPUP_SELECT_ITEMS_BLOCK:
  560. DrawPanel->m_AutoPAN_Request = FALSE;
  561. GetScreen()->BlockLocate.m_Command = BLOCK_SELECT_ITEMS_ONLY;
  562. DrawPanel->MouseToCursorSchema();
  563. HandleBlockEnd(&dc);
  564. break;
  565. case ID_POPUP_INVERT_BLOCK:
  566. DrawPanel->m_AutoPAN_Request = FALSE;
  567. GetScreen()->BlockLocate.m_Command = BLOCK_INVERT;
  568. DrawPanel->MouseToCursorSchema();
  569. HandleBlockPlace(&dc);
  570. break;
  571. case ID_POPUP_PLACE_BLOCK:
  572. DrawPanel->m_AutoPAN_Request = FALSE;
  573. DrawPanel->MouseToCursorSchema();
  574. HandleBlockPlace(&dc);
  575. break;
  576. case ID_LIBEDIT_UNDO:
  577. GetComponentFromUndoList();
  578. DrawPanel->Refresh(TRUE);
  579. break;
  580. case ID_LIBEDIT_REDO:
  581. GetComponentFromRedoList();
  582. DrawPanel->Refresh(TRUE);
  583. break;
  584. default:
  585. DisplayError(this, wxT("WinEDA_LibeditFrame::Process_Special_Functions error"));
  586. break;
  587. }
  588. DrawPanel->MouseToCursorSchema();
  589. DrawPanel->m_IgnoreMouseEvents = FALSE;
  590. if ( m_ID_current_state == 0 ) LibItemToRepeat = NULL;
  591. }