[Lazarus] IDE docking flaw?
Mattias Gaertner
nc-gaertnma at netcologne.de
Tue Jun 7 09:24:36 CEST 2011
On Tue, 07 Jun 2011 02:07:05 +0200
Hans-Peter Diettrich <DrDiettrich1 at aol.com> wrote:
> Mattias Gaertner schrieb:
>
> >> A DockMaster has no idea of "preferred positions" etc., it only
> >> remembers the layout as configured by the user. It's up to the standard
> >> IDE procedures to position new forms to their configured places.
> >
> > The IDE package that installs the dock master can provide
> > default layouts.
>
> Which are selectable how?
You gave the answer yourself:
>[...]as in Delphi or my MiniIDE example :-)
>[...]
> As you already mentioned, Show can have many meanings WRT siblings and
> parents. I wonder if there is a legitimate expectation, that Show (or
> ShowControl, BringToFront...) would *not* make visible components with
> more than one Parent.
I don't know. But we don't break compatibility without need. And in
this case we can simply add a function with another name, maybe a
better one.
> >>>> ShowControl already is recursive, i.e. parents become visible.
> >>>> An added parameter with a default value doesn't break anything, IMO.
> >>> ShowControl is a protected virtual method. Adding a default parameter
> >>> changes the signature.
> >> Every Delphi project must be recompiled by Lazarus, so that added
> >> default parameters require no changes to the code.
> >
> > Override breaks.
>
> Since only TWinControls can override ShowControl, such components have
> to be adopted to LCL conventions in any case, before they can be used in
> Lazarus.
There are LCL applications. ShowControl existed since revision 5536 in
the LCL. You can find out such facts with svn blame.
>[...]
> [1] The DockMaster interface and usage results in some minor problems,
> which can be discussed separately. E.g. the current workflow requires
> that all dockable forms are wrapped into floating sites, because it's
> unknown to MakeDockable whether the form is really floating, or will be
> docked afterwards by the DockMaster. This can be seen in the console
> log, where floating sites are created and destroyed during IDE startup.
Do you mean MakeIDEWindowDockable?
At the moment this is not called by the IDE.
> >> If you want to go into details, we can collect ideas for more layout
> >> manager features, and then implement these in the IDE. When tasks remain
> >> to be done in an DockMaster, the interface should be updated and
> >> documented accordingly.
> >
> > How do you want to separate the layout manager from the dockmaster?
> > Just look at the two existing implementations of dockmasters. They use
> > very different layouts.
>
> Every DockMaster *is* a layout manager, which *replaces* the simple IDE
> layout Save/Restore. Only new windows, which the user never made visible
> before, are placed by the IDE. Their final (user defined) placement
> becomes part of the layout, when the IDE terminates (CloseAllWindows).
So does the TIDEAnchorDockMaster.
> BTW the SimpleLayout should *not* remember the bounds of *docked* forms,
> instead it should retain their *undocked* bounds, for use when such a
> form is undocked later.
That's just my preference: When a form is undocked it should not move.
You can send me a patch to make this optional.
> And the Options Windows page should *always* show the window placement
> frame, so that the user can adjust at least the extent of (actually or
> later) undocked forms, and can move misplaced forms into view, after the
> monitor count or screen resolution has changed.
I added an option to TIDEDockMaster.
> I've improved TScreen
> and ShowForm already, so that my ShowForm will force all forms into the
> monitor bounds. [Patch available on demand]
Have you tested this under Linux/gtk2?
>[...]
> I can help myself, as mentioned above. But I cannot help when my bug
> reports and patches are not even *recognized* by the Lazarus team :-(
I'm sorry for that. But these patches require some time to check, which
I don't have at the moment.
> >>>>>> [...]This means that a DockMaster can restore the
> >>>>>> complete IDE layout, when e.g. called from
> >>>>>> IDEWindowCreators.RestoreSimpleLayout.
> >>> That is a simple for loop. It does not create the forms in the right
> >>> order.
> >> What "order"?
> >
> > For example parents before children.
>
> I meant: RestoreSimpleLayout should delegate *everything* to an
> installed DockMaster,
It is not called when there is a dock master installed.
> and do nothing by itself, then. Only *one* layout
> manager can be active at any time,
Correct.
> everything else is asking for
> trouble. For that purpose I'm missing Save/Restore methods in
> TIDEDockMaster, dunno how a DockMaster currently is told to save/restore
> a layout :-(
See the unit RegisterAnchorDocking as example:
LazarusIDE.AddHandlerOnIDERestoreWindows(@IDEAnchorDockMaster.OnIDERestoreWindows);
LazarusIDE.AddHandlerOnProjectClose(@IDEAnchorDockMaster.OnProjectClose);
See here for other events:
http://wiki.lazarus.freepascal.org/Extending_the_IDE#Project_events
>[...]
Mattias
More information about the Lazarus
mailing list