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, SCREEN }
 

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
 
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
 
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

wxConfigBase * m_config
 
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 
SCREEN 

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 54 of file dialog_edit_component_in_schematic.cpp.

55  :
57 {
59 
60  m_cmp = aComponent;
61  m_part = m_cmp->GetPartRef().get();
62  m_fields = new FIELDS_GRID_TABLE<SCH_FIELD>( this, aParent, m_part );
63 
64  m_width = 0;
67 
68 #ifndef KICAD_SPICE
69  m_spiceFieldsButton->Hide();
70 #endif /* not KICAD_SPICE */
71 
72  // disable some options inside the edit dialog which can cause problems while dragging
73  if( m_cmp->IsDragging() )
74  {
75  m_rbOrientation->Disable();
76  m_rbMirror->Disable();
77  m_libraryNameTextCtrl->Disable();
78  }
79 
80  // Give a bit more room for combobox editors
81  m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() + 4 );
82 
84  m_grid->PushEventHandler( new FIELDS_GRID_TRICKS( m_grid, this ) );
85 
86  // Show/hide columns according to user's preference
87  m_config->Read( SymbolFieldsShownColumnsKey, &m_shownColumns, wxT( "0 1 2 3 4 5 6 7" ) );
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  // wxFormBuilder doesn't include this event...
101  m_grid->Connect( wxEVT_GRID_CELL_CHANGING,
103  NULL, this );
104 
106 }
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:119
wxConfigBase * KifaceSettings() const
Definition: kiface_i.h:103
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:57
Field Reference of part, i.e. "IC21".
bool IsDragging() const
Definition: base_struct.h:221
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:79
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(-1,-1), long style=wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU)
#define NULL
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
const BITMAP_OPAQUE small_down_xpm[1]
Definition: small_down.cpp:25
#define SymbolFieldsShownColumnsKey
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(), KIFACE_I::KifaceSettings(), 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_config, 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, m_width, NULL, OnGridCellChanging(), REFERENCE, WX_GRID::SetTable(), WX_GRID::ShowHideColumns(), small_down_xpm, small_library_xpm, small_plus_xpm, small_up_xpm, SymbolFieldsShownColumnsKey, and trash_xpm.

◆ ~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC()

DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC ( )
override

Definition at line 109 of file dialog_edit_component_in_schematic.cpp.

110 {
112 
113  // Prevents crash bug in wxGrid's d'tor
115 
116  m_grid->Disconnect( wxEVT_GRID_CELL_CHANGING,
118  NULL, this );
119 
120  // Delete the GRID_TRICKS.
121  m_grid->PopEventHandler( true );
122 }
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:88
#define NULL
#define SymbolFieldsShownColumnsKey
wxString GetShownColumns()
Get a tokenized string containing the shown column indexes.
Definition: wx_grid.cpp:101

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

Member Function Documentation

◆ AdjustGridColumns()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::AdjustGridColumns ( int  aWidth)
private

Definition at line 676 of file dialog_edit_component_in_schematic.cpp.

677 {
678  m_width = aWidth;
679  // Account for scroll bars
680  aWidth -= ( m_grid->GetSize().x - m_grid->GetClientSize().x );
681 
682  m_grid->AutoSizeColumn( 0 );
683 
684  int fixedColsWidth = m_grid->GetColSize( 0 );
685 
686  for( int i = 2; i < m_grid->GetNumberCols(); i++ )
687  fixedColsWidth += m_grid->GetColSize( i );
688 
689  m_grid->SetColSize( 1, aWidth - fixedColsWidth );
690 }

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 262 of file dialog_shim.cpp.

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

◆ EndQuasiModal()

void DIALOG_SHIM::EndQuasiModal ( int  retCode)
inherited

Definition at line 419 of file dialog_shim.cpp.

420 {
421  // Hook up validator and transfer data from controls handling so quasi-modal dialogs
422  // handle validation in the same way as other dialogs.
423  if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
424  return;
425 
426  SetReturnCode( retCode );
427 
428  if( !IsQuasiModal() )
429  {
430  wxFAIL_MSG( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal"
431  "wasn't called" );
432  return;
433  }
434 
435  if( m_qmodal_loop )
436  {
437  if( m_qmodal_loop->IsRunning() )
438  m_qmodal_loop->Exit( 0 );
439  else
440  m_qmodal_loop->ScheduleExit( 0 );
441 
443  }
444 
447 
448  Show( false );
449 }
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 137 of file dialog_shim.cpp.

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

References PCAD2KICAD::Center.

Referenced by DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS(), DIALOG_ANNOTATE::DIALOG_ANNOTATE(), DIALOG_BOM::DIALOG_BOM(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC_CONTROL::DIALOG_DRC_CONTROL(), 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_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_FP_BROWSER_DISPLAY_OPTIONS::DIALOG_FP_BROWSER_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_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_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_PCB::DIALOG_UPDATE_PCB(), PAGED_DIALOG::finishInitialization(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), NETLIST_DIALOG::NETLIST_DIALOG(), DIALOG_GRAPHIC_ITEM_PROPERTIES::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 125 of file dialog_edit_component_in_schematic.cpp.

126 {
127  return dynamic_cast<SCH_EDIT_FRAME*>( wxDialog::GetParent() );
128 }

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(), and GERBVIEW_FRAME::SaveSettings().

◆ 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 158 of file dialog_shim.cpp.

159 {
160  wxSize sz( x, 0 );
161  return ConvertDialogToPixels( sz ).x;
162 }

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_TEXT_PROPERTIES::OnCharHook(), and DIALOG_LABEL_EDITOR::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_TEXT_PROPERTIES::OnCharHook(), and DIALOG_LABEL_EDITOR::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(), SCH_EDIT_FRAME::CreateScreens(), 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_EDIT_FRAME::EditSheet(), SCH_EDITOR_CONTROL::EditWithLibEdit(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), LIB_MANAGER::GetBufferedPart(), LIB_MANAGER::getLibraryBuffer(), FOOTPRINT_EDIT_FRAME::GetPlotSettings(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::InitSheet(), KICAD_MANAGER_FRAME::language_change(), KIWAY_PLAYER::language_change(), CVPCB_MAINFRAME::LoadFootprintFiles(), KICAD_MANAGER_FRAME::LoadProject(), SCH_EDIT_FRAME::LoadSheetFromFile(), TEXT_BUTTON_SYMBOL_CHOOSER::OnButtonClick(), TEXT_BUTTON_FP_CHOOSER::OnButtonClick(), KICAD_MANAGER_FRAME::OnCloseWindow(), SCH_EDIT_FRAME::OnCloseWindow(), 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(), SCH_EDIT_FRAME::OpenProjectFiles(), SCH_EDITOR_CONTROL::Paste(), KIWAY_HOLDER::Prj(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), LIB_EDIT_FRAME::refreshSchematic(), SCH_EDIT_FRAME::rescueProject(), EE_INSPECTION_TOOL::RunSimulation(), SCH_EDIT_FRAME::SaveEEFile(), CVPCB_MAINFRAME::SaveFootprintAssociation(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), 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(), FOOTPRINT_EDIT_FRAME::SetPlotSettings(), CVPCB_CONTROL::ShowFootprintViewer(), COMMON_CONTROL::ShowLibraryTable(), COMMON_CONTROL::ShowPlayer(), KICAD_MANAGER_CONTROL::ShowPlayer(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::UpdatePart(), 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 530 of file dialog_edit_component_in_schematic.cpp.

531 {
532  if( !m_grid->CommitPendingChanges() )
533  return;
534 
535  int fieldID = m_fields->size();
536  SCH_FIELD newField( wxPoint( 0, 0 ), fieldID, m_cmp );
537 
538  newField.SetName( TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldID ) );
539  newField.SetTextAngle( m_fields->at( REFERENCE ).GetTextAngle() );
540 
541  m_fields->push_back( newField );
542 
543  // notify the grid
544  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
545  m_grid->ProcessTableMessage( msg );
546 
547  m_grid->MakeCellVisible( m_fields->size() - 1, 0 );
548  m_grid->SetGridCursor( m_fields->size() - 1, 0 );
549 
550  m_grid->EnableCellEditControl();
551  m_grid->ShowCellEditControl();
552 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
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".
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:172

References WX_GRID::CommitPendingChanges(), TEMPLATE_FIELDNAME::GetDefaultFieldName(), m_cmp, m_fields, DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::m_grid, REFERENCE, SCH_FIELD::SetName(), and EDA_TEXT::SetTextAngle().

◆ OnBrowseLibrary()

void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnBrowseLibrary ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE.

Definition at line 223 of file dialog_edit_component_in_schematic.cpp.

224 {
226 
227  LIB_ID id;
228  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH );
229 
230  auto sel = GetParent()->SelectCompFromLibTree( nullptr, dummy, true, 0, 0, false, &id );
231 
232  if( !sel.LibId.IsValid() )
233  return;
234 
235  m_libraryNameTextCtrl->SetValue( sel.LibId.Format() );
236 
237  LIB_PART* entry = GetParent()->GetLibPart( sel.LibId );
238 
239  if( entry )
240  {
241  // Update the value field for Power symbols
242  if( entry->IsPower() )
243  m_grid->SetCellValue( VALUE, FDC_VALUE, sel.LibId.GetLibItemName() );
244 
245  // Update the units control
246  int unit = m_unitChoice->GetSelection();
247  m_unitChoice->Clear();
248 
249  if( entry->GetUnitCount() > 1 )
250  {
251  for( int ii = 1; ii <= entry->GetUnitCount(); ii++ )
252  m_unitChoice->Append( LIB_PART::SubReference( ii, false ) );
253 
254  if( unit < 0 || static_cast<unsigned>( unit ) >= m_unitChoice->GetCount() )
255  unit = 0;
256 
257  m_unitChoice->SetSelection( unit );
258  m_unitLabel->Enable( true );
259  m_unitChoice->Enable( true );
260  }
261  else
262  {
263  m_unitChoice->SetSelection( -1 );
264  m_unitLabel->Enable( false );
265  m_unitChoice->Enable( false );
266  }
267 
268  // Update the deMorgan conversion controls
269  bool conversion = m_cbAlternateSymbol->GetValue();
270 
271  m_cbAlternateSymbol->SetValue( conversion && entry->HasConversion() );
272  m_cbAlternateSymbol->Enable( entry->HasConversion() );
273  }
274 }
bool HasConversion() const
Test if part has more than one body conversion type (DeMorgan).
std::vector< COMPONENT_SELECTION > HISTORY_LIST
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:94
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 305 of file dialog_edit_component_in_schematic.cpp.

306 {
307  // Running the Footprint Browser gums up the works and causes the automatic cancel
308  // stuff to no longer work. So we do it here ourselves.
309  EndQuasiModal( wxID_CANCEL );
310 }
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 555 of file dialog_edit_component_in_schematic.cpp.

556 {
557  int curRow = m_grid->GetGridCursorRow();
558 
559  if( curRow < 0 )
560  return;
561  else if( curRow < MANDATORY_FIELDS )
562  {
563  DisplayError( this, wxString::Format( _( "The first %d fields are mandatory." ),
564  MANDATORY_FIELDS ) );
565  return;
566  }
567 
568  m_grid->CommitPendingChanges( true /* quiet mode */ );
569 
570  m_fields->erase( m_fields->begin() + curRow );
571 
572  // notify the grid
573  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, curRow, 1 );
574  m_grid->ProcessTableMessage( msg );
575 
576  if( m_grid->GetNumberRows() > 0 )
577  {
578  m_grid->MakeCellVisible( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
579  m_grid->SetGridCursor( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
580  }
581 }
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:236
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:172
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:31

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 277 of file dialog_edit_component_in_schematic.cpp.

278 {
279 #ifdef KICAD_SPICE
280  int diff = m_fields->size();
281 
282  DIALOG_SPICE_MODEL dialog( this, *m_cmp, m_fields );
283 
284  if( dialog.ShowModal() != wxID_OK )
285  return;
286 
287  diff = m_fields->size() - diff;
288 
289  if( diff > 0 )
290  {
291  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, diff );
292  m_grid->ProcessTableMessage( msg );
293  }
294  else if( diff < 0 )
295  {
296  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, diff );
297  m_grid->ProcessTableMessage( msg );
298  }
299 
300  m_grid->ForceRefresh();
301 #endif /* KICAD_SPICE */
302 }

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 514 of file dialog_edit_component_in_schematic.cpp.

515 {
516  wxGridCellEditor* editor = m_grid->GetCellEditor( event.GetRow(), event.GetCol() );
517  wxControl* control = editor->GetControl();
518 
519  if( control && control->GetValidator() && !control->GetValidator()->Validate( control ) )
520  {
521  event.Veto();
522  m_delayedFocusRow = event.GetRow();
523  m_delayedFocusColumn = event.GetCol();
524  }
525 
526  editor->DecRef();
527 }

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 736 of file dialog_edit_component_in_schematic.cpp.

737 {
739 
740  // Now all widgets have the size fixed, call FinishDialogSettings
742 }
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 606 of file dialog_edit_component_in_schematic.cpp.

607 {
608  if( !m_grid->CommitPendingChanges() )
609  return;
610 
611  int i = m_grid->GetGridCursorRow();
612 
613  if( i >= MANDATORY_FIELDS && i < m_grid->GetNumberRows() - 1 )
614  {
615  SCH_FIELD tmp = m_fields->at( (unsigned) i );
616  m_fields->erase( m_fields->begin() + i, m_fields->begin() + i + 1 );
617  m_fields->insert( m_fields->begin() + i + 1, tmp );
618  m_grid->ForceRefresh();
619 
620  m_grid->SetGridCursor( i + 1, m_grid->GetGridCursorCol() );
621  m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() );
622  }
623  else
624  wxBell();
625 }
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:172

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 584 of file dialog_edit_component_in_schematic.cpp.

585 {
586  if( !m_grid->CommitPendingChanges() )
587  return;
588 
589  int i = m_grid->GetGridCursorRow();
590 
591  if( i > MANDATORY_FIELDS )
592  {
593  SCH_FIELD tmp = m_fields->at( (unsigned) i );
594  m_fields->erase( m_fields->begin() + i, m_fields->begin() + i + 1 );
595  m_fields->insert( m_fields->begin() + i - 1, tmp );
596  m_grid->ForceRefresh();
597 
598  m_grid->SetGridCursor( i - 1, m_grid->GetGridCursorCol() );
599  m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() );
600  }
601  else
602  wxBell();
603 }
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:172

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 320 of file dialog_shim.cpp.

321 {
322  if( m_firstPaintEvent )
323  {
324 #ifdef __WXMAC__
325  fixOSXCancelButtonIssue( this );
326 #endif
327 
328  selectAllInTextCtrls( GetChildren() );
329 
331  m_initialFocusTarget->SetFocus();
332  else
333  SetFocus(); // Focus the dialog itself
334 
335  m_firstPaintEvent = false;
336  }
337 
338  event.Skip();
339 }
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 722 of file dialog_edit_component_in_schematic.cpp.

723 {
724  auto new_size = event.GetSize().GetX();
725 
726  if( m_width != new_size )
727  {
728  AdjustGridColumns( new_size );
729  }
730 
731  // Always propagate for a grid repaint (needed if the height changes, as well as width)
732  event.Skip();
733 }

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 693 of file dialog_edit_component_in_schematic.cpp.

694 {
695  wxString shownColumns = m_grid->GetShownColumns();
696 
697  if( shownColumns != m_shownColumns )
698  {
699  m_shownColumns = shownColumns;
700 
701  if( !m_grid->IsCellEditControlShown() )
702  AdjustGridColumns( m_grid->GetRect().GetWidth() );
703  }
704 
705  // Handle a delayed focus
706  if( m_delayedFocusRow >= 0 )
707  {
708  m_grid->SetFocus();
709  m_grid->MakeCellVisible( m_delayedFocusRow, m_delayedFocusColumn );
710  m_grid->SetGridCursor( m_delayedFocusRow, m_delayedFocusColumn );
711 
712 
713  m_grid->EnableCellEditControl( true );
714  m_grid->ShowCellEditControl();
715 
716  m_delayedFocusRow = -1;
718  }
719 }
wxString GetShownColumns()
Get a tokenized string containing the shown column indexes.
Definition: wx_grid.cpp:101

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(), LIB_CONTROL::AddSymbolToSchematic(), 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(), PCB_BASE_EDIT_FRAME::CreateNewLibrary(), KICAD_MANAGER_FRAME::CreateNewProject(), DIALOG_PLOT_SCHEMATIC::createPlotFileName(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary(), 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_SYMBOL_REMAP::DIALOG_SYMBOL_REMAP(), LIB_VIEW_FRAME::DisplayLibInfos(), CVPCB_MAINFRAME::DisplayStatus(), PCB_EDIT_FRAME::doAutoSave(), KICAD_MANAGER_CONTROL::Execute(), PCB_EDIT_FRAME::Export_IDF3(), LIB_CONTROL::ExportSymbolAsSVG(), LIB_CONTROL::ExportView(), PCB_EDIT_FRAME::ExportVRML_File(), PCB_EDIT_FRAME::Files_io_from_id(), PCB_EDIT_FRAME::GenD356File(), 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(), SCH_EDIT_FRAME::LoadSheetFromFile(), DIALOG_DRC_CONTROL::makeValidFileNameReport(), DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged(), DIALOG_FOOTPRINT_BOARD_EDITOR::On3DModelCellChanged(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), DIALOG_SCH_SHEET_PROPS::OnBrowseClicked(), KICAD_MANAGER_FRAME::OnBrowseInFileExplorer(), DIALOG_DRC_CONTROL::OnButtonBrowseRptFileClick(), 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_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(), MODULE_EDITOR_TOOLS::PasteFootprint(), PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME(), SCH_DRAWING_TOOLS::PlaceComponent(), DIALOG_CHOOSE_COMPONENT::PopulateFootprintSelector(), SCH_EDIT_FRAME::Print(), SCH_EDIT_FRAME::PrintPage(), 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_EDIT_FRAME::RescueLegacyProject(), SCH_EDIT_FRAME::RescueSymbolLibTableProject(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), FOOTPRINT_EDIT_FRAME::retainLastFootprint(), 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(), KICAD_MANAGER_FRAME::SetProjectFileName(), EE_INSPECTION_TOOL::ShowDatasheet(), DIALOG_CHOOSE_COMPONENT::ShowFootprintFor(), 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(), TransferDataFromWindow(), NETLIST_DIALOG::TransferDataFromWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), UpdateFieldsFromLibrary(), SIM_PLOT_FRAME::updateNetlistExporter(), SCH_SCREEN::UpdateSymbolLinks(), 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 237 of file dialog_shim.cpp.

238 {
239  const char* hash_key;
240 
241  if( m_hash_key.size() )
242  {
243  // a special case like EDA_LIST_DIALOG, which has multiple uses.
244  hash_key = m_hash_key.c_str();
245  }
246  else
247  {
248  hash_key = typeid(*this).name();
249  }
250 
251  RECT_MAP::iterator it = class_map.find( hash_key );
252 
253  if( it == class_map.end() )
254  return;
255 
256  EDA_RECT rect = it->second;
257  rect.SetSize( 0, 0 );
258  class_map[ hash_key ] = rect;
259 }
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_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_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), 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 151 of file dialog_shim.cpp.

