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;
49
50namespace KIGFX
51{
52 class GAL_DISPLAY_OPTIONS;
53 class RENDER_SETTINGS;
54}
55
56using KIGFX::COLOR4D;
58
59#define LIB_EDIT_FRAME_NAME wxT( "LibeditFrame" )
60#define LIB_VIEW_FRAME_NAME wxT( "ViewlibFrame" )
61#define SCH_EDIT_FRAME_NAME wxT( "SchematicFrame" )
62#define SYMBOL_CHOOSER_FRAME_NAME wxT( "SymbolChooserFrame" )
63#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" )
64#define FOOTPRINT_WIZARD_FRAME_NAME wxT( "FootprintWizard" )
65#define FOOTPRINT_CHOOSER_FRAME_NAME wxT( "FootprintChooserFrame" )
66#define FOOTPRINT_EDIT_FRAME_NAME wxT( "ModEditFrame" )
67#define FOOTPRINT_VIEWER_FRAME_NAME wxT( "ModViewFrame" )
68#define PCB_EDIT_FRAME_NAME wxT( "PcbFrame" )
69
70
78{
79public:
80 EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType, const wxString& aTitle,
81 const wxPoint& aPos, const wxSize& aSize, long aStyle,
82 const wxString& aFrameName, const EDA_IU_SCALE& aIuScale );
83
85
94 bool LockFile( const wxString& aFileName );
95
99 void ReleaseFile();
100
105
110
112 wxArrayString& GetFindHistoryList() { return m_findStringHistoryList; }
113
114 virtual void SetPageSettings( const PAGE_INFO& aPageSettings ) = 0;
115 virtual const PAGE_INFO& GetPageSettings() const = 0;
116
121 virtual const VECTOR2I GetPageSizeIU() const = 0;
122
126 bool GetShowPolarCoords() const { return m_polarCoords; }
127 void SetShowPolarCoords( bool aShow ) { m_polarCoords = aShow; }
128
129 void ToggleUserUnits() override;
130
137 void GetUnitPair( EDA_UNITS& aPrimaryUnit, EDA_UNITS& aSecondaryUnits ) override;
138
145 virtual const VECTOR2I& GetGridOrigin() const = 0;
146 virtual void SetGridOrigin( const VECTOR2I& aPosition ) = 0;
147
154 VECTOR2I GetNearestGridPosition( const VECTOR2I& aPosition ) const;
155
165 VECTOR2I GetNearestHalfGridPosition( const VECTOR2I& aPosition ) const;
166
167 virtual const TITLE_BLOCK& GetTitleBlock() const = 0;
168 virtual void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) = 0;
169
170 // the background color of the draw canvas:
171 // Virtual because some frames can have a specific way to get/set the bg color
172 virtual COLOR4D GetDrawBgColor() const { return m_drawBgColor; }
173 virtual void SetDrawBgColor( const COLOR4D& aColor) { m_drawBgColor= aColor ; }
174
176 virtual COLOR_SETTINGS* GetColorSettings( bool aForceRefresh = false ) const;
177
187 bool LibraryFileBrowser( bool doOpen, wxFileName& aFilename, const wxString& wildcard,
188 const wxString& ext, bool isDirectory = false, bool aIsGlobal = false,
189 const wxString& aGlobalPath = wxEmptyString );
190
191 void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
192
193 virtual wxString GetScreenDesc() const;
194 virtual wxString GetFullScreenDesc() const;
195
201 virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; }
202
203 void EraseMsgBox();
204
205 virtual void ReCreateHToolbar() { };
206 virtual void ReCreateVToolbar() { };
207 virtual void ReCreateOptToolbar() { };
208 virtual void ReCreateAuxiliaryToolbar() { }
209
213 virtual void UpdateToolbarControlSizes() { }
214
215 /*
216 * These 4 functions provide a basic way to show/hide grid and /get/set grid color.
217 *
218 * These parameters are saved in KiCad config for each main frame.
219 */
220 bool IsGridVisible() const;
221 virtual void SetGridVisibility( bool aVisible );
222
223 bool IsGridOverridden() const;
224 virtual void SetGridOverrides( bool aOverride );
225
226 virtual COLOR4D GetGridColor() { return m_gridColor; }
227 virtual void SetGridColor( const COLOR4D& aColor ) { m_gridColor = aColor; }
228
238 void OnSelectGrid( wxCommandEvent& event );
239
244 void UpdateGridSelectBox();
245
249 void OnUpdateSelectGrid( wxUpdateUIEvent& aEvent );
250
254 void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
255
260 void UpdateZoomSelectBox();
261
265 const wxString GetZoomLevelIndicator() const;
266
274 virtual void OnSelectZoom( wxCommandEvent& event );
275
279 virtual void OnSize( wxSizeEvent& event ) override;
280
281 void OnMove( wxMoveEvent& aEvent ) override;
282
286 virtual void HardRedraw();
287
292 virtual void Zoom_Automatique( bool aWarpPointer );
293
302 void FocusOnLocation( const VECTOR2I& aPos );
303
308 void AddStandardSubMenus( TOOL_MENU& aMenu );
309
319 void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, BASE_SCREEN* aScreen,
320 const std::map<wxString, wxString>* aProperties, double aMils2Iu,
321 const wxString& aFilename, const wxString& aSheetLayer = wxEmptyString );
322
323 void DisplayToolMsg( const wxString& msg ) override;
324
325 void DisplayConstraintsMsg( const wxString& msg );
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
396
397 void UpdateProperties();
398
399 virtual void ToggleProperties() {}
400
401 static const wxString PropertiesPaneName() { return wxS( "PropertiesManager" ); }
402
406 virtual EDA_ITEM* GetItem( const KIID& aId ) const { return nullptr; }
407
413 virtual void PrintPage( const RENDER_SETTINGS* aSettings );
414
418 virtual void ActivateGalCanvas();
419
423 virtual void SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
424
430 virtual EDA_DRAW_PANEL_GAL* GetCanvas() const { return m_canvas; }
431 void SetCanvas( EDA_DRAW_PANEL_GAL* aPanel ) { m_canvas = aPanel; }
432
433 wxWindow* GetToolCanvas() const override { return GetCanvas(); }
434
439
440 void RefreshCanvas() override
441 {
442 GetCanvas()->Refresh();
443 }
444
457 virtual const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const;
458
462 void RecreateToolbars();
463
467 void ShowChangedLanguage() override;
468
470
471 virtual void CreateHotkeyPopup();
472
473 DECLARE_EVENT_TABLE()
474
475protected:
476 virtual void SetScreen( BASE_SCREEN* aScreen ) { m_currentScreen = aScreen; }
477
478 void unitsChangeRefresh() override;
479
480 void setupUnits( APP_SETTINGS_BASE* aCfg );
481
482 std::vector<wxWindow*> findDialogs();
483
487 void resolveCanvasType();
488
493
498
502 virtual void handleActivateEvent( wxActivateEvent& aEvent );
503 void onActivate( wxActivateEvent& aEvent );
504
505
506 wxSocketServer* m_socketServer;
507
509 std::unique_ptr<LOCKFILE> m_file_checker;
510
511 COLOR4D m_gridColor; // Grid color
512 COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
513 // Pcbnew, BLACK or WHITE for Eeschema
514 int m_undoRedoCountMax; // Default Undo/Redo command Max depth, to be handed
515 // to screens
516 bool m_polarCoords; // For those frames that support polar coordinates
517
518 bool m_showBorderAndTitleBlock; // Show the drawing sheet (border & title block).
519
522
524 ACTION_TOOLBAR* m_auxiliaryToolBar; // Additional tools under main toolbar
525 ACTION_TOOLBAR* m_drawToolBar; // Drawing tools (typically on right edge of window)
526 ACTION_TOOLBAR* m_optionsToolBar; // Options (typically on left edge of window)
527
528 std::unique_ptr<EDA_SEARCH_DATA> m_findReplaceData;
531
534
538
540
543
546
547private:
550
553};
554
555#endif // DRAW_FRAME_H_
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.
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.
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.
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.
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.
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting()
Returns the canvas type stored in the application settings.
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:66
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:53
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:44
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