	/**************************************/
	/*	PCBNEW.H :  déclarations communes */
	/**************************************/
#ifndef PCBNEW_H
#define PCBNEW_H

#ifndef eda_global
#define eda_global extern
#endif

#include "pcbstruct.h"
#include "macros.h"

#define U_PCB (PCB_INTERNAL_UNIT/EESCHEMA_INTERNAL_UNIT)

/* valeur de flag indicant si le pointeur de reference pour une localisation
est le curseur sur grille ou le curseur a deplacement fin hors grille */
#define CURSEUR_ON_GRILLE   (0<<0)  
#define CURSEUR_OFF_GRILLE  (1<<0)

#define IGNORE_LOCKED       (1<<1)  ///< if module is locked, do not select for single module operation  
#define MATCH_LAYER         (1<<2)  ///< if module not on current layer, do not select 
#define VISIBLE_ONLY        (1<<3)  ///< if module not on a visible layer, do not select


#define START 0		/* ctes parametre dans les routines de localisation */
#define END 1

#define DIM_ANCRE_MODULE 3  /* dim du symbole de l'ancre (centre) des modules */
#define DIM_ANCRE_TEXTE 2	/* dim du symbole de l'ancre (centre) des textes */

/* Gestion du Menu Zoom */
#define ZOOM_PLUS	-1
#define ZOOM_MOINS  -2
#define ZOOM_AUTO	-3
#define ZOOM_CENTER -4
#define ZOOM_REDRAW -5

/* Bits Flags utilisés en édition (membre .m_Flags de EDA_BaseStruct)*/
#define IS_LINKED 1
#define IN_EDIT 2
#define IS_MOVED 4
#define IS_NEW 8
#define IS_RESIZED 0x10
#define IS_DRAGGED 0x20
#define STARTPOINT 0x100
#define ENDPOINT 0x200
#define SELECTED 0x400

/* Definition des cas ou l'on force l'affichage en SKETCH (membre .flags) */
#define FORCE_SKETCH (DRAG | EDIT )

/* Constantes pour options lecture fichier PCB */
#define APPEND_PCB 1	/* pour ajout d'un nouveau circuit */
#define NEWPCB 0		/* pour chargement normal */


eda_global wxArrayString g_LibName_List;	// library list to load

eda_global wxSize g_GridList[]
#ifdef MAIN
 = {
	wxSize(1000,1000), wxSize(500,500), wxSize(250,250), wxSize(200,200),
	wxSize(100,100), wxSize(50,50), wxSize(25,25), wxSize(20,20),
	wxSize(10,10), wxSize(5,5), wxSize(2,2), wxSize(1,1),
	wxSize(-1,-1), wxSize(0,0)
}
#endif
;

#define UNDELETE_STACK_SIZE 10
eda_global EDA_BaseStruct * g_UnDeleteStack[UNDELETE_STACK_SIZE]; //Liste des elements supprimes
eda_global int  g_UnDeleteStackPtr;

eda_global bool g_ShowGrid
#ifdef MAIN
= TRUE
#endif
;

/* Look up Table for conversion one layer number -> one bit layer mask: */
eda_global int g_TabOneLayerMask[LAYER_COUNT]
#if defined MAIN
	= { 0x00000001,0x00000002,0x00000004,0x00000008,
		0x00000010,0x00000020,0x00000040,0x00000080,
		0x00000100,0x00000200,0x00000400,0x00000800,
		0x00001000,0x00002000,0x00004000,0x00008000,
		0x00010000,0x00020000,0x00040000,0x00080000,
		0x00100000,0x00200000,0x00400000,0x00800000,
		0x01000000,0x02000000,0x04000000,0x08000000,
		0x10000000,0x20000000,0x40000000,0x80000000
	}
#endif
	;

/* Look up Table for conversion copper layer count -> general copper layer mask: */
eda_global int g_TabAllCopperLayerMask[NB_COPPER_LAYERS]
#if defined MAIN
	= {
	0x0001, 0x8001, 0x8003, 0x8007,
	0x800F, 0x801F, 0x803F, 0x807F,
	0x80FF, 0x81FF, 0x83FF, 0x87FF,
	0x8FFF, 0x9FFF, 0xCFFF, 0xFFFF
};
#endif
	;

/* variables */

extern wxString g_Main_Title;

eda_global bool Drc_On
#ifdef MAIN
= TRUE
#endif
;
eda_global bool g_AutoDeleteOldTrack	/* autorise effacement automatique
							de l'ancienne piste lors des redessins de pistes */
#ifdef MAIN
= TRUE
#endif
;
eda_global bool g_No_Via_Route;
eda_global bool g_Drag_Pistes_On;
eda_global bool g_Show_Ratsnest;
eda_global bool g_Show_Module_Ratsnest;
eda_global bool g_Show_Pads_Module_in_Move
#ifdef MAIN
= TRUE
#endif
;
eda_global bool g_Raccord_45_Auto
#ifdef MAIN
= TRUE
#endif
;
eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage
									de l'isolation en trace de piste */

	/**************************************************************/
	/* Options d'affichages (remplissages des segments, textes..) */
	/**************************************************************/

eda_global DISPLAY_OPTIONS DisplayOpt;

eda_global bool Track_45_Only;			/* Flag pour limiter l'inclinaison
										pistes a 45 degres seulement */
eda_global bool Segments_45_Only ;		 /* Flag pour limiter l'inclinaison
										edge pcb a 45 degres seulement */
