Package de.timefinder.core.ui.tabbed

Source Code of de.timefinder.core.ui.tabbed.TabbedApplicationPage

/*
*  Copyright 2009 original author
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*  under the License.
*/
package de.timefinder.core.ui.tabbed;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.springframework.richclient.application.PageComponent;
import org.springframework.richclient.application.PageLayoutBuilder;
import org.springframework.richclient.application.support.AbstractApplicationPage;
import org.springframework.richclient.util.PopupMenuMouseListener;

/**
* <code>ApplicationPage</code> implementation that puts the <code>PageComponent</code>s
* in a <code>JTabbedPane</code>.
*
* @author Peter De Bruycker
*/
public class TabbedApplicationPage extends AbstractApplicationPage implements PageLayoutBuilder {

    private JTabbedPane tabbedPane;
    private List components = new ArrayList();
    private int tabPlacement = -1;
    private int tabLayoutPolicy = -1;
    private boolean addingComponent;

    protected JComponent createControl() {
        tabbedPane = new JTabbedPane();
        if (tabPlacement != -1) {
            tabbedPane.setTabPlacement(tabPlacement);
        }
        if (tabLayoutPolicy != -1) {
            tabbedPane.setTabLayoutPolicy(tabLayoutPolicy);
        }

        tabbedPane.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent e) {
                // if we're adding a component, ignore change of active component
                if (!addingComponent && tabbedPane.getSelectedIndex() >= 0) {
                    setActiveComponent(getComponent(tabbedPane.getSelectedIndex()));
                }
            }
        });
        JPopupMenu popup = new JPopupMenu();
        JMenuItem close = new JMenuItem("Close");
        close.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                close(getComponent(tabbedPane.getSelectedIndex()));
            }
        });
        popup.add(close);
        tabbedPane.addMouseListener(new PopupMenuMouseListener(popup));

        this.getPageDescriptor().buildInitialLayout(this);

        return tabbedPane;
    }

    protected void updatePageComponentProperties(PageComponent pageComponent) {
        int index = indexOf(pageComponent);

        tabbedPane.setIconAt(index, pageComponent.getIcon());
        tabbedPane.setTitleAt(index, pageComponent.getDisplayName());
        tabbedPane.setToolTipTextAt(index, pageComponent.getCaption());
    }

    public void addView(String viewDescriptorId) {
        showView(viewDescriptorId);
    }

    protected void doAddPageComponent(PageComponent pageComponent) {
        try {
            addingComponent = true;
            components.add(pageComponent);
            tabbedPane.addTab(pageComponent.getDisplayName(), pageComponent.getIcon(),
                    pageComponent.getContext().getPane().getPageComponent().getControl(),
                    pageComponent.getCaption());
        } finally {
            addingComponent = false;
        }
    }

    protected void doRemovePageComponent(PageComponent pageComponent) {
        tabbedPane.removeTabAt(indexOf(pageComponent));
        components.remove(pageComponent);
    }

    protected boolean giveFocusTo(PageComponent pageComponent) {
        if (!components.contains(pageComponent)) {
            return false;
        }

        tabbedPane.setSelectedIndex(indexOf(pageComponent));
        return true;
    }

    private int indexOf(PageComponent component) {
        return components.indexOf(component);
    }

    private PageComponent getComponent(int index) {
        return (PageComponent) components.get(index);
    }

    public void setTabPlacement(int tabPlacement) {
        this.tabPlacement = tabPlacement;
    }

    public void setTabLayoutPolicy(int tabLayoutPolicy) {
        this.tabLayoutPolicy = tabLayoutPolicy;
    }
}
TOP

Related Classes of de.timefinder.core.ui.tabbed.TabbedApplicationPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.