All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alee.extended.dock.WebDockablePane Maven / Gradle / Ivy

Go to download

WebLaf is a Java Swing Look and Feel and extended components library for cross-platform applications

There is a newer version: 2.2.1
Show newest version
/*
 * This file is part of WebLookAndFeel library.
 *
 * WebLookAndFeel library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * WebLookAndFeel library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with WebLookAndFeel library.  If not, see .
 */

package com.alee.extended.dock;

import com.alee.extended.window.TestFrame;
import com.alee.global.StyleConstants;
import com.alee.laf.WebLookAndFeel;
import com.alee.laf.button.WebToggleButton;
import com.alee.laf.label.WebLabel;
import com.alee.laf.panel.WebPanel;
import com.alee.laf.tabbedpane.TabbedPaneStyle;
import com.alee.laf.tabbedpane.WebTabbedPane;
import com.alee.laf.text.WebTextArea;
import com.alee.managers.style.StyleId;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
 * @author Mikle Garin
 */

public class WebDockablePane extends WebPanel
{
    private static final Color buttonsPaneBackground = new Color ( 240, 240, 240 );

    public WebDockablePane ()
    {
        super ( StyleId.dockablepane, new DockingPaneLayout () );
    }

    public DockingPaneLayout getActualLayout ()
    {
        return ( DockingPaneLayout ) getLayout ();
    }

    //    public void addDockableFrame ( final WebDockableFrame dockableFrame, final String position )
    //    {
    //        // todo
    //    }

    @Override
    protected void paintComponent ( final Graphics g )
    {
        super.paintComponent ( g );

        final Graphics2D g2d = ( Graphics2D ) g;
        final DockingPaneLayout layout = getActualLayout ();
        final DockingPaneInfo info = layout.getDockingPaneInfo ();

        final int x = info.hasLeftButtons ? info.leftButtonsPaneBounds.x + info.leftButtonsPaneBounds.width : info.rect.x;
        final int y = info.hasTopButtons ? info.topButtonsPaneBounds.y + info.topButtonsPaneBounds.height : info.rect.y;
        final int x2 = info.hasRightButtons ? info.rightButtonsPaneBounds.x - 1 : info.rect.x + info.rect.width - 1;
        final int y2 = info.hasBottomButtons ? info.bottomButtonsPaneBounds.y - 1 : info.rect.y + info.rect.height - 1;

        if ( info.hasTopButtons )
        {
            g2d.setPaint ( buttonsPaneBackground );
            g2d.fill ( info.topButtonsPaneBounds );
            g2d.setPaint ( StyleConstants.darkBorderColor );
            g2d.drawLine ( x, y, x2, y );
        }
        if ( info.hasLeftButtons )
        {
            g2d.setPaint ( buttonsPaneBackground );
            g2d.fill ( info.leftButtonsPaneBounds );
            g2d.setPaint ( StyleConstants.darkBorderColor );
            g2d.drawLine ( x, y, x, y2 );
        }
        if ( info.hasRightButtons )
        {
            g2d.setPaint ( buttonsPaneBackground );
            g2d.fill ( info.rightButtonsPaneBounds );
            g2d.setPaint ( StyleConstants.darkBorderColor );
            g2d.drawLine ( x2, y, x2, y2 );
        }
        if ( info.hasBottomButtons )
        {
            g2d.setPaint ( buttonsPaneBackground );
            g2d.fill ( info.bottomButtonsPaneBounds );
            g2d.setPaint ( StyleConstants.darkBorderColor );
            g2d.drawLine ( x, y2, x2, y2 );
        }
    }

    private static final ImageIcon top = new ImageIcon ( WebDockablePane.class.getResource ( "icons/dock_top_.png" ) );
    private static final ImageIcon left = new ImageIcon ( WebDockablePane.class.getResource ( "icons/dock_left_.png" ) );
    private static final ImageIcon right = new ImageIcon ( WebDockablePane.class.getResource ( "icons/dock_right_.png" ) );
    // private static ImageIcon bottom = new ImageIcon ( WebDockablePane.class.getResource ( "icons/dock_bottom_.png" ) );

