/* Copyright (c) 1997-2006 Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany) http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de 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, or (at your option) any later version: http://www.gnu.org/licenses/gpl.txt. 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. $Project: polymake $$Id: JavaviewFrame.java 7572 2007-01-19 11:47:12Z thilosch $ */ package de.tuberlin.polymake.common; import java.awt.Color; import java.awt.Frame; import java.awt.Label; import java.awt.Rectangle; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.IOException; import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Properties; import java.util.StringTokenizer; import jv.object.PsViewerIf; import jv.project.PvDisplayIf; import jv.viewer.PvControlMenu; import jv.viewer.PvViewer; /** * Frame used to display interactive polymake content using Javaview. * * @author Thilo Schröder * */ public abstract class JavaviewFrame extends Frame implements WindowListener { public static PvViewer polymakeViewer = new PvViewer(); /** Contains non Javaview parameters for display */ protected Properties parameters; /** Contains interactive parameters for display */ protected Properties iparameters; /** Contains interactive sliders */ protected HashMap sliderMap = new HashMap(); /** Manager of the display and control panel. */ // protected PvViewer viewer; protected Label statusBar = null; /** Display embedded into this frame. */ protected PvDisplayIf disp; /** Main geometry updated in intervals by external program. */ protected EmbeddedGeometries geom; //protected PolymakeControl parent; protected JavaviewControl parent; protected ByteBuffer bbuf = ByteBuffer.allocate(32); /** title of Frame */ protected String title = "NoName"; /** * Create a frame displaying the given geometry with given parameters. * The output of any event is written into a pipe. * * @param i_geom geometry to be displayed * @param sink pipe for output * @param params additional non Javaview parameters controlling display */ public JavaviewFrame(EmbeddedGeometries i_geom, Properties params, Properties iparams, JavaviewControl parent) { super(i_geom.getName()); String jvLicenceFile = System.getProperty("jv.licence"); if(jvLicenceFile != null) { jv.object.PsConfig.setCodeBase(jvLicenceFile); } title = i_geom.getName(); statusBar = new Label(); this.parent = parent; this.addWindowListener(this); geom = (EmbeddedGeometries)i_geom.clone(); if(params != null) { parameters = (Properties)params.clone(); } if(iparams != null) { iparameters = (Properties)iparams.clone(); } this.setBounds(new Rectangle(30, 30, 500, 400)); // Create viewer for viewing 3d geometries // polymakeViewer.init(); polymakeViewer.showPanel(jv.object.PsViewerIf.DISPLAY); // Create viewer for viewing 3d geometries, and register applet. disp = polymakeViewer.newDisplay(geom.getName(),false);//new PvDisplay(viewer); disp.setFrame(this); StringTokenizer st = new StringTokenizer(System.getProperty("polymake.javaview.bgcolor")); disp.setBackgroundColor(new Color(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()))); for(int i = 0; i < geom.getNumberOfGeometries(); ++i) { disp.addGeometry(geom.getGeometry(i)); } disp.selectGeometry(geom.getGeometry(0)); disp.fit(); // polymakeViewer.addDisplay(geom.getName(),disp); polymakeViewer.selectDisplay(disp); PvControlMenu jvMenuBar = polymakeViewer.newMenuBar(this); jvMenuBar.setEnabledMenu(PsViewerIf.MENU_FILE_NEW_PROJECT,false); jvMenuBar.setEnabledMenu(PsViewerIf.MENU_FILE_NEW_GEOMETRY,false); jvMenuBar.setEnabledMenu(PsViewerIf.MENU_METHOD,true); this.setMenuBar(jvMenuBar); } /** update the frame with new values for the vertices and parameters*/ public abstract void update(PointSet ps, Properties params); /** setStatusBar */ public void setStatus(String status) { statusBar.setText(status); } /** WindowListenerInterface */ public void windowActivated(WindowEvent event) { } public void windowDeactivated(WindowEvent event) {} public void windowDeiconified(WindowEvent event) {} public void windowIconified(WindowEvent event) {} public void windowOpened(WindowEvent event) {} public void windowClosing(WindowEvent e) { this.dispose(); } public void windowClosed(WindowEvent e) { try { parent.removeFrame(title); parent.putMessage(SimpleGeometryParser.write(geom.getName(),"close",1.),false); } catch(IOException ex) { ex.printStackTrace(); } } }