[Lazarus] Component editors and related

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
Hi all,

currently I am porting those JVCL components which look interesting to
me
(https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/jvcllaz/),
but at the moment I am stuck with the component editor of the
TJvOutlookBar. This is some kind of two-level vertical menu. The top
level is a list of TJvOutlookBarPage items, and each page has a list of
TJvOutlookbarButton items as second level. Both lists inherit from
TCollection. My problem is that in the component tree of the object
inspector I see only the page items, but not the button "sub-items". See
attached screen shot of Lazarus and the Delphi version for comparison.
How can I make the button subnodes appear in the component tree?

Another problem: The component comes with a ComponentEditor for the
entire class, which looks similar to that of a TCollection, but contains
a treeview to display the page-button relationships. After some
twiddling around I was able to make this work in Lazarus, i.e. when I
add nodes to the tree in the component editor the corresponding buttons
or pages are added to the control on the form designer; and when I
navigate in the component editor's tree the selected object follows in
the component tree and in the object inspector. But the opposite
direction does not work:  When I add a page or button in the object
inspector (by using the Pages and Buttons collection property editors)
the tree in the component editor is not updated. How can I do this?

Any hints greatly appreciated.
Werner



--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus

JvOutlookBar_Delphi.png (16K) Download Attachment
JvOutlookBar_Laz.png (21K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

vojtech.cihak

Hi,

 

ad 1: I never tried two level collection. Are they all published (both collections and their items)?

 

ad 2: You can do (in your component editor) something like:

 

var aHook: TPropertyEditorHook;

begin

  ...

  aHook:=nil;

      if not GetHook(aHook) then exit;

  ...

  //add or insert:

    AddedItem:=aComponent.Columns.Add;

    aHook.PersistentAdded(AddedItem, True);  //this notifies component tree

    aHook.SelectOnlyThis(AddedItem);   //this selects added object

  //deleting

   DeletedItem:=aComponent.Columns[aIndex];

   aHook.DeletePersistent(TPersistent(DeletedItem));   //this notifies component tree

 

V.   

 

______________________________________________________________
> Od: Werner Pamler via Lazarus <[hidden email]>
> Komu: Lazarus mailing list <[hidden email]>
> Datum: 25.04.2018 19:56
> Předmět: [Lazarus] Component editors and related
>

Hi all,

currently I am porting those JVCL components which look interesting to
me
(https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/jvcllaz/),
but at the moment I am stuck with the component editor of the
TJvOutlookBar. This is some kind of two-level vertical menu. The top
level is a list of TJvOutlookBarPage items, and each page has a list of
TJvOutlookbarButton items as second level. Both lists inherit from
TCollection. My problem is that in the component tree of the object
inspector I see only the page items, but not the button "sub-items". See
attached screen shot of Lazarus and the Delphi version for comparison.
How can I make the button subnodes appear in the component tree?

Another problem: The component comes with a ComponentEditor for the
entire class, which looks similar to that of a TCollection, but contains
a treeview to display the page-button relationships. After some
twiddling around I was able to make this work in Lazarus, i.e. when I
add nodes to the tree in the component editor the corresponding buttons
or pages are added to the control on the form designer; and when I
navigate in the component editor's tree the selected object follows in
the component tree and in the object inspector. But the opposite
direction does not work:  When I add a page or button in the object
inspector (by using the Pages and Buttons collection property editors)
the tree in the component editor is not updated. How can I do this?

Any hints greatly appreciated.
Werner




----------

--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus

--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
Am 25.04.2018 um 20:40 schrieb Vojtěch Čihák via Lazarus:

ad 1: I never tried two level collection. Are they all published (both collections and their items)?


Yes. And both collections are accessible in the object inspector: The JvOutlookBar has a property "Pages", the ellipsis button next to it opens the usual collection property editor which can be used to add, delete or rearrange pages. And when one of the pages is selected the object inspector displays the property "Buttons", again with an ellipsis button to open another collection property editor, now for the buttons. This part is working out of the box. The problem is the component tree which only shows the page nodes but no button nodes.

ad 2: You can do (in your component editor) something like:

 

var aHook: TPropertyEditorHook;

begin

  ...

  aHook:=nil;

      if not GetHook(aHook) then exit;

  ...

  //add or insert:

    AddedItem:=aComponent.Columns.Add;

    aHook.PersistentAdded(AddedItem, True);  //this notifies component tree

    aHook.SelectOnlyThis(AddedItem);   //this selects added object

  //deleting

   DeletedItem:=aComponent.Columns[aIndex];

   aHook.DeletePersistent(TPersistent(DeletedItem));   //this notifies component tree


This is for notification of the component tree by the component editor and this code is already there and working. What I want is notification of the component editor by the designer if pages or buttons are added while the component editor is open (the component editor is not modal).


--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
Am 25.04.2018 um 22:07 schrieb Werner Pamler via Lazarus:
Am 25.04.2018 um 20:40 schrieb Vojtěch Čihák via Lazarus:

ad 1: I never tried two level collection. Are they all published (both collections and their items)?


Yes. And both collections are accessible in the object inspector: The JvOutlookBar has a property "Pages", the ellipsis button next to it opens the usual collection property editor which can be used to add, delete or rearrange pages. And when one of the pages is selected the object inspector displays the property "Buttons", again with an ellipsis button to open another collection property editor, now for the buttons. This part is working out of the box. The problem is the component tree which only shows the page nodes but no button nodes.

I am getting the impression that this is a bug of the component tree. The listed page items inherit from TCollectionItem, not from TComponent. The component tree somehow must be instructed to look for another collection within each page colletionItem.

ad 2: You can do (in your component editor) something like:

 

var aHook: TPropertyEditorHook;

begin

  ...

  aHook:=nil;

      if not GetHook(aHook) then exit;

  ...

  //add or insert:

    AddedItem:=aComponent.Columns.Add;

    aHook.PersistentAdded(AddedItem, True);  //this notifies component tree

    aHook.SelectOnlyThis(AddedItem);   //this selects added object

  //deleting

   DeletedItem:=aComponent.Columns[aIndex];

   aHook.DeletePersistent(TPersistent(DeletedItem));   //this notifies component tree


This is for notification of the component tree by the component editor and this code is already there and working. What I want is notification of the component editor by the designer if pages or buttons are added while the component editor is open (the component editor is not modal).

I was able to solve this based on code I found in unit components/ideintf/fieldseditor. The key point is that handlers for GlobalDesignHook events/notifications must be added. BTW, there is a "GlobalDesignHook" and a "FDesigner.PropertyEditorHook" - are they the same, or: what is the difference?

--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
On Thu, 26 Apr 2018 14:33:15 +0200
Werner Pamler via Lazarus <[hidden email]> wrote:

>[...]there is a
> "GlobalDesignHook" and a "FDesigner.PropertyEditorHook" - are they the
> same, or: what is the difference?

They are the same.

Mattias
--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
In reply to this post by Free Pascal - Lazarus mailing list
On Wed, Apr 25, 2018 at 8:56 PM, Werner Pamler via Lazarus
<[hidden email]> wrote:
> currently I am porting those JVCL components which look interesting to me
> (https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/jvcllaz/),
> but at the moment I am stuck with the component editor of the TJvOutlookBar.

Please test with r57763.

Juha
--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Component editors and related

Free Pascal - Lazarus mailing list
Am 01.05.2018 um 20:54 schrieb Juha Manninen via Lazarus:
> Please test with r57763.

Excellent, works perfectly! Thank you.

--
_______________________________________________
Lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus