Reputation: 27276
Refer to this prior question/answer combo of mine. It's describing how to create a property editor for the IDE.
I've created another property editor for a completely different purpose. In this case, it's a glyph character selector of type String
(because it could contain more than one glyph character). Unlike my other one in mentioned question/answer, this one is very specific to a particular property on a particular TCollectionItem
class of mine.
All is good, and I can invoke this property editor for this particular property. However, I have a dilemma. The property editor, by nature, is directly related to a font. The user may choose a character (glyph) from a particular font. My property editor has the facility to change the font, and browse the glyphs contained within that font.
This component of mine also has the facility to specify the font, in a separate TFont
property. The problem arises when it comes to the combination of both my Glyph
property and Font
property being used in the very same property editor. When I invoke this editor for the Glyph
property, it also needs to know the Font
which it needs to use. On the contrary, when user chooses a font and glyph character in this editor, it also needs to update both the Glyph
and Font
properties.
Long story short, PropertyB
depends on PropertyA
. If PropertyA
changes, then PropertyB
will have an entirely different set of possible values. So, whatever editor I install in the IDE needs to allow the user to change both PropertyA
and PropertyB
at the same time.
How can I make a property editor have access to more than one property?
Upvotes: 0
Views: 420
Reputation: 27276
Instead of a property editor, implement a component editor. Such a component editor will have access to the entire component, not just a single property.
Wrap both of your properties inside of a dedicated TPersistent
class, and then create a TClassProperty
property editor for this class instead. The individual properties will not actually invoke a property editor. Instead, their parent TPersistent
will invoke a combined property editor which has access to all the properties within this class. A good existing example is the TFont
editor.
Upvotes: 0
Reputation: 595981
TPropertyEditor
has a public GetComponent()
method that you can use to access the object(s) whose property is currently being edited (multiple objects with the same property can be edited at the same time, if the property editor allows it). Then you will have access to all of the other properties in the same object(s).
That being said, if your editor displays a pop-up dialog for editing, it should be implemented as a component editor instead of (or in addition to) a property editor. A property editor should edit only one property at a time, though it may have read-only dependancies on other properties. For instance, a Glyph
property editor that also edits the Font
property, and vice versa, is not a good design. But a component editor that edits both is perfectly acceptable.
Upvotes: 3