martin at percossi.com
martin at percossi.com
Mon Mar 19 16:28:26 PDT 2012
I have filed two feature requests, RT-20476 and RT-20477. It's the first time I've done this, so I may have gotten something wrong. The first essentially proposes making a mouse *press* select a tab, rather than a mouse *click*. RT-20477 references RT-20476 and requests the tab dragging functionality.
I've also implemented both of the requests; the results are satisfactory for my purposes. I won't bore you with the details, but I think I'd need to refactor the code for it to be "admissible". E.g. I use the controller containing the tab pane to intercept and forward the relevant new events (MOUSE_PRESSED, MOUSE_DRAG, MOUSE_RELEASED) rather than changing TabPane. There's a couple of other things that I had to change (in TabPaneSkin), but I did make an effort to keep a minimal footprint on the code.
Just to mention in passing, I've also made a slight alteration to the layoutChildren() method in TabPaneSkin which allows the tab pane headers to overlap slightly (the amount currently is 13 pixels, and it's rather shabbily hard-wired but that's easy to fix). That change makes use of the of the StackPane created (and anonymously implemented) in the constructor of TabPaneSkin to handle the front-to-back layout correctly, so you get the effect of tabs overlapping each other slightly, which I think looks nice. And you don't need to alter the components graphics components used by TabPaneSkin -- all you need is essentially a map from tab header to it's "index".
I'm happy to furnish you with my code for review, but I'll probably have to ask an expert on the TabPane code a couple of questions to make sure I didn't screw anything up. If you do want my code in some shape or form just let me know.
From: "Jonathan Giles" <jonathan.giles at oracle.com>
Sent: Thursday, March 15, 2012 4:50pm
To: martin at percossi.com
Cc: openjfx-dev at openjdk.java.net
Subject: Re: Draggable tabs
On 16/03/2012 5:25 a.m., martin at percossi.com wrote:
> My question: if I'm not mistaken, javafx.scene.control.Tab is not draggable. I'd like to be able to obtain the same behaviour as e.g. Chrome, where tabs can be rearranged by dragging the "handle". (At some point in the future, I want to extend this into a full-featured docking framework, where tabs can be pulled out of the main window and thereby create a new window. But we're getting ahead of ourselves.) I'd appreciate any pointers on how best to implement this functionality.
I would imagine writing your own solution would be quite difficult, as
the nodes are not exposed via any API. You could possibly find the node
via a lookup() call, but even then I'm not sure you'll get the visuals
If you are happy to wait, the best approach to get the TabPane/Tab API
to support this would be to file a feature request on the Jira tracker
If you are wanting this sooner, another option (after filing the Jira
RFE above) would be if you downloaded OpenJFX, reviewed the TabPaneSkin
source code, and added support in there directly. You could then provide
the patch to the OpenJFX project via the Jira issue and it could
possibly be integrated into a future release of JavaFX.
> Second question (speculative): Is it possible to get a "raw" window handle (i.e. in Microsoft Windows)? Basically, if you're writing a VST plugin host, you need to provide a parent window handle within which the VST plugin can stuff its GUI. In the worst case, this would create an entirely new window, but ideally, I would be able to get a raw window handle and "place" the GUI into some part of the JavaFX GUI. Am I asking for too much? ;)
I'll leave this to the glass team to answer.
More information about the openjfx-dev