MODULE * WinEDA_BasePcbFrame::Create_1_Module(wxDC * DC, const wxString & module_name) /************************************************************************************/ /* Creation d'un module : On place d'office les 2ers textes : 1er = type REF: nom du module 2eme = type VALEUR: "VAL**" Le module est insere en debut de liste des modules */ { MODULE* Module ; wxString Line; wxPoint newpos; /* Demande du nom du nouveau module */ if ( module_name.IsEmpty() ) { if ( Get_Message( _("Module Reference:"), Line, this ) != 0 ) return NULL; } else Line = module_name; Line.Trim(TRUE); Line.Trim(FALSE); Module = new MODULE(m_Pcb); Module->Pnext = m_Pcb->m_Modules; Module->Pback = m_Pcb; if( m_Pcb->m_Modules ) { m_Pcb->m_Modules->Pback = Module; } m_Pcb->m_Modules = Module; /* Creation du module : On place d'office les 2 textes ref et val : 1er = type REF: nom du module 2eme = type VALEUR: "VAL**" */ /* Mise a jour des caract du nouveau module */ newpos = m_CurrentScreen->m_Curseur; Module->SetPosition(newpos); Module->m_LastEdit_Time = time(NULL); /* Mise a jour du nom de Librairie (reference libr) */ Module->m_LibRef = Line; /* Mise a jour de la reference: */ Module->m_Reference->m_Text = Line; Module->m_Reference->SetWidth(ModuleTextWidth); Module->m_Reference->m_Size = ModuleTextSize; /* mise a jour de la valeurs */ Module->m_Value->m_Text = wxT("VAL**"); Module->m_Value->SetWidth(ModuleTextWidth); Module->m_Value->m_Size = ModuleTextSize; Module->Display_Infos(this); return Module; }
MODULE * WinEDA_BasePcbFrame::Copie_Module(MODULE * module) /**********************************************************/ /* copie le module "module" en position courante */ { MODULE * newmodule; if (module == NULL ) return NULL; m_CurrentScreen->SetModify(); /* Duplication du module */ m_Pcb->m_Status_Pcb = 0; newmodule = new MODULE(m_Pcb); newmodule->Copy(module); newmodule->m_Parent = m_Pcb; newmodule->AddToChain(module); newmodule->m_Flags = IS_NEW; build_liste_pads(); newmodule->Display_Infos(this); m_Pcb->m_Status_Pcb &= ~CHEVELU_LOCAL_OK; return newmodule; }
void WinEDA_PcbFrame::Show_1_Ratsnest(EDA_BaseStruct * item, wxDC * DC) /**********************************************************************/ /* Affiche le ratsnest relatif au net du pad pointe par la souris ou au module localise par la souris Efface le chevelu affiche si aucun module ou pad n'est selectionne */ { int ii; CHEVELU * pt_chevelu; D_PAD * pt_pad = NULL; MODULE * Module = NULL; if (g_Show_Ratsnest) return; // Deja Affich� if((m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 ) { Compile_Ratsnest( DC, TRUE ); } if ( item && (item->m_StructType == TYPEPAD) ) { pt_pad = (D_PAD*)item; Module = (MODULE *) pt_pad->m_Parent; } if ( pt_pad ) /* Affichage du chevelu du net correspondant */ { pt_pad->Display_Infos(this); pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest; for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii--) { if( pt_chevelu->m_NetCode == pt_pad->m_NetCode) { if( (pt_chevelu->status & CH_VISIBLE) != 0 ) continue; pt_chevelu->status |= CH_VISIBLE; if( (pt_chevelu->status & CH_ACTIF) == 0 ) continue; GRSetDrawMode(DC, GR_XOR); GRLine( &DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x, pt_chevelu->pad_start->m_Pos.y, pt_chevelu->pad_end->m_Pos.x, pt_chevelu->pad_end->m_Pos.y, g_DesignSettings.m_RatsnestColor); } } } else { if ( item && (item->m_StructType == TYPEMODULE) ) { Module = (MODULE*)item; } if( Module) { Module->Display_Infos(this); pt_pad = Module->m_Pads; for( ; pt_pad != NULL; pt_pad = (D_PAD*)pt_pad->Pnext) { pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest; for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii--) { if( (pt_chevelu->pad_start == pt_pad) || (pt_chevelu->pad_end == pt_pad) ) { if( pt_chevelu->status & CH_VISIBLE ) continue; pt_chevelu->status |= CH_VISIBLE; if( (pt_chevelu->status & CH_ACTIF) == 0 ) continue; GRSetDrawMode(DC, GR_XOR); GRLine(&DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x, pt_chevelu->pad_start->m_Pos.y, pt_chevelu->pad_end->m_Pos.x, pt_chevelu->pad_end->m_Pos.y, g_DesignSettings.m_RatsnestColor); } } } pt_pad = NULL; } } /* Effacement complet des selections si aucun pad ou module n'a ete localise */ if( (pt_pad == NULL) && (Module == NULL) ) { MsgPanel->EraseMsgBox(); DrawGeneralRatsnest(DC); pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest; for( ii = m_Pcb->GetNumRatsnests();(ii > 0) && pt_chevelu; pt_chevelu++, ii--) pt_chevelu->status &= ~CH_VISIBLE; } }
MODULE * WinEDA_ModuleEditFrame::Import_Module(wxDC * DC) /*********************************************************/ /* Importation de modules Hors librairie Lit 1 fichier type Empreinte et place le module sur PCB */ { int NbLine = 0; char Line[1024]; wxString CmpFullFileName; FILE * dest; MODULE * module = NULL; /* Lecture Fichier module */ CmpFullFileName = EDA_FileSelector( _("Import Module:"), wxEmptyString, /* Chemin par defaut */ wxEmptyString, /* nom fichier par defaut */ EXT_CMP, /* extension par defaut */ EXT_CMP_MASK, /* Masque d'affichage */ this, wxOPEN, TRUE ); if ( CmpFullFileName == wxEmptyString ) return NULL; if ( (dest = wxFopen(CmpFullFileName, wxT("rt")) ) == NULL ) { wxString msg; msg.Printf( _("File <%s> not found"), CmpFullFileName.GetData()); DisplayError(this, msg) ; return NULL; } /* Lecture Entete */ GetLine(dest, Line, &NbLine); if(strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0) { DisplayError(this, _("Not a module file")); return NULL; } /* Lecture du fichier: recherche du debut de la descr module */ while( GetLine(dest, Line, &NbLine) != NULL) { if(strnicmp( Line,"$MODULE",7) == 0) break; } module = new MODULE(m_Pcb); module->ReadDescr(dest, &NbLine); fclose(dest); /* Mise a jour du chainage */ if( m_Pcb->m_Modules ) { m_Pcb->m_Modules->Pback = module; } module->Pnext = m_Pcb->m_Modules; module->Pback = m_Pcb; m_Pcb->m_Modules = module; /* Affichage des caracteristiques : */ module->Display_Infos(this); Place_Module(module, DC) ; m_Pcb->m_Status_Pcb = 0 ; build_liste_pads(); return module; }