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 <pgm_base.h>
27 #include <config_params.h>
28 #include <eda_draw_frame.h>
30 #include <gerbview.h>
31 #include <convert_to_biu.h>
32 #include <gbr_layout.h>
33 #include <page_info.h>
34 #include <gbr_display_options.h>
35 #include <undo_redo_container.h>
36 
37 #define NO_AVAILABLE_LAYERS UNDEFINED_LAYER
38 
42 class GERBER_DRAW_ITEM;
43 class GERBER_FILE_IMAGE;
45 class REPORTER;
46 class SELECTION;
47 
48 
53 #define GERBVIEW_FRAME_NAME wxT( "GerberFrame" )
54 
56 {
57 public:
58  GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent );
60 
61  void doCloseWindow() override;
62 
63  bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl ) override;
64 
74  bool LoadListOfGerberAndDrillFiles( const wxString& aPath,
75  const wxArrayString& aFilenameList,
76  const std::vector<int>* aFileType = nullptr );
77 
78  // Virtual basic functions:
79  void ReCreateHToolbar() override;
80  void ReCreateAuxiliaryToolbar() override;
81 
85  void ReCreateVToolbar() override;
86 
90  void ReCreateOptToolbar() override;
91 
92  void ReCreateMenuBar() override;
93  void UpdateStatusBar() 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, COLOR4D aColor );
159 
160  COLOR4D GetLayerColor( int aLayer ) const;
161  void SetLayerColor( int aLayer, 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 
353  void UpdateDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions );
354 
355  /*
356  * Do nothing in GerbView.
357  */
359  UNDO_REDO aTypeCommand = UNDO_REDO::UNSPECIFIED ) { }
360 
370  void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
371  UNDO_REDO aTypeCommand )
372  {
373  // currently: do nothing in GerbView.
374  }
375 
377  void ActivateGalCanvas() override;
378 
382  void InstallPreferences( PAGED_DIALOG* aParent, PANEL_HOTKEYS_EDITOR* aHotkeysPanel ) override;
383 
387  void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
388 
389  SELECTION& GetCurrentSelection() override;
390 
392  void SetDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions ) { m_DisplayOptions = aOptions; }
393 
399  void SetLayout( GBR_LAYOUT* aLayout )
400  {
401  delete m_gerberLayout;
402  m_gerberLayout = aLayout;
403  }
404 
406  {
407  wxASSERT( m_gerberLayout );
408  return m_gerberLayout;
409  }
410 
415  {
416  return m_gerberLayout->GetImagesList();
417  }
418 
419  GERBER_FILE_IMAGE* GetGbrImage( int aIdx ) const;
420 
421  unsigned ImagesMaxCount() const;
422 
423 
424  void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
425  const PAGE_INFO& GetPageSettings() const override;
426  const wxSize GetPageSizeIU() const override;
427 
428  const wxPoint& GetGridOrigin() const override { return m_grid_origin; }
429  void SetGridOrigin( const wxPoint& aPoint ) override { m_grid_origin = aPoint; }
430 
431  const TITLE_BLOCK& GetTitleBlock() const override;
432  void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) override;
433 
451  int SelectPCBLayer( int aDefaultLayer, int aCopperLayerCount, wxString aGerberName );
452 
456  COLOR4D GetGridColor() override;
457 
459  virtual void SetGridColor( COLOR4D aColor ) override;
460 
461  const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override
462  {
463  wxASSERT( m_gerberLayout );
464  return m_gerberLayout->ViewBBox();
465  }
466 
467  DECLARE_EVENT_TABLE()
468 
469 protected:
470  void setupUIConditions() override;
471 
472 private:
476  void updateDCodeSelectBox();
477  void unitsChangeRefresh() override; // See class EDA_DRAW_FRAME
478 
479  void OnClearJobFileHistory( wxCommandEvent& aEvent );
480  void OnClearZipFileHistory( wxCommandEvent& aEvent );
481  void OnClearDrlFileHistory( wxCommandEvent& aEvent );
482  void OnClearGbrFileHistory( wxCommandEvent& aEvent );
483 
484  // The Tool Framework initialization
485  void setupTools();
486 
489 
490 public:
491  wxChoice* m_SelComponentBox; // a choice box to display and highlight component
492  // graphic items
493  wxChoice* m_SelNetnameBox; // a choice box to display and highlight netlist
494  // graphic items
495  wxChoice* m_SelAperAttributesBox; // a choice box to display aperture attributes and
496  // highlight items
497  GBR_LAYER_BOX_SELECTOR* m_SelLayerBox; // The combobox to select the current active
498  // graphic layer
499  // (which is drawn on top on the other layers
500  DCODE_SELECTION_BOX* m_DCodeSelector; // a list box to select the dcode Id to highlight.
501  wxTextCtrl* m_TextInfo; // a wxTextCtrl used to display some info about
502  // gerber data (format..)
503 
504 protected:
506 
510 
511  wxString m_lastFileName; // The last filename chosen to be proposed to the
512  // user.
513 
514 private:
515  int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn:
516  // - in fast mode (write mode) but if there are negative
517  // items only the last image is correctly drawn (no
518  // problem to see only one image or when no negative items)
519  // - in "exact" mode (but slower) in write mode:
520  // last image covers previous images
521  // - in "exact" mode (also slower) in OR mode
522  // (transparency mode)
523  // m_displayMode = 0, 1 or 2
524 
526 
529  wxPoint m_grid_origin;
530  PAGE_INFO m_paper; // used only to show paper limits to screen
532  wxStaticText* m_cmpText; // a message on the auxiliary toolbar,
533  // relative to the m_SelComponentBox
534  wxStaticText* m_netText; // a message on the auxiliary toolbar,
535  // relative to the m_SelNetnameBox
536  wxStaticText* m_apertText; // a message on the auxiliary toolbar,
537  // relative to the m_SelAperAttributesBox
538  wxStaticText* m_dcodeText; // a message on the auxiliary toolbar,
539  // relative to the m_DCodeSelector
540 };
541 
542 #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 SetVisibleElementColor(int aLayerID, COLOR4D aColor)
void SortLayersByX2Attributes()
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 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
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:64
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.
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 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.
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 photoplot (Gerber) file or many files.
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
Redraw the menus and what not in current language.
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.
GERBER_LAYER_WIDGET is here to implement the abtract functions of LAYER_WIDGET so they may be tied in...
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
see class PGM_BASE
Board layer functions and definitions.
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
void OnUpdateDrawMode(wxUpdateUIEvent &aEvent)
COLOR4D GetLayerColor(int aLayer) const
int SelectPCBLayer(int aDefaultLayer, int aCopperLayerCount, wxString aGerberName)
Show the dialog box for layer selection.
GERBER_FILE_IMAGE_LIST * GetImagesList() const
Definition: gbr_layout.cpp:41
void SetLayerColor(int aLayer, COLOR4D aColor)
wxStaticText * m_dcodeText
virtual void SetGridColor(COLOR4D aColor) override
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:206
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:98
bool Read_EXCELLON_File(const wxString &aFullFileName)
void ReCreateOptToolbar() override
Create or update the left vertical toolbar (option toolbar)