152 {
153  wxSize sz( x, y );
154  SetSize( ConvertDialogToPixels( sz ) );
155 }

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 178 of file dialog_shim.cpp.

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

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

◆ TransferDataFromWindow()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow ( )
overrideprivate

Definition at line 388 of file dialog_edit_component_in_schematic.cpp.

389 {
390  if( !wxDialog::TransferDataFromWindow() ) // Calls our Validate() method.
391  return false;
392 
393  // save old cmp in undo list if not already in edit, or moving ...
394  if( m_cmp->GetEditFlags() == 0 )
396 
397  // Save current flags which could be modified by next change settings
398  STATUS_FLAGS flags = m_cmp->GetFlags();
399 
400  // Library symbol identifier
401  LIB_ID id;
402  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH, true );
403  m_cmp->SetLibId( id, Prj().SchSymbolLibTable(), Prj().SchLibs()->GetCacheLibrary() );
404 
405  // For symbols with multiple shapes (De Morgan representation) Set the selected shape:
406  if( m_cbAlternateSymbol->IsEnabled() && m_cbAlternateSymbol->GetValue() )
407  m_cmp->SetConvert( LIB_ITEM::LIB_CONVERT::DEMORGAN );
408  else
409  m_cmp->SetConvert( LIB_ITEM::LIB_CONVERT::BASE );
410 
411  //Set the part selection in multiple part per package
412  int unit_selection = m_unitChoice->IsEnabled()
413  ? m_unitChoice->GetSelection() + 1
414  : 1;
415  m_cmp->SetUnitSelection( &GetParent()->GetCurrentSheet(), unit_selection );
416  m_cmp->SetUnit( unit_selection );
417 
418  switch( m_rbOrientation->GetSelection() )
419  {
420  case 0: m_cmp->SetOrientation( CMP_ORIENT_0 ); break;
421  case 1: m_cmp->SetOrientation( CMP_ORIENT_90 ); break;
422  case 2: m_cmp->SetOrientation( CMP_ORIENT_180 ); break;
423  case 3: m_cmp->SetOrientation( CMP_ORIENT_270 ); break;
424  }
425 
426  switch( m_rbMirror->GetSelection() )
427  {
428  case 0: break;
429  case 1: m_cmp->SetOrientation( CMP_MIRROR_X ); break;
430  case 2: m_cmp->SetOrientation( CMP_MIRROR_Y ); break;
431  }
432 
433  // Restore m_Flag modified by SetUnit() and other change settings
434  m_cmp->ClearFlags();
435  m_cmp->SetFlags( flags );
436 
437  // change all field positions from relative to absolute
438  for( unsigned i = 0; i < m_fields->size(); ++i )
439  m_fields->at( i ).Offset( m_cmp->GetPosition() );
440 
441  LIB_PART* entry = GetParent()->GetLibPart( m_cmp->GetLibId() );
442 
443  if( entry && entry->IsPower() )
444  m_fields->at( VALUE ).SetText( m_cmp->GetLibId().GetLibItemName() );
445 
446  // Remove any TEMPLATE_FIELDNAMES which were not set (given values).
447  TEMPLATE_FIELDNAMES templateFieldnames = GetParent()->GetTemplateFieldNames();
448 
449  for( size_t i = MANDATORY_FIELDS; i < m_fields->size(); ++i )
450  {
451  SCH_FIELD& field = m_fields->at( i );
452 
453  for( const auto& fieldname : templateFieldnames )
454  {
455  if( field.GetName() == fieldname.m_Name && field.GetText().IsEmpty() )
456  {
457  m_fields->erase( m_fields->begin() + i );
458 
459  // grid needs to be notified about the size change,
460  // as it still accesses the data on close (size event)
461  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, i, 1 );
462  m_grid->ProcessTableMessage( msg );
463  i--;
464  break;
465  }
466  }
467  }
468 
469  m_cmp->SetFields( *m_fields );
470 
471  // Reference has a specific initialization, depending on the current active sheet
472  // because for a given component, in a complex hierarchy, there are more than one
473  // reference.
474  m_cmp->SetRef( &GetParent()->GetCurrentSheet(), m_fields->at( REFERENCE ).GetText() );
475 
476  // The value, footprint and datasheet fields should be kept in sync in multi-unit
477  // parts.
478  if( m_cmp->GetUnitCount() > 1 )
479  {
480  const LIB_ID thisLibId = m_cmp->GetLibId();
481  const wxString thisRef = m_cmp->GetRef( &( GetParent()->GetCurrentSheet() ) );
482  int thisUnit = m_cmp->GetUnit();
483 
484  SCH_REFERENCE_LIST components;
485  GetParent()->GetCurrentSheet().GetComponents( components );
486 
487  for( unsigned i = 0; i < components.GetCount(); i++ )
488  {
489  SCH_REFERENCE component = components[i];
490 
491  if( component.GetLibPart()->GetLibId() == thisLibId
492  && component.GetRef() == thisRef
493  && component.GetUnit() != thisUnit )
494  {
495  SCH_COMPONENT* otherUnit = component.GetComp();
496  GetParent()->SaveCopyInUndoList( otherUnit, UR_CHANGED, true /* append */);
497  otherUnit->GetField( VALUE )->SetText( m_fields->at( VALUE ).GetText() );
498  otherUnit->GetField( FOOTPRINT )->SetText( m_fields->at( FOOTPRINT ).GetText() );
499  otherUnit->GetField( DATASHEET )->SetText( m_fields->at( DATASHEET ).GetText() );
500  }
501  }
502  }
503 
504  m_cmp->UpdatePins();
505 
508  GetParent()->OnModify();
509 
510  return true;
511 }
void GetComponents(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanComponents=false)
Function GetComponents adds a SCH_REFERENCE() object to aReferences for each component in the sheet.
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
name of datasheet
LIB_ID GetLibId() const override
SCH_COMPONENT * GetComp() const
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.
void SetUnitSelection(SCH_SHEET_PATH *aSheet, int aUnitSelection)
int GetUnit() const
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".
SCH_REFERENCE_LIST is used to create a flattened list of components because in a complex hierarchy,...
SCH_FIELD * GetField(int aFieldNdx) const
Returns a field in this symbol.
void SetConvert(int aConvert)
wxString GetRef() const
#define VALUE
void SetLibId(const LIB_ID &aName, PART_LIBS *aLibs=NULL)
int GetUnit() const
std::vector< TEMPLATE_FIELDNAME > TEMPLATE_FIELDNAMES
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:255
void SetFields(const SCH_FIELDS &aFields)
Set multiple schematic fields.
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:111
STATUS_FLAGS GetEditFlags() const
Definition: base_struct.h:260
PROJECT & Prj() const
Function Prj returns a reference to the PROJECT "associated with" this KIWAY.
SCH_SHEET_PATH & GetCurrentSheet()
void UpdatePins(SCH_SHEET_PATH *aSheet=nullptr)
Updates the local cache of SCH_PIN_CONNECTION objects for each pin.
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.
const wxString GetRef(const SCH_SHEET_PATH *aSheet)
Return the reference for the given sheet path.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
bool IsPower() const
void RefreshItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
LIB_PART * GetLibPart() const
wxString GetName(bool aUseDefaultName=true) const
Function GetName returns the field name.
Definition: sch_field.cpp:371
SCH_COMPONENT describes a real schematic component.
Definition: sch_component.h:89
wxPoint GetPosition() const override
Function GetPosition.
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:256
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames() const
Return a template field names list for read only access.
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
unsigned GetCount()
Function GetCount.
STATUS_FLAGS GetFlags() const
Definition: base_struct.h:257
const LIB_ID & GetLibId() const
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:123
SCH_REFERENCE is used as a helper to define a component's reference designator in a schematic.
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...

References EDA_ITEM::ClearFlags(), CMP_MIRROR_X, CMP_MIRROR_Y, CMP_ORIENT_0, CMP_ORIENT_180, CMP_ORIENT_270, CMP_ORIENT_90, DATASHEET, FOOTPRINT, SCH_REFERENCE::GetComp(), SCH_SHEET_PATH::GetComponents(), SCH_REFERENCE_LIST::GetCount(), SCH_EDIT_FRAME::GetCurrentSheet(), EDA_ITEM::GetEditFlags(), SCH_COMPONENT::GetField(), EDA_ITEM::GetFlags(), LIB_PART::GetLibId(), SCH_COMPONENT::GetLibId(), LIB_ID::GetLibItemName(), SCH_REFERENCE::GetLibPart(), SCH_BASE_FRAME::GetLibPart(), SCH_FIELD::GetName(), GetParent(), SCH_COMPONENT::GetPosition(), SCH_REFERENCE::GetRef(), SCH_COMPONENT::GetRef(), SCH_BASE_FRAME::GetTemplateFieldNames(), EDA_TEXT::GetText(), SCH_REFERENCE::GetUnit(), SCH_COMPONENT::GetUnit(), 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_grid, 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(), LIB_ID::Parse(), KIWAY_HOLDER::Prj(), REFERENCE, SCH_BASE_FRAME::RefreshItem(), SCH_EDIT_FRAME::SaveCopyInUndoList(), SCH_COMPONENT::SetConvert(), SCH_COMPONENT::SetFields(), EDA_ITEM::SetFlags(), SCH_COMPONENT::SetLibId(), SCH_COMPONENT::SetOrientation(), SCH_COMPONENT::SetRef(), EDA_TEXT::SetText(), SCH_COMPONENT::SetUnit(), SCH_COMPONENT::SetUnitSelection(), SCH_EDIT_FRAME::TestDanglingEnds(), SCH_COMPONENT::UpdatePins(), UR_CHANGED, and VALUE.

