Example #1
0
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;
}
Example #2
0
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;
		}
}
Example #4
0
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;
}