KiCad PCB EDA Suite
SCH_EDIT_FRAME Class Reference

Schematic editor (Eeschema) main window. More...

#include <sch_edit_frame.h>

Inheritance diagram for SCH_EDIT_FRAME:
SCH_BASE_FRAME EDA_DRAW_FRAME KIWAY_PLAYER EDA_BASE_FRAME TOOLS_HOLDER KIWAY_HOLDER

Public Types

enum  UNDO_REDO_LIST { UNDO_LIST, REDO_LIST }
 Specifies whether we are interacting with the undo or redo stacks. More...
 
enum  HOLDER_TYPE { DIALOG, FRAME, PANEL }
 

Public Member Functions

 SCH_EDIT_FRAME (KIWAY *aKiway, wxWindow *aParent)
 
 ~SCH_EDIT_FRAME () override
 
SCH_SCREENGetScreen () const override
 Return a pointer to a BASE_SCREEN or one of its derivatives. More...
 
SELECTIONGetCurrentSelection () override
 Get the current selection from the canvas area. More...
 
SCHEMATICSchematic () const
 
bool GetShowAllPins () const override
 Allow edit frame to show/hide hidden pins. More...
 
void SaveProjectSettings () override
 Save changes to the project settings to the project (.pro) file. More...
 
bool LoadProjectSettings ()
 Load the KiCad project file (*.pro) settings specific to Eeschema. More...
 
void ShowSchematicSetupDialog (const wxString &aInitialPage=wxEmptyString)
 
void LoadSettings (APP_SETTINGS_BASE *aCfg) override
 Load common frame parameters from a configuration file. More...
 
void SaveSettings (APP_SETTINGS_BASE *aCfg) override
 Save common frame parameters to a configuration data file. More...
 
void CreateScreens ()
 
void ReCreateHToolbar () override
 
void ReCreateVToolbar () override
 
void ReCreateOptToolbar () override
 
void ReCreateMenuBar () override
 Recreates the menu bar. More...
 
void setupUIConditions () override
 Setup the UI conditions for the various actions and their controls in this frame. More...
 
bool IsContentModified () const override
 Get if the current schematic has been modified but not saved. More...
 
void OnModify () override
 Must be called after a schematic change in order to set the "modify" flag of the current screen and update the date in frame reference. More...
 
void RecordERCExclusions ()
 Scan existing markers and record data from any that are Excluded. More...
 
void ResolveERCExclusions ()
 Update markers to match recorded exclusions. More...
 
wxString GetScreenDesc () const override
 Return a human-readable description of the current screen. More...
 
void ExecuteRemoteCommand (const char *cmdline) override
 Execute a remote command sent by Pcbnew via a socket connection. More...
 
void KiwayMailIn (KIWAY_EXPRESS &aEvent) override
 Receive KIWAY_EXPRESS messages from other players. More...
 
void AddItemToScreenAndUndoList (SCH_SCREEN *aScreen, SCH_ITEM *aItem, bool aUndoAppend)
 Add an item to the schematic and adds the changes to the undo/redo container. More...
 
void ShowFindReplaceDialog (bool aReplace)
 Run the Find or Find & Replace dialog. More...
 
void UpdateHierarchyNavigator (bool aForceUpdate=false)
 Run the Hierarchy Navigator dialog. More...
 
HIERARCHY_NAVIG_DLGFindHierarchyNavigator ()
 
void ShowFindReplaceStatus (const wxString &aMsg, int aStatusTime)
 
void ClearFindReplaceStatus ()
 
void OnFindDialogClose ()
 Notification that the Find dialog has closed. More...
 
bool BreakSegment (SCH_LINE *aSegment, const wxPoint &aPoint, SCH_LINE **aNewSegment=nullptr, SCH_SCREEN *aScreen=nullptr)
 Break a single segment into two at the specified point. More...
 
bool BreakSegments (const wxPoint &aPoint, SCH_SCREEN *aScreen=nullptr)
 Check every wire and bus for a intersection at aPoint and break into two segments at aPoint if an intersection is found. More...
 
bool BreakSegmentsOnJunctions (SCH_SCREEN *aScreen=nullptr)
 Test all junctions and bus entries in the schematic for intersections with wires and buses and breaks any intersections into multiple segments. More...
 
void TestDanglingEnds ()
 Test all of the connectable objects in the schematic for unused connection points. More...
 
void SendMessageToPCBNEW (EDA_ITEM *aObjectToSync, SCH_SYMBOL *aPart)
 Send a message to Pcbnew via a socket connection. More...
 
void SendCrossProbeNetName (const wxString &aNetName)
 Sends a net name to Pcbnew for highlighting. More...
 
void SetCrossProbeConnection (const SCH_CONNECTION *aConnection)
 Send a connection (net or bus) to Pcbnew for highlighting. More...
 
void SendCrossProbeClearHighlight ()
 Tell Pcbnew to clear the existing highlighted net, if one exists. More...
 
const SCH_CONNECTIONGetHighlightedConnection () const
 
void SetHighlightedConnection (const SCH_CONNECTION *aConnection)
 
bool ReadyToNetlist (const wxString &aAnnotateMessage)
 Check if we are ready to write a netlist file for the current schematic. More...
 
bool WriteNetListFile (int aFormat, const wxString &aFullFileName, unsigned aNetlistOptions, REPORTER *aReporter=nullptr)
 Create a netlist file. More...
 
void DeleteAnnotation (ANNOTATE_SCOPE_T aAnnotateScope, bool *appendUndo)
 Clear the current symbol annotation. More...
 
void AnnotateSymbols (ANNOTATE_SCOPE_T aAnnotateScope, ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, int aStartNumber, bool aResetAnnotation, bool aRepairTimestamps, REPORTER &aReporter)
 Annotate the symbols in the schematic that are not currently annotated. More...
 
int CheckAnnotate (ANNOTATION_ERROR_HANDLER aErrorHandler, ANNOTATE_SCOPE_T aAnnotateScope=ANNOTATE_ALL)
 Check for annotation errors. More...
 
int ModalAnnotate (const wxString &aMessage)
 Run a modal version of the annotate dialog for a specific purpose. More...
 
SCH_SHEET_PATHGetCurrentSheet () const
 
void SetCurrentSheet (const SCH_SHEET_PATH &aSheet)
 
void HardRedraw () override
 Rebuild the GAL and redraw the screen. More...
 
void DisplayCurrentSheet ()
 Draw the current sheet on the display. More...
 
void DrawCurrentSheetToClipboard ()
 Use the wxWidgets print code to draw an image of the current sheet onto the clipboard. More...
 
void OnPageSettingsChange () override
 Called when modifying the page settings. More...
 
wxString GetUniqueFilenameForCurrentSheet ()
 
void SetSheetNumberAndCount ()
 Set the m_ScreenNumber and m_NumberOfScreens members for screens. More...
 
wxPageSetupDialogData & GetPageSetupData ()
 
void NewProject ()
 
void LoadProject ()
 
bool SaveProject (bool aSaveAs=false)
 Saves the currently-open schematic (including its hierarchy) and associated project. More...
 
bool OpenProjectFiles (const std::vector< wxString > &aFileSet, int aCtl=0) override
 Open a project or set of files given by aFileList. More...
 
wxString GetCurrentFileName () const override
 Get the full filename + path of the currently opened file in the frame. More...
 
bool AppendSchematic ()
 Import a KiCad schematic into the current sheet. More...
 
bool AskToSaveChanges ()
 Check if any of the screens has unsaved changes and asks the user whether to save or drop them. More...
 
SCH_JUNCTIONAddJunction (SCH_SCREEN *aScreen, const wxPoint &aPos, bool aAppendToUndo, bool aFinal=true)
 
bool SchematicCleanUp (SCH_SCREEN *aScreen=nullptr)
 Perform routine schematic cleaning including breaking wire and buses and deleting identical objects superimposed on top of each other. More...
 
bool TrimWire (const wxPoint &aStart, const wxPoint &aEnd)
 If any single wire passes through both points, remove the portion between the two points, potentially splitting the wire into two. More...
 
std::vector< wxPoint > GetSchematicConnections ()
 Collect a unique list of all possible connection points in the schematic. More...
 
void OnOpenPcbnew (wxCommandEvent &event)
 
void OnOpenCvpcb (wxCommandEvent &event)
 
void OnUpdatePCB (wxCommandEvent &event)
 
void OnAnnotate (wxCommandEvent &event)
 
bool CheckSheetForRecursion (SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy)
 Verify that aSheet will not cause a recursion error in aHierarchy. More...
 
bool AllowCaseSensitiveFileNameClashes (const wxString &aSchematicFileName)
 Check aSchematicFileName for a potential file name case sensitivity clashes. More...
 
bool EditSheetProperties (SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, bool *aClearAnnotationNewItems)
 Edit an existing sheet or add a new sheet to the schematic. More...
 
void InitSheet (SCH_SHEET *aSheet, const wxString &aNewFilename)
 
bool LoadSheetFromFile (SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, const wxString &aFileName)
 Load a the KiCad schematic file aFileName into the sheet aSheet. More...
 
void DeleteJunction (SCH_ITEM *aItem, bool aAppend=false)
 Removes a given junction and heals any wire segments under the junction. More...
 
void ConvertPart (SCH_SYMBOL *aSymbol)
 
void SelectUnit (SCH_SYMBOL *aSymbol, int aUnit)
 
void StartNewUndo ()
 Create a new, blank stack for future Undo commands to be pushed to. More...
 