◆ TransferDataToWindow()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataToWindow ( )
overrideprivate

Definition at line 131 of file dialog_edit_component_in_schematic.cpp.

132 {
133  if( !wxDialog::TransferDataToWindow() )
134  return false;
135 
136  std::set<wxString> defined;
137 
138  // Push a copy of each field into m_fields
139  for( int i = 0; i < m_cmp->GetFieldCount(); ++i )
140  {
141  SCH_FIELD field( *m_cmp->GetField( i ) );
142 
143  // change offset to be symbol-relative
144  field.Offset( -m_cmp->GetPosition() );
145 
146  defined.insert( field.GetName() );
147  m_fields->push_back( field );
148  }
149 
150  // Add in any template fieldnames not yet defined:
151  for( const TEMPLATE_FIELDNAME& templateFieldname : GetParent()->GetTemplateFieldNames() )
152  {
153  if( defined.count( templateFieldname.m_Name ) <= 0 )
154  {
155  SCH_FIELD field( wxPoint( 0, 0 ), -1, m_cmp, templateFieldname.m_Name );
156  field.SetVisible( templateFieldname.m_Visible );
157  m_fields->push_back( field );
158  }
159  }
160 
161  // notify the grid
162  wxGridTableMessage msg( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_fields->size() );
163  m_grid->ProcessTableMessage( msg );
164  AdjustGridColumns( m_grid->GetRect().GetWidth() );
165 
166  // If a multi-unit component, set up the unit selector and interchangeable checkbox.
167  if( m_cmp->GetUnitCount() > 1 )
168  {
169  for( int ii = 1; ii <= m_cmp->GetUnitCount(); ii++ )
170  m_unitChoice->Append( LIB_PART::SubReference( ii, false ) );
171 
172  if( m_cmp->GetUnit() <= ( int )m_unitChoice->GetCount() )
173  m_unitChoice->SetSelection( m_cmp->GetUnit() - 1 );
174  }
175  else
176  {
177  m_unitLabel->Enable( false );
178  m_unitChoice->Enable( false );
179  }
180 
181  if( m_part != nullptr && m_part->HasConversion() )
182  {
183  if( m_cmp->GetConvert() > LIB_ITEM::LIB_CONVERT::BASE )
184  m_cbAlternateSymbol->SetValue( true );
185  }
186  else
187  m_cbAlternateSymbol->Enable( false );
188 
189  // Set the symbol orientation and mirroring.
190  int orientation = m_cmp->GetOrientation() & ~( CMP_MIRROR_X | CMP_MIRROR_Y );
191 
192  if( orientation == CMP_ORIENT_90 )
193  m_rbOrientation->SetSelection( 1 );
194  else if( orientation == CMP_ORIENT_180 )
195  m_rbOrientation->SetSelection( 2 );
196  else if( orientation == CMP_ORIENT_270 )
197  m_rbOrientation->SetSelection( 3 );
198  else
199  m_rbOrientation->SetSelection( 0 );
200 
201  int mirror = m_cmp->GetOrientation() & ( CMP_MIRROR_X | CMP_MIRROR_Y );
202 
203  if( mirror == CMP_MIRROR_X )
204  m_rbMirror->SetSelection( 1 );
205  else if( mirror == CMP_MIRROR_Y )
206  m_rbMirror->SetSelection( 2 );
207  else
208  m_rbMirror->SetSelection( 0 );
209 
210  // Set the component's unique ID time stamp.
211  m_textCtrlTimeStamp->SetValue( wxString::Format( wxT( "%8.8lX" ),
212  (unsigned long) m_cmp->GetTimeStamp() ) );
213 
214  // Set the component's library name.
215  m_libraryNameTextCtrl->SetValue( m_cmp->GetLibId().Format() );
216 
217  Layout();
218 
219  return true;
220 }
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:237
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.
SCH_FIELD * GetField(int aFieldNdx) const
Returns a field in this symbol.
int GetUnit() const
timestamp_t GetTimeStamp() const
Definition: base_struct.h:213
int GetFieldCount() const
Return the number of fields in this symbol.
UTF8 Format() const
Definition: lib_id.cpp:237
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
static wxString SubReference(int aUnit, bool aAddSeparator=true)
wxPoint GetPosition() const override
Function GetPosition.
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(), CMP_MIRROR_X, CMP_MIRROR_Y, CMP_ORIENT_180, CMP_ORIENT_270, CMP_ORIENT_90, LIB_ID::Format(), Format(), SCH_COMPONENT::GetConvert(), SCH_COMPONENT::GetField(), SCH_COMPONENT::GetFieldCount(), SCH_COMPONENT::GetLibId(), SCH_COMPONENT::GetOrientation(), GetParent(), SCH_COMPONENT::GetPosition(), EDA_ITEM::GetTimeStamp(), 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_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 628 of file dialog_edit_component_in_schematic.cpp.

