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
 Function OnAddButtonClick Process the wxWidgets event produced when the user presses the Add buton for the template fieldnames control. More...
 
void OnDeleteButtonClick (wxCommandEvent &event) override
 Function OnDeleteButtonClick Process the wxWidgets event produced when the user presses the Delete button for the template fieldnames control. 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 
44  // Yep, it's a hack. I haven't a clue why the global and project versions don't lay
45  // out the same.
46  if( !aGlobal )
47  {
48  m_leftMargin->PrependSpacer( 10 );
49  m_topMargin->PrependSpacer( 10 );
50  }
51 
52  m_addFieldButton->SetBitmap( KiBitmap( small_plus_xpm ) );
54 
55  m_checkboxColWidth = m_grid->GetColSize( 1 );
56 
57  m_grid->PushEventHandler( new GRID_TRICKS( m_grid ) );
58 }
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Definition: grid_tricks.h:51
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:82
const BITMAP_OPAQUE small_trash_xpm[1]
Definition: small_trash.cpp:37
#define _(s)
Definition: 3d_actions.cpp:33
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)
const BITMAP_OPAQUE small_plus_xpm[1]
Definition: small_plus.cpp:18

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_leftMargin, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_title, PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_topMargin, small_plus_xpm, and small_trash_xpm.

◆ ~PANEL_EESCHEMA_TEMPLATE_FIELDNAMES()

PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::~PANEL_EESCHEMA_TEMPLATE_FIELDNAMES ( )
override

Definition at line 61 of file panel_eeschema_template_fieldnames.cpp.

62 {
63  // Delete the GRID_TRICKS.
64  m_grid->PopEventHandler( true );
65 }

References PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::m_grid.

Member Function Documentation

◆ AdjustGridColumns()

void PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::AdjustGridColumns ( int  aWidth)
private

Definition at line 198 of file panel_eeschema_template_fieldnames.cpp.

199 {
200  if( aWidth <= 0 )
201  return;
202 
203  // Account for scroll bars
204  aWidth -= ( m_grid->GetSize().x - m_grid->GetClientSize().x );
205 
206  m_grid->SetColSize( 0, aWidth - 2 * m_checkboxColWidth );
207  m_grid->SetColSize( 1, m_checkboxColWidth );
208  m_grid->SetColSize( 2, m_checkboxColWidth );
209 }

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

Function OnAddButtonClick Process the wxWidgets event produced when the user presses the Add buton for the template fieldnames control.

Parameters
eventThe wxWidgets produced event information

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

Reimplemented from PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE.

Definition at line 77 of file panel_eeschema_template_fieldnames.cpp.

78 {
80  return;
81 
82  int row = m_grid->GetNumberRows();
84 
85  TEMPLATE_FIELDNAME newFieldname = TEMPLATE_FIELDNAME( _( "Untitled Field" ) );
86  newFieldname.m_Visible = false;
87  m_fields.insert( m_fields.end(), newFieldname );
89 
90  // wx documentation is wrong, SetGridCursor does not make visible.
91  m_grid->MakeCellVisible( row, 0 );
92  m_grid->SetGridCursor( row, 0 );
93 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:182
#define _(s)
Definition: 3d_actions.cpp:33
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

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

Parameters
eventThe wxWidgets produced event information

Deletes the selected template fieldname from the template fieldnames data

Reimplemented from PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE.

Definition at line 96 of file panel_eeschema_template_fieldnames.cpp.

97 {
99  return;
100 
101  int curRow = m_grid->GetGridCursorRow();
102 
103  if( curRow >= 0 && curRow < (int)m_fields.size() )
104  {
105  m_fields.erase( m_fields.begin() + curRow );
106  m_grid->DeleteRows( curRow );
107  }
108 
109  m_grid->MakeCellVisible( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
110  m_grid->SetGridCursor( std::max( 0, curRow-1 ), m_grid->GetGridCursorCol() );
111 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:182

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 212 of file panel_eeschema_template_fieldnames.cpp.

213 {
214  AdjustGridColumns( event.GetSize().GetX() );
215 
216  event.Skip();
217 }

References AdjustGridColumns().

◆ TransferDataFromGrid()

bool PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataFromGrid ( )
private

Definition at line 148 of file panel_eeschema_template_fieldnames.cpp.

149 {
150  if( !m_grid->CommitPendingChanges() )
151  return false;
152 
153  for( int row = 0; row < m_grid->GetNumberRows(); ++row )
154  {
155  m_fields[row].m_Name = m_grid->GetCellValue( row, 0 );
156  m_fields[row].m_Visible = m_grid->GetCellValue( row, 1 ) != wxEmptyString;
157  m_fields[row].m_URL = m_grid->GetCellValue( row, 2 ) != wxEmptyString;
158  }
159 
160  return true;
161 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:182

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 164 of file panel_eeschema_template_fieldnames.cpp.

165 {
166  if( !TransferDataFromGrid() )
167  return false;
168 
169  SCHEMATIC& schematic = m_frame->Schematic();
170 
172 
173  for( const TEMPLATE_FIELDNAME& field : m_fields )
175 
176  if( m_global )
177  {
178  auto* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
179 
180  if( cfg )
181  {
182  // Save global fieldname templates
183  STRING_FORMATTER sf;
184  schematic.Settings().m_TemplateFieldNames.Format( &sf, 0, true );
185 
186  wxString record = FROM_UTF8( sf.GetString().c_str() );
187  record.Replace( wxT("\n"), wxT(""), true ); // strip all newlines
188  record.Replace( wxT(" "), wxT(" "), true ); // double space to single
189 
190  cfg->m_Drawing.field_names = record.ToStdString();
191  }
192  }
193 
194  return true;
195 }
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 A schematic may consist of one or more sheets (and one r...
Definition: schematic.h:44
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:125
TEMPLATES m_TemplateFieldNames
void DeleteAllFieldNameTemplates(bool aGlobal)
Delete the entire contents.
KIFACE_I & Kiface()
Global KIFACE_I "get" accessor.
SCHEMATIC & Schematic() const
const std::string & GetString()
Definition: richio.h:435
Hold a name of a symbol's field, field value, and default visibility.
Implement an OUTPUTFORMATTER to a memory buffer.
Definition: richio.h:411

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 114 of file panel_eeschema_template_fieldnames.cpp.

115 {
116  m_grid->Freeze();
117 
118  if( m_grid->GetNumberRows() )
119  m_grid->DeleteRows( 0, m_grid->GetNumberRows() );
120 
121  m_grid->AppendRows( m_fields.size() );
122 
123  for( int row = 0; row < m_grid->GetNumberRows(); ++row )
124  {
125  m_grid->SetCellValue( row, 0, m_fields[row].m_Name );
126  m_grid->SetCellValue( row, 1, m_fields[row].m_Visible ? wxT( "1" ) : wxEmptyString );
127  m_grid->SetCellValue( row, 2, m_fields[row].m_URL ? wxT( "1" ) : wxEmptyString );
128 
129  // Set cell properties
130  m_grid->SetCellAlignment( row, 0, wxALIGN_LEFT, wxALIGN_CENTRE );
131 
132  // Render the Visible and URL columns as check boxes
133  m_grid->SetCellRenderer( row, 1, new wxGridCellBoolRenderer() );
134  m_grid->SetReadOnly( row, 1 ); // Not really; we delegate interactivity to GRID_TRICKS
135  m_grid->SetCellAlignment( row, 1, wxALIGN_CENTRE, wxALIGN_CENTRE );
136 
137  m_grid->SetCellRenderer( row, 2, new wxGridCellBoolRenderer() );
138  m_grid->SetReadOnly( row, 2 ); // Not really; we delegate interactivity to GRID_TRICKS
139  m_grid->SetCellAlignment( row, 2, wxALIGN_CENTRE, wxALIGN_CENTRE );
140  }
141 
142  m_grid->Thaw();
143 
144  return true;
145 }

References 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 68 of file panel_eeschema_template_fieldnames.cpp.

69 {
70  SCHEMATIC& schematic = m_frame->Schematic();
71 
73  return TransferDataToGrid();
74 }
Holds all the data relating to one schematic A schematic may consist of one or more sheets (and one r...
Definition: schematic.h:44
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:125
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: