Package de.sciss.eisenkraut.net

Source Code of de.sciss.eisenkraut.net.PlugInWindow

/*
*  PlugInWindow.java
*  Eisenkraut
*
*  Copyright (c) 2004-2014 Hanns Holger Rutz. All rights reserved.
*
*  This software is published under the GNU General Public License v3+
*
*
*  For further information, please contact Hanns Holger Rutz at
*  contact@sciss.de
*/

package de.sciss.eisenkraut.net;

import java.awt.Component;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.awt.event.WindowListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.Action;
import javax.swing.JComponent;

import de.sciss.app.AbstractApplication;
import de.sciss.common.AppWindow;
import de.sciss.common.BasicApplication;
import de.sciss.common.BasicMenuFactory;
import de.sciss.common.ShowWindowAction;

//import de.sciss.swingosc.ContentPane;
//import de.sciss.swingosc.ScrollPane;

public class PlugInWindow
extends AppWindow
{
  public static final int  FLAG_UNDECORATED  = 0x01;
  public static final int  FLAG_SCROLLPANE    = 0x02;
  public static final int  FLAG_NORESIZE    = 0x04;

  private final ShowWindowAction  actionShowWindow;
  private final BasicMenuFactory  mf;
 
  private final Map        winL    = new HashMap();
//  private final Map        winFocusL  = new HashMap();

  private final JComponent    topView;

  public PlugInWindow( String title, Rectangle cocoaBounds, int flags )
  {
    super( SUPPORT );
    actionShowWindow  = new ShowWindowAction( this );
    mf          = ((BasicApplication) AbstractApplication.getApplication()).getMenuFactory();
    mf.addToWindowMenu( actionShowWindow )// MUST BE BEFORE INIT()!!
    init();
    setTitle( title )// needs to be after init. WHY?

//    if( (flags & FLAG_UNDECORATED) != 0 ) {
//      setUndecorated( true );
//    }
    if( (flags & FLAG_NORESIZE) != 0 ) {
      setResizable( false );
    }
    try {
      final ClassLoader cl = OSCRoot.getInstance().getGUI().getSwingOSC().getClass().getClassLoader();
      topView    = (JComponent) Class.forName( "de.sciss.swingosc.ContentPane", true, cl ).getConstructor( new Class[] { Boolean.TYPE }).newInstance( new Object[] { new Boolean( (flags & FLAG_SCROLLPANE) == 0) });
      if( (flags & FLAG_SCROLLPANE) != 0 ) {
//        topView    = new ContentPane( false );
//        final JScrollPane scrollPane = new ScrollPane( topView ); // ...SCROLLBAR_AS_NEEDED
        final JComponent scrollPane = (JComponent) Class.forName( "de.sciss.swingosc.ScrollPane", true, cl ).getConstructor( new Class[] { Component.class }).newInstance( new Object[] { topView });
//        scrollPane.setViewportBorder( null );
//        scrollPane.setBorder( null );
        setContentPane( scrollPane );
      } else {
//        topView    = new ContentPane( true );
        setContentPane( topView );
      }
    }
    catch( Exception e ) {
      mf.removeFromWindowMenu( actionShowWindow );
      e.printStackTrace();
      throw new IllegalStateException();
    }

    topView.setPreferredSize( cocoaBounds.getSize() );
    pack()// frame is made displayable
    final Rectangle screenBounds = getWindow().getGraphicsConfiguration().getBounds();
    final Insets insets = getInsets();
    setLocation( new Point(
        screenBounds.x + cocoaBounds.x - insets.left,
        (screenBounds.y + screenBounds.height) - (cocoaBounds.y + cocoaBounds.height) - insets.top ));
  }
 
//  public JComponent getTopView()
//  {
//    return topView;
//  }

  public void setCocoaBounds( Rectangle r )
  {
    final Rectangle  screenBounds  = getWindow().getGraphicsConfiguration().getBounds();
    final Insets  insets      = getInsets();
   
    setBounds( new Rectangle(
        screenBounds.x + r.x - insets.left,
        (screenBounds.y + screenBounds.height) - (r.y + r.height) - insets.top,
        r.width + (insets.left + insets.right),
        r.height + (insets.top + insets.bottom) ));
  }
 
  public void addComponentListener( ComponentListener l )
  {
    getWindow().addComponentListener( l );
  }
 
  public void removeComponentListener( ComponentListener l )
  {
    getWindow().removeComponentListener( l );
  }

  protected boolean alwaysPackSize()
  {
    return false;
  }
 
  public void setTitle( String title )
  {
    super.setTitle( title );
    actionShowWindow.putValue( Action.NAME, title );
  }

  public void dispose()
  {
    mf.removeFromWindowMenu( actionShowWindow );
    actionShowWindow.dispose();
    super.dispose();
  }
 
  protected WindowEvent windowEvent( Event e )
  {
//    return new WindowEvent( e.getWindow(), e.getID() );
// THROWS NULL SOURCE:
//    return new WindowEvent( null, e.getID() );  // dirty

    return null// extra cheesy
  }
 
  public void addWindowListener( final WindowListener wl )
  {
    final Listener l;
   
    l = new Adapter() {
      public void windowOpened( Event e )
      {
        wl.windowOpened( windowEvent( e ));
      }

      public void windowClosing( Event e )
      {
        wl.windowClosing( windowEvent( e ));
      }

      public void windowClosed( Event e )
      {
        wl.windowClosed( windowEvent( e ));
      }

      public void windowIconified( Event e )
      {
        wl.windowIconified( windowEvent( e ));
      }
     
      public void windowDeiconified( Event e )
      {
        wl.windowIconified( windowEvent( e ));
      }

      public void windowActivated( Event e )
      {
        wl.windowIconified( windowEvent( e ));
      }

      public void windowDeactivated( Event e )
      {
        wl.windowIconified( windowEvent( e ));
      }
    };
   
    addListener( l );
    winL.put( wl, l );
  }
 
  public void removeWindowListener( WindowListener wl )
  {
    final Listener l = (Listener) winL.remove( wl );
    removeListener( l );
  }
 
  public void addWindowFocusListener( WindowFocusListener l )
  {
    // XXX nothing
  }

  public void removeWindowFocusListener( WindowFocusListener l )
  {
    // XXX nothing
  }
}
TOP

Related Classes of de.sciss.eisenkraut.net.PlugInWindow

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.