    public static void main ( final String[] args )
    {
        //        WebButtonStyle.shadeWidth = 0;
        WebLookAndFeel.install ();


        final WebDockablePane pane = new WebDockablePane ();
        //        pane.getActualLayout ().setFramesMargin ( new Insets ( 2, 1, 1, 1 ) );

        pane.add ( new WebToggleButton ( "Top frame", top )
        {
            {
                setSelected ( true );
            }
        }, DockingPaneLayout.TOP_LEFT );
        pane.add ( new WebToggleButton ( "Test 2", top ), DockingPaneLayout.TOP_LEFT );
        pane.add ( new WebToggleButton ( "Test 3", top ), DockingPaneLayout.TOP_RIGHT );
        //
        pane.add ( new WebToggleButton ( left )
        {
            {
                setSelected ( true );
            }
        }, DockingPaneLayout.LEFT_TOP );
        pane.add ( new WebToggleButton ( left ), DockingPaneLayout.LEFT_BOTTOM );
        pane.add ( new WebToggleButton ( left ), DockingPaneLayout.LEFT_BOTTOM );
        //
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_TOP );
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_TOP );
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_TOP );
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_TOP );
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_BOTTOM );
        pane.add ( new WebToggleButton ( right ), DockingPaneLayout.RIGHT_BOTTOM );
        //
        pane.add ( new WebToggleButton ( "Test left", top ), DockingPaneLayout.BOTTOM_LEFT );
        pane.add ( new WebToggleButton ( "Test right", top ), DockingPaneLayout.BOTTOM_RIGHT );
        //        pane.add ( new WebToggleButton ( "Test 4", bottom ), DockingPaneLayout.BOTTOM_LEFT );
        //        pane.add ( new WebToggleButton ( "Test 5", bottom ), DockingPaneLayout.BOTTOM_RIGHT );
        //        pane.add ( new WebToggleButton ( "Test 6", bottom ), DockingPaneLayout.BOTTOM_RIGHT );

        pane.add ( createTopFrame (), DockingPaneLayout.TOP_FRAME );
        pane.add ( createLeftFrame (), DockingPaneLayout.LEFT_FRAME );
        //        pane.add ( new WebToggleButton ( "RIGHT" ), DockingPaneLayout.RIGHT_FRAME );
        //        pane.add ( new WebToggleButton ( "BOTTOM" ), DockingPaneLayout.BOTTOM_FRAME );

        pane.add ( createContent (), DockingPaneLayout.CONTENT );

        for ( final Component c : pane.getComponents () )
        {
            if ( c instanceof AbstractButton )
            {
                c.addMouseListener ( new MouseAdapter ()
                {
                    @Override
                    public void mousePressed ( final MouseEvent e )
                    {
                        if ( SwingUtilities.isMiddleMouseButton ( e ) )
                        {
                            pane.remove ( c );
                            pane.revalidate ();
                            pane.repaint ();
                        }
                    }
                } );
            }
        }

        TestFrame.show ( pane ).center ( 600, 500 );
    }

    private static Component createLeftFrame ()
    {
        final WebDockableFrame frame = new WebDockableFrame ( left, "Left frame" );
        frame.setFrameType ( FrameType.left );
        frame.add ( new WebTextArea ( "123" ) );
        //        frame.setPainter ( PopupManager.getPopupPainter ( PopupStyle.lightSmall ) );
        return frame;
    }

    private static Component createTopFrame ()
    {
        final WebDockableFrame frame = new WebDockableFrame ( top, "Top frame" );
        frame.setFrameType ( FrameType.top );
        frame.add ( new WebTextArea ( "123", 3, 0 ) );
        //        frame.setPainter ( PopupManager.getPopupPainter ( PopupStyle.lightSmall ) );
        return frame;
    }

    private static Component createContent ()
    {
        final WebTabbedPane content = new WebTabbedPane ( WebTabbedPane.TOP );
        content.setTabbedPaneStyle ( TabbedPaneStyle.attached );
        for ( int i = 0; i < 20; i++ )
        {
            content.addTab ( "Tab " + i, new WebLabel () );
        }
        return new WebPanel ( content );
        //        return new WebPanel ( PopupManager.getPopupPainter ( PopupStyle.lightSmall ), content );
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy