1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-21 10:13:43 +03:00
occt/samples/java/java/SetupFrame.java
2012-03-05 19:23:40 +04:00

503 lines
13 KiB
Java
Executable File

//Title: Setup program
//Version:
//Copyright: Copyright (c) 1999
//Author: User Interface group
//Company: MatraDatavision
//Description:Sets graphics configuration.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.io.*;
import util.*;
import CASCADESamplesJni.*;
import SampleAISBasicJni.*;
import jcas.Standard_CString;
public class SetupFrame extends JFrame implements ActionListener,
ChangeListener
{
JPanel viewPanel = new JPanel(new BorderLayout());
JPanel radioPanel = new JPanel();
JRadioButton[] myButtons;
JPanel controlPanel = new JPanel(new FlowLayout());
JButton btnOK = new JButton("OK");
JButton btnCancel = new JButton("Cancel");
Hashtable confs = new Hashtable(2, 1);
int defConf = -1;
int osType = -1;
int curValue = -1;
TestFrame frame;
//Construct the frame
public SetupFrame()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception
{
this.getContentPane().setLayout(new BorderLayout());
this.setSize(new Dimension(400, 300));
this.setResizable(false);
this.setTitle("Setup");
// View panel
getConfigurations(); // Gets current set of configurations
createRadioPanel();
if ((myButtons != null) && (myButtons.length > 1))
{
JLabel lbl = new JLabel("Choose configuration:");
lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
viewPanel.add(lbl, BorderLayout.NORTH);
radioPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
viewPanel.add(radioPanel, BorderLayout.CENTER);
lbl = new JLabel("If you see two rectangles press OK button...");
lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
viewPanel.add(lbl, BorderLayout.SOUTH);
}
else
{
JLabel lbl = new JLabel("Configuration is setted");
lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
viewPanel.add(lbl, BorderLayout.CENTER);
}
// Control panel
btnOK.setActionCommand("OK");
btnOK.addActionListener(this);
controlPanel.add(btnOK);
btnCancel.setActionCommand("Cancel");
btnCancel.addActionListener(this);
controlPanel.add(btnCancel);
// Composition
viewPanel.setBorder(BorderFactory.createLoweredBevelBorder());
this.getContentPane().add(controlPanel, BorderLayout.SOUTH);
this.getContentPane().add(viewPanel, BorderLayout.CENTER);
pack();
}
private void getConfigurations()
{
// Get OS type
String os = System.getProperty("os.name");
if (os.startsWith("Wind"))
osType = 1;
else
osType = 0;
// Get native data access
handleAccess win_access = null;
try
{
if (osType == 0)
win_access = (handleAccess)
Class.forName("util.x11.X11HandleAccess").newInstance();
else
win_access = (handleAccess)
Class.forName("util.win32.WinHandleAccess").newInstance();
}
catch (Exception e)
{
System.out.println(e);
}
// Get default configuration visual
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd0 = ge.getDefaultScreenDevice();
GraphicsConfiguration gc0 = gd0.getDefaultConfiguration();
defConf = win_access.getVisualId(gc0);
// Get all configurations
// System.out.println("\nGraphicsConfiguration:");
// System.out.println("\ngraphics environment = " + ge);
// System.out.println("\ndefault graphics configuration = " + gc0);
if (osType == 0) // x11
{
GraphicsDevice gd[] = ge.getScreenDevices();
// System.out.println("count of graphics devices = " + gd.length);
for (int i = 0; i < gd.length; i++)
{
// System.out.println("graphics device [" + i + "] = " + gd[i]);
GraphicsConfiguration gc[] = gd[i].getConfigurations();
// System.out.println("count of graphics configurations = " + gc.length);
for (int j = 0; j < gc.length; j++)
{
// System.out.println("\n\tgraphics configuration [" + j + "] = " + gc[j]);
// System.out.println("\tvisual ID = " + win_access.getVisualId(gc[j]));
confs.put(new Integer(win_access.getVisualId(gc[j])), gc[j]);
/*
java.awt.image.ColorModel cm = gc[j].getColorModel();
System.out.println("\tColor model = " + cm);
java.awt.color.ColorSpace cs = cm.getColorSpace();
System.out.println("\tColor space = " + cs);
System.out.println("\tColor space type = " + cs.getType());
System.out.println("\tColor space is CS_sRGB = " + cs.isCS_sRGB());
System.out.println("\tNumber of components = " + cs.getNumComponents());
*/
}
}
}
}
private void createRadioPanel()
{
curValue = defConf;
if (confs.size() > 0)
{
radioPanel.setLayout(new GridLayout(0, 4, 10, 5));
// Get list of visualID values
//-------------------------------------------
int values[] = new int[confs.size()];
Enumeration keys = confs.keys();
int i = 0;
while (keys.hasMoreElements())
{
Integer k = (Integer) keys.nextElement();
values[i] = k.intValue();
i++;
}
// Sort the array
//-------------------------------------------
for (i = 0; i < values.length; i++)
{
int min = i;
for (int j = i + 1; j < values.length; j++)
{
if (values[j] < values[min])
min = j;
}
if (min > i)
{
int tmp = values[i];
values[i] = values[min];
values[min] = tmp;
}
}
// Create buttons
//-------------------------------------------
myButtons = new JRadioButton[values.length];
ButtonGroup group = new ButtonGroup();
for (i = 0; i < values.length; i++)
{
Integer value = new Integer(values[i]);
myButtons[i] = new JRadioButton(value.toString());
myButtons[i].setActionCommand("changeConfig");
myButtons[i].addActionListener(this);
if (values[i] == curValue)
myButtons[i].setSelected(true);
else
myButtons[i].setSelected(false);
group.add(myButtons[i]);
radioPanel.add(myButtons[i]);
}
}
}
private void showTestFrame()
{
GraphicsConfiguration gr = (GraphicsConfiguration) confs.get(new Integer(curValue));
Point loc = this.getLocation();
loc.translate(this.getWidth(), 0);
Dimension size = new Dimension(300, 400);
if (frame != null)
{
loc = frame.getLocation();
size = frame.getSize();
frame.dispose();
}
frame = new TestFrame(gr);
frame.setLocation(loc);
frame.setSize(size);
frame.setVisible(true);
}
// Overridden so we can exit on System Close
//------------------------------------------------
protected void processWindowEvent(WindowEvent event)
{
super.processWindowEvent(event);
if(event.getID() == WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
else if (event.getID() == WindowEvent.WINDOW_OPENED)
{
showTestFrame();
}
}
// ActionListener interface
//------------------------------------------------
public void actionPerformed(ActionEvent event)
{
if (event.getActionCommand().equals("changeConfig"))
{
JRadioButton src = (JRadioButton) event.getSource();
Integer value = new Integer(src.getText());
curValue = value.intValue();
showTestFrame();
return;
}
else if (event.getActionCommand().equals("OK"))
{
System.out.println("Setup graphics configuration as " + curValue);
// Get application property file name
String fileName = System.getProperty("user.dir");
String separator = System.getProperty("file.separator");
if (!fileName.endsWith(separator))
fileName = fileName + separator;
fileName = fileName + "properties" + separator + "AppRes.properties";
System.out.println("Application property file is " + fileName);
// Read the properties
Vector propKey = new Vector(2);
Vector propValue = new Vector(2);
try
{
FileReader fileRead = new FileReader(fileName);
LineNumberReader lnRead = new LineNumberReader(fileRead);
while (true)
{
String line = lnRead.readLine();
if (line == null)
break;
if (line.startsWith("#"))
continue;
int k = line.indexOf("=");
if (k > 0)
{
propKey.add(line.substring(0, k));
propValue.add(line.substring(k+1));
}
}
lnRead.close();
fileRead.close();
}
catch (FileNotFoundException fe)
{
}
catch (IOException ie)
{
ie.printStackTrace();
}
// set value of property "VisualID"
Integer newID = new Integer(curValue);
if (propKey.contains("VisualID"))
{
propValue.setElementAt(newID.toString(), propKey.indexOf("VisualID"));
}
else
{
propKey.add("VisualID");
propValue.add(newID.toString());
}
// Write new file
try
{
FileWriter fileWr = new FileWriter(fileName, false);
for (int i = 0; i < propKey.size(); i++)
{
fileWr.write((String) propKey.get(i));
fileWr.write("=");
fileWr.write((String) propValue.get(i));
fileWr.write("\n");
}
fileWr.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.exit(0);
}
// ChangeListener interface
//------------------------------------------------
public void stateChanged(ChangeEvent event)
{
System.out.println("SetupFrame change event " + event);
}
}
class TestFrame extends Frame implements WindowListener,
ComponentListener
{
CasCadeCanvas myCanvas;
V3d_Viewer myViewer3d;
V3d_View myView3d;
static int cntViews = 0;
public TestFrame(GraphicsConfiguration gr)
{
super();
cntViews++;
String title = new String("Test view ");
title = title + cntViews;
this.setTitle(title);
myViewer3d = SampleAISBasicPackage.CreateViewer(title);
myViewer3d.Init();
myView3d = myViewer3d.CreateView();
myCanvas = new CasCadeCanvas(gr, myView3d);
add(myCanvas);
this.addWindowListener(this);
this.addComponentListener(this);
}
public void setWindow()
{
int windowHandle = myCanvas.getWinData();
short hi, lo;
lo = (short) windowHandle;
hi = (short) (windowHandle >> 16);
System.out.println("\nSet window by handle " + windowHandle + "\n");
SampleAISBasicPackage.SetWindow(myView3d, hi, lo);
// this.repaint();
}
public void windowOpened(WindowEvent e)
{
setWindow();
repaint();
}
public void windowClosing(WindowEvent e)
{
}
public void windowClosed(WindowEvent e)
{
}
public void windowIconified(WindowEvent e)
{
}
public void windowDeiconified(WindowEvent e)
{
}
public void windowActivated(WindowEvent e)
{
}
public void windowDeactivated(WindowEvent e)
{
}
public void componentResized(ComponentEvent e)
{
repaint();
}
public void componentMoved(ComponentEvent e)
{
repaint();
}
public void componentShown(ComponentEvent e)
{
}
public void componentHidden(ComponentEvent e)
{
}
}
class CasCadeCanvas extends Canvas
{
V3d_View myView;
public CasCadeCanvas(GraphicsConfiguration gr, V3d_View view)
{
super(gr);
myView = view;
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
myView.MustBeResized();
myView.Redraw();
Color currColor = g.getColor();
g.setColor(Color.white);
Dimension size = this.getSize();
g.drawRect(10, 10, size.width-20, size.height-20);
g.drawRect(20, 20, size.width-40, size.height-40);
g.setColor(currColor);
}
public int getWinData()
{
Graphics g = this.getGraphics();
int pData = 0;
handleAccess win_access;
try
{
String os = System.getProperty("os.name");
if (os.startsWith("Wind"))
win_access = (handleAccess) Class.forName("util.win32.WinHandleAccess").newInstance();
else
win_access = (handleAccess) Class.forName("util.x11.X11HandleAccess").newInstance();
pData = win_access.getWinHandle(this, g);
}
catch (Exception e)
{
System.out.println(e);
}
return pData;
}
}