Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / java / java / SetupFrame.java
1
2 //Title:      Setup program
3 //Version:    
4 //Copyright:  Copyright (c) 1999
5 //Author:     User Interface group
6 //Company:    MatraDatavision
7 //Description:Sets graphics configuration.
8
9 import java.awt.*;
10 import java.awt.event.*;
11 import javax.swing.*;
12 import javax.swing.event.*;
13 import java.util.*;
14 import java.io.*;
15 import util.*;
16 import CASCADESamplesJni.*;
17 import SampleAISBasicJni.*;
18 import jcas.Standard_CString;
19
20 public class SetupFrame extends JFrame implements ActionListener,
21                                                   ChangeListener
22 {
23   JPanel viewPanel = new JPanel(new BorderLayout());
24   JPanel radioPanel = new JPanel();
25   JRadioButton[] myButtons;
26
27   JPanel controlPanel = new JPanel(new FlowLayout());
28   JButton btnOK = new JButton("OK");
29   JButton btnCancel = new JButton("Cancel");
30
31   Hashtable confs = new Hashtable(2, 1);
32   int defConf = -1;
33   int osType = -1;
34
35   int curValue = -1;
36   TestFrame frame;
37
38   //Construct the frame
39   public SetupFrame()
40   {
41     enableEvents(AWTEvent.WINDOW_EVENT_MASK);
42     try
43     {
44       jbInit();
45     }
46     catch(Exception e)
47     {
48       e.printStackTrace();
49     }
50   }
51
52   //Component initialization
53   private void jbInit() throws Exception
54   {
55     this.getContentPane().setLayout(new BorderLayout());
56     this.setSize(new Dimension(400, 300));
57     this.setResizable(false);
58     this.setTitle("Setup");
59
60     // View panel
61     getConfigurations();    // Gets current set of configurations
62     createRadioPanel();
63
64     if ((myButtons != null) && (myButtons.length > 1))
65     {
66       JLabel lbl = new JLabel("Choose configuration:");
67       lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
68       viewPanel.add(lbl, BorderLayout.NORTH);
69
70       radioPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
71       viewPanel.add(radioPanel, BorderLayout.CENTER);
72
73       lbl = new JLabel("If you see two rectangles press OK button...");
74       lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
75       viewPanel.add(lbl, BorderLayout.SOUTH);
76     }
77     else
78     {
79       JLabel lbl = new JLabel("Configuration is setted");
80       lbl.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
81       viewPanel.add(lbl, BorderLayout.CENTER);
82     }
83
84     // Control panel
85     btnOK.setActionCommand("OK");
86     btnOK.addActionListener(this);
87     controlPanel.add(btnOK);
88
89     btnCancel.setActionCommand("Cancel");
90     btnCancel.addActionListener(this);
91     controlPanel.add(btnCancel);
92
93     // Composition
94     viewPanel.setBorder(BorderFactory.createLoweredBevelBorder());
95     this.getContentPane().add(controlPanel, BorderLayout.SOUTH);
96     this.getContentPane().add(viewPanel, BorderLayout.CENTER);
97     pack();
98   }
99
100   private void getConfigurations()
101   {
102     // Get OS type
103           String os = System.getProperty("os.name");
104           if (os.startsWith("Wind"))
105             osType = 1;
106           else
107             osType = 0;
108
109     // Get native data access
110     handleAccess win_access = null;
111           try
112           {
113       if (osType == 0)
114             win_access = (handleAccess)
115           Class.forName("util.x11.X11HandleAccess").newInstance();
116       else
117             win_access = (handleAccess)
118           Class.forName("util.win32.WinHandleAccess").newInstance();
119     }
120     catch (Exception e)
121           {
122             System.out.println(e);
123           }
124
125     // Get default configuration visual
126     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
127     GraphicsDevice gd0 = ge.getDefaultScreenDevice();
128     GraphicsConfiguration gc0 = gd0.getDefaultConfiguration();
129     defConf = win_access.getVisualId(gc0);
130
131     // Get all configurations
132 //    System.out.println("\nGraphicsConfiguration:");
133 //    System.out.println("\ngraphics environment = " + ge);
134 //    System.out.println("\ndefault graphics configuration = " + gc0);
135
136     if (osType == 0)  // x11
137     {
138       GraphicsDevice gd[] = ge.getScreenDevices();
139 //      System.out.println("count of graphics devices = " + gd.length);
140
141       for (int i = 0; i < gd.length; i++)
142       {
143 //              System.out.println("graphics device [" + i + "] = " + gd[i]);
144
145         GraphicsConfiguration gc[] = gd[i].getConfigurations();
146 //              System.out.println("count of graphics configurations = " + gc.length);
147
148         for (int j = 0; j < gc.length; j++)
149         {
150 //          System.out.println("\n\tgraphics configuration [" + j + "] = " + gc[j]);
151 //          System.out.println("\tvisual ID = " + win_access.getVisualId(gc[j]));
152
153           confs.put(new Integer(win_access.getVisualId(gc[j])), gc[j]);
154 /*
155                 java.awt.image.ColorModel cm = gc[j].getColorModel();
156                 System.out.println("\tColor model = " + cm);
157
158                 java.awt.color.ColorSpace cs = cm.getColorSpace();
159                 System.out.println("\tColor space = " + cs);
160                 System.out.println("\tColor space type = " + cs.getType());
161                 System.out.println("\tColor space is CS_sRGB = " + cs.isCS_sRGB());
162                 System.out.println("\tNumber of components = " + cs.getNumComponents());
163 */
164         }
165       }
166     }
167   }
168
169   private void createRadioPanel()
170   {
171     curValue = defConf;
172
173     if (confs.size() > 0)
174     {
175       radioPanel.setLayout(new GridLayout(0, 4, 10, 5));
176
177       // Get list of visualID values
178       //-------------------------------------------
179       int values[] = new int[confs.size()];
180       Enumeration keys = confs.keys();
181       int i = 0;
182       while (keys.hasMoreElements())
183       {
184         Integer k = (Integer) keys.nextElement();
185         values[i] = k.intValue();
186         i++;
187       }
188
189       // Sort the array
190       //-------------------------------------------
191       for (i = 0; i < values.length; i++)
192       {
193         int min = i;
194         for (int j = i + 1; j < values.length; j++)
195         {
196           if (values[j] < values[min])
197             min = j;
198         }
199         if (min > i)
200         {
201           int tmp = values[i];
202           values[i] = values[min];
203           values[min] = tmp;
204         }
205       }
206
207       // Create buttons
208       //-------------------------------------------
209       myButtons = new JRadioButton[values.length];
210       ButtonGroup group = new ButtonGroup();
211       for (i = 0; i < values.length; i++)
212       {
213         Integer value = new Integer(values[i]);
214         myButtons[i] = new JRadioButton(value.toString());
215         myButtons[i].setActionCommand("changeConfig");
216         myButtons[i].addActionListener(this);
217         if (values[i] == curValue)
218           myButtons[i].setSelected(true);
219         else
220           myButtons[i].setSelected(false);
221         group.add(myButtons[i]);
222         radioPanel.add(myButtons[i]);
223       }
224     }
225   }
226
227   private void showTestFrame()
228   {
229     GraphicsConfiguration gr = (GraphicsConfiguration) confs.get(new Integer(curValue));
230     Point loc = this.getLocation();
231     loc.translate(this.getWidth(), 0);
232     Dimension size = new Dimension(300, 400);
233     if (frame != null)
234     {
235       loc = frame.getLocation();
236       size = frame.getSize();
237       frame.dispose();
238     }
239
240     frame = new TestFrame(gr);
241     frame.setLocation(loc);
242     frame.setSize(size);
243     frame.setVisible(true);
244   }
245
246   // Overridden so we can exit on System Close
247   //------------------------------------------------
248   protected void processWindowEvent(WindowEvent event)
249   {
250     super.processWindowEvent(event);
251     if(event.getID() == WindowEvent.WINDOW_CLOSING)
252     {
253       System.exit(0);
254     }
255     else if (event.getID() == WindowEvent.WINDOW_OPENED)
256     {
257       showTestFrame();
258     }
259   }
260
261   // ActionListener interface
262   //------------------------------------------------
263   public void actionPerformed(ActionEvent event)
264   {
265     if (event.getActionCommand().equals("changeConfig"))
266     {
267       JRadioButton src = (JRadioButton) event.getSource();
268       Integer value = new Integer(src.getText());
269       curValue = value.intValue();
270       showTestFrame();
271       return;
272     }
273     else if (event.getActionCommand().equals("OK"))
274     {
275       System.out.println("Setup graphics configuration as " + curValue);
276
277       // Get application property file name
278       String fileName = System.getProperty("user.dir");
279       String separator = System.getProperty("file.separator");
280       if (!fileName.endsWith(separator))
281         fileName = fileName + separator;
282       fileName = fileName + "properties" + separator + "AppRes.properties";
283       System.out.println("Application property file is " + fileName);
284
285       // Read the properties
286       Vector propKey = new Vector(2);
287       Vector propValue = new Vector(2);
288       try
289       {
290         FileReader fileRead = new FileReader(fileName);
291         LineNumberReader lnRead = new LineNumberReader(fileRead);
292
293         while (true)
294         {
295           String line = lnRead.readLine();
296           if (line == null)
297             break;
298           if (line.startsWith("#"))
299             continue;
300           int k = line.indexOf("=");
301           if (k > 0)
302           {
303             propKey.add(line.substring(0, k));
304             propValue.add(line.substring(k+1));
305           }
306         }
307         lnRead.close();
308         fileRead.close();
309       }
310       catch (FileNotFoundException fe)
311       {
312       }
313       catch (IOException ie)
314       {
315         ie.printStackTrace();
316       }
317
318       // set value of property "VisualID"
319       Integer newID = new Integer(curValue);
320       if (propKey.contains("VisualID"))
321       {
322         propValue.setElementAt(newID.toString(), propKey.indexOf("VisualID"));
323       }
324       else
325       {
326         propKey.add("VisualID");
327         propValue.add(newID.toString());
328       }
329
330       // Write new file
331       try
332       {
333         FileWriter fileWr = new FileWriter(fileName, false);
334         for (int i = 0; i < propKey.size(); i++)
335         {
336           fileWr.write((String) propKey.get(i));
337           fileWr.write("=");
338           fileWr.write((String) propValue.get(i));
339           fileWr.write("\n");
340         }
341         fileWr.close();
342       }
343       catch (Exception e)
344       {
345         e.printStackTrace();
346       }
347     }
348     System.exit(0);
349   }
350
351   // ChangeListener interface
352   //------------------------------------------------
353   public void stateChanged(ChangeEvent event)
354   {
355     System.out.println("SetupFrame change event " + event);
356   }
357
358 }
359
360 class TestFrame extends Frame implements WindowListener,
361                                          ComponentListener
362 {
363   CasCadeCanvas myCanvas;
364   V3d_Viewer myViewer3d;
365   V3d_View myView3d;
366
367   static int cntViews = 0;
368
369   public TestFrame(GraphicsConfiguration gr)
370   {
371     super();
372
373     cntViews++;
374     String title = new String("Test view ");
375     title = title + cntViews;
376     this.setTitle(title);
377
378     myViewer3d = SampleAISBasicPackage.CreateViewer(title);
379     myViewer3d.Init();
380     myView3d = myViewer3d.CreateView();
381
382     myCanvas = new CasCadeCanvas(gr, myView3d);
383     add(myCanvas);
384
385     this.addWindowListener(this);
386     this.addComponentListener(this);
387   }
388
389   public void setWindow()
390   {
391     int windowHandle = myCanvas.getWinData();
392     short hi, lo;
393     lo = (short) windowHandle;
394     hi = (short) (windowHandle >> 16);
395
396     System.out.println("\nSet window by handle " + windowHandle + "\n");
397
398     SampleAISBasicPackage.SetWindow(myView3d, hi, lo);
399 //    this.repaint();
400   }
401
402   public void windowOpened(WindowEvent e)
403   {
404     setWindow();
405     repaint();
406   }
407
408   public void windowClosing(WindowEvent e)
409   {
410   }
411
412   public void windowClosed(WindowEvent e)
413   {
414   }
415
416   public void windowIconified(WindowEvent e)
417   {
418   }
419
420   public void windowDeiconified(WindowEvent e)
421   {
422   }
423
424   public void windowActivated(WindowEvent e)
425   {
426   }
427
428   public void windowDeactivated(WindowEvent e)
429   {
430   }
431
432   public void componentResized(ComponentEvent e)
433   {
434     repaint();
435   }
436
437   public void componentMoved(ComponentEvent e)
438   {
439     repaint();
440   }
441
442   public void componentShown(ComponentEvent e)
443   {
444   }
445
446   public void componentHidden(ComponentEvent e)
447   {
448   }
449
450 }
451
452 class CasCadeCanvas extends Canvas
453 {
454   V3d_View myView;
455
456   public CasCadeCanvas(GraphicsConfiguration gr, V3d_View view)
457   {
458     super(gr);
459     myView = view;
460   }
461
462   public void update(Graphics g)
463   {
464     paint(g);
465   }
466
467   public void paint(Graphics g)
468   {
469     myView.MustBeResized();
470     myView.Redraw();
471
472     Color currColor = g.getColor();
473     g.setColor(Color.white);
474     Dimension size = this.getSize();
475     g.drawRect(10, 10, size.width-20, size.height-20);
476     g.drawRect(20, 20, size.width-40, size.height-40);
477     g.setColor(currColor);
478   }
479
480   public int getWinData()
481   {
482     Graphics g = this.getGraphics();
483     int pData = 0;
484
485     handleAccess win_access;
486     try
487     {
488       String os = System.getProperty("os.name");
489       if (os.startsWith("Wind"))
490         win_access = (handleAccess) Class.forName("util.win32.WinHandleAccess").newInstance();
491       else
492         win_access = (handleAccess) Class.forName("util.x11.X11HandleAccess").newInstance();
493
494       pData = win_access.getWinHandle(this, g);
495     }
496     catch (Exception e)
497     {
498       System.out.println(e);
499     }
500     return pData;
501   }
502 }