	/***********************************************************/
	/*						wxstruct.h:							 */
	/* descriptions des principales classes derivees utilisees */
	/***********************************************************/

#ifndef CVSTRUCT_H
#define CVSTRUCT_H

#ifndef eda_global
#define eda_global extern
#endif


#include "wx/listctrl.h"

/*  Forward declarations of all top-level window classes. */
class FootprintListBox;
class ListBoxCmp;
class WinEDA_DisplayFrame;
class STORECMP;

#define LIST_BOX_TYPE wxListView

	/******************************************************/
	/* classe derivee pour la Fenetre principale de cvpcb */
	/******************************************************/

class WinEDA_CvpcbFrame: public WinEDA_BasicFrame
{
public:

	FootprintListBox * m_FootprintList;
	ListBoxCmp * m_ListCmp;
	WinEDA_DisplayFrame * DrawFrame;
	WinEDA_Toolbar * m_HToolBar;	// Toolbar horizontal haut d'ecran

private:
	wxMenu * m_FilesMenu;

	// Constructor and destructor
public:
	WinEDA_CvpcbFrame(WinEDA_App * parent, const wxString & title,
					  long style = KICAD_DEFAULT_DRAWFRAME_STYLE);
	~WinEDA_CvpcbFrame();

	void OnLeftClick(wxListEvent & event);
	void OnLeftDClick(wxListEvent & event);
	void OnSelectComponent(wxListEvent & event);

	void Update_Config(wxCommandEvent& event);/* enregistrement de la config */
	void OnQuit(wxCommandEvent& event);
	void OnCloseWindow(wxCloseEvent & Event);
	void OnSize(wxSizeEvent& SizeEvent);
	void OnChar(wxKeyEvent& event);
	void ReCreateHToolbar();
	virtual void ReCreateMenuBar();
	void SetLanguage(wxCommandEvent& event);
	void AddFontSelectionMenu(wxMenu * main_menu);
	void ProcessFontPreferences(wxCommandEvent& event);

	void ToFirstNA(wxCommandEvent& event);
	void ToPreviousNA(wxCommandEvent& event);
	void DelAssociations(wxCommandEvent& event);
	void SaveQuitCvpcb(wxCommandEvent& event);
	void LoadNetList(wxCommandEvent& event);
	void ConfigCvpcb(wxCommandEvent& event);
	void DisplayModule(wxCommandEvent& event);
	void AssocieModule(wxCommandEvent& event);
	void WriteStuffList(wxCommandEvent & event);
	void DisplayDocFile(wxCommandEvent & event);
	void OnSelectFilteringFootprint(wxCommandEvent & event);
	void SetNewPkg(const wxString & package);
	void BuildCmpListBox();
	void BuildFootprintListBox();
	void CreateScreenCmp();
	void CreateConfigWindow();
	int SaveNetList(const wxString & FullFileName);
	int SaveComponentList(const wxString & FullFileName);
	bool ReadInputNetList(const wxString & FullFileName);
	void ReadNetListe();
	int rdpcad();
	int ReadSchematicNetlist();
	int ReadFootprintFilterList( FILE * f);
	int ReadViewlogicWirList();
	int ReadViewlogicNetList();

	DECLARE_EVENT_TABLE()
};


/***********************************************/
/* ListBox derivee pour l'affichage des listes */
/***********************************************/
class ListBoxBase: public LIST_BOX_TYPE
{
public:
	WinEDA_CvpcbFrame * m_Parent;

public:

	ListBoxBase(WinEDA_CvpcbFrame * parent, wxWindowID id,
				const wxPoint& loc, const wxSize& size);

	~ListBoxBase();

	int GetSelection();
	void OnSize(wxSizeEvent& event);
};

/************************************************************/
/* ListBox derivee pour l'affichage de la liste des Modules */
/************************************************************/

class FootprintListBox: public ListBoxBase
{
private:
	wxArrayString m_FullFootprintList;
	wxArrayString m_FilteredFootprintList;
public:
	wxArrayString * m_ActiveFootprintList;
	bool m_UseFootprintFullList;

public:
	FootprintListBox(WinEDA_CvpcbFrame * parent,
				wxWindowID id, const wxPoint& loc, const wxSize& size,
				int nbitems, wxString choice[]);
	~FootprintListBox();

	int GetCount();
	void SetSelection(unsigned index, bool State = TRUE);
	void SetString(unsigned linecount, const wxString & text);
	void AppendLine(const wxString & text);
	void SetFootprintFullList();
	void SetFootprintFilteredList(STORECMP * Component);
	void SetActiveFootprintList(bool FullList, bool Redraw = FALSE);

	wxString GetSelectedFootprint();
	wxString OnGetItemText(long item, long column) const;
	void OnLeftClick(wxListEvent & event);
	void OnLeftDClick(wxListEvent & event);
	DECLARE_EVENT_TABLE()
};

/***************************************************************/
/* ListBox derivee pour l'affichage de la liste des Composants */
/***************************************************************/

class ListBoxCmp: public ListBoxBase
{
public:
	wxArrayString m_ComponentList;
	WinEDA_CvpcbFrame * m_Parent;

public:

	ListBoxCmp(WinEDA_CvpcbFrame * parent, wxWindowID id,
				const wxPoint& loc, const wxSize& size,
				int nbitems, wxString choice[]);

	~ListBoxCmp();

	void Clear();
	int GetCount();
	wxString OnGetItemText(long item, long column) const;
	void SetSelection(unsigned index, bool State = TRUE);
	void SetString(unsigned linecount, const wxString & text);
	void AppendLine(const wxString & text);

	DECLARE_EVENT_TABLE()
};


	/*******************************************************/
	/* class WWinEDA_DisplayFrame: public WinEDA_DrawFrame */
	/*******************************************************/

class WinEDA_DisplayFrame: public WinEDA_BasePcbFrame
{
public:

public:
	WinEDA_DisplayFrame( wxWindow * father, WinEDA_App *parent,
					const wxString & title,
					const wxPoint& pos, const wxSize& size,
					long style = KICAD_DEFAULT_DRAWFRAME_STYLE);

	~WinEDA_DisplayFrame();

	void OnCloseWindow(wxCloseEvent & Event);
	void Process_Special_Functions(wxCommandEvent& event);
	void RedrawActiveWindow(wxDC * DC, bool EraseBg);
	void ReCreateHToolbar();
	void ReCreateVToolbar();
	void RecreateMenuBar();
	void OnLeftClick(wxDC * DC, const wxPoint& MousePos);
	void OnLeftDClick(wxDC * DC, const wxPoint& MousePos);
	bool OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu);
	void SetToolbars();
	void GeneralControle( wxDC* DC, wxPoint Mouse );
	void InstallOptionsDisplay(wxCommandEvent& event);
	MODULE * Get_Module(const wxString & CmpName);

	void Process_Settings(wxCommandEvent& event);
	void Show3D_Frame(wxCommandEvent& event);

	DECLARE_EVENT_TABLE()
};


#endif	//#ifndef CVSTRUCT_H

