Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2008-11

Information about Docking

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Hans-Peter Diettrich

I've been looking at the docking feature(s) of Lazarus, and would like to know more about the current implementation. Where should I look for?

One of the most important question is about the general overview of the docking concept, from the technical point of view. I assume that there must exist one application-wide manager (singleton?), that manages all the related windows?

Does there exist another docking manager, apart from anchor docking? With sample code?

IMO anchor docking is a nice idea, but not very useful in practice. What will happen to such a (spiral...) layout, when the container form is resized? Not to mention other possible and existing problems...

The implementation (in Lazarus 0.26) seems to be very fragile. Even if I could run the sample project, I failed to make work even an clone of that project, not to mention a different project. Strange exceptions all over, when I only try to install an docking manager as done in the sample or described in the according docs :-(
Any chance that the trunk contains a more stable implementation?

What I want to achieve and contribute:

- Docking by drag&drop, at least for Windows and Linux. A proof of concept in the first place, I've been warned ;-)

- Old fashion (orthogonal/notebook) docking - if not yet implemented?

- Multiple editor windows and related explorers. This was my first idea, that lead me straight to the docking problems.

Which Lazarus revision (trunk/tag) should I use for my first steps? I also think that I must create my own (local) repository, so that I can share my modifications across various platforms (VM's). Any better idea?

DoDi

Reply by email

Paul Ishenin
to Hans-Peter Diettrich
Hans-Peter Diettrich wrote
I've been looking at the docking feature(s) of Lazarus, and would like to know more about the current implementation. Where should I look for?

At the ldocktree.pas unit and ofcource controls.pp.

Show quoted text 6 lines
One of the most important question is about the general overview of the docking concept, from the technical point of view. I assume that there must exist one application-wide manager (singleton?), that manages all the related windows? Does there exist another docking manager, apart from anchor docking?

Yes, TLazDockTree.

With sample code?

Use any delphi example.

IMO anchor docking is a nice idea, but not very useful in practice. What will happen to such a (spiral...) layout, when the container form is resized? Not to mention other possible and existing problems...

We have plans to use it in the IDE mostly.

What I want to achieve and contribute: - Docking by drag&drop, at least for Windows and Linux. A proof of concept in the first place, I've been warned ;-)

You can start with simple docking. You need to add ldocktree.pas into any of your uses sections to change DockManager class from dummy to working. Then create a delphi like example and start to play with it.

Most of things will work on windows. Drag/Dock will not work on linux because we cannot know when user start drag a window. Window title is owned by a window manager and gtk/qt does not report us about this event. Thus the first thing to implement is a special dock header which will be used on systems which cannot report us about titlebar drag.

Nobody looked at docking on OSX.

- Old fashion (orthogonal/notebook) docking - if not yet implemented?

Implemented but it was so long ago when I checked it.

- Multiple editor windows and related explorers. This was my first idea, that lead me straight to the docking problems.

This can be done when all docking will 100% work on simple applications. And Mattias had an idea to use anchor docking.

You can even try how it works in IDE. Open your
lazarus\ide\include\ide.inc file and add there:
{$define EnableIDEDocking}

Then recompile your IDE.

Which Lazarus revision (trunk/tag) should I use for my first steps? I also think that I must create my own (local) repository, so that I can share my modifications across various platforms (VM's). Any better idea?

Always use svn version if you want to send us patches. Get it here: http://svn.freepascal.org/svn/lazarus/trunk

Best regards,
Paul Ishenin.

Reply by email