KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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, [email protected]
5 * Copyright (C) 2011 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 1992-2023 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>
33#include <gal/color4d.h>
35#include <kiid.h>
36#include "hotkeys_basic.h"
37
38class EDA_ITEM;
39class wxSingleInstanceChecker;
40class ACTION_TOOLBAR;
41class COLOR_SETTINGS;
42class LOCKFILE;
43class TOOL_MENU;
45class wxFindReplaceData;
46class SEARCH_PANE;
49enum class BITMAP_TYPE;
50
51namespace KIGFX
52{
53 class GAL_DISPLAY_OPTIONS;
54 class RENDER_SETTINGS;
55}
56
57using KIGFX::COLOR4D;
59
60#define LIB_EDIT_FRAME_NAME wxT( "LibeditFrame" )
61#define LIB_VIEW_FRAME_NAME wxT( "ViewlibFrame" )
62#define SCH_EDIT_FRAME_NAME wxT( "SchematicFrame" )
63#define SYMBOL_CHOOSER_FRAME_NAME wxT( "SymbolChooserFrame" )
64#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
65#define FOOTPRINT_WIZARD_FRAME_NAME wxT( "FootprintWizard" )
66#define FOOTPRINT_CHOOSER_FRAME_NAME wxT( "FootprintChooserFrame" )
67#define FOOTPRINT_EDIT_FRAME_NAME wxT( "ModEditFrame" )
68#define FOOTPRINT_VIEWER_FRAME_NAME wxT( "ModViewFrame" )
69#define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
70
71
79{
80public:
81 EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType, const wxString& aTitle,
82 const wxPoint& aPos, const wxSize& aSize, long aStyle,
83 const wxString& aFrameName, const EDA_IU_SCALE& aIuScale );
84
86
95 bool LockFile( const wxString& aFileName );
96
100 void ReleaseFile();
101
106
111
113 wxArrayString& GetFindHistoryList() { return m_findStringHistoryList; }
114
115 virtual void SetPageSettings( const PAGE_INFO& aPageSettings ) = 0;
116 virtual const PAGE_INFO& GetPageSettings() const = 0;
117
122 virtual const VECTOR2I GetPageSizeIU() const = 0;
123
127 bool GetShowPolarCoords() const { return m_polarCoords; }
128 void SetShowPolarCoords( bool aShow ) { m_polarCoords = aShow; }
129
130 void ToggleUserUnits() override;
131
138 void GetUnitPair( EDA_UNITS& aPrimaryUnit, EDA_UNITS& aSecondaryUnits ) override;
139
146 virtual const VECTOR2I& GetGridOrigin() const = 0;
147 virtual void SetGridOrigin( const VECTOR2I& aPosition ) = 0;
148
155 VECTOR2I GetNearestGridPosition( const VECTOR2I& aPosition ) const;
156
166 VECTOR2I GetNearestHalfGridPosition( const VECTOR2I& aPosition ) const;
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( bool aForceRefresh = false ) const;
178
188 bool LibraryFileBrowser( bool doOpen, wxFileName& aFilename, const wxString& wildcard,
189 const wxString& ext, bool isDirectory = false, bool aIsGlobal = false,
190 const wxString& aGlobalPath = wxEmptyString );
191
192 void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
193
194 virtual wxString GetScreenDesc() const;
195 virtual wxString GetFullScreenDesc() const;
196
202 virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; }
203
204 void EraseMsgBox();
205
206 virtual void ReCreateHToolbar() { };
207 virtual void ReCreateVToolbar() { };
208 virtual void ReCreateOptToolbar() { };
209 virtual void ReCreateAuxiliaryToolbar() { }
210
214 virtual void UpdateToolbarControlSizes() { }
215
216 /*
217 * These 4 functions provide a basic way to show/hide grid and /get/set grid color.
218 *
219 * These parameters are saved in KiCad config for each main frame.
220 */
221 bool IsGridVisible() const;
222 virtual void SetGridVisibility( bool aVisible );
223
224 bool IsGridOverridden() const;
225 virtual void SetGridOverrides( bool aOverride );
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
245 void UpdateGridSelectBox();
246
250 void OnUpdateSelectGrid( wxUpdateUIEvent& aEvent );
251
255 void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
256
261 void UpdateZoomSelectBox();
262
266 const wxString GetZoomLevelIndicator() const;
267
275 virtual void OnSelectZoom( wxCommandEvent& event );
276
280 virtual void OnSize( wxSizeEvent& event ) override;
281
282 void OnMove( wxMoveEvent& aEvent ) override;
283
287 virtual void HardRedraw();
288
293 virtual void Zoom_Automatique( bool aWarpPointer );
294
303 void FocusOnLocation( const VECTOR2I& aPos );
304
309 void AddStandardSubMenus( TOOL_MENU& aMenu );
310
320 void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, BASE_SCREEN* aScreen,
321 const std::map<wxString, wxString>* aProperties, double aMils2Iu,
322 const wxString& aFilename, const wxString& aSheetLayer = wxEmptyString );
323
324 void DisplayToolMsg( const wxString& msg ) override;
325
326 void DisplayConstraintsMsg( const wxString& msg );
327
333 virtual void OnPageSettingsChange() {}
334
342 void UpdateStatusBar() override;
343
347 void DisplayUnitsMsg();
348
352 virtual void DisplayGridMsg();
353
354 void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
355 void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
356
367 void AppendMsgPanel( const wxString& aTextUpper, const wxString& aTextLower, int aPadding = 6 );
368
372 virtual void ClearMsgPanel();
373
379 void SetMsgPanel( const std::vector< MSG_PANEL_ITEM >& aList );
380 void SetMsgPanel( EDA_ITEM* aItem );
381
389 void SetMsgPanel( const wxString& aTextUpper, const wxString& aTextLower, int aPadding = 6 );
390
394 virtual void UpdateMsgPanel();
395
397
398 void UpdateProperties();
399
400 virtual void ToggleProperties() {}
401
402 static const wxString PropertiesPaneName() { return wxS( "PropertiesManager" ); }
403
407 virtual EDA_ITEM* GetItem( const KIID& aId ) const { return nullptr; }
408
414 virtual void PrintPage( const RENDER_SETTINGS* aSettings );
415
419 virtual void ActivateGalCanvas();
420
424 virtual void SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
425
431 virtual EDA_DRAW_PANEL_GAL* GetCanvas() const { return m_canvas; }
432 void SetCanvas( EDA_DRAW_PANEL_GAL* aPanel ) { m_canvas = aPanel; }
433
434 wxWindow* GetToolCanvas() const override { return GetCanvas(); }
435
440
441 void RefreshCanvas() override
442 {
443 GetCanvas()->Refresh();
444 }
445
458 virtual const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const;
459
463 void RecreateToolbars();
464
469
473 void ShowChangedLanguage() override;
474
476
477 virtual void CreateHotkeyPopup();
478
479
488 bool SaveCanvasImageToFile( const wxString& aFileName, BITMAP_TYPE aBitmapType );
489
490
491 DECLARE_EVENT_TABLE()
492
493protected:
494 virtual void SetScreen( BASE_SCREEN* aScreen ) { m_currentScreen = aScreen; }
495
496 void unitsChangeRefresh() override;
497
498 void setupUnits( APP_SETTINGS_BASE* aCfg );
499
500 std::vector<wxWindow*> findDialogs();
501
505 virtual void resolveCanvasType();
506
513
518
522 virtual void handleActivateEvent( wxActivateEvent& aEvent );
523 void onActivate( wxActivateEvent& aEvent );
524
525
526 wxSocketServer* m_socketServer;
527
529 std::unique_ptr<LOCKFILE> m_file_checker;
530
531 COLOR4D m_gridColor; // Grid color
532 COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
533 // Pcbnew, BLACK or WHITE for Eeschema
534 int m_undoRedoCountMax; // Default Undo/Redo command Max depth, to be handed
535 // to screens
536 bool m_polarCoords; // For those frames that support polar coordinates
537
538 bool m_showBorderAndTitleBlock; // Show the drawing sheet (border & title block).
539
542
544 ACTION_TOOLBAR* m_auxiliaryToolBar; // Additional tools under main toolbar
545 ACTION_TOOLBAR* m_drawToolBar; // Drawing tools (typically on right edge of window)
546 ACTION_TOOLBAR* m_optionsToolBar; // Options (typically on left edge of window)
547
548 std::unique_ptr<EDA_SEARCH_DATA> m_findReplaceData;
551
554
558
560
563
566
567private:
570
573
575};
576
577#endif // DRAW_FRAME_H_
BITMAP_TYPE
Definition: bitmap_types.h:41
Define the structure of a toolbar with buttons that invoke ACTIONs.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:41
Color settings are a bit different than most of the settings objects in that there can be more than o...
The base class for create windows for drawing purpose.
virtual const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const
Returns bbox of document with option to not include some items.
wxArrayString m_replaceStringHistoryList
virtual void ClearMsgPanel()
Clear all messages from the message panel.
virtual void ReCreateVToolbar()
virtual void UpdateToolbarControlSizes()
Update the sizes of any controls in the toolbars of the frame.
HOTKEY_CYCLE_POPUP * GetHotkeyPopup()
EDA_DRAW_PANEL_GAL * m_canvas
This the frame's interface to setting GAL display options.
virtual void ActivateGalCanvas()
Use to start up the GAL drawing canvas.
virtual void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)=0
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
GAL_DISPLAY_OPTIONS_IMPL m_galDisplayOptions
virtual const TITLE_BLOCK & GetTitleBlock() const =0
virtual void PrintPage(const RENDER_SETTINGS *aSettings)
Print the page pointed by current screen, set by the calling print function.
void onActivate(wxActivateEvent &aEvent)
COLOR_SETTINGS * m_colorSettings
wxChoice * m_gridSelectBox
void AddStandardSubMenus(TOOL_MENU &aMenu)
Construct a "basic" menu for a tool, containing only items that apply to all tools (e....
void ReleaseFile()
Release the current file marked in use.
void OnToolbarSizeChanged()
Update toolbars if desired toolbar icon changed.
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
void ScriptingConsoleEnableDisable()
Toggles the scripting console visibility.
virtual wxString GetFullScreenDesc() const
void OnSelectGrid(wxCommandEvent &event)
Command event handler for selecting grid sizes.
void DisplayToolMsg(const wxString &msg) override
std::unique_ptr< LOCKFILE > m_file_checker
bool IsScriptingConsoleVisible()
Gets the current visibility of the scripting console window.
void OnUpdateSelectZoom(wxUpdateUIEvent &aEvent)
Update the checked item in the zoom wxchoice.
virtual const PAGE_INFO & GetPageSettings() const =0
void DisplayUnitsMsg()
Display current unit pane in the status bar.
void setupUnits(APP_SETTINGS_BASE *aCfg)
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
void RefreshCanvas() override
virtual COLOR4D GetGridColor()
ACTION_TOOLBAR * m_optionsToolBar
void UpdateGridSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
virtual const VECTOR2I GetPageSizeIU() const =0
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
bool LockFile(const wxString &aFileName)
Mark a schematic file as being in use.
virtual void HardRedraw()
Rebuild the GAL and redraws the screen.
virtual void SetGridOrigin(const VECTOR2I &aPosition)=0
bool LibraryFileBrowser(bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory=false, bool aIsGlobal=false, const wxString &aGlobalPath=wxEmptyString)
bool IsGridOverridden() const
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
bool SaveCanvasImageToFile(const wxString &aFileName, BITMAP_TYPE aBitmapType)
Save the current view as an image file.
void UpdateZoomSelectBox()
Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes,...
virtual void SetPageSettings(const PAGE_INFO &aPageSettings)=0
virtual void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Changes the current rendering backend.
virtual void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting(APP_SETTINGS_BASE *aCfg=nullptr)
Returns the canvas type stored in the application settings.
const wxString GetZoomLevelIndicator() const
Return a human readable value for display in dialogs.
virtual void OnSelectZoom(wxCommandEvent &event)
Set the zoom factor when selected by the zoom list box in the main tool bar.
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
virtual void resolveCanvasType()
Determines the Canvas type to load (with prompt if required) and initializes m_canvasType.
static bool m_openGLFailureOccured
Has any failure occured when switching to OpenGL in any EDA_DRAW_FRAME?
BASE_SCREEN * m_currentScreen
current used SCREEN
virtual wxString GetScreenDesc() const
VECTOR2I GetNearestGridPosition(const VECTOR2I &aPosition) const
Return the nearest aGridSize location to aPosition.
static const wxString PropertiesPaneName()
EDA_MSG_PANEL * m_messagePanel
void SetCanvas(EDA_DRAW_PANEL_GAL *aPanel)
virtual const VECTOR2I & GetGridOrigin() const =0
Return the absolute coordinates of the origin of the snap grid.
virtual void ReCreateAuxiliaryToolbar()
void SetShowPolarCoords(bool aShow)
void FocusOnLocation(const VECTOR2I &aPos)
Useful to focus on a particular location, in find functions.
virtual void SetScreen(BASE_SCREEN *aScreen)
virtual void ReCreateHToolbar()
void RecreateToolbars()
Rebuild all toolbars, and update the checked state of check tools.
bool saveCanvasTypeSetting(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Stores the canvas type in the application settings.
ACTION_TOOLBAR * m_mainToolBar
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.
COLOR4D m_drawBgColor
virtual void SetGridVisibility(bool aVisible)
virtual void handleActivateEvent(wxActivateEvent &aEvent)
Handle a window activation event.
virtual void ReCreateOptToolbar()
virtual void SetDrawBgColor(const COLOR4D &aColor)
virtual void UpdateMsgPanel()
Redraw the message panel.
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const
Returns a pointer to the active color theme settings.
void ToggleUserUnits() override
virtual void CreateHotkeyPopup()
void UpdateStatusBar() override
Update the status bar information.
void GetUnitPair(EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits) override
Get the pair or units in current use.
wxArrayString & GetFindHistoryList()
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
virtual EDA_ITEM * GetItem(const KIID &aId) const
Fetch an item by KIID.
void PrintDrawingSheet(const RENDER_SETTINGS *aSettings, BASE_SCREEN *aScreen, const std::map< wxString, wxString > *aProperties, double aMils2Iu, const wxString &aFilename, const wxString &aSheetLayer=wxEmptyString)
Prints the drawing-sheet (frame and title block).
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual void OnPageSettingsChange()
Called when modifying the page settings.
wxSocketServer * m_socketServer
Prevents opening same file multiple times.
ACTION_TOOLBAR * m_drawToolBar
SEARCH_PANE * m_searchPane
EDA_SEARCH_DATA & GetFindReplaceData()
virtual COLOR4D GetDrawBgColor() const
void unitsChangeRefresh() override
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
void OnMove(wxMoveEvent &aEvent) override
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
bool IsGridVisible() const
std::vector< wxWindow * > findDialogs()
virtual void DisplayGridMsg()
Display current grid size in the status bar.
virtual void SetGridColor(const COLOR4D &aColor)
wxArrayString m_findStringHistoryList
wxChoice * m_zoomSelectBox
PROPERTIES_PANEL * GetPropertiesPanel()
wxWindow * GetToolCanvas() const override
Canvas access.
std::unique_ptr< EDA_SEARCH_DATA > m_findReplaceData
void DisplayConstraintsMsg(const wxString &msg)
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.
virtual void SetGridOverrides(bool aOverride)
PROPERTIES_PANEL * m_propertiesPanel
bool m_showBorderAndTitleBlock
VECTOR2I GetNearestHalfGridPosition(const VECTOR2I &aPosition) const
Return the nearest aGridSize / 2 location to aPosition.
HOTKEY_CYCLE_POPUP * m_hotkeyPopup
The current canvas type.
void OnUpdateSelectGrid(wxUpdateUIEvent &aEvent)
Update the checked item in the grid wxchoice.
virtual void ToggleProperties()
ACTION_TOOLBAR * m_auxiliaryToolBar
bool GetShowPolarCoords() const
For those frames that support polar coordinates.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
A panel to display various information messages.
Definition: msgpanel.h:101
Similar to EDA_VIEW_SWITCHER, this dialog is a popup that shows feedback when using a hotkey to cycle...
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
Definition: kiid.h:49
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
Definition: kiway_player.h:67
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:279
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:59
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition: title_block.h:41
Manage a CONDITIONAL_MENU and some number of CONTEXT_MENUs as sub-menus.
Definition: tool_menu.h:43
Base window classes and related definitions.
EDA_UNITS
Definition: eda_units.h:46
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:33
The Cairo implementation of the graphics abstraction layer.
Definition: color4d.cpp:247