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

weka.gui.PropertyDialog Maven / Gradle / Ivy

Go to download

The Waikato Environment for Knowledge Analysis (WEKA), a machine learning workbench. This version represents the developer version, the "bleeding edge" of development, you could say. New functionality gets added to this version.

There is a newer version: 3.9.6
Show newest version
/*
 *   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 3 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, see .
 */

/*
 *    PropertyDialog.java
 *    Copyright (C) 1999-2012 University of Waikato, Hamilton, New Zealand
 *
 */

package weka.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyEditor;

import javax.swing.JDialog;
import javax.swing.JInternalFrame;

/** 
 * Support for PropertyEditors with custom editors: puts the editor into
 * a separate frame.
 *
 * @author Len Trigg ([email protected])
 * @version $Revision: 15302 $
 */
public class PropertyDialog
  extends JDialog {

  /** for serialization. */
  private static final long serialVersionUID = -2314850859392433539L;

  /** The property editor. */
  private PropertyEditor m_Editor;

  /** The custom editor component. */
  private Component m_EditorComponent;
  
  /**
   * Creates the editor frame - only kept for backward-compatibility.
   *
   * @param pe 		the PropertyEditor
   * @param x 		initial x coord for the frame
   * @param y 		initial y coord for the frame
   * @deprecated 	instead of this constructor, one should use the constructors
   * 			with an explicit owner (either derived from 
   * 			java.awt.Dialog or from 
   * 			java.awt.Frame) or, if none available,
   * 			using (Frame) null as owner.
   */
  public PropertyDialog(PropertyEditor pe, int x, int y) {
    this((Frame) null, pe, x, y);
    setVisible(true);
  }
  
  /**
   * Creates the (screen-centered) editor dialog. The dialog is automatically
   * modal in case the owner is non-null.
   *
   * @param owner	the dialog that opens this dialog
   * @param pe 		the PropertyEditor
   */
  public PropertyDialog(Dialog owner, PropertyEditor pe) {
    this(owner, pe, -1, -1);
  }
  
  /**
   * Creates the editor dialog at the given position. The dialog is automatically
   * modal in case the owner is non-null.
   *
   * @param owner	the dialog that opens this dialog
   * @param pe 		the PropertyEditor
   * @param x 		initial x coord for the dialog
   * @param y 		initial y coord for the dialog
   */
  public PropertyDialog(Dialog owner, PropertyEditor pe, int x, int y) {
    super(owner, pe.getClass().getName(), ModalityType.DOCUMENT_MODAL);
    initialize(pe, x, y);
  }
  
  /**
   * Creates the (screen-centered) editor dialog. The dialog is automatically
   * modal in case the owner is non-null.
   *
   * @param owner	the frame that opens this dialog
   * @param pe 		the PropertyEditor
   */
  public PropertyDialog(Frame owner, PropertyEditor pe) {
    this(owner, pe, -1, -1);
  }
  
  /**
   * Creates the editor dialog at the given position. The dialog is automatically
   * modal in case the owner is non-null.
   *
   * @param owner	the frame that opens this dialog
   * @param pe 		the PropertyEditor
   * @param x 		initial x coord for the dialog
   * @param y 		initial y coord for the dialog
   */
  public PropertyDialog(Frame owner, PropertyEditor pe, int x, int y) {
    super(owner, pe.getClass().getName(), ModalityType.DOCUMENT_MODAL);
    
    initialize(pe, x, y);
  }

  /**
   * We need to extend the dispose method so that the member variables are set to null and
   * the corresponding objects can be garbage collected.
   */
  @Override
  public void dispose() {
    m_Editor = null;
    m_EditorComponent = null;
    super.dispose();
  }

  /**
   * Initializes the dialog.
   *
   * @param pe 		the PropertyEditor
   * @param x 		initial x coord for the dialog
   * @param y 		initial y coord for the dialog
   */
  protected void initialize(PropertyEditor pe, int x, int y) {
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
	e.getWindow().dispose();
      }
    });
    getContentPane().setLayout(new BorderLayout());

    m_Editor = pe;
    m_EditorComponent = pe.getCustomEditor();
    getContentPane().add(m_EditorComponent, BorderLayout.CENTER);

    pack();
    
    int screenWidth = getGraphicsConfiguration().getBounds().width;
    int screenHeight = getGraphicsConfiguration().getBounds().height;

    // adjust height to a maximum of 95% of screen height
    if (getHeight() > (double) screenHeight * 0.95)
      setSize(getWidth(), (int) ((double) screenHeight * 0.95));
    
    if ((x == -1) && (y == -1)) {
      setLocationRelativeTo(getOwner());
    }
    else {
      // adjust position if necessary
      if (x + getWidth() > screenWidth)
	x = screenWidth - getWidth();
      if (y + getHeight() > screenHeight)
	y = screenHeight - getHeight();
      setLocation(x, y);
    }
  }

  /**
   * Gets the current property editor.
   *
   * @return a value of type 'PropertyEditor'
   */
  public PropertyEditor getEditor() {
    return m_Editor;
  }

  /**
   * Tries to determine the frame this panel is part of.
   * 
   * @param c		the container to start with
   * @return		the parent frame if one exists or null if not
   */
  public static Frame getParentFrame(Container c) {
    Frame	result;
    Container	parent;
    
    result = null;
    
    parent = c;
    while (parent != null) {
      if (parent instanceof Frame) {
	result = (Frame) parent;
	break;
      }
      else {
	parent = parent.getParent();
      }
    }
    
    return result;
  }

  /**
   * Tries to determine the internal frame this panel is part of.
   * 
   * @param c		the container to start with
   * @return		the parent internal frame if one exists or null if not
   */
  public static JInternalFrame getParentInternalFrame(Container c) {
    JInternalFrame	result;
    Container		parent;
    
    result = null;
    
    parent = c;
    while (parent != null) {
      if (parent instanceof JInternalFrame) {
	result = (JInternalFrame) parent;
	break;
      }
      else {
	parent = parent.getParent();
      }
    }
    
    return result;
  }

  /**
   * Tries to determine the dialog this panel is part of.
   * 
   * @param c		the container to start with
   * @return		the parent dialog if one exists or null if not
   */
  public static Dialog getParentDialog(Container c) {
    Dialog	result;
    Container	parent;
    
    result = null;
    
    parent = c;
    while (parent != null) {
      if (parent instanceof Dialog) {
	result = (Dialog) parent;
	break;
      }
      else {
	parent = parent.getParent();
      }
    }
    
    return result;
  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy