[Lazarus] RFC: Selection Editors to extend handling of object inspector selections
Sven Barth
pascaldragon at googlemail.com
Sun Nov 17 14:06:20 CET 2019
Am 10.11.2019 um 22:26 schrieb Sven Barth:
> Hello together!
>
> I've got a RFC for a feature that allows to extend the IDE. It's based
> on something that Delphi supports as well: Selection Editors.
> Unlike Component Editors these are supposed to be used to interact
> with a specific selection in the designer and (in Delphi) allow the
> following extensions:
> - adding menu items for the context menu for the selection (like
> component editors)
> - add additional units when the component is dropped onto the form
> (though I wonder why that isn't part of component editors)
> - add or remove properties to/from the object inspector for the selection
>
> My current RFC only implements the last one and also a bit different
> than Delphi does cause they added that functionality only later (see
> below).
>
> Due to their dependencies Selection Editors live in the PropEdits unit
> and like component and property editors they are registered at an
> approbriate location (be it some Register function or a unit
> initialization). When the object inspector requests the properties it
> also checks all selection editors involved in the selection (included
> the parent classes) and calls the selection editor's FilterProperties
> method if GetAttributes contains seaFilterProperties (Delphi does not
> provide a GetAttributes method, instead it provides FilterProperties
> through an interface that needs to be implemented by a selection editor).
> FilterProperties receives both the current selection of the object
> inspector as well as the list of property editors. It is then free to
> add or remove property editors as it sees fit.
> The behavior when collecting the property editors is such that
> multiple FilterProperties methods might be called on the same
> selection, thus it might received an already filtered property editor
> list.
>
> I've attached a patch that implements selection editors
> (selection-editors.patch) as well as an example implementation for a
> component that Lazarus already supports and Delphi provides a
> selection editor for: TFlowPanel (tflowpanel-seledit.patch). For that
> component for each child control a virtual ControlIndex property is
> exposed which allows to easily change the order of the components in
> the object inspector instead of going through some collection editor.
> Also the Top and Left properties are removed as they aren't useful for
> such components. Delphi behaves the same here.
>
> Another example use would be TGridPanel which we don't have yet: it
> allows to implement the Row- and ColumnSpan properties on each child
> control of the panel.
>
> To work correctly I also had to adjust the object inspector a little
> bit (respect-parevertable.patch), cause it is not using only the
> virtual functions provided by TPropertyEditor: namely to respect the
> paRevertable attribute and only initialize and use the undo values if
> the property is deemed revertable. For demonstration purposes I've
> disabled the paRevertable attribute for the ControlIndex property
> editor, cause otherwise there'd be an exception when the object
> inspector tries to read the original value. It would be better if the
> object inspector would only call virtual methods of TPropertyEditor
> however or ones that can be easily faked (like I did by faking a
> TPropInfo entry, though that does not feel really nice either).
>
> Suggestions and criticism are welcome though I can't tell how much
> time I currently can and want to invest to improve this further. It
> might also need some step-by-step improvement of the existing
> TPropertyEditor interface to function smoothly.
Really? No further interest here? I don't want to put it on Mantis yet,
because I'm not yet sure whether everything is alright and Mantis is not
a discussion platform...
Regards,
Sven
More information about the lazarus
mailing list