KiCad PCB EDA Suite
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC Class Reference

Dialog used to edit SCH_COMPONENT objects in a schematic. More...

#include <dialog_edit_component_in_schematic.h>

Inheritance diagram for DIALOG_EDIT_COMPONENT_IN_SCHEMATIC:
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE DIALOG_SHIM KIWAY_HOLDER

Public Types

enum  HOLDER_TYPE { DIALOG, FRAME, PANEL }
 

Public Member Functions

 DIALOG_EDIT_COMPONENT_IN_SCHEMATIC (SCH_EDIT_FRAME *aParent, SCH_COMPONENT *aComponent)
 
 ~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC () override
 
SCH_EDIT_FRAMEGetParent ()
 
void SetInitialFocus (wxWindow *aWindow)
 Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown. More...
 
int ShowQuasiModal ()
 
void EndQuasiModal (int retCode)
 
bool IsQuasiModal ()
 
bool Show (bool show) override
 
bool Enable (bool enable) override
 
void OnPaint (wxPaintEvent &event)
 
EDA_UNITS GetUserUnits () const
 
HOLDER_TYPE GetType ()
 
KIWAYKiway () const
 Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in. More...
 
PROJECTPrj () const
 Function Prj returns a reference to the PROJECT "associated with" this KIWAY. More...
 
void SetKiway (wxWindow *aDest, KIWAY *aKiway)
 Function SetKiway. More...
 

Static Public Member Functions

static bool IsCtrl (int aChar, const wxKeyEvent &e)
 
static bool IsShiftCtrl (int aChar, const wxKeyEvent &e)
 

Protected Member Functions

void FinishDialogSettings ()
 In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls. More...
 
void SetSizeInDU (int x, int y)
 Set the dialog to the given dimensions in "dialog units". More...
 
int HorizPixelsFromDU (int x)
 Convert an integer number of dialog units to pixels, horizontally. More...
 
int VertPixelsFromDU (int y)
 Convert an integer number of dialog units to pixels, vertically. More...
 
void ResetSize ()
 Clear the existing dialog size and position. More...
 

Protected Attributes

WX_GRIDm_grid
 
wxBitmapButton * m_bpAdd
 
wxBitmapButton * m_bpMoveUp
 
wxBitmapButton * m_bpMoveDown
 
wxBitmapButton * m_bpDelete
 
wxButton * m_updateFieldValues
 
wxStaticText * m_staticText3
 
wxTextCtrl * m_libraryNameTextCtrl
 
wxBitmapButton * m_buttonBrowseLibrary
 
wxStaticText * m_unitLabel
 
wxChoice * m_unitChoice
 
wxCheckBox * m_cbAlternateSymbol
 
wxRadioBox * m_rbOrientation
 
wxRadioBox * m_rbMirror
 
wxStaticLine * m_staticline1
 
wxStaticText * m_timeStampLabel
 
wxTextCtrl * m_textCtrlTimeStamp
 
wxButton * m_spiceFieldsButton
 
wxStdDialogButtonSizer * m_stdDialogButtonSizer
 
wxButton * m_stdDialogButtonSizerOK
 
wxButton * m_stdDialogButtonSizerCancel
 
EDA_UNITS m_units
 
std::string m_hash_key
 
bool m_firstPaintEvent
 
wxWindow * m_initialFocusTarget
 
WX_EVENT_LOOPm_qmodal_loop
 
bool m_qmodal_showing
 
WDO_ENABLE_DISABLEm_qmodal_parent_disabler
 
EDA_BASE_FRAMEm_parentFrame
 
std::vector< wxWindow * > m_tabOrder
 

Private Member Functions

bool TransferDataToWindow () override
 
bool TransferDataFromWindow () override
 
bool Validate () override
 
void UpdateFieldsFromLibrary (wxCommandEvent &event) override
 
void OnAddField (wxCommandEvent &event) override
 
void OnDeleteField (wxCommandEvent &event) override
 
void OnMoveUp (wxCommandEvent &event) override
 
void OnMoveDown (wxCommandEvent &event) override
 
void OnBrowseLibrary (wxCommandEvent &event) override
 
void OnEditSpiceModel (wxCommandEvent &event) override
 
void OnSizeGrid (wxSizeEvent &event) override
 
void OnGridCellChanging (wxGridEvent &event)
 
void OnUpdateUI (wxUpdateUIEvent &event) override
 
void OnCancelButtonClick (wxCommandEvent &event) override
 
void OnInitDlg (wxInitDialogEvent &event) override
 
void AdjustGridColumns (int aWidth)
 

Private Attributes

SCH_COMPONENTm_cmp
 
LIB_PARTm_part
 
int m_width
 
int m_delayedFocusRow
 
int m_delayedFocusColumn
 
wxString m_shownColumns
 
FIELDS_GRID_TABLE< SCH_FIELD > * m_fields
 

Detailed Description

Dialog used to edit SCH_COMPONENT objects in a schematic.

This is derived from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE which is maintained by wxFormBuilder.

Definition at line 43 of file dialog_edit_component_in_schematic.h.

Member Enumeration Documentation

◆ HOLDER_TYPE

enum KIWAY_HOLDER::HOLDER_TYPE
inherited
Enumerator
DIALOG 
FRAME 
PANEL 

Definition at line 42 of file kiway_holder.h.

Constructor & Destructor Documentation

◆ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC()

DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC ( SCH_EDIT_FRAME aParent,
SCH_COMPONENT aComponent 
)

Definition at line 51 of file dialog_edit_component_in_schematic.cpp.

52  :
54 {
55  m_cmp = aComponent;
56  m_part = m_cmp->GetPartRef().get();
57  m_fields = new FIELDS_GRID_TABLE<SCH_FIELD>( this, aParent, m_part );
58 
59  m_width = 0;
62 
63 #ifndef KICAD_SPICE
64  m_spiceFieldsButton->Hide();
65 #endif /* not KICAD_SPICE */
66 
67  // disable some options inside the edit dialog which can cause problems while dragging
68  if( m_cmp->IsDragging() )
69  {
70  m_rbOrientation->Disable();
71  m_rbMirror->Disable();
72  m_libraryNameTextCtrl->Disable();
73  }
74 
75  // Give a bit more room for combobox editors
76  m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
77 
79  m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this ) );
80 
81  // Show/hide columns according to user's preference
82  auto cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
83 
84  if( cfg )
85  {
86  m_shownColumns = cfg->m_Appearance.edit_component_visible_columns;
88  }
89 
90  wxToolTip::Enable( true );
91  m_stdDialogButtonSizerOK->SetDefault();
92 
93  // Configure button logos
95  m_bpAdd->SetBitmap( KiBitmap( small_plus_xpm ) );
96  m_bpDelete->SetBitmap( KiBitmap( trash_xpm ) );
97  m_bpMoveUp->SetBitmap( KiBitmap( small_up_xpm ) );
98  m_bpMoveDown->SetBitmap( KiBitmap( small_down_xpm ) );
99 
100  // Set font sizes
101  wxFont infoFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
102  infoFont.SetSymbolicSize( wxFONTSIZE_SMALL );
103  m_timeStampLabel->SetFont( infoFont );
104  m_textCtrlTimeStamp->SetFont( infoFont );
105  m_textCtrlTimeStamp->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) );
106 
107  // wxFormBuilder doesn't include this event...
108  m_grid->Connect( wxEVT_GRID_CELL_CHANGING,
110  NULL, this );
111 
113 }
const BITMAP_OPAQUE trash_xpm[1]
Definition: trash.cpp:46
void ShowHideColumns(const wxString &shownColumns)
Show/hide the grid columns based on a tokenized string of shown column indexes.
Definition: wx_grid.cpp:121
void FinishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
void SetTable(wxGridTableBase *table, bool aTakeOwnership=false)
Hide wxGrid's SetTable() method with one which doesn't mess up the grid column widths when setting th...
Definition: wx_grid.cpp:59
Field Reference of part, i.e. "IC21".
bool IsDragging() const
Definition: base_struct.h:205
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:80
#define NULL
DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Symbol Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(864, 440), long style=wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU)
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
const BITMAP_OPAQUE small_down_xpm[1]
Definition: small_down.cpp:25
const BITMAP_OPAQUE small_library_xpm[1]
std::unique_ptr< LIB_PART > & GetPartRef()
const BITMAP_OPAQUE small_up_xpm[1]
Definition: small_up.cpp:26
const BITMAP_OPAQUE small_plus_xpm[1]
Definition: small_plus.cpp:20

