Package util.ui.view

Source Code of util.ui.view.SplitView

/*
* TV-Browser
* Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org)
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* CVS information:
*  $RCSfile$
*   $Source$
*     $Date: 2010-06-28 19:33:48 +0200 (Mon, 28 Jun 2010) $
*   $Author: bananeweizen $
* $Revision: 6662 $
*/

package util.ui.view;

import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.BorderFactory;
import javax.swing.JSplitPane;

import tvbrowser.ui.mainframe.MainFrame;
import util.settings.Property;


public class SplitView extends AbstractView {

  private Component mComponent;
  public SplitView() {
  }

  public void setComponents(Component[] components) {

    if (components.length == 1) {
      mComponent = components[0];
    } else if (components.length == 2) {
      final JSplitPane splitPane = new JSplitPane();
      splitPane.setContinuousLayout(true);
      splitPane.setOneTouchExpandable(true);
      splitPane.setLeftComponent(components[0]);
      splitPane.setRightComponent(components[1]);
      splitPane.setBorder(BorderFactory.createEmptyBorder());
      splitPane.addPropertyChangeListener("dividerLocation",
          new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
              if(!MainFrame.isStarting()) {
                int oldValue = ((Integer) evt.getOldValue()).intValue();
                int dividerLocation = ((Integer) evt.getNewValue()).intValue();
                SplitViewProperty prop = (SplitViewProperty) getProperty();
                int fixedWidth;
                if (prop.getLeftComponentFixed()) {
                  fixedWidth = dividerLocation;
                } else {
                  int width = mComponent.getWidth();
                  int height = mComponent.getHeight();
                  fixedWidth = (prop.getVerticalSplit() ? height : width)
                      - dividerLocation;
                }
                if ((oldValue >= 0) && (fixedWidth >= 0)
                    && (prop.getFixedComponentWidth() != fixedWidth)) {
                  prop.setFixedComponentWidth(fixedWidth);
                  update();
                }
              }
            }
          });
      mComponent = splitPane;
    } else {
      throw new IllegalArgumentException("invalid number of components: "
          + components.length);
    }
  }

  public void update() {
      ViewProperty properties = getProperty();

      onPropertiesChanged(properties);
  }

  protected void onPropertiesChanged(ViewProperty properties) {
    if (mComponent instanceof JSplitPane && properties instanceof SplitViewProperty) {
      JSplitPane splitPane = (JSplitPane)mComponent ;
      SplitViewProperty prop = (SplitViewProperty)properties;

      if (prop.getLeftComponentFixed()) {
        splitPane.setResizeWeight(0.0);
      }
      else {
        splitPane.setResizeWeight(1.0);
      }
      splitPane.setOrientation(prop.getVerticalSplit()?JSplitPane.VERTICAL_SPLIT:JSplitPane.HORIZONTAL_SPLIT);

      int abs = prop.getFixedComponentWidth();
     
      if (prop.getLeftComponentFixed()) {
        splitPane.setDividerLocation(abs);
      }
      else {
        int width = mComponent.getWidth();
        int height = mComponent.getHeight();
        int dividerLocation = (prop.getVerticalSplit()?height:width) - abs;
        splitPane.setDividerLocation(dividerLocation);
      }
    }
  }

  public Component getContent() {
    return mComponent;
  }

  public void storeProperties() {
    Property property = getProperty();
    if (property instanceof SplitViewProperty && mComponent instanceof JSplitPane && !MainFrame.isStarting()) {
      JSplitPane splitPane = (JSplitPane)mComponent;
      SplitViewProperty prop = (SplitViewProperty)property;
      Component comp;
      if (prop.getLeftComponentFixed()) {
        comp = splitPane.getLeftComponent();
      }
      else {
        comp = splitPane.getRightComponent();
      }

      if (comp != null) {
        if (prop.getVerticalSplit()) {
          prop.setFixedComponentWidth(comp.getHeight());
        }
        else {
          if(prop.getLeftComponentFixed()) {
            prop.setFixedComponentWidth(comp.getWidth());
          } else {
            prop.setFixedComponentWidth(comp.getWidth() + splitPane.getDividerSize());
          }
        }
      }
    }

  }
}
TOP

Related Classes of util.ui.view.SplitView

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.