/************************************************/ /* Module editor: Dialog box for editing module */ /* properties and carateristics */ /************************************************/ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "pcbnew.h" #include "autorout.h" #include "trigo.h" #include "bitmaps.h" #include "3d_struct.h" #include "3d_viewer.h" #include "protos.h" /* Variables locales: */ bool GoToEditor = FALSE; /**************************************/ /* class WinEDA_ModulePropertiesFrame */ /**************************************/ #include "dialog_edit_module.cpp" /*******************************************************************/ void WinEDA_BasePcbFrame::InstallModuleOptionsFrame(MODULE * Module, wxDC * DC, const wxPoint & pos) /*******************************************************************/ /* Fonction relai d'installation de la frame d'édition des proprietes du module*/ { WinEDA_ModulePropertiesFrame * frame = new WinEDA_ModulePropertiesFrame(this, Module, DC, pos); frame->ShowModal(); frame->Destroy(); if ( GoToEditor && GetScreen()->m_CurrentItem ) { if (m_Parent->m_ModuleEditFrame == NULL ) { m_Parent->m_ModuleEditFrame = new WinEDA_ModuleEditFrame(this, m_Parent,_("Module Editor"), wxPoint(-1, -1), wxSize(600,400) ); } m_Parent->m_ModuleEditFrame->Load_Module_Module_From_BOARD( (MODULE*)GetScreen()->m_CurrentItem); GetScreen()->m_CurrentItem = NULL; GoToEditor = FALSE; m_Parent->m_ModuleEditFrame->Show(TRUE); m_Parent->m_ModuleEditFrame->Iconize(FALSE); } } /*******************************************************************/ void WinEDA_ModuleEditFrame::Place_Ancre(MODULE* pt_mod , wxDC * DC) /*******************************************************************/ /* Repositionne l'ancre sous le curseur souris Le module doit etre d'abort selectionne */ { int deltaX, deltaY; EDA_BaseStruct * PtStruct; D_PAD * pt_pad; if(pt_mod == NULL) return ; pt_mod->DrawAncre(DrawPanel, DC, wxPoint(0,0), DIM_ANCRE_MODULE, GR_XOR); deltaX = pt_mod->m_Pos.x - GetScreen()->m_Curseur.x; deltaY = pt_mod->m_Pos.y - GetScreen()->m_Curseur.y; pt_mod->m_Pos = GetScreen()->m_Curseur; /* Mise a jour des coord relatives des elements: les coordonnees relatives sont relatives a l'ancre, pour orient 0. il faut donc recalculer deltaX et deltaY en orientation 0 */ RotatePoint(&deltaX, &deltaY, - pt_mod->m_Orient); /* Mise a jour des coord relatives des pads */ pt_pad = (D_PAD*)pt_mod->m_Pads; for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext) { pt_pad->m_Pos0.x += deltaX; pt_pad->m_Pos0.y += deltaY; } /* Mise a jour des coord relatives contours .. */ PtStruct = pt_mod->m_Drawings; for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext) { switch( PtStruct->m_StructType) { case TYPEEDGEMODULE: #undef STRUCT #define STRUCT ((EDGE_MODULE*) PtStruct) STRUCT->m_Start0.x += deltaX; STRUCT->m_Start0.y += deltaY; STRUCT->m_End0.x += deltaX; STRUCT->m_End0.y += deltaY; break; case TYPETEXTEMODULE: #undef STRUCT #define STRUCT ((TEXTE_MODULE*) PtStruct) STRUCT->m_Pos0.x += deltaX; STRUCT->m_Pos0.y += deltaY; break; default: break; } } pt_mod->Set_Rectangle_Encadrement(); pt_mod->DrawAncre(DrawPanel, DC, wxPoint(0,0), DIM_ANCRE_MODULE, GR_OR); } /**********************************************************************/ void WinEDA_ModuleEditFrame::RemoveStruct(EDA_BaseStruct * Item, wxDC * DC) /**********************************************************************/ { if ( Item == NULL ) return; switch( Item->m_StructType ) { case TYPEPAD: DeletePad( (D_PAD*) Item, DC); break; case TYPETEXTEMODULE: { TEXTE_MODULE * text = (TEXTE_MODULE *) Item; if ( text->m_Type == TEXT_is_REFERENCE ) { DisplayError(this, _("Text is REFERENCE!") ); break; } if ( text->m_Type == TEXT_is_VALUE ) { DisplayError(this, _("Text is VALUE!") ); break; } DeleteTextModule(text, DC); } break; case TYPEEDGEMODULE: Delete_Edge_Module((EDGE_MODULE *) Item, DC); break; case TYPEMODULE: break; default: { wxString Line; Line.Printf( wxT(" Remove: StructType %d Inattendu"), Item->m_StructType); DisplayError(this, Line); } break; } }