KiCad PCB EDA Suite
PANEL_TEXT_VARIABLES Class Reference

#include <panel_text_variables.h>

Inheritance diagram for PANEL_TEXT_VARIABLES:
PANEL_TEXT_VARIABLES_BASE

Public Member Functions

 PANEL_TEXT_VARIABLES (wxWindow *aParent, PROJECT *aProject)
 
 ~PANEL_TEXT_VARIABLES () override
 
bool TransferDataToWindow () override
 
bool TransferDataFromWindow () override
 

Protected Member Functions

void OnGridCellChange (wxGridEvent &event) override
 
void OnGridSize (wxSizeEvent &event) override
 
void OnUpdateUI (wxUpdateUIEvent &event) override
 
void OnGridCellChanging (wxGridEvent &event)
 
void OnAddTextVar (wxCommandEvent &event) override
 
void OnRemoveTextVar (wxCommandEvent &event) override
 
void AppendTextVar (const wxString &aName, const wxString &aValue)
 

Protected Attributes

WX_GRIDm_TextVars
 
wxBitmapButton * m_btnAddTextVar
 
wxBitmapButton * m_btnDeleteTextVar
 

Private Attributes

PROJECTm_project
 
wxString m_errorMsg
 
int m_errorRow
 
int m_errorCol
 
wxTextValidator m_nameValidator
 
bool m_gridWidthsDirty
 

Detailed Description

Definition at line 33 of file panel_text_variables.h.

Constructor & Destructor Documentation

◆ PANEL_TEXT_VARIABLES()

PANEL_TEXT_VARIABLES::PANEL_TEXT_VARIABLES ( wxWindow *  aParent,
PROJECT aProject 
)

Definition at line 42 of file panel_text_variables.cpp.

42 :
44 m_project( aProject ),
45 m_errorRow( -1 ), m_errorCol( -1 ),
46 m_gridWidthsDirty( true )
47{
50
52
53 // prohibit these characters in the alias names: []{}()%~<>"='`;:.,&?/\|$
54 m_nameValidator.SetStyle( wxFILTER_EXCLUDE_CHAR_LIST );
55 m_nameValidator.SetCharExcludes( wxT( "{}[]()%~<>\"='`;:.,&?/\\|$" ) );
56
57 m_TextVars->PushEventHandler( new GRID_TRICKS( m_TextVars, [this]( wxCommandEvent& aEvent )
58 {
59 OnAddTextVar( aEvent );
60 } ) );
61 m_TextVars->SetSelectionMode( wxGrid::wxGridSelectionModes::wxGridSelectRows );
62
63 // wxFormBuilder doesn't include this event...
64 m_TextVars->Connect( wxEVT_GRID_CELL_CHANGING,
65 wxGridEventHandler( PANEL_TEXT_VARIABLES::OnGridCellChanging ),
66 nullptr, this );
67}
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
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Definition: grid_tricks.h:61
PANEL_TEXT_VARIABLES_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)
void OnGridCellChanging(wxGridEvent &event)
void OnAddTextVar(wxCommandEvent &event) override
wxTextValidator m_nameValidator
void ClearRows()
wxWidgets recently added an ASSERT which fires if the position is greater than or equal to the number...
Definition: wx_grid.h:109

References WX_GRID::ClearRows(), KiBitmap(), PANEL_TEXT_VARIABLES_BASE::m_btnAddTextVar, PANEL_TEXT_VARIABLES_BASE::m_btnDeleteTextVar, m_nameValidator, PANEL_TEXT_VARIABLES_BASE::m_TextVars, OnAddTextVar(), OnGridCellChanging(), small_plus, and small_trash.

◆ ~PANEL_TEXT_VARIABLES()

PANEL_TEXT_VARIABLES::~PANEL_TEXT_VARIABLES ( )
override

Definition at line 70 of file panel_text_variables.cpp.

71{
72 // Delete the GRID_TRICKS.
73 m_TextVars->PopEventHandler( true );
74
75 m_TextVars->Disconnect( wxEVT_GRID_CELL_CHANGING,
76 wxGridEventHandler( PANEL_TEXT_VARIABLES::OnGridCellChanging ),
77 nullptr, this );
78}

References PANEL_TEXT_VARIABLES_BASE::m_TextVars, and OnGridCellChanging().

Member Function Documentation

◆ AppendTextVar()

void PANEL_TEXT_VARIABLES::AppendTextVar ( const wxString &  aName,
const wxString &  aValue 
)
protected

Definition at line 92 of file panel_text_variables.cpp.

93{
94 int i = m_TextVars->GetNumberRows();
95
96 m_TextVars->AppendRows( 1 );
97
98 m_TextVars->SetCellValue( i, TV_NAME_COL, aName );
99
100 wxGridCellAttr* nameCellAttr = m_TextVars->GetOrCreateCellAttr( i, TV_NAME_COL );
101 wxGridCellTextEditor* nameTextEditor = new GRID_CELL_TEXT_EDITOR();
102 nameTextEditor->SetValidator( m_nameValidator );
103 nameCellAttr->SetEditor( nameTextEditor );
104 nameCellAttr->DecRef();
105
106 m_TextVars->SetCellValue( i, TV_VALUE_COL, aValue );
107}
This class works around a bug in wxGrid where the first keystroke doesn't get sent through the valida...
Definition: validators.h:45
@ TV_VALUE_COL

References m_nameValidator, PANEL_TEXT_VARIABLES_BASE::m_TextVars, TV_NAME_COL, and TV_VALUE_COL.

Referenced by OnAddTextVar(), and TransferDataToWindow().

◆ OnAddTextVar()

void PANEL_TEXT_VARIABLES::OnAddTextVar ( wxCommandEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_TEXT_VARIABLES_BASE.

Definition at line 158 of file panel_text_variables.cpp.

159{
161 return;
162
163 AppendTextVar( wxEmptyString, wxEmptyString );
164
165 m_TextVars->MakeCellVisible( m_TextVars->GetNumberRows() - 1, TV_NAME_COL );
166 m_TextVars->SetGridCursor( m_TextVars->GetNumberRows() - 1, TV_NAME_COL );
167
168 m_TextVars->EnableCellEditControl( true );
169 m_TextVars->ShowCellEditControl();
170}
void AppendTextVar(const wxString &aName, const wxString &aValue)
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:226

References AppendTextVar(), WX_GRID::CommitPendingChanges(), PANEL_TEXT_VARIABLES_BASE::m_TextVars, and TV_NAME_COL.

Referenced by PANEL_TEXT_VARIABLES().

◆ OnGridCellChange()

void PANEL_TEXT_VARIABLES::OnGridCellChange ( wxGridEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_TEXT_VARIABLES_BASE.

Definition at line 188 of file panel_text_variables.cpp.

189{
190 m_gridWidthsDirty = true;
191
192 aEvent.Skip();
193}

References m_gridWidthsDirty.

◆ OnGridCellChanging()

void PANEL_TEXT_VARIABLES::OnGridCellChanging ( wxGridEvent &  event)
protected

Definition at line 141 of file panel_text_variables.cpp.

142{
143 int row = event.GetRow();
144 int col = event.GetCol();
145 wxString text = event.GetString();
146
147 if( text.IsEmpty() && col == TV_NAME_COL )
148 {
149 m_errorMsg = _( "Variable name cannot be empty." );
150 m_errorRow = row;
151 m_errorCol = col;
152
153 event.Veto();
154 }
155}
#define _(s)

References _, m_errorCol, m_errorMsg, m_errorRow, text, and TV_NAME_COL.

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

◆ OnGridSize()

void PANEL_TEXT_VARIABLES::OnGridSize ( wxSizeEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_TEXT_VARIABLES_BASE.

Definition at line 233 of file panel_text_variables.cpp.

234{
235 m_gridWidthsDirty = true;
236
237 event.Skip();
238}

References m_gridWidthsDirty.

◆ OnRemoveTextVar()

void PANEL_TEXT_VARIABLES::OnRemoveTextVar ( wxCommandEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_TEXT_VARIABLES_BASE.

Definition at line 173 of file panel_text_variables.cpp.

174{
175 int curRow = m_TextVars->GetGridCursorRow();
176
177 if( curRow < 0 || m_TextVars->GetNumberRows() <= curRow )
178 return;
179
180 m_TextVars->CommitPendingChanges( true /* silent mode; we don't care if it's valid */ );
181 m_TextVars->DeleteRows( curRow, 1 );
182
183 m_TextVars->MakeCellVisible( std::max( 0, curRow-1 ), m_TextVars->GetGridCursorCol() );
184 m_TextVars->SetGridCursor( std::max( 0, curRow-1 ), m_TextVars->GetGridCursorCol() );
185}

References WX_GRID::CommitPendingChanges(), and PANEL_TEXT_VARIABLES_BASE::m_TextVars.

◆ OnUpdateUI()

void PANEL_TEXT_VARIABLES::OnUpdateUI ( wxUpdateUIEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_TEXT_VARIABLES_BASE.

Definition at line 196 of file panel_text_variables.cpp.

197{
199 {
200 int width = m_TextVars->GetClientRect().GetWidth();
201
202 m_TextVars->AutoSizeColumn( TV_NAME_COL );
203 m_TextVars->SetColSize( TV_NAME_COL, std::max( m_TextVars->GetColSize( TV_NAME_COL ),
204 120 ) );
205
206 m_TextVars->SetColSize( TV_VALUE_COL, width - m_TextVars->GetColSize( TV_NAME_COL ) );
207 m_gridWidthsDirty = false;
208 }
209
210 // Handle a grid error. This is delayed to OnUpdateUI so that we can change focus
211 // even when the original validation was triggered from a killFocus event (and for
212 // dialog with notebooks, so that the corresponding notebook page can be shown in
213 // the background when triggered from an OK).
214 if( !m_errorMsg.IsEmpty() )
215 {
216 // We will re-enter this routine when the error dialog is displayed, so make
217 // sure we don't keep putting up more dialogs.
218 wxString errorMsg = m_errorMsg;
219 m_errorMsg = wxEmptyString;
220
221 DisplayErrorMessage( this, errorMsg );
222
223 m_TextVars->SetFocus();
224 m_TextVars->MakeCellVisible( m_errorRow, m_errorCol );
225 m_TextVars->SetGridCursor( m_errorRow, m_errorCol );
226
227 m_TextVars->EnableCellEditControl( true );
228 m_TextVars->ShowCellEditControl();
229 }
230}
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:299

References DisplayErrorMessage(), m_errorCol, m_errorMsg, m_errorRow, m_gridWidthsDirty, PANEL_TEXT_VARIABLES_BASE::m_TextVars, TV_NAME_COL, and TV_VALUE_COL.

◆ TransferDataFromWindow()

bool PANEL_TEXT_VARIABLES::TransferDataFromWindow ( )
override

Definition at line 110 of file panel_text_variables.cpp.

111{
113 return false;
114
115 for( int row = 0; row < m_TextVars->GetNumberRows(); ++row )
116 {
117 if( m_TextVars->GetCellValue( row, TV_NAME_COL ).IsEmpty() )
118 {
119 m_errorRow = row;
121 m_errorMsg = _( "Variable name cannot be empty." );
122 return false;
123 }
124 }
125
126 std::map<wxString, wxString>& variables = m_project->GetTextVars();
127
128 variables.clear();
129
130 for( int row = 0; row < m_TextVars->GetNumberRows(); ++row )
131 {
132 wxString name = m_TextVars->GetCellValue( row, TV_NAME_COL );
133 wxString value = m_TextVars->GetCellValue( row, TV_VALUE_COL );
134 variables[ name ] = value;
135 }
136
137 return true;
138}
const char * name
Definition: DXF_plotter.cpp:56
virtual std::map< wxString, wxString > & GetTextVars() const
Definition: project.cpp:81

References _, WX_GRID::CommitPendingChanges(), PROJECT::GetTextVars(), m_errorCol, m_errorMsg, m_errorRow, m_project, PANEL_TEXT_VARIABLES_BASE::m_TextVars, name, TV_NAME_COL, and TV_VALUE_COL.

◆ TransferDataToWindow()

bool PANEL_TEXT_VARIABLES::TransferDataToWindow ( )
override

Definition at line 81 of file panel_text_variables.cpp.

82{
83 std::map<wxString, wxString>& variables = m_project->GetTextVars();
84
85 for( const auto& var : variables )
86 AppendTextVar( var.first, var.second );
87
88 return true;
89}

References AppendTextVar(), PROJECT::GetTextVars(), and m_project.

Member Data Documentation

◆ m_btnAddTextVar

wxBitmapButton* PANEL_TEXT_VARIABLES_BASE::m_btnAddTextVar
protectedinherited

◆ m_btnDeleteTextVar

wxBitmapButton* PANEL_TEXT_VARIABLES_BASE::m_btnDeleteTextVar
protectedinherited

◆ m_errorCol

int PANEL_TEXT_VARIABLES::m_errorCol
private

Definition at line 58 of file panel_text_variables.h.

Referenced by OnGridCellChanging(), OnUpdateUI(), and TransferDataFromWindow().

◆ m_errorMsg

wxString PANEL_TEXT_VARIABLES::m_errorMsg
private

Definition at line 56 of file panel_text_variables.h.

Referenced by OnGridCellChanging(), OnUpdateUI(), and TransferDataFromWindow().

◆ m_errorRow

int PANEL_TEXT_VARIABLES::m_errorRow
private

Definition at line 57 of file panel_text_variables.h.

Referenced by OnGridCellChanging(), OnUpdateUI(), and TransferDataFromWindow().

◆ m_gridWidthsDirty

bool PANEL_TEXT_VARIABLES::m_gridWidthsDirty
private

Definition at line 62 of file panel_text_variables.h.

Referenced by OnGridCellChange(), OnGridSize(), and OnUpdateUI().

◆ m_nameValidator

wxTextValidator PANEL_TEXT_VARIABLES::m_nameValidator
private

Definition at line 60 of file panel_text_variables.h.

Referenced by AppendTextVar(), and PANEL_TEXT_VARIABLES().

◆ m_project

PROJECT* PANEL_TEXT_VARIABLES::m_project
private

Definition at line 54 of file panel_text_variables.h.

Referenced by TransferDataFromWindow(), and TransferDataToWindow().

◆ m_TextVars


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