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...
 
LIB_TREE_NODEGetCurrentTreeNode () const
 
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 35 of file lib_tree.cpp.

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

References _, DETAILS, 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 139 of file lib_tree.cpp.

140 {
141  // Save the column widths to the config file
142  m_adapter->SaveColWidths();
143 
144  m_adapter->SavePinnedItems();
145 }
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References m_adapter.

Member Function Documentation

◆ centerIfValid()

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

Definition at line 256 of file lib_tree.cpp.

257 {
258  if( aTreeId.IsOk() )
259  m_tree_ctrl->EnsureVisible( aTreeId );
260 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173

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 183 of file lib_tree.cpp.

184 {
185  centerIfValid( m_adapter->FindItem( aLibId ) );
186 }
void centerIfValid(const wxDataViewItem &aTreeId)
Definition: lib_tree.cpp:256
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References centerIfValid(), and m_adapter.

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

◆ expandIfValid()

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

Definition at line 263 of file lib_tree.cpp.

264 {
265  if( aTreeId.IsOk() && !m_tree_ctrl->IsExpanded( aTreeId ) )
266  m_tree_ctrl->Expand( aTreeId );
267 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173

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 194 of file lib_tree.cpp.

195 {
196  expandIfValid( m_adapter->FindItem( aLibId ) );
197 }
void expandIfValid(const wxDataViewItem &aTreeId)
Definition: lib_tree.cpp:263
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References expandIfValid(), and m_adapter.

Referenced by LIB_EDIT_FRAME::KiwayMailIn().

◆ GetCurrentTreeNode()

LIB_TREE_NODE * LIB_TREE::GetCurrentTreeNode ( ) const

Definition at line 166 of file lib_tree.cpp.

167 {
168  auto sel = m_tree_ctrl->GetSelection();
169 
170  if( !sel )
171  return nullptr;
172 
173  return m_adapter->GetTreeNodeFor( sel );
174 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References m_adapter, and m_tree_ctrl.

Referenced by LIB_EDIT_FRAME::GetCurrentTreeNode(), and FOOTPRINT_EDIT_FRAME::GetCurrentTreeNode().

◆ 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 148 of file lib_tree.cpp.

149 {
150  auto sel = m_tree_ctrl->GetSelection();
151 
152  if( !sel )
153  {
154  LIB_ID emptyId;
155 
156  return emptyId;
157  }
158 
159  if( aUnit )
160  *aUnit = m_adapter->GetUnitFor( sel );
161 
162  return m_adapter->GetAliasFor( sel );
163 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
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:170

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 284 of file lib_tree.cpp.

285 {
286  STATE state;
287  wxDataViewItemArray items;
288  m_adapter->GetChildren( wxDataViewItem( nullptr ), items );
289 
290  for( const auto& item : items )
291  {
292  if( m_tree_ctrl->IsExpanded( item ) )
293  state.expanded.push_back( item );
294  }
295 
296  state.selection = GetSelectedLibId();
297 
298  return state;
299 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
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:148
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

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 422 of file lib_tree.cpp.

423 {
424  TOOL_INTERACTIVE* tool = m_adapter->GetContextMenuTool();
425 
426  if( tool )
427  {
428  tool->Activate();
430  tool->GetToolMenu().ShowContextMenu();
431 
433  tool->GetManager()->DispatchContextMenu( evt );
434  }
435 }
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:408
void Activate()
Function Activate() Runs the tool.
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170
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 398 of file lib_tree.cpp.

399 {
400  const wxHtmlLinkInfo& info = aEvent.GetLinkInfo();
401  ::wxLaunchDefaultBrowser( info.GetHref() );
402 }

Referenced by LIB_TREE().

◆ onPreselect()

void LIB_TREE::onPreselect ( wxCommandEvent &  aEvent)
protected

Definition at line 405 of file lib_tree.cpp.

406 {
407  if( m_details_ctrl )
408  {
409  int unit = 0;
410  LIB_ID id = GetSelectedLibId( &unit );
411 
412  if( id.IsValid() )
413  m_details_ctrl->SetPage( m_adapter->GenerateInfo( id, unit ) );
414  else
415  m_details_ctrl->SetPage( wxEmptyString );
416  }
417 
418  aEvent.Skip();
419 }
wxHtmlWindow * m_details_ctrl
Definition: lib_tree.h:174
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:148
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References GetSelectedLibId(), m_adapter, and m_details_ctrl.

Referenced by LIB_TREE().

◆ onQueryCharHook()

void LIB_TREE::onQueryCharHook ( wxKeyEvent &  aEvent)
protected

Definition at line 335 of file lib_tree.cpp.

336 {
337  auto const sel = m_tree_ctrl->GetSelection();
338  auto type = sel.IsOk() ? m_adapter->GetTypeFor( sel ) : LIB_TREE_NODE::INVALID;
339 
340  switch( aKeyStroke.GetKeyCode() )
341  {
342  case WXK_UP:
344  break;
345 
346  case WXK_DOWN:
348  break;
349 
350  case WXK_ADD:
351  if( type == LIB_TREE_NODE::LIB )
352  m_tree_ctrl->Expand( sel );
353 
354  break;
355 
356  case WXK_SUBTRACT:
357  if( type == LIB_TREE_NODE::LIB )
358  m_tree_ctrl->Collapse( sel );
359 
360  break;
361 
362  case WXK_RETURN:
363  if( type == LIB_TREE_NODE::LIB )
364  {
365  toggleExpand( sel );
366  break;
367  }
368  // Intentionally fall through, so the selected component will be treated as the selected one
370 
371  default:
372  aKeyStroke.Skip(); // Any other key: pass on to search box directly.
373  break;
374  }
375 }
void selectIfValid(const wxDataViewItem &aTreeId)
If a wxDataViewitem is valid, select it and post a selection event.
Definition: lib_tree.cpp:245
#define KI_FALLTHROUGH
void toggleExpand(const wxDataViewItem &aTreeId)
Expands or collapses a node, switching it to the opposite state.
Definition: lib_tree.cpp:233
wxDataViewItem GetPrevItem(wxDataViewCtrl const &aView, wxDataViewItem const &aItem)
Get the previous item in list order.
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
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:170

References GetNextItem(), GetPrevItem(), LIB_TREE_NODE::INVALID, KI_FALLTHROUGH, 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 328 of file lib_tree.cpp.

329 {
330  if( GetSelectedLibId().IsValid() )
331  postSelectEvent();
332 }
void postSelectEvent()
Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected.
Definition: lib_tree.cpp:277
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:148

References GetSelectedLibId(), and postSelectEvent().

Referenced by LIB_TREE().

◆ onQueryText()

void LIB_TREE::onQueryText ( wxCommandEvent &  aEvent)
protected

Definition at line 318 of file lib_tree.cpp.

319 {
320  Regenerate( false );
321 
322  // Required to avoid interaction with SetHint()
323  // See documentation for wxTextEntry::SetHint
324  aEvent.Skip();
325 }
void Regenerate(bool aKeepState)
Regenerates the tree.
Definition: lib_tree.cpp:200

References Regenerate().

Referenced by LIB_TREE().

◆ onTreeActivate()

void LIB_TREE::onTreeActivate ( wxDataViewEvent &  aEvent)
protected

Definition at line 384 of file lib_tree.cpp.

385 {
386  if( !GetSelectedLibId().IsValid() )
387  {
388  // Expand library/part units subtree
389  toggleExpand( m_tree_ctrl->GetSelection() );
390  }
391  else
392  {
393  postSelectEvent();
394  }
395 }
void toggleExpand(const wxDataViewItem &aTreeId)
Expands or collapses a node, switching it to the opposite state.
Definition: lib_tree.cpp:233
void postSelectEvent()
Post COMPONENT_SELECTED event to notify the selection handler that a part has been selected.
Definition: lib_tree.cpp:277
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
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:148

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

Referenced by LIB_TREE().

◆ onTreeSelect()

void LIB_TREE::onTreeSelect ( wxDataViewEvent &  aEvent)
protected

Definition at line 378 of file lib_tree.cpp.

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

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 270 of file lib_tree.cpp.

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

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 277 of file lib_tree.cpp.

278 {
279  wxCommandEvent event( COMPONENT_SELECTED );
280  wxPostEvent( this, event );
281 }

Referenced by onQueryEnter(), and onTreeActivate().

◆ RefreshLibTree()

void LIB_TREE::RefreshLibTree ( )

Refreshes the tree (mainly to update highlighting and asterisking)

Definition at line 218 of file lib_tree.cpp.

219 {
220  m_adapter->RefreshTree();
221 }
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

References m_adapter.

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 200 of file lib_tree.cpp.

201 {
202  STATE current;
203 
204  // Store the state
205  if( aKeepState )
206  current = getState();
207 
208  wxString filter = m_query_ctrl->GetValue();
209  m_adapter->UpdateSearchString( filter );
211 
212  // Restore the state
213  if( aKeepState )
214  setState( current );
215 }
STATE getState() const
Returns the component tree widget state.
Definition: lib_tree.cpp:284
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:270
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170
void setState(const STATE &aState)
Restores the component tree widget state from an object.
Definition: lib_tree.cpp:302
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:172

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

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

◆ selectIfValid()

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

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

Definition at line 245 of file lib_tree.cpp.

246 {
247  if( aTreeId.IsOk() )
248  {
249  m_tree_ctrl->EnsureVisible( aTreeId );
250  m_tree_ctrl->Select( aTreeId );
252  }
253 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
void postPreselectEvent()
Post a wxEVT_DATAVIEW_SELECTION_CHANGED to notify the selection handler that a new part has been pres...
Definition: lib_tree.cpp:270

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 177 of file lib_tree.cpp.

178 {
179  selectIfValid( m_adapter->FindItem( aLibId ) );
180 }
void selectIfValid(const wxDataViewItem &aTreeId)
If a wxDataViewitem is valid, select it and post a selection event.
Definition: lib_tree.cpp:245
LIB_TREE_MODEL_ADAPTER::PTR m_adapter
Definition: lib_tree.h:170

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 224 of file lib_tree.cpp.

225 {
226  if( m_query_ctrl )
227  m_query_ctrl->SetFocus();
228  else
229  m_tree_ctrl->SetFocus();
230 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:172

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 302 of file lib_tree.cpp.

303 {
304  m_tree_ctrl->Freeze();
305 
306  for( const auto& item : aState.expanded )
307  m_tree_ctrl->Expand( item );
308 
309  // wxDataViewCtrl cannot be frozen when a selection
310  // command is issued, otherwise it selects a random item (Windows)
311  m_tree_ctrl->Thaw();
312 
313  if( !aState.selection.GetLibItemName().empty() || !aState.selection.GetLibNickname().empty() )
314  SelectLibId( aState.selection );
315 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173
void SelectLibId(const LIB_ID &aLibId)
Select an item in the tree widget.
Definition: lib_tree.cpp:177

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 233 of file lib_tree.cpp.

234 {
235  if( !aTreeId.IsOk() )
236  return;
237 
238  if( m_tree_ctrl->IsExpanded( aTreeId ) )
239  m_tree_ctrl->Collapse( aTreeId );
240  else
241  m_tree_ctrl->Expand( aTreeId );
242 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173

References m_tree_ctrl.

Referenced by onQueryCharHook(), and onTreeActivate().

◆ Unselect()

void LIB_TREE::Unselect ( )

Unselect currently selected item in wxDataViewCtrl.

Definition at line 189 of file lib_tree.cpp.

190 {
191  m_tree_ctrl->UnselectAll();
192 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:173

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 174 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 169 of file lib_tree.h.

◆ m_query_ctrl

wxTextCtrl* LIB_TREE::m_query_ctrl
protected

Definition at line 172 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: