On Tue, 6 Apr 2010, Hans-Peter Diettrich wrote:

Michael Van Canneyt schrieb:

I have been thinking about layout managers. I think that this should be an add-on to the currently existing layouting (to preserve delphi compatibility): I imagine a component that one drops on a form. One sets the 'target' control (control whose children should be managed) and some properties.

I imagine a Layout property for TWinControls, or an intermediate layer, that is initialized to the Delphi compatible manager. That property then can be assigned any other layout manager.

That is the same as what I am saying, only the arrow points in the opposite
direction.  I want to avoid this extra TWinControl property.

I wonder how you want LCL code to use a dropped layout component. When no predefined property exists, every TWinControl had to be searched for an according component, whenever a layout method or property shall be accessed.

I would use a mechanism similar to the datalink. As soon as you tell the layout manager to manage a certain control, a hook is installed in the
control.


With a dedicated LayoutManager property, all anchor-docking related stuff could be moved from TWinControl into the AnchoredLayoutManager, and DockManager could be replaced (or merged with) the LayoutManager. In further steps the DockClient list could be removed, the Controls list can be used instead. Delphi compatibility can be maintained by delegation to the still existing elements.

The reason I don't want to introduce the layoutmanager property is that it
simply does not make sense for all TWinControls. a TEdit does not need a
layoutmanager, only the parent of the TEdit needs one.

The layout should take into account the standard TControl properties, including alignment, constraints and anchors. It also should use the layout managers of child controls, for forward/backward transfer of autosize information.

This is *exactly* what I want to avoid.

- Either one uses the 'ordinary' delphi properties, and only those.

This shall be the default, when no dedicated manager is specified for a TWinControl.

- Or one uses layouters.

When a special manager is installed for a TWinControl.

But not a mixture of both, which will be a source of implementation/usage
problems and confusion.

What should be complicated, when the Delphi layout manager is one of multiple available managers? How do you want to implement different layout management for parts of a form?

Simply drop 2 layouters, and point them to the right parts of the form.


IMO the autosize woes only result from the overcomplicated handling of multiple layout models at the same time (Delphi compatible and Lazarus anchor "docking" management).

Keep it simple.

I *only* want to simplify everything. When every TWinControl now can have an DockManager, it will have an LayoutManager after the redesign. That manager will allow to manage the layout of every TWinControl independently, and the extra code for resizing DockSites can be removed.

The default manager will be the Delphi compatible one, that can continue to reside in TWinControl, when no other manager has been installed; or it can be moved into the TLayoutManager base class, or into a descendant of that class.

Once this split works correctly, you can always later try to create a TLayout descendent which tries to mimic Delphi behaviour, taking into account all TControl/TWincontrol properties; Then remove all old code
and insert the new layouter.

In my opinion, this approach guarantees has a bigger chance of success than immediatly trying to do everything at once...

I don't understand what you want to separate - but perhaps we mean the same thing?

I think we mean the same thing, it's just some details that are different... :-)

Michael.

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to