References FDC_VALUE, DIALOG_SHIM::FinishDialogSettings(), SCH_COMPONENT::GetPartRef(), EDA_ITEM::IsDragging(), KiBitmap(), Kiface(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_bpAdd, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_bpDelete, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_bpMoveDown, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_bpMoveUp, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_buttonBrowseLibrary, m_cmp, m_delayedFocusColumn, m_delayedFocusRow, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, m_part, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbMirror, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbOrientation, m_shownColumns, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_spiceFieldsButton, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_stdDialogButtonSizerOK, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_textCtrlTimeStamp, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_timeStampLabel, m_width, NULL, OnGridCellChanging(), REFERENCE, WX_GRID::SetTable(), WX_GRID::ShowHideColumns(), small_down_xpm, small_library_xpm, small_plus_xpm, small_up_xpm, and trash_xpm.

◆ ~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC()

DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC ( )
override

Definition at line 116 of file dialog_edit_component_in_schematic.cpp.

117 {
118  auto cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
119 
120  if( cfg )
121  cfg->m_Appearance.edit_component_visible_columns = m_grid->GetShownColumns();
122 
123  // Prevents crash bug in wxGrid's d'tor
125 
126  m_grid->Disconnect( wxEVT_GRID_CELL_CHANGING,
128  NULL, this );
129 
130  // Delete the GRID_TRICKS.
131  m_grid->PopEventHandler( true );
132 }
void DestroyTable(wxGridTableBase *aTable)
Work-around for a bug in wxGrid which crashes when deleting the table if the cell edit control was no...
Definition: wx_grid.cpp:90
#define NULL
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
wxString GetShownColumns()
Get a tokenized string containing the shown column indexes.
Definition: wx_grid.cpp:103

References WX_GRID::DestroyTable(), WX_GRID::GetShownColumns(), Kiface(), m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, NULL, and OnGridCellChanging().

Member Function Documentation

◆ AdjustGridColumns()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::AdjustGridColumns ( int  aWidth)
private

Definition at line 736 of file dialog_edit_component_in_schematic.cpp.

737 {
738  m_width = aWidth;
739  // Account for scroll bars
740  aWidth -= ( m_grid->GetSize().x - m_grid->GetClientSize().x );
741 
742  m_grid->AutoSizeColumn( 0 );
743 
744  int fixedColsWidth = m_grid->GetColSize( 0 );
745 
746  for( int i = 2; i < m_grid->GetNumberCols(); i++ )
747  fixedColsWidth += m_grid->GetColSize( i );
748 
749  m_grid->SetColSize( 1, aWidth - fixedColsWidth );
750 }

References DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, and m_width.

Referenced by OnSizeGrid(), OnUpdateUI(), and TransferDataToWindow().

◆ Enable()

bool DIALOG_SHIM::Enable ( bool  enable)
overrideinherited

Definition at line 264 of file dialog_shim.cpp.

265 {
266  // so we can do logging of this state change:
267 
268 #if 0 && defined(DEBUG)
269  const char* type_id = typeid( *this ).name();
270  printf( "DIALOG_SHIM %s: %s\n", type_id, enable ? "enabled" : "disabled" );
271  fflush(0); //Needed on msys2 to immediately print the message
272 #endif
273 
274  return wxDialog::Enable( enable );
275 }

◆ EndQuasiModal()

void DIALOG_SHIM::EndQuasiModal ( int  retCode)
inherited

Definition at line 421 of file dialog_shim.cpp.

422 {
423  // Hook up validator and transfer data from controls handling so quasi-modal dialogs
424  // handle validation in the same way as other dialogs.
425  if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
426  return;
427 
428  SetReturnCode( retCode );
429 
430  if( !IsQuasiModal() )
431  {
432  wxFAIL_MSG( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal"
433  "wasn't called" );
434  return;
435  }
436 
437  if( m_qmodal_loop )
438  {
439  if( m_qmodal_loop->IsRunning() )
440  m_qmodal_loop->Exit( 0 );
441  else
442  m_qmodal_loop->ScheduleExit( 0 );
443 
445  }
446 
449 
450  Show( false );
451 }
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:205
#define NULL
bool IsQuasiModal()
Definition: dialog_shim.h:124
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:208

References DIALOG_SHIM::IsQuasiModal(), DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, NULL, and DIALOG_SHIM::Show().

Referenced by HK_PROMPT_DIALOG::EndFlexible(), DIALOG_SHIM::OnButton(), DIALOG_EDIT_COMPONENTS_LIBID::onCancel(), OnCancelButtonClick(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnCancelButtonClick(), DIALOG_LIB_EDIT_PIN_TABLE::OnClose(), DIALOG_PRINT_GENERIC::onCloseButton(), DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer(), DIALOG_CHOOSE_COMPONENT::OnCloseTimer(), DIALOG_SHIM::OnCloseWindow(), HTML_MESSAGE_BOX::OnOKButtonClick(), DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser(), DIALOG_CHOOSE_COMPONENT::OnUseBrowser(), and DIALOG_SHIM::~DIALOG_SHIM().

◆ FinishDialogSettings()

void DIALOG_SHIM::FinishDialogSettings ( )
protectedinherited

In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls.

FinishDialogSettings must be called from derived classes, when all widgets are initialized, and therefore their size fixed. If TransferDataToWindow() is used to initialize widgets, at end of TransferDataToWindow, or better at end of a wxInitDialogEvent handler

In any case, the best way is to call it in a wxInitDialogEvent handler after calling TransfertDataToWindow(), which is the default wxInitDialogEvent handler wxDialog

Definition at line 139 of file dialog_shim.cpp.

140 {
141  // must be called from the constructor of derived classes,
142  // when all widgets are initialized, and therefore their size fixed
143 
144  // SetSizeHints fixes the minimal size of sizers in the dialog
145  // (SetSizeHints calls Fit(), so no need to call it)
146  GetSizer()->SetSizeHints( this );
147 
148  // the default position, when calling the first time the dlg
149  Center();
150 }

References PCAD2KICAD::Center.

Referenced by DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS(), DIALOG_ANNOTATE::DIALOG_ANNOTATE(), DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP(), DIALOG_BOM::DIALOG_BOM(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC::DIALOG_DRC(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_EDIT_COMPONENTS_LIBID::DIALOG_EDIT_COMPONENTS_LIBID(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_EDIT_SHEET_PIN::DIALOG_EDIT_SHEET_PIN(), DIALOG_EDITOR_DATA::DIALOG_EDITOR_DATA(), DIALOG_ENUM_PADS::DIALOG_ENUM_PADS(), DIALOG_ERC::DIALOG_ERC(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), DIALOG_EXPORT_3DFILE::DIALOG_EXPORT_3DFILE(), DIALOG_EXPORT_IDF3::DIALOG_EXPORT_IDF3(), DIALOG_EXPORT_STEP::DIALOG_EXPORT_STEP(), DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST(), DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::DIALOG_FOOTPRINTS_DISPLAY_OPTIONS(), DIALOG_GENCAD_EXPORT_OPTIONS::DIALOG_GENCAD_EXPORT_OPTIONS(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS(), DIALOG_GLOBAL_LIB_TABLE_CONFIG::DIALOG_GLOBAL_LIB_TABLE_CONFIG(), DIALOG_IMAGE_EDITOR::DIALOG_IMAGE_EDITOR(), DIALOG_INSPECTOR::DIALOG_INSPECTOR(), DIALOG_KEEPOUT_AREA_PROPERTIES::DIALOG_KEEPOUT_AREA_PROPERTIES(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_LIB_NEW_COMPONENT::DIALOG_LIB_NEW_COMPONENT(), DIALOG_LIST_HOTKEYS::DIALOG_LIST_HOTKEYS(), DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(), DIALOG_NETLIST::DIALOG_NETLIST(), DIALOG_NON_COPPER_ZONES_EDITOR::DIALOG_NON_COPPER_ZONES_EDITOR(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::DIALOG_PAD_PRIMITIVE_POLY_PROPS(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_PASTE_SPECIAL::DIALOG_PASTE_SPECIAL(), DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC(), DIALOG_POSITION_RELATIVE::DIALOG_POSITION_RELATIVE(), DIALOG_PRINT_GENERIC::DIALOG_PRINT_GENERIC(), DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER(), DIALOG_PUSH_PAD_PROPERTIES::DIALOG_PUSH_PAD_PROPERTIES(), DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP(), DIALOG_SELECT_NET_FROM_LIST::DIALOG_SELECT_NET_FROM_LIST(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE(), DIALOG_UPDATE_FROM_PCB::DIALOG_UPDATE_FROM_PCB(), DIALOG_UPDATE_PCB::DIALOG_UPDATE_PCB(), DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL(), PAGED_DIALOG::finishInitialization(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), NETLIST_DIALOG::NETLIST_DIALOG(), DIALOG_GRAPHIC_ITEM_PROPERTIES::OnInitDlg(), DIALOG_SCH_SHEET_PROPS::OnInitDlg(), OnInitDlg(), DIALOG_SIM_SETTINGS::onInitDlg(), DIALOG_SPICE_MODEL::onInitDlg(), DIALOG_SIGNAL_LIST::TransferDataToWindow(), DIALOG_UPDATE_FIELDS::TransferDataToWindow(), DIALOG_COLOR_PICKER::TransferDataToWindow(), and DIALOG_BOARD_STATISTICS::TransferDataToWindow().

◆ GetParent()

SCH_EDIT_FRAME * DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::GetParent ( void  )

Definition at line 135 of file dialog_edit_component_in_schematic.cpp.

136 {
137  return dynamic_cast<SCH_EDIT_FRAME*>( wxDialog::GetParent() );
138 }

Referenced by OnBrowseLibrary(), TransferDataFromWindow(), TransferDataToWindow(), and UpdateFieldsFromLibrary().

◆ GetType()

HOLDER_TYPE KIWAY_HOLDER::GetType ( )
inlineinherited

Definition at line 49 of file kiway_holder.h.

49 { return m_type; }
HOLDER_TYPE m_type
Definition: kiway_holder.h:82

References KIWAY_HOLDER::m_type.

Referenced by DIALOG_SHIM::DIALOG_SHIM().

◆ GetUserUnits()

◆ HorizPixelsFromDU()

int DIALOG_SHIM::HorizPixelsFromDU ( int  x)
protectedinherited

Convert an integer number of dialog units to pixels, horizontally.

See SetSizeInDU or wxDialog documentation for more information.

Definition at line 160 of file dialog_shim.cpp.

161 {
162  wxSize sz( x, 0 );
163  return ConvertDialogToPixels( sz ).x;
164 }

Referenced by DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), and DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT().

◆ IsCtrl()

static bool DIALOG_SHIM::IsCtrl ( int  aChar,
const wxKeyEvent &  e 
)
inlinestaticinherited

Definition at line 137 of file dialog_shim.h.

138  {
139  return e.GetKeyCode() == aChar && e.ControlDown() && !e.AltDown() &&
140  !e.ShiftDown() && !e.MetaDown();
141  }

Referenced by DIALOG_LABEL_EDITOR::OnCharHook(), and DIALOG_TEXT_PROPERTIES::OnCharHook().

◆ IsQuasiModal()

◆ IsShiftCtrl()

static bool DIALOG_SHIM::IsShiftCtrl ( int  aChar,
const wxKeyEvent &  e 
)
inlinestaticinherited

Definition at line 143 of file dialog_shim.h.

144  {
145  return e.GetKeyCode() == aChar && e.ControlDown() && !e.AltDown() &&
146  e.ShiftDown() && !e.MetaDown();
147  }

Referenced by DIALOG_LABEL_EDITOR::OnCharHook(), and DIALOG_TEXT_PROPERTIES::OnCharHook().

◆ Kiway()

KIWAY& KIWAY_HOLDER::Kiway ( ) const
inlineinherited

Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in.

A KIWAY_HOLDER is not necessarily a KIWAY_PLAYER.

Definition at line 56 of file kiway_holder.h.

57  {
58  wxASSERT( m_kiway ); // smoke out bugs in Debug build, then Release runs fine.
59  return *m_kiway;
60  }
KIWAY * m_kiway
Definition: kiway_holder.h:81

References KIWAY_HOLDER::m_kiway.

Referenced by TREEPROJECT_ITEM::Activate(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PCB_BASE_EDIT_FRAME::AddLibrary(), LIB_CONTROL::AddSymbolToSchematic(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), COMMON_CONTROL::ConfigurePaths(), DIALOG_CHOOSE_FOOTPRINT::ConstructRightPanel(), DIALOG_CHOOSE_COMPONENT::ConstructRightPanel(), PCB_BASE_FRAME::CreateAndShow3D_Frame(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), DIALOG_SHIM::DIALOG_SHIM(), CVPCB_MAINFRAME::DisplayStatus(), FIELDS_GRID_TRICKS::doPopupSelection(), FIELDS_EDITOR_GRID_TRICKS::doPopupSelection(), EDIT_TOOL::EditFpInFpEditor(), SCH_EDITOR_CONTROL::EditWithLibEdit(), BACK_ANNOTATE::FetchNetlistFromPCB(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), FOOTPRINT_EDIT_FRAME::GetPlotSettings(), PCB_EDIT_FRAME::importFile(), KICAD_MANAGER_FRAME::language_change(), KIWAY_PLAYER::language_change(), LIB_TREE_MODEL_ADAPTER::LIB_TREE_MODEL_ADAPTER(), CVPCB_MAINFRAME::LoadFootprintFiles(), KICAD_MANAGER_FRAME::LoadProject(), TEXT_BUTTON_SYMBOL_CHOOSER::OnButtonClick(), TEXT_BUTTON_FP_CHOOSER::OnButtonClick(), KICAD_MANAGER_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OnCloseWindow(), PL_EDITOR_FRAME::OnExit(), SCH_EDIT_FRAME::OnExit(), FOOTPRINT_EDIT_FRAME::OnExitKiCad(), FOOTPRINT_VIEWER_FRAME::OnExitKiCad(), LIB_EDIT_FRAME::OnExitKiCad(), SAVE_AS_TRAVERSER::OnFile(), KICAD_MANAGER_FRAME::OnImportEagleFiles(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), SCH_EDIT_FRAME::OnOpenCvpcb(), SCH_EDIT_FRAME::OnOpenPcbnew(), EDA_BASE_FRAME::OnPreferences(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick(), FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard(), FOOTPRINT_EDIT_FRAME::OnUpdateLoadModuleFromBoard(), SCH_EDIT_FRAME::OnUpdatePCB(), KIWAY_HOLDER::Prj(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), LIB_EDIT_FRAME::refreshSchematic(), SCH_EDITOR_CONTROL::rescueProject(), EE_INSPECTION_TOOL::RunSimulation(), CVPCB_MAINFRAME::SaveFootprintAssociation(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), LIB_TREE_MODEL_ADAPTER::SavePinnedItems(), SCH_BASE_FRAME::SelectComponentFromLibBrowser(), SCH_EDIT_FRAME::SendCrossProbeClearHighlight(), SCH_EDIT_FRAME::SendCrossProbeNetName(), PCB_EDIT_FRAME::SendCrossProbeNetName(), CVPCB_MAINFRAME::SendMessageToEESCHEMA(), PCB_EDIT_FRAME::SendMessageToEESCHEMA(), SCH_EDIT_FRAME::SendMessageToPCBNEW(), SCH_EDIT_FRAME::sendNetlistToCvpcb(), SCH_EDIT_FRAME::SetCrossProbeConnection(), FOOTPRINT_EDIT_FRAME::SetPlotSettings(), CVPCB_CONTROL::ShowFootprintViewer(), COMMON_CONTROL::ShowLibraryTable(), COMMON_CONTROL::ShowPlayer(), KICAD_MANAGER_CONTROL::ShowPlayer(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), PCB_EDITOR_CONTROL::UpdateSchematicFromPCB(), and DIALOG_EXCHANGE_FOOTPRINTS::ViewAndSelectFootprint().

◆ OnAddField()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnAddField ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 561 of file dialog_edit_component_in_schematic.cpp.

562 {
563  if( !m_grid->CommitPendingChanges() )
564  return;
565 
566  SCHEMATIC_SETTINGS& settings = m_cmp->Schematic()->Settings();
567  int fieldID = m_fields->size();
568  SCH_FIELD newField( wxPoint( 0, 0 ), fieldID, m_cmp,
570 
571  newField.SetTextAngle( m_fields->at( REFERENCE ).GetTextAngle() );
572  newField.SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
573 
574  m_fields->push_back( newField );
575 
576  // notify the grid
577  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
578  m_grid->ProcessTableMessage( msg );
579 
580  m_grid->MakeCellVisible( (int) m_fields->size() - 1, 0 );
581  m_grid->SetGridCursor( (int) m_fields->size() - 1, 0 );
582 
583  m_grid->EnableCellEditControl();
584  m_grid->ShowCellEditControl();
585 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
These settings were stored in SCH_BASE_FRAME previously.
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:113
static const wxString GetDefaultFieldName(int aFieldNdx)
Function GetDefaultFieldName returns a default symbol field name for field aFieldNdx for all componen...
Field Reference of part, i.e. "IC21".
SCHEMATIC_SETTINGS & Settings()
Definition: schematic.h:144
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174

References WX_GRID::CommitPendingChanges(), TEMPLATE_FIELDNAME::GetDefaultFieldName(), m_cmp, SCHEMATIC_SETTINGS::m_DefaultTextSize, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, REFERENCE, SCH_ITEM::Schematic(), EDA_TEXT::SetTextAngle(), EDA_TEXT::SetTextSize(), and SCHEMATIC::Settings().

◆ OnBrowseLibrary()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnBrowseLibrary ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 232 of file dialog_edit_component_in_schematic.cpp.

233 {
234  std::vector<COMPONENT_SELECTION> dummy;
235 
236  LIB_ID id;
237  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH );
238 
239  auto sel = GetParent()->SelectCompFromLibTree( nullptr, dummy, true, 0, 0, false, &id );
240 
241  if( !sel.LibId.IsValid() )
242  return;
243 
244  m_libraryNameTextCtrl->SetValue( sel.LibId.Format() );
245 
246  LIB_PART* entry = GetParent()->GetLibPart( sel.LibId );
247 
248  if( entry )
249  {
250  // Update the value field for Power symbols
251  if( entry->IsPower() )
252  m_grid->SetCellValue( VALUE, FDC_VALUE, sel.LibId.GetLibItemName() );
253 
254  // Update the units control
255  int unit = m_unitChoice->GetSelection();
256  m_unitChoice->Clear();
257 
258  if( entry->GetUnitCount() > 1 )
259  {
260  for( int ii = 1; ii <= entry->GetUnitCount(); ii++ )
261  m_unitChoice->Append( LIB_PART::SubReference( ii, false ) );
262 
263  if( unit < 0 || static_cast<unsigned>( unit ) >= m_unitChoice->GetCount() )
264  unit = 0;
265 
266  m_unitChoice->SetSelection( unit );
267  m_unitLabel->Enable( true );
268  m_unitChoice->Enable( true );
269  }
270  else
271  {
272  m_unitChoice->SetSelection( -1 );
273  m_unitLabel->Enable( false );
274  m_unitChoice->Enable( false );
275  }
276 
277  // Update the deMorgan conversion controls
278  bool conversion = m_cbAlternateSymbol->GetValue();
279 
280  m_cbAlternateSymbol->SetValue( conversion && entry->HasConversion() );
281  m_cbAlternateSymbol->Enable( entry->HasConversion() );
282  }
283 }
bool HasConversion() const
Test if part has more than one body conversion type (DeMorgan).
LIB_PART * GetLibPart(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load symbol from symbol library table.
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
#define VALUE
int GetUnitCount() const override
For items with units, return the number of units.
Define a library symbol object.
COMPONENT_SELECTION SelectCompFromLibTree(const SCHLIB_FILTER *aFilter, std::vector< COMPONENT_SELECTION > &aHistoryList, bool aUseLibBrowser, int aUnit, int aConvert, bool aShowFootprints, const LIB_ID *aHighlight=nullptr, bool aAllowFields=true)
Function SelectComponentFromLib Calls the library viewer to select component to import into schematic...
Definition: getpart.cpp:89
bool IsPower() const
static LIB_PART * dummy()
Used to draw a dummy shape when a LIB_PART is not found in library.
static wxString SubReference(int aUnit, bool aAddSeparator=true)
int Parse(const UTF8 &aId, LIB_ID_TYPE aType, bool aFix=false)
Parse LIB_ID with the information from aId.
Definition: lib_id.cpp:122

References dummy(), FDC_VALUE, SCH_BASE_FRAME::GetLibPart(), GetParent(), LIB_PART::GetUnitCount(), LIB_PART::HasConversion(), LIB_ID::ID_SCH, LIB_PART::IsPower(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_cbAlternateSymbol, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitChoice, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitLabel, LIB_ID::Parse(), SCH_BASE_FRAME::SelectCompFromLibTree(), LIB_PART::SubReference(), and VALUE.

◆ OnCancelButtonClick()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnCancelButtonClick ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 314 of file dialog_edit_component_in_schematic.cpp.

315 {
316  // Running the Footprint Browser gums up the works and causes the automatic cancel
317  // stuff to no longer work. So we do it here ourselves.
318  EndQuasiModal( wxID_CANCEL );
319 }
void EndQuasiModal(int retCode)

References DIALOG_SHIM::EndQuasiModal().

◆ OnDeleteField()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnDeleteField ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 588 of file dialog_edit_component_in_schematic.cpp.

589 {
590  int curRow = m_grid->GetGridCursorRow();
591 
592  if( curRow < 0 )
593  {
594  return;
595  }
596  else if( curRow < MANDATORY_FIELDS )
597  {
598  DisplayError( this, wxString::Format( _( "The first %d fields are mandatory." ),
599  MANDATORY_FIELDS ) );
600  return;
601  }
602 
603  m_grid->CommitPendingChanges( true /* quiet mode */ );
604 
605  m_fields->erase( m_fields->begin() + curRow );
606 
607  // notify the grid
608  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, curRow, 1 );
609  m_grid->ProcessTableMessage( msg );
610 
611  if( m_grid->GetNumberRows() > 0 )
612  {
613  m_grid->MakeCellVisible( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
614  m_grid->SetGridCursor( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
615  }
616 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:239
The first 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
#define _(s)
Definition: 3d_actions.cpp:33

References _, WX_GRID::CommitPendingChanges(), DisplayError(), Format(), m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, and MANDATORY_FIELDS.

◆ OnEditSpiceModel()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnEditSpiceModel ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 286 of file dialog_edit_component_in_schematic.cpp.

287 {
288 #ifdef KICAD_SPICE
289  int diff = m_fields->size();
290 
291  DIALOG_SPICE_MODEL dialog( this, *m_cmp, m_fields );
292 
293  if( dialog.ShowModal() != wxID_OK )
294  return;
295 
296  diff = (int) m_fields->size() - diff;
297 
298  if( diff > 0 )
299  {
300  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, diff );
301  m_grid->ProcessTableMessage( msg );
302  }
303  else if( diff < 0 )
304  {
305  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, -diff );
306  m_grid->ProcessTableMessage( msg );
307  }
308 
309  m_grid->ForceRefresh();
310 #endif /* KICAD_SPICE */
311 }

References m_cmp, m_fields, and DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid.

◆ OnGridCellChanging()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnGridCellChanging ( wxGridEvent &  event)
private

Definition at line 545 of file dialog_edit_component_in_schematic.cpp.

546 {
547  wxGridCellEditor* editor = m_grid->GetCellEditor( event.GetRow(), event.GetCol() );
548  wxControl* control = editor->GetControl();
549 
550  if( control && control->GetValidator() && !control->GetValidator()->Validate( control ) )
551  {
552  event.Veto();
553  m_delayedFocusRow = event.GetRow();
554  m_delayedFocusColumn = event.GetCol();
555  }
556 
557  editor->DecRef();
558 }

References m_delayedFocusColumn, m_delayedFocusRow, and DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid.

Referenced by DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), and ~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC().

◆ OnInitDlg()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnInitDlg ( wxInitDialogEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 796 of file dialog_edit_component_in_schematic.cpp.

797 {
799 
800  // Now all widgets have the size fixed, call FinishDialogSettings
802 }
void FinishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...

References DIALOG_SHIM::FinishDialogSettings(), and TransferDataToWindow().

◆ OnMoveDown()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnMoveDown ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 643 of file dialog_edit_component_in_schematic.cpp.

644 {
645  if( !m_grid->CommitPendingChanges() )
646  return;
647 
648  int i = m_grid->GetGridCursorRow();
649 
650  if( i >= MANDATORY_FIELDS && i < m_grid->GetNumberRows() - 1 )
651  {
652  SCH_FIELD tmp = m_fields->at( (unsigned) i );
653  m_fields->erase( m_fields->begin() + i, m_fields->begin() + i + 1 );
654  m_fields->insert( m_fields->begin() + i + 1, tmp );
655  m_grid->ForceRefresh();
656 
657  m_grid->SetGridCursor( i + 1, m_grid->GetGridCursorCol() );
658  m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() );
659  }
660  else
661  {
662  wxBell();
663  }
664 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
The first 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174

References WX_GRID::CommitPendingChanges(), m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, and MANDATORY_FIELDS.

◆ OnMoveUp()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnMoveUp ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 619 of file dialog_edit_component_in_schematic.cpp.

620 {
621  if( !m_grid->CommitPendingChanges() )
622  return;
623 
624  int i = m_grid->GetGridCursorRow();
625 
626  if( i > MANDATORY_FIELDS )
627  {
628  SCH_FIELD tmp = m_fields->at( (unsigned) i );
629  m_fields->erase( m_fields->begin() + i, m_fields->begin() + i + 1 );
630  m_fields->insert( m_fields->begin() + i - 1, tmp );
631  m_grid->ForceRefresh();
632 
633  m_grid->SetGridCursor( i - 1, m_grid->GetGridCursorCol() );
634  m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() );
635  }
636  else
637  {
638  wxBell();
639  }
640 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
The first 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174

References WX_GRID::CommitPendingChanges(), m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, and MANDATORY_FIELDS.

◆ OnPaint()

void DIALOG_SHIM::OnPaint ( wxPaintEvent &  event)
inherited

Definition at line 322 of file dialog_shim.cpp.

323 {
324  if( m_firstPaintEvent )
325  {
326 #ifdef __WXMAC__
327  fixOSXCancelButtonIssue( this );
328 #endif
329 
330  selectAllInTextCtrls( GetChildren() );
331 
333  m_initialFocusTarget->SetFocus();
334  else
335  SetFocus(); // Focus the dialog itself
336 
337  m_firstPaintEvent = false;
338  }
339 
340  event.Skip();
341 }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:203
bool m_firstPaintEvent
Definition: dialog_shim.h:202
static void selectAllInTextCtrls(wxWindowList &children)

References DIALOG_SHIM::m_firstPaintEvent, DIALOG_SHIM::m_initialFocusTarget, and selectAllInTextCtrls().

Referenced by DIALOG_SHIM::DIALOG_SHIM().

◆ OnSizeGrid()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnSizeGrid ( wxSizeEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 782 of file dialog_edit_component_in_schematic.cpp.

783 {
784  auto new_size = event.GetSize().GetX();
785 
786  if( m_width != new_size )
787  {
788  AdjustGridColumns( new_size );
789  }
790 
791  // Always propagate for a grid repaint (needed if the height changes, as well as width)
792  event.Skip();
793 }

References AdjustGridColumns(), and m_width.

◆ OnUpdateUI()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnUpdateUI ( wxUpdateUIEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 753 of file dialog_edit_component_in_schematic.cpp.

754 {
755  wxString shownColumns = m_grid->GetShownColumns();
756 
757  if( shownColumns != m_shownColumns )
758  {
759  m_shownColumns = shownColumns;
760 
761  if( !m_grid->IsCellEditControlShown() )
762  AdjustGridColumns( m_grid->GetRect().GetWidth() );
763  }
764 
765  // Handle a delayed focus
766  if( m_delayedFocusRow >= 0 )
767  {
768  m_grid->SetFocus();
769  m_grid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
770  m_grid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
771 
772 
773  m_grid->EnableCellEditControl( true );
774  m_grid->ShowCellEditControl();
775 
776  m_delayedFocusRow = -1;
778  }
779 }
wxString GetShownColumns()
Get a tokenized string containing the shown column indexes.
Definition: wx_grid.cpp:103

References AdjustGridColumns(), WX_GRID::GetShownColumns(), m_delayedFocusColumn, m_delayedFocusRow, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, and m_shownColumns.

◆ Prj()

PROJECT & KIWAY_HOLDER::Prj ( ) const
inherited

Function Prj returns a reference to the PROJECT "associated with" this KIWAY.

Definition at line 35 of file kiway_holder.cpp.

36 {
37  return Kiway().Prj();
38 }
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_holder.h:56
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:171

References KIWAY_HOLDER::Kiway(), and KIWAY::Prj().

Referenced by PCB_BASE_EDIT_FRAME::AddLibrary(), LIB_MANAGER::addLibrary(), SCH_EDIT_FRAME::AppendSchematic(), PCB_EDIT_FRAME::ArchiveModulesOnBoard(), DIALOG_SYMBOL_REMAP::backupProject(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), DIALOG_FOOTPRINT_FP_EDITOR::Cfg3DPath(), DIALOG_FOOTPRINT_BOARD_EDITOR::Cfg3DPath(), DIALOG_GEN_FOOTPRINT_POSITION::CreateGerberFiles(), PCB_BASE_EDIT_FRAME::CreateNewLibrary(), KICAD_MANAGER_FRAME::CreateNewProject(), DIALOG_PLOT_SCHEMATIC::createPlotFileName(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary(), DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP(), DIALOG_BOARD_STATISTICS::DIALOG_BOARD_STATISTICS(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIG_EQUFILES::DIALOG_CONFIG_EQUFILES(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS(), DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP(), DIALOG_SYMBOL_REMAP::DIALOG_SYMBOL_REMAP(), LIB_VIEW_FRAME::DisplayLibInfos(), CVPCB_MAINFRAME::DisplayStatus(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), PCB_EDIT_FRAME::doAutoSave(), FIELDS_GRID_TRICKS::doPopupSelection(), FIELDS_EDITOR_GRID_TRICKS::doPopupSelection(), KICAD_MANAGER_CONTROL::Execute(), PCB_EDIT_FRAME::Export_IDF3(), DIALOG_EXPORT_SVG::ExportSVGFile(), LIB_CONTROL::ExportSymbolAsSVG(), LIB_CONTROL::ExportView(), PCB_EDIT_FRAME::ExportVRML_File(), PCB_EDIT_FRAME::Files_io_from_id(), PCB_EDIT_FRAME::GenD356File(), DIALOG_GENDRILL::GenDrillAndMapFiles(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), FOOTPRINT_VIEWER_FRAME::getCurFootprintName(), LIB_EDIT_FRAME::GetCurLib(), FOOTPRINT_VIEWER_FRAME::getCurNickname(), SCH_BASE_FRAME::GetLibPart(), DIALOG_SYMBOL_REMAP::getLibsNotInGlobalSymbolLibTable(), KICAD_MANAGER_FRAME::GetProjectFileName(), LIB_VIEW_FRAME::GetSelectedSymbol(), FP_THREAD_IFACE::GetTable(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), SCH_EDITOR_CONTROL::ImportFPAssignments(), FOOTPRINT_EDIT_FRAME::initLibraryTree(), LIB_EDIT_FRAME::KiwayMailIn(), EDA_DRAW_FRAME::LibraryFileBrowser(), LIB_EDIT_FRAME::LoadComponentFromCurrentLib(), CVPCB_MAINFRAME::LoadFootprintFiles(), DIALOG_SPICE_MODEL::loadLibrary(), LIB_EDIT_FRAME::LoadOneSymbol(), KICAD_MANAGER_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadProjectFile(), CVPCB_MAINFRAME::LoadProjectFile(), PCB_EDIT_FRAME::LoadProjectSettings(), DRC::LoadRules(), SCH_EDIT_FRAME::LoadSheetFromFile(), DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged(), DIALOG_FOOTPRINT_BOARD_EDITOR::On3DModelCellChanged(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), KICAD_MANAGER_FRAME::OnBrowseInFileExplorer(), TEXT_BUTTON_URL::OnButtonClick(), TEXT_BUTTON_FILE_BROWSER::OnButtonClick(), DIALOG_EDIT_COMPONENTS_LIBID::onClickOrphansButton(), SCH_EDIT_FRAME::OnCloseWindow(), DIALOG_GENDRILL::OnGenReportFile(), SCH_EDIT_FRAME::OnImportProject(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), SCH_EDIT_FRAME::OnOpenCvpcb(), KICAD_MANAGER_FRAME::OnOpenFileInTextEditor(), DIALOG_NETLIST::OnOpenNetlistClick(), SCH_EDIT_FRAME::OnOpenPcbnew(), DIALOG_EXPORT_SVG::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT_SCHEMATIC::OnOutputDirectoryBrowseClicked(), DIALOG_GEN_FOOTPRINT_POSITION::OnOutputDirectoryBrowseClicked(), DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), DIALOG_BOM::OnRunGenerator(), FOOTPRINT_EDIT_FRAME::OnSaveFootprintAsPng(), DIALOG_ERC::OnSaveReport(), DIALOG_DRC::OnSaveReport(), DIALOG_SPICE_MODEL::onSelectLibrary(), LIB_VIEW_FRAME::OnSelectSymbol(), KICAD_MANAGER_FRAME::OnUnarchiveFiles(), SCH_EDIT_FRAME::OnUpdatePCB(), SCH_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::OpenProjectFiles(), PANEL_PREV_3D::PANEL_PREV_3D(), SCH_EDITOR_CONTROL::Paste(), FOOTPRINT_EDITOR_TOOLS::PasteFootprint(), PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME(), DIALOG_PLOT::Plot(), DIALOG_PLOT_SCHEMATIC::Plot_1_Page_HPGL(), DIALOG_PLOT_SCHEMATIC::PlotOneSheetDXF(), DIALOG_CHOOSE_COMPONENT::PopulateFootprintSelector(), SCH_EDITOR_CONTROL::Print(), SCH_EDIT_FRAME::PrintPage(), EDA_DRAW_FRAME::PrintWorkSheet(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), PCB_EDIT_FRAME::RecreateCmpFileFromBoard(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), LIB_VIEW_FRAME::ReCreateListCmp(), LIB_VIEW_FRAME::ReCreateListLib(), EDA_3D_VIEWER::ReloadRequest(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), SCH_EDITOR_CONTROL::RescueLegacyProject(), SCH_EDITOR_CONTROL::RescueSymbolLibTableProject(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), FOOTPRINT_EDIT_FRAME::retainLastFootprint(), DIALOG_EDIT_COMPONENTS_LIBID::revertChanges(), SCH_EDIT_FRAME::SaveEEFile(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), FOOTPRINT_EDIT_FRAME::SaveFootprintInLibrary(), LIB_EDIT_FRAME::saveLibrary(), LIB_EDIT_FRAME::SaveOneSymbol(), LIB_EDIT_FRAME::savePartAs(), SCH_EDIT_FRAME::SaveProject(), CVPCB_MAINFRAME::SaveProjectFile(), SCH_EDIT_FRAME::SaveProjectSettings(), PCB_EDIT_FRAME::SaveProjectSettings(), DIALOG_BOARD_STATISTICS::saveReportClicked(), SCH_BASE_FRAME::saveSymbolLibTables(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), SCH_BASE_FRAME::SelectCompFromLibTree(), PCB_BASE_FRAME::SelectLibrary(), LIB_EDIT_FRAME::SelectLibraryFromList(), LIB_EDIT_FRAME::selectSymLibTable(), FOOTPRINT_VIEWER_FRAME::setCurFootprintName(), LIB_EDIT_FRAME::SetCurLib(), FOOTPRINT_VIEWER_FRAME::setCurNickname(), LIB_EDIT_FRAME::SetCurPart(), GERBVIEW_FRAME::SetPageSettings(), KICAD_MANAGER_FRAME::SetProjectFileName(), EE_INSPECTION_TOOL::ShowDatasheet(), DIALOG_CHOOSE_COMPONENT::ShowFootprintFor(), COMMON_CONTROL::ShowHelp(), LIB_VIEW_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::symTable(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync(), FOOTPRINT_EDIT_FRAME::SyncLibraryTree(), EDA_3D_VIEWER::takeScreenshot(), PANEL_SETUP_RULES::TransferDataFromWindow(), TransferDataFromWindow(), NETLIST_DIALOG::TransferDataFromWindow(), DIALOG_EDIT_COMPONENTS_LIBID::TransferDataFromWindow(), PANEL_SETUP_RULES::TransferDataToWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), UpdateFieldsFromLibrary(), DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample(), FOOTPRINT_VIEWER_FRAME::UpdateTitle(), FOOTPRINT_EDIT_FRAME::updateTitle(), SCH_EDIT_FRAME::UpdateTitle(), Validate(), SCH_EDIT_FRAME::WriteNetListFile(), DIALOG_FOOTPRINT_BOARD_EDITOR::~DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR(), and PCB_BASE_EDIT_FRAME::~PCB_BASE_EDIT_FRAME().

◆ ResetSize()

void DIALOG_SHIM::ResetSize ( )
protectedinherited

Clear the existing dialog size and position.

This will cause the dialog size to be clear so the next time the dialog is shown the sizers will layout the dialog accordingly. This useful when there are dialog windows that size changes due to layout dependency hidden controls.

Definition at line 239 of file dialog_shim.cpp.

240 {
241  const char* hash_key;
242 
243  if( m_hash_key.size() )
244  {
245  // a special case like EDA_LIST_DIALOG, which has multiple uses.
246  hash_key = m_hash_key.c_str();
247  }
248  else
249  {
250  hash_key = typeid(*this).name();
251  }
252 
253  RECT_MAP::iterator it = class_map.find( hash_key );
254 
255  if( it == class_map.end() )
256  return;
257 
258  EDA_RECT rect = it->second;
259  rect.SetSize( 0, 0 );
260  class_map[ hash_key ] = rect;
261 }
std::string m_hash_key
Definition: dialog_shim.h:197
static RECT_MAP class_map
void SetSize(const wxSize &size)
Definition: eda_rect.h:144
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44

References class_map, DIALOG_SHIM::m_hash_key, and EDA_RECT::SetSize().

Referenced by DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY().

◆ SetInitialFocus()

void DIALOG_SHIM::SetInitialFocus ( wxWindow *  aWindow)
inlineinherited

Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.

Definition at line 115 of file dialog_shim.h.

116  {
117  m_initialFocusTarget = aWindow;
118  }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:203

References DIALOG_SHIM::m_initialFocusTarget.

Referenced by DIALOG_BOM::DIALOG_BOM(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIGURE_PATHS::DIALOG_CONFIGURE_PATHS(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_EDIT_SHEET_PIN::DIALOG_EDIT_SHEET_PIN(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FIND::DIALOG_FIND(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FP_PLUGIN_OPTIONS::DIALOG_FP_PLUGIN_OPTIONS(), DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES(), DIALOG_IMPORT_GFX::DIALOG_IMPORT_GFX(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_POSITION_RELATIVE::DIALOG_POSITION_RELATIVE(), DIALOG_SCH_FIND::DIALOG_SCH_FIND(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchAllClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchIDClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchRefClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchSelectedClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchValueClicked(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), LIB_EDIT_FRAME::savePartAs(), DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataToWindow(), DIALOG_KEEPOUT_AREA_PROPERTIES::TransferDataToWindow(), and DIALOG_COPPER_ZONE::TransferDataToWindow().

◆ SetKiway()

void KIWAY_HOLDER::SetKiway ( wxWindow *  aDest,
KIWAY aKiway 
)
inherited

Function SetKiway.

Parameters
aDestis the recipient of aKiway pointer. It is only used for debugging, since "this" is not a wxWindow*. "this" is a KIWAY_HOLDER mix-in.
aKiwayis often from a parent window, or from KIFACE::CreateWindow().

Definition at line 42 of file kiway_holder.cpp.

43 {
44 #if defined(DEBUG)
45  // offer a trap point for debugging most any window
46  wxASSERT( aDest );
47  if( !strcmp( typeid(aDest).name(), "DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB" ) )
48  {
49  int breakhere=1;
50  (void) breakhere;
51  }
52 #endif
53 
54  (void) aDest;
55 
56  m_kiway = aKiway;
57 }
KIWAY * m_kiway
Definition: kiway_holder.h:81
const char * name
Definition: DXF_plotter.cpp:60

References KIWAY_HOLDER::m_kiway, and name.

Referenced by BM2CMP_FRAME::BM2CMP_FRAME(), InvokePcbLibTableEditor(), PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME(), and SIM_PLOT_FRAME::SIM_PLOT_FRAME().

◆ SetSizeInDU()

void DIALOG_SHIM::SetSizeInDU ( int  x,
int  y 
)
protectedinherited

Set the dialog to the given dimensions in "dialog units".

These are units equivalent to 4* the average character width and 8* the average character height, allowing a dialog to be sized in a way that scales it with the system font.

Definition at line 153 of file dialog_shim.cpp.

154 {
155  wxSize sz( x, y );
156  SetSize( ConvertDialogToPixels( sz ) );
157 }

Referenced by DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), HTML_MESSAGE_BOX::HTML_MESSAGE_BOX(), and HTML_MESSAGE_BOX::SetDialogSizeInDU().

◆ Show()

bool DIALOG_SHIM::Show ( bool  show)
overrideinherited

Definition at line 180 of file dialog_shim.cpp.

181 {
182  bool ret;
183  const char* hash_key;
184 
185  if( m_hash_key.size() )
186  {
187  // a special case like EDA_LIST_DIALOG, which has multiple uses.
188  hash_key = m_hash_key.c_str();
189  }
190  else
191  {
192  hash_key = typeid(*this).name();
193  }
194 
195  // Show or hide the window. If hiding, save current position and size.
196  // If showing, use previous position and size.
197  if( show )
198  {
199 #ifndef __WINDOWS__
200  wxDialog::Raise(); // Needed on OS X and some other window managers (i.e. Unity)
201 #endif
202  ret = wxDialog::Show( show );
203 
204  // classname is key, returns a zeroed out default EDA_RECT if none existed before.
205  EDA_RECT savedDialogRect = class_map[ hash_key ];
206 
207  if( savedDialogRect.GetSize().x != 0 && savedDialogRect.GetSize().y != 0 )
208  {
209  SetSize( savedDialogRect.GetPosition().x,
210  savedDialogRect.GetPosition().y,
211  std::max( wxDialog::GetSize().x, savedDialogRect.GetSize().x ),
212  std::max( wxDialog::GetSize().y, savedDialogRect.GetSize().y ),
213  0 );
214  }
215 
216  // Be sure that the dialog appears in a visible area
217  // (the dialog position might have been stored at the time when it was
218  // shown on another display)
219  if( wxDisplay::GetFromWindow( this ) == wxNOT_FOUND )
220  Centre();
221  }
222  else
223  {
224  // Save the dialog's position & size before hiding, using classname as key
225  class_map[ hash_key ] = EDA_RECT( wxDialog::GetPosition(), wxDialog::GetSize() );
226 
227 #ifdef __WXMAC__
228  if ( m_eventLoop )
229  m_eventLoop->Exit( GetReturnCode() ); // Needed for APP-MODAL dlgs on OSX
230 #endif
231 
232  ret = wxDialog::Show( show );
233  }
234 
235  return ret;
236 }
std::string m_hash_key
Definition: dialog_shim.h:197
static RECT_MAP class_map
const wxPoint GetPosition() const
Definition: eda_rect.h:115
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
const wxSize GetSize() const
Definition: eda_rect.h:103

References class_map, EDA_RECT::GetPosition(), EDA_RECT::GetSize(), DIALOG_SHIM::m_hash_key, wxPoint::x, and wxPoint::y.

Referenced by DIALOG_SHIM::EndQuasiModal(), InvokeDialogERC(), SCH_EDIT_FRAME::OnAnnotate(), DIALOG_DRC::OnDRCItemDClick(), DIALOG_ERC::OnERCItemDClick(), DIALOG_CLEANUP_TRACKS_AND_VIAS::OnLeftDClickItem(), POSITION_RELATIVE_TOOL::PositionRelative(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), DRC::ShowDRCDialog(), SCH_EDIT_FRAME::ShowFindReplaceDialog(), DIALOG_SHIM::ShowQuasiModal(), DIALOG_POSITION_RELATIVE::UpdateAnchor(), and SCH_EDIT_FRAME::UpdateHierarchyNavigator().

◆ ShowQuasiModal()

int DIALOG_SHIM::ShowQuasiModal ( )
inherited

Definition at line 367 of file dialog_shim.cpp.

368 {
369  // This is an exception safe way to zero a pointer before returning.
370  // Yes, even though DismissModal() clears this first normally, this is
371  // here in case there's an exception before the dialog is dismissed.
372  struct NULLER
373  {
374  void*& m_what;
375  NULLER( void*& aPtr ) : m_what( aPtr ) {}
376  ~NULLER() { m_what = 0; } // indeed, set it to NULL on destruction
377  } clear_this( (void*&) m_qmodal_loop );
378 
379  // release the mouse if it's currently captured as the window having it
380  // will be disabled when this dialog is shown -- but will still keep the
381  // capture making it impossible to do anything in the modal dialog itself
382  wxWindow* win = wxWindow::GetCapture();
383  if( win )
384  win->ReleaseMouse();
385 
386  // Get the optimal parent
387  wxWindow* parent = GetParentForModalDialog( GetParent(), GetWindowStyle() );
388 
389  // Show the optimal parent
390  DBG( if( parent ) printf( "%s: optimal parent: %s\n", __func__, typeid(*parent).name() );)
391 
392  wxASSERT_MSG( !m_qmodal_parent_disabler,
393  wxT( "Caller using ShowQuasiModal() twice on same window?" ) );
394 
395  // quasi-modal: disable only my "optimal" parent
397 
398 #ifdef __WXMAC__
399  // Apple in its infinite wisdom will raise a disabled window before even passing
400  // us the event, so we have no way to stop it. Instead, we must set an order on
401  // the windows so that the quasi-modal will be pushed in front of the disabled
402  // window when it is raised.
403  ReparentQuasiModal();
404 #endif
405  Show( true );
406 
407  m_qmodal_showing = true;
408 
409  WX_EVENT_LOOP event_loop;
410 
411  m_qmodal_loop = &event_loop;
412 
413  event_loop.Run();
414 
415  m_qmodal_showing = false;
416 
417  return GetReturnCode();
418 }
bool m_qmodal_showing
Definition: dialog_shim.h:207
#define WX_EVENT_LOOP
Definition: kiway_player.h:41
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:205
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:208
Toggle a window's "enable" status to disabled, then enabled on destruction.
Definition: dialog_shim.cpp:35
#define DBG(x)
Definition: fctsys.h:33

References DBG, DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, DIALOG_SHIM::m_qmodal_showing, DIALOG_SHIM::Show(), and WX_EVENT_LOOP.

Referenced by LIB_EDIT_TOOL::editFieldProperties(), SCH_EDITOR_CONTROL::EditSymbolFields(), LIB_EDIT_TOOL::editSymbolProperties(), GLOBAL_EDIT_TOOL::EditTracksAndVias(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), PCB_EDIT_FRAME::InstallExchangeModuleFrame(), PCB_BASE_FRAME::InstallPadOptionsFrame(), InvokeDialogEditComponentsLibId(), InvokeDialogRescueEach(), InvokeDialogUpdateFields(), LIB_VIEW_FRAME::OnSelectSymbol(), SCH_EDIT_FRAME::OpenProjectFiles(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), SCH_EDITOR_CONTROL::RemapSymbols(), SCH_BASE_FRAME::SelectCompFromLibTree(), PCB_BASE_FRAME::SelectFootprintFromLibTree(), PCB_EDIT_FRAME::ShowBoardSetupDialog(), and SCH_EDIT_FRAME::ShowSchematicSetupDialog().

◆ TransferDataFromWindow()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow ( )
overrideprivate

Definition at line 398 of file dialog_edit_component_in_schematic.cpp.

399 {
400  if( !wxDialog::TransferDataFromWindow() ) // Calls our Validate() method.
401  return false;
402 
403  SCH_SCREEN* currentScreen = GetParent()->GetScreen();
404 
405  wxCHECK( currentScreen, false );
406 
407  // This needs to be done before the LIB_ID is changed to prevent stale library symbols in
408  // the schematic file.
409  currentScreen->Remove( m_cmp );
410 
411  wxString msg;
412 
413  // save old cmp in undo list if not already in edit, or moving ...
414  if( m_cmp->GetEditFlags() == 0 )
416 
417  // Save current flags which could be modified by next change settings
418  STATUS_FLAGS flags = m_cmp->GetFlags();
419 
420  // Library symbol identifier
421  LIB_ID id;
422 
423  if( id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH, true ) >= 0 )
424  {
425  msg.Printf( _( "'%s' is not a valid library indentifier." ),
426  m_libraryNameTextCtrl->GetValue() );
427  DisplayError( this, msg );
428  return false;
429  }
430 
431  LIB_PART* libSymbol = Prj().SchSymbolLibTable()->LoadSymbol( id );
432 
433  if( !libSymbol )
434  {
435  msg.Printf( _( "Symbol '%s' not found in symbol library '%s'." ),
436  id.GetLibItemName().wx_str(), id.GetLibNickname().wx_str() );
437  DisplayError( this, msg );
438  return false;
439  }
440 
441  m_cmp->SetLibSymbol( libSymbol->Flatten().release() );
442  m_cmp->SetLibId( id );
443 
444  // For symbols with multiple shapes (De Morgan representation) Set the selected shape:
445  if( m_cbAlternateSymbol->IsEnabled() && m_cbAlternateSymbol->GetValue() )
446  m_cmp->SetConvert( LIB_ITEM::LIB_CONVERT::DEMORGAN );
447  else
448  m_cmp->SetConvert( LIB_ITEM::LIB_CONVERT::BASE );
449 
450  //Set the part selection in multiple part per package
451  int unit_selection = m_unitChoice->IsEnabled()
452  ? m_unitChoice->GetSelection() + 1
453  : 1;
454  m_cmp->SetUnitSelection( &GetParent()->GetCurrentSheet(), unit_selection );
455  m_cmp->SetUnit( unit_selection );
456 
457  switch( m_rbOrientation->GetSelection() )
458  {
459  case 0: m_cmp->SetOrientation( CMP_ORIENT_0 ); break;
460  case 1: m_cmp->SetOrientation( CMP_ORIENT_90 ); break;
461  case 2: m_cmp->SetOrientation( CMP_ORIENT_180 ); break;
462  case 3: m_cmp->SetOrientation( CMP_ORIENT_270 ); break;
463  }
464 
465  switch( m_rbMirror->GetSelection() )
466  {
467  case 0: break;
468  case 1: m_cmp->SetOrientation( CMP_MIRROR_X ); break;
469  case 2: m_cmp->SetOrientation( CMP_MIRROR_Y ); break;
470  }
471 
472  // Restore m_Flag modified by SetUnit() and other change settings
473  m_cmp->ClearFlags();
474  m_cmp->SetFlags( flags );
475 
476  // change all field positions from relative to absolute
477  for( unsigned i = 0; i < m_fields->size(); ++i )
478  m_fields->at( i ).Offset( m_cmp->GetPosition() );
479 
480  LIB_PART* entry = GetParent()->GetLibPart( m_cmp->GetLibId() );
481 
482  if( entry && entry->IsPower() )
483  m_fields->at( VALUE ).SetText( m_cmp->GetLibId().GetLibItemName() );
484 
485  // Push all fields to the component -except- for those which are TEMPLATE_FIELDNAMES
486  // with empty values.
487  TEMPLATE_FIELDNAMES templateFieldnames = GetParent()->GetTemplateFieldNames();
488  SCH_FIELDS& fields = m_cmp->GetFields();
489 
490  fields.clear();
491 
492  for( size_t i = 0; i < m_fields->size(); ++i )
493  {
494  SCH_FIELD& field = m_fields->at( i );
495  bool emptyTemplateField = false;
496 
497  if( i >= MANDATORY_FIELDS )
498  {
499  for( const auto& fieldname : templateFieldnames )
500  {
501  if( field.GetName() == fieldname.m_Name && field.GetText().IsEmpty() )
502  {
503  emptyTemplateField = true;
504  break;
505  }
506  }
507  }
508 
509  if( !emptyTemplateField )
510  fields.push_back( field );
511  }
512 
513  // Reference has a specific initialization, depending on the current active sheet
514  // because for a given component, in a complex hierarchy, there are more than one
515  // reference.
516  m_cmp->SetRef( &GetParent()->GetCurrentSheet(), m_fields->at( REFERENCE ).GetText() );
517 
518  // The value, footprint and datasheet fields should be kept in sync in multi-unit
519  // parts.
520  if( m_cmp->GetUnitCount() > 1 )
521  {
522  std::vector<SCH_COMPONENT*> otherUnits;
523 
524  CollectOtherUnits( GetParent()->GetCurrentSheet(), m_cmp, &otherUnits );
525 
526  for( SCH_COMPONENT* otherUnit : otherUnits )
527  {
528  GetParent()->SaveCopyInUndoList( otherUnit, UR_CHANGED, true /* append */);
529  otherUnit->GetField( VALUE )->SetText( m_fields->at( VALUE ).GetText() );
530  otherUnit->GetField( FOOTPRINT )->SetText( m_fields->at( FOOTPRINT ).GetText() );
531  otherUnit->GetField( DATASHEET )->SetText( m_fields->at( DATASHEET ).GetText() );
532  GetParent()->RefreshItem( otherUnit );
533  }
534  }
535 
536  currentScreen->Append( m_cmp );
539  GetParent()->OnModify();
540 
541  return true;
542 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:239
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
const UTF8 & GetLibItemName() const
Definition: lib_id.h:114
bool Remove(SCH_ITEM *aItem)
Remove aItem from the schematic associated with this screen.
Definition: sch_screen.cpp:309
void SetLibSymbol(LIB_PART *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
void SetLibId(const LIB_ID &aName)
name of datasheet
void Parse(void *yyp, int yymajor, ParseTOKENTYPE yyminor ParseARG_PDECL)
The first 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
int GetUnitCount() const
Return the number of units per package of the symbol.
LIB_PART * GetLibPart(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load symbol from symbol library table.
bool TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
Field Name Module PCB, i.e. "16DIP300".
Field Reference of part, i.e. "IC21".
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly)
Populates a std::vector with SCH_FIELDs.
void SetConvert(int aConvert)
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
#define VALUE
std::vector< TEMPLATE_FIELDNAME > TEMPLATE_FIELDNAMES
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:239
STATUS_FLAGS GetEditFlags() const
Definition: base_struct.h:244
PROJECT & Prj() const
Function Prj returns a reference to the PROJECT "associated with" this KIWAY.
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
Definition: sch_component.h:77
const wxPoint GetPosition() const override
void SaveCopyInUndoList(SCH_ITEM *aItemToCopy, UNDO_REDO_T aTypeCommand, bool aAppend=false, const wxPoint &aTransformPoint=wxPoint(0, 0))
Create a copy of the current schematic item, and put it in the undo list.
Define a library symbol object.
unsigned STATUS_FLAGS
Definition: base_struct.h:156
void SetUnit(int aUnit)
Change the unit number to aUnit.
std::unique_ptr< LIB_PART > Flatten() const
Return a flattened symbol inheritance to the caller.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
bool IsPower() const
void Append(SCH_ITEM *aItem)
Definition: sch_screen.cpp:197
void RefreshItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
#define _(s)
Definition: 3d_actions.cpp:33
wxString GetName(bool aUseDefaultName=true) const
Function GetName returns the field name.
Definition: sch_field.cpp:420
Schematic symbol object.
Definition: sch_component.h:88
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:240
void CollectOtherUnits(SCH_SHEET_PATH &aSheet, SCH_COMPONENT *aUnit, std::vector< SCH_COMPONENT * > *otherUnits)
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:241
const LIB_ID & GetLibId() const
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:126
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames()
Return a template field names list for read only access.
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...

References _, SCH_SCREEN::Append(), EDA_ITEM::ClearFlags(), CMP_MIRROR_X, CMP_MIRROR_Y, CMP_ORIENT_0, CMP_ORIENT_180, CMP_ORIENT_270, CMP_ORIENT_90, CollectOtherUnits(), DATASHEET, DisplayError(), LIB_PART::Flatten(), FOOTPRINT, EDA_ITEM::GetEditFlags(), SCH_COMPONENT::GetFields(), EDA_ITEM::GetFlags(), SCH_COMPONENT::GetLibId(), LIB_ID::GetLibItemName(), SCH_BASE_FRAME::GetLibPart(), SCH_FIELD::GetName(), GetParent(), SCH_COMPONENT::GetPosition(), SCH_EDIT_FRAME::GetScreen(), SCH_BASE_FRAME::GetTemplateFieldNames(), EDA_TEXT::GetText(), SCH_COMPONENT::GetUnitCount(), LIB_ID::ID_SCH, LIB_PART::IsPower(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_cbAlternateSymbol, m_cmp, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbMirror, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbOrientation, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitChoice, MANDATORY_FIELDS, SCH_EDIT_FRAME::OnModify(), numEval::Parse(), KIWAY_HOLDER::Prj(), REFERENCE, SCH_BASE_FRAME::RefreshItem(), SCH_SCREEN::Remove(), SCH_EDIT_FRAME::SaveCopyInUndoList(), SCH_COMPONENT::SetConvert(), EDA_ITEM::SetFlags(), SCH_COMPONENT::SetLibId(), SCH_COMPONENT::SetLibSymbol(), SCH_COMPONENT::SetOrientation(), SCH_COMPONENT::SetRef(), SCH_COMPONENT::SetUnit(), SCH_COMPONENT::SetUnitSelection(), SCH_EDIT_FRAME::TestDanglingEnds(), UR_CHANGED, and VALUE.

◆ TransferDataToWindow()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataToWindow ( )
overrideprivate

Definition at line 141 of file dialog_edit_component_in_schematic.cpp.

142 {
143  if( !wxDialog::TransferDataToWindow() )
144  return false;
145 
146  std::set<wxString> defined;
147 
148  // Push a copy of each field into m_updateFields
149  for( int i = 0; i < m_cmp->GetFieldCount(); ++i )
150  {
151  SCH_FIELD field( *m_cmp->GetField( i ) );
152 
153  // change offset to be symbol-relative
154  field.Offset( -m_cmp->GetPosition() );
155 
156  defined.insert( field.GetName() );
157  m_fields->push_back( field );
158  }
159 
160  // Add in any template fieldnames not yet defined:
161  for( const TEMPLATE_FIELDNAME& templateFieldname : GetParent()->GetTemplateFieldNames() )
162  {
163  if( defined.count( templateFieldname.m_Name ) <= 0 )
164  {
165  SCH_FIELD field( wxPoint( 0, 0 ), -1, m_cmp, templateFieldname.m_Name );
166  field.SetVisible( templateFieldname.m_Visible );
167  m_fields->push_back( field );
168  }
169  }
170 
171  // notify the grid
172  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_fields->size() );
173  m_grid->ProcessTableMessage( msg );
174  AdjustGridColumns( m_grid->GetRect().GetWidth() );
175 
176  // If a multi-unit component, set up the unit selector and interchangeable checkbox.
177  if( m_cmp->GetUnitCount() > 1 )
178  {
179  for( int ii = 1; ii <= m_cmp->GetUnitCount(); ii++ )
180  m_unitChoice->Append( LIB_PART::SubReference( ii, false ) );
181 
182  if( m_cmp->GetUnit() <= ( int )m_unitChoice->GetCount() )
183  m_unitChoice->SetSelection( m_cmp->GetUnit() - 1 );
184  }
185  else
186  {
187  m_unitLabel->Enable( false );
188  m_unitChoice->Enable( false );
189  }
190 
191  if( m_part != nullptr && m_part->HasConversion() )
192  {
193  if( m_cmp->GetConvert() > LIB_ITEM::LIB_CONVERT::BASE )
194  m_cbAlternateSymbol->SetValue( true );
195  }
196  else
197  m_cbAlternateSymbol->Enable( false );
198 
199  // Set the symbol orientation and mirroring.
200  int orientation = m_cmp->GetOrientation() & ~( CMP_MIRROR_X | CMP_MIRROR_Y );
201 
202  if( orientation == CMP_ORIENT_90 )
203  m_rbOrientation->SetSelection( 1 );
204  else if( orientation == CMP_ORIENT_180 )
205  m_rbOrientation->SetSelection( 2 );
206  else if( orientation == CMP_ORIENT_270 )
207  m_rbOrientation->SetSelection( 3 );
208  else
209  m_rbOrientation->SetSelection( 0 );
210 
211  int mirror = m_cmp->GetOrientation() & ( CMP_MIRROR_X | CMP_MIRROR_Y );
212 
213  if( mirror == CMP_MIRROR_X )
214  m_rbMirror->SetSelection( 1 );
215  else if( mirror == CMP_MIRROR_Y )
216  m_rbMirror->SetSelection( 2 );
217  else
218  m_rbMirror->SetSelection( 0 );
219 
220  // Set the component's unique ID time stamp.
221  m_textCtrlTimeStamp->SetValue( m_cmp->m_Uuid.AsString() );
222 
223  // Set the component's library name.
224  m_libraryNameTextCtrl->SetValue( m_cmp->GetLibId().Format() );
225 
226  Layout();
227 
228  return true;
229 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
void Offset(const wxPoint &aOffset)
Definition: eda_text.h:252
int GetOrientation()
Get the display symbol orientation.
bool HasConversion() const
Test if part has more than one body conversion type (DeMorgan).
int GetUnitCount() const
Return the number of units per package of the symbol.
wxString AsString() const
Definition: common.cpp:157
int GetUnit() const
const wxPoint GetPosition() const override
int GetFieldCount() const
Return the number of fields in this symbol.
UTF8 Format() const
Definition: lib_id.cpp:237
const KIID m_Uuid
Definition: base_struct.h:166
SCH_FIELD * GetField(int aFieldNdx)
Returns a field in this symbol.
static wxString SubReference(int aUnit, bool aAddSeparator=true)
Struct TEMPLATE_FIELDNAME holds a name of a component's field, field value, and default visibility.
int GetConvert() const
const LIB_ID & GetLibId() const

References AdjustGridColumns(), KIID::AsString(), CMP_MIRROR_X, CMP_MIRROR_Y, CMP_ORIENT_180, CMP_ORIENT_270, CMP_ORIENT_90, LIB_ID::Format(), SCH_COMPONENT::GetConvert(), SCH_COMPONENT::GetField(), SCH_COMPONENT::GetFieldCount(), SCH_COMPONENT::GetLibId(), SCH_COMPONENT::GetOrientation(), GetParent(), SCH_COMPONENT::GetPosition(), SCH_COMPONENT::GetUnit(), SCH_COMPONENT::GetUnitCount(), LIB_PART::HasConversion(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_cbAlternateSymbol, m_cmp, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, m_part, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbMirror, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbOrientation, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_textCtrlTimeStamp, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitChoice, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitLabel, EDA_ITEM::m_Uuid, EDA_TEXT::Offset(), EDA_TEXT::SetVisible(), and LIB_PART::SubReference().

Referenced by OnInitDlg().

◆ UpdateFieldsFromLibrary()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::UpdateFieldsFromLibrary ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 667 of file dialog_edit_component_in_schematic.cpp.

668 {
669  if( !m_grid->CommitPendingChanges() )
670  return;
671 
672  LIB_ID id;
673  wxString msg;
674  SCH_COMPONENT copy( *m_cmp );
675 
676  copy.SetFields( *m_fields );
677 
678  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH, true );
679 
680  if( id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH, true ) >= 0 )
681  {
682  msg.Printf( _( "'%s' is not a valid library indentifier." ),
683  m_libraryNameTextCtrl->GetValue() );
684  DisplayError( this, msg );
685  return;
686  }
687 
688  LIB_PART* libSymbol = Prj().SchSymbolLibTable()->LoadSymbol( id );
689 
690  if( !libSymbol )
691  {
692  msg.Printf( _( "Symbol '%s' not found in symbol library '%s'." ),
693  id.GetLibItemName().wx_str(), id.GetLibNickname().wx_str() );
694  DisplayError( this, msg );
695  return;
696  }
697 
698  copy.SetLibSymbol( libSymbol->Flatten().release() );
699 
700  // Update the requested fields in the component copy
701  std::list<SCH_COMPONENT*> components;
702  components.push_back( &copy );
703  InvokeDialogUpdateFields( GetParent(), components, false );
704 
705  wxGridTableMessage clear( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, m_fields->size() );
706  m_grid->ProcessTableMessage( clear );
707 
708  // Copy fields from the component copy to the dialog buffer
709  m_fields->clear();
710  std::set<wxString> defined;
711 
712  for( int i = 0; i < copy.GetFieldCount(); ++i )
713  {
714  copy.GetField( i )->SetParent( m_cmp );
715 
716  defined.insert( copy.GetField( i )->GetName() );
717  m_fields->push_back( *copy.GetField( i ) );
718  }
719 
720  // Add in any template fieldnames not yet defined:
721  for( const TEMPLATE_FIELDNAME& templateFieldname : GetParent()->GetTemplateFieldNames() )
722  {
723  if( defined.count( templateFieldname.m_Name ) <= 0 )
724  {
725  SCH_FIELD field( wxPoint( 0, 0 ), -1, m_cmp, templateFieldname.m_Name );
726  field.SetVisible( templateFieldname.m_Visible );
727  m_fields->push_back( field );
728  }
729  }
730 
731  wxGridTableMessage refresh( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_fields->size() );
732  m_grid->ProcessTableMessage( refresh );
733 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:239
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
void Parse(void *yyp, int yymajor, ParseTOKENTYPE yyminor ParseARG_PDECL)
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
PROJECT & Prj() const
Function Prj returns a reference to the PROJECT "associated with" this KIWAY.
Define a library symbol object.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174
std::unique_ptr< LIB_PART > Flatten() const
Return a flattened symbol inheritance to the caller.
int InvokeDialogUpdateFields(SCH_EDIT_FRAME *aCaller, const list< SCH_COMPONENT * > aComponents, bool aCreateUndoEntry)
#define _(s)
Definition: 3d_actions.cpp:33
Schematic symbol object.
Definition: sch_component.h:88
Struct TEMPLATE_FIELDNAME holds a name of a component's field, field value, and default visibility.
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames()
Return a template field names list for read only access.

References _, WX_GRID::CommitPendingChanges(), DisplayError(), LIB_PART::Flatten(), SCH_COMPONENT::GetField(), SCH_COMPONENT::GetFieldCount(), SCH_FIELD::GetName(), GetParent(), SCH_BASE_FRAME::GetTemplateFieldNames(), LIB_ID::ID_SCH, InvokeDialogUpdateFields(), m_cmp, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, numEval::Parse(), KIWAY_HOLDER::Prj(), SCH_COMPONENT::SetFields(), SCH_COMPONENT::SetLibSymbol(), EDA_ITEM::SetParent(), and EDA_TEXT::SetVisible().

◆ Validate()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate ( )
overrideprivate

Definition at line 322 of file dialog_edit_component_in_schematic.cpp.

323 {
324  wxString msg;
325  LIB_ID id;
326 
327  if( !m_grid->CommitPendingChanges() || !m_grid->Validate() )
328  return false;
329 
330  if( !SCH_COMPONENT::IsReferenceStringValid( m_fields->at( REFERENCE ).GetText() ) )
331  {
332  DisplayErrorMessage( this, _( "References must start with a letter." ) );
333 
336 
337  return false;
338  }
339 
340  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH );
341 
342  if( !id.IsValid() )
343  {
344  DisplayErrorMessage( this, _( "Library reference is not valid." ) );
345 
346  m_libraryNameTextCtrl->SetFocus();
347 
348  return false;
349  }
350  else if( id != m_cmp->GetLibId() )
351  {
352  LIB_PART* alias = nullptr;
353 
354  try
355  {
356  alias = Prj().SchSymbolLibTable()->LoadSymbol( id );
357  }
358  catch( ... )
359  {
360  }
361 
362  if( !alias )
363  {
364  msg.Printf( _( "Symbol \"%s\" not found in library \"%s\"." ),
365  id.GetLibItemName().wx_str(),
366  id.GetLibNickname().wx_str() );
367  DisplayErrorMessage( this, msg );
368 
369  m_libraryNameTextCtrl->SetFocus();
370 
371  return false;
372  }
373  }
374 
375  m_libraryNameTextCtrl->SetValue( id.Format() );
376 
377  // Check for missing field names.
378  for( size_t i = MANDATORY_FIELDS; i < m_fields->size(); ++i )
379  {
380  SCH_FIELD& field = m_fields->at( i );
381  wxString fieldName = field.GetName( false );
382 
383  if( fieldName.IsEmpty() )
384  {
385  DisplayErrorMessage( this, _( "Fields must have a name." ) );
386 
388  m_delayedFocusRow = i;
389 
390  return false;
391  }
392  }
393 
394  return true;
395 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:252
The first 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
Field Reference of part, i.e. "IC21".
PROJECT & Prj() const
Function Prj returns a reference to the PROJECT "associated with" this KIWAY.
Define a library symbol object.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
#define _(s)
Definition: 3d_actions.cpp:33
wxString GetName(bool aUseDefaultName=true) const
Function GetName returns the field name.
Definition: sch_field.cpp:420
static bool IsReferenceStringValid(const wxString &aReferenceString)
Tests for an acceptable reference string.
const LIB_ID & GetLibId() const

References _, WX_GRID::CommitPendingChanges(), DisplayErrorMessage(), FDC_NAME, FDC_VALUE, Format(), SCH_COMPONENT::GetLibId(), SCH_FIELD::GetName(), LIB_ID::ID_SCH, SCH_COMPONENT::IsReferenceStringValid(), m_cmp, m_delayedFocusColumn, m_delayedFocusRow, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_libraryNameTextCtrl, MANDATORY_FIELDS, KIWAY_HOLDER::Prj(), and REFERENCE.

◆ VertPixelsFromDU()

int DIALOG_SHIM::VertPixelsFromDU ( int  y)
protectedinherited

Convert an integer number of dialog units to pixels, vertically.

See SetSizeInDU or wxDialog documentation for more information.

Definition at line 167 of file dialog_shim.cpp.

168 {
169  wxSize sz( 0, y );
170  return ConvertDialogToPixels( sz ).y;
171 }

Referenced by DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT().

Member Data Documentation

◆ m_bpAdd

◆ m_bpDelete

◆ m_bpMoveDown

◆ m_bpMoveUp

◆ m_buttonBrowseLibrary

◆ m_cbAlternateSymbol

wxCheckBox* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_cbAlternateSymbol
protectedinherited

◆ m_cmp

◆ m_delayedFocusColumn

int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_delayedFocusColumn
private

◆ m_delayedFocusRow

int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_delayedFocusRow
private

◆ m_fields

◆ m_firstPaintEvent

bool DIALOG_SHIM::m_firstPaintEvent
protectedinherited

Definition at line 202 of file dialog_shim.h.

Referenced by DIALOG_SHIM::OnPaint().

◆ m_grid

◆ m_hash_key

◆ m_initialFocusTarget

wxWindow* DIALOG_SHIM::m_initialFocusTarget
protectedinherited

Definition at line 203 of file dialog_shim.h.

Referenced by DIALOG_SHIM::OnPaint(), and DIALOG_SHIM::SetInitialFocus().

◆ m_libraryNameTextCtrl

◆ m_parentFrame

EDA_BASE_FRAME* DIALOG_SHIM::m_parentFrame
protectedinherited

Definition at line 210 of file dialog_shim.h.

Referenced by DIALOG_SHIM::OnCharHook(), and DIALOG_DRC::OnDRCItemRClick().

◆ m_part

LIB_PART* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_part
private

◆ m_qmodal_loop

WX_EVENT_LOOP* DIALOG_SHIM::m_qmodal_loop
protectedinherited

Definition at line 205 of file dialog_shim.h.

Referenced by DIALOG_SHIM::EndQuasiModal(), and DIALOG_SHIM::ShowQuasiModal().

◆ m_qmodal_parent_disabler

WDO_ENABLE_DISABLE* DIALOG_SHIM::m_qmodal_parent_disabler
protectedinherited

◆ m_qmodal_showing

bool DIALOG_SHIM::m_qmodal_showing
protectedinherited

Definition at line 207 of file dialog_shim.h.

Referenced by DIALOG_SHIM::IsQuasiModal(), and DIALOG_SHIM::ShowQuasiModal().

◆ m_rbMirror

wxRadioBox* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbMirror
protectedinherited

◆ m_rbOrientation

wxRadioBox* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_rbOrientation
protectedinherited

◆ m_shownColumns

wxString DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_shownColumns
private

◆ m_spiceFieldsButton

◆ m_staticline1

wxStaticLine* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_staticline1
protectedinherited

◆ m_staticText3

wxStaticText* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_staticText3
protectedinherited

◆ m_stdDialogButtonSizer

wxStdDialogButtonSizer* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_stdDialogButtonSizer
protectedinherited

◆ m_stdDialogButtonSizerCancel

wxButton* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_stdDialogButtonSizerCancel
protectedinherited

◆ m_stdDialogButtonSizerOK

wxButton* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_stdDialogButtonSizerOK
protectedinherited

◆ m_tabOrder

◆ m_textCtrlTimeStamp

wxTextCtrl* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_textCtrlTimeStamp
protectedinherited

◆ m_timeStampLabel

wxStaticText* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_timeStampLabel
protectedinherited

◆ m_unitChoice

wxChoice* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitChoice
protectedinherited

◆ m_unitLabel

wxStaticText* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_unitLabel
protectedinherited

◆ m_units

◆ m_updateFieldValues

wxButton* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_updateFieldValues
protectedinherited

◆ m_width

int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_width
private

The documentation for this class was generated from the following files: