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

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

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

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(), DIALOG_PIN_PROPERTIES::OnAddAlternate(), 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(), DIALOG_PIN_PROPERTIES::OnDeleteAlternate(), 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(), 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(), PANEL_FP_LIB_TABLE::TransferDataFromWindow(), DIALOG_CONFIGURE_PATHS::TransferDataFromWindow(), DIALOG_SWAP_LAYERS::TransferDataFromWindow(), DIALOG_LIB_EDIT_PIN_TABLE::TransferDataFromWindow(), PANEL_SYM_LIB_TABLE::TransferDataFromWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow(), DIALOG_PIN_PROPERTIES::TransferDataFromWindow(), DIALOG_FP_PLUGIN_OPTIONS::TransferDataFromWindow(), DIALOG_SCH_SHEET_PROPS::Validate(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate(), DIALOG_FOOTPRINT_FP_EDITOR::Validate(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::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 96 of file wx_grid.cpp.

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

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_PIN_PROPERTIES::~DIALOG_PIN_PROPERTIES(), 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 147 of file wx_grid.cpp.

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

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

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

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

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

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

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

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

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_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_PIN_PROPERTIES_BASE::DIALOG_PIN_PROPERTIES_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 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  // wxGrid::SetTable() may change the number of columns, so prevent out-of-bounds access
77  // to formBuilderColWidths
78  numberCols = std::min( numberCols, GetNumberCols() );
79 
80  for( int i = 0; i < numberCols; ++i )
81  {
82  // correct wxFormBuilder width for large fonts and/or long translations
83  int headingWidth = GetTextExtent( GetColLabelValue( i ) ).x + 2 * MIN_GRIDCELL_MARGIN;
84 
85  SetColSize( i, std::max( formBuilderColWidths[ i ], headingWidth ) );
86  }
87 
88  delete[] formBuilderColWidths;
89 
90  Connect( wxEVT_GRID_COL_MOVE, wxGridEventHandler( WX_GRID::onGridColMove ), NULL, this );
91 
92  m_weOwnTable = aTakeOwnership;
93 }
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:229

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

Referenced by APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), 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_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES(), 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 127 of file wx_grid.cpp.

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

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: