[Lazarus] Dockable IDE
DrDiettrich1 at aol.com
Sun Mar 18 02:59:55 CET 2012
Mattias Gaertner schrieb:
> On Sat, 17 Mar 2012 17:40:58 +0100
> Hans-Peter Diettrich <DrDiettrich1 at aol.com> wrote:
>> Mattias Gaertner schrieb:
>>> I'm currently trying to fix some 0.99 bugs. I hope to find some time for
>>> docking too. But it is a complex topic, has a big risk of breaking
>>> things and needs a lot of time.
>> I'd like to assist, if you give me some clues. I think that you know
>> that, so I wonder why you want to do everything yourself?
> Maybe you can help.
> I would start with the annoying focus problems. For example when
> closing a source editor file, the cursor is not shown. This happens
> under linux/gtk2 and carbon. I fixed it some time ago for qt.
There exist more problems with switching between files, in detail with
multiple editor windows. Frequently the CodeExplorer fails to notice the
focus switch to a different window, and continues to show the
information for the unit in the old window.
I also found a couple of ShowForm calls for every user action
(keystroke, code completion, paste...), which IMO should not occur.
> Another one is when a lpk is opened under linux/gtk2 the
> package editor window is behind the source editor, but the pe is
> focused. You have to focus the se and then the pe to bring the pe to
> top. Sometimes this happens with the search results too. My guess
> is the bug is in the IDE code.
See above, ShowForm is called too often, from different places. This
should be "normalized" somehow. I understand that there exists a
precedence problem with e.g. pe/se, which should be handled in a well
> Then I would implement some theming for the anchordocking headers.
> And finish the options for hiding the headers.
IMO the IDE should not rely on a specific docking model, or it should be
restricted to anchordocking only. This decision will influence the
remaining code. Please note that in a docked IDE it may be impossible to
have distinct windows on-top at the same time, depending on how these
are actually docked. At least I prefer docking different forms into
notebooks, from which I can e.g. select Object/Procject inspector,
depending on the current activity (editing forms or source code).
> Then fix the page restore bug.
> Then saving/restoring the bounds of the floating windows
AnchorDocking is not the way I'd go in the IDE. If this is your
preferred model, I cannot assist much.
> Then find a way to handle the tricky main ide bar. But that is
> really complex.
IMO the MainBar is not tricky, it only deserves a real structure
> There are more issues, but I guess if the above points are done,
> docking would work well enough for a release.
I'd suggest a common base class for all IDE windows, best including the
debug windows. Then much state information can be saved with every
window, no lookups of FormCreators or other additional data structures
all over. I already implemented such a base class for testing purposes,
with no real problems, it only will affect a couple of form units (all
IDE forms). Once the base class is defined, e.g. in IDEWindowIntf, it
can be decided which information should go into that common class. Then
e.g. ShowForm will become a method of that class, with no indirections
through FormCreators or other global procedures, and a common ShowOnTop
handler can be implemented for all IDE forms, which switches the focus
etc. only when really required.
More information about the Lazarus