Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / java / java / ModelClippingDlg.java
1
2 //Title:        Viewer3D Sample
3 //Version:      
4 //Copyright:    Copyright (c) 1999
5 //Author:       User Interface group
6 //Company:      Matra Datavision
7 //Description:  
8
9
10 import java.awt.*;
11 import java.awt.event.*;
12 import javax.swing.*;
13 import javax.swing.event.*;
14 import CASCADESamplesJni.*;
15 import SampleViewer3DJni.*;
16 import jcas.Standard_Real;
17 import jcas.Standard_Boolean;
18
19
20 public class ModelClippingDlg extends JDialog
21                               implements ActionListener,
22                                          InputMethodListener,
23                                          ChangeListener,
24                                          KeyListener,
25                                          ItemListener
26 {
27   private SamplePanel myDocument;
28   private V3d_View myView;
29
30   //-----------------------------------------------------------//
31   // GUI components
32   //-----------------------------------------------------------//
33   JCheckBox chkOnOff;
34   JSlider sldZ;
35   JTextField txtZ;
36
37   private boolean consume = false;
38   private String strZ = new String("");
39   private boolean userZChanged = false;
40
41
42 //=======================================================================//
43 // Construction
44 //=======================================================================//
45   public ModelClippingDlg(Frame frame, SamplePanel aDoc, V3d_View aView)
46   {
47     super(frame, "ModelClipping", false);
48     myDocument = aDoc;
49     myView = aView;
50
51     try
52     {
53       jbInit();
54       initValues();
55       pack();
56     }
57     catch(Exception ex)
58     {
59       ex.printStackTrace();
60     }
61   }
62
63   private void jbInit() throws Exception
64   {
65     getContentPane().setLayout(new BorderLayout());
66
67     JPanel mainPanel = new JPanel(new GridBagLayout());
68     mainPanel.setBorder(BorderFactory.createRaisedBevelBorder());
69
70     JLabel lblZ = new JLabel("Z");
71     mainPanel.add(lblZ, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
72             GridBagConstraints.WEST, GridBagConstraints.NONE,
73             new Insets(10, 10, 5, 5), 0, 0));
74
75     sldZ = new JSlider(-750, 750, 0);
76     sldZ.addChangeListener(this);
77     mainPanel.add(sldZ, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
78             GridBagConstraints.CENTER, GridBagConstraints.NONE,
79             new Insets(10, 5, 5, 5), 0, 0));
80
81     txtZ = new JTextField(6);
82     txtZ.addInputMethodListener(this);
83     txtZ.addKeyListener(this);
84     mainPanel.add(txtZ, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
85             GridBagConstraints.CENTER, GridBagConstraints.NONE,
86             new Insets(10, 5, 5, 10), 0, 0));
87
88     chkOnOff = new JCheckBox("Model clipping ON/OFF", false);
89     chkOnOff.addItemListener(this);
90     mainPanel.add(chkOnOff, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0,
91             GridBagConstraints.WEST, GridBagConstraints.NONE,
92             new Insets(10, 10, 10, 10), 0, 0));
93     getContentPane().add(mainPanel, BorderLayout.CENTER);
94
95     JPanel controlPanel = new JPanel();
96
97     JButton btnOK = new JButton("OK");
98     btnOK.addActionListener(this);
99     btnOK.setActionCommand("OK");
100     controlPanel.add(btnOK);
101
102     JButton btnCancel = new JButton("Cancel");
103     btnCancel.addActionListener(this);
104     btnCancel.setActionCommand("Cancel");
105     controlPanel.add(btnCancel);
106     getContentPane().add(controlPanel, BorderLayout.SOUTH);
107   }
108
109   private void initValues()
110   {
111     Standard_Real Z = new Standard_Real();
112     Standard_Boolean isModelClippingOn = new Standard_Boolean();
113     SampleViewer3DPackage.DisplayClippingPlane(SampleViewer3DPanel.getAISContext(), myView, 
114                                                Z, isModelClippingOn);
115
116     sldZ.setValue((int) Math.round(Z.GetValue()));
117     txtZ.setText(String.valueOf(Z.GetValue()));
118
119     chkOnOff.setSelected(isModelClippingOn.GetValue());
120   }
121
122 //=======================================================================//
123 // Commands
124 //=======================================================================//
125   private void onModelClippingZChanged()
126   {
127     String newValue = txtZ.getText();
128     Double value = new Double((newValue.equals("") || newValue.equals("-"))?
129                         "0." : newValue);
130     if (value.doubleValue() > 750. || value.doubleValue() < -750.)
131       return;
132
133     TCollection_AsciiString message = new TCollection_AsciiString();
134     SampleViewer3DPackage.ChangeModelClippingZ(SampleViewer3DPanel.getAISContext(), myView,
135                                                value.doubleValue(), chkOnOff.isSelected(),
136                                                message);
137
138     myDocument.traceMessage(message.ToCString().GetValue(), "SetPlane");
139   }
140
141 //=======================================================================//
142   private void onModelClippingOnOff()
143   {
144     TCollection_AsciiString message = new TCollection_AsciiString();
145     SampleViewer3DPackage.ChangeModelClippingOnOff(SampleViewer3DPanel.getAISContext(), myView,
146                                                    chkOnOff.isSelected(), message);
147
148     myDocument.traceMessage(message.ToCString().GetValue(), "SetPlaneOn/SetPlaneOff");
149   }
150
151 //=======================================================================//
152   private void close(boolean isOK)
153   {
154     if (!isOK)
155       SampleViewer3DPackage.ClearClippingPlane(SampleViewer3DPanel.getAISContext(), myView,
156                                                chkOnOff.isSelected());
157     else
158       SampleViewer3DPackage.ClearClippingPlane(SampleViewer3DPanel.getAISContext(), myView, 
159                                                false);
160
161     dispose();
162   }
163
164
165 //=======================================================================//
166 // Action listener interface
167 //=======================================================================//
168   public void actionPerformed(ActionEvent event)
169   {
170     String nameAction = event.getActionCommand();
171     if (nameAction.equals("OK"))
172       close(true);
173     else if (nameAction.equals("Cancel"))
174       close(false);
175   }
176
177
178 //=======================================================================//
179 // Item listener interface
180 //=======================================================================//
181   public void itemStateChanged(ItemEvent event)
182   {
183     if (event.getSource().equals(chkOnOff))
184       onModelClippingOnOff();
185   }
186
187 //=======================================================================//
188 // Change listener interface
189 //=======================================================================//
190   public void stateChanged(ChangeEvent event)
191   {
192     JSlider slider = (JSlider) event.getSource();
193     if (slider.equals(sldZ))
194     {
195       if (userZChanged)
196       {
197         txtZ.setText(String.valueOf(slider.getValue()));
198         onModelClippingZChanged();
199       }
200       else
201         userZChanged = true;
202     }
203   }
204
205 //=======================================================================//
206 // Key listener interface
207 //=======================================================================//
208   public void keyTyped(KeyEvent event)
209   {
210   }
211
212 //=======================================================================//
213   public void keyPressed(KeyEvent event)
214   {
215     JTextField field = (JTextField) event.getSource();
216
217     int aKod = event.getKeyCode();
218     if (aKod == event.VK_MINUS)
219     {
220       String aStr = field.getText();
221       int aPos = aStr.indexOf("-");
222
223       if (aPos == -1) // Minus not present
224       {
225         if ((field.getCaretPosition()) != 0)
226           consume = true;
227       }
228       else
229         consume = true;
230     }
231     else if ((aKod == event.VK_DECIMAL) || (aKod == event.VK_PERIOD))
232     {
233       String aStr = field.getText();
234       int aPos = aStr.indexOf(".");
235       if (aPos != -1) // the point is present in the string
236         consume = true;
237     }
238     else if (!event.isActionKey() && aKod != event.VK_BACK_SPACE &&
239                                      aKod != event.VK_DELETE)
240     {
241       if (!Character.isDigit(event.getKeyChar()))
242         consume = true;
243     }
244   }
245
246 //=======================================================================//
247   public void keyReleased(KeyEvent event)
248   {
249     JTextField field = (JTextField) event.getSource();
250     String newValue = field.getText();
251     Double value = new Double((newValue.equals("") || newValue.equals("-"))?
252                               "0." : newValue);
253
254     if (field.equals(txtZ))
255     {
256       if (!newValue.equals(strZ))
257       {
258         strZ = newValue;
259         if (value.doubleValue() < -750. || value.doubleValue() > 750.)
260         {
261           txtZ.selectAll();
262           JOptionPane.showMessageDialog(this, "Please enter a value between -750 and 750",
263                                         "Warning!!!", JOptionPane.WARNING_MESSAGE);
264           requestFocus();
265         }
266         else
267         {
268           userZChanged = false;
269           sldZ.setValue((int) Math.round(value.doubleValue()));
270           onModelClippingZChanged();
271         }
272       }
273     }
274   }
275
276 //=======================================================================//
277 // InputMethod listener interface
278 //=======================================================================//
279   public void inputMethodTextChanged(InputMethodEvent event)
280   {
281     if (consume)
282     {
283       event.consume();
284       consume = false;
285     }
286   }
287
288   public void caretPositionChanged(InputMethodEvent event)
289   {
290   }
291 }