KiCad PCB EDA Suite
LIB_TREE Class Reference

Widget displaying a tree of components with optional search text control and description panel.Custom event sent when a new component is preselected. 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, wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > &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 (preferably 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)
 Regenerate the tree. More...
 
void RefreshLibTree ()
 Refreshes the tree (mainly to update highlighting and asterisking) More...
 
wxWindow * GetFocusTarget ()
 

Protected Member Functions

void toggleExpand (const wxDataViewItem &aTreeId)
 Expand or collapse 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
 Return the component tree widget state. More...
 
void setState (const STATE &aState)
 Restore 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
 
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTERm_adapter
 
wxTextCtrl * m_query_ctrl
 
wxDataViewCtrl * m_tree_ctrl
 
wxHtmlWindow * m_details_ctrl
 
LIB_ID m_last_libid
 

Detailed Description

Widget displaying a tree of components with optional search text control and description panel.Custom event sent when a new component is preselected.

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,
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > &  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.

38  : wxPanel( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
39  wxWANTS_CHARS | wxTAB_TRAVERSAL | wxNO_BORDER ),
40  m_lib_table( aLibTable ),
41  m_adapter( aAdapter ),
42  m_query_ctrl( nullptr ),
43  m_details_ctrl( nullptr )
44 {
45  auto sizer = new wxBoxSizer( wxVERTICAL );
46 
47  // Search text control
48  if( aWidgets & SEARCH )
49  {
50  auto search_sizer = new wxBoxSizer( wxHORIZONTAL );
51 
52  m_query_ctrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition,
53  wxDefaultSize, wxTE_PROCESS_ENTER );
54 
55 // Additional visual cue for GTK, which hides the placeholder text on focus
56 #ifdef __WXGTK__
57  auto bitmap = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxART_FIND, wxART_FRAME_ICON ) );
58 
59  search_sizer->Add( bitmap, 0, wxALIGN_CENTER | wxRIGHT, 5 );
60 #endif
61  search_sizer->Add( m_query_ctrl, 1, wxEXPAND, 5 );
62 
63  sizer->Add( search_sizer, 0, wxEXPAND, 5 );
64 
65  m_query_ctrl->Bind( wxEVT_TEXT, &LIB_TREE::onQueryText, this );
66  m_query_ctrl->Bind( wxEVT_TEXT_ENTER, &LIB_TREE::onQueryEnter, this );
67  m_query_ctrl->Bind( wxEVT_CHAR_HOOK, &LIB_TREE::onQueryCharHook, this );
68  }
69 
70  // Tree control
71  m_tree_ctrl = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
72  wxDV_SINGLE );
73  m_adapter->AttachTo( m_tree_ctrl );
74 
75  if( aWidgets & DETAILS )
76  sizer->AddSpacer( 5 );
77 
78  sizer->Add( m_tree_ctrl, 5, wxRIGHT | wxBOTTOM | wxEXPAND, 1 );
79 
80  // Description panel
81  if( aWidgets & DETAILS )
82  {
83  if( !aDetails )
84  {
85  wxPoint html_size = ConvertDialogToPixels( wxPoint( 80, 80 ) );
86 
87  m_details_ctrl = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition,
88  wxSize( html_size.x, html_size.y ),
89  wxHW_SCROLLBAR_AUTO );
90 
91  sizer->Add( m_details_ctrl, 2, wxTOP | wxEXPAND, 5 );
92  }
93  else
94  {
95  m_details_ctrl = aDetails;
96  }
97 
98  m_details_ctrl->Bind( wxEVT_HTML_LINK_CLICKED, &LIB_TREE::onDetailsLink, this );
99  }
100 
101  SetSizer( sizer );
102 
103  m_tree_ctrl->Bind( wxEVT_DATAVIEW_ITEM_ACTIVATED, &LIB_TREE::onTreeActivate, this );
104  m_tree_ctrl->Bind( wxEVT_DATAVIEW_SELECTION_CHANGED, &LIB_TREE::onTreeSelect, this );
105  m_tree_ctrl->Bind( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, &LIB_TREE::onContextMenu, this );
106 
107  Bind( COMPONENT_PRESELECTED, &LIB_TREE::onPreselect, this );
108 
109  // If wxTextCtrl::SetHint() is called before binding wxEVT_TEXT, the event
110  // handler will intermittently fire.
111  if( m_query_ctrl )
112  {
113  m_query_ctrl->SetHint( _( "Filter" ) );
114  m_query_ctrl->SetFocus();
115  m_query_ctrl->SetValue( wxEmptyString );
116 
117  // Force an update of the adapter with the empty text to ensure preselect is done
118  Regenerate( false );
119  }
120  else
121  {
122  // There may be a part preselected in the model. Make sure it is displayed.
123  // Regenerate does this in the other branch
125  }
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:176
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
void onPreselect(wxCommandEvent &aEvent)
Definition: lib_tree.cpp:406
LIB_TABLE * m_lib_table
Definition: lib_tree.h:170
void onQueryCharHook(wxKeyEvent &aEvent)
Definition: lib_tree.cpp:335
void onTreeActivate(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:385
void onQueryText(wxCommandEvent &aEvent)
Definition: lib_tree.cpp:318
void Regenerate(bool aKeepState)
Regenerate the tree.
Definition: lib_tree.cpp:200
void onTreeSelect(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:378
void onDetailsLink(wxHtmlLinkEvent &aEvent)
Definition: lib_tree.cpp:399
#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
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:174
void onContextMenu(wxDataViewEvent &aEvent)
Definition: lib_tree.cpp:433

References _, DETAILS, m_adapter, m_details_ctrl, m_query_ctrl, m_tree_ctrl, onContextMenu(), onDetailsLink(), onPreselect(), onQueryCharHook(), onQueryEnter(), onQueryText(), onTreeActivate(), onTreeSelect(), postPreselectEvent(), Regenerate(), 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 }
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172

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

References m_tree_ctrl.

Referenced by CenterLibId().

◆ CenterLibId()

void LIB_TREE::CenterLibId ( const LIB_ID aLibId)

Ensure that an item is visible (preferably centered).

Definition at line 183 of file lib_tree.cpp.

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

References centerIfValid(), and m_adapter.

Referenced by SYMBOL_EDIT_FRAME::KiwayMailIn(), FOOTPRINT_EDIT_FRAME::RegenerateLibraryTree(), SYMBOL_EDIT_FRAME::RegenerateLibraryTree(), SYMBOL_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:175

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 }
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
void expandIfValid(const wxDataViewItem &aTreeId)
Definition: lib_tree.cpp:263

References expandIfValid(), and m_adapter.

Referenced by SYMBOL_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 }
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175

References m_adapter, and m_tree_ctrl.

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

◆ GetFocusTarget()

wxWindow * LIB_TREE::GetFocusTarget ( )

Definition at line 224 of file lib_tree.cpp.

225 {
226  if( m_query_ctrl )
227  return m_query_ctrl;
228  else
229  return m_tree_ctrl;
230 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:174

References m_query_ctrl, and m_tree_ctrl.

Referenced by DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), and DIALOG_CHOOSE_SYMBOL::DIALOG_CHOOSE_SYMBOL().

◆ 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 }
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51

References m_adapter, and m_tree_ctrl.

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

◆ getState()

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

Return 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 }
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
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 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 433 of file lib_tree.cpp.

434 {
435  TOOL_INTERACTIVE* tool = m_adapter->GetContextMenuTool();
436 
437  if( tool )
438  {
439  tool->Activate();
441  tool->GetToolMenu().ShowContextMenu();
442 
444  tool->GetManager()->DispatchContextMenu( evt );
445  }
446 }
void DispatchContextMenu(const TOOL_EVENT &aEvent)
Handle context menu related events.
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
TOOL_MENU & GetToolMenu()
TOOL_MANAGER * GetManager() const
Return the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:144
Generic, UI-independent tool event.
Definition: tool_event.h:173
void VetoContextMenuMouseWarp()
Disable mouse warping after the current context menu is closed.
Definition: tool_manager.h:428
void Activate()
Run the tool.
void ShowContextMenu(SELECTION &aSelection)
Helper function to set and immediately show a CONDITIONAL_MENU in concert with the given SELECTION.
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 399 of file lib_tree.cpp.

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

References info.

Referenced by LIB_TREE().

◆ onPreselect()

void LIB_TREE::onPreselect ( wxCommandEvent &  aEvent)
protected

Definition at line 406 of file lib_tree.cpp.

407 {
408  if( m_details_ctrl )
409  {
410  int unit = 0;
411  LIB_ID id = GetSelectedLibId( &unit );
412 
413  wxString htmlColor = GetBackgroundColour().GetAsString( wxC2S_HTML_SYNTAX );
414  wxString textColor = GetForegroundColour().GetAsString( wxC2S_HTML_SYNTAX );
415  wxString linkColor = wxSystemSettings::GetColour( wxSYS_COLOUR_HOTLIGHT )
416  .GetAsString( wxC2S_HTML_SYNTAX );
417 
418  wxString html = wxString::Format( wxT( "<html><body bgcolor='%s' text='%s' link='%s'>" ),
419  htmlColor, textColor, linkColor );
420 
421  if( id.IsValid() )
422  html.Append( m_adapter->GenerateInfo( id, unit ) );
423 
424  html.Append( wxT( "</body></html>" ) );
425 
426  m_details_ctrl->SetPage( html );
427  }
428 
429  aEvent.Skip();
430 }
wxHtmlWindow * m_details_ctrl
Definition: lib_tree.h:176
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
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
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References Format(), 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
void toggleExpand(const wxDataViewItem &aTreeId)
Expand or collapse 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.
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
wxDataViewItem GetNextItem(wxDataViewCtrl const &aView, wxDataViewItem const &aItem)
Get the next item in list order.

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)
Regenerate the tree.
Definition: lib_tree.cpp:200

References Regenerate().

Referenced by LIB_TREE().

◆ onTreeActivate()

void LIB_TREE::onTreeActivate ( wxDataViewEvent &  aEvent)
protected

Definition at line 385 of file lib_tree.cpp.

386 {
387  if( !GetSelectedLibId().IsValid() )
388  {
389  // Expand library/part units subtree
390  toggleExpand( m_tree_ctrl->GetSelection() );
391  }
392  else
393  {
394  postSelectEvent();
395  }
396 }
void toggleExpand(const wxDataViewItem &aTreeId)
Expand or collapse 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:175
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 {
380  if( !m_tree_ctrl->IsFrozen() )
382 }
wxDataViewCtrl * m_tree_ctrl
Definition: lib_tree.h:175
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 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 ( )

◆ Regenerate()

void LIB_TREE::Regenerate ( bool  aKeepState)

Regenerate 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, aKeepState );
211 
212  // Restore the state
213  if( aKeepState )
214  setState( current );
215 }
STATE getState() const
Return the component tree widget state.
Definition: lib_tree.cpp:284
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172
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
void setState(const STATE &aState)
Restore the component tree widget state from an object.
Definition: lib_tree.cpp:302
wxTextCtrl * m_query_ctrl
Definition: lib_tree.h:174

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

Referenced by LIB_TREE(), onQueryText(), FOOTPRINT_EDIT_FRAME::RegenerateLibraryTree(), SYMBOL_EDIT_FRAME::RegenerateLibraryTree(), SYMBOL_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:175
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
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
Definition: lib_tree.h:172

References m_adapter, and selectIfValid().

Referenced by SYMBOL_EDIT_FRAME::DuplicatePart(), FOOTPRINT_EDIT_FRAME::FocusOnLibID(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), SYMBOL_EDIT_FRAME::Revert(), SYMBOL_EDIT_FRAME::savePartAs(), SYMBOL_EDIT_FRAME::SetCurPart(), setState(), SYMBOL_EDIT_FRAME::SyncLibraries(), FOOTPRINT_EDIT_FRAME::SyncLibraryTree(), and SYMBOL_EDIT_FRAME::UpdateAfterSymbolProperties().

◆ setState()

void LIB_TREE::setState ( const STATE aState)
protected

Restore 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:175
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

Expand or collapse 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:175

References m_tree_ctrl.

Referenced by onQueryCharHook(), and onTreeActivate().

◆ Unselect()

void LIB_TREE::Unselect ( )

Member Data Documentation

◆ m_adapter

◆ m_details_ctrl

wxHtmlWindow* LIB_TREE::m_details_ctrl
protected

Definition at line 176 of file lib_tree.h.

Referenced by LIB_TREE(), and onPreselect().

◆ m_last_libid

LIB_ID LIB_TREE::m_last_libid
protected

Definition at line 178 of file lib_tree.h.

◆ m_lib_table

LIB_TABLE* LIB_TREE::m_lib_table
protected

Definition at line 170 of file lib_tree.h.

◆ m_query_ctrl

wxTextCtrl* LIB_TREE::m_query_ctrl
protected

Definition at line 174 of file lib_tree.h.

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

◆ m_tree_ctrl


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