void SaveCopyInUndoList (SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
 Create a copy of the current schematic item, and put it in the undo list. More...
 
void SaveCopyInUndoList (const PICKED_ITEMS_LIST &aItemsList, UNDO_REDO aTypeCommand, bool aAppend)
 Create a new entry in undo list of commands. More...
 
void PutDataInPreviousState (PICKED_ITEMS_LIST *aList)
 Restore an undo or redo command to put data pointed by aList in the previous state. More...
 
void ClearUndoORRedoList (UNDO_REDO_LIST whichList, int aItemCount=-1) override
 Free the undo or redo list from aList element. More...
 
void SaveCopyForRepeatItem (const SCH_ITEM *aItem)
 Clone aItem and owns that clone in this container. More...
 
SCH_ITEMGetRepeatItem () const
 Return the item which is to be repeated with the insert key. More...
 
EDA_ITEMGetItem (const KIID &aId) const override
 Fetch an item by KIID. More...
 
void RollbackSchematicFromUndo ()
 Perform an undo of the last edit WITHOUT logging a corresponding redo. More...
 
bool CreateArchiveLibraryCacheFile (bool aUseCurrentSheetFilename=false)
 Create a symbol library file with the name of the root document plus the '-cache' suffix,. More...
 
bool CreateArchiveLibrary (const wxString &aFileName)
 Create a library aFileName that contains all symbols used in the current schematic. More...
 
virtual void PrintPage (const RENDER_SETTINGS *aSettings) override
 Plot or print the current sheet to the clipboard. More...
 
void SetNetListerCommand (const wxString &aCommand)
 
void DefaultExecFlags ()
 Reset the execution flags to defaults for external netlist and bom generators. More...
 
void SetExecFlags (const int aFlags)
 Set (adds) specified flags for next execution of external generator of the netlist or bom. More...
 
void ClearExecFlags (const int aFlags)
 Clear (removes) specified flags that not needed for next execution of external generator of the netlist or bom. More...
 
wxString GetNetListerCommand () const
 
void RecalculateConnections (SCH_CLEANUP_FLAGS aCleanupFlags)
 Generate the connection data for the entire schematic hierarchy. More...
 
void InstallPreferences (PAGED_DIALOG *aParent, PANEL_HOTKEYS_EDITOR *aHotkeysPanel) override
 Allow Eeschema to install its preferences panels into the preferences dialog. More...
 
void CommonSettingsChanged (bool aEnvVarsChanged, bool aTextVarsChanged) override
 Called after the preferences dialog is run. More...
 
void UpdateNetHighlightStatus ()
 
void ShowChangedLanguage () override
 
void SetScreen (BASE_SCREEN *aScreen) override
 
const BOX2I GetDocumentExtents (bool aIncludeAllVisible=true) const override
 Returns bbox of document with option to not include some items. More...
 
void FixupJunctions ()
 
int GetSchematicJunctionSize ()
 
void FocusOnItem (SCH_ITEM *aItem)
 
void SaveSymbolToSchematic (const LIB_SYMBOL &aSymbol)
 Update the LIB_SYMBOL of the currently selected symbol. More...
 
void RecomputeIntersheetRefs ()
 Update the schematic's page reference map for all global labels, and refresh the labels so that they are redrawn with up-to-date references. More...
 
void ShowAllIntersheetRefs (bool aShow)
 
void createCanvas ()
 
SCH_DRAW_PANELGetCanvas () const override
 Return a pointer to GAL-based canvas of given EDA draw frame. More...
 
EESCHEMA_SETTINGSeeconfig () const
 
SYMBOL_EDITOR_SETTINGSlibeditconfig () const
 
KIGFX::SCH_RENDER_SETTINGSGetRenderSettings ()
 
COLOR4D GetDrawBgColor () const override
 
void SetPageSettings (const PAGE_INFO &aPageSettings) override
 
const PAGE_INFOGetPageSettings () const override
 
const wxSize GetPageSizeIU () const override
 Works off of GetPageSettings() to return the size of the paper page in the internal units of this particular view. More...
 
const wxPoint & GetGridOrigin () const override
 Return the absolute coordinates of the origin of the snap grid. More...
 
void SetGridOrigin (const wxPoint &aPoint) override
 
const TITLE_BLOCKGetTitleBlock () const override
 
void SetTitleBlock (const TITLE_BLOCK &aTitleBlock) override
 
void UpdateStatusBar () override
 Update the status bar information. More...
 
PICKED_SYMBOL PickSymbolFromLibTree (const SCHLIB_FILTER *aFilter, std::vector< PICKED_SYMBOL > &aHistoryList, bool aUseLibBrowser, int aUnit, int aConvert, bool aShowFootprints, const LIB_ID *aHighlight=nullptr, bool aAllowFields=true)
 Call the library viewer to select symbol to import into schematic. More...
 
LIB_SYMBOLGetLibSymbol (const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
 Load symbol from symbol library table. More...
 
PICKED_SYMBOL PickSymbolFromLibBrowser (wxTopLevelWindow *aParent, const SCHLIB_FILTER *aFilter, const LIB_ID &aPreselectedLibId, int aUnit, int aConvert)
 Call the library viewer to select symbol to import into schematic. More...
 
virtual void RedrawScreen (const wxPoint &aCenterPoint, bool aWarpPointer)
 
virtual void CenterScreen (const wxPoint &aCenterPoint, bool aWarpPointer)
 
void AddToScreen (EDA_ITEM *aItem, SCH_SCREEN *aScreen)
 Add an item to the screen (and view) aScreen is the screen the item is located on, if not the current screen. More...
 
void RemoveFromScreen (EDA_ITEM *aItem, SCH_SCREEN *aScreen)
 Remove an item from the screen (and view) aScreen is the screen the item is located on, if not the current screen. More...
 
void UpdateItem (EDA_ITEM *aItem, bool isAddOrDelete=false)
 Mark an item for refresh. More...
 
void RefreshSelection ()
 Mark selected items for refresh. More...
 
void SyncView ()
 Mark all items for refresh. More...
 
COLOR4D GetLayerColor (SCH_LAYER_ID aLayer)
 Helper to retrieve a layer color from the global color settings. More...
 
COLOR_SETTINGSGetColorSettings () const override
 Returns a pointer to the active color theme settings. More...
 
bool LockFile (const wxString &aFileName)
 Mark a schematic file as being in use. More...
 
void ReleaseFile ()
 Release the current file marked in use. More...
 
void ScriptingConsoleEnableDisable ()
 Toggles the scripting console visibility. More...
 
bool IsScriptingConsoleVisible ()
 Gets the current visibility of the scripting console window. More...
 
wxFindReplaceData & GetFindReplaceData ()
 
wxArrayString & GetFindHistoryList ()
 
bool GetShowPolarCoords () const
 For those frames that support polar coordinates. More...
 
void SetShowPolarCoords (bool aShow)
 
void ToggleUserUnits () override
 
void GetUnitPair (EDA_UNITS &aPrimaryUnit, EDA_UNITS &aSecondaryUnits)
 Get the pair or units in current use. More...
 
wxPoint GetNearestGridPosition (const wxPoint &aPosition) const
 Return the nearest aGridSize location to aPosition. More...
 
wxPoint GetNearestHalfGridPosition (const wxPoint &aPosition) const
 Return the nearest aGridSize / 2 location to aPosition. More...
 
virtual ORIGIN_TRANSFORMSGetOriginTransforms ()
 Return a reference to the default ORIGIN_TRANSFORMS object. More...
 
virtual void SetDrawBgColor (const COLOR4D &aColor)
 
bool ShowPageLimits () const
 
void SetShowPageLimits (bool aShow)
 
bool LibraryFileBrowser (bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory=false, bool aIsGlobal=false, const wxString &aGlobalPath=wxEmptyString)
 
void EraseMsgBox ()
 
virtual void ReCreateAuxiliaryToolbar ()
 
virtual void UpdateToolbarControlSizes ()
 Update the sizes of any controls in the toolbars of the frame. More...
 
bool IsGridVisible () const
 
virtual void SetGridVisibility (bool aVisible)
 
virtual COLOR4D GetGridColor ()
 
virtual void SetGridColor (const COLOR4D &aColor)
 
void OnSelectGrid (wxCommandEvent &event)
 Command event handler for selecting grid sizes. More...
 
void OnGridSettings (wxCommandEvent &event)
 
void UpdateGridSelectBox ()
 Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes, etc.). More...
 
void OnUpdateSelectGrid (wxUpdateUIEvent &aEvent)
 Update the checked item in the grid combobox. More...
 
void UpdateZoomSelectBox ()
 Rebuild the grid combobox to respond to any changes in the GUI (units, user grid changes, etc.) More...
 
void OnUpdateSelectZoom (wxUpdateUIEvent &aEvent)
 Update the checked item in the zoom combobox. More...
 
const wxString GetZoomLevelIndicator () const
 Return a human readable value for display in dialogs. More...
 
virtual void OnSelectZoom (wxCommandEvent &event)
 Set the zoom factor when selected by the zoom list box in the main tool bar. More...
 
virtual void OnSize (wxSizeEvent &event) override
 Recalculate the size of toolbars and display panel when the frame size changes. More...
 
void OnMove (wxMoveEvent &aEvent) override
 
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. More...
 
void FocusOnLocation (const wxPoint &aPos)
 Useful to focus on a particular location, in find functions. More...
 
void AddStandardSubMenus (TOOL_MENU &aMenu)
 Construct a "basic" menu for a tool, containing only items that apply to all tools (e.g. More...
 
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). More...
 
void DisplayToolMsg (const wxString &msg) override
 
void DisplayUnitsMsg ()
 Display current unit pane in the status bar. More...
 
virtual void DisplayGridMsg ()
 Display current grid size in the status bar. More...
 
void AppendMsgPanel (const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
 Append a message to the message panel. More...
 
virtual void ClearMsgPanel ()
 Clear all messages from the message panel. More...
 
void SetMsgPanel (const std::vector< MSG_PANEL_ITEM > &aList)
 Clear the message panel and populates it with the contents of aList. More...
 
void SetMsgPanel (EDA_ITEM *aItem)
 
void SetMsgPanel (const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
 Helper function that erases the msg panel and then appends a single message. More...
 
virtual void UpdateMsgPanel ()
 Redraw the message panel. More...
 
virtual void ActivateGalCanvas ()
 Use to start up the GAL drawing canvas. More...
 
virtual void SwitchCanvas (EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
 Changes the current rendering backend. More...
 
void SetCanvas (EDA_DRAW_PANEL_GAL *aPanel)
 
wxWindow * GetToolCanvas () const override
 Canvas access. More...
 
KIGFX::GAL_DISPLAY_OPTIONSGetGalDisplayOptions ()
 Return a reference to the gal rendering options used by GAL for rendering. More...
 
void RefreshCanvas () override
 
void RecreateToolbars ()
 Rebuild all toolbars, and update the checked state of check tools. More...
 
virtual void ParseArgs (wxCmdLineParser &aParser)
 Handle command-line arguments in a frame-specific way. More...
 
virtual bool ShowModal (wxString *aResult=nullptr, wxWindow *aResultantFocusWindow=nullptr)
 Show this wxFrame as if it were a modal dialog, with all other instantiated wxFrames disabled until this KIWAY_PLAYER derivative calls DismissModal(). More...
 
bool Destroy () override
 Our version of Destroy() which is virtual from wxWidgets. More...
 
bool IsModal () const override
 Return true if the frame is shown in our modal mode and false if the frame is shown as an usual frame. More...
 
void SetModal (bool aIsModal)
 
bool IsDismissed ()
 
void DismissModal (bool aRetVal, const wxString &aResult=wxEmptyString)
 
void CreateServer (int service, bool local=true)
 
void OnSockRequest (wxSocketEvent &evt)
 
void OnSockRequestServer (wxSocketEvent &evt)
 
EDA_UNITS GetUserUnits () const
 Return the user units currently in use. More...
 
void SetUserUnits (EDA_UNITS aUnits)
 
void ChangeUserUnits (EDA_UNITS aUnits)
 
SETTINGS_MANAGERGetSettingsManager () const
 
virtual SEVERITY GetSeverity (int aErrorCode) const
 
bool ProcessEvent (wxEvent &aEvent) override
 Override the default process event handler to implement the auto save feature. More...
 
virtual void OnCharHook (wxKeyEvent &aKeyEvent)
 Capture the key event before it is sent to the GUI. More...
 
void OnMenuEvent (wxMenuEvent &event)
 The TOOL_DISPATCHER needs these to work around some issues in wxWidgets where the menu events aren't captured by the menus themselves. More...
 
virtual void RegisterUIUpdateHandler (int aID, const ACTION_CONDITIONS &aConditions) override
 Register a UI update handler for the control with ID aID. More...
 
virtual void RegisterUIUpdateHandler (const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
 Register an action's update conditions with the UI layer to allow the UI to appropriately display the state of its controls. More...
 
virtual void UnregisterUIUpdateHandler (int aID) override
 Unregister a UI handler for a given ID that was registered using RegisterUIUpdateHandler. More...
 
virtual void UnregisterUIUpdateHandler (const TOOL_ACTION &aAction)
 Unregister a UI handler for an action that was registered using RegisterUIUpdateHandler. More...
 
void OnMaximize (wxMaximizeEvent &aEvent)
 
void SetAutoSaveInterval (int aInterval)
 
int GetAutoSaveInterval () const
 
bool IsType (FRAME_T aType) const
 
FRAME_T GetFrameType () const
 
virtual const SEARCH_STACKsys_search ()
 Return a SEARCH_STACK pertaining to entire program. More...
 
virtual wxString help_name ()
 
void OnKicadAbout (wxCommandEvent &event)
 
void OnPreferences (wxCommandEvent &event)
 Displays the preferences and settings of all opened editors paged dialog. More...
 
void PrintMsg (const wxString &text)
 
void CreateInfoBar ()
 
void FinishAUIInitialization ()
 
WX_INFOBARGetInfoBar ()
 
void ShowInfoBarError (const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
 Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left of the infobar, and an optional closebox to the right. More...
 
void ShowInfoBarError (const wxString &aErrorMsg, bool aShowCloseButton, std::function< void(void)> aCallback)
 Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left of the infobar, and an optional closebox to the right. More...
 
void ShowInfoBarWarning (const wxString &aWarningMsg, bool aShowCloseButton=false)
 Show the WX_INFOBAR displayed on the top of the canvas with a message and a warning icon on the left of the infobar. More...
 
void ShowInfoBarMsg (const wxString &aMsg, bool aShowCloseButton=false)
 Show the WX_INFOBAR displayed on the top of the canvas with a message and an info icon on the left of the infobar. More...
 
virtual APP_SETTINGS_BASEconfig () const
 Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME. More...
 
void LoadWindowState (const wxString &aFileName)
 
virtual void LoadWindowState (const WINDOW_STATE &aState)
 Load frame state info from a configuration file. More...
 
void LoadWindowSettings (const WINDOW_SETTINGS *aCfg)
 Load window settings from the given settings object. More...
 
void SaveWindowSettings (WINDOW_SETTINGS *aCfg)
 Save window settings to the given settings object. More...
 
virtual WINDOW_SETTINGSGetWindowSettings (APP_SETTINGS_BASE *aCfg)
 Return a pointer to the window settings for this frame. More...
 
wxString ConfigBaseName () override
 Get the configuration base name. More...
 
void ImportHotkeyConfigFromFile (std::map< std::string, TOOL_ACTION * > aActionMap, const wxString &aDefaultShortname)
 Prompt the user for a hotkey file to read, and read it. More...
 
wxString GetFileFromHistory (int cmdId, const wxString &type, FILE_HISTORY *aFileHistory=nullptr)
 Fetches the file name from the file history list. More...
 
void ClearFileHistory (FILE_HISTORY *aFileHistory=nullptr)
 Removes all files from the file history. More...
 
void UpdateFileHistory (const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
 Update the list of recently opened files. More...
 
FILE_HISTORYGetFileHistory ()
 Get the frame's main file history. More...
 
void SetMruPath (const wxString &aPath)
 
wxString GetMruPath () const
 
void AddStandardHelpMenu (wxMenuBar *aMenuBar)
 Adds the standard KiCad help menu to the menubar. More...
 
bool IsWritable (const wxFileName &aFileName)
 Checks if aFileName can be written. More...
 
void CheckForAutoSaveFile (const wxFileName &aFileName)
 Check if an auto save file exists for aFileName and takes the appropriate action depending on the user input. More...
 
virtual void ThemeChanged ()
 Process light/dark theme change. More...
 
virtual void ProjectChanged ()
 Notification event that the project has changed. More...
 
const wxString & GetAboutTitle () const
 
wxSize GetWindowSize ()
 Get the undecorated window size that can be used for restoring the window size. More...
 
virtual void ClearUndoRedoList ()
 Clear the undo and redo list using ClearUndoORRedoList() More...
 
virtual void PushCommandToUndoList (PICKED_ITEMS_LIST *aItem)
 Add a command to undo in the undo list. More...
 
virtual void PushCommandToRedoList (PICKED_ITEMS_LIST *aItem)
 Add a command to redo in the redo list. More...
 
virtual PICKED_ITEMS_LISTPopCommandFromUndoList ()
 Return the last command to undo and remove it from list, nothing is deleted. More...
 
virtual PICKED_ITEMS_LISTPopCommandFromRedoList ()
 Return the last command to undo and remove it from list, nothing is deleted. More...
 
virtual int GetUndoCommandCount () const
 
virtual int GetRedoCommandCount () const
 
int GetMaxUndoItems () const
 
bool NonUserClose (bool aForce)
 
virtual void HandleSystemColorChange ()
 Update the UI in response to a change in the system colors. More...
 
TOOL_MANAGERGetToolManager () const
 Return the MVC controller. More...
 
virtual void PushTool (const std::string &actionName)
 NB: the definition of "tool" is different at the user level. More...
 
virtual void PopTool (const std::string &actionName)
 
bool ToolStackIsEmpty ()
 
std::string CurrentToolName () const
 
bool IsCurrentTool (const TOOL_ACTION &aAction) const
 
bool GetDoImmediateActions () const
 Indicate that hotkeys should perform an immediate action even if another tool is currently active. More...
 
MOUSE_DRAG_ACTION GetDragAction () const
 Indicates whether a drag should draw a selection rectangle or drag selected (or unselected) objects. More...
 
bool GetMoveWarpsCursor () const
 Indicate that a move operation should warp the mouse pointer to the origin of the move object. More...
 
HOLDER_TYPE GetType () const
 
KIWAYKiway () const
 Return a reference to the KIWAY that this object has an opportunity to participate in. More...
 
PROJECTPrj () const
 Return a reference to the PROJECT associated with this KIWAY. More...
 
void SetKiway (wxWindow *aDest, KIWAY *aKiway)
 It is only used for debugging, since "this" is not a wxWindow*. More...
 

Static Public Member Functions

static void HandleUpdateUIEvent (wxUpdateUIEvent &aEvent, EDA_BASE_FRAME *aFrame, ACTION_CONDITIONS aCond)
 Handle events generated when the UI is trying to figure out the current state of the UI controls related to TOOL_ACTIONS (e.g. More...
 

Protected Member Functions

bool doAutoSave () override
 Save the schematic files that have been modified and not yet saved. More...
 
bool isAutoSaveRequired () const override
 Return true if the schematic has been modified. More...
 
void sendNetlistToCvpcb ()
 Send the KiCad netlist over to CVPCB. More...
 
void onSize (wxSizeEvent &aEvent)
 
bool saveSymbolLibTables (bool aGlobal, bool aProject)
 Save Symbol Library Tables to disk. More...
 
void unitsChangeRefresh () override
 Called when when the units setting has changed to allow for any derived classes to handle refreshing and controls that have units based measurements in them. More...
 
void setupUnits (APP_SETTINGS_BASE *aCfg)
 
void resolveCanvasType ()
 Determines the Canvas type to load (with prompt if required) and initializes m_canvasType. More...
 
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting ()
 Returns the canvas type stored in the application settings. More...
 
bool saveCanvasTypeSetting (EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
 Stores the canvas type in the application settings. More...
 
virtual void handleActivateEvent (wxActivateEvent &aEvent)
 Handle a window activation event. More...
 
void onActivate (wxActivateEvent &aEvent)
 
void kiway_express (KIWAY_EXPRESS &aEvent)
 event handler, routes to derivative specific virtual KiwayMailIn() More...
 
void language_change (wxCommandEvent &event)
 An event handler called on a language menu selection. More...
 
void onAutoSaveTimer (wxTimerEvent &aEvent)
 Handle the auto save timer event. More...
 
void onSystemColorChange (wxSysColourChangedEvent &aEvent)
 
void initExitKey ()
 Sets the common key-pair for exiting the application (Ctrl-Q) and ties it to the wxID_EXIT event id. More...
 
void ensureWindowIsOnScreen ()
 

Static Protected Member Functions

static wxString GetAutoSaveFilePrefix ()
 

Protected Attributes

SCHEMATIC_SETTINGS m_base_frame_defaults
 These are only used by symbol_editor. More...
 
wxSocketServer * m_socketServer
 
std::vector< wxSocketBase * > m_sockets
 interprocess communication More...
 
std::unique_ptr< wxSingleInstanceChecker > m_file_checker
 
bool m_showPageLimits
 
COLOR4D m_gridColor
 
COLOR4D m_drawBgColor
 
int m_undoRedoCountMax
 
bool m_polarCoords
 
bool m_showBorderAndTitleBlock
 
long m_firstRunDialogSetting
 
wxChoice * m_gridSelectBox
 
wxChoice * m_zoomSelectBox
 
ACTION_TOOLBARm_mainToolBar
 
ACTION_TOOLBARm_auxiliaryToolBar
 
ACTION_TOOLBARm_drawToolBar
 
ACTION_TOOLBARm_optionsToolBar
 
wxFindReplaceData * m_findReplaceData
 
wxArrayString m_findStringHistoryList
 
wxArrayString m_replaceStringHistoryList
 
EDA_MSG_PANELm_messagePanel
 
int m_msgFrameHeight
 
COLOR_SETTINGSm_colorSettings
 The current canvas type. More...
 
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
 
bool m_modal
 
WX_EVENT_LOOPm_modal_loop
 < Points to nested event_loop. NULL means not modal and dismissed. More...
 
wxWindow * m_modal_resultant_parent
 
wxString m_modal_string
 
bool m_modal_ret_val
 
FRAME_T m_ident
 
wxPoint m_framePos
 
wxSize m_frameSize
 
bool m_maximizeByDefault
 
int m_displayIndex
 
wxPoint m_normalFramePos
 
wxSize m_normalFrameSize
 
wxString m_aboutTitle
 
wxAuiManager m_auimgr
 
wxString m_perspective
 
WX_INFOBARm_infoBar
 
wxString m_configName
 
SETTINGS_MANAGERm_settingsManager
 
FILE_HISTORYm_fileHistory
 
bool m_hasAutoSave
 
bool m_autoSaveState
 
int m_autoSaveInterval
 
wxTimer * m_autoSaveTimer
 
UNDO_REDO_CONTAINER m_undoList
 
UNDO_REDO_CONTAINER m_redoList
 
wxString m_mruPath
 
EDA_UNITS m_userUnits
 Map containing the UI update handlers registered with wx for each action. More...
 
std::map< int, UIUpdateHandlerm_uiUpdateMap
 Set by the close window event handler after frames are asked if they can close. More...
 
bool m_isClosing
 Set by NonUserClose() to indicate that the user did not request the current close. More...
 
bool m_isNonUserClose
 
TOOL_MANAGERm_toolManager
 
ACTIONSm_actions
 
TOOL_DISPATCHERm_toolDispatcher
 
SELECTION m_dummySelection
 
std::vector< std::string > m_toolStack
 
bool m_immediateActions
 
MOUSE_DRAG_ACTION m_dragAction
 
bool m_moveWarpsCursor
 

Static Protected Attributes

static constexpr int KICAD_AUI_TB_STYLE = wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_PLAIN_BACKGROUND
 < Default style flags used for wxAUI toolbars. More...
 

Private Member Functions

void setupTools ()
 
void OnExit (wxCommandEvent &event)
 
void OnLoadFile (wxCommandEvent &event)
 
void OnAppendProject (wxCommandEvent &event)
 
void OnImportProject (wxCommandEvent &event)
 
void OnClearFileHistory (wxCommandEvent &aEvent)
 
bool canCloseWindow (wxCloseEvent &aCloseEvent) override
 
void doCloseWindow () override
 
void UpdateTitle ()
 Set the main window title bar text. More...
 
void initScreenZoom ()
 Initialize the zoom value of the current screen and mark the screen as zoom-initialized. More...
 
bool checkForNoFullyDefinedLibIds (SCH_SHEET *aSheet)
 Verify that the symbol library links aSheet and all of its child sheets have been remapped to the symbol library table. More...
 
bool importFile (const wxString &aFileName, int aFileType)
 Load the given filename but sets the path to the current project path. More...
 
bool saveSchematicFile (SCH_SHEET *aSheet, const wxString &aSavePath)
 Save aSheet to a schematic file. More...
 
void mapExistingAnnotation (std::map< wxString, wxString > &aMap)
 Fill a map of uuid -> reference from the currently loaded schematic. More...
 

Private Attributes

SCHEMATICm_schematic
 The currently loaded schematic. More...
 
const SCH_CONNECTIONm_highlightedConn
 The highlighted net or bus, or nullptr. More...
 
wxPageSetupDialogData m_pageSetupData
 
SCH_ITEMm_item_to_repeat
 Last item to insert by the repeat command. More...
 
wxString m_netListerCommand
 Command line to call a custom net list generator. More...
 
int m_exec_flags
 Flags of the wxExecute() function to call a custom net list generator. More...
 
DIALOG_SCH_FINDm_findReplaceDialog
 

Friends

class SCH_EDITOR_CONTROL
 

Detailed Description

Schematic editor (Eeschema) main window.

Definition at line 130 of file sch_edit_frame.h.

Member Enumeration Documentation

◆ HOLDER_TYPE

enum KIWAY_HOLDER::HOLDER_TYPE
inherited
Enumerator
DIALOG 
FRAME 
PANEL 

Definition at line 39 of file kiway_holder.h.

◆ UNDO_REDO_LIST

Specifies whether we are interacting with the undo or redo stacks.

Enumerator
UNDO_LIST 
REDO_LIST 

Definition at line 109 of file eda_base_frame.h.

Constructor & Destructor Documentation

◆ SCH_EDIT_FRAME()

SCH_EDIT_FRAME::SCH_EDIT_FRAME ( KIWAY aKiway,
wxWindow *  aParent 
)

Definition at line 211 of file sch_edit_frame.cpp.

211  :
212  SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH, wxT( "Eeschema" ), wxDefaultPosition,
214  m_highlightedConn( nullptr ),
215  m_item_to_repeat( nullptr )
216 {
217  m_maximizeByDefault = true;
218  m_schematic = new SCHEMATIC( nullptr );
219 
220  m_showBorderAndTitleBlock = true; // true to show sheet references
221  m_hasAutoSave = true;
222  m_aboutTitle = _( "KiCad Schematic Editor" );
223 
224  m_findReplaceDialog = nullptr;
225 
226  // Give an icon
227  wxIcon icon;
228  wxIconBundle icon_bundle;
229 
230  icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_eeschema ) );
231  icon_bundle.AddIcon( icon );
232  icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_eeschema_32 ) );
233  icon_bundle.AddIcon( icon );
234  icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_eeschema_16 ) );
235  icon_bundle.AddIcon( icon );
236 
237  SetIcons( icon_bundle );
238 
239  LoadSettings( eeconfig() );
240 
241  // NB: also links the schematic to the loaded project
242  CreateScreens();
243 
244  setupTools();
246  ReCreateMenuBar();
250 
251  // Initialize common print setup dialog settings.
252  m_pageSetupData.GetPrintData().SetPrintMode( wxPRINT_MODE_PRINTER );
253  m_pageSetupData.GetPrintData().SetQuality( wxPRINT_QUALITY_MEDIUM );
254  m_pageSetupData.GetPrintData().SetBin( wxPRINTBIN_AUTO );
255  m_pageSetupData.GetPrintData().SetNoCopies( 1 );
256 
257  m_auimgr.SetManagedWindow( this );
258 
259  CreateInfoBar();
260  m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" )
261  .Top().Layer( 6 ) );
262  m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
263  .Left().Layer( 3 ) );
264  m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" )
265  .Right().Layer( 2 ) );
266  m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" )
267  .Center() );
268  m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
269  .Bottom().Layer( 6 ) );
270 
272 
275 
277 
278  initScreenZoom();
279 
280  // This is used temporarily to fix a client size issue on GTK that causes zoom to fit
281  // to calculate the wrong zoom size. See SCH_EDIT_FRAME::onSize().
282  Bind( wxEVT_SIZE, &SCH_EDIT_FRAME::onSize, this );
283 
284  if( GetCanvas() )
285  {
286  GetCanvas()->GetGAL()->SetAxesEnabled( false );
287 
288  if( auto p = dynamic_cast<KIGFX::SCH_PAINTER*>( GetCanvas()->GetView()->GetPainter() ) )
289  p->SetSchematic( m_schematic );
290  }
291 
292  setupUnits( eeconfig() );
293 
294  // Net list generator
296 
297  UpdateTitle();
298 
299  // Default shutdown reason until a file is loaded
300  KIPLATFORM::APP::SetShutdownBlockReason( this, _( "New schematic file is unsaved" ) );
301 
302  // Ensure the window is on top
303  Raise();
304 }
void onSize(wxSizeEvent &aEvent)
SCHEMATIC * m_schematic
The currently loaded schematic.
void DefaultExecFlags()
Reset the execution flags to defaults for external netlist and bom generators.
SCH_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aWindowType, const wxString &aTitle, const wxPoint &aPosition, const wxSize &aSize, long aStyle, const wxString &aFrameName)
Holds all the data relating to one schematic.
Definition: schematic.h:59
ACTION_TOOLBAR * m_optionsToolBar
void ReCreateMenuBar() override
Recreates the menu bar.
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
void UpdateTitle()
Set the main window title bar text.
void resolveCanvasType()
Determines the Canvas type to load (with prompt if required) and initializes m_canvasType.
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
wxAuiManager m_auimgr
ACTION_TOOLBAR * m_mainToolBar
EESCHEMA_SETTINGS * eeconfig() const
void SetShutdownBlockReason(wxWindow *aWindow, const wxString &aReason)
Sets the block reason why the window/application is preventing OS shutdown.
Definition: gtk/app.cpp:83
void ReCreateHToolbar() override
#define SCH_EDIT_FRAME_NAME
wxPageSetupDialogData m_pageSetupData
void FinishAUIInitialization()
EDA_MSG_PANEL * m_messagePanel
bool m_showBorderAndTitleBlock
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void initScreenZoom()
Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
SCH_ITEM * m_item_to_repeat
Last item to insert by the repeat command.
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
#define _(s)
DIALOG_SCH_FIND * m_findReplaceDialog
#define KICAD_DEFAULT_DRAWFRAME_STYLE
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition: bitmap.cpp:105
void SetAxesEnabled(bool aAxesEnabled)
Enable drawing the axes.
Specialization of the wxAuiPaneInfo class for KiCad panels.
void ReCreateOptToolbar() override
bool LoadProjectSettings()
Load the KiCad project file (*.pro) settings specific to Eeschema.
const SCH_CONNECTION * m_highlightedConn
The highlighted net or bus, or nullptr.
virtual void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Changes the current rendering backend.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void setupUnits(APP_SETTINGS_BASE *aCfg)
wxString m_aboutTitle
void ReCreateVToolbar() override
ACTION_TOOLBAR * m_drawToolBar

References _, PCAD2KICAD::Center, KIGFX::eeconfig(), icon_eeschema, icon_eeschema_16, icon_eeschema_32, KiBitmap(), PCAD2KICAD::Left, onSize(), PCAD2KICAD::Right, and KIPLATFORM::APP::SetShutdownBlockReason().

◆ ~SCH_EDIT_FRAME()

SCH_EDIT_FRAME::~SCH_EDIT_FRAME ( )
override

Definition at line 307 of file sch_edit_frame.cpp.

308 {
309  // Ensure m_canvasType is up to date, to save it in config
311 
312  // Shutdown all running tools
313  if( m_toolManager )
314  {
316  delete m_toolManager;
317  m_toolManager = nullptr;
318  }
319 
320  delete m_item_to_repeat; // we own the cloned object, see this->SaveCopyForRepeatItem()
321 
322  SetScreen( nullptr );
323 
324  delete m_schematic;
325  m_schematic = nullptr;
326 
327  // Close the project if we are standalone, so it gets cleaned up properly
328  if( Kiface().IsSingle() )
329  GetSettingsManager()->UnloadProject( &Prj(), false );
330 }
void ShutdownAllTools()
Shutdown all tools with a currently registered event loop in this tool manager by waking them up with...
SCHEMATIC * m_schematic
The currently loaded schematic.
SETTINGS_MANAGER * GetSettingsManager() const
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
void SetScreen(BASE_SCREEN *aScreen) override
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
SCH_ITEM * m_item_to_repeat
Last item to insert by the repeat command.
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
bool UnloadProject(PROJECT *aProject, bool aSave=true)
Saves, unloads and unregisters the given PROJECT.
GAL_TYPE GetBackend() const
Return the type of backend currently used by GAL canvas.

References EDA_DRAW_PANEL_GAL::GetBackend(), SCH_BASE_FRAME::GetCanvas(), EDA_BASE_FRAME::GetSettingsManager(), Kiface(), EDA_DRAW_FRAME::m_canvasType, m_item_to_repeat, m_schematic, TOOLS_HOLDER::m_toolManager, KIWAY_HOLDER::Prj(), SetScreen(), TOOL_MANAGER::ShutdownAllTools(), and SETTINGS_MANAGER::UnloadProject().

Member Function Documentation

◆ ActivateGalCanvas()

void EDA_DRAW_FRAME::ActivateGalCanvas ( )
virtualinherited

Use to start up the GAL drawing canvas.

Reimplemented in GERBVIEW_FRAME, PCB_BASE_FRAME, PCB_EDIT_FRAME, FOOTPRINT_EDIT_FRAME, and PCB_BASE_EDIT_FRAME.

Definition at line 698 of file eda_draw_frame.cpp.

699 {
700  GetCanvas()->SetEvtHandlerEnabled( true );
701  GetCanvas()->StartDrawing();
702 }
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
void StartDrawing()
Begin drawing if it was stopped previously.

References EDA_DRAW_FRAME::GetCanvas(), and EDA_DRAW_PANEL_GAL::StartDrawing().

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), SCH_BASE_FRAME::createCanvas(), SCH_DRAW_PANEL::OnShow(), and EDA_DRAW_FRAME::SwitchCanvas().

◆ AddItemToScreenAndUndoList()

void SCH_EDIT_FRAME::AddItemToScreenAndUndoList ( SCH_SCREEN aScreen,
SCH_ITEM aItem,
bool  aUndoAppend 
)

Add an item to the schematic and adds the changes to the undo/redo container.

Parameters
aUndoAppendTrue if the action should be appended to the current undo record.

Definition at line 1129 of file sch_edit_frame.cpp.

