Achieving ARMS layout

I happen to have liked the work of Chris as his work is featured in the screenshots.

This is going to be a long question mainly because I tried my best before i could ask and many of the answers provided to seemingly already answered questions either applied to the old API (and i couldn’t get things to work on this most recent) or the answer used Core and i couldn’t get things to work under Common.

First, here is how far i have gone. Just laying out the docks.

But i don’t know how to achieve the following:

1/ How to get the white background color as exaclty done by Chris? Image below for reference

2/ How to make the free floating docks.

3/ I failed to have the gradient for tabs and keep a cool grayish background for title bar and tabs without focus. How would that be done?

4/ Finally, if possible, how did he get this cool dock over the map?

I know this is a lot but i tried the best i could, just couldn’t get far. If within means, i’ll be the happiest guy if you could post snippets for the above 4 questions. ( Not essential to post full working code as that would make the answer very long. But if possible, even happier ).

Thanks
Best Regards

Don’t have time for a long answer, just this:

About the free floating Dockables: using the Common API will automatically enable them. The borders appear when installing a new DefaultScreenDockFactory with “underocated” set to “false”, installing the factory happens through the properties (CControl.setProperty) and the key “ScreenDockStation.WINDOW_FACTORY”.

About the panel over the map: this is some other library, nothing related to DockingFrames.

Do you know what LookAndFeel Chris used? I don’t, but many colors the framework use depend directly on the LookAndFeel.

I got the screenshot from the DockingFrames website - http://dock.javaforge.com/screens/image_19.png

My guess is he is using the Eclipse theme. That’s why i focused on ARMS because i was unable to get the white color instead of the default color. Is there a way to get the white color as on the screenshot?

If time permits, how about the gradient for tabs. On the screenshot, it is blue but on mine, i’m getting it uniform.

Thanks for the time you are taking to answer!!

Best Regards

Btw. I found the old thread where the image first appeared: here. Maybe it helps to find an e-mail addess of Chris, so you can ask him directly.

Thank you!

It appears he modified DefaultScreenDockWindowFactory and i’m not good at the framework internals, so this might take some time.

Thanks for all the help!!!

Kind Regards

Actually it should not be that hard :stuck_out_tongue:

factory.setUndecorated( false );

CControl control = ...
control.putProperty( ScreenDockStation.WINDOW_FACTORY, factory );```


About the colors: there is a map containing all the colors used by the framework. You can access the map with:
```CControl control = ..
ColorManager colors = control.getController().getColorManager();```
Now have a look at ArchGradientPainter, it has an annotation "ColorCodes". This annotation shows all the keys for the colors that are used by the tabs from the "colors" map. Feel free to play around with the colors.

I don't know how Chris made the white background, especially since every Component seems to be affected. I guess je did access the javax.swing.UIManager and replaced a color there. This is LookAndFeel-stuff in which I'm not that good, but google certainly can help there.

Hi, Sorry for the thread dig but I just stumbled on this while searching for something else.

Just in case anyone is still interested here is the factory class I use.


    public ClosableDockWindowFactory() {
        super();

        // Default to use a normal frame
        this.setKind(Kind.FRAME);
        this.setUndecorated(false);
    }

    // Ensure the close button will dismiss the dialog/frame
    @Override
    public ScreenDockWindow createWindow(ScreenDockStation station,
        WindowConfiguration win) {
        final ScreenDockWindow window = super.createWindow(station, win);
        if (window instanceof ScreenDockFrame && !isUndecorated()) {

            JFrame frame = ((ScreenDockFrame) window).getFrame();

            frame.setJMenuBar(getMenuBar());
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            frame.setBackground(Color.WHITE);

            frame.addWindowListener(new WindowAdapter() {
                // Prevents a memory leak by removing the dialog's
                // station dockable so it doesn't get orphaned
                @Override
                public void windowClosed(WindowEvent we) {
                    ScreenDockFrame frame = (ScreenDockFrame) window;
                    Dockable dockable = frame.getDockable();
                    if (dockable != null) {
                        frame.getStation().drag(dockable);
                    }
                }

            });

        } else if (window instanceof ScreenDockDialog && !isUndecorated()) {
            ((ScreenDockDialog) window).getDialog().setAlwaysOnTop(false);
            ((ScreenDockDialog) window).getDialog().setDefaultCloseOperation(
                JDialog.DISPOSE_ON_CLOSE);
            ((ScreenDockDialog) window).getDialog().addWindowListener(
                new WindowAdapter() {
                    // Prevents a memory leak by removing the dialog's
                    // station dockable so it doesn't get orphaned
                    @Override
                    public void windowClosed(WindowEvent we) {
                        ScreenDockDialog dialog = (ScreenDockDialog) window;
                        Dockable dockable = dialog.getDockable();
                        if (dockable != null) {
                            dialog.getStation().drag(dockable);
                        }
                    }
                });
        }

        return window;
    }
}

Chris