Package bibliothek.gui.dock.common.menu

Source Code of bibliothek.gui.dock.common.menu.CPreferenceMenuPiece

/*
* Bibliothek - DockingFrames
* Library built on Java/Swing, allows the user to "drag and drop"
* panels containing any Swing-Component the developer likes to add.
*
* Copyright (C) 2007 Benjamin Sigg
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
* Benjamin Sigg
* benjamin_sigg@gmx.ch
* CH - Switzerland
*/
package bibliothek.gui.dock.common.menu;

import java.awt.Component;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JMenuItem;

import bibliothek.extension.gui.dock.preference.DefaultPreferenceModel;
import bibliothek.extension.gui.dock.preference.PreferenceDialog;
import bibliothek.extension.gui.dock.preference.PreferenceModel;
import bibliothek.extension.gui.dock.preference.PreferenceTreeDialog;
import bibliothek.extension.gui.dock.preference.PreferenceTreeModel;
import bibliothek.gui.dock.common.CControl;
import bibliothek.gui.dock.common.CPreferenceModel;
import bibliothek.gui.dock.facile.menu.MenuPieceText;
import bibliothek.gui.dock.support.menu.BaseMenuPiece;

/**
* A menu piece that shows an entry for opening the preferences-dialog. The
* {@link PreferenceModel model} to show on the dialog can either be set
* explicitly using {@link #setModel(PreferenceModel)}, or else will be read
* from {@link CControl#getPreferenceModel()}.<br>
* Note: clients can use {@link #setup(CControl)} to ensure that the
* {@link CControl} has a model.
* @author Benjamin Sigg
*/
public class CPreferenceMenuPiece extends BaseMenuPiece{
  /** text for this menu */
  private MenuPieceText text;
 
  /**
   * Creates a new {@link CPreferenceMenuPiece}. Reads the model of <code>control</code>,
   * if <code>control</code> has no model then a new {@link PreferenceModel} will
   * be created and set.
   * @param control the control whose model will be shown
   * @return a new menu piece
   * @see CControl#getPreferenceModel()
   * @see CControl#setPreferenceModel(PreferenceModel)
   */
  public static CPreferenceMenuPiece setup( CControl control ){
    if( control.getPreferenceModel() == null )
      control.setPreferenceModel( new CPreferenceModel( control ));
   
    return new CPreferenceMenuPiece( control );
  }
 
  /** where to store the model */
    private CControl control;

    /** the model which is to be used on this dialog */
    private PreferenceModel model;

    private AbstractAction action = new AbstractAction(){
        public void actionPerformed( ActionEvent e ) {
          action();
        }
    };
   
    /**
     * Creates a new menu piece.
     * @param control the control for which this piece works, not <code>null</code>
     */
    public CPreferenceMenuPiece( CControl control ) {
      if( control == null )
        throw new IllegalArgumentException( "control must not be null" );
     
        this.control = control;
       
        text = new MenuPieceText( "PreferenceMenuPiece.text", this ){
      protected void changed( String oldValue, String newValue ){
        action.putValue( AbstractAction.NAME, newValue )
      }
    };
       
        add( new JMenuItem( action ) );
    }
   
    @Override
    public void bind(){
      super.bind();
      text.setController( control.getController() );
    }
   
    @Override
    public void unbind(){
      super.unbind();
      text.setController( null );
    }
   
    /**
     * Explicitly sets the model which will be shown on the dialog. If
     * <code>null</code> is set, then this menu will try to show
     * {@link CControl#getPreferenceModel()}.
     * @param model the model to use or <code>null</code>
     */
    public void setModel( PreferenceModel model ) {
    this.model = model;
  }
   
    /**
     * Gets the model which was explicitly set.
     * @return the model or <code>null</code>
     * @see #setModel(PreferenceModel)
     */
    public PreferenceModel getModel() {
    return model;
  }
   
    /**
     * Opens a dialog with the current {@link PreferenceModel}.
     */
    protected void action(){
      PreferenceModel model = this.model;
      if( model == null )
        model = control.getPreferenceModel();
      if( model == null )
        model = new DefaultPreferenceModel( control.getController() );
     
      Component owner = control.intern().getController().findRootWindow();
      control.getPreferences().load( model, false );
     
      if( model instanceof PreferenceTreeModel ){
        PreferenceTreeDialog.openDialog( (PreferenceTreeModel)model, owner );
      }
      else{
        PreferenceDialog.openDialog( model, owner );
      }
     
      control.getPreferences().store( model );
    }
}
TOP

Related Classes of bibliothek.gui.dock.common.menu.CPreferenceMenuPiece

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.