629 {
630  if( !m_grid->CommitPendingChanges() )
631  return;
632 
633  SCH_COMPONENT copy( *m_cmp );
634  copy.SetFields( *m_fields );
635 
636  LIB_ID id;
637  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH, true );
638  copy.SetLibId( id, Prj().SchSymbolLibTable(), Prj().SchLibs()->GetCacheLibrary() );
639 
640  // Update the requested fields in the component copy
641  std::list<SCH_COMPONENT*> components;
642  components.push_back( &copy );
643  InvokeDialogUpdateFields( GetParent(), components, false );
644 
645  wxGridTableMessage clear( m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0, m_fields->size() );
646  m_grid->ProcessTableMessage( clear );
647 
648  // Copy fields from the component copy to the dialog buffer
649  m_fields->clear();
650  std::set<wxString> defined;
651 
652  for( int i = 0; i < copy.GetFieldCount(); ++i )
653  {
654  copy.GetField( i )->SetParent( m_cmp );
655 
656  defined.insert( copy.GetField( i )->GetName() );
657  m_fields->push_back( *copy.GetField( i ) );
658  }
659 
660  // Add in any template fieldnames not yet defined:
661  for( const TEMPLATE_FIELDNAME& templateFieldname : GetParent()->GetTemplateFieldNames() )
662  {
663  if( defined.count( templateFieldname.m_Name ) <= 0 )
664  {
665  SCH_FIELD field( wxPoint( 0, 0 ), -1, m_cmp, templateFieldname.m_Name );
666  field.SetVisible( templateFieldname.m_Visible );
667  m_fields->push_back( field );
668  }
669  }
670 
671  wxGridTableMessage refresh( m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_fields->size() );
672  m_grid->ProcessTableMessage( refresh );
673 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
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.
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:172
int InvokeDialogUpdateFields(SCH_EDIT_FRAME *aCaller, const list< SCH_COMPONENT * > aComponents, bool aCreateUndoEntry)
SCH_COMPONENT describes a real schematic component.
Definition: sch_component.h:89
Struct TEMPLATE_FIELDNAME holds a name of a component's field, field value, and default visibility.
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames() const
Return a template field names list for read only access.
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 WX_GRID::CommitPendingChanges(), 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, LIB_ID::Parse(), KIWAY_HOLDER::Prj(), SCH_COMPONENT::SetFields(), SCH_COMPONENT::SetLibId(), EDA_ITEM::SetParent(), and EDA_TEXT::SetVisible().

◆ Validate()

bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate ( )
overrideprivate

Definition at line 313 of file dialog_edit_component_in_schematic.cpp.

314 {
315  wxString msg;
316  LIB_ID id;
317 
318  if( !m_grid->CommitPendingChanges() || !m_grid->Validate() )
319  return false;
320 
321  if( !SCH_COMPONENT::IsReferenceStringValid( m_fields->at( REFERENCE ).GetText() ) )
322  {
323  DisplayErrorMessage( this, _( "References must start with a letter." ) );
324 
327 
328  return false;
329  }
330 
331  id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH );
332 
333  if( !id.IsValid() )
334  {
335  DisplayErrorMessage( this, _( "Library reference is not valid." ) );
336 
337  m_libraryNameTextCtrl->SetFocus();
338 
339  return false;
340  }
341  else if( id != m_cmp->GetLibId() )
342  {
343  LIB_PART* alias = nullptr;
344 
345  try
346  {
347  alias = Prj().SchSymbolLibTable()->LoadSymbol( id );
348  }
349  catch( ... )
350  {
351  }
352 
353  if( !alias )
354  {
355  msg.Printf( _( "Symbol \"%s\" not found in library \"%s\"." ),
356  id.GetLibItemName().wx_str(),
357  id.GetLibNickname().wx_str() );
358  DisplayErrorMessage( this, msg );
359 
360  m_libraryNameTextCtrl->SetFocus();
361 
362  return false;
363  }
364  }
365  m_libraryNameTextCtrl->SetValue( id.Format() );
366 
367  // Check for missing field names.
368  for( size_t i = MANDATORY_FIELDS; i < m_fields->size(); ++i )
369  {
370  SCH_FIELD& field = m_fields->at( i );
371  wxString fieldName = field.GetName( false );
372 
373  if( fieldName.IsEmpty() )
374  {
375  DisplayErrorMessage( this, _( "Fields must have a name." ) );
376 
378  m_delayedFocusRow = i;
379 
380  return false;
381  }
382  }
383 
384  return true;
385 }
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:249
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:172
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:31
wxString GetName(bool aUseDefaultName=true) const
Function GetName returns the field name.
Definition: sch_field.cpp:371
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 165 of file dialog_shim.cpp.

166 {
167  wxSize sz( 0, y );
168  return ConvertDialogToPixels( sz ).y;
169 }

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

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_config

wxConfigBase* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::m_config
private

◆ 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_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_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: