KiCad PCB EDA Suite
Loading...
Searching...
No Matches
PL_PROPERTIES_PANEL Class Reference

#include <pl_properties_panel.h>

Inheritance diagram for PL_PROPERTIES_PANEL:
PROPERTIES_PANEL

Public Member Functions

 PL_PROPERTIES_PANEL (PL_EDITOR_FRAME *aFrame)
 
 ~PL_PROPERTIES_PANEL () override
 
void UpdateData () override
 
virtual void AfterCommit ()
 
wxPropertyGrid * GetPropertyGrid ()
 
int PropertiesCount () const
 
const std::vector< PROPERTY_BASE * > & Properties () const
 
void RecalculateSplitterPos ()
 
void SetSplitterProportion (float aProportion)
 
float SplitterProportion () const
 

Public Attributes

int m_SuppressGridChangeEvents
 
bool m_ValueChangeVetoed
 

Protected Member Functions

void rebuildProperties (const SELECTION &aSelection) override
 Generates the property grid for a given selection of items.
 
wxPGProperty * createPGProperty (const PROPERTY_BASE *aProperty) const override
 
void valueChanging (wxPropertyGridEvent &aEvent) override
 
void valueChanged (wxPropertyGridEvent &aEvent) override
 
void onCharHook (wxKeyEvent &aEvent)
 
void onShow (wxShowEvent &aEvent)
 
virtual void OnLanguageChanged (wxCommandEvent &aEvent)
 
virtual bool isKeyEditable (const wxPGProperty *aPGProp) const
 
virtual bool isKeyNameInUse (const wxString &aName) const
 
virtual void onKeyRenamed (const wxString &aOldName, const wxString &aNewName)
 
virtual void onLabelEditBegin (wxPropertyGridEvent &aEvent)
 
virtual void onLabelEditEnding (wxPropertyGridEvent &aEvent)
 
virtual bool buildContextMenu (wxMenu &aMenu, wxPGProperty *aPGProp)
 
virtual void onNewItemLeftBlank (const wxString &aKey)
 
void onRightClick (wxPropertyGridEvent &aEvent)
 
void beginLabelEdit (const wxString &aKey, bool aStartBlank=false)
 
void settlePendingLabelEdit ()
 Synchronously ends any in-progress label edit; potentially canceling a newly added row.
 
virtual bool getItemValue (EDA_ITEM *aItem, PROPERTY_BASE *aProperty, wxVariant &aValue)
 Utility to fetch a property value and convert to wxVariant Precondition: aItem is known to have property aProperty.
 
bool extractValueAndWritability (const SELECTION &aSelection, const wxString &aPropName, wxVariant &aValue, bool &aWritable, wxPGChoices &aChoices)
 Processes a selection and determines whether the given property should be available or not and what the common value should be for the items in the selection.
 
void addCategoryButton (const wxString &aGroupKey, const wxString &aTooltip, BITMAPS aBitmap, std::function< void()> aAction, std::function< bool()> aEnableFunc=nullptr, bool aForceCategory=false)
 Registers an overlay button on a category caption row.
 
void updateCategoryButtons ()
 Updates overlay button visibility/positions; called after rebuilds and on scroll.
 
void hideCategoryButtons ()
 Hides all overlay buttons (used when no selection or a rebuild is deferred).
 
void positionCategoryButtons ()
 
wxPGProperty * categoryForGroup (const wxString &aGroupKey) const
 Find the caption row for the given untranslated group name, if present.
 

Protected Attributes

wxStaticText * m_caption
 
std::vector< PROPERTY_BASE * > m_displayed
 
wxPropertyGrid * m_grid
 
EDA_BASE_FRAME * m_frame
 
float m_splitter_key_proportion
 Proportion of the grid column splitter that is used for the key column (0.0 - 1.0)
 
wxTimer m_deferredRebuildTimer
 Not CallAfter(): on macOS the pending-event queue is drained from inside tool events, where a deferred rebuild would only re-defer itself forever.
 
SELECTION m_deferredSelection
 
wxString m_editingOriginalLabel
 
wxString m_contextMenuPropertyName
 
std::vector< CATEGORY_BUTTON > m_categoryButtons
 
bool m_resolvingPendingKey = false
 True while settling a pending label edit synchronously (see settlePendingLabelEdit).
 
wxString m_pendingNewKey
 Key of a freshly-added blank field/custom property awaiting a name from the user.
 

Private Member Functions

void resetDefaults ()
 
void refreshDrawing ()
 

Private Attributes

PL_EDITOR_FRAME * m_editor
 
PG_UNIT_EDITOR * m_unitEditor
 
std::unique_ptr< PL_PAGE_PROPERTIES > m_pageProperties
 
std::vector< std::unique_ptr< PL_ITEM_PROPERTIES > > m_itemProperties
 
SELECTION m_selection
 

Detailed Description

Definition at line 29 of file pl_properties_panel.h.

Constructor & Destructor Documentation

◆ PL_PROPERTIES_PANEL()

◆ ~PL_PROPERTIES_PANEL()

PL_PROPERTIES_PANEL::~PL_PROPERTIES_PANEL ( )
override

Member Function Documentation

◆ addCategoryButton()

void PROPERTIES_PANEL::addCategoryButton ( const wxString & aGroupKey,
const wxString & aTooltip,
BITMAPS aBitmap,
std::function< void()> aAction,
std::function< bool()> aEnableFunc = nullptr,
bool aForceCategory = false )
protectedinherited

Registers an overlay button on a category caption row.

The button is shown when its category row is on-screen and selection-appropriate (the optional enable predicate is consulted; it is re-evaluated on every rebuild).

TODO it would be nice to remove this hack by getting upstream wxWidgets to support customizing/subclassing the property group widgets

Parameters
aGroupKeyis the untranslated group name (e.g. _HKI( "Fields" )).
aTooltipis the tooltip text (translated by the caller).
aBitmapis the icon shown on the button.
aActionis invoked when the button is clicked.
aEnableFuncoptionally controls visibility (evaluated on each rebuild).
aForceCategoryoptionally forces the category caption row to be emitted during rebuilds (only when aEnableFunc, if set, returns true).

Definition at line 952 of file properties_panel.cpp.

References KiBitmapBundle(), m_categoryButtons, m_grid, and BITMAP_BUTTON::SetBitmap().

Referenced by PCB_PROPERTIES_PANEL::PCB_PROPERTIES_PANEL(), PL_PROPERTIES_PANEL::PL_PROPERTIES_PANEL(), and SCH_PROPERTIES_PANEL::SCH_PROPERTIES_PANEL().

◆ AfterCommit()

virtual void PROPERTIES_PANEL::AfterCommit ( )
inlinevirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 63 of file properties_panel.h.

◆ beginLabelEdit()

void PROPERTIES_PANEL::beginLabelEdit ( const wxString & aKey,
bool aStartBlank = false )
protectedinherited

◆ buildContextMenu()

virtual bool PROPERTIES_PANEL::buildContextMenu ( wxMenu & aMenu,
wxPGProperty * aPGProp )
inlineprotectedvirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 110 of file properties_panel.h.

Referenced by onRightClick().

◆ categoryForGroup()

wxPGProperty * PROPERTIES_PANEL::categoryForGroup ( const wxString & aGroupKey) const
protectedinherited

Find the caption row for the given untranslated group name, if present.

Definition at line 982 of file properties_panel.cpp.

References m_grid.

Referenced by positionCategoryButtons().

◆ createPGProperty()

wxPGProperty * PL_PROPERTIES_PANEL::createPGProperty ( const PROPERTY_BASE * aProperty) const
overrideprotectedvirtual

◆ extractValueAndWritability()

bool PROPERTIES_PANEL::extractValueAndWritability ( const SELECTION & aSelection,
const wxString & aPropName,
wxVariant & aValue,
bool & aWritable,
wxPGChoices & aChoices )
protectedinherited

Processes a selection and determines whether the given property should be available or not and what the common value should be for the items in the selection.

Parameters
aSelectionis a set of EDA_ITEMs to process
aPropNameis the property to look up
aValuewill be filled with the value common to the selection, or null if different
aWritablewill be set to whether or not the property can be written for the selection
aChoices
Returns
true if the property is available for all the items in the selection

Definition at line 558 of file properties_panel.cpp.

References PROPERTY_BASE::GetChoices(), getItemValue(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_MANAGER::IsAvailableFor(), PROPERTY_MANAGER::IsWriteableFor(), and TYPE_HASH.

Referenced by rebuildProperties().

◆ getItemValue()

bool PROPERTIES_PANEL::getItemValue ( EDA_ITEM * aItem,
PROPERTY_BASE * aProperty,
wxVariant & aValue )
protectedvirtualinherited

Utility to fetch a property value and convert to wxVariant Precondition: aItem is known to have property aProperty.

Returns
true if conversion succeeded

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 527 of file properties_panel.cpp.

References INSPECTABLE::Get(), KIGFX::VIEW_ITEM::GetClass(), PROPERTY_BASE::HasChoices(), and PROPERTY_BASE::Name().

Referenced by extractValueAndWritability(), PCB_PROPERTIES_PANEL::getItemValue(), and SCH_PROPERTIES_PANEL::getItemValue().

◆ GetPropertyGrid()

wxPropertyGrid * PROPERTIES_PANEL::GetPropertyGrid ( )
inlineinherited

Definition at line 65 of file properties_panel.h.

References m_grid.

◆ hideCategoryButtons()

void PROPERTIES_PANEL::hideCategoryButtons ( )
protectedinherited

Hides all overlay buttons (used when no selection or a rebuild is deferred).

Definition at line 1002 of file properties_panel.cpp.

References m_categoryButtons.

Referenced by rebuildProperties().

◆ isKeyEditable()

virtual bool PROPERTIES_PANEL::isKeyEditable ( const wxPGProperty * aPGProp) const
inlineprotectedvirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 103 of file properties_panel.h.

Referenced by onLabelEditBegin(), and onLabelEditEnding().

◆ isKeyNameInUse()

virtual bool PROPERTIES_PANEL::isKeyNameInUse ( const wxString & aName) const
inlineprotectedvirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 104 of file properties_panel.h.

Referenced by onLabelEditEnding(), and settlePendingLabelEdit().

◆ onCharHook()

void PROPERTIES_PANEL::onCharHook ( wxKeyEvent & aEvent)
protectedinherited

Definition at line 809 of file properties_panel.cpp.

References m_grid, and m_ValueChangeVetoed.

Referenced by PROPERTIES_PANEL().

◆ onKeyRenamed()

virtual void PROPERTIES_PANEL::onKeyRenamed ( const wxString & aOldName,
const wxString & aNewName )
inlineprotectedvirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 105 of file properties_panel.h.

Referenced by onLabelEditEnding(), and settlePendingLabelEdit().

◆ onLabelEditBegin()

void PROPERTIES_PANEL::onLabelEditBegin ( wxPropertyGridEvent & aEvent)
protectedvirtualinherited

Definition at line 638 of file properties_panel.cpp.

References isKeyEditable(), and m_editingOriginalLabel.

Referenced by PROPERTIES_PANEL().

◆ onLabelEditEnding()

void PROPERTIES_PANEL::onLabelEditEnding ( wxPropertyGridEvent & aEvent)
protectedvirtualinherited

◆ OnLanguageChanged()

void PROPERTIES_PANEL::OnLanguageChanged ( wxCommandEvent & aEvent)
protectedvirtualinherited

◆ onNewItemLeftBlank()

virtual void PROPERTIES_PANEL::onNewItemLeftBlank ( const wxString & aKey)
inlineprotectedvirtualinherited

Reimplemented in PCB_PROPERTIES_PANEL, and SCH_PROPERTIES_PANEL.

Definition at line 111 of file properties_panel.h.

Referenced by onLabelEditEnding(), and settlePendingLabelEdit().

◆ onRightClick()

void PROPERTIES_PANEL::onRightClick ( wxPropertyGridEvent & aEvent)
protectedinherited

Definition at line 735 of file properties_panel.cpp.

References buildContextMenu(), and m_contextMenuPropertyName.

Referenced by PROPERTIES_PANEL().

◆ onShow()

void PROPERTIES_PANEL::onShow ( wxShowEvent & aEvent)
protectedinherited

Definition at line 629 of file properties_panel.cpp.

References UpdateData().

Referenced by PROPERTIES_PANEL().

◆ positionCategoryButtons()

void PROPERTIES_PANEL::positionCategoryButtons ( )
protectedinherited

Definition at line 1009 of file properties_panel.cpp.

References categoryForGroup(), m_categoryButtons, and m_grid.

Referenced by PROPERTIES_PANEL(), and updateCategoryButtons().

◆ Properties()

const std::vector< PROPERTY_BASE * > & PROPERTIES_PANEL::Properties ( ) const
inlineinherited

Definition at line 75 of file properties_panel.h.

References m_displayed.

◆ PropertiesCount()

int PROPERTIES_PANEL::PropertiesCount ( ) const
inlineinherited

Definition at line 70 of file properties_panel.h.

References m_displayed.

◆ rebuildProperties()

void PL_PROPERTIES_PANEL::rebuildProperties ( const SELECTION & aSelection)
overrideprotectedvirtual

Generates the property grid for a given selection of items.

Parameters
aSelectionis a set of items to show properties for.

Reimplemented from PROPERTIES_PANEL.

Definition at line 215 of file pl_properties_panel.cpp.

References UpdateData().

◆ RecalculateSplitterPos()

void PROPERTIES_PANEL::RecalculateSplitterPos ( )
inherited

◆ refreshDrawing()

void PL_PROPERTIES_PANEL::refreshDrawing ( )
private

◆ resetDefaults()

void PL_PROPERTIES_PANEL::resetDefaults ( )
private

◆ SetSplitterProportion()

void PROPERTIES_PANEL::SetSplitterProportion ( float aProportion)
inherited

Definition at line 945 of file properties_panel.cpp.

References m_splitter_key_proportion, and RecalculateSplitterPos().

◆ settlePendingLabelEdit()

void PROPERTIES_PANEL::settlePendingLabelEdit ( )
protectedinherited

◆ SplitterProportion()

float PROPERTIES_PANEL::SplitterProportion ( ) const
inlineinherited

Definition at line 83 of file properties_panel.h.

References m_splitter_key_proportion.

◆ updateCategoryButtons()

void PROPERTIES_PANEL::updateCategoryButtons ( )
protectedinherited

Updates overlay button visibility/positions; called after rebuilds and on scroll.

Definition at line 996 of file properties_panel.cpp.

References positionCategoryButtons().

Referenced by rebuildProperties().

◆ UpdateData()

◆ valueChanged()

void PL_PROPERTIES_PANEL::valueChanged ( wxPropertyGridEvent & aEvent)
overrideprotectedvirtual

◆ valueChanging()

void PL_PROPERTIES_PANEL::valueChanging ( wxPropertyGridEvent & aEvent)
overrideprotectedvirtual

Member Data Documentation

◆ m_caption

wxStaticText* PROPERTIES_PANEL::m_caption
protectedinherited

◆ m_categoryButtons

std::vector<CATEGORY_BUTTON> PROPERTIES_PANEL::m_categoryButtons
protectedinherited

◆ m_contextMenuPropertyName

wxString PROPERTIES_PANEL::m_contextMenuPropertyName
protectedinherited

◆ m_deferredRebuildTimer

wxTimer PROPERTIES_PANEL::m_deferredRebuildTimer
protectedinherited

Not CallAfter(): on macOS the pending-event queue is drained from inside tool events, where a deferred rebuild would only re-defer itself forever.

Definition at line 188 of file properties_panel.h.

Referenced by PROPERTIES_PANEL(), rebuildProperties(), PL_PROPERTIES_PANEL::UpdateData(), and PL_PROPERTIES_PANEL::~PL_PROPERTIES_PANEL().

◆ m_deferredSelection

SELECTION PROPERTIES_PANEL::m_deferredSelection
protectedinherited

◆ m_displayed

std::vector<PROPERTY_BASE*> PROPERTIES_PANEL::m_displayed
protectedinherited

◆ m_editingOriginalLabel

wxString PROPERTIES_PANEL::m_editingOriginalLabel
protectedinherited

Definition at line 191 of file properties_panel.h.

Referenced by onLabelEditBegin(), and onLabelEditEnding().

◆ m_editor

PL_EDITOR_FRAME* PL_PROPERTIES_PANEL::m_editor
private

◆ m_frame

EDA_BASE_FRAME* PROPERTIES_PANEL::m_frame
protectedinherited

Definition at line 181 of file properties_panel.h.

Referenced by PROPERTIES_PANEL(), rebuildProperties(), and ~PROPERTIES_PANEL().

◆ m_grid

◆ m_itemProperties

std::vector<std::unique_ptr<PL_ITEM_PROPERTIES> > PL_PROPERTIES_PANEL::m_itemProperties
private

Definition at line 50 of file pl_properties_panel.h.

Referenced by PL_PROPERTIES_PANEL(), refreshDrawing(), and UpdateData().

◆ m_pageProperties

std::unique_ptr<PL_PAGE_PROPERTIES> PL_PROPERTIES_PANEL::m_pageProperties
private

Definition at line 49 of file pl_properties_panel.h.

Referenced by PL_PROPERTIES_PANEL(), and UpdateData().

◆ m_pendingNewKey

wxString PROPERTIES_PANEL::m_pendingNewKey
protectedinherited

◆ m_resolvingPendingKey

bool PROPERTIES_PANEL::m_resolvingPendingKey = false
protectedinherited

True while settling a pending label edit synchronously (see settlePendingLabelEdit).

Definition at line 210 of file properties_panel.h.

Referenced by onLabelEditEnding(), and settlePendingLabelEdit().

◆ m_selection

SELECTION PL_PROPERTIES_PANEL::m_selection
private

Definition at line 51 of file pl_properties_panel.h.

Referenced by UpdateData(), valueChanged(), and valueChanging().

◆ m_splitter_key_proportion

float PROPERTIES_PANEL::m_splitter_key_proportion
protectedinherited

Proportion of the grid column splitter that is used for the key column (0.0 - 1.0)

Definition at line 184 of file properties_panel.h.

Referenced by PROPERTIES_PANEL(), RecalculateSplitterPos(), SetSplitterProportion(), and SplitterProportion().

◆ m_SuppressGridChangeEvents

◆ m_unitEditor

PG_UNIT_EDITOR* PL_PROPERTIES_PANEL::m_unitEditor
private

Definition at line 48 of file pl_properties_panel.h.

Referenced by PL_PROPERTIES_PANEL(), and ~PL_PROPERTIES_PANEL().

◆ m_ValueChangeVetoed

bool PROPERTIES_PANEL::m_ValueChangeVetoed
inherited

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