KiCad PCB EDA Suite
LIB_TREE Class Reference

Widget displaying a tree of components with optional search text control and description panel. More...

#include <lib_tree.h>

Inheritance diagram for LIB_TREE:

Classes

struct  STATE
 Structure storing state of the component tree widget. More...
 

Public Types

enum  WIDGETS { NONE = 0x00, SEARCH = 0x01, DETAILS = 0x02, ALL = 0xFF }
 

Flags to select extra widgets

More...
 

Public Member Functions

 LIB_TREE (wxWindow *aParent, LIB_TABLE *aLibTable, LIB_TREE_MODEL_ADAPTER::PTR &aAdapter, WIDGETS aWidgets=ALL, wxHtmlWindow *aDetails=nullptr)
 Construct a component tree. More...
 
 ~LIB_TREE () override
 
LIB_ID GetSelectedLibId (int *aUnit=nullptr) const
 For multi-unit components, if the user selects the component itself rather than picking an individual unit, 0 will be returned in aUnit. More...
 
void SelectLibId (const LIB_ID &aLibId)
 Select an item in the tree widget. More...
 
void CenterLibId (const LIB_ID &aLibId)
 Ensure that an item is visible (preferrably centered). More...
 
void Unselect ()
 Unselect currently selected item in wxDataViewCtrl. More...
 
void ExpandLibId (const LIB_ID &aLibId)
 Expand and item i the tree widget. More...
 
void Regenerate (bool aKeepState)
 Regenerates the tree. More...
 
void RefreshLibTree ()
 Refreshes the tree (mainly to update highlighting and asterisking) More...
 
void SetFocus () override
 

Protected Member Functions

void toggleExpand (const wxDataViewItem &aTreeId)
 Expands or collapses a node, switching it to the opposite state. More...
 
void selectIfValid (const wxDataViewItem &aTreeId)
 If a wxDataViewitem is valid, select it and post a selection event. More...
 
void centerIfValid (const wxDataViewItem &aTreeId)
 
void expandIfValid (const wxDataViewItem &aTreeId)
 
void postPreselectEvent ()
 Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been preselected. More...
 
void postSelectEvent ()
 Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected. More...
 
STATE getState () const
 Returns the component tree widget state. More...
 
void setState (const STATE &aState)
 Restores the component tree widget state from an object. More...
 
void onQueryText (wxCommandEvent &aEvent)
 
void onQueryEnter (wxCommandEvent &aEvent)
 
void onQueryCharHook (wxKeyEvent &aEvent)
 
void onTreeSelect (wxDataViewEvent &aEvent)
 
void onTreeActivate (wxDataViewEvent &aEvent)
 
void onDetailsLink (wxHtmlLinkEvent &aEvent)
 
void onPreselect (wxCommandEvent &aEvent)
 
void onContextMenu (wxDataViewEvent &aEvent)
 

Protected Attributes

LIB_TABLEm_lib_table
 
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
 
wxTextCtrl * m_query_ctrl
 
wxDataViewCtrl * m_tree_ctrl
 
wxHtmlWindow * m_details_ctrl
 

Detailed Description

Widget displaying a tree of components with optional search text control and description panel.

Definition at line 42 of file lib_tree.h.

Member Enumeration Documentation

◆ WIDGETS

Flags to select extra widgets

Enumerator
NONE 
SEARCH 
DETAILS 
ALL 

Definition at line 46 of file lib_tree.h.

46 { NONE = 0x00, SEARCH = 0x01, DETAILS = 0x02, ALL = 0xFF };

Constructor & Destructor Documentation

◆ LIB_TREE()

LIB_TREE::LIB_TREE ( wxWindow *  aParent,
LIB_TABLE aLibTable,
LIB_TREE_MODEL_ADAPTER::PTR aAdapter,
WIDGETS  aWidgets = ALL,
wxHtmlWindow *  aDetails = nullptr 
)

Construct a component tree.

Parameters
aParentparent window containing this tree widget
aLibTabletable containing libraries and items to display
aAdaptera LIB_TREE_MODEL_ADAPTER instance to use
aWidgetsselection of sub-widgets to include
aDetailsif not null, a custom wxHtmlWindow to hold symbol details. If null this will be created inside the LIB_TREE.

Definition at line 34 of file lib_tree.cpp.

36  : wxPanel( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
37  wxWANTS_CHARS | wxTAB_TRAVERSAL | wxNO_BORDER ),
38  m_lib_table( aLibTable ),
39  m_adapter( aAdapter ),
40  m_query_ctrl( nullptr ),
41  m_details_ctrl( nullptr )
42 {
43  auto sizer = new wxBoxSizer( wxVERTICAL );
44 
45  // Search text control
46  if( aWidgets & SEARCH )
47  {
48  auto search_sizer = new wxBoxSizer( wxHORIZONTAL );
49 
50  m_query_ctrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition,
51  wxDefaultSize, wxTE_PROCESS_ENTER );
52 
53 // Additional visual cue for GTK, which hides the placeholder text on focus
54 #ifdef __WXGTK__
55  auto bitmap = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxART_FIND, wxART_FRAME_ICON ) );
56 
57  if( aWidgets & DETAILS )
58  search_sizer->Add( bitmap, 0, wxALIGN_CENTER | wxALL, 5 );
59  else
60  search_sizer->Add( bitmap, 0, wxALIGN_CENTER | wxRIGHT, 5 );
61 #endif
62 
63  if( aWidgets & DETAILS )
64  search_sizer->Add( m_query_ctrl, 1, wxLEFT | wxTOP | wxRIGHT | wxEXPAND, 5 );
65  else
66  search_sizer->Add( m_query_ctrl, 1, wxEXPAND, 5 );
67  sizer->Add( search_sizer, 0, wxEXPAND, 5 );
68 
69  m_query_ctrl->Bind( wxEVT_TEXT, &LIB_TREE::onQueryText, this );
70  m_query_ctrl->Bind( wxEVT_TEXT_ENTER, &LIB_TREE::onQueryEnter, this );
71  m_query_ctrl->Bind( wxEVT_CHAR_HOOK, &LIB_TREE::onQueryCharHook, this );
72  }
73 
74  // Tree control
75  m_tree_ctrl = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
76  wxDV_SINGLE );
77  m_adapter->AttachTo( m_tree_ctrl );
78 
79  if( aWidgets & DETAILS )
80  sizer->Add( m_tree_ctrl, 5, wxLEFT | wxTOP | wxRIGHT | wxEXPAND, 5 );
81  else
82  sizer->Add( m_tree_ctrl, 5, wxRIGHT | wxBOTTOM | wxEXPAND, 1 );
83 
84  // Description panel
85  if( aWidgets & DETAILS )
86  {
87  if( !aDetails )
88  {
89  auto html_sz = ConvertDialogToPixels( wxPoint( 80, 80 ) );
90 
91  m_details_ctrl = new wxHtmlWindow(
92  this, wxID_ANY, wxDefaultPosition, wxSize( html_sz.x, html_sz.y ),
93  wxHW_SCROLLBAR_AUTO );
94 
95  sizer->Add( m_details_ctrl, 2, wxALL | wxEXPAND, 5 );
96  }
97  else
98  {
99  m_details_ctrl = aDetails;
100  }
101 
102  m_details_ctrl->Bind( wxEVT_HTML_LINK_CLICKED, &LIB_TREE::onDetailsLink, this );
103  }
104 
105  SetSizer( sizer );
106 
107  m_tree_ctrl->Bind( wxEVT_DATAVIEW_ITEM_ACTIVATED, &LIB_TREE::onTreeActivate, this );
108  m_tree_ctrl->Bind( wxEVT_DATAVIEW_SELECTION_CHANGED, &LIB_TREE::onTreeSelect, this );
109  m_tree_ctrl->Bind( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, &LIB_TREE::onContextMenu, this );
110 
111  Bind( COMPONENT_PRESELECTED, &LIB_TREE::onPreselect, this );
112 
113  // If wxTextCtrl::SetHint() is called before binding wxEVT_TEXT, the event
114  // handler will intermittently fire.
115  if( m_query_ctrl )
116  {
117  m_query_ctrl->SetHint( _( "Filter" ) );
118  m_query_ctrl->SetFocus();
119  m_query_ctrl->SetValue( wxEmptyString ); // SetValue() is required here to kick off
120  // initial sorting and pre-selection.
121  }
122 
123  // There may be a part preselected in the model. Make sure it is displayed.
125 
126  Layout();
127  sizer->Fit( this );
128 
129 #ifdef __WXGTK__
130  // Scrollbars must be always enabled to prevent an infinite event loop
131  // more details: http://trac.wxwidgets.org/ticket/18141
132  if( m_details_ctrl )
133  m_details_ctrl->ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
134 #endif /* __WXGTK__ */
135 }
void onQueryEnter(wxCommandEvent &aEvent)
Definition: lib_tree.cpp:321
wxHtmlWindow * m_details_ctrl
Definition: lib_tree.h:171
BITMAP_DEF GetBitmap(GRAPHIC_PINSHAPE aShape)
Definition: pin_shape.cpp:68
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
void onPreselect(wxCommandEvent &aEvent)
Definition: lib_tree.cpp:397
LIB_TABLE * m_lib_table
Definition: lib_tree.h:166
void onQueryCharHook(wxKeyEvent &aEvent)
Definition: lib_tree.cpp:328
void onTreeActivate(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:376
void onQueryText(wxCommandEvent &aEvent)
Definition: lib_tree.cpp:311
void onTreeSelect(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:370
void onDetailsLink(wxHtmlLinkEvent &aEvent)
Definition: lib_tree.cpp:390
#define _(s)
Definition: 3d_actions.cpp:31
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:263
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:169
void onContextMenu(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:414

References _, DETAILS, GetBitmap(), m_adapter, m_details_ctrl, m_query_ctrl, m_tree_ctrl, onContextMenu(), onDetailsLink(), onPreselect(), onQueryCharHook(), onQueryEnter(), onQueryText(), onTreeActivate(), onTreeSelect(), postPreselectEvent(), and SEARCH.

◆ ~LIB_TREE()

LIB_TREE::~LIB_TREE ( )
override

Definition at line 138 of file lib_tree.cpp.

139 {
140  // Save the column widths to the config file
141  m_adapter->SaveColWidths();
142 }
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References m_adapter.

Member Function Documentation

◆ centerIfValid()

void LIB_TREE::centerIfValid ( const wxDataViewItem &  aTreeId)
protected

Definition at line 249 of file lib_tree.cpp.

250 {
251  if( aTreeId.IsOk() )
252  m_tree_ctrl->EnsureVisible( aTreeId );
253 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170

References m_tree_ctrl.

Referenced by CenterLibId().

◆ CenterLibId()

void LIB_TREE::CenterLibId ( const LIB_ID aLibId)

Ensure that an item is visible (preferrably centered).

Definition at line 169 of file lib_tree.cpp.

170 {
171  centerIfValid( m_adapter->FindItem( aLibId ) );
172 }
void centerIfValid(const wxDataViewItem &aTreeId)
Definition: lib_tree.cpp:249
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References centerIfValid(), and m_adapter.

Referenced by LIB_EDIT_FRAME::KiwayMailIn(), LIB_EDIT_FRAME::SyncLibraries(), and FOOTPRINT_EDIT_FRAME::SyncLibraryTree().

◆ expandIfValid()

void LIB_TREE::expandIfValid ( const wxDataViewItem &  aTreeId)
protected

Definition at line 256 of file lib_tree.cpp.

257 {
258  if( aTreeId.IsOk() && !m_tree_ctrl->IsExpanded( aTreeId ) )
259  m_tree_ctrl->Expand( aTreeId );
260 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170

References m_tree_ctrl.

Referenced by ExpandLibId().

◆ ExpandLibId()

void LIB_TREE::ExpandLibId ( const LIB_ID aLibId)

Expand and item i the tree widget.

Definition at line 180 of file lib_tree.cpp.

181 {
182  expandIfValid( m_adapter->FindItem( aLibId ) );
183 }
void expandIfValid(const wxDataViewItem &aTreeId)
Definition: lib_tree.cpp:256
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References expandIfValid(), and m_adapter.

Referenced by LIB_EDIT_FRAME::KiwayMailIn().

◆ GetSelectedLibId()

LIB_ID LIB_TREE::GetSelectedLibId ( int *  aUnit = nullptr) const

For multi-unit components, if the user selects the component itself rather than picking an individual unit, 0 will be returned in aUnit.

Beware that this is an invalid unit number - this should be replaced with whatever default is desired (usually 1).

Parameters
aUnitif not NULL, the selected unit is filled in here.
Returns
the library id of the symbol that has been selected.

Definition at line 145 of file lib_tree.cpp.

146 {
147  auto sel = m_tree_ctrl->GetSelection();
148 
149  if( !sel )
150  {
151  LIB_ID emptyId;
152 
153  return emptyId;
154  }
155 
156  if( aUnit )
157  *aUnit = m_adapter->GetUnitFor( sel );
158 
159  return m_adapter->GetAliasFor( sel );
160 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References m_adapter, and m_tree_ctrl.

Referenced by LIB_EDIT_FRAME::CopyPartToClipboard(), LIB_EDIT_FRAME::DuplicatePart(), DIALOG_CHOOSE_FOOTPRINT::GetSelectedLibId(), DIALOG_CHOOSE_COMPONENT::GetSelectedLibId(), getState(), FOOTPRINT_EDIT_FRAME::GetTreeFPID(), LIB_EDIT_FRAME::GetTreeLIBID(), DIALOG_CHOOSE_FOOTPRINT::OnComponentPreselected(), DIALOG_CHOOSE_COMPONENT::OnComponentPreselected(), DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected(), DIALOG_CHOOSE_COMPONENT::OnComponentSelected(), onPreselect(), onQueryEnter(), onTreeActivate(), LIB_EDIT_FRAME::SyncLibraries(), and FOOTPRINT_EDIT_FRAME::SyncLibraryTree().

◆ getState()

LIB_TREE::STATE LIB_TREE::getState ( ) const
protected

Returns the component tree widget state.

Definition at line 277 of file lib_tree.cpp.

278 {
279  STATE state;
280  wxDataViewItemArray items;
281  m_adapter->GetChildren( wxDataViewItem( nullptr ), items );
282 
283  for( const auto& item : items )
284  {
285  if( m_tree_ctrl->IsExpanded( item ) )
286  state.expanded.push_back( item );
287  }
288 
289  state.selection = GetSelectedLibId();
290 
291  return state;
292 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit components, if the user selects the component itself rather than picking an individual...
Definition: lib_tree.cpp:145
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References LIB_TREE::STATE::expanded, GetSelectedLibId(), m_adapter, m_tree_ctrl, and LIB_TREE::STATE::selection.

Referenced by Regenerate().

◆ onContextMenu()

void LIB_TREE::onContextMenu ( wxDataViewEvent &  aEvent)
protected

Definition at line 414 of file lib_tree.cpp.

415 {
416  TOOL_INTERACTIVE* tool = m_adapter->GetContextMenuTool();
417 
418  if( tool )
419  {
420  tool->Activate();
422  tool->GetToolMenu().ShowContextMenu();
423 
425  tool->GetManager()->DispatchContextMenu( evt );
426  }
427 }
void DispatchContextMenu(const TOOL_EVENT &aEvent)
Function DispatchContextMenu() Handles context menu related events.
TOOL_MENU & GetToolMenu()
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:143
TOOL_EVENT.
Definition: tool_event.h:171
void VetoContextMenuMouseWarp()
Disables mouse warping after the current context menu is closed.
Definition: tool_manager.h:384
void Activate()
Function Activate() Runs the tool.
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:59

References TOOL_INTERACTIVE::Activate(), BUT_RIGHT, TOOL_MANAGER::DispatchContextMenu(), TOOL_BASE::GetManager(), TOOL_INTERACTIVE::GetToolMenu(), m_adapter, TOOL_MENU::ShowContextMenu(), TA_MOUSE_CLICK, TC_MOUSE, and TOOL_MANAGER::VetoContextMenuMouseWarp().

Referenced by LIB_TREE().

◆ onDetailsLink()

void LIB_TREE::onDetailsLink ( wxHtmlLinkEvent &  aEvent)
protected

Definition at line 390 of file lib_tree.cpp.

391 {
392  const wxHtmlLinkInfo& info = aEvent.GetLinkInfo();
393  ::wxLaunchDefaultBrowser( info.GetHref() );
394 }

Referenced by LIB_TREE().

◆ onPreselect()

void LIB_TREE::onPreselect ( wxCommandEvent &  aEvent)
protected

Definition at line 397 of file lib_tree.cpp.

398 {
399  if( m_details_ctrl )
400  {
401  int unit = 0;
402  LIB_ID id = GetSelectedLibId( &unit );
403 
404  if( id.IsValid() )
405  m_details_ctrl->SetPage( m_adapter->GenerateInfo( id, unit ) );
406  else
407  m_details_ctrl->SetPage( wxEmptyString );
408  }
409 
410  aEvent.Skip();
411 }
wxHtmlWindow * m_details_ctrl
Definition: lib_tree.h:171
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit components, if the user selects the component itself rather than picking an individual...
Definition: lib_tree.cpp:145
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References GetSelectedLibId(), m_adapter, and m_details_ctrl.

Referenced by LIB_TREE().

◆ onQueryCharHook()

void LIB_TREE::onQueryCharHook ( wxKeyEvent &  aEvent)
protected

Definition at line 328 of file lib_tree.cpp.

329 {
330  auto const sel = m_tree_ctrl->GetSelection();
331  auto type = sel.IsOk() ? m_adapter->GetTypeFor( sel ) : LIB_TREE_NODE::INVALID;
332 
333  switch( aKeyStroke.GetKeyCode() )
334  {
335  case WXK_UP:
337  break;
338 
339  case WXK_DOWN:
341  break;
342 
343  case WXK_ADD:
344  if( type == LIB_TREE_NODE::LIB )
345  m_tree_ctrl->Expand( sel );
346 
347  break;
348 
349  case WXK_SUBTRACT:
350  if( type == LIB_TREE_NODE::LIB )
351  m_tree_ctrl->Collapse( sel );
352 
353  break;
354 
355  case WXK_RETURN:
356  if( type == LIB_TREE_NODE::LIB )
357  {
358  toggleExpand( sel );
359  break;
360  }
361  // Intentionally fall through, so the selected component will be treated as the selected one
362 
363  default:
364  aKeyStroke.Skip(); // Any other key: pass on to search box directly.
365  break;
366  }
367 }
void selectIfValid(const wxDataViewItem &aTreeId)
If a wxDataViewitem is valid, select it and post a selection event.
Definition: lib_tree.cpp:238
void toggleExpand(const wxDataViewItem &aTreeId)
Expands or collapses a node, switching it to the opposite state.
Definition: lib_tree.cpp:226
wxDataViewItem GetPrevItem(wxDataViewCtrl const &aView, wxDataViewItem const &aItem)
Get the previous item in list order.
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
wxDataViewItem GetNextItem(wxDataViewCtrl const &aView, wxDataViewItem const &aItem)
Get the next item in list order.
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References GetNextItem(), GetPrevItem(), LIB_TREE_NODE::INVALID, LIB_TREE_NODE::LIB, m_adapter, m_tree_ctrl, selectIfValid(), and toggleExpand().

Referenced by LIB_TREE().

◆ onQueryEnter()

void LIB_TREE::onQueryEnter ( wxCommandEvent &  aEvent)
protected

Definition at line 321 of file lib_tree.cpp.

322 {
323  if( GetSelectedLibId().IsValid() )
324  postSelectEvent();
325 }
void postSelectEvent()
Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected.
Definition: lib_tree.cpp:270
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit components, if the user selects the component itself rather than picking an individual...
Definition: lib_tree.cpp:145

References GetSelectedLibId(), and postSelectEvent().

Referenced by LIB_TREE().

◆ onQueryText()

void LIB_TREE::onQueryText ( wxCommandEvent &  aEvent)
protected

Definition at line 311 of file lib_tree.cpp.

312 {
313  Regenerate( false );
314 
315  // Required to avoid interaction with SetHint()
316  // See documentation for wxTextEntry::SetHint
317  aEvent.Skip();
318 }
void Regenerate(bool aKeepState)
Regenerates the tree.
Definition: lib_tree.cpp:186

References Regenerate().

Referenced by LIB_TREE().

◆ onTreeActivate()

void LIB_TREE::onTreeActivate ( wxDataViewEvent &  aEvent)
protected

Definition at line 376 of file lib_tree.cpp.

377 {
378  if( !GetSelectedLibId().IsValid() )
379  {
380  // Expand library/part units subtree
381  toggleExpand( m_tree_ctrl->GetSelection() );
382  }
383  else
384  {
385  postSelectEvent();
386  }
387 }
void toggleExpand(const wxDataViewItem &aTreeId)
Expands or collapses a node, switching it to the opposite state.
Definition: lib_tree.cpp:226
void postSelectEvent()
Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected.
Definition: lib_tree.cpp:270
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit components, if the user selects the component itself rather than picking an individual...
Definition: lib_tree.cpp:145

References GetSelectedLibId(), m_tree_ctrl, postSelectEvent(), and toggleExpand().

Referenced by LIB_TREE().

◆ onTreeSelect()

void LIB_TREE::onTreeSelect ( wxDataViewEvent &  aEvent)
protected

Definition at line 370 of file lib_tree.cpp.

371 {
373 }
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:263

References postPreselectEvent().

Referenced by LIB_TREE().

◆ postPreselectEvent()

void LIB_TREE::postPreselectEvent ( )
protected

Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been preselected.

Definition at line 263 of file lib_tree.cpp.

264 {
265  wxCommandEvent event( COMPONENT_PRESELECTED );
266  wxPostEvent( this, event );
267 }

Referenced by LIB_TREE(), onTreeSelect(), Regenerate(), and selectIfValid().

◆ postSelectEvent()

void LIB_TREE::postSelectEvent ( )
protected

Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected.

Definition at line 270 of file lib_tree.cpp.

271 {
272  wxCommandEvent event( COMPONENT_SELECTED );
273  wxPostEvent( this, event );
274 }

Referenced by onQueryEnter(), and onTreeActivate().

◆ RefreshLibTree()

void LIB_TREE::RefreshLibTree ( )

Refreshes the tree (mainly to update highlighting and asterisking)

Definition at line 204 of file lib_tree.cpp.

205 {
206 #ifdef __WXOSX__
207  // Yes, this is an enormous hack. It should be replaced if anyone can figure out a better
208  // way to get the OSX version to re-fetch the text and attributes from the dataModel for
209  // each visible item.
210  int width = m_tree_ctrl->GetColumn( 0 )->GetWidth();
211  m_tree_ctrl->GetColumn( 0 )->SetWidth( width + 1 );
212  m_tree_ctrl->GetColumn( 0 )->SetWidth( width );
213 #endif
214 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170

References m_tree_ctrl.

Referenced by LIB_EDIT_FRAME::DeletePartFromLibrary(), SYMBOL_TREE_PANE::onComponentSelected(), FOOTPRINT_EDIT_FRAME::OnModify(), LIB_EDIT_FRAME::OnModify(), LIB_EDIT_FRAME::Save(), LIB_EDIT_FRAME::SaveAll(), and LIB_EDIT_FRAME::SaveAs().

◆ Regenerate()

void LIB_TREE::Regenerate ( bool  aKeepState)

Regenerates the tree.

Definition at line 186 of file lib_tree.cpp.

187 {
188  STATE current;
189 
190  // Store the state
191  if( aKeepState )
192  current = getState();
193 
194  wxString filter = m_query_ctrl->GetValue();
195  m_adapter->UpdateSearchString( filter );
197 
198  // Restore the state
199  if( aKeepState )
200  setState( current );
201 }
STATE getState() const
Returns the component tree widget state.
Definition: lib_tree.cpp:277
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:263
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167
void setState(const STATE &aState)
Restores the component tree widget state from an object.
Definition: lib_tree.cpp:295
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:169

References getState(), m_adapter, m_query_ctrl, postPreselectEvent(), and setState().

Referenced by onQueryText(), FOOTPRINT_TREE_PANE::Regenerate(), and SYMBOL_TREE_PANE::Regenerate().

◆ selectIfValid()

void LIB_TREE::selectIfValid ( const wxDataViewItem &  aTreeId)
protected

If a wxDataViewitem is valid, select it and post a selection event.

Definition at line 238 of file lib_tree.cpp.

239 {
240  if( aTreeId.IsOk() )
241  {
242  m_tree_ctrl->EnsureVisible( aTreeId );
243  m_tree_ctrl->Select( aTreeId );
245  }
246 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:263

References m_tree_ctrl, and postPreselectEvent().

Referenced by onQueryCharHook(), and SelectLibId().

◆ SelectLibId()

void LIB_TREE::SelectLibId ( const LIB_ID aLibId)

Select an item in the tree widget.

Definition at line 163 of file lib_tree.cpp.

164 {
165  selectIfValid( m_adapter->FindItem( aLibId ) );
166 }
void selectIfValid(const wxDataViewItem &aTreeId)
If a wxDataViewitem is valid, select it and post a selection event.
Definition: lib_tree.cpp:238
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:167

References m_adapter, and selectIfValid().

Referenced by LIB_EDIT_FRAME::DuplicatePart(), FOOTPRINT_EDIT_FRAME::FocusOnLibID(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), LIB_EDIT_FRAME::Revert(), LIB_EDIT_FRAME::savePartAs(), LIB_EDIT_FRAME::SetCurPart(), setState(), LIB_EDIT_FRAME::SyncLibraries(), FOOTPRINT_EDIT_FRAME::SyncLibraryTree(), and LIB_EDIT_FRAME::UpdateAfterSymbolProperties().

◆ SetFocus()

void LIB_TREE::SetFocus ( )
override

Definition at line 217 of file lib_tree.cpp.

218 {
219  if( m_query_ctrl )
220  m_query_ctrl->SetFocus();
221  else
222  m_tree_ctrl->SetFocus();
223 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:169

References m_query_ctrl, and m_tree_ctrl.

◆ setState()

void LIB_TREE::setState ( const STATE aState)
protected

Restores the component tree widget state from an object.

Definition at line 295 of file lib_tree.cpp.

296 {
297  m_tree_ctrl->Freeze();
298 
299  for( const auto& item : aState.expanded )
300  m_tree_ctrl->Expand( item );
301 
302  // wxDataViewCtrl cannot be frozen when a selection
303  // command is issued, otherwise it selects a random item (Windows)
304  m_tree_ctrl->Thaw();
305 
306  if( !aState.selection.GetLibItemName().empty() || !aState.selection.GetLibNickname().empty() )
307  SelectLibId( aState.selection );
308 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170
void SelectLibId(const LIB_ID &aLibId)
Select an item in the tree widget.
Definition: lib_tree.cpp:163

References UTF8::empty(), LIB_TREE::STATE::expanded, LIB_ID::GetLibItemName(), LIB_ID::GetLibNickname(), m_tree_ctrl, LIB_TREE::STATE::selection, and SelectLibId().

Referenced by Regenerate().

◆ toggleExpand()

void LIB_TREE::toggleExpand ( const wxDataViewItem &  aTreeId)
protected

Expands or collapses a node, switching it to the opposite state.

Definition at line 226 of file lib_tree.cpp.

227 {
228  if( !aTreeId.IsOk() )
229  return;
230 
231  if( m_tree_ctrl->IsExpanded( aTreeId ) )
232  m_tree_ctrl->Collapse( aTreeId );
233  else
234  m_tree_ctrl->Expand( aTreeId );
235 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170

References m_tree_ctrl.

Referenced by onQueryCharHook(), and onTreeActivate().

◆ Unselect()

void LIB_TREE::Unselect ( )

Unselect currently selected item in wxDataViewCtrl.

Definition at line 175 of file lib_tree.cpp.

176 {
177  m_tree_ctrl->UnselectAll();
178 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:170

References m_tree_ctrl.

Referenced by LIB_EDIT_FRAME::emptyScreen(), FOOTPRINT_TREE_PANE::onComponentSelected(), SYMBOL_TREE_PANE::onComponentSelected(), FOOTPRINT_TREE_PANE::onUpdateUI(), LIB_EDIT_FRAME::SyncLibraries(), and FOOTPRINT_EDIT_FRAME::SyncLibraryTree().

Member Data Documentation

◆ m_adapter

◆ m_details_ctrl

wxHtmlWindow* LIB_TREE::m_details_ctrl
protected

Definition at line 171 of file lib_tree.h.

Referenced by LIB_TREE(), and onPreselect().

◆ m_lib_table

LIB_TABLE* LIB_TREE::m_lib_table
protected

Definition at line 166 of file lib_tree.h.

◆ m_query_ctrl

wxTextCtrl* LIB_TREE::m_query_ctrl
protected

Definition at line 169 of file lib_tree.h.

Referenced by LIB_TREE(), Regenerate(), and SetFocus().

◆ m_tree_ctrl


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