1131 {
1132  wxCHECK_RET( aItem != nullptr, wxT( "Cannot add null item to list." ) );
1133 
1134  SCH_SHEET* parentSheet = nullptr;
1135  SCH_SYMBOL* parentSymbol = nullptr;
1136  SCH_ITEM* undoItem = aItem;
1137 
1138  if( aItem->Type() == SCH_SHEET_PIN_T )
1139  {
1140  parentSheet = (SCH_SHEET*) aItem->GetParent();
1141 
1142  wxCHECK_RET( parentSheet && parentSheet->Type() == SCH_SHEET_T,
1143  wxT( "Cannot place sheet pin in invalid schematic sheet." ) );
1144 
1145  undoItem = parentSheet;
1146  }
1147 
1148  else if( aItem->Type() == SCH_FIELD_T )
1149  {
1150  parentSymbol = (SCH_SYMBOL*) aItem->GetParent();
1151 
1152  wxCHECK_RET( parentSymbol && parentSymbol->Type() == SCH_SYMBOL_T,
1153  wxT( "Cannot place field in invalid schematic symbol." ) );
1154 
1155  undoItem = parentSymbol;
1156  }
1157 
1158  if( aItem->IsNew() )
1159  {
1160  if( aItem->Type() == SCH_SHEET_PIN_T )
1161  {
1162  // Sheet pins are owned by their parent sheet.
1163  SaveCopyInUndoList( aScreen, undoItem, UNDO_REDO::CHANGED, aUndoAppend );
1164 
1165  parentSheet->AddPin( (SCH_SHEET_PIN*) aItem );
1166  }
1167  else if( aItem->Type() == SCH_FIELD_T )
1168  {
1169  // Symbol fields are also owned by their parent, but new symbol fields are
1170  // handled elsewhere.
1171  wxLogMessage( wxT( "addCurrentItemToScreen: unexpected new SCH_FIELD" ) );
1172  }
1173  else
1174  {
1175  if( !aScreen->CheckIfOnDrawList( aItem ) ) // don't want a loop!
1176  AddToScreen( aItem, aScreen );
1177 
1178  SaveCopyForRepeatItem( aItem );
1179  SaveCopyInUndoList( aScreen, undoItem, UNDO_REDO::NEWITEM, aUndoAppend );
1180  }
1181 
1182  // Update connectivity info for new item
1183  if( !aItem->IsMoving() )
1184  {
1186 
1187  if( SCH_TEXT* textItem = dynamic_cast<SCH_TEXT*>( aItem ) )
1188  inheritNetclass( GetCurrentSheet(), textItem );
1189  }
1190  }
1191 
1192  aItem->ClearFlags( IS_NEW );
1193 
1194  aScreen->SetContentModified();
1195  UpdateItem( aItem );
1196 
1197  if( !aItem->IsMoving() && aItem->IsConnectable() )
1198  {
1199  std::vector< wxPoint > pts = aItem->GetConnectionPoints();
1200 
1201  for( auto i = pts.begin(); i != pts.end(); i++ )
1202  {
1203  for( auto j = i + 1; j != pts.end(); j++ )
1204  TrimWire( *i, *j );
1205 
1206  if( aScreen->IsJunctionNeeded( *i, true ) )
1207  AddJunction( aScreen, *i, true, false );
1208  }
1209 
1210  TestDanglingEnds();
1211 
1212  for( SCH_ITEM* item : aItem->ConnectedItems( GetCurrentSheet() ) )
1213  UpdateItem( item );
1214  }
1215 
1216  aItem->ClearEditFlags();
1217  GetCanvas()->Refresh();
1218 }
virtual bool IsConnectable() const
Definition: sch_item.h:358
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
virtual std::vector< wxPoint > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
Definition: sch_item.h:373
void RecalculateConnections(SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
#define IS_NEW
New item, just created.
bool IsMoving() const
Definition: eda_item.h:120
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
Definition: sch_sheet.cpp:299
bool IsNew() const
Definition: eda_item.h:119
SCH_JUNCTION * AddJunction(SCH_SCREEN *aScreen, const wxPoint &aPos, bool aAppendToUndo, bool aFinal=true)
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
static void inheritNetclass(const SCH_SHEET_PATH &aSheetPath, SCH_TEXT *aItem)
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void SaveCopyForRepeatItem(const SCH_ITEM *aItem)
Clone aItem and owns that clone in this container.
EDA_ITEM * GetParent() const
Definition: eda_item.h:115
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:65
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:54
void SetContentModified(bool aModified=true)
Definition: base_screen.h:59
Schematic symbol object.
Definition: sch_symbol.h:78
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
SCH_ITEM_SET & ConnectedItems(const SCH_SHEET_PATH &aPath)
Retrieve the set of items connected to this item on the given sheet.
Definition: sch_item.cpp:164
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
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...
bool IsJunctionNeeded(const wxPoint &aPosition, bool aNew=false) const
Test if a junction is required for the items at aPosition on the screen.
Definition: sch_screen.cpp:401
SCH_SHEET_PATH & GetCurrentSheet() const
bool TrimWire(const wxPoint &aStart, const wxPoint &aEnd)
If any single wire passes through both points, remove the portion between the two points,...
void ClearEditFlags()
Definition: eda_item.h:172
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113
bool CheckIfOnDrawList(const SCH_ITEM *aItem) const
Definition: sch_screen.cpp:334

References AddJunction(), SCH_SHEET::AddPin(), SCH_BASE_FRAME::AddToScreen(), CHANGED, SCH_SCREEN::CheckIfOnDrawList(), EDA_ITEM::ClearEditFlags(), EDA_ITEM::ClearFlags(), SCH_ITEM::ConnectedItems(), SCH_BASE_FRAME::GetCanvas(), SCH_ITEM::GetConnectionPoints(), GetCurrentSheet(), EDA_ITEM::GetParent(), inheritNetclass(), IS_NEW, SCH_ITEM::IsConnectable(), SCH_SCREEN::IsJunctionNeeded(), EDA_ITEM::IsMoving(), EDA_ITEM::IsNew(), LOCAL_CLEANUP, NEWITEM, RecalculateConnections(), EDA_DRAW_PANEL_GAL::Refresh(), SaveCopyForRepeatItem(), SaveCopyInUndoList(), SCH_FIELD_T, SCH_SHEET_PIN_T, SCH_SHEET_T, SCH_SYMBOL_T, BASE_SCREEN::SetContentModified(), TestDanglingEnds(), TrimWire(), EDA_ITEM::Type(), and SCH_BASE_FRAME::UpdateItem().

Referenced by SCH_DRAWING_TOOLS::DrawSheet(), SCH_EDITOR_CONTROL::Paste(), SCH_DRAWING_TOOLS::PlaceImage(), SCH_DRAWING_TOOLS::PlaceSymbol(), BACK_ANNOTATE::processNetNameChange(), SCH_DRAWING_TOOLS::SingleClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ AddJunction()

SCH_JUNCTION * SCH_EDIT_FRAME::AddJunction ( SCH_SCREEN aScreen,
const wxPoint &  aPos,
bool  aAppendToUndo,
bool  aFinal = true 
)

Definition at line 454 of file bus-wire-junction.cpp.

456 {
457  SCH_JUNCTION* junction = new SCH_JUNCTION( aPos );
458 
459  AddToScreen( junction, aScreen );
460  SaveCopyInUndoList( aScreen, junction, UNDO_REDO::NEWITEM, aUndoAppend );
461  BreakSegments( aPos );
462 
463  if( aFinal )
464  {
466 
468  OnModify();
469 
470  KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
471  view->ClearPreview();
472  view->ShowPreview( false );
473  view->ClearHiddenFlags();
474  }
475 
476  return junction;
477 }
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void ClearHiddenFlags()
Clear the hide flag of all items in the view.
Definition: sch_view.cpp:171
bool BreakSegments(const wxPoint &aPoint, SCH_SCREEN *aScreen=nullptr)
Check every wire and bus for a intersection at aPoint and break into two segments at aPoint if an int...
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
Definition: actions.h:204
void ShowPreview(bool aShow=true)
Definition: view.cpp:1576
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void ClearPreview()
Definition: view.cpp:1540
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.

References SCH_BASE_FRAME::AddToScreen(), BreakSegments(), KIGFX::SCH_VIEW::ClearHiddenFlags(), KIGFX::VIEW::ClearPreview(), SCH_BASE_FRAME::GetCanvas(), SCH_DRAW_PANEL::GetView(), TOOLS_HOLDER::m_toolManager, NEWITEM, OnModify(), TOOL_MANAGER::PostEvent(), SaveCopyInUndoList(), EVENTS::SelectedItemsModified, KIGFX::VIEW::ShowPreview(), and TestDanglingEnds().

Referenced by AddItemToScreenAndUndoList(), SCH_LINE_WIRE_BUS_TOOL::AddJunctionsIfNeeded(), SCH_EDIT_TOOL::BreakWire(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), and SCH_MOVE_TOOL::Main().

◆ AddStandardHelpMenu()

void EDA_BASE_FRAME::AddStandardHelpMenu ( wxMenuBar *  aMenuBar)
inherited

Adds the standard KiCad help menu to the menubar.

Definition at line 440 of file eda_base_frame.cpp.

441 {
442  COMMON_CONTROL* commonControl = m_toolManager->GetTool<COMMON_CONTROL>();
443  ACTION_MENU* helpMenu = new ACTION_MENU( false, commonControl );
444 
445  helpMenu->Add( ACTIONS::help );
446  helpMenu->Add( ACTIONS::gettingStarted );
447  helpMenu->Add( ACTIONS::listHotKeys );
448  helpMenu->Add( ACTIONS::getInvolved );
449  helpMenu->Add( ACTIONS::donate );
450  helpMenu->Add( ACTIONS::reportBug );
451 
452  helpMenu->AppendSeparator();
453  helpMenu->Add( _( "&About KiCad" ), "", wxID_ABOUT, BITMAPS::about );
454 
455  // Trailing space keeps OSX from hijacking our menu (and disabling everything in it).
456  aMenuBar->Append( helpMenu, _( "&Help" ) + wxS( " " ) );
457 }
static TOOL_ACTION listHotKeys
Definition: actions.h:178
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:48
static TOOL_ACTION reportBug
Cursor control event types.
Definition: actions.h:181
static TOOL_ACTION donate
Definition: actions.h:179
#define _(s)
Handle actions that are shared between different applications.
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
static TOOL_ACTION help
Definition: actions.h:177
static TOOL_ACTION getInvolved
Definition: actions.h:180
static TOOL_ACTION gettingStarted
Definition: actions.h:176

References _, about, ACTIONS::donate, ACTIONS::getInvolved, ACTIONS::gettingStarted, TOOL_MANAGER::GetTool(), ACTIONS::help, ACTIONS::listHotKeys, TOOLS_HOLDER::m_toolManager, and ACTIONS::reportBug.

Referenced by EDA_3D_VIEWER_FRAME::CreateMenuBar(), KICAD_MANAGER_FRAME::ReCreateMenuBar(), GERBVIEW_FRAME::ReCreateMenuBar(), SYMBOL_VIEWER_FRAME::ReCreateMenuBar(), SYMBOL_EDIT_FRAME::ReCreateMenuBar(), FOOTPRINT_EDIT_FRAME::ReCreateMenuBar(), FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar(), PL_EDITOR_FRAME::ReCreateMenuBar(), CVPCB_MAINFRAME::ReCreateMenuBar(), ReCreateMenuBar(), and PCB_EDIT_FRAME::ReCreateMenuBar().

◆ AddStandardSubMenus()

void EDA_DRAW_FRAME::AddStandardSubMenus ( TOOL_MENU aMenu)
inherited

Construct a "basic" menu for a tool, containing only items that apply to all tools (e.g.

zoom and grid).

Definition at line 489 of file eda_draw_frame.cpp.

490 {
491  COMMON_TOOLS* commonTools = m_toolManager->GetTool<COMMON_TOOLS>();
492  CONDITIONAL_MENU& aMenu = aToolMenu.GetMenu();
493 
494  aMenu.AddSeparator( 1000 );
495 
496  auto zoomMenu = std::make_shared<ZOOM_MENU>( this );
497  zoomMenu->SetTool( commonTools );
498  aToolMenu.AddSubMenu( zoomMenu );
499 
500  auto gridMenu = std::make_shared<GRID_MENU>( this );
501  gridMenu->SetTool( commonTools );
502  aToolMenu.AddSubMenu( gridMenu );
503 
504  aMenu.AddMenu( zoomMenu.get(), SELECTION_CONDITIONS::ShowAlways, 1000 );
505  aMenu.AddMenu( gridMenu.get(), SELECTION_CONDITIONS::ShowAlways, 1000 );
506 }
static bool ShowAlways(const SELECTION &aSelection)
The default condition function (always returns true).
CONDITIONAL_MENU & GetMenu()
Definition: tool_menu.cpp:46
Handles action that are shared between different applications.
Definition: common_tools.h:37
void AddSeparator(int aOrder=ANY_ORDER)
Add a separator to the menu.
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158

References CONDITIONAL_MENU::AddSeparator(), TOOL_MENU::AddSubMenu(), TOOL_MENU::GetMenu(), TOOL_MANAGER::GetTool(), TOOLS_HOLDER::m_toolManager, and SELECTION_CONDITIONS::ShowAlways().

Referenced by ROUTER_TOOL::Init(), PL_EDIT_TOOL::Init(), PL_DRAWING_TOOLS::Init(), PCB_VIEWER_TOOLS::Init(), PL_SELECTION_TOOL::Init(), EE_SELECTION_TOOL::Init(), PCB_SELECTION_TOOL::Init(), and PICKER_TOOL::Init().

◆ AddToScreen()

void SCH_BASE_FRAME::AddToScreen ( EDA_ITEM aItem,
SCH_SCREEN aScreen 
)
inherited

Add an item to the screen (and view) aScreen is the screen the item is located on, if not the current screen.

Definition at line 363 of file sch_base_frame.cpp.

364 {
365  auto screen = aScreen;
366 
367  if( aScreen == nullptr )
368  screen = GetScreen();
369 
370  screen->Append( (SCH_ITEM*) aItem );
371 
372  if( screen == GetScreen() )
373  {
374  GetCanvas()->GetView()->Add( aItem );
375  UpdateItem( aItem, true ); // handle any additional parent semantics
376  }
377 }
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:323
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193

References KIGFX::VIEW::Add(), SCH_BASE_FRAME::GetCanvas(), SCH_BASE_FRAME::GetScreen(), SCH_DRAW_PANEL::GetView(), and SCH_BASE_FRAME::UpdateItem().

Referenced by AddItemToScreenAndUndoList(), AddJunction(), BreakSegment(), SCH_EDIT_TOOL::ChangeTextType(), DeleteJunction(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_MOVE_TOOL::getConnectedDragItems(), PutDataInPreviousState(), SCH_EDIT_TOOL::RepeatDrawItem(), and SchematicCleanUp().

◆ AllowCaseSensitiveFileNameClashes()

bool SCH_EDIT_FRAME::AllowCaseSensitiveFileNameClashes ( const wxString &  aSchematicFileName)

Check aSchematicFileName for a potential file name case sensitivity clashes.

On platforms where file names are case sensitive, it is possible to schematic sheet file names that would cause issues on platforms where file name are case insensitive. File names foo.sch and Foo.sch are unique files on Linux and MacOS but on Windows this would result in a broken schematic.

Parameters
aSchematicFileNameis the absolute path and file name of the file to test.
Returns
true if the user accepts the potential file name clash risk.

Definition at line 550 of file sheet.cpp.

551 {
552  wxString msg;
553  SCH_SCREENS screens( Schematic().Root() );
554  wxFileName fn = aSchematicFileName;
555 
556  wxCHECK( fn.IsAbsolute(), false );
557 
559  && screens.CanCauseCaseSensitivityIssue( aSchematicFileName ) )
560  {
561  msg.Printf( _( "The file name '%s' can cause issues with an existing file name\n"
562  "already defined in the schematic on systems that support case\n"
563  "insensitive file names. This will cause issues if you copy this\n"
564  "project to an operating system that supports case insensitive file\n"
565  "names.\n\nDo you wish to continue?" ),
566  fn.GetName() );
567 
568  wxRichMessageDialog dlg( this, msg, _( "Warning" ),
569  wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION );
570  dlg.ShowCheckBox( _( "Do not show this message again." ) );
571  dlg.SetYesNoLabels( wxMessageDialog::ButtonLabel( _( "Create New Sheet" ) ),
572  wxMessageDialog::ButtonLabel( _( "Discard New Sheet" ) ) );
573 
574  if( dlg.ShowModal() == wxID_NO )
575  return false;
576 
578  !dlg.IsCheckBoxChecked();
579  }
580 
581  return true;
582 }
EESCHEMA_SETTINGS * eeconfig() const
SCHEMATIC & Schematic() const
#define _(s)
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References _, SCH_SCREENS::CanCauseCaseSensitivityIssue(), SCH_BASE_FRAME::eeconfig(), EESCHEMA_SETTINGS::m_Appearance, Schematic(), and EESCHEMA_SETTINGS::APPEARANCE::show_sheet_filename_case_sensitivity_dialog.

Referenced by DIALOG_SHEET_PROPERTIES::onSheetFilenameChanged().

◆ AnnotateSymbols()

void SCH_EDIT_FRAME::AnnotateSymbols ( ANNOTATE_SCOPE_T  aAnnotateScope,
ANNOTATE_ORDER_T  aSortOption,
ANNOTATE_ALGO_T  aAlgoOption,
int  aStartNumber,
bool  aResetAnnotation,
bool  aRepairTimestamps,
REPORTER aReporter 
)

Annotate the symbols in the schematic that are not currently annotated.

Multi-unit symbols are annotated together. E.g. if two symbols were R8A and R8B, they may become R3A and R3B, but not R3A and R3C or R3C and R4D.

Parameters
aAnnotateScopeSee ANNOTATE_SCOPE_T
aSortOptionDefine the annotation order. See ANNOTATE_ORDER_T.
aAlgoOptionDefine the annotation style. See ANNOTATE_ALGO_T.
aStartNumberThe start number for non-sheet-based annotation styles.
aResetAnnotationClear any previous annotation if true. Otherwise, keep the existing symbol annotation.
aRepairTimestampsTest for and repair any duplicate time stamps if true. Otherwise, keep the existing time stamps. This option could change previous annotation because time stamps are used to handle annotation in complex hierarchies.
aReporterA sink for error messages. Use NULL_REPORTER if you don't need errors.

When the sheet number is used in annotation, each sheet annotation starts from sheet number * 100. In other words the first sheet uses 100 to 199, the second sheet uses 200 to 299, and so on.

Definition at line 126 of file annotate.cpp.

133 {
135  EE_SELECTION& selection = selTool->RequestSelection();
136 
137  SCH_REFERENCE_LIST references;
138  SCH_SCREENS screens( Schematic().Root() );
139  SCH_SHEET_LIST sheets = Schematic().GetSheets();
140  SCH_SHEET_PATH currentSheet = GetCurrentSheet();
141  bool appendUndo = false;
142 
143  // Map of locked symbols
144  SCH_MULTI_UNIT_REFERENCE_MAP lockedSymbols;
145 
146  // Map of previous annotation for building info messages
147  std::map<wxString, wxString> previousAnnotation;
148 
149  // Test for and replace duplicate time stamps in symbols and sheets. Duplicate
150  // time stamps can happen with old schematics, schematic conversions, or manual
151  // editing of files.
152  if( aRepairTimestamps )
153  {
154  int count = screens.ReplaceDuplicateTimeStamps();
155 
156  if( count )
157  {
158  wxString msg;
159  msg.Printf( _( "%d duplicate time stamps were found and replaced." ), count );
160  aReporter.ReportTail( msg, RPT_SEVERITY_WARNING );
161  }
162  }
163 
164  // Collect all the sets that must be annotated together.
165  switch( aAnnotateScope )
166  {
167  case ANNOTATE_ALL:
168  sheets.GetMultiUnitSymbols( lockedSymbols );
169  break;
170 
172  currentSheet.GetMultiUnitSymbols( lockedSymbols );
173  break;
174 
175  case ANNOTATE_SELECTION:
176  selection.GetMultiUnitSymbols( lockedSymbols, currentSheet );
177  break;
178  }
179 
180  // Store previous annotations for building info messages
181  mapExistingAnnotation( previousAnnotation );
182 
183  // If it is an annotation for all the symbols, reset previous annotation.
184  if( aResetAnnotation )
185  DeleteAnnotation( aAnnotateScope, &appendUndo );
186 
187  // Set sheet number and number of sheets.
189 
190  // Build symbol list
191  switch( aAnnotateScope )
192  {
193  case ANNOTATE_ALL:
194  sheets.GetSymbols( references );
195  break;
196 
198  GetCurrentSheet().GetSymbols( references );
199  break;
200 
201  case ANNOTATE_SELECTION:
202  selection.GetSymbols( references, currentSheet );
203  break;
204  }
205 
206  // Build additional list of references to be used during reannotation
207  // to avoid duplicate designators (no additional references when annotating
208  // the full schematic)
209  SCH_REFERENCE_LIST additionalRefs;
210 
211  if( aAnnotateScope != ANNOTATE_ALL )
212  {
213  SCH_REFERENCE_LIST allRefs;
214  sheets.GetSymbols( allRefs );
215 
216  for( size_t i = 0; i < allRefs.GetCount(); i++ )
217  {
218  if( !references.Contains( allRefs[i] ) )
219  additionalRefs.AddItem( allRefs[i] );
220  }
221  }
222 
223  // Break full symbol reference into name (prefix) and number:
224  // example: IC1 become IC, and 1
225  references.SplitReferences();
226 
227  switch( aSortOption )
228  {
229  default:
230  case SORT_BY_X_POSITION: references.SortByXCoordinate(); break;
231  case SORT_BY_Y_POSITION: references.SortByYCoordinate(); break;
232  }
233 
234  bool useSheetNum = false;
235  int idStep = 100;
236 
237  switch( aAlgoOption )
238  {
239  default:
240  case INCREMENTAL_BY_REF:
241  break;
242 
243  case SHEET_NUMBER_X_100:
244  useSheetNum = true;
245  break;
246 
247  case SHEET_NUMBER_X_1000:
248  useSheetNum = true;
249  idStep = 1000;
250  break;
251  }
252 
253  // Recalculate and update reference numbers in schematic
254  references.Annotate( useSheetNum, idStep, aStartNumber, lockedSymbols, additionalRefs );
255 
256  for( size_t i = 0; i < references.GetCount(); i++ )
257  {
258  SCH_REFERENCE& ref = references[i];
259  SCH_SYMBOL* symbol = ref.GetSymbol();
260  SCH_SHEET_PATH* sheet = &ref.GetSheetPath();
261 
262  SaveCopyInUndoList( sheet->LastScreen(), symbol, UNDO_REDO::CHANGED, appendUndo );
263  appendUndo = true;
264  ref.Annotate();
265 
266  KIID_PATH full_uuid = sheet->Path();
267  full_uuid.push_back( symbol->m_Uuid );
268 
269  wxString prevRef = previousAnnotation[ full_uuid.AsString() ];
270  wxString newRef = symbol->GetRef( sheet );
271 
272  if( symbol->GetUnitCount() > 1 )
273  newRef << LIB_SYMBOL::SubReference( symbol->GetUnitSelection( sheet ) );
274 
275  wxString msg;
276 
277  if( prevRef.Length() )
278  {
279  if( newRef == prevRef )
280  continue;
281 
282  if( symbol->GetUnitCount() > 1 )
283  {
284  msg.Printf( _( "Updated %s (unit %s) from %s to %s." ),
285  symbol->GetValue( sheet, true ),
286  LIB_SYMBOL::SubReference( symbol->GetUnit(), false ),
287  prevRef,
288  newRef );
289  }
290  else
291  {
292  msg.Printf( _( "Updated %s from %s to %s." ),
293  symbol->GetValue( sheet, true ),
294  prevRef,
295  newRef );
296  }
297  }
298  else
299  {
300  if( symbol->GetUnitCount() > 1 )
301  {
302  msg.Printf( _( "Annotated %s (unit %s) as %s." ),
303  symbol->GetValue( sheet, true ),
304  LIB_SYMBOL::SubReference( symbol->GetUnit(), false ),
305  newRef );
306  }
307  else
308  {
309  msg.Printf( _( "Annotated %s as %s." ),
310  symbol->GetValue( sheet, true ),
311  newRef );
312  }
313  }
314 
315  aReporter.Report( msg, RPT_SEVERITY_ACTION );
316  }
317 
318  // Final control (just in case ... ).
319  if( !CheckAnnotate(
320  [ &aReporter ]( ERCE_T , const wxString& aMsg, SCH_REFERENCE* , SCH_REFERENCE* )
321  {
322  aReporter.Report( aMsg, RPT_SEVERITY_ERROR );
323  },
324  aAnnotateScope ) )
325  {
326  aReporter.ReportTail( _( "Annotation complete." ), RPT_SEVERITY_ACTION );
327  }
328 
329  // Update on screen references, that can be modified by previous calculations:
332 
333  SyncView();
334  GetCanvas()->Refresh();
335  OnModify();
336 
337  // Must go after OnModify() so the connectivity graph has been updated
339 }
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void GetMultiUnitSymbols(SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, bool aIncludePowerSymbols=true) const
Add a SCH_REFERENCE_LIST object to aRefList for each same-reference set of multi-unit parts in the sh...
void SortByYCoordinate()
Sort the list of references by Y position.
void UpdateNetHighlightStatus()
Annotate the selection.
void mapExistingAnnotation(std::map< wxString, wxString > &aMap)
Fill a map of uuid -> reference from the currently loaded schematic.
Definition: annotate.cpp:38
Annotate the full schematic.
void GetMultiUnitSymbols(SCH_MULTI_UNIT_REFERENCE_MAP &aRefList, bool aIncludePowerSymbols=true) const
Add a SCH_REFERENCE_LIST object to aRefList for each same-reference set of multi-unit parts in the li...
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
const SCH_SHEET_PATH & GetSheetPath() const
int GetUnitCount() const
Return the number of units per package of the symbol.
Definition: sch_symbol.cpp:370
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
virtual REPORTER & ReportTail(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)
Places the report at the end of the list, for objects that support report ordering.
Definition: reporter.h:99
void DeleteAnnotation(ANNOTATE_SCOPE_T aAnnotateScope, bool *appendUndo)
Clear the current symbol annotation.
Definition: annotate.cpp:63
void AddItem(const SCH_REFERENCE &aItem)
static wxString SubReference(int aUnit, bool aAddSeparator=true)
Definition: lib_symbol.cpp:445
SCH_SYMBOL * GetSymbol() const
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const
Return the reference for the given sheet path.
Definition: sch_symbol.cpp:441
void UpdateAllScreenReferences()
Update all the symbol references for this sheet path.
int CheckAnnotate(ANNOTATION_ERROR_HANDLER aErrorHandler, ANNOTATE_SCOPE_T aAnnotateScope=ANNOTATE_ALL)
Check for annotation errors.
Definition: annotate.cpp:342
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Report a string with a given severity.
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Return either an existing selection (filtered), or the selection at the current cursor if the existin...
void SortByXCoordinate()
Sort the list of references by X position.
void SyncView()
Mark all items for refresh.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
Definition: sch_symbol.cpp:531
void Annotate()
Update the annotation of the symbol according the current object state.
Annotate using the first free reference number starting at the sheet number * 100.
SCHEMATIC & Schematic() const
size_t GetCount() const
#define _(s)
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
ERCE_T
ERC error codes.
Definition: erc_settings.h:36
bool Contains(const SCH_REFERENCE &aItem)
Return true if aItem exists in this list.
const wxString GetValue(const SCH_SHEET_PATH *sheet, bool aResolve) const
Return the instance-specific value for the given sheet path.
Definition: sch_symbol.cpp:573
std::map< wxString, SCH_REFERENCE_LIST > SCH_MULTI_UNIT_REFERENCE_MAP
Container to map reference designators for multi-unit parts.
const KIID m_Uuid
Definition: eda_item.h:475
Annotate by Y position from top to bottom.
Annotate incrementally using the first free reference number.
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
void Annotate(bool aUseSheetNum, int aSheetIntervalId, int aStartNumber, SCH_MULTI_UNIT_REFERENCE_MAP aLockedUnitMap, const SCH_REFERENCE_LIST &aAdditionalRefs, bool aStartAtCurrent=false)
Set the reference designators in the list that have not been annotated.
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
Schematic symbol object.
Definition: sch_symbol.h:78
SCH_SCREEN * LastScreen()
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
void SplitReferences()
Attempt to split all reference designators into a name (U) and number (1).
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
wxString AsString() const
Definition: kiid.cpp:277
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
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...
Annotate by X position from left to right.
Annotate using the first free reference number starting at the sheet number * 1000.
SCH_SHEET_PATH & GetCurrentSheet() const
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
Annotate the current sheet.
int GetUnit() const
Definition: sch_symbol.h:195
A helper to define a symbol's reference designator in a schematic.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References _, SCH_REFERENCE_LIST::AddItem(), SCH_REFERENCE::Annotate(), SCH_REFERENCE_LIST::Annotate(), ANNOTATE_ALL, ANNOTATE_CURRENT_SHEET, ANNOTATE_SELECTION, KIID_PATH::AsString(), CHANGED, CheckAnnotate(), SCH_REFERENCE_LIST::Contains(), DeleteAnnotation(), SCH_BASE_FRAME::GetCanvas(), SCH_REFERENCE_LIST::GetCount(), GetCurrentSheet(), SCH_SHEET_PATH::GetMultiUnitSymbols(), SCH_SHEET_LIST::GetMultiUnitSymbols(), SCH_SYMBOL::GetRef(), SCH_REFERENCE::GetSheetPath(), SCHEMATIC::GetSheets(), SCH_REFERENCE::GetSymbol(), SCH_SHEET_PATH::GetSymbols(), SCH_SHEET_LIST::GetSymbols(), TOOL_MANAGER::GetTool(), SCH_SYMBOL::GetUnit(), SCH_SYMBOL::GetUnitCount(), SCH_SYMBOL::GetUnitSelection(), SCH_SYMBOL::GetValue(), INCREMENTAL_BY_REF, SCH_SHEET_PATH::LastScreen(), TOOLS_HOLDER::m_toolManager, EDA_ITEM::m_Uuid, mapExistingAnnotation(), OnModify(), SCH_SHEET_PATH::Path(), EDA_DRAW_PANEL_GAL::Refresh(), SCH_SCREENS::ReplaceDuplicateTimeStamps(), REPORTER::Report(), REPORTER::ReportTail(), EE_SELECTION_TOOL::RequestSelection(), RPT_SEVERITY_ACTION, RPT_SEVERITY_ERROR, RPT_SEVERITY_WARNING, SaveCopyInUndoList(), Schematic(), SetSheetNumberAndCount(), SHEET_NUMBER_X_100, SHEET_NUMBER_X_1000, SORT_BY_X_POSITION, SORT_BY_Y_POSITION, SCH_REFERENCE_LIST::SortByXCoordinate(), SCH_REFERENCE_LIST::SortByYCoordinate(), SCH_REFERENCE_LIST::SplitReferences(), LIB_SYMBOL::SubReference(), SCH_BASE_FRAME::SyncView(), SCH_SHEET_PATH::UpdateAllScreenReferences(), and UpdateNetHighlightStatus().

Referenced by DIALOG_ANNOTATE::OnApplyClick().

◆ AppendMsgPanel()

void EDA_DRAW_FRAME::AppendMsgPanel ( const wxString &  aTextUpper,
const wxString &  aTextLower,
int  aPadding = 6 
)
inherited

Append a message to the message panel.

This helper method checks to make sure the message panel exists in the frame and appends a message to it using the message panel AppendMessage() method.

Parameters
aTextUpperThe message upper text.
aTextLowerThe message lower text.
aPaddingNumber of spaces to pad between messages.

Definition at line 643 of file eda_draw_frame.cpp.

645 {
646  if( m_messagePanel )
647  m_messagePanel->AppendMessage( aTextUpper, aTextLower, aPadding );
648 }
EDA_MSG_PANEL * m_messagePanel
void AppendMessage(const wxString &aUpperText, const wxString &aLowerText, int aPadding=6)
Append a message to the message panel.
Definition: msgpanel.cpp:94

References EDA_MSG_PANEL::AppendMessage(), and EDA_DRAW_FRAME::m_messagePanel.

Referenced by GERBER_FILE_IMAGE::DisplayImageInfo(), SYMBOL_VIEWER_FRAME::updatePreviewSymbol(), and SYMBOL_EDIT_FRAME::UpdateSymbolMsgPanelInfo().

◆ AppendSchematic()

bool SCH_EDIT_FRAME::AppendSchematic ( )

Import a KiCad schematic into the current sheet.

Returns
True if the schematic was imported properly.

Definition at line 504 of file eeschema/files-io.cpp.

505 {
506  wxString fullFileName;
507  SCH_SCREEN* screen = GetScreen();
508 
509  if( !screen )
510  {
511  wxLogError( wxT( "Document not ready, cannot import" ) );
512  return false;
513  }
514 
515  // open file chooser dialog
516  wxString path = wxPathOnly( Prj().GetProjectFullName() );
517 
518  wxFileDialog dlg( this, _( "Insert Schematic" ), path, wxEmptyString,
519  KiCadSchematicFileWildcard(), wxFD_OPEN | wxFD_FILE_MUST_EXIST );
520 
521  if( dlg.ShowModal() == wxID_CANCEL )
522  return false;
523 
524  fullFileName = dlg.GetPath();
525 
526  if( !LoadSheetFromFile( GetCurrentSheet().Last(), &GetCurrentSheet(), fullFileName ) )
527  return false;
528 
529  initScreenZoom();
531 
532  SyncView();
533  OnModify();
534  HardRedraw(); // Full reinit of the current screen and the display.
535 
537 
538  return true;
539 }
wxString KiCadSchematicFileWildcard()
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool LoadSheetFromFile(SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, const wxString &aFileName)
Load a the KiCad schematic file aFileName into the sheet aSheet.
Definition: sheet.cpp:105
void HardRedraw() override
Rebuild the GAL and redraw the screen.
void SyncView()
Mark all items for refresh.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
void initScreenZoom()
Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
void UpdateHierarchyNavigator(bool aForceUpdate=false)
Run the Hierarchy Navigator dialog.
#define _(s)
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
SCH_SHEET_PATH & GetCurrentSheet() const
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...

References _, GetCurrentSheet(), GetScreen(), HardRedraw(), initScreenZoom(), KiCadSchematicFileWildcard(), LoadSheetFromFile(), OnModify(), path, KIWAY_HOLDER::Prj(), SetSheetNumberAndCount(), SCH_BASE_FRAME::SyncView(), and UpdateHierarchyNavigator().

Referenced by OnAppendProject().

◆ AskToSaveChanges()

bool SCH_EDIT_FRAME::AskToSaveChanges ( )

Check if any of the screens has unsaved changes and asks the user whether to save or drop them.

Returns
True if user decided to save or drop changes, false if the operation should be canceled.

Definition at line 1234 of file eeschema/files-io.cpp.

1235 {
1236  SCH_SCREENS screenList( Schematic().Root() );
1237 
1238  // Save any currently open and modified project files.
1239  for( SCH_SCREEN* screen = screenList.GetFirst(); screen; screen = screenList.GetNext() )
1240  {
1241  if( screen->IsContentModified() )
1242  {
1243  if( !HandleUnsavedChanges( this, _( "The current schematic has been modified. "
1244  "Save changes?" ),
1245  [&]()->bool { return SaveProject(); } ) )
1246  {
1247  return false;
1248  }
1249  }
1250  }
1251 
1252  return true;
1253 }
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
Definition: confirm.cpp:231
bool SaveProject(bool aSaveAs=false)
Saves the currently-open schematic (including its hierarchy) and associated project.
SCHEMATIC & Schematic() const
#define _(s)
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References _, SCH_SCREENS::GetFirst(), SCH_SCREENS::GetNext(), HandleUnsavedChanges(), SaveProject(), and Schematic().

Referenced by OnImportProject(), and OpenProjectFiles().

◆ BreakSegment()

bool SCH_EDIT_FRAME::BreakSegment ( SCH_LINE aSegment,
const wxPoint &  aPoint,
SCH_LINE **  aNewSegment = nullptr,
SCH_SCREEN aScreen = nullptr 
)

Break a single segment into two at the specified point.

Note
This always appends to the existing undo state.
Parameters
aSegmentLine segment to break
aPointPoint at which to break the segment
aNewSegmentPointer to the newly created segment (if given and created)
aScreenis the screen to examine, or nullptr to examine the current screen.
Returns
True if any wires or buses were broken.

Definition at line 295 of file bus-wire-junction.cpp.

297 {
298  if( aScreen == nullptr )
299  aScreen = GetScreen();
300 
301  SCH_LINE* newSegment = new SCH_LINE( *aSegment );
302 
303  newSegment->SetStartPoint( aPoint );
304  AddToScreen( newSegment, aScreen );
305 
306  SaveCopyInUndoList( aScreen, newSegment, UNDO_REDO::NEWITEM, true );
307  SaveCopyInUndoList( aScreen, aSegment, UNDO_REDO::CHANGED, true );
308 
309  UpdateItem( aSegment );
310  aSegment->SetEndPoint( aPoint );
311 
312  if( aNewSegment )
313  *aNewSegment = newSegment;
314 
315  return true;
316 }
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
void SetEndPoint(const wxPoint &aPosition)
Definition: sch_line.h:94
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SetStartPoint(const wxPoint &aPosition)
Definition: sch_line.h:91
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.

References SCH_BASE_FRAME::AddToScreen(), CHANGED, GetScreen(), NEWITEM, SaveCopyInUndoList(), SCH_LINE::SetEndPoint(), SCH_LINE::SetStartPoint(), and SCH_BASE_FRAME::UpdateItem().

Referenced by BreakSegments(), SCH_EDIT_TOOL::BreakWire(), and TrimWire().

◆ BreakSegments()

bool SCH_EDIT_FRAME::BreakSegments ( const wxPoint &  aPoint,
SCH_SCREEN aScreen = nullptr 
)

Check every wire and bus for a intersection at aPoint and break into two segments at aPoint if an intersection is found.

Note
This always appends to the existing undo state.
Parameters
aPointTest this point for an intersection.
aScreenis the screen to examine, or nullptr to examine the current screen.
Returns
True if any wires or buses were broken.

Definition at line 319 of file bus-wire-junction.cpp.

320 {
321  static const KICAD_T wiresAndBuses[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T, EOT };
322 
323  if( aScreen == nullptr )
324  aScreen = GetScreen();
325 
326  bool brokenSegments = false;
327  std::vector<SCH_LINE*> wires;
328 
329  for( SCH_ITEM* item : aScreen->Items().Overlapping( SCH_LINE_T, aPoint ) )
330  {
331  if( item->IsType( wiresAndBuses ) )
332  {
333  SCH_LINE* wire = static_cast<SCH_LINE*>( item );
334 
335  if( IsPointOnSegment( wire->GetStartPoint(), wire->GetEndPoint(), aPoint )
336  && !wire->IsEndPoint( aPoint ) )
337  {
338  wires.push_back( wire );
339  }
340  }
341  }
342 
343  for( SCH_LINE* wire : wires )
344  brokenSegments |= BreakSegment( wire, aPoint, nullptr, aScreen );
345 
346  return brokenSegments;
347 }
wxPoint GetStartPoint() const
Definition: sch_line.h:90
bool IsPointOnSegment(const wxPoint &aSegStart, const wxPoint &aSegEnd, const wxPoint &aTestPoint)
Test if aTestPoint is on line defined by aSegStart and aSegEnd.
Definition: trigo.cpp:42
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool IsEndPoint(const wxPoint &aPoint) const
Definition: sch_line.h:80
EE_TYPE Overlapping(const EDA_RECT &aRect) const
Definition: sch_rtree.h:221
bool BreakSegment(SCH_LINE *aSegment, const wxPoint &aPoint, SCH_LINE **aNewSegment=nullptr, SCH_SCREEN *aScreen=nullptr)
Break a single segment into two at the specified point.
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193
wxPoint GetEndPoint() const
Definition: sch_line.h:93

References BreakSegment(), EOT, SCH_LINE::GetEndPoint(), GetScreen(), SCH_LINE::GetStartPoint(), SCH_LINE::IsEndPoint(), IsPointOnSegment(), SCH_SCREEN::Items(), EE_RTREE::Overlapping(), SCH_LINE_LOCATE_BUS_T, SCH_LINE_LOCATE_WIRE_T, and SCH_LINE_T.

Referenced by AddJunction(), and BreakSegmentsOnJunctions().

◆ BreakSegmentsOnJunctions()

bool SCH_EDIT_FRAME::BreakSegmentsOnJunctions ( SCH_SCREEN aScreen = nullptr)

Test all junctions and bus entries in the schematic for intersections with wires and buses and breaks any intersections into multiple segments.

Note
This always appends to the existing undo state.
Parameters
aScreenis the screen to examine, or nullptr to examine the current screen
Returns
True if any wires or buses were broken.

Definition at line 350 of file bus-wire-junction.cpp.

351 {
352  if( aScreen == nullptr )
353  aScreen = GetScreen();
354 
355  bool brokenSegments = false;
356 
357  std::set<wxPoint> point_set;
358 
359  for( SCH_ITEM* item : aScreen->Items().OfType( SCH_JUNCTION_T ) )
360  point_set.insert( item->GetPosition() );
361 
362  for( SCH_ITEM* item : aScreen->Items().OfType( SCH_BUS_WIRE_ENTRY_T ) )
363  {
364  SCH_BUS_WIRE_ENTRY* entry = static_cast<SCH_BUS_WIRE_ENTRY*>( item );
365  point_set.insert( entry->GetPosition() );
366  point_set.insert( entry->GetEnd() );
367  }
368 
369 
370  for( const wxPoint& pt : point_set )
371  brokenSegments |= BreakSegments( pt, aScreen );
372 
373  return brokenSegments;
374 }
EE_TYPE OfType(KICAD_T aType) const
Definition: sch_rtree.h:216
bool BreakSegments(const wxPoint &aPoint, SCH_SCREEN *aScreen=nullptr)
Check every wire and bus for a intersection at aPoint and break into two segments at aPoint if an int...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
Class for a wire to bus entry.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193
wxPoint GetEnd() const
wxPoint GetPosition() const override

References BreakSegments(), SCH_BUS_ENTRY_BASE::GetEnd(), SCH_BUS_ENTRY_BASE::GetPosition(), GetScreen(), SCH_SCREEN::Items(), EE_RTREE::OfType(), SCH_BUS_WIRE_ENTRY_T, and SCH_JUNCTION_T.

Referenced by SchematicCleanUp().

◆ canCloseWindow()

bool SCH_EDIT_FRAME::canCloseWindow ( wxCloseEvent &  aCloseEvent)
overrideprivatevirtual

Reimplemented from EDA_BASE_FRAME.

Definition at line 605 of file sch_edit_frame.cpp.

606 {
607  // Exit interactive editing
608  // Note this this will commit *some* pending changes. For instance, the EE_POINT_EDITOR
609  // will cancel any drag currently in progress, but commit all changes from previous drags.
610  if( m_toolManager )
612 
613  // Shutdown blocks must be determined and vetoed as early as possible
614  if( KIPLATFORM::APP::SupportsShutdownBlockReason() && aEvent.GetId() == wxEVT_QUERY_END_SESSION
615  && Schematic().GetSheets().IsModified() )
616  {
617  return false;
618  }
619 
620  if( Kiface().IsSingle() )
621  {
622  auto* symbolEditor = (SYMBOL_EDIT_FRAME*) Kiway().Player( FRAME_SCH_SYMBOL_EDITOR, false );
623 
624  if( symbolEditor && !symbolEditor->Close() ) // Can close symbol editor?
625  return false;
626 
627  auto* symbolViewer = (SYMBOL_VIEWER_FRAME*) Kiway().Player( FRAME_SCH_VIEWER, false );
628 
629  if( symbolViewer && !symbolViewer->Close() ) // Can close symbol viewer?
630  return false;
631 
632  symbolViewer = (SYMBOL_VIEWER_FRAME*) Kiway().Player( FRAME_SCH_VIEWER_MODAL, false );
633 
634  if( symbolViewer && !symbolViewer->Close() ) // Can close modal symbol viewer?
635  return false;
636  }
637 
638  SIM_PLOT_FRAME* simFrame = (SIM_PLOT_FRAME*) Kiway().Player( FRAME_SIMULATOR, false );
639 
640  if( simFrame && !simFrame->Close() ) // Can close the simulator?
641  return false;
642 
643  // We may have gotten multiple events; don't clean up twice
644  if( !Schematic().IsValid() )
645  return false;
646 
647  SCH_SHEET_LIST sheetlist = Schematic().GetSheets();
648 
649  if( sheetlist.IsModified() )
650  {
651  wxFileName fileName = Schematic().RootScreen()->GetFileName();
652  wxString msg = _( "Save changes to '%s' before closing?" );
653 
654  if( !HandleUnsavedChanges( this, wxString::Format( msg, fileName.GetFullName() ),
655  [&]()->bool { return SaveProject(); } ) )
656  {
657  return false;
658  }
659  }
660 
661  return true;
662 }
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
Definition: confirm.cpp:231
const wxString & GetFileName() const
Definition: sch_screen.h:145
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Definition: kiway_holder.h:53
bool IsModified() const
Check the entire hierarchy for any modifications.
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
bool IsValid() const
A simple test if the schematic is loaded, not a complete one.
Definition: schematic.h:108
static TOOL_ACTION cancelInteractive
Definition: actions.h:62
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
Symbol library viewer main window.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:382
bool SaveProject(bool aSaveAs=false)
Saves the currently-open schematic (including its hierarchy) and associated project.
SCHEMATIC & Schematic() const
#define _(s)
bool SupportsShutdownBlockReason()
Whether or not the window supports setting a shutdown block reason.
Definition: gtk/app.cpp:72
Implementing SIM_PLOT_FRAME_BASE.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:117
bool IsSingle() const
Is this KIFACE running under single_top?
Definition: kiface_base.h:104
The symbol library editor main window.

References _, ACTIONS::cancelInteractive, Format(), FRAME_SCH_SYMBOL_EDITOR, FRAME_SCH_VIEWER, FRAME_SCH_VIEWER_MODAL, FRAME_SIMULATOR, SCH_SCREEN::GetFileName(), SCHEMATIC::GetSheets(), HandleUnsavedChanges(), SCH_SHEET_LIST::IsModified(), KIFACE_BASE::IsSingle(), SCHEMATIC::IsValid(), Kiface(), KIWAY_HOLDER::Kiway(), TOOLS_HOLDER::m_toolManager, KIWAY::Player(), SCHEMATIC::RootScreen(), TOOL_MANAGER::RunAction(), SaveProject(), Schematic(), and KIPLATFORM::APP::SupportsShutdownBlockReason().

◆ CenterScreen()

void SCH_BASE_FRAME::CenterScreen ( const wxPoint &  aCenterPoint,
bool  aWarpPointer 
)
virtualinherited

Definition at line 254 of file sch_base_frame.cpp.

255 {
256  GetCanvas()->GetView()->SetCenter( aCenterPoint );
257 
258  if( aWarpPointer )
259  GetCanvas()->GetViewControls()->WarpCursor( aCenterPoint, true );
260 
261  GetCanvas()->Refresh();
262 }
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
virtual void WarpCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:581
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
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...

References SCH_BASE_FRAME::GetCanvas(), SCH_DRAW_PANEL::GetView(), EDA_DRAW_PANEL_GAL::GetViewControls(), EDA_DRAW_PANEL_GAL::Refresh(), KIGFX::VIEW::SetCenter(), and KIGFX::VIEW_CONTROLS::WarpCursor().

Referenced by SCH_EDITOR_CONTROL::FindSymbolAndItem().

◆ ChangeUserUnits()

void EDA_BASE_FRAME::ChangeUserUnits ( EDA_UNITS  aUnits)
inherited

Definition at line 1181 of file eda_base_frame.cpp.

1182 {
1183  SetUserUnits( aUnits );
1185 
1186  wxCommandEvent e( UNITS_CHANGED );
1187  ProcessEventLocally( e );
1188 }
virtual void unitsChangeRefresh()
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
void SetUserUnits(EDA_UNITS aUnits)

References EDA_BASE_FRAME::SetUserUnits(), and EDA_BASE_FRAME::unitsChangeRefresh().

Referenced by COMMON_TOOLS::SwitchUnits(), and COMMON_TOOLS::ToggleUnits().

◆ CheckAnnotate()

int SCH_EDIT_FRAME::CheckAnnotate ( ANNOTATION_ERROR_HANDLER  aErrorHandler,
ANNOTATE_SCOPE_T  aAnnotateScope = ANNOTATE_ALL 
)

Check for annotation errors.

The following list of items are checked:

  • Symbols that are not annotated.
  • Duplicate symbol references.
  • Multiple part per package symbols where the part number is greater number of parts in the package.
  • Multiple part per package symbols where the reference designator is different between parts.
Returns
Number of annotation errors found.
Parameters
aReporterA handler for error reporting.
aAnnotateScopeSee ANNOTATE_SCOPE_T Check the current sheet only if true. Otherwise check the entire schematic.

Definition at line 342 of file annotate.cpp.

344 {
345  SCH_REFERENCE_LIST referenceList;
346  constexpr bool includePowerSymbols = false;
347 
348  // Build the list of symbols
349  switch( aAnnotateScope )
350  {
351  case ANNOTATE_ALL:
352  Schematic().GetSheets().GetSymbols( referenceList );
353  break;
354 
356  GetCurrentSheet().GetSymbols( referenceList, includePowerSymbols );
357  break;
358 
359  case ANNOTATE_SELECTION:
361  EE_SELECTION& selection = selTool->RequestSelection();
362  selection.GetSymbols( referenceList, GetCurrentSheet(), includePowerSymbols );
363  break;
364  }
365 
366  // Empty schematic does not need annotation
367  if( referenceList.GetCount() == 0 )
368  return 0;
369 
370  return referenceList.CheckAnnotation( aErrorHandler );
371 }
Annotate the selection.
Annotate the full schematic.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Return either an existing selection (filtered), or the selection at the current cursor if the existin...
SCHEMATIC & Schematic() const
size_t GetCount() const
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
int CheckAnnotation(ANNOTATION_ERROR_HANDLER aErrorHandler)
Check for annotations errors.
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
SCH_SHEET_PATH & GetCurrentSheet() const
Annotate the current sheet.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, const SCH_SHEET_PATH &aSelectionPath, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false)
Adds SCH_REFERENCE object to aReferences for each symbol in the selection.

References ANNOTATE_ALL, ANNOTATE_CURRENT_SHEET, ANNOTATE_SELECTION, SCH_REFERENCE_LIST::CheckAnnotation(), SCH_REFERENCE_LIST::GetCount(), GetCurrentSheet(), SCHEMATIC::GetSheets(), EE_SELECTION::GetSymbols(), SCH_SHEET_PATH::GetSymbols(), SCH_SHEET_LIST::GetSymbols(), TOOL_MANAGER::GetTool(), TOOLS_HOLDER::m_toolManager, EE_SELECTION_TOOL::RequestSelection(), and Schematic().

Referenced by AnnotateSymbols(), DIALOG_ERC::DIALOG_ERC(), DIALOG_ERC::OnRunERCClick(), and ReadyToNetlist().

◆ CheckForAutoSaveFile()

void EDA_BASE_FRAME::CheckForAutoSaveFile ( const wxFileName &  aFileName)
inherited

Check if an auto save file exists for aFileName and takes the appropriate action depending on the user input.

If an auto save file exists for aFileName, the user is prompted if they wish to replace file aFileName with the auto saved file. If the user chooses to replace the file, the backup file of aFileName is removed, aFileName is renamed to the backup file name, and the auto save file is renamed to aFileName. If user chooses to keep the existing version of aFileName, the auto save file is removed.

Parameters
aFileNameA wxFileName object containing the file name to check.

Definition at line 1069 of file eda_base_frame.cpp.

1070 {
1071  wxCHECK_RET( aFileName.IsOk(), wxT( "Invalid file name!" ) );
1072 
1073  wxFileName autoSaveFileName = aFileName;
1074 
1075  // Check for auto save file.
1076  autoSaveFileName.SetName( GetAutoSaveFilePrefix() + aFileName.GetName() );
1077 
1078  wxLogTrace( traceAutoSave,
1079  wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() );
1080 
1081  if( !autoSaveFileName.FileExists() )
1082  return;
1083 
1084  wxString msg = wxString::Format( _(
1085  "Well this is potentially embarrassing!\n"
1086  "It appears that the last time you were editing the file\n"
1087  "\"%s\"\n"
1088  "it was not saved properly. Do you wish to restore the last saved edits you made?" ),
1089  aFileName.GetFullName()
1090  );
1091 
1092  int response = wxMessageBox( msg, Pgm().App().GetAppDisplayName(), wxYES_NO | wxICON_QUESTION,
1093  this );
1094 
1095  // Make a backup of the current file, delete the file, and rename the auto save file to
1096  // the file name.
1097  if( response == wxYES )
1098  {
1099  if( !wxRenameFile( autoSaveFileName.GetFullPath(), aFileName.GetFullPath() ) )
1100  {
1101  wxMessageBox( _( "The auto save file could not be renamed to the board file name." ),
1102  Pgm().App().GetAppDisplayName(), wxOK | wxICON_EXCLAMATION, this );
1103  }
1104  }
1105  else
1106  {
1107  wxLogTrace( traceAutoSave,
1108  wxT( "Removing auto save file " ) + autoSaveFileName.GetFullPath() );
1109 
1110  // Remove the auto save file when using the previous file as is.
1111  wxRemoveFile( autoSaveFileName.GetFullPath() );
1112  }
1113 }
const wxChar *const traceAutoSave
Flag to enable auto save feature debug tracing.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106
#define _(s)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
static wxString GetAutoSaveFilePrefix()

References _, Format(), EDA_BASE_FRAME::GetAutoSaveFilePrefix(), Pgm(), and traceAutoSave.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles(), and OpenProjectFiles().

◆ checkForNoFullyDefinedLibIds()

bool SCH_EDIT_FRAME::checkForNoFullyDefinedLibIds ( SCH_SHEET aSheet)
private

Verify that the symbol library links aSheet and all of its child sheets have been remapped to the symbol library table.

Parameters
aSheetis the SCH_SHEET object to test.
Returns
true if aSheet and its child sheets have not been remapped.

Definition at line 75 of file sheet.cpp.

76 {
77  wxASSERT( aSheet && aSheet->GetScreen() );
78 
79  wxString msg;
80  SCH_SCREENS newScreens( aSheet );
81 
82  if( newScreens.HasNoFullyDefinedLibIds() )
83  {
84  msg.Printf( _( "The schematic '%s' has not had its symbol library links remapped "
85  "to the symbol library table. The project this schematic belongs to "
86  "must first be remapped before it can be imported into the current "
87  "project." ),
88  aSheet->GetScreen()->GetFileName() );
89  DisplayInfoMessage( this, msg );
90  return true;
91  }
92 
93  return false;
94 }
const wxString & GetFileName() const
Definition: sch_screen.h:145
SCH_SCREEN * GetScreen() const
Definition: sch_sheet.h:103
#define _(s)
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:299
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References _, DisplayInfoMessage(), SCH_SCREEN::GetFileName(), SCH_SHEET::GetScreen(), and SCH_SCREENS::HasNoFullyDefinedLibIds().

Referenced by LoadSheetFromFile().

◆ CheckSheetForRecursion()

bool SCH_EDIT_FRAME::CheckSheetForRecursion ( SCH_SHEET aSheet,
SCH_SHEET_PATH aHierarchy 
)

Verify that aSheet will not cause a recursion error in aHierarchy.

Parameters
aSheetis the SCH_SHEET object to test.
aHierarchyis the SCH_SHEET_PATH where aSheet is going to reside.
Returns
true if aSheet will cause a recursion error in aHierarchy.

Definition at line 47 of file sheet.cpp.

48 {
49  wxASSERT( aSheet && aHierarchy );
50 
51  wxString msg;
52  SCH_SHEET_LIST hierarchy = Schematic().GetSheets(); // The full schematic sheet hierarchy.
53  SCH_SHEET_LIST sheetHierarchy( aSheet ); // This is the hierarchy of the loaded file.
54 
55  wxFileName destFile = aHierarchy->LastScreen()->GetFileName();
56 
57  // SCH_SCREEN object file paths are expected to be absolute. If this assert fires,
58  // something is seriously broken.
59  wxASSERT( destFile.IsAbsolute() );
60 
61  if( hierarchy.TestForRecursion( sheetHierarchy, destFile.GetFullPath() ) )
62  {
63  msg.Printf( _( "The sheet changes cannot be made because the destination sheet already "
64  "has the sheet '%s' or one of its subsheets as a parent somewhere in the "
65  "schematic hierarchy." ),
66  destFile.GetFullPath() );
67  DisplayError( this, msg );
68  return true;
69  }
70 
71  return false;
72 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:271
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
const wxString & GetFileName() const
Definition: sch_screen.h:145
bool TestForRecursion(const SCH_SHEET_LIST &aSrcSheetHierarchy, const wxString &aDestFileName)
Test every SCH_SHEET_PATH in this SCH_SHEET_LIST to verify if adding the sheets stored in aSrcSheetHi...
SCHEMATIC & Schematic() const
#define _(s)
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
SCH_SCREEN * LastScreen()

References _, DisplayError(), SCH_SCREEN::GetFileName(), SCHEMATIC::GetSheets(), SCH_SHEET_PATH::LastScreen(), Schematic(), and SCH_SHEET_LIST::TestForRecursion().

Referenced by LoadSheetFromFile(), and DIALOG_SHEET_PROPERTIES::onSheetFilenameChanged().

◆ ClearExecFlags()

void SCH_EDIT_FRAME::ClearExecFlags ( const int  aFlags)
inline

Clear (removes) specified flags that not needed for next execution of external generator of the netlist or bom.

Parameters
aFlagsis the wxEXEC_* flags, see wxExecute documentation.

Definition at line 775 of file sch_edit_frame.h.

775 { m_exec_flags &= ~( aFlags ); }
int m_exec_flags
Flags of the wxExecute() function to call a custom net list generator.

References m_exec_flags.

◆ ClearFileHistory()

void EDA_BASE_FRAME::ClearFileHistory ( FILE_HISTORY aFileHistory = nullptr)
inherited

Removes all files from the file history.

Parameters
aFileHistoryThe FILE_HISTORY in use. If null, the main application file history is used

Definition at line 956 of file eda_base_frame.cpp.

957 {
958  if( !aFileHistory )
959  aFileHistory = m_fileHistory;
960 
961  wxASSERT( aFileHistory );
962 
963  aFileHistory->ClearFileHistory();
964 
965  // Update the menubar to update the file history menu
966  if( GetMenuBar() )
967  {
968  ReCreateMenuBar();
969  GetMenuBar()->Refresh();
970  }
971 }
void ClearFileHistory()
Clear all entries from the file history.
FILE_HISTORY * m_fileHistory
virtual void ReCreateMenuBar()
Recreates the menu bar.

References FILE_HISTORY::ClearFileHistory(), EDA_BASE_FRAME::m_fileHistory, and EDA_BASE_FRAME::ReCreateMenuBar().

Referenced by GERBVIEW_FRAME::OnClearDrlFileHistory(), KICAD_MANAGER_FRAME::OnClearFileHistory(), PL_EDITOR_FRAME::OnClearFileHistory(), PCB_EDIT_FRAME::OnClearFileHistory(), OnClearFileHistory(), GERBVIEW_FRAME::OnClearGbrFileHistory(), GERBVIEW_FRAME::OnClearJobFileHistory(), and GERBVIEW_FRAME::OnClearZipFileHistory().

◆ ClearFindReplaceStatus()

void SCH_EDIT_FRAME::ClearFindReplaceStatus ( )

Definition at line 885 of file sch_edit_frame.cpp.

886 {
887  m_infoBar->Dismiss();
888 }
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
Definition: infobar.cpp:175
WX_INFOBAR * m_infoBar

References WX_INFOBAR::Dismiss(), and EDA_BASE_FRAME::m_infoBar.

Referenced by SCH_EDITOR_CONTROL::FindNext().

◆ ClearMsgPanel()

◆ ClearUndoORRedoList()

void SCH_EDIT_FRAME::ClearUndoORRedoList ( UNDO_REDO_LIST  whichList,
int  aItemCount = -1 
)
overridevirtual

Free the undo or redo list from aList element.

  • Wrappers are deleted.
  • data pointed by wrappers are deleted if not in use in schematic i.e. when they are copy of a schematic item or they are no more in use (DELETED)
Parameters
whichListis the UNDO_REDO_CONTAINER to clear
aItemCountis the count of items to remove. Use < 0 to remove all items from the beginning of the list.

Reimplemented from EDA_BASE_FRAME.

Definition at line 376 of file schematic_undo_redo.cpp.

377 {
378  if( aItemCount == 0 )
379  return;
380 
381  UNDO_REDO_CONTAINER& list = whichList == UNDO_LIST ? m_undoList : m_redoList;
382 
383  for( PICKED_ITEMS_LIST* command : list.m_CommandsList )
384  {
385  command->ClearListAndDeleteItems();
386  delete command;
387  }
388 
389  list.m_CommandsList.clear();
390 }
UNDO_REDO_CONTAINER m_undoList
A holder to handle a list of undo (or redo) commands.
std::vector< PICKED_ITEMS_LIST * > m_CommandsList
A holder to handle information on schematic or board items.
UNDO_REDO_CONTAINER m_redoList
void ClearListAndDeleteItems()
Delete the list of pickers AND the data pointed by #m_PickedItem or #m_PickedItemLink according to th...

References PICKED_ITEMS_LIST::ClearListAndDeleteItems(), UNDO_REDO_CONTAINER::m_CommandsList, EDA_BASE_FRAME::m_redoList, EDA_BASE_FRAME::m_undoList, and EDA_BASE_FRAME::UNDO_LIST.

Referenced by DIALOG_SYMBOL_REMAP::OnRemapSymbols(), and SaveCopyInUndoList().

◆ ClearUndoRedoList()

void EDA_BASE_FRAME::ClearUndoRedoList ( )
virtualinherited

◆ CommonSettingsChanged()

void SCH_EDIT_FRAME::CommonSettingsChanged ( bool  aEnvVarsChanged,
bool  aTextVarsChanged 
)
overridevirtual

Called after the preferences dialog is run.

Reimplemented from SCH_BASE_FRAME.

Definition at line 1411 of file sch_edit_frame.cpp.

1412 {
1413  SCHEMATIC_SETTINGS& settings = Schematic().Settings();
1414  SCH_BASE_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged );
1415 
1417 
1418  RecreateToolbars();
1419  Layout();
1420  SendSizeEvent();
1421 }
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:167
void RecreateToolbars()
Rebuild all toolbars, and update the checked state of check tools.
void ShowAllIntersheetRefs(bool aShow)
SCHEMATIC & Schematic() const
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
These settings were stored in SCH_BASE_FRAME previously.

References SCH_BASE_FRAME::CommonSettingsChanged(), SCHEMATIC_SETTINGS::m_IntersheetRefsShow, EDA_DRAW_FRAME::RecreateToolbars(), Schematic(), SCHEMATIC::Settings(), and ShowAllIntersheetRefs().

◆ config()

APP_SETTINGS_BASE * EDA_BASE_FRAME::config ( ) const
virtualinherited

Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.

Reimplemented in SYMBOL_EDIT_FRAME, KICAD_MANAGER_FRAME, and FOOTPRINT_EDIT_FRAME.

Definition at line 796 of file eda_base_frame.cpp.

797 {
798  // KICAD_MANAGER_FRAME overrides this
799  return Kiface().KifaceSettings();
800 }
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
APP_SETTINGS_BASE * KifaceSettings() const
Definition: kiface_base.h:92

