KiCad PCB EDA Suite
PANEL_EESCHEMA_TEMPLATE_FIELDNAMES Class Reference

#include <panel_eeschema_template_fieldnames.h>

Inheritance diagram for PANEL_EESCHEMA_TEMPLATE_FIELDNAMES:
PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE

Public Member Functions

 PANEL_EESCHEMA_TEMPLATE_FIELDNAMES (SCH_EDIT_FRAME *aFrame, wxWindow *aWindow, bool aGlobal)
 
 ~PANEL_EESCHEMA_TEMPLATE_FIELDNAMES () override
 
void ImportSettingsFrom (TEMPLATES *templateMgr)
 

Protected Member Functions

void OnAddButtonClick (wxCommandEvent &event) override
 Adds a new template fieldname (with default values) to the template fieldnames data. More...
 
void OnDeleteButtonClick (wxCommandEvent &event) override
 Deletes the selected template fieldname from the template fieldnames data. More...
 

Protected Attributes

SCH_EDIT_FRAMEm_frame
 
TEMPLATE_FIELDNAMES m_fields
 
bool m_global
 
int m_checkboxColWidth
 
wxBoxSizer * m_leftMargin
 
wxBoxSizer * m_topMargin
 
wxStaticText * m_title
 
WX_GRIDm_grid
 
wxBitmapButton * m_addFieldButton
 
wxBitmapButton * m_deleteFieldButton
 

Private Member Functions

void AdjustGridColumns (int aWidth)
 
void OnSizeGrid (wxSizeEvent &event) override
 
bool TransferDataToWindow () override
 
bool TransferDataFromWindow () override
 
bool TransferDataToGrid ()
 
bool TransferDataFromGrid ()
 

Detailed Description

Definition at line 29 of file panel_eeschema_template_fieldnames.h.

Constructor & Destructor Documentation

◆ PANEL_EESCHEMA_TEMPLATE_FIELDNAMES()

PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::PANEL_EESCHEMA_TEMPLATE_FIELDNAMES ( SCH_EDIT_FRAME aFrame,
wxWindow *  aWindow,
bool  aGlobal 
)

Definition at line 34 of file panel_eeschema_template_fieldnames.cpp.

36  :
38  m_frame( aFrame ),
39  m_global( aGlobal )
40 {
41  m_title->SetLabel( aGlobal ? _( "Global field name templates:" )
42  : _( "Project field name templates:" ) );
43 
46 
47  m_checkboxColWidth = m_grid->GetColSize( 1 );
48 
49  m_grid->PushEventHandler( new GRID_TRICKS( m_grid ) );
50 }
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Definition: grid_tricks.h:55
#define _(s)
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition: bitmap.cpp:105
PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)

References _, KiBitmap(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_addFieldButton, m_checkboxColWidth, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_deleteFieldButton, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_title, small_plus, and small_trash.

◆ ~PANEL_EESCHEMA_TEMPLATE_FIELDNAMES()

PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::~PANEL_EESCHEMA_TEMPLATE_FIELDNAMES ( )
override

Definition at line 53 of file panel_eeschema_template_fieldnames.cpp.

54 {
55  // Delete the GRID_TRICKS.
56  m_grid->PopEventHandler( true );
57 }

References PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

Member Function Documentation

◆ AdjustGridColumns()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::AdjustGridColumns ( int  aWidth)
private

Definition at line 188 of file panel_eeschema_template_fieldnames.cpp.

189 {
190  if( aWidth <= 0 )
191  return;
192 
193  // Account for scroll bars
194  aWidth -= ( m_grid->GetSize().x - m_grid->GetClientSize().x );
195 
196  m_grid->SetColSize( 0, aWidth - 2 * m_checkboxColWidth );
197  m_grid->SetColSize( 1, m_checkboxColWidth );
198  m_grid->SetColSize( 2, m_checkboxColWidth );
199 }

References m_checkboxColWidth, and PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

Referenced by OnSizeGrid().

◆ ImportSettingsFrom()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::ImportSettingsFrom ( TEMPLATES templateMgr)

◆ OnAddButtonClick()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnAddButtonClick ( wxCommandEvent &  event)
overrideprotectedvirtual

Adds a new template fieldname (with default values) to the template fieldnames data.

Process the wxWidgets event produced when the user presses the Add button for the template fieldnames control.

Parameters
eventThe wxWidgets produced event information

Reimplemented from PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE.

Definition at line 69 of file panel_eeschema_template_fieldnames.cpp.

70 {
72  return;
73 
74  int row = m_grid->GetNumberRows();
76 
77  TEMPLATE_FIELDNAME newFieldname = TEMPLATE_FIELDNAME( _( "Untitled Field" ) );
78  newFieldname.m_Visible = false;
79  m_fields.insert( m_fields.end(), newFieldname );
81 
82  // wx documentation is wrong, SetGridCursor does not make visible.
83  m_grid->MakeCellVisible( row, 0 );
84  m_grid->SetGridCursor( row, 0 );
85 }
#define _(s)
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:190
Hold a name of a symbol's field, field value, and default visibility.

References _, WX_GRID::CommitPendingChanges(), m_fields, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid, TEMPLATE_FIELDNAME::m_Visible, TransferDataFromGrid(), and TransferDataToGrid().

◆ OnDeleteButtonClick()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnDeleteButtonClick ( wxCommandEvent &  event)
overrideprotectedvirtual

Deletes the selected template fieldname from the template fieldnames data.

Process the wxWidgets event produced when the user presses the Delete button for the template fieldnames control.

Parameters
eventThe wxWidgets produced event information

Reimplemented from PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE.

Definition at line 88 of file panel_eeschema_template_fieldnames.cpp.

89 {
91  return;
92 
93  int curRow = m_grid->GetGridCursorRow();
94 
95  if( curRow >= 0 && curRow < (int)m_fields.size() )
96  {
97  m_fields.erase( m_fields.begin() + curRow );
98  m_grid->DeleteRows( curRow );
99  }
100 
101  m_grid->MakeCellVisible( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
102  m_grid->SetGridCursor( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
103 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:190

References WX_GRID::CommitPendingChanges(), m_fields, and PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

◆ OnSizeGrid()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnSizeGrid ( wxSizeEvent &  event)
overrideprivatevirtual

Reimplemented from PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE.

Definition at line 202 of file panel_eeschema_template_fieldnames.cpp.

203 {
204  AdjustGridColumns( event.GetSize().GetX() );
205 
206  event.Skip();
207 }

References AdjustGridColumns().

◆ TransferDataFromGrid()

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataFromGrid ( )
private

Definition at line 138 of file panel_eeschema_template_fieldnames.cpp.

139 {
140  if( !m_grid->CommitPendingChanges() )
141  return false;
142 
143  for( int row = 0; row < m_grid->GetNumberRows(); ++row )
144  {
145  m_fields[row].m_Name = m_grid->GetCellValue( row, 0 );
146  m_fields[row].m_Visible = m_grid->GetCellValue( row, 1 ) != wxEmptyString;
147  m_fields[row].m_URL = m_grid->GetCellValue( row, 2 ) != wxEmptyString;
148  }
149 
150  return true;
151 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:190

References WX_GRID::CommitPendingChanges(), m_fields, and PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

Referenced by OnAddButtonClick(), and TransferDataFromWindow().

◆ TransferDataFromWindow()

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataFromWindow ( )
overrideprivate

Definition at line 154 of file panel_eeschema_template_fieldnames.cpp.

155 {
156  if( !TransferDataFromGrid() )
157  return false;
158 
159  SCHEMATIC& schematic = m_frame->Schematic();
160 
162 
163  for( const TEMPLATE_FIELDNAME& field : m_fields )
165 
166  if( m_global )
167  {
168  auto* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
169 
170  if( cfg )
171  {
172  // Save global fieldname templates
173  STRING_FORMATTER sf;
174  schematic.Settings().m_TemplateFieldNames.Format( &sf, 0, true );
175 
176  wxString record = FROM_UTF8( sf.GetString().c_str() );
177  record.Replace( wxT("\n"), wxT(""), true ); // strip all newlines
178  record.Replace( wxT(" "), wxT(" "), true ); // double space to single
179 
180  cfg->m_Drawing.field_names = record.ToStdString();
181  }
182  }
183 
184  return true;
185 }
void Format(OUTPUTFORMATTER *out, int nestLevel, bool aGlobal) const
Serialize this object out as text into the given OUTPUTFORMATTER.
static wxString FROM_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
Definition: macros.h:110
Holds all the data relating to one schematic.
Definition: schematic.h:59
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
void AddTemplateFieldName(const TEMPLATE_FIELDNAME &aFieldName, bool aGlobal)
Insert or append a wanted symbol field name into the field names template.
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:167
TEMPLATES m_TemplateFieldNames
void DeleteAllFieldNameTemplates(bool aGlobal)
Delete the entire contents.
SCHEMATIC & Schematic() const
const std::string & GetString()
Definition: richio.h:438
Hold a name of a symbol's field, field value, and default visibility.
Implement an OUTPUTFORMATTER to a memory buffer.
Definition: richio.h:414

References TEMPLATES::AddTemplateFieldName(), TEMPLATES::DeleteAllFieldNameTemplates(), TEMPLATES::Format(), FROM_UTF8(), STRING_FORMATTER::GetString(), Kiface(), m_fields, m_frame, m_global, SCHEMATIC_SETTINGS::m_TemplateFieldNames, SCH_EDIT_FRAME::Schematic(), SCHEMATIC::Settings(), and TransferDataFromGrid().

◆ TransferDataToGrid()

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataToGrid ( )
private

Definition at line 106 of file panel_eeschema_template_fieldnames.cpp.

107 {
108  m_grid->Freeze();
109 
110  m_grid->ClearRows();
111  m_grid->AppendRows( m_fields.size() );
112 
113  for( int row = 0; row < m_grid->GetNumberRows(); ++row )
114  {
115  m_grid->SetCellValue( row, 0, m_fields[row].m_Name );
116  m_grid->SetCellValue( row, 1, m_fields[row].m_Visible ? wxT( "1" ) : wxEmptyString );
117  m_grid->SetCellValue( row, 2, m_fields[row].m_URL ? wxT( "1" ) : wxEmptyString );
118 
119  // Set cell properties
120  m_grid->SetCellAlignment( row, 0, wxALIGN_LEFT, wxALIGN_CENTRE );
121 
122  // Render the Visible and URL columns as check boxes
123  m_grid->SetCellRenderer( row, 1, new wxGridCellBoolRenderer() );
124  m_grid->SetReadOnly( row, 1 ); // Not really; we delegate interactivity to GRID_TRICKS
125  m_grid->SetCellAlignment( row, 1, wxALIGN_CENTRE, wxALIGN_CENTRE );
126 
127  m_grid->SetCellRenderer( row, 2, new wxGridCellBoolRenderer() );
128  m_grid->SetReadOnly( row, 2 ); // Not really; we delegate interactivity to GRID_TRICKS
129  m_grid->SetCellAlignment( row, 2, wxALIGN_CENTRE, wxALIGN_CENTRE );
130  }
131 
132  m_grid->Thaw();
133 
134  return true;
135 }
void ClearRows()
wxWidgets recently added an ASSERT which fires if the position is greater than or equal to the number...
Definition: wx_grid.h:106

References WX_GRID::ClearRows(), m_fields, and PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

Referenced by ImportSettingsFrom(), OnAddButtonClick(), and TransferDataToWindow().

◆ TransferDataToWindow()

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataToWindow ( )
overrideprivate

Definition at line 60 of file panel_eeschema_template_fieldnames.cpp.

61 {
62  SCHEMATIC& schematic = m_frame->Schematic();
63 
65  return TransferDataToGrid();
66 }
Holds all the data relating to one schematic.
Definition: schematic.h:59
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:167
TEMPLATES m_TemplateFieldNames
SCHEMATIC & Schematic() const
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames()
Return a template field name list for read only access.

References TEMPLATES::GetTemplateFieldNames(), m_fields, m_frame, m_global, SCHEMATIC_SETTINGS::m_TemplateFieldNames, SCH_EDIT_FRAME::Schematic(), SCHEMATIC::Settings(), and TransferDataToGrid().

Member Data Documentation

◆ m_addFieldButton

◆ m_checkboxColWidth

int PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::m_checkboxColWidth
protected

◆ m_deleteFieldButton

◆ m_fields

◆ m_frame

SCH_EDIT_FRAME* PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::m_frame
protected

◆ m_global

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::m_global
protected

◆ m_grid

◆ m_leftMargin

wxBoxSizer* PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_leftMargin
protectedinherited

◆ m_title

wxStaticText* PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_title
protectedinherited

◆ m_topMargin

wxBoxSizer* PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_topMargin
protectedinherited

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