KiCad PCB EDA Suite
WX_GRID Class Reference

#include <wx_grid.h>

Inheritance diagram for WX_GRID:

Public Member Functions

 WX_GRID (wxWindow *parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxWANTS_CHARS, const wxString &name=wxGridNameStr)
 
 ~WX_GRID () override
 
void SetColLabelSize (int aHeight)
 Hide wxGrid's SetColLabelSize() method with one which makes sure the size is tall enough for the system GUI font. More...
 
wxString GetShownColumns ()
 Get a tokenized string containing the shown column indexes. More...
 
void ShowHideColumns (const wxString &shownColumns)
 Show/hide the grid columns based on a tokenized string of shown column indexes. More...
 
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 the table. More...
 
void DestroyTable (wxGridTableBase *aTable)
 Work-around for a bug in wxGrid which crashes when deleting the table if the cell edit control was not closed. More...
 
bool CommitPendingChanges (bool aQuietMode=false)
 Close any open cell edit controls. More...
 
int GetVisibleWidth (int aCol, bool aHeader=true, bool aContents=false, bool aKeep=true)
 Calculates the specified column based on the actual size of the text on screen. More...
 
void EnsureColLabelsVisible ()
 Ensure the height of the row displaying the column labels is enough, even if labels are multiline texts. More...
 
void ShowEditorOnMouseUp ()
 WxWidgets has a bunch of bugs in its handling of wxGrid mouse events which close cell editors right after opening them. More...
 

Protected Member Functions

void DrawColLabel (wxDC &dc, int col) override
 
void onGridColMove (wxGridEvent &aEvent)
 

Protected Attributes

bool m_weOwnTable
 

Detailed Description

Definition at line 29 of file wx_grid.h.

Constructor & Destructor Documentation

◆ WX_GRID()

WX_GRID::WX_GRID ( wxWindow *  parent,
wxWindowID  id,
const wxPoint &  pos = wxDefaultPosition,
const wxSize &  size = wxDefaultSize,
long  style = wxWANTS_CHARS,
const wxString &  name = wxGridNameStr 
)

Definition at line 35 of file wx_grid.cpp.

36  :
37  wxGrid( parent, id, pos, size, style, name ),
38  m_weOwnTable( false )
39 {}
bool m_weOwnTable
Definition: wx_grid.h:106
const char * name
Definition: DXF_plotter.cpp:59

◆ ~WX_GRID()

WX_GRID::~WX_GRID ( )
override

Definition at line 42 of file wx_grid.cpp.

43 {
44  if( m_weOwnTable )
45  DestroyTable( GetTable() );
46 }
bool m_weOwnTable
Definition: wx_grid.h:106
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:97

References DestroyTable(), and m_weOwnTable.

Member Function Documentation

◆ CommitPendingChanges()

bool WX_GRID::CommitPendingChanges ( bool  aQuietMode = false)

Close any open cell edit controls.

Parameters
aQuietModeif true don't send events (ie: for row/col delete operations)
Returns
false if validation failed

Definition at line 182 of file wx_grid.cpp.

183 {
184  if( !IsCellEditControlEnabled() )
185  return true;
186 
187  if( !aQuietMode && SendEvent( wxEVT_GRID_EDITOR_HIDDEN ) == -1 )
188  return false;
189 
190  HideCellEditControl();
191 
192  // do it after HideCellEditControl()
193  m_cellEditCtrlEnabled = false;
194 
195  int row = m_currentCellCoords.GetRow();
196  int col = m_currentCellCoords.GetCol();
197 
198  wxString oldval = GetCellValue( row, col );
199  wxString newval;
200 
201  wxGridCellAttr* attr = GetCellAttr( row, col );
202  wxGridCellEditor* editor = attr->GetEditor( this, row, col );
203 
204  bool changed = editor->EndEdit( row, col, this, oldval, &newval );
205 
206  editor->DecRef();
207  attr->DecRef();
208 
209  if( changed )
210  {
211  if( !aQuietMode && SendEvent(wxEVT_GRID_CELL_CHANGING, newval) == -1 )
212  return false;
213 
214  editor->ApplyEdit(row, col, this);
215 
216  // for compatibility reasons dating back to wx 2.8 when this event
217  // was called wxEVT_GRID_CELL_CHANGE and wxEVT_GRID_CELL_CHANGING
218  // didn't exist we allow vetoing this one too
219  if( !aQuietMode && SendEvent( wxEVT_GRID_CELL_CHANGED, oldval ) == -1 )
220  {
221  // Event has been vetoed, set the data back.
222  SetCellValue( row, col, oldval );
223  return false;
224  }
225  }
226 
227  return true;
228 }

References editor.

Referenced by PANEL_FP_LIB_TABLE::appendRowHandler(), PANEL_SYM_LIB_TABLE::appendRowHandler(), PANEL_FP_LIB_TABLE::browseLibrariesHandler(), PANEL_SYM_LIB_TABLE::deleteRowHandler(), PANEL_FP_LIB_TABLE::deleteRowHandler(), DestroyTable(), PANEL_SETUP_NETCLASSES::doApplyFilters(), PANEL_SETUP_NETCLASSES::doAssignments(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::doValidate(), PANEL_SETUP_TEXT_AND_GRAPHICS::ImportSettingsFrom(), PANEL_SETUP_TRACKS_AND_VIAS::ImportSettingsFrom(), PANEL_SYM_LIB_TABLE::moveDownHandler(), PANEL_FP_LIB_TABLE::moveDownHandler(), PANEL_SYM_LIB_TABLE::moveUpHandler(), PANEL_FP_LIB_TABLE::moveUpHandler(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_PROPERTIES::OnAdd3DModel(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAdd3DRow(), DIALOG_FOOTPRINT_PROPERTIES::OnAdd3DRow(), DIALOG_PIN_PROPERTIES::OnAddAlternate(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnAddButtonClick(), DIALOG_CONFIGURE_PATHS::OnAddEnvVar(), DIALOG_LIB_SYMBOL_PROPERTIES::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAddField(), DIALOG_SHEET_PROPERTIES::OnAddField(), DIALOG_SYMBOL_PROPERTIES::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), PANEL_SETUP_NETCLASSES::OnAddNetclassClick(), DIALOG_LIB_EDIT_PIN_TABLE::OnAddRow(), DIALOG_CONFIGURE_PATHS::OnAddSearchPath(), PANEL_FP_EDITOR_DEFAULTS::OnAddTextItem(), PANEL_TEXT_VARIABLES::OnAddTextVar(), DIALOG_FP_PLUGIN_OPTIONS::onAppendOption(), DIALOG_FP_PLUGIN_OPTIONS::onAppendRow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::OnButtonAdd(), TEXT_BUTTON_FILE_BROWSER::OnButtonClick(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::OnButtonDelete(), DIALOG_FIELDS_EDITOR_GLOBAL::OnClose(), DIALOG_LIB_EDIT_PIN_TABLE::OnClose(), PANEL_SYM_LIB_TABLE::onConvertLegacyLibraries(), DIALOG_PIN_PROPERTIES::OnDeleteAlternate(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnDeleteButtonClick(), DIALOG_LIB_SYMBOL_PROPERTIES::OnDeleteField(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnDeleteField(), DIALOG_SHEET_PROPERTIES::OnDeleteField(), DIALOG_SYMBOL_PROPERTIES::OnDeleteField(), DIALOG_FOOTPRINT_PROPERTIES::OnDeleteField(), DIALOG_LIB_EDIT_PIN_TABLE::OnDeleteRow(), DIALOG_FP_PLUGIN_OPTIONS::onDeleteRow(), DIALOG_CONFIGURE_PATHS::OnDeleteSearchPath(), PANEL_FP_EDITOR_DEFAULTS::OnDeleteTextItem(), onGridColMove(), GRID_TRICKS::onGridLabelLeftClick(), DIALOG_LIB_SYMBOL_PROPERTIES::OnMoveDown(), DIALOG_SHEET_PROPERTIES::OnMoveDown(), DIALOG_SYMBOL_PROPERTIES::OnMoveDown(), DIALOG_LIB_SYMBOL_PROPERTIES::OnMoveUp(), DIALOG_SHEET_PROPERTIES::OnMoveUp(), DIALOG_SYMBOL_PROPERTIES::OnMoveUp(), DIALOG_LIB_EDIT_PIN_TABLE::OnRebuildRows(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnRemove3DModel(), DIALOG_FOOTPRINT_PROPERTIES::OnRemove3DModel(), DIALOG_CONFIGURE_PATHS::OnRemoveEnvVar(), PANEL_SETUP_NETCLASSES::OnRemoveNetclassClick(), PANEL_TEXT_VARIABLES::OnRemoveTextVar(), DIALOG_CONFIGURE_PATHS::OnSearchPathMoveDown(), DIALOG_CONFIGURE_PATHS::OnSearchPathMoveUp(), PANEL_SETUP_NETCLASSES::rebuildNetclassDropdowns(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::TransferDataFromGrid(), PANEL_TEXT_VARIABLES::TransferDataFromWindow(), DIALOG_SWAP_LAYERS::TransferDataFromWindow(), DIALOG_FIELDS_EDITOR_GLOBAL::TransferDataFromWindow(), PANEL_FP_LIB_TABLE::TransferDataFromWindow(), PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataFromWindow(), DIALOG_CONFIGURE_PATHS::TransferDataFromWindow(), DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataFromWindow(), PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), DIALOG_LIB_EDIT_PIN_TABLE::TransferDataFromWindow(), DIALOG_PIN_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), PANEL_SYM_LIB_TABLE::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_FP_PLUGIN_OPTIONS::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::Validate(), DIALOG_LIB_SYMBOL_PROPERTIES::Validate(), PANEL_SETUP_TRACKS_AND_VIAS::Validate(), DIALOG_FOOTPRINT_PROPERTIES::Validate(), DIALOG_SHEET_PROPERTIES::Validate(), DIALOG_SYMBOL_PROPERTIES::Validate(), PANEL_SETUP_NETCLASSES::Validate(), PANEL_FP_EDITOR_DEFAULTS::validateData(), and DIALOG_EDIT_SYMBOLS_LIBID::validateLibIds().

◆ DestroyTable()

void WX_GRID::DestroyTable ( wxGridTableBase *  aTable)

Work-around for a bug in wxGrid which crashes when deleting the table if the cell edit control was not closed.

Definition at line 97 of file wx_grid.cpp.

98 {
99  // wxGrid's destructor will crash trying to look up the cell attr if the edit control
100  // is left open. Normally it's closed in Validate(), but not if the user hit Cancel.
101  CommitPendingChanges( true /* quiet mode */ );
102 
103  Disconnect( wxEVT_GRID_COL_MOVE, wxGridEventHandler( WX_GRID::onGridColMove ), NULL, this );
104 
105  wxGrid::SetTable( nullptr );
106  delete aTable;
107 }
#define NULL
void onGridColMove(wxGridEvent &aEvent)
Definition: wx_grid.cpp:231
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:182

References CommitPendingChanges(), NULL, and onGridColMove().

Referenced by DIALOG_FOOTPRINT_PROPERTIES::~DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::~DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::~DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_LIB_SYMBOL_PROPERTIES::~DIALOG_LIB_SYMBOL_PROPERTIES(), DIALOG_PIN_PROPERTIES::~DIALOG_PIN_PROPERTIES(), DIALOG_SHEET_PROPERTIES::~DIALOG_SHEET_PROPERTIES(), DIALOG_SWAP_LAYERS::~DIALOG_SWAP_LAYERS(), DIALOG_SYMBOL_PROPERTIES::~DIALOG_SYMBOL_PROPERTIES(), and ~WX_GRID().

◆ DrawColLabel()

void WX_GRID::DrawColLabel ( wxDC &  dc,
int  col 
)
overrideprotected

Definition at line 149 of file wx_grid.cpp.

150 {
151  if( GetColWidth( col ) <= 0 || m_colLabelHeight <= 0 )
152  return;
153 
154  int colLeft = GetColLeft( col );
155 
156  wxRect rect( colLeft, 0, GetColWidth( col ), m_colLabelHeight );
157  static wxGridColumnHeaderRendererDefault rend;
158 
159  // It is reported that we need to erase the background to avoid display
160  // artefacts, see #12055.
161  // wxWidgets renamed this variable between 3.1.2 and 3.1.3 ...
162 #if wxCHECK_VERSION( 3, 1, 3 )
163  wxDCBrushChanger setBrush( dc, m_colLabelWin->GetBackgroundColour() );
164 #else
165  wxDCBrushChanger setBrush( dc, m_colWindow->GetBackgroundColour() );
166 #endif
167  dc.DrawRectangle(rect);
168 
169  rend.DrawBorder( *this, dc, rect );
170 
171  int hAlign, vAlign;
172  GetColLabelAlignment( &hAlign, &vAlign );
173  const int orient = GetColLabelTextOrientation();
174 
175  if( col == 0 && GetRowLabelSize() == 0 )
176  hAlign = wxALIGN_LEFT;
177 
178  rend.DrawLabel( *this, dc, GetColLabelValue( col ), rect, hAlign, vAlign, orient );
179 }

◆ EnsureColLabelsVisible()

void WX_GRID::EnsureColLabelsVisible ( )

Ensure the height of the row displaying the column labels is enough, even if labels are multiline texts.

Definition at line 283 of file wx_grid.cpp.

284 {
285  // The 1.1 scale factor is due to the fact row labels use a bold font, bigger than
286  // the normal font
287  // TODO: use a better way to evaluate the text size, for bold font
288  int line_height = int( GetTextExtent( "Mj" ).y * 1.1 ) + 3;
289  int row_height = GetColLabelSize();
290 
291  // Headers can be multiline. Fix the Column Label Height to show the full header
292  // However GetTextExtent does not work on multiline strings,
293  // and do not return the full text height (only the height of one line)
294  for( int col = 0; col < GetNumberCols(); col++ )
295  {
296  int nl_count = GetColLabelValue( col ).Freq( '\n' );
297 
298  if( nl_count )
299  {
300  // Col Label height must be able to show nl_count+1 lines
301  if( row_height < line_height * ( nl_count+1 ) )
302  row_height += line_height * nl_count;
303  }
304  }
305 
306  SetColLabelSize( row_height );
307 }
void SetColLabelSize(int aHeight)
Hide wxGrid's SetColLabelSize() method with one which makes sure the size is tall enough for the syst...
Definition: wx_grid.cpp:49

References SetColLabelSize().

Referenced by GetVisibleWidth(), and PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES().

◆ GetShownColumns()

wxString WX_GRID::GetShownColumns ( )

Get a tokenized string containing the shown column indexes.

Tokens are separated by spaces.

Definition at line 110 of file wx_grid.cpp.

111 {
112  wxString shownColumns;
113 
114  for( int i = 0; i < GetNumberCols(); ++i )
115  {
116  if( IsColShown( i ) )
117  {
118  if( shownColumns.Length() )
119  shownColumns << wxT( " " );
120 
121  shownColumns << i;
122  }
123  }
124 
125  return shownColumns;
126 }

Referenced by DIALOG_LIB_SYMBOL_PROPERTIES::OnUpdateUI(), DIALOG_LIB_EDIT_PIN_TABLE::OnUpdateUI(), DIALOG_SHEET_PROPERTIES::OnUpdateUI(), DIALOG_SYMBOL_PROPERTIES::OnUpdateUI(), DIALOG_FOOTPRINT_PROPERTIES::~DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::~DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::~DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_LIB_SYMBOL_PROPERTIES::~DIALOG_LIB_SYMBOL_PROPERTIES(), DIALOG_SHEET_PROPERTIES::~DIALOG_SHEET_PROPERTIES(), and DIALOG_SYMBOL_PROPERTIES::~DIALOG_SYMBOL_PROPERTIES().

◆ GetVisibleWidth()

int WX_GRID::GetVisibleWidth ( int  aCol,
bool  aHeader = true,
bool  aContents = false,
bool  aKeep = true 
)

Calculates the specified column based on the actual size of the text on screen.

Will return the maximum value of all calculated widths.

Parameters
aCol- Integer value of the column to resize. Specify -1 for the row labels.
aHeader- Include the header in the width calculation
aContents- Include the full contents of the column
aKeep- Use the current size as a minimum value
Returns
The new size of the column

Definition at line 238 of file wx_grid.cpp.

239 {
240  int size = 0;
241 
242  if( aCol < 0 )
243  {
244  if( aKeep )
245  size = GetRowLabelSize();
246 
247  // The 1.1 scale factor is due to the fact row labels use a bold font, bigger than
248  // the normal font.
249  // TODO: use a better way to evaluate the text size, for bold font
250  for( int row = 0; aContents && row < GetNumberRows(); row++ )
251  size = std::max( size, int( GetTextExtent( GetRowLabelValue( row ) + "M" ).x * 1.1 ) );
252  }
253  else
254  {
255  if( aKeep )
256  size = GetColSize( aCol );
257 
258  // 'M' is generally the widest character, so we buffer the column width by default to
259  // ensure we don't write a continuous line of text at the column header
260  if( aHeader )
261  {
263 
264  // The 1.1 scale factor is due to the fact headers use a bold font, bigger than
265  // the normal font.
266  size = std::max( size, int( GetTextExtent( GetColLabelValue( aCol ) + "M" ).x * 1.1 ) );
267  }
268 
269  for( int row = 0; aContents && row < GetNumberRows(); row++ )
270  {
271  // If we have text, get the size. Otherwise, use a placeholder for the checkbox
272  if( GetTable()->CanGetValueAs( row, aCol, wxGRID_VALUE_STRING ) )
273  size = std::max( size, GetTextExtent( GetCellValue( row, aCol ) + "M" ).x );
274  else
275  size = std::max( size, GetTextExtent( "MM" ).x );
276  }
277  }
278 
279  return size;
280 }
void EnsureColLabelsVisible()
Ensure the height of the row displaying the column labels is enough, even if labels are multiline tex...
Definition: wx_grid.cpp:283

References EnsureColLabelsVisible().

Referenced by DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::adjustGridColumns(), DIALOG_FOOTPRINT_PROPERTIES::adjustGridColumns(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS(), PANEL_SETUP_TRACKS_AND_VIAS::PANEL_SETUP_TRACKS_AND_VIAS(), PANEL_PCBNEW_ACTION_PLUGINS::TransferDataToWindow(), PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataToWindow(), PANEL_FP_EDITOR_DEFAULTS::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataToWindow(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow().

◆ onGridColMove()

void WX_GRID::onGridColMove ( wxGridEvent &  aEvent)
protected

Definition at line 231 of file wx_grid.cpp.

232 {
233  // wxWidgets won't move an open editor, so better just to close it
234  CommitPendingChanges( true );
235 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:182

References CommitPendingChanges().

Referenced by DestroyTable(), and SetTable().

◆ SetColLabelSize()

void WX_GRID::SetColLabelSize ( int  aHeight)

Hide wxGrid's SetColLabelSize() method with one which makes sure the size is tall enough for the system GUI font.

Parameters
height

Definition at line 49 of file wx_grid.cpp.

50 {
51  if( aHeight == 0 )
52  {
53  wxGrid::SetColLabelSize( 0 );
54  return;
55  }
56 
57  // correct wxFormBuilder height for large fonts
58  wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
59  int minHeight = guiFont.GetPixelSize().y + 2 * MIN_GRIDCELL_MARGIN;
60 
61  wxGrid::SetColLabelSize( std::max( aHeight, minHeight ) );
62 }
#define MIN_GRIDCELL_MARGIN
Definition: wx_grid.cpp:32

References MIN_GRIDCELL_MARGIN.

Referenced by APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE(), DIALOG_CONFIGURE_PATHS_BASE::DIALOG_CONFIGURE_PATHS_BASE(), DIALOG_EDIT_SYMBOLS_LIBID_BASE::DIALOG_EDIT_SYMBOLS_LIBID_BASE(), DIALOG_FIELDS_EDITOR_GLOBAL_BASE::DIALOG_FIELDS_EDITOR_GLOBAL_BASE(), DIALOG_FOOTPRINT_PROPERTIES_BASE::DIALOG_FOOTPRINT_PROPERTIES_BASE(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR_BASE::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR_BASE(), DIALOG_FP_PLUGIN_OPTIONS_BASE::DIALOG_FP_PLUGIN_OPTIONS_BASE(), DIALOG_LIB_EDIT_PIN_TABLE_BASE::DIALOG_LIB_EDIT_PIN_TABLE_BASE(), DIALOG_LIB_SYMBOL_PROPERTIES_BASE::DIALOG_LIB_SYMBOL_PROPERTIES_BASE(), DIALOG_PAD_PRIMITIVE_POLY_PROPS_BASE::DIALOG_PAD_PRIMITIVE_POLY_PROPS_BASE(), DIALOG_PIN_PROPERTIES_BASE::DIALOG_PIN_PROPERTIES_BASE(), DIALOG_SHEET_PROPERTIES_BASE::DIALOG_SHEET_PROPERTIES_BASE(), DIALOG_SWAP_LAYERS_BASE::DIALOG_SWAP_LAYERS_BASE(), DIALOG_SYMBOL_PROPERTIES_BASE::DIALOG_SYMBOL_PROPERTIES_BASE(), EnsureColLabelsVisible(), FOOTPRINT_WIZARD_FRAME::initParameterGrid(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE(), PANEL_FP_EDITOR_DEFAULTS_BASE::PANEL_FP_EDITOR_DEFAULTS_BASE(), PANEL_FP_LIB_TABLE_BASE::PANEL_FP_LIB_TABLE_BASE(), PANEL_PCBNEW_ACTION_PLUGINS_BASE::PANEL_PCBNEW_ACTION_PLUGINS_BASE(), PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE(), PANEL_SETUP_TEXT_AND_GRAPHICS_BASE::PANEL_SETUP_TEXT_AND_GRAPHICS_BASE(), PANEL_SETUP_TRACKS_AND_VIAS_BASE::PANEL_SETUP_TRACKS_AND_VIAS_BASE(), PANEL_SYM_LIB_TABLE_BASE::PANEL_SYM_LIB_TABLE_BASE(), and PANEL_TEXT_VARIABLES_BASE::PANEL_TEXT_VARIABLES_BASE().

◆ SetTable()

void WX_GRID::SetTable ( wxGridTableBase *  table,
bool  aTakeOwnership = false 
)

Hide wxGrid's SetTable() method with one which doesn't mess up the grid column widths when setting the table.

Definition at line 65 of file wx_grid.cpp.

66 {
67  // wxGrid::SetTable() messes up the column widths from wxFormBuilder so we have to save
68  // and restore them.
69  int numberCols = GetNumberCols();
70  int* formBuilderColWidths = new int[numberCols];
71 
72  for( int i = 0; i < numberCols; ++i )
73  formBuilderColWidths[ i ] = GetColSize( i );
74 
75  wxGrid::SetTable( aTable );
76 
77  // wxGrid::SetTable() may change the number of columns, so prevent out-of-bounds access
78  // to formBuilderColWidths
79  numberCols = std::min( numberCols, GetNumberCols() );
80 
81  for( int i = 0; i < numberCols; ++i )
82  {
83  // correct wxFormBuilder width for large fonts and/or long translations
84  int headingWidth = GetTextExtent( GetColLabelValue( i ) ).x + 2 * MIN_GRIDCELL_MARGIN;
85 
86  SetColSize( i, std::max( formBuilderColWidths[ i ], headingWidth ) );
87  }
88 
89  delete[] formBuilderColWidths;
90 
91  Connect( wxEVT_GRID_COL_MOVE, wxGridEventHandler( WX_GRID::onGridColMove ), NULL, this );
92 
93  m_weOwnTable = aTakeOwnership;
94 }
bool m_weOwnTable
Definition: wx_grid.h:106
#define MIN_GRIDCELL_MARGIN
Definition: wx_grid.cpp:32
#define NULL
void onGridColMove(wxGridEvent &aEvent)
Definition: wx_grid.cpp:231

References m_weOwnTable, MIN_GRIDCELL_MARGIN, NULL, and onGridColMove().

Referenced by APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES(), DIALOG_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES(), DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES(), DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS(), DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES(), PANEL_FP_EDITOR_DEFAULTS::PANEL_FP_EDITOR_DEFAULTS(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), and PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE().

◆ ShowEditorOnMouseUp()

void WX_GRID::ShowEditorOnMouseUp ( )
inline

WxWidgets has a bunch of bugs in its handling of wxGrid mouse events which close cell editors right after opening them.

Helpfully, it already has a bunch of work-arounds in place (such as the SetInSetFocus() hack), including one to make slow clicks work. We re-purpose this hack to work-around the bugs when we want to open an editor.

Definition at line 99 of file wx_grid.h.

99 { m_waitForSlowClick = true; }

Referenced by GRID_TRICKS::showEditor().

◆ ShowHideColumns()

void WX_GRID::ShowHideColumns ( const wxString &  shownColumns)

Show/hide the grid columns based on a tokenized string of shown column indexes.

Definition at line 129 of file wx_grid.cpp.

130 {
131  for( int i = 0; i < GetNumberCols(); ++i )
132  HideCol( i );
133 
134  wxStringTokenizer shownTokens( shownColumns );
135 
136  while( shownTokens.HasMoreTokens() )
137  {
138  long colNumber;
139  shownTokens.GetNextToken().ToLong( &colNumber );
140 
141  if( colNumber >= 0 && colNumber < GetNumberCols() )
142  ShowCol( colNumber );
143  }
144 }

Referenced by DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES(), DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES(), and DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES().

Member Data Documentation

◆ m_weOwnTable

bool WX_GRID::m_weOwnTable
protected

Definition at line 106 of file wx_grid.h.

Referenced by SetTable(), and ~WX_GRID().


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