30#include <wx/tooltip.h>
50#include "wx/dcclient.h"
54 bool* aIsUndoable,
bool* aClearAnnotationNewItems,
55 bool* aUpdateHierarchyNavigator,
56 wxString* aSourceSheetFilename ) :
74 [&]( wxCommandEvent& aEvent )
78 m_grid->SetSelectionMode( wxGrid::wxGridSelectRows );
79 m_grid->ShowHideColumns(
"0 1 2 3 4 5 6 7" );
82 if(
m_frame->GetColorSettings()->GetOverrideSchItemColors() )
83 m_infoBar->ShowMessage(
_(
"Note: individual item colors overridden in Preferences." ) );
90 wxToolTip::Enable(
true );
120 m_grid->PopEventHandler(
true );
126 if( !wxDialog::TransferDataToWindow() )
130 wxString variantName =
m_frame->Schematic().GetCurrentVariant();
141 wxString filename = field_copy.
GetText();
142 filename.Replace( wxT(
"/" ), wxT(
"\\" ) );
143 field_copy.
SetText( filename );
148 field_copy.
SetText(
m_sheet->GetFieldText( field.GetName(), &instance, variantName ) );
157 wxGridTableMessage msg(
m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED,
m_fields->size() );
158 m_grid->ProcessTableMessage( msg );
191 if( !
m_grid->CommitPendingChanges() || !
m_grid->Validate() )
195 for(
size_t i = 0; i <
m_fields->size(); ++i )
251 if( !wxDialog::TransferDataFromWindow() )
262 if( sheetFileName.IsEmpty() )
264 DisplayError(
this,
_(
"A sheet must have a valid file name." ) );
275 DisplayError(
this,
_(
"A sheet must have a valid file name." ) );
279 wxFileName fn( sheetFileName );
281 wxString newRelativeFilename = fn.GetFullPath();
284 newRelativeFilename.Replace( wxT(
"\\" ), wxT(
"/" ) );
287 oldFilename.Replace( wxT(
"\\" ), wxT(
"/" ) );
289 bool filename_changed = oldFilename != newRelativeFilename;
291 if( filename_changed ||
m_sheet->IsNew() )
295 wxCHECK( currentScreen,
false );
297 bool clearFileName =
false;
302 clearFileName =
true;
303 currentScreen->
SetFileName(
m_frame->Prj().AbsolutePath( wxT(
"noname.kicad_sch" ) ) );
306 wxFileName tmp( fn );
307 wxFileName screenFileName = currentScreen->
GetFileName();
309 if( fn.IsAbsolute() && fn.MakeRelativeTo( screenFileName.GetPath() ) )
312 _(
"Sheet File Path" ),
313 wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION | wxCENTER );
315 makeRelDlg.SetExtendedMessage(
_(
"Using relative hierarchical sheet file name paths improves "
316 "schematic portability across systems and platforms. Using "
317 "absolute paths can result in portability issues." ) );
318 makeRelDlg.SetYesNoLabels( KICAD_MESSAGE_DIALOG::ButtonLabel(
_(
"Use Relative Path" ) ),
319 KICAD_MESSAGE_DIALOG::ButtonLabel(
_(
"Use Absolute Path" ) ) );
321 if( makeRelDlg.ShowModal() == wxID_YES )
324 "\n to relative path: '%s'",
328 newRelativeFilename = fn.GetFullPath();
359 if( newSheetname.IsEmpty() )
360 newSheetname =
_(
"Untitled Sheet" );
364 m_sheet->SetName( newSheetname );
365 m_sheet->SetFileName( newRelativeFilename );
369 m_field.Offset(
m_sheet->GetPosition() );
375 wxString variantName =
m_frame->Schematic().GetCurrentVariant();
377 for(
int ii =
m_fields->GetNumberRows() - 1; ii >= 0; ii-- )
388 else if( fieldName.IsEmpty() )
396 m_sheet->AddOptionalField( field );
400 wxString defaultText =
m_sheet->Schematic()->ConvertRefsToKIIDs( existingField->
GetText() );
401 tmp =
const_cast<SCH_FIELD*
>( existingField );
405 if( !variantName.IsEmpty() )
408 tmp->
SetText( defaultText, &instance );
411 &instance, variantName );
424 wxPanel temp(
this );
429 KIDIALOG dlg(
this,
_(
"Note: item colors are overridden in the current color theme." ),
431 dlg.ShowDetailedText( wxString::Format(
_(
"To see individual item colors uncheck '%s'\n"
432 "in Preferences > Schematic Editor > Colors." ),
470 wxGridCellEditor*
editor =
m_grid->GetCellEditor( event.GetRow(), event.GetCol() );
471 wxControl* control =
editor->GetControl();
473 if( control && control->GetValidator() )
474 success = control->GetValidator()->Validate( control );
482 else if( event.GetCol() ==
FDC_NAME )
484 wxString newName =
event.GetString();
486 for(
int i = 0; i <
m_grid->GetNumberRows(); ++i )
488 if( i == event.GetRow() )
491 if( newName.CmpNoCase(
m_grid->GetCellValue( i,
FDC_NAME ) ) == 0 )
493 DisplayError(
this, wxString::Format(
_(
"Field name '%s' already in use." ),
510 [&]() -> std::pair<int, int>
519 wxGridTableMessage msg(
m_fields, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
520 m_grid->ProcessTableMessage( msg );
531 if( row < m_fields->GetMandatoryRowCount() )
533 DisplayError(
this, wxString::Format(
_(
"The first %d fields are mandatory." ),
534 m_fields->GetMandatoryRowCount() ) );
545 wxGridTableMessage msg(
m_fields, wxGRIDTABLE_NOTIFY_ROWS_DELETED, row, 1 );
546 m_grid->ProcessTableMessage( msg );
556 return row >
m_fields->GetMandatoryRowCount();
560 std::swap( *(
m_fields->begin() + row ), *(
m_fields->begin() + row - 1 ) );
571 return row >=
m_fields->GetMandatoryRowCount();
575 std::swap( *(
m_fields->begin() + row ), *(
m_fields->begin() + row + 1 ) );
583 std::bitset<64> shownColumns =
m_grid->GetShownColumns();
589 if( !
m_grid->IsCellEditControlShown() )
590 m_grid->SetGridWidthsDirty();
595 wxString
path =
m_frame->GetCurrentSheet().PathHumanReadable(
false );
597 if(
path.Last() !=
'/' )
601 wxControl* control =
editor->GetControl();
602 wxTextEntry* textControl =
dynamic_cast<wxTextEntry*
>( control );
606 sheetName = textControl->GetValue();
621 path = wxControl::Ellipsize(
path, dc, wxELLIPSIZE_START, width, wxELLIPSIZE_FLAGS_NONE );
633 m_grid->EnableCellEditControl(
true );
634 m_grid->ShowCellEditControl();
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Color settings are a bit different than most of the settings objects in that there can be more than o...
bool GetOverrideSchItemColors() const
wxCheckBox * m_cbExcludeFromSim
wxStaticText * m_borderWidthLabel
STD_BITMAP_BUTTON * m_bpMoveUp
wxTextCtrl * m_pageNumberTextCtrl
wxTextCtrl * m_borderWidthCtrl
wxCheckBox * m_cbExcludeFromBom
wxStaticText * m_borderWidthUnits
COLOR_SWATCH * m_backgroundSwatch
wxStaticText * m_hierarchicalPath
wxCheckBox * m_cbExcludeFromBoard
STD_BITMAP_BUTTON * m_bpAdd
wxStdDialogButtonSizer * m_stdDialogButtonSizer
wxBoxSizer * m_sizerBottom
STD_BITMAP_BUTTON * m_bpDelete
COLOR_SWATCH * m_borderSwatch
DIALOG_SHEET_PROPERTIES_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Sheet 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)
wxStaticText * m_hierarchicalPathLabel
STD_BITMAP_BUTTON * m_bpMoveDown
bool TransferDataToWindow() override
void OnAddField(wxCommandEvent &event) override
void OnMoveDown(wxCommandEvent &event) override
UNIT_BINDER m_borderWidth
std::bitset< 64 > m_shownColumns
SCH_FIELD m_dummySheetNameField
bool TransferDataFromWindow() override
void OnGridCellChanging(wxGridEvent &event)
void OnDeleteField(wxCommandEvent &event) override
bool onSheetFilenameChanged(const wxString &aNewFilename)
wxString * m_sourceSheetFilename
bool * m_updateHierarchyNavigator
void OnUpdateUI(wxUpdateUIEvent &event) override
bool * m_clearAnnotationNewItems
FIELDS_GRID_TABLE * m_fields
void OnMoveUp(wxCommandEvent &event) override
DIALOG_SHEET_PROPERTIES(SCH_EDIT_FRAME *aParent, SCH_SHEET *aSheet, bool *aIsUndoable, bool *aClearAnnotationNewItems, bool *aUpdateHierarchyNavigator, wxString *aSourceSheetFilename)
~DIALOG_SHEET_PROPERTIES() override
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
const EDA_ANGLE & GetTextAngle() const
void Offset(const VECTOR2I &aOffset)
GR_TEXT_H_ALIGN_T GetHorizJustify() const
virtual void SetVisible(bool aVisible)
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
SCH_FIELD * GetField(FIELD_T aFieldId)
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
A color representation with 4 components: red, green, blue, alpha.
wxCheckBox * m_optOverrideColors
Schematic editor (Eeschema) main window.
SCHEMATIC & Schematic() const
VECTOR2I GetPosition() const override
virtual const wxString & GetText() const override
Return the string associated with the text object.
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
bool IsEmpty()
Return true if both the name and value of the field are empty.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
void SetName(const wxString &aName)
void SetText(const wxString &aText) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
const wxString & GetFileName() const
void SetFileName(const wxString &aFileName)
Set the file name for this screen to aFileName.
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void BuildSheetList(SCH_SHEET *aSheet, bool aCheckIntegrity)
Build the list of sheets and their sheet path from aSheet.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
wxString GetPageNumber() const
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
#define KICAD_MESSAGE_DIALOG
static bool positioningChanged(const SCH_FIELD &a, const SCH_FIELD &b)
static bool positioningChanged(const SCH_FIELD &a, const SCH_FIELD &b)
const int minSize
Push and Shove router track width and via size dialog.
static const std::string KiCadSchematicFileExtension
const wxChar *const tracePathsAndFiles
Flag to enable path and file name debug output.
@ LAYER_SCHEMATIC_BACKGROUND
KICOMMON_API wxFont GetSmallInfoFont(wxWindow *aWindow)
const SCH_FIELD * FindField(const std::vector< SCH_FIELD > &aFields, FIELD_T aFieldId)
bool IsFullFileNameValid(const wxString &aFullFilename)
Checks if a full filename is valid, i.e.
wxString GetUserFieldName(int aFieldNdx, bool aTranslateForHI)
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
wxLogTrace helper definitions.
Custom text control validator definitions.
Definition of file extensions used in Kicad.