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-2019 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 
47 
53 #define GERBVIEW_FRAME_NAME wxT( "GerberFrame" )
54 
55 class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME
56 {
60  PAGE_INFO m_paper; // used only to show paper limits to screen
62  wxStaticText* m_cmpText; // a message on the auxiliary toolbar,
63  // relative to the m_SelComponentBox
64  wxStaticText* m_netText; // a message on the auxiliary toolbar,
65  // relative to the m_SelNetnameBox
66  wxStaticText* m_apertText; // a message on the auxiliary toolbar,
67  // relative to the m_SelAperAttributesBox
68  wxStaticText* m_dcodeText; // a message on the auxiliary toolbar,
69  // relative to the m_DCodeSelector
70 
71 public:
73  void SetDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions ) { m_DisplayOptions = aOptions; }
74 
81  void SetLayout( GBR_LAYOUT* aLayout )
82  {
83  delete m_gerberLayout;
84  m_gerberLayout = aLayout;
85  }
86 
88  {
89  wxASSERT( m_gerberLayout );
90  return m_gerberLayout;
91  }
92 
97  {
98  return m_gerberLayout->GetImagesList();
99  }
100 
101  GERBER_FILE_IMAGE* GetGbrImage( int aIdx ) const;
102 
103  unsigned ImagesMaxCount() const;
104 
105 
106  void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
107  const PAGE_INFO& GetPageSettings() const override;
108  const wxSize GetPageSizeIU() const override;
109 
110  const wxPoint& GetGridOrigin() const override { return m_grid_origin; }
111  void SetGridOrigin( const wxPoint& aPoint ) override { m_grid_origin = aPoint; }
112 
113  const TITLE_BLOCK& GetTitleBlock() const override;
114  void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) override;
115 
130  int SelectPCBLayer( int aDefaultLayer, int aCopperLayerCount );
131 
133  virtual void SetGridColor( COLOR4D aColor ) override;
134 
135  const BOX2I GetDocumentExtents() const override
136  {
137  wxASSERT( m_gerberLayout );
138  return m_gerberLayout->ViewBBox();
139  }
140 
141 protected:
143 
147 
148  wxString m_lastFileName; // The last filename chosen to be proposed to the user
149 
150 public:
151  wxChoice* m_SelComponentBox; // a choice box to display and highlight component graphic items
152  wxChoice* m_SelNetnameBox; // a choice box to display and highlight netlist graphic items
153  wxChoice* m_SelAperAttributesBox; // a choice box to display aperture attributes and highlight items
154  GBR_LAYER_BOX_SELECTOR* m_SelLayerBox; // The combobox to select the current active graphic layer
155  // (which is drawn on top on the other layers
156  DCODE_SELECTION_BOX* m_DCodeSelector; // a list box to select the dcode Id to highlight.
157  wxTextCtrl* m_TextInfo; // a wxTextCtrl used to display some info about
158  // gerber data (format..)
159 
160 private:
161  int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn:
162  // - in fast mode (write mode) but if there are negative
163  // items only the last image is correctly drawn (no
164  // problem to see only one image or when no negative items)
165  // - in "exact" mode (but slower) in write mode:
166  // last image covers previous images
167  // - in "exact" mode (also slower) in OR mode
168  // (transparency mode)
169  // m_displayMode = 0, 1 or 2
170 
172 
176  void updateDCodeSelectBox();
177  void unitsChangeRefresh() override; // See class EDA_DRAW_FRAME
178 
179  void OnClearJobFileHistory( wxCommandEvent& aEvent );
180  void OnClearZipFileHistory( wxCommandEvent& aEvent );
181  void OnClearDrlFileHistory( wxCommandEvent& aEvent );
182  void OnClearGbrFileHistory( wxCommandEvent& aEvent );
183 
184  // The Tool Framework initalization
185  void setupTools();
186 
189 
198  bool loadListOfGerberAndDrillFiles( const wxString& aPath,
199  const wxArrayString& aFilenameList,
200  const std::vector<int>* aFileType = nullptr );
201 
202 public:
203  GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent );
204  ~GERBVIEW_FRAME();
205 
206  void OnCloseWindow( wxCloseEvent& Event );
207 
208  bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl ) override;
209 
210  // Virtual basic functions:
211  void ReCreateHToolbar() override;
212  void ReCreateAuxiliaryToolbar() override;
213 
218  void ReCreateVToolbar() override;
219 
223  void ReCreateOptToolbar() override;
224 
225  void ReCreateMenuBar() override;
226  void UpdateStatusBar() override;
227 
234  int GetDisplayMode() { return m_displayMode; }
235 
242  void SetDisplayMode( int aMode ) { m_displayMode = aMode; }
243 
251  bool IsElementVisible( int aLayerID ) const;
252 
260  void SetElementVisibility( int aLayerID, bool aNewState );
261 
267  void SetGridVisibility( bool aVisible ) override;
268 
274  LSET GetVisibleLayers() const;
275 
281  void SetVisibleLayers( LSET aLayerMask );
282 
289  bool IsLayerVisible( int aLayer ) const;
290 
295  COLOR4D GetVisibleElementColor( int aLayerID );
296 
297  void SetVisibleElementColor( int aLayerID, COLOR4D aColor );
298 
299  COLOR4D GetLayerColor( int aLayer ) const;
300  void SetLayerColor( int aLayer, COLOR4D aColor );
301 
309 
314  void ReFillLayerWidget();
315 
320  void SetActiveLayer( int aLayer, bool doLayerWidgetUpdate = true );
321 
326  int GetActiveLayer() const { return m_activeLayer; }
327 
335  int getNextAvailableLayer( int aLayer = 0 ) const;
336 
345  void syncLayerWidget();
346 
354  void syncLayerBox( bool aRebuildLayerBox = false );
355 
364  void UpdateTitleAndInfo();
365 
371  void DisplayGridMsg() override;
372 
373  void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
374 
375  void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
376 
377  void OnToggleShowLayerManager( wxCommandEvent& aEvent );
378 
379  void ShowChangedLanguage() override;
380 
381  void Process_Special_Functions( wxCommandEvent& event );
382 
384  void OnSelectHighlightChoice( wxCommandEvent& event );
385 
391  void OnSelectActiveDCode( wxCommandEvent& event );
392 
399  void OnSelectActiveLayer( wxCommandEvent& event );
400 
406  void OnShowGerberSourceFile( wxCommandEvent& event );
407 
414  void OnSelectDisplayMode( wxCommandEvent& event );
415 
420  void OnQuit( wxCommandEvent& event );
421 
422  void OnUpdateDrawMode( wxUpdateUIEvent& aEvent );
423  void OnUpdateSelectDCode( wxUpdateUIEvent& aEvent );
424  void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
425 
426  void Files_io( wxCommandEvent& event );
427 
433  void OnGbrFileHistory( wxCommandEvent& event );
434 
440  void OnDrlFileHistory( wxCommandEvent& event );
441 
447  void OnZipFileHistory( wxCommandEvent& event );
448 
453  void OnJobFileHistory( wxCommandEvent& event );
454 
461  bool unarchiveFiles( const wxString& aFullFileName, REPORTER* aReporter = nullptr );
462 
471  bool LoadGerberFiles( const wxString& aFileName );
472  bool Read_GERBER_File( const wxString& GERBER_FullFileName );
473 
482  bool LoadExcellonFiles( const wxString& aFileName );
483  bool Read_EXCELLON_File( const wxString& aFullFileName );
484 
493  bool LoadZipArchiveFile( const wxString& aFileName );
494 
495 
503  bool LoadGerberJobFile( const wxString& aFileName );
504 
505 
509  void Liste_D_Codes();
510 
511  // PCB handling
512  bool Clear_DrawLayers( bool query );
513  void Erase_Current_DrawLayer( bool query );
514 
516 
521  void UpdateDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions );
522 
523  // Conversion function
524  void ExportDataInPcbnewFormat( wxCommandEvent& event );
525 
526  /* SaveCopyInUndoList() virtual
527  * currently: do nothing in GerbView.
528  */
530  UNDO_REDO_T aTypeCommand = UR_UNSPECIFIED,
531  const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) { }
532 
542  void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
543  UNDO_REDO_T aTypeCommand,
544  const wxPoint& aTransformPoint = wxPoint( 0, 0 ) )
545  {
546  // currently: do nothing in GerbView.
547  }
548 
550  void ActivateGalCanvas() override;
551 
555  void InstallPreferences( PAGED_DIALOG* aParent, PANEL_HOTKEYS_EDITOR* aHotkeysPanel ) override;
556 
560  void CommonSettingsChanged( bool aEnvVarsChanged ) override;
561 
562  void SyncToolbars() override;
563 
564  DECLARE_EVENT_TABLE()
565 };
566 
567 #endif /* WX_GERBER_STRUCT_H */
Class GBR_DISPLAY_OPTIONS is a helper class to handle display options (filling modes and afew other o...
GBR_LAYOUT holds list of GERBER_DRAW_ITEM currently loaded.
Definition: gbr_layout.h:47
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
Saves 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 Files_io(wxCommandEvent &event)
void UpdateStatusBar() override
Update the status bar information.
COLOR4D GetNegativeItemsColor()
Function GetNegativeItemsColor.
void OnToggleShowLayerManager(wxCommandEvent &aEvent)
const BOX2I GetDocumentExtents() const override
void syncLayerBox(bool aRebuildLayerBox=false)
Function syncLayerBox updates the currently "selected" layer within m_SelLayerBox The currently activ...
int GetDisplayMode()
Function GetDisplayMode.
COLOR4D GetVisibleElementColor(int aLayerID)
Function GetVisibleElementColor returns the color of a gerber visible element.
LSET GetVisibleLayers() const
Function GetVisibleLayers is a proxy function that calls the correspondent function in m_BoardSetting...
void OnQuit(wxCommandEvent &event)
Function OnQuit 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
UNDO_REDO_T
Undo Redo considerations: Basically we have 3 cases New item Deleted item Modified item there is also...
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl) override
Function OpenProjectFiles is abstract, and opens a project or set of files given by aFileList.
bool Read_GERBER_File(const wxString &GERBER_FullFileName)
Definition: readgerb.cpp:40
GERBER_FILE_IMAGE holds the Image data and parameters for one gerber file and layer parameters (TODO:...
void SetActiveLayer(int aLayer, bool doLayerWidgetUpdate=true)
Function SetActiveLayer will change the currently active layer to aLayer and update the GERBER_LAYER_...
void OnGbrFileHistory(wxCommandEvent &event)
Function OnGbrFileHistory deletes the current data and loads a Gerber file selected from history list...
bool loadListOfGerberAndDrillFiles(const wxString &aPath, const wxArrayString &aFilenameList, const std::vector< int > *aFileType=nullptr)
Loads a list of Gerber and NC drill files and updates the view based on them.
GBR_LAYER_BOX_SELECTOR * m_SelLayerBox
void SaveCopyInUndoList(GERBER_DRAW_ITEM *aItemToCopy, UNDO_REDO_T aTypeCommand=UR_UNSPECIFIED, const wxPoint &aTransformPoint=wxPoint(0, 0))
const GBR_DISPLAY_OPTIONS & GetDisplayOptions() const
void OnUpdateLayerSelectBox(wxUpdateUIEvent &aEvent)
void updateNetnameListSelectBox()
REPORTER is 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)
TITLE_BLOCK holds the information shown in the lower right corner of a plot, printout,...
Definition: title_block.h:40
void OnSelectActiveDCode(wxCommandEvent &event)
Function OnSelectActiveDCode Selects the active DCode for the current active layer.
wxChoice * m_SelNetnameBox
void ActivateGalCanvas() override
void SetGridVisibility(bool aVisible) override
Function SetGridVisibility(), virtual from EDA_DRAW_FRAME It may be overloaded by derived classes.
GERBVIEW_FRAME(KIWAY *aKiway, wxWindow *aParent)
void OnSelectDisplayMode(wxCommandEvent &event)
Function OnSelectDisplayMode called on a display mode selection Mode selection can be fast display,...
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
FILE_HISTORY m_zipFileHistory
void updateComponentListSelectBox()
void SetDisplayOptions(const GBR_DISPLAY_OPTIONS &aOptions)
int SelectPCBLayer(int aDefaultLayer, int aCopperLayerCount)
Install the dialog box for layer selection.
void UpdateDisplayOptions(const GBR_DISPLAY_OPTIONS &aOptions)
Updates 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.
bool unarchiveFiles(const wxString &aFullFileName, REPORTER *aReporter=nullptr)
Extracts 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:91
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
Function ReCreateVToolbar creates or updates the right vertical toolbar.
bool LoadGerberFiles(const wxString &aFileName)
function LoadGerberFiles Load a photoplot (Gerber) file or many files.
void InstallPreferences(PAGED_DIALOG *aParent, PANEL_HOTKEYS_EDITOR *aHotkeysPanel) override
Allows Gerbview to install its preferences panels into the preferences dialog.
PAGE_INFO describes the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:54
GERBER_FILE_IMAGE * GetGbrImage(int aIdx) const
bool LoadZipArchiveFile(const wxString &aFileName)
function LoadZipArchiveFileLoadZipArchiveFile 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
Function IsElementVisible tests whether a given element category is visible.
GBR_LAYOUT * m_gerberLayout
KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the s...
Definition: kiway.h:273
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...
PICKED_ITEMS_LIST is a holder to handle information on schematic or board items.
void OnCloseWindow(wxCloseEvent &Event)
FILE_HISTORY m_drillFileHistory
void OnShowGerberSourceFile(wxCommandEvent &event)
Function OnShowGerberSourceFile Call the preferred editor to show (and edit) the gerber source file l...
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void Process_Special_Functions(wxCommandEvent &event)
GBR_LAYOUT * GetGerberLayout() const
wxTextCtrl * m_TextInfo
DCODE_SELECTION_BOX * m_DCodeSelector
void DisplayGridMsg() override
Function DisplayGridMsg()
void ExportDataInPcbnewFormat(wxCommandEvent &event)
const PAGE_INFO & GetPageSettings() const override
wxStaticText * m_cmpText
int GetActiveLayer() const
Function SetActiveLayer returns the active layer.
void OnJobFileHistory(wxCommandEvent &event)
deletes 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.
void SyncToolbars() override
Update the toolbars (mostly settings/check buttons/checkboxes) with the current controller state.
void OnUpdateDrawMode(wxUpdateUIEvent &aEvent)
void SaveCopyInUndoList(const PICKED_ITEMS_LIST &aItemsList, UNDO_REDO_T aTypeCommand, const wxPoint &aTransformPoint=wxPoint(0, 0))
Function SaveCopyInUndoList (overloaded).
COLOR4D GetLayerColor(int aLayer) const
GERBER_FILE_IMAGE_LIST * GetImagesList() const
Definition: gbr_layout.cpp:44
void SetLayerColor(int aLayer, COLOR4D aColor)
wxStaticText * m_dcodeText
virtual void SetGridColor(COLOR4D aColor) override
wxPoint m_grid_origin
void syncLayerWidget()
Function syncLayerWidget updates the currently "selected" layer within the GERBER_LAYER_WIDGET.
wxChoice * m_SelComponentBox
void OnDrlFileHistory(wxCommandEvent &event)
Function OnDrlFileHistory deletes the current data and load a drill file in Excellon format selected ...
bool LoadExcellonFiles(const wxString &aFileName)
function LoadExcellonFiles Load a drill (EXCELLON) file or many files.
void OnZipFileHistory(wxCommandEvent &event)
Function OnZipFileHistory deletes the current data and load a zip archive file selected from the hist...
wxStaticText * m_netText
void SetVisibleLayers(LSET aLayerMask)
Function SetVisibleLayers is a proxy function that calls the correspondent function in m_BoardSetting...
bool m_show_layer_manager_tools
void ReCreateMenuBar() override
Recreates the menu bar.
wxStaticText * m_apertText
int getNextAvailableLayer(int aLayer=0) const
Function getNextAvailableLayer finds the next empty layer starting at aLayer and returns it to the ca...
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers.
void SetLayout(GBR_LAYOUT *aLayout)
Function SetLayout sets the m_gerberLayout member in such as way as to ensure deleting any previous G...
bool IsLayerVisible(int aLayer) const
Function IsLayerVisible tests whether a given layer is visible.
GERBER_FILE_IMAGE_LIST * GetImagesList() const
Accessors to GERBER_FILE_IMAGE_LIST and GERBER_FILE_IMAGE data.
void Liste_D_Codes()
Set Size Items (Lines, Flashes) from DCodes List.
void SetElementVisibility(int aLayerID, bool aNewState)
Function SetElementVisibility changes the visibility of an element category.
void CommonSettingsChanged(bool aEnvVarsChanged) override
Called after the preferences dialog is run.
void ReFillLayerWidget()
Function ReFillLayerWidget changes out all the layers in m_Layers; called upon loading new gerber fil...
void OnSelectActiveLayer(wxCommandEvent &event)
Function OnSelectActiveLayer Selects the active layer:
void UpdateTitleAndInfo()
Function UpdateTitleAndInfo displays the short filename (if exists) of the selected layer on the capt...
void SetDisplayMode(int aMode)
Function SetDisplayMode.
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:99
bool Read_EXCELLON_File(const wxString &aFullFileName)
void ReCreateOptToolbar() override
Create or update the left vertical toolbar (option toolbar)