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:60

◆ ~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:90

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 174 of file wx_grid.cpp.

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

Referenced by PANEL_SYM_LIB_TABLE::appendRowHandler(), PANEL_FP_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_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DRow(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DRow(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnAddButtonClick(), DIALOG_CONFIGURE_PATHS::OnAddEnvVar(), DIALOG_SCH_SHEET_PROPS::OnAddField(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnAddField(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAddField(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAddField(), PANEL_SETUP_NETCLASSES::OnAddNetclassClick(), DIALOG_LIB_EDIT_PIN_TABLE::OnAddRow(), DIALOG_CONFIGURE_PATHS::OnAddSearchPath(), PANEL_MODEDIT_DEFAULTS::OnAddTextItem(), PANEL_TEXT_VARIABLES::OnAddTextVar(), DIALOG_FP_PLUGIN_OPTIONS::onAppendOption(), DIALOG_FP_PLUGIN_OPTIONS::onAppendRow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::OnButtonAdd(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::OnButtonDelete(), DIALOG_LIB_EDIT_PIN_TABLE::OnClose(), DIALOG_FIELDS_EDITOR_GLOBAL::OnClose(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::OnDeleteButtonClick(), DIALOG_SCH_SHEET_PROPS::OnDeleteField(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnDeleteField(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnDeleteField(), DIALOG_FOOTPRINT_FP_EDITOR::OnDeleteField(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnDeleteField(), DIALOG_LIB_EDIT_PIN_TABLE::OnDeleteRow(), DIALOG_FP_PLUGIN_OPTIONS::onDeleteRow(), DIALOG_CONFIGURE_PATHS::OnDeleteSearchPath(), PANEL_MODEDIT_DEFAULTS::OnDeleteTextItem(), onGridColMove(), GRID_TRICKS::onGridLabelLeftClick(), PANEL_SETUP_NETCLASSES::OnMembershipKillFocus(), DIALOG_SCH_SHEET_PROPS::OnMoveDown(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnMoveDown(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnMoveDown(), DIALOG_SCH_SHEET_PROPS::OnMoveUp(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnMoveUp(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnMoveUp(), DIALOG_LIB_EDIT_PIN_TABLE::OnRebuildRows(), DIALOG_FOOTPRINT_FP_EDITOR::OnRemove3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::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_FIELDS_EDITOR_GLOBAL::TransferDataFromWindow(), DIALOG_CONFIGURE_PATHS::TransferDataFromWindow(), PANEL_FP_LIB_TABLE::TransferDataFromWindow(), DIALOG_SWAP_LAYERS::TransferDataFromWindow(), DIALOG_LIB_EDIT_PIN_TABLE::TransferDataFromWindow(), PANEL_SYM_LIB_TABLE::TransferDataFromWindow(), PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow(), DIALOG_FP_PLUGIN_OPTIONS::TransferDataFromWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::UpdateFieldsFromLibrary(), DIALOG_SCH_SHEET_PROPS::Validate(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::Validate(), DIALOG_FOOTPRINT_FP_EDITOR::Validate(), DIALOG_FOOTPRINT_BOARD_EDITOR::Validate(), PANEL_SETUP_TEXT_AND_GRAPHICS::validateData(), PANEL_MODEDIT_DEFAULTS::validateData(), PANEL_SETUP_TRACKS_AND_VIAS::validateData(), PANEL_SETUP_NETCLASSES::validateData(), and DIALOG_EDIT_COMPONENTS_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 90 of file wx_grid.cpp.

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

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

Referenced by DIALOG_EDIT_COMPONENT_IN_LIBRARY::~DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_FOOTPRINT_BOARD_EDITOR::~DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::~DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_SCH_SHEET_PROPS::~DIALOG_SCH_SHEET_PROPS(), DIALOG_SWAP_LAYERS::~DIALOG_SWAP_LAYERS(), and ~WX_GRID().

◆ DrawColLabel()

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

Definition at line 141 of file wx_grid.cpp.

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

◆ 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 272 of file wx_grid.cpp.

273 {
274  // The 1.1 scale factor is due to the fact row labels use a bold font, bigger than
275  // the normal font
276  // TODO: use a better way to evaluate the text size, for bold font
277  int line_height = int( GetTextExtent( "Mj" ).y * 1.1 ) + 3;
278  int row_height = GetColLabelSize();
279 
280  // Headers can be multiline. Fix the Column Label Height to show the full header
281  // However GetTextExtent does not work on multiline strings,
282  // and do not return the full text height (only the height of one line)
283  for( int col = 0; col < GetNumberCols(); col++ )
284  {
285  int nl_count = GetColLabelValue( col ).Freq( '\n' );
286 
287  if( nl_count )
288  {
289  // Col Label height must be able to show nl_count+1 lines
290  if( row_height < line_height * ( nl_count+1 ) )
291  row_height += line_height * nl_count;
292  }
293  }
294 
295  SetColLabelSize( row_height );
296 }
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 103 of file wx_grid.cpp.

104 {
105  wxString shownColumns;
106 
107  for( int i = 0; i < GetNumberCols(); ++i )
108  {
109  if( IsColShown( i ) )
110  {
111  if( shownColumns.Length() )
112  shownColumns << wxT( " " );
113  shownColumns << i;
114  }
115  }
116 
117  return shownColumns;
118 }

Referenced by DIALOG_LIB_EDIT_PIN_TABLE::OnUpdateUI(), DIALOG_SCH_SHEET_PROPS::OnUpdateUI(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnUpdateUI(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnUpdateUI(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::~DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_FOOTPRINT_BOARD_EDITOR::~DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::~DIALOG_LIB_EDIT_PIN_TABLE(), and DIALOG_SCH_SHEET_PROPS::~DIALOG_SCH_SHEET_PROPS().

◆ 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 230 of file wx_grid.cpp.

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

References EnsureColLabelsVisible().

Referenced by DIALOG_FOOTPRINT_FP_EDITOR::adjustGridColumns(), DIALOG_FOOTPRINT_BOARD_EDITOR::adjustGridColumns(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PANEL_PCBNEW_ACTION_PLUGINS::TransferDataToWindow(), PANEL_MODEDIT_DEFAULTS::TransferDataToWindow(), PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataToWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), and DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow().

◆ onGridColMove()

void WX_GRID::onGridColMove ( wxGridEvent &  aEvent)
protected

Definition at line 223 of file wx_grid.cpp.

224 {
225  // wxWidgets won't move an open editor, so better just to close it
226  CommitPendingChanges( true );
227 }
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:174

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  // correct wxFormBuilder height for large fonts
52  wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
53  int minHeight = guiFont.GetPixelSize().y + 2 * MIN_GRIDCELL_MARGIN;
54 
55  wxGrid::SetColLabelSize( std::max( aHeight, minHeight ) );
56 }
#define MIN_GRIDCELL_MARGIN
Definition: wx_grid.cpp:32

References MIN_GRIDCELL_MARGIN.

Referenced by DIALOG_CONFIGURE_PATHS_BASE::DIALOG_CONFIGURE_PATHS_BASE(), DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_BASE(), DIALOG_EDIT_COMPONENTS_LIBID_BASE::DIALOG_EDIT_COMPONENTS_LIBID_BASE(), DIALOG_FIELDS_EDITOR_GLOBAL_BASE::DIALOG_FIELDS_EDITOR_GLOBAL_BASE(), DIALOG_FOOTPRINT_BOARD_EDITOR_BASE::DIALOG_FOOTPRINT_BOARD_EDITOR_BASE(), DIALOG_FOOTPRINT_FP_EDITOR_BASE::DIALOG_FOOTPRINT_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_PAD_PRIMITIVE_POLY_PROPS_BASE::DIALOG_PAD_PRIMITIVE_POLY_PROPS_BASE(), DIALOG_SCH_SHEET_PROPS_BASE::DIALOG_SCH_SHEET_PROPS_BASE(), DIALOG_SWAP_LAYERS_BASE::DIALOG_SWAP_LAYERS_BASE(), EnsureColLabelsVisible(), FOOTPRINT_WIZARD_FRAME::initParameterGrid(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE::PANEL_EESCHEMA_TEMPLATE_FIELDNAMES_BASE(), PANEL_FP_LIB_TABLE_BASE::PANEL_FP_LIB_TABLE_BASE(), PANEL_MODEDIT_DEFAULTS_BASE::PANEL_MODEDIT_DEFAULTS_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 59 of file wx_grid.cpp.

60 {
61  // wxGrid::SetTable() messes up the column widths from wxFormBuilder so we have to save
62  // and restore them.
63  int numberCols = GetNumberCols();
64  int* formBuilderColWidths = new int[numberCols];
65 
66  for( int i = 0; i < numberCols; ++i )
67  formBuilderColWidths[ i ] = GetColSize( i );
68 
69  wxGrid::SetTable( aTable );
70  // wxGrid::SetTable() may change the number of columns, so prevent out-of-bounds access
71  // to formBuilderColWidths
72  numberCols = std::min( numberCols, GetNumberCols() );
73 
74  for( int i = 0; i < numberCols; ++i )
75  {
76  // correct wxFormBuilder width for large fonts and/or long translations
77  int headingWidth = GetTextExtent( GetColLabelValue( i ) ).x + 2 * MIN_GRIDCELL_MARGIN;
78 
79  SetColSize( i, std::max( formBuilderColWidths[ i ], headingWidth ) );
80  }
81 
82  delete[] formBuilderColWidths;
83 
84  Connect( wxEVT_GRID_COL_MOVE, wxGridEventHandler( WX_GRID::onGridColMove ), NULL, this );
85 
86  m_weOwnTable = aTakeOwnership;
87 }
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:223

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

Referenced by DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_MODEDIT_DEFAULTS::PANEL_MODEDIT_DEFAULTS(), 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 121 of file wx_grid.cpp.

122 {
123  for( int i = 0; i < GetNumberCols(); ++i )
124  HideCol( i );
125 
126  wxStringTokenizer shownTokens( shownColumns );
127 
128  while( shownTokens.HasMoreTokens() )
129  {
130  long colNumber;
131  shownTokens.GetNextToken().ToLong( &colNumber );
132 
133  if( colNumber >= 0 && colNumber < GetNumberCols() )
134  ShowCol( colNumber );
135  }
136 }

Referenced by DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), and DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS().

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: