KiCad PCB EDA Suite
eda_draw_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) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
5  * Copyright (C) 2011 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
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, you may find one here:
20  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21  * or you may search the http://www.gnu.org website for the version 2 license,
22  * or you may write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24  */
25 
26 #ifndef DRAW_FRAME_H_
27 #define DRAW_FRAME_H_
28 
29 #include <eda_base_frame.h>
30 #include <kiway_player.h>
32 #include <gal/color4d.h>
33 #include <class_draw_panel_gal.h>
34 #include <origin_transforms.h>
35 #include <kiid.h>
36 #include "hotkeys_basic.h"
37 
38 class EDA_ITEM;
39 class wxSingleInstanceChecker;
40 class ACTION_TOOLBAR;
41 class COLOR_SETTINGS;
42 class TOOL_MENU;
43 class APP_SETTINGS_BASE;
44 class wxFindReplaceData;
45 
46 namespace KIGFX
47 {
48  class GAL_DISPLAY_OPTIONS;
49  class RENDER_SETTINGS;
50 }
51 
52 using KIGFX::COLOR4D;
54 
55 #define LIB_EDIT_FRAME_NAME wxT( "LibeditFrame" )
56 #define SCH_EDIT_FRAME_NAME wxT( "SchematicFrame" )
57 #define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
58 #define FOOTPRINT_WIZARD_FRAME_NAME wxT( "FootprintWizard" )
59 #define FOOTPRINT_EDIT_FRAME_NAME wxT( "ModEditFrame" )
60 #define FOOTPRINT_VIEWER_FRAME_NAME wxT( "ModViewFrame" )
61 #define FOOTPRINT_VIEWER_FRAME_NAME_MODAL wxT( "ModViewFrameModal" )
62 #define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
63 
64 
72 {
73 public:
74  EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType, const wxString& aTitle,
75  const wxPoint& aPos, const wxSize& aSize, long aStyle,
76  const wxString& aFrameName );
77 
79 
88  bool LockFile( const wxString& aFileName );
89 
93  void ReleaseFile();
94 
99 
104 
105  wxFindReplaceData& GetFindReplaceData() { return *m_findReplaceData; }
106  wxArrayString& GetFindHistoryList() { return m_findStringHistoryList; }
107 
108  virtual void SetPageSettings( const PAGE_INFO& aPageSettings ) = 0;
109  virtual const PAGE_INFO& GetPageSettings() const = 0;
110 
115  virtual const wxSize GetPageSizeIU() const = 0;
116 
120  bool GetShowPolarCoords() const { return m_polarCoords; }
121  void SetShowPolarCoords( bool aShow ) { m_polarCoords = aShow; }
122 
123  void ToggleUserUnits() override;
124 
131  void GetUnitPair( EDA_UNITS& aPrimaryUnit, EDA_UNITS& aSecondaryUnits );
132 
139  virtual const wxPoint& GetGridOrigin() const = 0;
140  virtual void SetGridOrigin( const wxPoint& aPosition ) = 0;
141 
148  wxPoint GetNearestGridPosition( const wxPoint& aPosition ) const;
149 
159  wxPoint GetNearestHalfGridPosition( const wxPoint& aPosition ) const;
160 
165  { return m_originTransforms; }
166 
167 
168  virtual const TITLE_BLOCK& GetTitleBlock() const = 0;
169  virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) = 0;
170 
171  // the background color of the draw canvas:
172  // Virtual because some frames can have a specific way to get/set the bg color
173  virtual COLOR4D GetDrawBgColor() const { return m_drawBgColor; }
174  virtual void SetDrawBgColor( const COLOR4D& aColor) { m_drawBgColor= aColor ; }
175 
177  virtual COLOR_SETTINGS* GetColorSettings() const;
178 
179  bool ShowPageLimits() const { return m_showPageLimits; }
180  void SetShowPageLimits( bool aShow ) { m_showPageLimits = aShow; }
181 
191  bool LibraryFileBrowser( bool doOpen, wxFileName& aFilename, const wxString& wildcard,
192  const wxString& ext, bool isDirectory = false, bool aIsGlobal = false,
193  const wxString& aGlobalPath = wxEmptyString );
194 
195  void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
196 
197  virtual wxString GetScreenDesc() const;
198 
204  virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; }
205 
206  void EraseMsgBox();
207 
208  void ReCreateMenuBar() override { }
209  virtual void ReCreateHToolbar() = 0;
210  virtual void ReCreateVToolbar() = 0;
211  virtual void ReCreateOptToolbar() = 0;
212  virtual void ReCreateAuxiliaryToolbar() { }
213 
217  virtual void UpdateToolbarControlSizes() { }
218 
219  /*
220  * These 4 functions provide a basic way to show/hide grid and /get/set grid color.
221  *
222  * These parameters are saved in KiCad config for each main frame.
223  */
224  bool IsGridVisible() const;
225  virtual void SetGridVisibility( bool aVisible );
226 
227  virtual COLOR4D GetGridColor() { return m_gridColor; }
228  virtual void SetGridColor( const COLOR4D& aColor ) { m_gridColor = aColor; }
229 
239  void OnSelectGrid( wxCommandEvent& event );
240 
241  void OnGridSettings( wxCommandEvent& event );
242 
247  void UpdateGridSelectBox();
248 
252  void OnUpdateSelectGrid( wxUpdateUIEvent& aEvent );
253 
258  void UpdateZoomSelectBox();
259 
263  void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
264 
268  const wxString GetZoomLevelIndicator() const;
269 
277  virtual void OnSelectZoom( wxCommandEvent& event );
278 
282  virtual void OnSize( wxSizeEvent& event ) override;
283 
284  void OnMove( wxMoveEvent& aEvent ) override;
285 
289  virtual void HardRedraw();
290 
295  virtual void Zoom_Automatique( bool aWarpPointer );
296 
305  void FocusOnLocation( const wxPoint& aPos );
306 
311  void AddStandardSubMenus( TOOL_MENU& aMenu );
312 
321  void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, BASE_SCREEN* aScreen,
322  double aMils2Iu, const wxString& aFilename,
323  const wxString& aSheetLayer = wxEmptyString );
324 
325  void DisplayToolMsg( const wxString& msg ) override;
326 
332  virtual void OnPageSettingsChange() {}
333 
341  void UpdateStatusBar() override;
342 
346  void DisplayUnitsMsg();
347 
351  virtual void DisplayGridMsg();
352 
353  void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
354  void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
355 
366  void AppendMsgPanel( const wxString& aTextUpper, const wxString& aTextLower, int aPadding = 6 );
367 
371  virtual void ClearMsgPanel();
372 
378  void SetMsgPanel( const std::vector< MSG_PANEL_ITEM >& aList );
379  void SetMsgPanel( EDA_ITEM* aItem );
380 
388  void SetMsgPanel( const wxString& aTextUpper, const wxString& aTextLower, int aPadding = 6 );
389 
393  virtual void UpdateMsgPanel();
394 
398  virtual EDA_ITEM* GetItem( const KIID& aId ) const { return nullptr; }
399 
405  virtual void PrintPage( const RENDER_SETTINGS* aSettings );
406 
410  virtual void ActivateGalCanvas();
411 
415  virtual void SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
416 
422  virtual EDA_DRAW_PANEL_GAL* GetCanvas() const { return m_canvas; }
423  void SetCanvas( EDA_DRAW_PANEL_GAL* aPanel ) { m_canvas = aPanel; }
424 
425  wxWindow* GetToolCanvas() const override { return GetCanvas(); }
426 
431 
432  void RefreshCanvas() override
433  {
434  GetCanvas()->Refresh();
435  }
436 
449  virtual const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const;
450 
454  void RecreateToolbars();
455 
456  DECLARE_EVENT_TABLE()
457 
458 protected:
459  virtual void SetScreen( BASE_SCREEN* aScreen ) { m_currentScreen = aScreen; }
460 
461  void unitsChangeRefresh() override;
462 
463  void setupUnits( APP_SETTINGS_BASE* aCfg );
464 
468  void resolveCanvasType();
469 
474 
479 
483  virtual void handleActivateEvent( wxActivateEvent& aEvent );
484  void onActivate( wxActivateEvent& aEvent );
485 
486 
487  wxSocketServer* m_socketServer;
488  std::vector<wxSocketBase*> m_sockets;
489 
491  std::unique_ptr<wxSingleInstanceChecker> m_file_checker;
492 
493  bool m_showPageLimits; // True to display the page limits
494  COLOR4D m_gridColor; // Grid color
495  COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
496  // Pcbnew, BLACK or WHITE for Eeschema
497  int m_undoRedoCountMax; // Default Undo/Redo command Max depth, to be handed
498  // to screens
499  bool m_polarCoords; // For those frames that support polar coordinates
500 
501  bool m_showBorderAndTitleBlock; // Show the drawing sheet (border & title block).
502  long m_firstRunDialogSetting; // Show first run dialog on startup
503 
504  wxChoice* m_gridSelectBox;
505  wxChoice* m_zoomSelectBox;
506 
508  ACTION_TOOLBAR* m_auxiliaryToolBar; // Additional tools under main toolbar
509  ACTION_TOOLBAR* m_drawToolBar; // Drawing tools (typically on right edge of window)
510  ACTION_TOOLBAR* m_optionsToolBar; // Options (typically on left edge of window)
511 
512  wxFindReplaceData* m_findReplaceData;
513  wxArrayString m_findStringHistoryList;
515 
518 
520 
523 
524 private:
527 
530 
533 };
534 
535 #endif // DRAW_FRAME_H_
void ReCreateMenuBar() override
Recreates the menu bar.
virtual void SetPageSettings(const PAGE_INFO &aPageSettings)=0
virtual void ReCreateVToolbar()=0
void AddStandardSubMenus(TOOL_MENU &aMenu)
Construct a "basic" menu for a tool, containing only items that apply to all tools (e....
Define the structure of a toolbar with buttons that invoke ACTIONs.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
Definition: kiway_player.h:64
virtual const TITLE_BLOCK & GetTitleBlock() const =0
KIGFX::GAL_DISPLAY_OPTIONS & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
The Cairo implementation of the graphics abstraction layer.
Definition: color4d.cpp:191
virtual void handleActivateEvent(wxActivateEvent &aEvent)
Handle a window activation event.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
ACTION_TOOLBAR * m_auxiliaryToolBar
virtual void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)=0
ACTION_TOOLBAR * m_optionsToolBar
virtual void SetScreen(BASE_SCREEN *aScreen)
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:32
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
virtual void UpdateToolbarControlSizes()
Update the sizes of any controls in the toolbars of the frame.
void SetShowPolarCoords(bool aShow)
bool LibraryFileBrowser(bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory=false, bool aIsGlobal=false, const wxString &aGlobalPath=wxEmptyString)
Manage a CONDITIONAL_MENU and some number of CONTEXT_MENUs as sub-menus.
Definition: tool_menu.h:42
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
std::vector< wxSocketBase * > m_sockets
interprocess communication
void OnMove(wxMoveEvent &aEvent) override
void RecreateToolbars()
Rebuild all toolbars, and update the checked state of check tools.
wxArrayString m_findStringHistoryList
void resolveCanvasType()
Determines the Canvas type to load (with prompt if required) and initializes m_canvasType.
void ReleaseFile()
Release the current file marked in use.
void RefreshCanvas() override
virtual ORIGIN_TRANSFORMS & GetOriginTransforms()
Return a reference to the default ORIGIN_TRANSFORMS object.
wxPoint GetNearestHalfGridPosition(const wxPoint &aPosition) const
Return the nearest aGridSize / 2 location to aPosition.
void UpdateZoomSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
ACTION_TOOLBAR * m_mainToolBar
void ScriptingConsoleEnableDisable()
Toggles the scripting console visibility.
wxPoint GetNearestGridPosition(const wxPoint &aPosition) const
Return the nearest aGridSize location to aPosition.
A panel to display various information messages.
Definition: msgpanel.h:103
The base class for create windows for drawing purpose.
COLOR4D m_drawBgColor
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition: title_block.h:40
wxChoice * m_gridSelectBox
std::unique_ptr< wxSingleInstanceChecker > m_file_checker
virtual const wxSize GetPageSizeIU() const =0
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
wxFindReplaceData & GetFindReplaceData()
bool ShowPageLimits() const
void DisplayUnitsMsg()
Display current unit pane in the status bar.
EDA_DRAW_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName)
EDA_DRAW_PANEL_GAL * m_canvas
This the frame's interface to setting GAL display options.
void UpdateGridSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
void unitsChangeRefresh() override
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
virtual const PAGE_INFO & GetPageSettings() const =0
virtual void Zoom_Automatique(bool aWarpPointer)
Redraw the screen with best zoom level and the best centering that shows all the page or the board.
Definition: kiid.h:44
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
BASE_SCREEN * m_currentScreen
current used SCREEN
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
wxArrayString m_replaceStringHistoryList
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
bool IsGridVisible() const
EDA_MSG_PANEL * m_messagePanel
virtual void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
void OnUpdateSelectGrid(wxUpdateUIEvent &aEvent)
Update the checked item in the grid combobox.
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:53
bool m_showBorderAndTitleBlock
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:40
wxChoice * m_zoomSelectBox
virtual void PrintPage(const RENDER_SETTINGS *aSettings)
Print the page pointed by current screen, set by the calling print function.
Base window classes and related definitions.
virtual void SetGridColor(const COLOR4D &aColor)
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:260
virtual const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const
Returns bbox of document with option to not include some items.
virtual void ActivateGalCanvas()
Use to start up the GAL drawing canvas.
void PrintDrawingSheet(const RENDER_SETTINGS *aSettings, BASE_SCREEN *aScreen, double aMils2Iu, const wxString &aFilename, const wxString &aSheetLayer=wxEmptyString)
Prints the drawing-sheet (frame and title block).
virtual const wxPoint & GetGridOrigin() const =0
Return the absolute coordinates of the origin of the snap grid.
virtual COLOR4D GetGridColor()
virtual void ClearMsgPanel()
Clear all messages from the message panel.
virtual void ReCreateOptToolbar()=0
virtual void HardRedraw()
Rebuild the GAL and redraws the screen.
virtual EDA_ITEM * GetItem(const KIID &aId) const
Fetch an item by KIID.
bool IsScriptingConsoleVisible()
Gets the current visibility of the scripting console window.
COLOR_SETTINGS * m_colorSettings
The current canvas type.
const wxString GetZoomLevelIndicator() const
Return a human readable value for display in dialogs.
wxSocketServer * m_socketServer
void onActivate(wxActivateEvent &aEvent)
EDA_UNITS
Definition: eda_units.h:38
void SetCanvas(EDA_DRAW_PANEL_GAL *aPanel)
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting()
Returns the canvas type stored in the application settings.
virtual void OnPageSettingsChange()
Called when modifying the page settings.
virtual void ReCreateHToolbar()=0
void OnSelectGrid(wxCommandEvent &event)
Command event handler for selecting grid sizes.
bool GetShowPolarCoords() const
For those frames that support polar coordinates.
virtual void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Changes the current rendering backend.
A class to perform either relative or absolute display origin transforms for a single axis of a point...
KIGFX::GAL_DISPLAY_OPTIONS m_galDisplayOptions
Default display origin transforms object.
void setupUnits(APP_SETTINGS_BASE *aCfg)
wxArrayString & GetFindHistoryList()
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100
virtual void ReCreateAuxiliaryToolbar()
wxFindReplaceData * m_findReplaceData
ORIGIN_TRANSFORMS m_originTransforms
Color settings are a bit different than most of the settings objects in that there can be more than o...
virtual COLOR4D GetDrawBgColor() const
void OnGridSettings(wxCommandEvent &event)
void UpdateStatusBar() override
Update the status bar information.
virtual COLOR_SETTINGS * GetColorSettings() const
Returns a pointer to the active color theme settings.
void SetShowPageLimits(bool aShow)
void OnUpdateSelectZoom(wxUpdateUIEvent &aEvent)
Update the checked item in the zoom combobox.
bool saveCanvasTypeSetting(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Stores the canvas type in the application settings.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
virtual void SetGridOrigin(const wxPoint &aPosition)=0
virtual void DisplayGridMsg()
Display current grid size in the status bar.
void FocusOnLocation(const wxPoint &aPos)
Useful to focus on a particular location, in find functions.
void ToggleUserUnits() override
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual void SetGridVisibility(bool aVisible)
void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits)
Get the pair or units in current use.
long m_firstRunDialogSetting
virtual void SetDrawBgColor(const COLOR4D &aColor)
wxWindow * GetToolCanvas() const override
Canvas access.
virtual void OnSelectZoom(wxCommandEvent &event)
Set the zoom factor when selected by the zoom list box in the main tool bar.
bool LockFile(const wxString &aFileName)
Mark a schematic file as being in use.
void DisplayToolMsg(const wxString &msg) override
virtual void UpdateMsgPanel()
Redraw the message panel.
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.
virtual wxString GetScreenDesc() const
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103
ACTION_TOOLBAR * m_drawToolBar