References Kiface(), and KIFACE_BASE::KifaceSettings().

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ActivateGalCanvas(), BM2CMP_FRAME::BM2CMP_FRAME(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_BOARD_REANNOTATE::DIALOG_BOARD_REANNOTATE(), DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS(), FOOTPRINT_WIZARD_FRAME::doCloseWindow(), SIM_PLOT_FRAME::doCloseWindow(), SCH_BASE_FRAME::eeconfig(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), GERBVIEW_FRAME::GERBVIEW_FRAME(), GRID_MENU::GRID_MENU(), COMMON_TOOLS::GridFast1(), COMMON_TOOLS::GridFast2(), EDA_DRAW_FRAME::IsGridVisible(), SCH_BASE_FRAME::libeditconfig(), EDA_DRAW_FRAME::OnUpdateSelectGrid(), EDA_DRAW_FRAME::OnUpdateSelectZoom(), PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME(), GERBVIEW_FRAME::Read_EXCELLON_File(), DIALOG_GRID_SETTINGS::RebuildGridSizes(), EDA_DRAW_FRAME::resolveCanvasType(), PCB_BASE_EDIT_FRAME::SetBoard(), EDA_DRAW_FRAME::SetGridVisibility(), PL_EDITOR_FRAME::setupTools(), SYMBOL_VIEWER_FRAME::setupTools(), CVPCB_MAINFRAME::setupTools(), GERBVIEW_FRAME::setupTools(), setupTools(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME(), DIALOG_GRID_SETTINGS::TransferDataFromWindow(), PANEL_GERBVIEW_EXCELLON_SETTINGS::TransferDataFromWindow(), DIALOG_GRID_SETTINGS::TransferDataToWindow(), PANEL_GERBVIEW_EXCELLON_SETTINGS::TransferDataToWindow(), ZOOM_MENU::update(), GRID_MENU::update(), EDA_DRAW_FRAME::UpdateGridSelectBox(), EDA_DRAW_FRAME::UpdateZoomSelectBox(), EDA_BASE_FRAME::windowClosing(), ZOOM_MENU::ZOOM_MENU(), and BM2CMP_FRAME::~BM2CMP_FRAME().

◆ ConfigBaseName()

wxString EDA_BASE_FRAME::ConfigBaseName ( )
inlineoverridevirtualinherited

Get the configuration base name.

This is usually the name of the frame set by CTOR, except for frames shown in multiple modes in which case the m_configName must be set to the base name so that a single configuration can be used.

Returns
a base name prefix used in Load/Save settings to build the full name of keys used in configuration.

Reimplemented from TOOLS_HOLDER.

Definition at line 358 of file eda_base_frame.h.

359  {
360  wxString baseCfgName = m_configName.IsEmpty() ? GetName() : m_configName;
361  return baseCfgName;
362  }
wxString m_configName

References EDA_BASE_FRAME::m_configName.

Referenced by EDA_BASE_FRAME::SaveWindowSettings().

◆ ConvertPart()

void SCH_EDIT_FRAME::ConvertPart ( SCH_SYMBOL aSymbol)

Definition at line 237 of file getpart.cpp.

238 {
239  if( !aSymbol || !aSymbol->GetLibSymbolRef() )
240  return;
241 
242  wxString msg;
243 
244  if( !aSymbol->GetLibSymbolRef()->HasConversion() )
245  {
246  LIB_ID id = aSymbol->GetLibSymbolRef()->GetLibId();
247 
248  msg.Printf( _( "No alternate body style found for symbol '%s' in library '%s'." ),
249  id.GetLibItemName().wx_str(),
250  id.GetLibNickname().wx_str() );
251  DisplayError( this, msg );
252  return;
253  }
254 
255  EDA_ITEM_FLAGS savedFlags = aSymbol->GetFlags();
256 
257  aSymbol->SetConvert( aSymbol->GetConvert() + 1 );
258 
259  // ensure m_convert = 1 or 2
260  // 1 = shape 1 = not converted
261  // 2 = shape 2 = first converted shape
262  // > 2 is not currently supported
263  // When m_convert = val max, return to the first shape
264  if( aSymbol->GetConvert() > LIB_ITEM::LIB_CONVERT::DEMORGAN )
265  aSymbol->SetConvert( LIB_ITEM::LIB_CONVERT::BASE );
266 
268  aSymbol->ClearFlags();
269  aSymbol->SetFlags( savedFlags ); // Restore m_flags (modified by SetConvert())
270 
271  // If selected make sure all the now-included pins are selected
272  if( aSymbol->IsSelected() )
274 
275  UpdateItem( aSymbol );
276  OnModify();
277 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:271
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
bool IsSelected() const
Definition: eda_item.h:123
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:153
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
std::uint32_t EDA_ITEM_FLAGS
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Definition: sch_symbol.h:164
static TOOL_ACTION addItemToSel
Selects an item (specified as the event parameter).
Definition: ee_actions.h:56
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
#define _(s)
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
EDA_ITEM_FLAGS GetFlags() const
Definition: eda_item.h:155
void SetConvert(int aConvert)
Definition: sch_symbol.cpp:347
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
int GetConvert() const
Definition: sch_symbol.h:223

References _, EE_ACTIONS::addItemToSel, EDA_ITEM::ClearFlags(), DisplayError(), SCH_SYMBOL::GetConvert(), EDA_ITEM::GetFlags(), SCH_SYMBOL::GetLibSymbolRef(), EDA_ITEM::IsSelected(), TOOLS_HOLDER::m_toolManager, OnModify(), TOOL_MANAGER::RunAction(), SCH_SYMBOL::SetConvert(), EDA_ITEM::SetFlags(), TestDanglingEnds(), and SCH_BASE_FRAME::UpdateItem().

Referenced by SCH_EDIT_TOOL::ConvertDeMorgan().

◆ CreateArchiveLibrary()

bool SCH_EDIT_FRAME::CreateArchiveLibrary ( const wxString &  aFileName)

Create a library aFileName that contains all symbols used in the current schematic.

Parameters
aFileNameThe full path and file name of the archive library.
Returns
True if aFileName was written successfully.

Definition at line 65 of file libarch.cpp.

66 {
67  wxString tmp;
68  wxString errorMsg;
69  SCH_SCREENS screens( Schematic().Root() );
70 
71  // Create a new empty library to archive symbols:
72  std::unique_ptr<SYMBOL_LIB> archLib = std::make_unique<SYMBOL_LIB>( SCH_LIB_TYPE::LT_EESCHEMA,
73  aFileName );
74 
75  // Save symbols to file only when the library will be fully filled
76  archLib->EnableBuffering();
77 
78  /* Examine all screens (not hierarchical sheets) used in the schematic and build a
79  * library of unique symbols found in all screens. Complex hierarchies are not a
80  * problem because we just want to know the library symbols used in the schematic
81  * not their reference.
82  */
83  for( SCH_SCREEN* screen = screens.GetFirst(); screen; screen = screens.GetNext() )
84  {
85 
86  for( SCH_ITEM* aItem : screen->Items().OfType( SCH_SYMBOL_T ) )
87  {
88  LIB_SYMBOL* libSymbol = nullptr;
89  SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( aItem );
90 
91  try
92  {
93  if( archLib->FindSymbol( symbol->GetLibId() ) )
94  continue;
95 
96  libSymbol = GetLibSymbol( symbol->GetLibId(), true );
97  }
98  catch( const IO_ERROR& )
99  {
100  // Queue up error messages for later.
101  tmp.Printf( _( "Failed to add symbol %s to library file '%s'." ),
102  symbol->GetLibId().GetUniStringLibItemName(),
103  aFileName );
104 
105  // Don't bail out here. Attempt to add as many of the symbols to the library
106  // as possible.
107  }
108  catch( ... )
109  {
110  tmp = _( "Unexpected exception occurred." );
111  }
112 
113  if( libSymbol )
114  {
115  std::unique_ptr<LIB_SYMBOL> flattenedSymbol = libSymbol->Flatten();
116 
117  // Use the full LIB_ID as the symbol name to prevent symbol name collisions.
118  flattenedSymbol->SetName( symbol->GetLibId().GetUniStringLibId() );
119 
120  // AddSymbol() does first clone the symbol before adding.
121  archLib->AddSymbol( flattenedSymbol.get() );
122  }
123  else
124  {
125  tmp.Printf( _( "Symbol %s not found in any library or cache." ),
126  symbol->GetLibId().GetUniStringLibId() );
127  }
128 
129  if( !tmp.empty() && !errorMsg.Contains( symbol->GetLibId().GetUniStringLibId() ) )
130  {
131  if( errorMsg.empty() )
132  errorMsg += tmp;
133  else
134  errorMsg += "\n" + tmp;
135  }
136  }
137  }
138 
139  if( !errorMsg.empty() )
140  {
141  tmp.Printf( _( "Errors occurred creating symbol library %s." ), aFileName );
142  DisplayErrorMessage( this, tmp, errorMsg );
143  }
144 
145  archLib->EnableBuffering( false );
146 
147  try
148  {
149  archLib->Save( false );
150  }
151  catch( const IO_ERROR& ioe )
152  {
153  errorMsg.Printf( _( "Failed to save symbol library file '%s'." ), aFileName );
154  DisplayErrorMessage( this, errorMsg, ioe.What() );
155  return false;
156  }
157  catch( std::exception& error )
158  {
159  errorMsg.Printf( _( "Failed to save symbol library file '%s'." ), aFileName );
160  DisplayErrorMessage( this, errorMsg, error.what() );
161  return false;
162  }
163 
164  return true;
165 }
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:284
Define a library symbol object.
Definition: lib_symbol.h:96
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
Definition: lib_symbol.cpp:332
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:30
SCHEMATIC & Schematic() const
#define _(s)
Schematic symbol object.
Definition: sch_symbol.h:78
LIB_SYMBOL * GetLibSymbol(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load symbol from symbol library table.
wxString GetUniStringLibId() const
Definition: lib_id.h:134
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:75
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193
const wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
Definition: lib_id.h:114
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557
const LIB_ID & GetLibId() const
Definition: sch_symbol.h:147

References _, DisplayErrorMessage(), LIB_SYMBOL::Flatten(), SCH_SCREENS::GetFirst(), SCH_SYMBOL::GetLibId(), SCH_BASE_FRAME::GetLibSymbol(), SCH_SCREENS::GetNext(), LIB_ID::GetUniStringLibId(), LIB_ID::GetUniStringLibItemName(), LT_EESCHEMA, SCH_SYMBOL_T, Schematic(), and IO_ERROR::What().

Referenced by CreateArchiveLibraryCacheFile().

◆ CreateArchiveLibraryCacheFile()

bool SCH_EDIT_FRAME::CreateArchiveLibraryCacheFile ( bool  aUseCurrentSheetFilename = false)

Create a symbol library file with the name of the root document plus the '-cache' suffix,.

This file will contain all symbols used in the current schematic.

Parameters
aUseCurrentSheetFilenameset to false to use the root sheet filename (default) or true to use the currently opened sheet.
Returns
true if the file was written successfully.

Definition at line 42 of file libarch.cpp.

43 {
44  wxFileName fn;
45 
46  if( aUseCurrentSheetFilename )
47  fn = GetScreen()->GetFileName();
48  else
49  fn = Schematic().RootScreen()->GetFileName();
50 
51  fn.SetName( fn.GetName() + "-cache" );
52  fn.SetExt( LegacySymbolLibFileExtension );
53 
54  bool success = CreateArchiveLibrary( fn.GetFullPath() );
55 
56  // Update the schematic symbol library links.
57  // because the lib cache has changed
58  SCH_SCREENS schematic( Schematic().Root() );
59  schematic.UpdateSymbolLinks();
60 
61  return success;
62 }
const wxString & GetFileName() const
Definition: sch_screen.h:145
const std::string LegacySymbolLibFileExtension
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCHEMATIC & Schematic() const
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:117
bool CreateArchiveLibrary(const wxString &aFileName)
Create a library aFileName that contains all symbols used in the current schematic.
Definition: libarch.cpp:65
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References CreateArchiveLibrary(), SCH_SCREEN::GetFileName(), GetScreen(), LegacySymbolLibFileExtension, SCHEMATIC::RootScreen(), and Schematic().

◆ createCanvas()

void SCH_BASE_FRAME::createCanvas ( )
inherited

Definition at line 285 of file sch_base_frame.cpp.

286 {
288 
289  // Allows only a CAIRO or OPENGL canvas:
292  {
294  }
295 
296  SetCanvas( new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_frameSize,
299 }
KIGFX::GAL_DISPLAY_OPTIONS & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
static constexpr GAL_TYPE GAL_FALLBACK
virtual void ActivateGalCanvas()
Use to start up the GAL drawing canvas.
void SetCanvas(EDA_DRAW_PANEL_GAL *aPanel)
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting()
Returns the canvas type stored in the application settings.

References EDA_DRAW_FRAME::ActivateGalCanvas(), EDA_DRAW_PANEL_GAL::GAL_FALLBACK, EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL, EDA_DRAW_FRAME::GetGalDisplayOptions(), EDA_DRAW_FRAME::loadCanvasTypeSetting(), EDA_DRAW_FRAME::m_canvasType, EDA_BASE_FRAME::m_frameSize, and EDA_DRAW_FRAME::SetCanvas().

Referenced by SCH_BASE_FRAME::SCH_BASE_FRAME().

◆ CreateInfoBar()

void EDA_BASE_FRAME::CreateInfoBar ( )
inherited

Definition at line 821 of file eda_base_frame.cpp.

822 {
823 #if defined( __WXOSX_MAC__ )
825 #else
826  m_infoBar = new WX_INFOBAR( this, &m_auimgr );
827 
828  m_auimgr.AddPane( m_infoBar, EDA_PANE().InfoBar().Name( "InfoBar" ).Top().Layer(1) );
829 #endif
830 }
wxAuiManager m_auimgr
virtual wxWindow * GetToolCanvas() const =0
Canvas access.
Specialization of the wxAuiPaneInfo class for KiCad panels.
A modified version of the wxInfoBar class that allows us to:
Definition: infobar.h:73
WX_INFOBAR * m_infoBar

References TOOLS_HOLDER::GetToolCanvas(), EDA_BASE_FRAME::m_auimgr, and EDA_BASE_FRAME::m_infoBar.

◆ CreateScreens()

void SCH_EDIT_FRAME::CreateScreens ( )

Definition at line 548 of file sch_edit_frame.cpp.

549 {
550  m_schematic->Reset();
551  m_schematic->SetProject( &Prj() );
552 
554 
555  SCH_SCREEN* rootScreen = new SCH_SCREEN( m_schematic );
556  m_schematic->Root().SetScreen( rootScreen );
557  SetScreen( Schematic().RootScreen() );
558 
559  m_schematic->RootScreen()->SetFileName( wxEmptyString );
560 
561  // Don't leave root page number empty
562  SCH_SHEET_PATH rootSheetPath;
563  rootSheetPath.push_back( &m_schematic->Root() );
564  m_schematic->RootScreen()->SetPageNumber( wxT( "1" ) );
565  m_schematic->Root().AddInstance( rootSheetPath.Path() );
566  m_schematic->Root().SetPageNumber( rootSheetPath, wxT( "1" ) );
567 
568  if( GetScreen() == nullptr )
569  {
570  SCH_SCREEN* screen = new SCH_SCREEN( m_schematic );
571  SetScreen( screen );
572  }
573 }
SCHEMATIC * m_schematic
The currently loaded schematic.
void SetPageNumber(const wxString &aPageNumber)
Definition: base_screen.h:79
void SetScreen(BASE_SCREEN *aScreen) override
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
Definition: sch_sheet.cpp:156
void SetPageNumber(const SCH_SHEET_PATH &aInstance, const wxString &aPageNumber)
Set the page number for the sheet instance aInstance.
Definition: sch_sheet.cpp:1129
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SetRoot(SCH_SHEET *aRootSheet)
Initialize the schematic with a new root sheet.
Definition: schematic.cpp:104
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
SCHEMATIC & Schematic() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void SetProject(PROJECT *aPrj)
Definition: schematic.cpp:76
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:54
void Reset()
Initialize this schematic to a blank one, unloading anything existing.
Definition: schematic.cpp:51
SCH_SHEET & Root() const
Definition: schematic.h:92
void SetFileName(const wxString &aFileName)
Set the file name for this screen to aFileName.
Definition: sch_screen.cpp:108
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:117
bool AddInstance(const KIID_PATH &aInstance)
Add a new instance aSheetPath to the instance list.
Definition: sch_sheet.cpp:1087

References SCH_SHEET::AddInstance(), GetScreen(), m_schematic, SCH_SHEET_PATH::Path(), KIWAY_HOLDER::Prj(), SCH_SHEET_PATH::push_back(), SCHEMATIC::Reset(), SCHEMATIC::Root(), SCHEMATIC::RootScreen(), Schematic(), SCH_SCREEN::SetFileName(), BASE_SCREEN::SetPageNumber(), SCH_SHEET::SetPageNumber(), SCHEMATIC::SetProject(), SCHEMATIC::SetRoot(), SCH_SHEET::SetScreen(), and SetScreen().

Referenced by importFile(), and OpenProjectFiles().

◆ CreateServer()

void KIWAY_PLAYER::CreateServer ( int  service,
bool  local = true 
)
inherited

Definition at line 43 of file eda_dde.cpp.

44 {
45  wxIPV4address addr;
46 
47  // Set the port number
48  addr.Service( service );
49 
50  // Listen on localhost only if requested
51  if( local )
52  addr.Hostname( HOSTNAME );
53 
54  delete m_socketServer;
55  m_socketServer = new wxSocketServer( addr );
56 
57  m_socketServer->SetNotify( wxSOCKET_CONNECTION_FLAG );
58  m_socketServer->SetEventHandler( *this, ID_EDA_SOCKET_EVENT_SERV );
59  m_socketServer->Notify( true );
60 }
static const wxString HOSTNAME(wxT("localhost"))
wxSocketServer * m_socketServer
Definition: kiway_player.h:218

References HOSTNAME(), ID_EDA_SOCKET_EVENT_SERV, and KIWAY_PLAYER::m_socketServer.

Referenced by SCH::IFACE::CreateWindow().

◆ CurrentToolName()

std::string TOOLS_HOLDER::CurrentToolName ( ) const
inherited

Definition at line 100 of file tools_holder.cpp.

101 {
102  if( m_toolStack.empty() )
103  return ACTIONS::selectionTool.GetName();
104  else
105  return m_toolStack.back();
106 }
std::vector< std::string > m_toolStack
Definition: tools_holder.h:164
static TOOL_ACTION selectionTool
Definition: actions.h:153

References TOOLS_HOLDER::m_toolStack, and ACTIONS::selectionTool.

Referenced by TOOL_MANAGER::processEvent(), and TOOLS_HOLDER::ShowChangedLanguage().

◆ DefaultExecFlags()

void SCH_EDIT_FRAME::DefaultExecFlags ( )
inline

Reset the execution flags to defaults for external netlist and bom generators.

Definition at line 760 of file sch_edit_frame.h.

760 { m_exec_flags = wxEXEC_SYNC; }
int m_exec_flags
Flags of the wxExecute() function to call a custom net list generator.

References m_exec_flags.

Referenced by WriteNetListFile().

◆ DeleteAnnotation()

void SCH_EDIT_FRAME::DeleteAnnotation ( ANNOTATE_SCOPE_T  aAnnotateScope,
bool *  appendUndo 
)

Clear the current symbol annotation.

Parameters
aCurrentSheetOnlyWhere to clear the annotation. See ANNOTATE_SCOPE_T
appendUndotrue to add the action to the previous undo list

Definition at line 63 of file annotate.cpp.

64 {
65  auto clearSymbolAnnotation =
66  [&]( EDA_ITEM* aItem, SCH_SCREEN* aScreen, SCH_SHEET_PATH* aSheet )
67  {
68  SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( aItem );
69 
70  SaveCopyInUndoList( aScreen, symbol, UNDO_REDO::CHANGED, *aAppendUndo );
71  *aAppendUndo = true;
72  symbol->ClearAnnotation( aSheet );
73  };
74 
75  auto clearSheetAnnotation =
76  [&]( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aSheet )
77  {
78  for( SCH_ITEM* item : aScreen->Items().OfType( SCH_SYMBOL_T ) )
79  clearSymbolAnnotation( item, aScreen, aSheet );
80  };
81 
82  SCH_SCREEN* screen = GetScreen();
83  SCH_SHEET_PATH currentSheet = GetCurrentSheet();
84 
85  switch( aAnnotateScope )
86  {
87  case ANNOTATE_ALL:
88  {
89  for( const SCH_SHEET_PATH& sheet : Schematic().GetSheets() )
90  clearSheetAnnotation( sheet.LastScreen(), nullptr );
91 
92  break;
93  }
95  {
96  clearSheetAnnotation( screen, &currentSheet );
97  break;
98  }
99 
100  case ANNOTATE_SELECTION:
101  {
103  EE_SELECTION& selection = selTool->RequestSelection();
104 
105  for( EDA_ITEM* item : selection.Items() )
106  {
107  if( item->Type() == SCH_SYMBOL_T )
108  clearSymbolAnnotation( item, screen, &currentSheet );
109  }
110  break;
111  }
112  }
113 
114  // Update the references for the sheet that is currently being displayed.
116 
117  SyncView();
118  GetCanvas()->Refresh();
119  OnModify();
120 
121  // Must go after OnModify() so the connectivity graph has been updated
123 }
EE_TYPE OfType(KICAD_T aType) const
Definition: sch_rtree.h:216
void UpdateNetHighlightStatus()
Annotate the selection.
Annotate the full schematic.
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath)
Clear exiting symbol annotation.
void UpdateAllScreenReferences()
Update all the symbol references for this sheet path.
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Return either an existing selection (filtered), or the selection at the current cursor if the existin...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SyncView()
Mark all items for refresh.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
SCHEMATIC & Schematic() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
Schematic symbol object.
Definition: sch_symbol.h:78
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
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
SCH_SHEET_PATH & GetCurrentSheet() const
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
Annotate the current sheet.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193

References ANNOTATE_ALL, ANNOTATE_CURRENT_SHEET, ANNOTATE_SELECTION, CHANGED, SCH_SYMBOL::ClearAnnotation(), SCH_BASE_FRAME::GetCanvas(), GetCurrentSheet(), GetScreen(), TOOL_MANAGER::GetTool(), SCH_SCREEN::Items(), TOOLS_HOLDER::m_toolManager, EE_RTREE::OfType(), OnModify(), EDA_DRAW_PANEL_GAL::Refresh(), EE_SELECTION_TOOL::RequestSelection(), SaveCopyInUndoList(), SCH_SYMBOL_T, Schematic(), SCH_BASE_FRAME::SyncView(), SCH_SHEET_PATH::UpdateAllScreenReferences(), and UpdateNetHighlightStatus().

Referenced by AnnotateSymbols(), and DIALOG_ANNOTATE::OnClearAnnotationClick().

◆ DeleteJunction()

void SCH_EDIT_FRAME::DeleteJunction ( SCH_ITEM aItem,
bool  aAppend = false 
)

Removes a given junction and heals any wire segments under the junction.

Parameters
aItemThe junction to delete
aAppendTrue if we are updating an ongoing commit

Note that std::list or similar is required here as we may insert values in the loop below. This will invalidate iterators in a std::vector or std::deque

Definition at line 377 of file bus-wire-junction.cpp.

378 {
379  SCH_SCREEN* screen = GetScreen();
380  PICKED_ITEMS_LIST undoList;
383 
384  auto remove_item = [ & ]( SCH_ITEM* aItem ) -> void
385  {
386  aItem->SetFlags( STRUCT_DELETED );
387  undoList.PushItem( ITEM_PICKER( screen, aItem, UNDO_REDO::DELETED ) );
388  };
389 
390  remove_item( aJunction );
391  RemoveFromScreen( aJunction, screen );
392 
395  std::list<SCH_LINE*> lines;
396 
397  for( SCH_ITEM* item : screen->Items().Overlapping( SCH_LINE_T, aJunction->GetPosition() ) )
398  {
399  SCH_LINE* line = static_cast<SCH_LINE*>( item );
400 
401  if( line->IsType( wiresAndBuses ) && line->IsEndPoint( aJunction->GetPosition() )
402  && !( line->GetEditFlags() & STRUCT_DELETED ) )
403  lines.push_back( line );
404  }
405 
406  alg::for_all_pairs( lines.begin(), lines.end(),
407  [&]( SCH_LINE* firstLine, SCH_LINE* secondLine )
408  {
409  if( ( firstLine->GetEditFlags() & STRUCT_DELETED )
410  || ( secondLine->GetEditFlags() & STRUCT_DELETED )
411  || !secondLine->IsParallel( firstLine ) )
412  {
413  return;
414  }
415 
416  // Remove identical lines
417  if( firstLine->IsEndPoint( secondLine->GetStartPoint() )
418  && firstLine->IsEndPoint( secondLine->GetEndPoint() ) )
419  {
420  remove_item( firstLine );
421  return;
422  }
423 
424  // Try to merge the remaining lines
425  if( SCH_LINE* line = secondLine->MergeOverlap( screen, firstLine, false ) )
426  {
427  remove_item( firstLine );
428  remove_item( secondLine );
429  undoList.PushItem( ITEM_PICKER( screen, line, UNDO_REDO::NEWITEM ) );
430  AddToScreen( line, screen );
431 
432  if( line->IsSelected() )
433  selectionTool->AddItemToSel( line, true /*quiet mode*/ );
434 
435  lines.push_back( line );
436  }
437  } );
438 
439  SaveCopyInUndoList( undoList, UNDO_REDO::DELETED, aAppend );
440 
441  for( SCH_LINE* line : lines )
442  {
443  if( line->GetEditFlags() & STRUCT_DELETED )
444  {
445  if( line->IsSelected() )
446  selectionTool->RemoveItemFromSel( line, true /*quiet mode*/ );
447 
448  RemoveFromScreen( line, screen );
449  }
450  }
451 }
SCH_LINE * MergeOverlap(SCH_SCREEN *aScreen, SCH_LINE *aLine, bool aCheckJunctions)
Check line against aLine to see if it overlaps and merge if it does.
Definition: sch_line.cpp:453
bool IsSelected() const
Definition: eda_item.h:123
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:153
void RemoveFromScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Remove an item from the screen (and view) aScreen is the screen the item is located on,...
void PushItem(const ITEM_PICKER &aItem)
Push aItem to the top of the list.
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void for_all_pairs(_InputIterator __first, _InputIterator __last, _Function __f)
Apply a function to every possible pair of elements of a sequence.
Definition: kicad_algo.h:83
#define STRUCT_DELETED
flag indication structures to be erased
bool IsEndPoint(const wxPoint &aPoint) const
Definition: sch_line.h:80
EDA_ITEM_FLAGS GetEditFlags() const
Definition: eda_item.h:158
A holder to handle information on schematic or board items.
EE_TYPE Overlapping(const EDA_RECT &aRect) const
Definition: sch_rtree.h:221
int RemoveItemFromSel(const TOOL_EVENT &aEvent)
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
int AddItemToSel(const TOOL_EVENT &aEvent)
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
bool IsType(const KICAD_T aScanTypes[]) const override
Check whether the item is one of the listed types.
Definition: sch_line.h:62
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193

References EE_SELECTION_TOOL::AddItemToSel(), SCH_BASE_FRAME::AddToScreen(), DELETED, EOT, alg::for_all_pairs(), EDA_ITEM::GetEditFlags(), EDA_ITEM::GetPosition(), GetScreen(), TOOL_MANAGER::GetTool(), SCH_LINE::IsEndPoint(), SCH_LINE::IsType(), SCH_SCREEN::Items(), TOOLS_HOLDER::m_toolManager, SCH_LINE::MergeOverlap(), NEWITEM, EE_RTREE::Overlapping(), PICKED_ITEMS_LIST::PushItem(), SCH_BASE_FRAME::RemoveFromScreen(), EE_SELECTION_TOOL::RemoveItemFromSel(), SaveCopyInUndoList(), SCH_LINE_LOCATE_BUS_T, SCH_LINE_LOCATE_WIRE_T, SCH_LINE_T, and STRUCT_DELETED.

Referenced by SCH_EDIT_TOOL::DoDelete().

◆ Destroy()

◆ DismissModal()

void KIWAY_PLAYER::DismissModal ( bool  aRetVal,
const wxString &  aResult = wxEmptyString 
)
inherited

Definition at line 166 of file kiway_player.cpp.

167 {
168  m_modal_ret_val = aRetVal;
169  m_modal_string = aResult;
170 
171  if( m_modal_loop )
172  {
173  m_modal_loop->Exit();
174  m_modal_loop = nullptr; // this marks it as dismissed.
175  }
176 
177  Show( false );
178 }
bool m_modal_ret_val
Definition: kiway_player.h:216
wxString m_modal_string
Definition: kiway_player.h:215
WX_EVENT_LOOP * m_modal_loop
< Points to nested event_loop. NULL means not modal and dismissed.
Definition: kiway_player.h:213

References KIWAY_PLAYER::m_modal_loop, KIWAY_PLAYER::m_modal_ret_val, and KIWAY_PLAYER::m_modal_string.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), SYMBOL_VIEWER_FRAME::doCloseWindow(), FOOTPRINT_VIEWER_FRAME::doCloseWindow(), FOOTPRINT_WIZARD_FRAME::doCloseWindow(), FOOTPRINT_WIZARD_FRAME::ExportSelectedFootprint(), and SYMBOL_VIEWER_FRAME::FinishModal().

◆ DisplayCurrentSheet()

void SCH_EDIT_FRAME::DisplayCurrentSheet ( )

Draw the current sheet on the display.

Definition at line 285 of file hierarch.cpp.

286 {
289  SCH_SCREEN* screen = GetCurrentSheet().LastScreen();
290 
291  wxASSERT( screen );
292 
293  SetScreen( screen );
294 
295  // update the References
298 
299  if( !screen->m_zoomInitialized )
300  {
301  initScreenZoom();
302  }
303  else
304  {
305  // Set zoom to last used in this screen
306  GetCanvas()->GetView()->SetScale( GetScreen()->m_LastZoomLevel );
307  RedrawScreen( (wxPoint) GetScreen()->m_ScrollCenter, false );
308  }
309 
310  UpdateTitle();
311 
314  editTool->UpdateNetHighlighting( dummy );
315 
316  HardRedraw(); // Ensure all items are redrawn (especially the drawing-sheet items)
317 }
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
virtual void RedrawScreen(const wxPoint &aCenterPoint, bool aWarpPointer)
void SetScreen(BASE_SCREEN *aScreen) override
static TOOL_ACTION cancelInteractive
Definition: actions.h:62
void UpdateTitle()
Set the main window title bar text.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
void UpdateAllScreenReferences()
Update all the symbol references for this sheet path.
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:72
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
Handle actions specific to the schematic editor.
void HardRedraw() override
Rebuild the GAL and redraw the screen.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Generic, UI-independent tool event.
Definition: tool_event.h:152
void initScreenZoom()
Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:53
int UpdateNetHighlighting(const TOOL_EVENT &aEvent)
Launch a tool to highlight nets.
void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 }) override
Set the scaling factor, zooming around a given anchor point.
Definition: sch_view.cpp:72
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
SCH_SCREEN * LastScreen()
bool m_zoomInitialized
Definition: sch_screen.h:512
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
SCH_SHEET_PATH & GetCurrentSheet() const

References ACTIONS::cancelInteractive, EE_ACTIONS::clearSelection, dummy(), SCH_BASE_FRAME::GetCanvas(), GetCurrentSheet(), GetScreen(), TOOL_MANAGER::GetTool(), SCH_DRAW_PANEL::GetView(), HardRedraw(), initScreenZoom(), SCH_SHEET_PATH::LastScreen(), TOOLS_HOLDER::m_toolManager, SCH_SCREEN::m_zoomInitialized, SCH_BASE_FRAME::RedrawScreen(), TOOL_MANAGER::RunAction(), KIGFX::SCH_VIEW::SetScale(), SetScreen(), SetSheetNumberAndCount(), SCH_SHEET_PATH::UpdateAllScreenReferences(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), and UpdateTitle().

Referenced by SCH_NAVIGATE_TOOL::EnterSheet(), SCH_EDITOR_CONTROL::EnterSheet(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_NAVIGATE_TOOL::HypertextCommand(), SCH_NAVIGATE_TOOL::LeaveSheet(), SCH_EDITOR_CONTROL::LeaveSheet(), DIALOG_ERC::OnERCItemSelected(), OnPageSettingsChange(), and HIERARCHY_NAVIG_DLG::onSelectSheetPath().

◆ DisplayGridMsg()

void EDA_DRAW_FRAME::DisplayGridMsg ( )
virtualinherited

Display current grid size in the status bar.

Reimplemented in PCB_BASE_FRAME, GERBVIEW_FRAME, and PL_EDITOR_FRAME.

Definition at line 515 of file eda_draw_frame.cpp.

516 {
517  wxString line;
518 
519  line.Printf( "grid %s",
520  MessageTextFromValue( GetUserUnits(), GetCanvas()->GetGAL()->GetGridSize().x,
521  false ) );
522 
523  SetStatusText( line, 4 );
524 }
wxString MessageTextFromValue(EDA_UNITS aUnits, int aValue, bool aAddUnitLabel, EDA_DATA_TYPE aType)
Convert a value to a string using double notation.
Definition: base_units.cpp:104
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
EDA_UNITS GetUserUnits() const
Return the user units currently in use.

References EDA_DRAW_FRAME::GetCanvas(), EDA_BASE_FRAME::GetUserUnits(), and MessageTextFromValue().

Referenced by SCH_BASE_FRAME::UpdateStatusBar().

◆ DisplayToolMsg()

void EDA_DRAW_FRAME::DisplayToolMsg ( const wxString &  msg)
overridevirtualinherited

Reimplemented from TOOLS_HOLDER.

Definition at line 509 of file eda_draw_frame.cpp.

510 {
511  SetStatusText( msg, 6 );
512 }

Referenced by EDIT_TOOL::Duplicate(), and PCB_CONTROL::Paste().

◆ DisplayUnitsMsg()

void EDA_DRAW_FRAME::DisplayUnitsMsg ( )
inherited

Display current unit pane in the status bar.

Definition at line 527 of file eda_draw_frame.cpp.

528 {
529  wxString msg;
530 
531  switch( m_userUnits )
532  {
533  case EDA_UNITS::INCHES: msg = _( "inches" ); break;
534  case EDA_UNITS::MILS: msg = _( "mils" ); break;
535  case EDA_UNITS::MILLIMETRES: msg = _( "mm" ); break;
536  default: msg = _( "Units" ); break;
537  }
538 
539  SetStatusText( msg, 5 );
540 }
#define _(s)
EDA_UNITS m_userUnits
Map containing the UI update handlers registered with wx for each action.

References _, INCHES, EDA_BASE_FRAME::m_userUnits, MILLIMETRES, and MILS.

Referenced by EDA_DRAW_FRAME::UpdateGridSelectBox(), SCH_BASE_FRAME::UpdateStatusBar(), and EDA_DRAW_FRAME::UpdateStatusBar().

◆ doAutoSave()

bool SCH_EDIT_FRAME::doAutoSave ( )
overrideprotectedvirtual

Save the schematic files that have been modified and not yet saved.

Returns
true if the auto save was successful otherwise false.

Reimplemented from EDA_BASE_FRAME.

Definition at line 1065 of file eeschema/files-io.cpp.

1066 {
1067  wxFileName tmpFileName = Schematic().Root().GetFileName();
1068  wxFileName fn = tmpFileName;
1069  wxFileName tmp;
1070  SCH_SCREENS screens( Schematic().Root() );
1071 
1072  // Don't run autosave if content has not been modified
1073  if( !IsContentModified() )
1074  return true;
1075 
1076  bool autoSaveOk = true;
1077 
1078  if( fn.GetPath().IsEmpty() )
1079  tmp.AssignDir( Prj().GetProjectPath() );
1080  else
1081  tmp.AssignDir( fn.GetPath() );
1082 
1083  if( !tmp.IsOk() )
1084  return false;
1085 
1086  if( !IsWritable( tmp ) )
1087  return false;
1088 
1089  wxString title = GetTitle(); // Save frame title, that can be modified by the save process
1090 
1091  for( size_t i = 0; i < screens.GetCount(); i++ )
1092  {
1093  // Only create auto save files for the schematics that have been modified.
1094  if( !screens.GetScreen( i )->IsContentModified() )
1095  continue;
1096 
1097  tmpFileName = fn = screens.GetScreen( i )->GetFileName();
1098 
1099  // Auto save file name is the normal file name prefixed with GetAutoSavePrefix().
1100  fn.SetName( GetAutoSaveFilePrefix() + fn.GetName() );
1101 
1102  if( saveSchematicFile( screens.GetSheet( i ), fn.GetFullPath() ) )
1103  screens.GetScreen( i )->SetContentModified();
1104  else
1105  autoSaveOk = false;
1106  }
1107 
1108  if( autoSaveOk )
1109  {
1110  m_autoSaveState = false;
1111 
1112  if( !Kiface().IsSingle() &&
1113  GetSettingsManager()->GetCommonSettings()->m_Backup.backup_on_autosave )
1114  {
1116  }
1117  }
1118 
1119  SetTitle( title );
1120 
1121  return autoSaveOk;
1122 }
SETTINGS_MANAGER * GetSettingsManager() const
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
bool IsWritable(const wxFileName &aFileName)
Checks if aFileName can be written.
bool IsContentModified() const override
Get if the current schematic has been modified but not saved.
bool TriggerBackupIfNeeded(REPORTER &aReporter) const
Calls BackupProject if a new backup is needed according to the current backup policy.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
bool saveSchematicFile(SCH_SHEET *aSheet, const wxString &aSavePath)
Save aSheet to a schematic file.
SCHEMATIC & Schematic() const
wxString GetFileName() const
Return the filename corresponding to this sheet.
Definition: sch_sheet.h:315
static wxString GetAutoSaveFilePrefix()
SCH_SHEET & Root() const
Definition: schematic.h:92
static REPORTER & GetInstance()
Definition: reporter.cpp:117
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References EDA_BASE_FRAME::GetAutoSaveFilePrefix(), SCH_SCREENS::GetCount(), SCH_SCREEN::GetFileName(), SCH_SHEET::GetFileName(), NULL_REPORTER::GetInstance(), SCH_SCREENS::GetScreen(), EDA_BASE_FRAME::GetSettingsManager(), SCH_SCREENS::GetSheet(), BASE_SCREEN::IsContentModified(), IsContentModified(), EDA_BASE_FRAME::IsWritable(), Kiface(), EDA_BASE_FRAME::m_autoSaveState, KIWAY_HOLDER::Prj(), SCHEMATIC::Root(), saveSchematicFile(), Schematic(), BASE_SCREEN::SetContentModified(), and SETTINGS_MANAGER::TriggerBackupIfNeeded().

◆ doCloseWindow()

void SCH_EDIT_FRAME::doCloseWindow ( )
overrideprivatevirtual

Reimplemented from EDA_BASE_FRAME.

Definition at line 665 of file sch_edit_frame.cpp.

666 {
667  SCH_SHEET_LIST sheetlist = Schematic().GetSheets();
668 
669  // Shutdown all running tools
670  if( m_toolManager )
672 
674 
675  // Close the find dialog and preserve its setting if it is displayed.
676  if( m_findReplaceDialog )
677  {
680 
681  m_findReplaceDialog->Destroy();
682  m_findReplaceDialog = nullptr;
683  }
684 
685  if( FindHierarchyNavigator() )
686  FindHierarchyNavigator()->Close( true );
687 
688  if( Kiway().Player( FRAME_SIMULATOR, false ) )
690 
691  SCH_SCREENS screens( Schematic().Root() );
692  wxFileName fn;
693 
694  for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
695  {
696  fn = Prj().AbsolutePath( screen->GetFileName() );
697 
698  // Auto save file name is the normal file name prepended with GetAutoSaveFilePrefix().
699  fn.SetName( GetAutoSaveFilePrefix() + fn.GetName() );
700 
701  if( fn.FileExists() && fn.IsFileWritable() )
702  wxRemoveFile( fn.GetFullPath() );
703  }
704 
705  sheetlist.ClearModifyStatus();
706 
707  wxString fileName = Prj().AbsolutePath( Schematic().RootScreen()->GetFileName() );
708 
709  if( !Schematic().GetFileName().IsEmpty() && !Schematic().RootScreen()->IsEmpty() )
710  UpdateFileHistory( fileName );
711 
712  Schematic().RootScreen()->Clear();
713 
714  // all sub sheets are deleted, only the main sheet is usable
716 
717  // Clear view before destroying schematic as repaints depend on schematic being valid
718  SetScreen( nullptr );
719 
720  Schematic().Reset();
721 
722  Destroy();
723 }
void ShutdownAllTools()
Shutdown all tools with a currently registered event loop in this tool manager by waking them up with...
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
HIERARCHY_NAVIG_DLG * FindHierarchyNavigator()
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Definition: kiway_holder.h:53
wxArrayString GetFindEntries() const
void SetScreen(BASE_SCREEN *aScreen) override
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:145
wxArrayString m_findStringHistoryList
std::shared_ptr< NGSPICE_SIMULATOR_SETTINGS > m_NgspiceSimulatorSettings
Ngspice simulator settings.
void UpdateFileHistory(const wxString &FullFileName, FILE_HISTORY *aFileHistory=nullptr)
Update the list of recently opened files.
virtual const wxString AbsolutePath(const wxString &aFileName) const
Fix up aFileName if it is relative to the project's directory to be an absolute path and filename.
Definition: project.cpp:269
void Clear(bool aFree=true)
Delete all draw items and clears the project settings.
Definition: sch_screen.cpp:226
wxArrayString GetReplaceEntries() const
wxArrayString m_replaceStringHistoryList
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
SCHEMATIC & Schematic() const
DIALOG_SCH_FIND * m_findReplaceDialog
SCHEMATIC_SETTINGS * m_SchematicSettings
Definition: project_file.h:128
void clear()
Forwarded method from std::vector.
static wxString GetAutoSaveFilePrefix()
void Reset()
Initialize this schematic to a blank one, unloading anything existing.
Definition: schematic.cpp:51
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
SCH_SHEET_PATH & GetCurrentSheet() const
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:117
void RecordERCExclusions()
Scan existing markers and record data from any that are Excluded.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:557

References PROJECT::AbsolutePath(), SCH_SHEET_PATH::clear(), SCH_SCREEN::Clear(), SCH_SHEET_LIST::ClearModifyStatus(), KIWAY_PLAYER::Destroy(), FindHierarchyNavigator(), FRAME_SIMULATOR, EDA_BASE_FRAME::GetAutoSaveFilePrefix(), GetCurrentSheet(), DIALOG_SCH_FIND::GetFindEntries(), SCH_SCREENS::GetFirst(), SCH_SCREENS::GetNext(), PROJECT::GetProjectFile(), DIALOG_SCH_FIND::GetReplaceEntries(), SCHEMATIC::GetSheets(), KIWAY_HOLDER::Kiway(), m_findReplaceDialog, EDA_DRAW_FRAME::m_findStringHistoryList, SCHEMATIC_SETTINGS::m_NgspiceSimulatorSettings, EDA_DRAW_FRAME::m_replaceStringHistoryList, PROJECT_FILE::m_SchematicSettings, TOOLS_HOLDER::m_toolManager, KIWAY_HOLDER::Prj(), RecordERCExclusions(), SCHEMATIC::Reset(), SCHEMATIC::RootScreen(), Schematic(), SetScreen(), TOOL_MANAGER::ShutdownAllTools(), and EDA_BASE_FRAME::UpdateFileHistory().

◆ DrawCurrentSheetToClipboard()

void SCH_EDIT_FRAME::DrawCurrentSheetToClipboard ( )

Use the wxWidgets print code to draw an image of the current sheet onto the clipboard.

Definition at line 474 of file sheet.cpp.

475 {
476  wxRect DrawArea;
477  BASE_SCREEN* screen = GetScreen();
478 
479  DrawArea.SetSize( GetPageSizeIU() );
480 
481  // Calculate a reasonable dc size, in pixels, and the dc scale to fit
482  // the drawings into the dc size
483  // scale is the ratio resolution (in PPI) / internal units
484  double ppi = 300; // Use 300 pixels per inch to create bitmap images on start
485  double inch2Iu = 1000.0 * IU_PER_MILS;
486  double scale = ppi / inch2Iu;
487 
488  wxSize dcsize = DrawArea.GetSize();
489 
490  int maxdim = std::max( dcsize.x, dcsize.y );
491 
492  // the max size in pixels of the bitmap used to build the sheet copy
493  const int maxbitmapsize = 5600;
494 
495  while( int( maxdim * scale ) > maxbitmapsize )
496  {
497  ppi = ppi / 1.5;
498  scale = ppi / inch2Iu;
499  }
500 
501  dcsize.x *= scale;
502  dcsize.y *= scale;
503 
504  // Set draw offset, zoom... to values needed to draw in the memory DC
505  // after saving initial values:
506  wxPoint tmp_startvisu = screen->m_StartVisu;
507  wxPoint old_org = screen->m_DrawOrg;
508  screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
509  screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
510 
511  wxMemoryDC dc;
512  wxBitmap image( dcsize );
513  dc.SelectObject( image );
514  dc.Clear();
515 
516  GRResetPenAndBrush( &dc );
517  GRForceBlackPen( false );
518  dc.SetUserScale( scale, scale );
519 
520  GetRenderSettings()->SetPrintDC( &dc );
521  // Init the color of the layer actually used to print the drawing sheet:
524 
526 
527  {
528  wxLogNull doNotLog; // disable logging of failed clipboard actions
529 
530  if( wxTheClipboard->Open() )
531  {
532  // This data objects are held by the clipboard, so do not delete them in the app.
533  wxBitmapDataObject* clipbrd_data = new wxBitmapDataObject( image );
534  wxTheClipboard->SetData( clipbrd_data );
535  wxTheClipboard->Flush(); // Allow data to be available after closing KiCad
536  wxTheClipboard->Close();
537  }
538  }
539 
540  // Deselect Bitmap from DC in order to delete the MemoryDC
541  dc.SelectObject( wxNullBitmap );
542 
543  GRForceBlackPen( false );
544 
545  screen->m_StartVisu = tmp_startvisu;
546  screen->m_DrawOrg = old_org;
547 }
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:111
virtual void PrintPage(const RENDER_SETTINGS *aSettings) override
Plot or print the current sheet to the clipboard.
COLOR4D GetLayerColor(SCH_LAYER_ID aLayer)
Helper to retrieve a layer color from the global color settings.
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
const wxSize GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
wxPoint m_StartVisu
Coordinates in drawing units of the current view position (upper left corner of device)
Definition: base_screen.h:93
void GRForceBlackPen(bool flagforce)
Definition: gr_basic.cpp:190
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:40
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Change the color used to draw a layer.
drawingsheet frame and titleblock
Definition: layer_ids.h:212
const int scale
wxPoint m_DrawOrg
offsets for drawing the circuit on the screen
Definition: base_screen.h:88
#define IU_PER_MILS
Definition: plotter.cpp:136
void SetPrintDC(wxDC *aDC)

References SCH_BASE_FRAME::GetLayerColor(), SCH_BASE_FRAME::GetPageSizeIU(), SCH_BASE_FRAME::GetRenderSettings(), GetScreen(), GRForceBlackPen(), GRResetPenAndBrush(), image, IU_PER_MILS, LAYER_DRAWINGSHEET, LAYER_SCHEMATIC_DRAWINGSHEET, BASE_SCREEN::m_DrawOrg, BASE_SCREEN::m_StartVisu, PrintPage(), scale, KIGFX::RENDER_SETTINGS::SetLayerColor(), and KIGFX::RENDER_SETTINGS::SetPrintDC().

Referenced by SCH_EDITOR_CONTROL::DrawSheetOnClipboard().

◆ EditSheetProperties()

bool SCH_EDIT_FRAME::EditSheetProperties ( SCH_SHEET aSheet,
SCH_SHEET_PATH aHierarchy,
bool *  aClearAnnotationNewItems 
)

Edit an existing sheet or add a new sheet to the schematic.

When aSheet is a new sheet:

  • and the file name already exists in the schematic hierarchy, the screen associated with the sheet found in the hierarchy is associated with aSheet.
  • and the file name already exists on the system, then aSheet is loaded with the existing file.
  • and the file name does not exist in the schematic hierarchy or on the file system, then a new screen is created and associated with aSheet.

When aSheet is an existing sheet:

  • and the file name already exists in the schematic hierarchy, the current associated screen is replace by the one found in the hierarchy.
  • and the file name already exists on the system, the current associated screen file name is changed and the file is loaded.
  • and the file name does not exist in the schematic hierarchy or on the file system, the current associated screen file name is changed and saved to disk.

Note: the screen is not refresh. The caller is responsible to do that

Parameters
aSheetis the sheet to edit
aHierarchyis the current hierarchy containing aSheet
aClearAnnotationNewItemsis a reference to a bool to know if the items managed by this sheet need to have their annotation cleared i.e. when an existing item list is used. it can happens when the edited sheet used an existing file, or becomes a new instance of a already existing sheet.

Definition at line 458 of file sheet.cpp.

460 {
461  if( aSheet == nullptr || aHierarchy == nullptr )
462  return false;
463 
464  // Get the new texts
465  DIALOG_SHEET_PROPERTIES dlg( this, aSheet, aClearAnnotationNewItems );
466 
467  if( dlg.ShowModal() == wxID_CANCEL )
468  return false;
469 
470  return true;
471 }

Referenced by SCH_DRAWING_TOOLS::DrawSheet(), and SCH_EDIT_TOOL::Properties().

◆ eeconfig()

EESCHEMA_SETTINGS * SCH_BASE_FRAME::eeconfig ( ) const
inherited

Definition at line 116 of file sch_base_frame.cpp.

117 {
118  return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
119 }
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.

References EDA_BASE_FRAME::config().

Referenced by SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic(), AllowCaseSensitiveFileNameClashes(), DIALOG_BOM::DIALOG_BOM(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_DRAWING_TOOLS::DrawSheet(), SCH_EDIT_TOOL::editFieldText(), ExecuteRemoteCommand(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), GetSchematicJunctionSize(), GetShowAllPins(), DIALOG_BOM::installGeneratorsList(), LoadSettings(), EE_SELECTION_TOOL::Main(), SCH_EDIT_TOOL::Mirror(), DIALOG_PRINT_USING_PRINTER::OnMonochromeChecked(), OpenProjectFiles(), SCH_DRAWING_TOOLS::PlaceSymbol(), SCH_PRINTOUT::PrintPage(), SCH_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Rotate(), DIALOG_PRINT_USING_PRINTER::SavePrintOptions(), SaveSettings(), EE_SELECTION_TOOL::Selectable(), SelectUnit(), setupUIConditions(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), SCH_EDITOR_CONTROL::ToggleForceHV(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), PANEL_EESCHEMA_EDITING_OPTIONS::TransferDataFromWindow(), PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_EESCHEMA_EDITING_OPTIONS::TransferDataToWindow(), PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataToWindow(), DIALOG_PRINT_USING_PRINTER::TransferDataToWindow(), and DIALOG_BOM::~DIALOG_BOM().

◆ ensureWindowIsOnScreen()

void EDA_BASE_FRAME::ensureWindowIsOnScreen ( )
protectedinherited

Definition at line 637 of file eda_base_frame.cpp.

638 {
639  wxDisplay display( wxDisplay::GetFromWindow( this ) );
640  wxRect clientSize = display.GetClientArea();
641  wxPoint pos = GetPosition();
642  wxSize size = GetWindowSize();
643 
644  wxLogTrace( traceDisplayLocation,
645  "ensureWindowIsOnScreen: clientArea (%d, %d) w %d h %d", clientSize.x, clientSize.y,
646  clientSize.width, clientSize.height );
647 
648  if( pos.y < clientSize.y )
649  {
650  wxLogTrace( traceDisplayLocation,
651  "ensureWindowIsOnScreen: y pos %d below minimum, setting to %d", pos.y,
652  clientSize.y );
653  pos.y = clientSize.y;
654  }
655 
656  if( pos.x < clientSize.x )
657  {
658  wxLogTrace( traceDisplayLocation,
659  "ensureWindowIsOnScreen: x pos %d is off the client rect, setting to %d", pos.x,
660  clientSize.x );
661  pos.x = clientSize.x;
662  }
663 
664  if( pos.x + size.x - clientSize.x > clientSize.width )
665  {
666  int newWidth = clientSize.width - ( pos.x - clientSize.x );
667  wxLogTrace( traceDisplayLocation,
668  "ensureWindowIsOnScreen: effective width %d above available %d, setting to %d",
669  pos.x + size.x, clientSize.width, newWidth );
670  size.x = newWidth;
671  }
672 
673  if( pos.y + size.y - clientSize.y > clientSize.height )
674  {
675  int newHeight = clientSize.height - ( pos.y - clientSize.y );
676  wxLogTrace( traceDisplayLocation,
677  "ensureWindowIsOnScreen: effective height %d above available %d, setting to %d",
678  pos.y + size.y, clientSize.height, newHeight );
679  size.y = newHeight;
680  }
681 
682  wxLogTrace( traceDisplayLocation, "Updating window position (%d, %d) with size (%d, %d)",
683  pos.x, pos.y, size.x, size.y );
684 
685  SetSize( pos.x, pos.y, size.x, size.y );
686 }
const wxChar *const traceDisplayLocation
Flag to enable debug output of display positioning logic.
wxSize GetWindowSize()
Get the undecorated window size that can be used for restoring the window size.

References EDA_BASE_FRAME::GetWindowSize(), and traceDisplayLocation.

Referenced by EDA_BASE_FRAME::OnSize().

◆ EraseMsgBox()

void EDA_DRAW_FRAME::EraseMsgBox ( )
inherited

Definition at line 284 of file eda_draw_frame.cpp.

285 {
286  if( m_messagePanel )
288 }
EDA_MSG_PANEL * m_messagePanel
void EraseMsgBox()
Definition: msgpanel.cpp:198

References EDA_MSG_PANEL::EraseMsgBox(), and EDA_DRAW_FRAME::m_messagePanel.

Referenced by GERBVIEW_CONTROL::UpdateMessagePanel().

◆ ExecuteRemoteCommand()

void SCH_EDIT_FRAME::ExecuteRemoteCommand ( const char *  cmdline)
overridevirtual

Execute a remote command sent by Pcbnew via a socket connection.

When user selects a footprint or pin in Pcbnew, Eeschema shows that same symbol or pin and moves cursor on the item. The socket port used is KICAD_SCH_PORT_SERVICE_NUMBER which defaults to 4243.

Valid commands are:

  • $PART: "reference" Put cursor on symbol.
  • $PART: "reference" $REF: "ref" Put cursor on symbol reference.
  • $PART: "reference" $VAL: "value" Put cursor on symbol value.
  • $PART: "reference" $PAD: "pin name" Put cursor on the symbol pin.
  • $NET: "netname" Highlight a specified net
  • $CLEAR: "HIGHLIGHTED" Clear symbols highlight

They are a keyword followed by a quoted string.

Parameters
cmdlineis the command received from Pcbnew.

Reimplemented from KIWAY_PLAYER.

Definition at line 299 of file eeschema/cross-probing.cpp.

300 {
302  char line[1024];
303 
304  strncpy( line, cmdline, sizeof( line ) - 1 );
305  line[ sizeof( line ) - 1 ] = '\0';
306 
307  char* idcmd = strtok( line, " \n\r" );
308  char* text = strtok( nullptr, "\"\n\r" );
309 
310  if( idcmd == nullptr )
311  return;
312 
313  CROSS_PROBING_SETTINGS& crossProbingSettings = eeconfig()->m_CrossProbing;
314 
315  if( strcmp( idcmd, "$NET:" ) == 0 )
316  {
317  if( !crossProbingSettings.auto_highlight )
318  return;
319 
320  wxString netName = FROM_UTF8( text );
321 
322  if( auto sg = Schematic().ConnectionGraph()->FindFirstSubgraphByName( netName ) )
323  m_highlightedConn = sg->m_driver_connection;
324  else
325  m_highlightedConn = nullptr;
326 
328 
329  SetStatusText( _( "Selected net:" ) + wxS( " " ) + UnescapeString( netName ) );
330  return;
331  }
332 
333  if( strcmp( idcmd, "$CLEAR:" ) == 0 )
334  {
335  // Cross-probing is now done through selection so we no longer need a clear command
336  return;
337  }
338 
339  if( text == nullptr )
340  return;
341 
342  if( strcmp( idcmd, "$PART:" ) != 0 )
343  return;
344 
345  wxString part_ref = FROM_UTF8( text );
346 
347  /* look for a complement */
348  idcmd = strtok( nullptr, " \n\r" );
349 
350  if( idcmd == nullptr ) // Highlight symbol only (from CvPcb or Pcbnew)
351  {
352  // Highlight symbol part_ref, or clear Highlight, if part_ref is not existing
353  editor->FindSymbolAndItem( part_ref, true, HIGHLIGHT_SYMBOL, wxEmptyString );
354  return;
355  }
356 
357  text = strtok( nullptr, "\"\n\r" );
358 
359  if( text == nullptr )
360  return;
361 
362  wxString msg = FROM_UTF8( text );
363 
364  if( strcmp( idcmd, "$REF:" ) == 0 )
365  {
366  // Highlighting the reference itself isn't actually that useful, and it's harder to
367  // see. Highlight the parent and display the message.
368  editor->FindSymbolAndItem( part_ref, true, HIGHLIGHT_SYMBOL, msg );
369  }
370  else if( strcmp( idcmd, "$VAL:" ) == 0 )
371  {
372  // Highlighting the value itself isn't actually that useful, and it's harder to see.
373  // Highlight the parent and display the message.
374  editor->FindSymbolAndItem( part_ref, true, HIGHLIGHT_SYMBOL, msg );
375  }
376  else if( strcmp( idcmd, "$PAD:" ) == 0 )
377  {
378  editor->FindSymbolAndItem( part_ref, true, HIGHLIGHT_PIN, msg );
379  }
380  else
381  {
382  editor->FindSymbolAndItem( part_ref, true, HIGHLIGHT_SYMBOL, wxEmptyString );
383  }
384 }
static wxString FROM_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
Definition: macros.h:110
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
static TOOL_ACTION updateNetHighlighting
Definition: ee_actions.h:216
EESCHEMA_SETTINGS * eeconfig() const
Handle actions specific to the schematic editor.
Cross-probing behavior.
Definition: app_settings.h:30
SCHEMATIC & Schematic() const
#define _(s)
wxString UnescapeString(const wxString &aSource)
const SCH_CONNECTION * m_highlightedConn
The highlighted net or bus, or nullptr.
bool auto_highlight
Automatically turn on highlight mode in the target frame.
Definition: app_settings.h:34
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:54
CROSS_PROBING_SETTINGS m_CrossProbing
Definition: app_settings.h:167

References _, CROSS_PROBING_SETTINGS::auto_highlight, editor, SCH_BASE_FRAME::eeconfig(), FROM_UTF8(), TOOL_MANAGER::GetTool(), TOOLS_HOLDER::GetToolManager(), HIGHLIGHT_PIN, HIGHLIGHT_SYMBOL, APP_SETTINGS_BASE::m_CrossProbing, m_highlightedConn, TOOLS_HOLDER::m_toolManager, TOOL_MANAGER::RunAction(), Schematic(), text, UnescapeString(), and EE_ACTIONS::updateNetHighlighting.

Referenced by KiwayMailIn().

◆ FindHierarchyNavigator()

HIERARCHY_NAVIG_DLG * SCH_EDIT_FRAME::FindHierarchyNavigator ( )
Returns
a reference to the Hierarchy Navigator dialog if exists, or nullptr.

Definition at line 834 of file sch_edit_frame.cpp.

835 {
836  wxWindow* navigator = wxWindow::FindWindowByName( HIERARCHY_NAVIG_DLG_WNAME );
837 
838  return static_cast< HIERARCHY_NAVIG_DLG* >( navigator );
839 }
#define HIERARCHY_NAVIG_DLG_WNAME
Definition: hierarch.h:36

References HIERARCHY_NAVIG_DLG_WNAME.

Referenced by doCloseWindow(), and UpdateHierarchyNavigator().

◆ FinishAUIInitialization()

void EDA_BASE_FRAME::FinishAUIInitialization ( )
inherited

Definition at line 833 of file eda_base_frame.cpp.

834 {
835 #if defined( __WXOSX_MAC__ )
836  m_auimgr.Update();
837 #else
838  // Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
839  // hiding it.
840  m_auimgr.Update();
841 
842  // We don't want the infobar displayed right away
843  m_auimgr.GetPane( "InfoBar" ).Hide();
844  m_auimgr.Update();
845 #endif
846 }
wxAuiManager m_auimgr

References EDA_BASE_FRAME::m_auimgr.

◆ FixupJunctions()

void SCH_EDIT_FRAME::FixupJunctions ( )

Definition at line 1520 of file sch_edit_frame.cpp.

1521 {
1522  // Save the current sheet, to retrieve it later
1523  SCH_SHEET_PATH oldsheetpath = GetCurrentSheet();
1524 
1525  SCH_SHEET_LIST sheetList = Schematic().GetSheets();
1526 
1527  for( const SCH_SHEET_PATH& sheet : sheetList )
1528  {
1529  size_t num_undos = m_undoList.m_CommandsList.size();
1530 
1531  // We require a set here to avoid adding multiple junctions to the same spot
1532  std::set<wxPoint> junctions;
1533 
1534  SetCurrentSheet( sheet );
1536 
1537  SCH_SCREEN* screen = GetCurrentSheet().LastScreen();
1538 
1539  EE_SELECTION allItems;
1540 
1541  for( auto item : screen->Items() )
1542  allItems.Add( item );
1543 
1545 
1546  // Check if we modified anything during this routine
1547  // Needs to happen for every sheet to set the proper modified flag
1548  if( m_undoList.m_CommandsList.size() > num_undos )
1549  OnModify();
1550  }
1551 
1552  // Reselect the initial sheet:
1553  SetCurrentSheet( oldsheetpath );
1555  SetScreen( GetCurrentSheet().LastScreen() );
1556 }
void SetCurrentSheet(const SCH_SHEET_PATH &aSheet)
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
virtual void Add(EDA_ITEM *aItem)
Definition: selection.cpp:31
void SetScreen(BASE_SCREEN *aScreen) override
UNDO_REDO_CONTAINER m_undoList
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
void UpdateAllScreenReferences()
Update all the symbol references for this sheet path.
std::vector< PICKED_ITEMS_LIST * > m_CommandsList
SCHEMATIC & Schematic() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
static TOOL_ACTION addNeededJunctions
Definition: ee_actions.h:72
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158
SCH_SCREEN * LastScreen()
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
SCH_SHEET_PATH & GetCurrentSheet() const
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...

References SELECTION::Add(), EE_ACTIONS::addNeededJunctions, GetCurrentSheet(), SCHEMATIC::GetSheets(), SCH_SCREEN::Items(), SCH_SHEET_PATH::LastScreen(), UNDO_REDO_CONTAINER::m_CommandsList, TOOLS_HOLDER::m_toolManager, EDA_BASE_FRAME::m_undoList, OnModify(), TOOL_MANAGER::RunAction(), Schematic(), SetCurrentSheet(), SetScreen(), and SCH_SHEET_PATH::UpdateAllScreenReferences().

Referenced by importFile(), and OpenProjectFiles().

◆ FocusOnItem()

void SCH_EDIT_FRAME::FocusOnItem ( SCH_ITEM aItem)

Definition at line 1572 of file sch_edit_frame.cpp.

1573 {
1574  static KIID lastBrightenedItemID( niluuid );
1575 
1576  SCH_SHEET_LIST sheetList = Schematic().GetSheets();
1578  SCH_ITEM* lastItem = sheetList.GetItem( lastBrightenedItemID, &dummy );
1579 
1580  if( lastItem && lastItem != aItem )
1581  {
1582  lastItem->ClearBrightened();
1583 
1584  UpdateItem( lastItem );
1585  lastBrightenedItemID = niluuid;
1586  }
1587 
1588  if( aItem )
1589  {
1590  aItem->SetBrightened();
1591 
1592  UpdateItem( aItem );
1593  lastBrightenedItemID = aItem->m_Uuid;
1594 
1595  FocusOnLocation( aItem->GetFocusPosition() );
1596  }
1597 }
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
KIID niluuid(0)
virtual const wxPoint GetFocusPosition() const
Similar to GetPosition, but allows items to return their visual center rather than their anchor.
Definition: eda_item.h:259
void SetBrightened()
Definition: eda_item.h:130
void ClearBrightened()
Definition: eda_item.h:133
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:72
Definition: kiid.h:44
SCHEMATIC & Schematic() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
const KIID m_Uuid
Definition: eda_item.h:475
SCH_ITEM * GetItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr) const
Fetch a SCH_ITEM by ID.
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
void FocusOnLocation(const wxPoint &aPos)
Useful to focus on a particular location, in find functions.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193

References EDA_ITEM::ClearBrightened(), dummy(), EDA_DRAW_FRAME::FocusOnLocation(), EDA_ITEM::GetFocusPosition(), SCH_SHEET_LIST::GetItem(), SCHEMATIC::GetSheets(), EDA_ITEM::m_Uuid, niluuid, Schematic(), EDA_ITEM::SetBrightened(), and SCH_BASE_FRAME::UpdateItem().

Referenced by HardRedraw(), DIALOG_ERC::OnCancelClick(), DIALOG_ERC::OnCloseErcDialog(), DIALOG_ERC::OnERCItemSelected(), and SetCurrentSheet().

◆ FocusOnLocation()

void EDA_DRAW_FRAME::FocusOnLocation ( const wxPoint &  aPos)
inherited

Useful to focus on a particular location, in find functions.

Move the graphic cursor (crosshair cursor) at a given coordinate and reframes the drawing if the requested point is out of view or if center on location is requested.

Parameters
aPosis the point to go to.

Definition at line 846 of file eda_draw_frame.cpp.

847 {
848  bool centerView = false;
849  BOX2D r = GetCanvas()->GetView()->GetViewport();
850 
851  // Center if we're off the current view, or within 10% of its edge
852  r.Inflate( - (int) r.GetWidth() / 10 );
853 
854  if( !r.Contains( aPos ) )
855  centerView = true;
856 
857  // Center if we're behind an obscuring dialog, or within 10% of its edge
858  wxWindow* dialog = findDialog( GetChildren() );
859 
860  if( dialog )
861  {
862  wxRect dialogRect( GetCanvas()->ScreenToClient( dialog->GetScreenPosition() ),
863  dialog->GetSize() );
864  dialogRect.Inflate( dialogRect.GetWidth() / 10 );
865 
866  if( dialogRect.Contains( (wxPoint) GetCanvas()->GetView()->ToScreen( aPos ) ) )
867  centerView = true;
868  }
869 
870  if( centerView )
871  {
872  // If a dialog partly obscures the window, then center on the uncovered area.
873  if( dialog )
874  {
875  BOX2D dialogRect( GetCanvas()->ScreenToClient( dialog->GetScreenPosition() ),
876  dialog->GetSize() );
877  GetCanvas()->GetView()->SetCenter( aPos, dialogRect );
878  }
879  else
880  GetCanvas()->GetView()->SetCenter( aPos );
881  }
882 
884 }
BOX2D GetViewport() const
Return the current viewport visible area rectangle.
Definition: view.cpp:515
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:581
coord_type GetWidth() const
Definition: box2.h:180
bool Contains(const Vec &aPoint) const
Definition: box2.h:134
wxWindow * findDialog(wxWindowList &aList)
virtual KIGFX::VIEW * GetView() const
Return a pointer to the #VIEW instance used in the panel.
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:281

References BOX2< Vec >::Contains(), findDialog(), EDA_DRAW_FRAME::GetCanvas(), EDA_DRAW_PANEL_GAL::GetView(), EDA_DRAW_PANEL_GAL::GetViewControls(), KIGFX::VIEW::GetViewport(), BOX2< Vec >::GetWidth(), BOX2< Vec >::Inflate(), KIGFX::VIEW::SetCenter(), and KIGFX::VIEW_CONTROLS::SetCrossHairCursorPosition().

Referenced by PCB_SELECTION_TOOL::FindItem(), SCH_EDITOR_CONTROL::FindNext(), PCB_BASE_FRAME::FocusOnItem(), FocusOnItem(), and DIALOG_FIND::search().

◆ GetAboutTitle()

const wxString& EDA_BASE_FRAME::GetAboutTitle ( ) const
inlineinherited

◆ GetAutoSaveFilePrefix()

static wxString EDA_BASE_FRAME::GetAutoSaveFilePrefix ( )
inlinestaticprotectedinherited
Returns
the string to prepend to a file name for automatic save.

Definition at line 601 of file eda_base_frame.h.

602  {
603  return wxT( "_autosave-" );
604  }

Referenced by EDA_BASE_FRAME::CheckForAutoSaveFile(), PCB_EDIT_FRAME::doAutoSave(), doAutoSave(), doCloseWindow(), PCB_EDIT_FRAME::Files_io_from_id(), PCB_EDIT_FRAME::OnExportSTEP(), PCB_EDIT_FRAME::SavePcbFile(), and saveSchematicFile().

◆ GetAutoSaveInterval()

int EDA_BASE_FRAME::GetAutoSaveInterval ( ) const
inlineinherited

Definition at line 204 of file eda_base_frame.h.

204 { return m_autoSaveInterval; }

References EDA_BASE_FRAME::m_autoSaveInterval.

◆ GetCanvas()

SCH_DRAW_PANEL * SCH_BASE_FRAME::GetCanvas ( ) const
overridevirtualinherited

Return a pointer to GAL-based canvas of given EDA draw frame.

Returns
Pointer to GAL-based canvas.

Reimplemented from EDA_DRAW_FRAME.

Definition at line 272 of file sch_base_frame.cpp.

273 {
274  return static_cast<SCH_DRAW_PANEL*>( EDA_DRAW_FRAME::GetCanvas() );
275 }
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.

References EDA_DRAW_FRAME::GetCanvas().

Referenced by AddItemToScreenAndUndoList(), AddJunction(), SCH_BASE_FRAME::AddToScreen(), AnnotateSymbols(), SCH_EDITOR_CONTROL::AssignFootprints(), SCH_EDIT_TOOL::BreakWire(), SCH_BASE_FRAME::CenterScreen(), SYMBOL_VIEWER_FRAME::ClickOnCmpList(), SYMBOL_VIEWER_FRAME::CommonSettingsChanged(), SCH_BASE_FRAME::CommonSettingsChanged(), SYMBOL_EDIT_FRAME::CommonSettingsChanged(), DIALOG_CHOOSE_SYMBOL::ConstructRightPanel(), DeleteAnnotation(), DisplayCurrentSheet(), SYMBOL_VIEWER_FRAME::doCloseWindow(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), EE_SELECTION_TOOL::doSelectionMenu(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), SYMBOL_EDITOR_EDIT_TOOL::editFieldProperties(), SYMBOL_EDITOR_EDIT_TOOL::editGraphicProperties(), SYMBOL_EDITOR_EDIT_TOOL::editTextProperties(), SCH_EDITOR_CONTROL::EnterSheet(), DIALOG_ERC::ExcludeMarker(), EE_INSPECTION_TOOL::ExcludeMarker(), SCH_EDITOR_CONTROL::FindNext(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_DRAWING_TOOLS::GetCanvasFreeAreaPixels(), GetDocumentExtents(), SCH_BASE_FRAME::GetRenderSettings(), SCH_BASE_FRAME::HardRedraw(), HardRedraw(), SCH_EDITOR_CONTROL::ImportFPAssignments(), SCH_EDIT_TOOL::Init(), KiwayMailIn(), SCH_EDITOR_CONTROL::LeaveSheet(), EE_POINT_EDITOR::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), EE_SELECTION_TOOL::Main(), DIALOG_MIGRATE_BUSES::onAcceptClicked(), DIALOG_ANNOTATE::OnApplyClick(), DIALOG_ERC::OnEraseDrcMarkersClick(), DIALOG_ERC::OnERCItemRClick(), EE_SELECTION_TOOL::OnIdle(), DIALOG_MIGRATE_BUSES::onItemSelected(), OnModify(), OnPageSettingsChange(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), HIERARCHY_NAVIG_DLG::onSelectSheetPath(), DIALOG_UPDATE_FROM_PCB::OnUpdateClick(), SYMBOL_TREE_PANE::onUpdateUI(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceImage(), SCH_DRAWING_TOOLS::PlaceSymbol(), SCH_EDIT_TOOL::Properties(), PutDataInPreviousState(), SYMBOL_EDIT_FRAME::RebuildView(), RecalculateConnections(), RecomputeIntersheetRefs(), SYMBOL_VIEWER_FRAME::ReCreateLibList(), SCH_EDITOR_CONTROL::Redo(), DIALOG_ERC::redrawDrawPanel(), SCH_BASE_FRAME::RedrawScreen(), SCH_BASE_FRAME::RefreshSelection(), SCH_EDITOR_CONTROL::RemapSymbols(), SCH_BASE_FRAME::RemoveFromScreen(), SCH_EDIT_TOOL::RepeatDrawItem(), SCH_EDITOR_CONTROL::RescueLegacyProject(), SCH_EDITOR_CONTROL::rescueProject(), SCH_EDITOR_CONTROL::RescueSymbolLibTableProject(), RollbackSchematicFromUndo(), SaveSymbolToSchematic(), EE_SELECTION_TOOL::selectMultiple(), SetCurrentSheet(), SYMBOL_EDIT_FRAME::SetCurSymbol(), EE_POINT_EDITOR::setEditedPoint(), SetScreen(), SYMBOL_VIEWER_FRAME::SetSelectedLibrary(), SYMBOL_VIEWER_FRAME::setupTools(), SYMBOL_EDIT_FRAME::setupTools(), setupTools(), SYMBOL_EDITOR_CONTROL::ShowElectricalTypes(), ShowSchematicSetupDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDIT_FRAME::SwitchCanvas(), SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME(), SCH_BASE_FRAME::SyncView(), TestDanglingEnds(), DIALOG_ERC::testErc(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), PANEL_SYM_EDITING_OPTIONS::TransferDataFromWindow(), PANEL_SETUP_FORMATTING::TransferDataFromWindow(), PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow(), DIALOG_JUNCTION_PROPS::TransferDataFromWindow(), DIALOG_LINE_WIRE_BUS_PROPERTIES::TransferDataFromWindow(), PANEL_SYM_COLOR_SETTINGS::TransferDataFromWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataFromWindow(), PANEL_EESCHEMA_COLOR_SETTINGS::TransferDataFromWindow(), DIALOG_TEXT_AND_LABEL_PROPERTIES::TransferDataFromWindow(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), SCH_EDITOR_CONTROL::Undo(), SCH_EDITOR_CONTROL::UpdateFind(), SCH_BASE_FRAME::UpdateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), SYMBOL_VIEWER_FRAME::updatePreviewSymbol(), SCH_BASE_FRAME::UpdateStatusBar(), ~SCH_EDIT_FRAME(), and SYMBOL_VIEWER_FRAME::~SYMBOL_VIEWER_FRAME().

◆ GetColorSettings()

COLOR_SETTINGS * SCH_BASE_FRAME::GetColorSettings ( ) const
overridevirtualinherited

Returns a pointer to the active color theme settings.

Reimplemented from EDA_DRAW_FRAME.

Reimplemented in SYMBOL_EDIT_FRAME.

Definition at line 421 of file sch_base_frame.cpp.

422 {
423  if( !m_colorSettings )
424  {
425  SETTINGS_MANAGER& settingsManager = Pgm().GetSettingsManager();
426  EESCHEMA_SETTINGS* cfg = settingsManager.GetAppSettings<EESCHEMA_SETTINGS>();
427  COLOR_SETTINGS* colorSettings = settingsManager.GetColorSettings( cfg->m_ColorTheme );
428 
429  const_cast<SCH_BASE_FRAME*>( this )->m_colorSettings = colorSettings;
430  }
431 
432  return m_colorSettings;
433 }
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106
T * GetAppSettings(bool aLoadNow=true)
Returns a handle to the a given settings by type If the settings have already been loaded,...
COLOR_SETTINGS * m_colorSettings
The current canvas type.
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
Color settings are a bit different than most of the settings objects in that there can be more than o...
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:184

References SETTINGS_MANAGER::GetAppSettings(), SETTINGS_MANAGER::GetColorSettings(), EDA_DRAW_FRAME::m_colorSettings, APP_SETTINGS_BASE::m_ColorTheme, and Pgm().

Referenced by SCH_BASE_FRAME::GetDrawBgColor(), SCH_BASE_FRAME::GetLayerColor(), SCH_PRINTOUT::PrintPage(), PrintPage(), SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME(), DIALOG_SHEET_PROPERTIES::TransferDataFromWindow(), PANEL_EESCHEMA_EDITING_OPTIONS::TransferDataToWindow(), and DIALOG_SHEET_PROPERTIES::TransferDataToWindow().

◆ GetCurrentFileName()

wxString SCH_EDIT_FRAME::GetCurrentFileName ( ) const
overridevirtual

Get the full filename + path of the currently opened file in the frame.

If no file is open, an empty string is returned.

Returns
the filename and full path to the open file

Reimplemented from EDA_BASE_FRAME.

Definition at line 1600 of file sch_edit_frame.cpp.

1601 {
1602  return Schematic().GetFileName();
1603 }
SCHEMATIC & Schematic() const
wxString GetFileName() const override
Helper to retrieve the filename from the root sheet screen.
Definition: schematic.cpp:161

References SCHEMATIC::GetFileName(), and Schematic().

Referenced by OpenProjectFiles().

◆ GetCurrentSelection()

SELECTION & SCH_EDIT_FRAME::GetCurrentSelection ( )
overridevirtual

Get the current selection from the canvas area.

Returns
the current selection.

Reimplemented from TOOLS_HOLDER.

Definition at line 1606 of file sch_edit_frame.cpp.

1607 {
1608  return m_toolManager->GetTool<EE_SELECTION_TOOL>()->GetSelection();
1609 }
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:158

References TOOL_MANAGER::GetTool(), and TOOLS_HOLDER::m_toolManager.

◆ GetCurrentSheet()

SCH_SHEET_PATH & SCH_EDIT_FRAME::GetCurrentSheet ( ) const

Definition at line 576 of file sch_edit_frame.cpp.

577 {
578  return m_schematic->CurrentSheet();
579 }
SCHEMATIC * m_schematic
The currently loaded schematic.
SCH_SHEET_PATH & CurrentSheet() const override
Definition: schematic.h:121

References SCHEMATIC::CurrentSheet(), and m_schematic.

Referenced by AddItemToScreenAndUndoList(), SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic(), AnnotateSymbols(), AppendSchematic(), CheckAnnotate(), DIALOG_PLOT_SCHEMATIC::createDXFFiles(), DIALOG_PLOT_SCHEMATIC::createHPGLFiles(), DIALOG_PLOT_SCHEMATIC::createPDFFile(), DIALOG_PLOT_SCHEMATIC::createPSFiles(), DIALOG_PLOT_SCHEMATIC::createSVGFiles(), DeleteAnnotation(), DisplayCurrentSheet(), doCloseWindow(), SCH_EDITOR_CONTROL::doCopy(), SCH_DRAWING_TOOLS::DrawSheet(), SCH_EDIT_TOOL::editFieldText(), SCH_EDIT_TOOL::EditPageNumber(), SCH_NAVIGATE_TOOL::EnterSheet(), SCH_EDITOR_CONTROL::EnterSheet(), SCH_EDITOR_CONTROL::FindNext(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), FixupJunctions(), SCH_PIN::GetMsgPanelInfo(), SCH_SYMBOL::GetMsgPanelInfo(), GetScreen(), GetScreenDesc(), GetUniqueFilenameForCurrentSheet(), HardRedraw(), SCH_EDITOR_CONTROL::HasMatch(), HIERARCHY_NAVIG_DLG::HIERARCHY_NAVIG_DLG(), SCH_NAVIGATE_TOOL::HypertextCommand(), importFile(), SCH_DRAWING_TOOLS::Init(), EE_SELECTION_TOOL::Init(), SCH_LINE_WIRE_BUS_TOOL::Init(), SCH_NAVIGATE_TOOL::LeaveSheet(), SCH_EDITOR_CONTROL::LeaveSheet(), DIALOG_ERC::OnERCItemSelected(), DIALOG_MIGRATE_BUSES::onItemSelected(), SCH_PRINTOUT::OnPrintPage(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_SHEET_PROPERTIES::onSheetFilenameChanged(), DIALOG_UPDATE_FROM_PCB::OnUpdateClick(), DIALOG_SHEET_PROPERTIES::OnUpdateUI(), OpenProjectFiles(), SCH_EDITOR_CONTROL::Paste(), SCH_DRAWING_TOOLS::PlaceSymbol(), DIALOG_CHANGE_SYMBOLS::processMatchingSymbols(), SCH_EDIT_TOOL::Properties(), SCH_EDITOR_CONTROL::ReplaceAll(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), SCH_EDITOR_CONTROL::RescueLegacyProject(), SCH_EDITOR_CONTROL::RescueSymbolLibTableProject(), DIALOG_PLOT_SCHEMATIC::restoreEnvironment(), SaveSymbolToSchematic(), SelectUnit(), SetCurrentSheet(), SetSheetNumberAndCount(), setupUIConditions(), DIALOG_SYMBOL_FIELDS_TABLE::TransferDataFromWindow(), DIALOG_SHEET_PROPERTIES::TransferDataFromWindow(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataFromWindow(), DIALOG_SHEET_PROPERTIES::TransferDataToWindow(), SCH_EDITOR_CONTROL::UpdateFind(), HIERARCHY_NAVIG_DLG::UpdateHierarchyTree(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), and UpdateTitle().

◆ GetDocumentExtents()

const BOX2I SCH_EDIT_FRAME::GetDocumentExtents ( bool  aIncludeAllVisible = true) const
overridevirtual

Returns bbox of document with option to not include some items.

Used most commonly by "Zoom to Fit" and "Zoom to Objects". In Eeschema for "Zoom to Fit" it's passed "true" to include drawing sheet border, and "false" by "Zoom To Objects" to ignore drawing sheet border. In Pcbnew, false makes it ignore any items outside the PCB edge such as fabrication notes.

Parameters
aIncludeAllVisibleTrue to include everything visible in bbox calculations, false to ignore some visible items (program dependent).
Returns
Bounding box of the document (ignoring some items as requested).

Reimplemented from EDA_DRAW_FRAME.

Definition at line 1479 of file sch_edit_frame.cpp.

1480 {
1481  BOX2I bBoxDoc;
1482 
1483  if( aIncludeAllVisible )
1484  {
1485  // Get the whole page size and return that
1486  int sizeX = GetScreen()->GetPageSettings().GetWidthIU();
1487  int sizeY = GetScreen()->GetPageSettings().GetHeightIU();
1488  bBoxDoc = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( sizeX, sizeY ) );
1489  }
1490  else
1491  {
1492  // Get current drawing-sheet in a form we can compare to an EDA_ITEM
1494  EDA_ITEM* dsAsItem = static_cast<EDA_ITEM*>( ds );
1495 
1496  // Need an EDA_RECT so the first ".Merge" sees it's uninitialized
1497  EDA_RECT bBoxItems;
1498 
1499  // Calc the bounding box of all items on screen except the page border
1500  for( EDA_ITEM* item : GetScreen()->Items() )
1501  {
1502  if( item != dsAsItem ) // Ignore the drawing-sheet itself
1503  {
1504  if( item->Type() == SCH_SYMBOL_T )
1505  {
1506  // For symbols we need to get the bounding box without invisible text
1507  SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
1508  bBoxItems.Merge( symbol->GetBoundingBox( false ) );
1509  }
1510  else
1511  bBoxItems.<