eda_global wxString PcbExtBuffer
#ifdef MAIN
( wxT(".brd"))
#endif
;
eda_global wxString g_SaveFileName		// File Name for periodic saving
#ifdef MAIN
( wxT("$savepcb") )
#endif
;
eda_global wxString NetNameBuffer;
eda_global wxString NetExtBuffer
#ifdef MAIN
( wxT(".net") )
#endif
;
eda_global wxString NetCmpExtBuffer
#ifdef MAIN
( wxT(".cmp") )
#endif
;

// Gestion de la liste des librairies
eda_global wxString LibExtBuffer
#ifdef MAIN
( wxT(".mod") )
#endif
;
eda_global wxString g_Shapes3DExtBuffer		// extension des fichiers de formes 3D
#ifdef MAIN
( wxT(".wrl") )
#endif
;

eda_global int g_NetType;		// for cvpcb: Net type identifier

eda_global int g_CurrentVersionPCB
#ifdef MAIN
= 1
#endif
;

#define BUFMEMSIZE 256000	/* taille du buffer de travail (en octets) */
eda_global char *buf_work ;		/* pointeur sur le buffer de travail */
eda_global char  * adr_lowmem ;	/* adresse de base memoire de calcul disponible*/
eda_global char  * adr_himem ;	/* adresse haute limite de la memoire disponible*/
eda_global char  * adr_max ;	/* adresse haute maxi utilisee pour la memoire */


/* variables génerales */
eda_global char cbuf[1024] ;		/* buffer de formatage texte */
eda_global BOARD * g_ModuleEditor_Pcb;	/* Pointeur de l'entete pcb de l'editeur de module*/
eda_global int g_TimeOut;			// Duree entre 2 sauvegardes automatiques
eda_global int g_SaveTime;			// heure de la prochaine sauvegarde


/* Variables generales d'empreintes */
extern int Angle_Rot_Module;
eda_global wxSize ModuleTextSize;  /* dim des textes sur Modules par defaut */
eda_global int ModuleTextWidth;
eda_global int ModuleSegmentWidth;
eda_global int Texte_Module_Type;


	/***********************/
	/* pistes , vias , pads*/
	/***********************/

#define L_MIN_DESSIN 1	/* seuil de largeur des pistes pour trace autre que filaire */

// Current designe settings:
eda_global class EDA_BoardDesignSettings g_DesignSettings;

// valeurs par defaut des caract. des pads
#ifndef GERBVIEW
#ifdef MAIN
D_PAD g_Pad_Master( (MODULE *) NULL);
#else
extern D_PAD g_Pad_Master;
#endif
#endif


eda_global int Route_Layer_TOP ;
eda_global int Route_Layer_BOTTOM;		/* couches de routage actif */

eda_global int g_MaxLinksShowed;		// determine le nombre max de links affichés
									//		en routage manuel
eda_global bool g_TwoSegmentTrackBuild	// FALSE = 1 segment build, TRUE = 2 45 deg segm build
#ifdef MAIN
= TRUE
#endif
;

/* How to handle magentic pad: feature to move the pcb cursor on a pad center */
enum MagneticPadOptionValues {
	no_effect,
	capture_cursor_in_track_tool,
	capture_always
};
eda_global int g_MagneticPadOption
#ifdef MAIN
= capture_cursor_in_track_tool
#endif
;
eda_global bool g_HightLigt_Status;
eda_global int g_HightLigth_NetCode		/* pour mise en surbrillance des pistes */
#ifdef MAIN
= -1
#endif
;	/* net_code du net a mettre en surbrillance */

eda_global TRACK * g_CurrentTrackSegment ;		// pointeur sur le segment en cours de trace
eda_global TRACK * g_FirstTrackSegment ;	// pointeur sur le debut de la piste en cours
eda_global int g_TrackSegmentCount ;		// nombre de points deja traces


eda_global wxString g_ViaType_Name[4]
#if defined MAIN
	= {
	wxT("???"),	// Unused
	_("Blind Via"),		// from inner layer to external layer (TOP or BOTTOM)
	_("Buried Via"),	// from inner to inner layer
	_("Standard Via")	// Usual via (from TOP to BOTTOM layer)
	}
#endif
;
eda_global int g_ViaHoleLastValue;	// Last value for non default value via hole

/* Couleur de fond affichage de bas d'ecran */
eda_global int g_PcbGridColor;

/* couleurs des autres items des empreintes */
#if defined MAIN
int g_PadCMPColor = RED;
int g_PadCUColor = GREEN;
int g_AnchorColor = BLUE;
int g_ModuleTextCMPColor = LIGHTGRAY;
int g_ModuleTextCUColor = MAGENTA;
int g_ModuleTextNOVColor = DARKGRAY;
#else
eda_global int g_ModuleTextCMPColor;
eda_global int g_ModuleTextCUColor;
eda_global int g_ModuleTextNOVColor;
eda_global int g_AnchorColor;
eda_global int g_PadCUColor;
eda_global int g_PadCMPColor;
#endif

eda_global PCB_SCREEN* ScreenPcb;		/* Ecran principal */
eda_global PCB_SCREEN* ScreenModule;	/* Ecran de l'editeur de modules */


	/****************************************************/
	/* Gestion du deplacement des modules et des pistes */
	/****************************************************/

eda_global wxPoint g_Offset_Module;	/* Offset de trace du modul en depl */

/* Pad editing */
eda_global wxString g_Current_PadName;	// Last used pad name (pad num)


#endif /* PCBNEW_H */
