1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
|
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2018 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 cvpcb_mainframe.h
*/
#ifndef _CVPCB_MAINFRAME_H_
#define _CVPCB_MAINFRAME_H_
#include <wx/listctrl.h>
#include <wx/filename.h>
#include <pcb_netlist.h>
#include <footprint_info.h>
#include <pcb_base_frame.h>
#include <config_params.h>
#include <auto_associate.h>
#include <memory>
/* Forward declarations of all top-level window classes. */
class wxAuiToolBar;
class FOOTPRINTS_LISTBOX;
class COMPONENTS_LISTBOX;
class LIBRARY_LISTBOX;
class DISPLAY_FOOTPRINTS_FRAME;
class COMPONENT;
class FP_LIB_TABLE;
namespace CV { struct IFACE; }
/**
* The CvPcb application main window.
*/
class CVPCB_MAINFRAME : public KIWAY_PLAYER
{
friend struct CV::IFACE;
wxString m_currentSearchPattern;
NETLIST m_netlist;
int m_filteringOptions;
wxAuiToolBar* m_mainToolBar;
FOOTPRINTS_LISTBOX* m_footprintListBox;
LIBRARY_LISTBOX* m_libListBox;
COMPONENTS_LISTBOX* m_compListBox;
wxTextCtrl* m_tcFilterString;
wxStaticText* m_statusLine1;
wxStaticText* m_statusLine2;
wxButton* m_saveAndContinue;
public:
wxArrayString m_ModuleLibNames;
wxArrayString m_EquFilesNames;
FOOTPRINT_LIST* m_FootprintsList;
protected:
bool m_modified;
bool m_skipComponentSelect; // true to skip OnSelectComponent event
// (in automatic selection/deletion of associations)
PARAM_CFG_ARRAY m_projectFileParams;
bool m_initialized;
CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent );
public:
~CVPCB_MAINFRAME();
bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl=0 ) override;
void KiwayMailIn( KIWAY_EXPRESS& aEvent ) override;
/**
* @return a pointer on the Footprint Viewer frame, if exists, or NULL
*/
DISPLAY_FOOTPRINTS_FRAME* GetFootprintViewerFrame();
/**
* Function OnSelectComponent
* Called when clicking on a component in component list window
* * Updates the filtered footprint list, if the filtered list option is selected
* * Updates the current selected footprint in footprint list
* * Updates the footprint shown in footprint display window (if opened)
*/
void OnSelectComponent( wxListEvent& event );
/**
* Function OnEditFootprintLibraryTable
* displays the footprint library table editing dialog and updates the global and local
* footprint tables accordingly.
*/
void OnEditFootprintLibraryTable( wxCommandEvent& event );
void OnCancel( wxCommandEvent& aEvent );
void OnOK( wxCommandEvent& aEvent );
void OnSaveAndContinue( wxCommandEvent& aEvent );
void OnQuit( wxCommandEvent& event );
void OnCloseWindow( wxCloseEvent& Event );
void OnSize( wxSizeEvent& SizeEvent );
void OnKeyDown( wxKeyEvent& aEvent );
void ReCreateHToolbar();
virtual void ReCreateMenuBar() override;
void ShowChangedLanguage() override;
void ChangeFocus( bool aMoveRight );
void ToFirstNA( wxCommandEvent& event );
void ToPreviousNA( wxCommandEvent& event );
/**
* Function DelAssociations
* removes all component footprint associations already made
*/
void DelAssociations( wxCommandEvent& event );
void OnConfigurePaths( wxCommandEvent& aEvent );
/**
* Function OnEditEquFilesList
* envokes the equ files list edit dialog.
*/
void OnEditEquFilesList( wxCommandEvent& aEvent );
void DisplayModule( wxCommandEvent& event );
/**
* Called by the automatic association button
* Read *.equ files to try to find corresponding footprint
* for each component that is not already linked to a footprint ( a "free"
* component )
* format of a line:
* 'cmp_ref' 'footprint_name'
*/
void AutomaticFootprintMatching( wxCommandEvent& event );
/**
* Function OnSelectFilteringFootprint
* is the command event handler for enabling and disabling footprint filtering.
*/
void OnSelectFilteringFootprint( wxCommandEvent& event );
/**
* Function OnEnterFilteringText
* Is called each time the text of m_tcFilterString is changed.
*/
void OnEnterFilteringText( wxCommandEvent& event );
/**
* Function SetNewPkg
* set the footprint name for all selected components in component list
* and selects the next component.
* @param aFootprintName = the new footprint name
*/
void SetNewPkg( const wxString& aFootprintName );
/**
* Function SetNewPkg
* Set the footprint name for the component of position aIndex in the component list
*
* @param aFootprintName = the new footprint name
* @param aIndex = the index of the component to modify in the component list
*/
void SetNewPkg( const wxString& aFootprintName, int aIndex );
void BuildCmpListBox();
void BuildFOOTPRINTS_LISTBOX();
void BuildLIBRARY_LISTBOX();
/**
* Create or Update the frame showing the current highlighted footprint
* and (if showed) the 3D display frame
*/
void CreateScreenCmp();
/**
* Function SaveFootprintAssociation
* saves the edits that the user has done by sending them back to eeschema
* via the kiway.
* Optionally saves the schematic to disk as well.
*/
void SaveFootprintAssociation( bool doSaveSchematic );
/**
* Function ReadNetListAndFpFiles
* loads the netlist file built on the fly by Eeschema and loads
* footprint libraries from fp lib tables.
* @param aNetlist is the netlist from eeschema in kicad s-expr format.
* (see CVPCB_MAINFRAME::KiwayMailIn() to know how to get this netlist)
*/
bool ReadNetListAndFpFiles( const std::string& aNetlist );
/**
* Function ReadSchematicNetlist
* read the netlist (.net) file built on the fly by Eeschema.
* @param aNetlist is the netlist buffer filled by eeschema, in kicad s-expr format.
* It is the same netlist as the .net file created by Eeschema.
* (This method is called by ReadNetListAndFpFiles)
*/
int ReadSchematicNetlist( const std::string& aNetlist );
/**
* Function LoadProjectFile
* reads the CvPcb configuration parameter from the project (.pro) file \a aFileName
*/
void LoadProjectFile();
/**
* Function SaveProjectFile
* Saves the CvPcb configuration parameter from the project (.pro) file \a aFileName
*/
void SaveProjectFile();
void LoadSettings( wxConfigBase* aCfg ) override;
void SaveSettings( wxConfigBase* aCfg ) override;
/**
* Function DisplayStatus
* updates the information displayed on the status bar at bottom of the main frame.
*
* When the library or component list controls have the focus, the footprint assignment
* status of the components is displayed in the first status bar pane and the list of
* filters for the selected component is displayed in the second status bar pane. When
* the footprint list control has the focus, the description of the selected footprint is
* displayed in the first status bar pane and the key words for the selected footprint are
* displayed in the second status bar pane. The third status bar pane always displays the
* current footprint list filtering.
*/
void DisplayStatus();
/**
* Function LoadFootprintFiles
* reads the list of footprint (*.mod files) and generate the list of footprints.
* for each module are stored
* the module name
* documentation string
* associated keywords
* m_ModuleLibNames is the list of library that must be read (loaded)
* fills m_footprints
* @return true if libraries are found, false otherwise.
*/
bool LoadFootprintFiles();
/**
* Function GetProjectFileParameters
* return project file parameter list for CvPcb.
* <p>
* Populate the project file parameter array specific to CvPcb if it hasn't
* already been populated and return a reference to the array to the caller.
* Creating the parameter list at run time has the advantage of being able
* to define local variables. The old method of statically building the array
* at compile time requiring global variable definitions.
* </p>
*
* @return A reference to a PARAM_CFG_ARRAY contain the project settings for CvPcb.
*/
PARAM_CFG_ARRAY& GetProjectFileParameters( void );
/**
* Function SendMessageToEESCHEMA
* Send a remote command to Eeschema via a socket,
* Commands are
* $PART: "reference" put cursor on component anchor
*/
void SendMessageToEESCHEMA();
COMPONENT* GetSelectedComponent();
/**
* @return the LIB_ID of the selected footprint in footprint listview
* or a empty string if no selection
*/
wxString GetSelectedFootprint();
void SetStatusText( const wxString& aText, int aNumber = 0 ) override;
private:
// UI event handlers.
// Keep consistent the display state of toggle menus or tools in toolbar
void OnFilterFPbyKeywords( wxUpdateUIEvent& event );
void OnFilterFPbyPinCount( wxUpdateUIEvent& event );
void OnFilterFPbyLibrary( wxUpdateUIEvent& event );
void OnFilterFPbyKeyName( wxUpdateUIEvent& event );
/**
* read the .equ files and populate the list of equvalents
* @param aList the list to populate
* @param aErrorMessages is a pointer to a wxString to store error messages
* (can be NULL)
* @return the error count ( 0 = no error)
*/
int buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList, wxString * aErrorMessages = NULL );
void refreshAfterComponentSearch (COMPONENT* component);
DECLARE_EVENT_TABLE()
};
#endif //#ifndef _CVPCB_MAINFRAME_H_
|