/***********************************************************/
/*						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