KiCad PCB EDA Suite
gerbview_frame.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2013 Wayne Stambaugh <stambaughw@gmail.com>
6  * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
7  *
8  * This program is free software: you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation, either version 3 of the License, or (at your
11  * option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef WX_GERBER_STRUCT_H
23 #define WX_GERBER_STRUCT_H
24 
25 #include <filehistory.h>
26 #include <config_params.h>
27 #include <eda_draw_frame.h>
28 #include <layer_ids.h>
29 #include <gerbview.h>
30 #include <convert_to_biu.h>
31 #include <gbr_layout.h>
32 #include <page_info.h>
33 #include <gbr_display_options.h>
34 
35 #define NO_AVAILABLE_LAYERS UNDEFINED_LAYER
36 
40 class GERBER_DRAW_ITEM;
41 class GERBER_FILE_IMAGE;
43 class REPORTER;
44 class SELECTION;
45 class wxStaticText;
46 
47 
52 #define GERBVIEW_FRAME_NAME wxT( "GerberFrame" )
53 
55 {
56 public:
57  GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent );
59 
60  void doCloseWindow() override;
61 
62  bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl ) override;
63 
73  bool LoadListOfGerberAndDrillFiles( const wxString& aPath,
74  const wxArrayString& aFilenameList,
75  const std::vector<int>* aFileType = nullptr );
76 
77  // Virtual basic functions:
78  void ReCreateHToolbar() override;
79  void ReCreateAuxiliaryToolbar() override;
80 
84  void ReCreateVToolbar() override;
85 
89  void ReCreateOptToolbar() override;
90 
91  void ReCreateMenuBar() override;
92  void UpdateStatusBar() override;
93  void UpdateToolbarControlSizes() override;
94 
100  int GetDisplayMode() { return m_displayMode; }
101 
107  void SetDisplayMode( int aMode ) { m_displayMode = aMode; }
108 
115  bool IsElementVisible( int aLayerID ) const;
116 
124  void SetElementVisibility( int aLayerID, bool aNewState );
125 
129  void SetGridVisibility( bool aVisible ) override;
130 
136  LSET GetVisibleLayers() const;
137 
143  void SetVisibleLayers( LSET aLayerMask );
144 
151  bool IsLayerVisible( int aLayer ) const;
152 
156  COLOR4D GetVisibleElementColor( int aLayerID );
157 
158  void SetVisibleElementColor( int aLayerID, const COLOR4D& aColor );
159 
160  COLOR4D GetLayerColor( int aLayer ) const;
161  void SetLayerColor( int aLayer, const COLOR4D& aColor );
162 
170 
174  void ReFillLayerWidget();
175 
179  void SetActiveLayer( int aLayer, bool doLayerWidgetUpdate = true );
180 
184  int GetActiveLayer() const { return m_activeLayer; }
185 
194  int getNextAvailableLayer( int aLayer = 0 ) const;
195 
203  void syncLayerWidget();
204 
211  void syncLayerBox( bool aRebuildLayerBox = false );
212 
221  void UpdateTitleAndInfo();
222 
226  void DisplayGridMsg() override;
227 
228  void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
229 
230  void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
231 
232  void ToggleLayerManager();
233 
234  void ShowChangedLanguage() override;
235 
237  void OnSelectHighlightChoice( wxCommandEvent& event );
238 
243  void OnSelectActiveDCode( wxCommandEvent& event );
244 
250  void OnSelectActiveLayer( wxCommandEvent& event );
251 
257  void OnSelectDisplayMode( wxCommandEvent& event );
258 
262  void OnQuit( wxCommandEvent& event );
263 
264  void OnUpdateDrawMode( wxUpdateUIEvent& aEvent );
265  void OnUpdateSelectDCode( wxUpdateUIEvent& aEvent );
266  void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
267 
271  void OnGbrFileHistory( wxCommandEvent& event );
272 
277  void OnDrlFileHistory( wxCommandEvent& event );
278 
283  void OnZipFileHistory( wxCommandEvent& event );
284 
288  void OnJobFileHistory( wxCommandEvent& event );
289 
297  bool unarchiveFiles( const wxString& aFullFileName, REPORTER* aReporter = nullptr );
298 
307  bool LoadGerberFiles( const wxString& aFileName );
308  bool Read_GERBER_File( const wxString& GERBER_FullFileName );
309 
318  bool LoadExcellonFiles( const wxString& aFileName );
319  bool Read_EXCELLON_File( const wxString& aFullFileName );
320 
329  bool LoadZipArchiveFile( const wxString& aFileName );
330 
331 
340  bool LoadGerberJobFile( const wxString& aFileName );
341 
342  // PCB handling
343  bool Clear_DrawLayers( bool query );
344  void Erase_Current_DrawLayer( bool query );
345 
347 
352  void UpdateDiffLayers();
353 
359  void UpdateDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions );
360 
361  /*
362  * Do nothing in GerbView.
363  */
365  UNDO_REDO aTypeCommand = UNDO_REDO::UNSPECIFIED ) { }
366 
376  void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
377  UNDO_REDO aTypeCommand )
378  {
379  // currently: do nothing in GerbView.
380  }
381 
383  void ActivateGalCanvas() override;
384 
388  void InstallPreferences( PAGED_DIALOG* aParent, PANEL_HOTKEYS_EDITOR* aHotkeysPanel ) override;
389 
393  void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
394 
395  SELECTION& GetCurrentSelection() override;
396 
398  void SetDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions ) { m_DisplayOptions = aOptions; }
399 
405  void SetLayout( GBR_LAYOUT* aLayout )
406  {
407  delete m_gerberLayout;
408  m_gerberLayout = aLayout;
409  }
410 
412  {
413  wxASSERT( m_gerberLayout );
414  return m_gerberLayout;
415  }
416 
421  {
422  return m_gerberLayout->GetImagesList();
423  }
424 
425  GERBER_FILE_IMAGE* GetGbrImage( int aIdx ) const;
426 
427  unsigned ImagesMaxCount() const;
428 
429 
430  void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
431  const PAGE_INFO& GetPageSettings() const override;
432  const wxSize GetPageSizeIU() const override;
433 
434  const wxPoint& GetGridOrigin() const override { return m_grid_origin; }
435  void SetGridOrigin( const wxPoint& aPoint ) override { m_grid_origin = aPoint; }
436 
437  const TITLE_BLOCK& GetTitleBlock() const override;
438  void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) override;
439 
457  int SelectPCBLayer( int aDefaultLayer, int aCopperLayerCount, const wxString& aGerberName );
458 
462  COLOR4D GetGridColor() override;
463 
465  virtual void SetGridColor( const COLOR4D& aColor ) override;
466 
467  const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override
468  {
469  wxASSERT( m_gerberLayout );
470  return m_gerberLayout->ViewBBox();
471  }
472 
473  DECLARE_EVENT_TABLE()
474 
475 protected:
476  void setupUIConditions() override;
477 
478 private:
482  void updateDCodeSelectBox();
483  void unitsChangeRefresh() override; // See class EDA_DRAW_FRAME
484 
485  void OnClearJobFileHistory( wxCommandEvent& aEvent );
486  void OnClearZipFileHistory( wxCommandEvent& aEvent );
487  void OnClearDrlFileHistory( wxCommandEvent& aEvent );
488  void OnClearGbrFileHistory( wxCommandEvent& aEvent );
489 
490  // The Tool Framework initialization
491  void setupTools();
492 
495 
496 public:
497  wxChoice* m_SelComponentBox; // a choice box to display and highlight component
498  // graphic items
499  wxChoice* m_SelNetnameBox; // a choice box to display and highlight netlist
500  // graphic items
501  wxChoice* m_SelAperAttributesBox; // a choice box to display aperture attributes and
502  // highlight items
503  GBR_LAYER_BOX_SELECTOR* m_SelLayerBox; // The combobox to select the current active
504  // graphic layer
505  // (which is drawn on top on the other layers
506  DCODE_SELECTION_BOX* m_DCodeSelector; // a list box to select the dcode Id to highlight.
507  wxTextCtrl* m_TextInfo; // a wxTextCtrl used to display some info about
508  // gerber data (format..)
509 
510 protected:
512 
516 
517  wxString m_lastFileName; // The last filename chosen to be proposed to the
518  // user.
519 
520 private:
521  int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn:
522  // - in fast mode (write mode) but if there are negative
523  // items only the last image is correctly drawn (no
524  // problem to see only one image or when no negative items)
525  // - in "exact" mode (but slower) in write mode:
526  // last image covers previous images
527  // - in "exact" mode (also slower) in OR mode
528  // (transparency mode)
529  // m_displayMode = 0, 1 or 2
530 
532 
535  wxPoint m_grid_origin;
536  PAGE_INFO m_paper; // used only to show paper limits to screen
538  wxStaticText* m_cmpText; // a message on the auxiliary toolbar,
539  // relative to the m_SelComponentBox
540  wxStaticText* m_netText; // a message on the auxiliary toolbar,
541  // relative to the m_SelNetnameBox
542  wxStaticText* m_apertText; // a message on the auxiliary toolbar,
543  // relative to the m_SelAperAttributesBox
544  wxStaticText* m_dcodeText; // a message on the auxiliary toolbar,
545  // relative to the m_DCodeSelector
546 };
547 
548 #endif /* WX_GERBER_STRUCT_H */
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Returns bbox of document with option to not include some items.
Class GBR_DISPLAY_OPTIONS is a helper class to handle display options (filling modes and afew other o...
A list of GERBER_DRAW_ITEM objects currently loaded.
Definition: gbr_layout.h:45
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock) override
void OnSelectHighlightChoice(wxCommandEvent &event)
Handles the changing of the highlighted component/net/attribute.
Class CLASS_GBR_LAYOUT to handle info to draw loaded Gerber images and page frame reference.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
wxString m_lastFileName
void SortLayersByX2Attributes()
virtual void SetGridColor(const COLOR4D &aColor) override
int SelectPCBLayer(int aDefaultLayer, int aCopperLayerCount, const wxString &aGerberName)
Show the dialog box for layer selection.
bool Clear_DrawLayers(bool query)
const wxSize GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
void SetLayerColor(int aLayer, const COLOR4D &aColor)
void OnUpdateSelectDCode(wxUpdateUIEvent &aEvent)
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void UpdateStatusBar() override
Update the status bar information.
COLOR4D GetNegativeItemsColor()
This is usually the background color, but can be another color in order to see negative objects.
void syncLayerBox(bool aRebuildLayerBox=false)
Update the currently "selected" layer within m_SelLayerBox.
COLOR4D GetVisibleElementColor(int aLayerID)
Return the color of a gerber visible element.
LSET GetVisibleLayers() const
A proxy function that calls the correspondent function in m_BoardSettings.
void OnQuit(wxCommandEvent &event)
Called on request of application quit.
void OnClearDrlFileHistory(wxCommandEvent &aEvent)
FILE_HISTORY m_jobFileHistory
void SetPageSettings(const PAGE_INFO &aPageSettings) override
const TITLE_BLOCK & GetTitleBlock() const override
GERBER_LAYER_WIDGET * m_LayersManager
void SetVisibleElementColor(int aLayerID, const COLOR4D &aColor)
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl) override
Open a project or set of files given by aFileList.
bool Read_GERBER_File(const wxString &GERBER_FullFileName)
Definition: readgerb.cpp:40
Hold the image data and parameters for one gerber file and layer parameters.
void SetActiveLayer(int aLayer, bool doLayerWidgetUpdate=true)
change the currently active layer to aLayer and update the GERBER_LAYER_WIDGET.
void OnGbrFileHistory(wxCommandEvent &event)
Delete the current data and loads a Gerber file selected from history list on current layer.
GBR_LAYER_BOX_SELECTOR * m_SelLayerBox
const GBR_DISPLAY_OPTIONS & GetDisplayOptions() const
void OnUpdateLayerSelectBox(wxUpdateUIEvent &aEvent)
void updateNetnameListSelectBox()
A pure virtual class used to derive REPORTER objects from.
Definition: reporter.h:70
This class implements a file history object to store a list of files, that can then be added to a men...
Definition: filehistory.h:42
void Erase_Current_DrawLayer(bool query)
The base class for create windows for drawing purpose.
GERBER_FILE_IMAGE_LIST is a helper class to handle a list of GERBER_FILE_IMAGE files which are loaded...
void OnClearZipFileHistory(wxCommandEvent &aEvent)
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition: title_block.h:40
UNDO_REDO
Undo Redo considerations: Basically we have 3 cases New item Deleted item Modified item there is also...
void OnSelectActiveDCode(wxCommandEvent &event)
Select the active DCode for the current active layer.
void SaveCopyInUndoList(const PICKED_ITEMS_LIST &aItemsList, UNDO_REDO aTypeCommand)
Create a new entry in undo list of commands and add a list of pickers to handle a list of items.
void UpdateDiffLayers()
Update each layers' differential option.
wxChoice * m_SelNetnameBox
void ActivateGalCanvas() override
Use to start up the GAL drawing canvas.
void SetGridVisibility(bool aVisible) override
GERBVIEW_FRAME(KIWAY *aKiway, wxWindow *aParent)
void UpdateToolbarControlSizes() override
Update the sizes of any controls in the toolbars of the frame.
void OnSelectDisplayMode(wxCommandEvent &event)
Called on a display mode selection.
void ReCreateHToolbar() override
bool LoadGerberJobFile(const wxString &aFileName)
Load a Gerber job file, and load gerber files found in job files.
void OnClearJobFileHistory(wxCommandEvent &aEvent)
void SetGridOrigin(const wxPoint &aPoint) override
void SaveCopyInUndoList(GERBER_DRAW_ITEM *aItemToCopy, UNDO_REDO aTypeCommand=UNDO_REDO::UNSPECIFIED)
FILE_HISTORY m_zipFileHistory
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Called after the preferences dialog is run.
void updateComponentListSelectBox()
void SetDisplayOptions(const GBR_DISPLAY_OPTIONS &aOptions)
void UpdateDisplayOptions(const GBR_DISPLAY_OPTIONS &aOptions)
Update the display options and refreshes the view as needed.
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:502
unsigned ImagesMaxCount() const
The max number of file images.
COLOR4D GetGridColor() override
bool unarchiveFiles(const wxString &aFullFileName, REPORTER *aReporter=nullptr)
Extract gerber and drill files from the zip archive, and load them.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
PAGE_INFO m_paper
void ReCreateAuxiliaryToolbar() override
void unitsChangeRefresh() override
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
void ReCreateVToolbar() override
Create or update the right vertical toolbar.
bool LoadGerberFiles(const wxString &aFileName)
Load a given Gerber file or selected file(s), if the filename is empty.
void InstallPreferences(PAGED_DIALOG *aParent, PANEL_HOTKEYS_EDITOR *aHotkeysPanel) override
Allow Gerbview to install its preferences panels into the preferences dialog.
bool LoadListOfGerberAndDrillFiles(const wxString &aPath, const wxArrayString &aFilenameList, const std::vector< int > *aFileType=nullptr)
Load a list of Gerber and NC drill files and updates the view based on them.
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:53
GERBER_FILE_IMAGE * GetGbrImage(int aIdx) const
bool LoadZipArchiveFile(const wxString &aFileName)
Load a zipped archive file.
GBR_DISPLAY_OPTIONS m_DisplayOptions
void applyDisplaySettingsToGAL()
Updates the GAL with display settings changes.
void ShowChangedLanguage() override
bool IsElementVisible(int aLayerID) const
Test whether a given element category is visible.
GBR_LAYOUT * m_gerberLayout
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:260
void OnClearGbrFileHistory(wxCommandEvent &aEvent)
const wxPoint & GetGridOrigin() const override
Return the absolute coordinates of the origin of the snap grid.
Helper to display a DCode list and select a DCode id.
Abstract functions of LAYER_WIDGET so they may be tied into the GERBVIEW_FRAME's data and we can add ...
A holder to handle information on schematic or board items.
void doCloseWindow() override
FILE_HISTORY m_drillFileHistory
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
GBR_LAYOUT * GetGerberLayout() const
wxTextCtrl * m_TextInfo
DCODE_SELECTION_BOX * m_DCodeSelector
void DisplayGridMsg() override
Display the current grid pane on the status bar.
const PAGE_INFO & GetPageSettings() const override
wxStaticText * m_cmpText
int GetActiveLayer() const
Return the active layer.
void OnJobFileHistory(wxCommandEvent &event)
Delete the current data and load a gerber job file selected from the history list.
void updateAperAttributesSelectBox()
wxChoice * m_SelAperAttributesBox
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
void OnUpdateDrawMode(wxUpdateUIEvent &aEvent)
COLOR4D GetLayerColor(int aLayer) const
GERBER_FILE_IMAGE_LIST * GetImagesList() const
Definition: gbr_layout.cpp:41
wxStaticText * m_dcodeText
wxPoint m_grid_origin
void syncLayerWidget()
Update the currently "selected" layer within the GERBER_LAYER_WIDGET.
wxChoice * m_SelComponentBox
void OnDrlFileHistory(wxCommandEvent &event)
Delete the current data and load a drill file in Excellon format selected from history list on curren...
bool LoadExcellonFiles(const wxString &aFileName)
Load a drill (EXCELLON) file or many files.
void OnZipFileHistory(wxCommandEvent &event)
Delete the current data and load a zip archive file selected from the history list.
wxStaticText * m_netText
void SetVisibleLayers(LSET aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings.
bool m_show_layer_manager_tools
void ReCreateMenuBar() override
Recreates the menu bar.
wxStaticText * m_apertText
int getNextAvailableLayer(int aLayer=0) const
Find the next empty layer starting at aLayer and returns it to the caller.
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
Definition: eda_item.cpp:194
void SetLayout(GBR_LAYOUT *aLayout)
Set the m_gerberLayout member in such as way as to ensure deleting any previous GBR_LAYOUT.
bool IsLayerVisible(int aLayer) const
Test whether a given layer is visible.
GERBER_FILE_IMAGE_LIST * GetImagesList() const
Accessors to GERBER_FILE_IMAGE_LIST and GERBER_FILE_IMAGE data.
void SetElementVisibility(int aLayerID, bool aNewState)
Change the visibility of an element category.
void ReFillLayerWidget()
Change out all the layers in m_Layers; called upon loading new gerber files.
void OnSelectActiveLayer(wxCommandEvent &event)
Select the active layer:
void UpdateTitleAndInfo()
Display the short filename (if exists) of the selected layer on the caption of the main GerbView wind...
void SetDisplayMode(int aMode)
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103
bool Read_EXCELLON_File(const wxString &aFullFileName)
void ReCreateOptToolbar() override
Create or update the left vertical toolbar (option toolbar)