 Modular-Kicad milestone B), major portions:
*) Rework the set language support, simplify it by using KIWAY.  Now any major
   frame with a "change language" menu can change the language for all KIWAY_PLAYERs
   in the whole KIWAY.  Multiple KIWAYs are not supported yet.
*) Simplify "modal wxFrame" support, and add that support exclusively to
   KIWAY_PLAYER where it is inherited by all derivatives.  The function
   KIWAY_PLAYER::ShowModal() is in the vtable and so is cross module capable.
*) Remove the requirements and assumptions that the wxFrame hierarchy always
   had PCB_EDIT_FRAME and SCH_EDIT_FRAME as immediate parents of their viewers
   and editors. This is no longer the case, nor required.
*) Use KIWAY::Player() everywhere to make KIWAY_PLAYERs, this registers the
   KIWAY_PLAYER within the KIWAY and makes it very easy to find an open frame
   quickly.  It also gives control to the KIWAY as to frame hierarchical
   relationships.
*) Change single_top to use the KIWAY for loading a KIFACE and instantiating
   the single KIWAY_PLAYER, see bullet immediately above.
*) Add KIWAY::OnKiwayEnd() and call it from PGM_BASE at program termination, this
   gives the KIFACEs a chance to save their final configuration dope to disk.
*) Add dedicated FRAME_T's for the modal frames, so m_Ident can be tested and
   these modal frames are distinctly different than their non-modal equivalents.
   KIWAY_PLAYER::IsModal() is !not! a valid test during the wxFrame's constructor,
   so this is another important reason for having a dedicated FRAME_T for each
   modal wxFrame.
On balance, more lines were deleted than were added to achieve all this.
 12 years ago                                                         | 
						 | 
						/*
 * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2012 Miguel Angel Ajo Pelayo, miguelangel@nbee.es * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright The KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you may find one here: * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA */
/**
 * @file footprint_wizard_frame.h */
#ifndef FOOTPRINT_WIZARD_FRAME_H_
#define FOOTPRINT_WIZARD_FRAME_H_
#include <wx/gdicmn.h>
#include <footprint_wizard.h>
#include <pcb_base_edit_frame.h>
class wxSashLayoutWindow;class wxSashEvent;class wxListBox;class WX_GRID;class wxGridEvent;class FOOTPRINT_EDIT_FRAME;
enum WizardParameterColumnNames{    WIZ_COL_NAME = 0,    WIZ_COL_VALUE,    WIZ_COL_UNITS};
class FOOTPRINT_WIZARD_FRAME : public PCB_BASE_EDIT_FRAME{public:    FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* parent, FRAME_T aFrameType );
    ~FOOTPRINT_WIZARD_FRAME();
    ///< @copydoc PCB_BASE_FRAME::GetModel()
    BOARD_ITEM_CONTAINER* GetModel() const override;
    FOOTPRINT* GetBuiltFootprint();
    /**
     * Reload the Python plugins if they are newer than     * the already loaded, and load new plugins if any     */    void PythonPluginsReload();
    COLOR_SETTINGS* GetColorSettings( bool aForceRefresh = false ) const override;
private:
    void                OnSize( wxSizeEvent& event ) override;    void                OnGridSize( wxSizeEvent& aSizeEvent );
    /**
     * Redraw the message panel.     *     * Display the current footprint info, or clear the message panel if nothing is loaded.     */    void UpdateMsgPanel() override;
    /**
     * Rebuild the GAL view (reint tool manager, colors and drawings) must be run after any     * footprint change.     */    void updateView();
    /**
     * Will let the caller exit from the wait loop, and get the built footprint.     *     */    void ExportSelectedFootprint( wxCommandEvent& aEvent );
    /**
     * Resize the child windows when dragging a sash window border.     */    void OnSashDrag( wxSashEvent& event );
    /**
     * Create or recreate the list of parameter pages for the current wizard.     *     * This list is sorted     */    void ReCreatePageList();
    /**
     * Create the list of parameters for the current page.     */    void ReCreateParameterList();
    /**
     * Expand the 'Value' column to fill available.     */    void ResizeParamColumns();
    /**
     * Prepare the grid where parameters are displayed.     */    void initParameterGrid();
    /**
     * Show the list of footprint wizards available into the system.     */    void SelectFootprintWizard();
    /**
     * Regenerate the current footprint.     */    void RegenerateFootprint();
    /**
     * Display the message generated by the python build footprint script.     */    void DisplayBuildMessage( wxString& aMessage );
    /**
     * Reloads the wizard by name.     */    FOOTPRINT_WIZARD* GetMyWizard();
    void Process_Special_Functions( wxCommandEvent& event );
    /**
     * Show all the details about the current wizard.     */    void DisplayWizardInfos();
    // Toolbar defaults
    std::optional<TOOLBAR_CONFIGURATION> DefaultTopMainToolbarConfig() override;
    void doCloseWindow() override;    void ClickOnPageList( wxCommandEvent& event );
    void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;    void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
    WINDOW_SETTINGS* GetWindowSettings( APP_SETTINGS_BASE* aCfg ) override;
    /**
     * Called when the frame frame is activate to reload the libraries and component lists     * that can be changed by the schematic editor or the library editor.     */    void OnActivate( wxActivateEvent& event );
    void SelectCurrentWizard( wxCommandEvent& event );
    void DefaultParameters( wxCommandEvent& event );
    /**
     * Update the footprint python parameters values from the values in grid.     */    void ParametersUpdated( wxGridEvent& event );
    /// @copydoc PCB_BASE_FRAME::Update3DView
    void Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle = nullptr ) override;
    DECLARE_EVENT_TABLE()
protected:    wxString        m_wizardName;           ///< name of the current wizard
    wxString        m_wizardDescription;    ///< description of the wizard
    wxString        m_wizardStatus;         ///< current wizard status
private:    wxPanel*        m_parametersPanel;      ///< Panel for the page list and parameter grid
    wxListBox*      m_pageList;             ///< The list of pages
    WX_GRID*        m_parameterGrid;        ///< The list of parameters
    int             m_parameterGridPage;    ///< the page currently displayed by m_parameterGrid
                                            ///< it is most of time the m_pageList selection, but
                                            ///< can differ during transitions between pages.
    wxTextCtrl*     m_buildMessageBox;
    wxString        m_auiPerspective;       ///< Encoded string describing the AUI layout
    bool            m_wizardListShown;      ///< A show-once flag for the wizard list
};
#endif    // FOOTPRINT_WIZARD_FRM_H_
  |