2 //Title: Open CASCADE Technology Samples
4 //Copyright: Copyright (c) 2000
5 //Author: User Interface Group (Nizhny Novgorod)
6 //Company: Matra Datavision
11 import java.awt.event.*;
13 import javax.swing.border.*;
17 import CASCADESamplesJni.*;
20 public class ViewPanel extends JPanel implements ActionListener,
23 //-----------------------------------------------------------//
25 //-----------------------------------------------------------//
26 static private ResourceBundle res1 = ResourceBundle.getBundle("properties.Viewer");
27 static private ResourceBundle res = ResourceBundle.getBundle("properties.ViewerIcon");
30 static private ImageIcon imgFitAll = new ImageIcon(res.getString("IC_FIT_ALL"));
31 static private ImageIcon imgZoom = new ImageIcon(res.getString("IC_ZOOM"));
32 static private ImageIcon imgDynZoom = new ImageIcon(res.getString("IC_DYN_ZOOM"));
35 static private ImageIcon imgDynPan = new ImageIcon(res.getString("IC_DYN_PAN"));
36 static private ImageIcon imgGlobPan = new ImageIcon(res.getString("IC_GLOB_PAN"));
39 static private ImageIcon imgFront = new ImageIcon(res.getString("IC_FRONT"));
40 static private ImageIcon imgTop = new ImageIcon(res.getString("IC_TOP"));
41 static private ImageIcon imgLeft = new ImageIcon(res.getString("IC_LEFT"));
42 static private ImageIcon imgBack = new ImageIcon(res.getString("IC_BACK"));
43 static private ImageIcon imgRight = new ImageIcon(res.getString("IC_RIGHT"));
44 static private ImageIcon imgBottom = new ImageIcon(res.getString("IC_BOTTOM"));
45 static private ImageIcon imgAxo = new ImageIcon(res.getString("IC_AXO"));
48 static private ImageIcon imgRotate = new ImageIcon(res.getString("IC_ROTATE"));
51 static private ImageIcon imgReset = new ImageIcon(res.getString("IC_RESET"));
54 static private ImageIcon imgHiddenOff = new ImageIcon(res.getString("IC_HIDDEN_OFF"));
55 static private ImageIcon imgHiddenOn = new ImageIcon(res.getString("IC_HIDDEN_ON"));
58 static private ImageIcon imgRectLine = new ImageIcon(res.getString("IC_RECT_LINE"));
59 static private ImageIcon imgRectPoint = new ImageIcon(res.getString("IC_RECT_POINT"));
60 static private ImageIcon imgCircLine = new ImageIcon(res.getString("IC_CIRC_LINE"));
61 static private ImageIcon imgCircPoint = new ImageIcon(res.getString("IC_CIRC_POINT"));
62 static private ImageIcon imgEditGrid = new ImageIcon(res.getString("IC_EDIT_GRID"));
63 static private ImageIcon imgEraseGrid = new ImageIcon(res.getString("IC_ERASE_GRID"));
66 //-----------------------------------------------------------//
68 //-----------------------------------------------------------//
69 private JToolBar buttonsBar = new JToolBar(JToolBar.HORIZONTAL);
70 private ViewCanvas VPort;
72 static private Insets margin = new Insets(1,1,1,1);
75 //-----------------------------------------------------------//
77 //-----------------------------------------------------------//
78 private transient Vector mouseMotionListeners;
79 private transient Vector mouseListeners;
80 private transient Vector keyListeners;
83 //-----------------------------------------------------------//
85 //-----------------------------------------------------------//
86 private static int OsType = ViewCanvas.getOSType();
89 //-----------------------------------------------------------//
91 //-----------------------------------------------------------//
92 public static int VIEW_3D = 0;
93 public static int VIEW_2D = 1;
96 //=======================================================================//
98 //=======================================================================//
104 public ViewPanel(int type)
116 //=======================================================================//
117 // Component initialization
118 //=======================================================================//
119 private void jbInit(int type) throws Exception
121 this.setBackground(Color.gray);
122 this.setLayout(new BorderLayout());
125 JPanel port = new JPanel(new BorderLayout());
126 port.setBorder(BorderFactory.createLoweredBevelBorder());
127 VPort = createViewPort();
128 VPort.setParent(this);
129 port.add(VPort, BorderLayout.CENTER);
130 add(port, BorderLayout.CENTER);
133 buttonsBar = new JToolBar();
134 buttonsBar.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
135 buttonsBar.setFloatable(true);
140 add(buttonsBar, BorderLayout.NORTH);
142 addKeyListener(this);
145 //-----------------------------------------------------------//
146 // Creation view port
147 //-----------------------------------------------------------//
148 public ViewCanvas createViewPort()
150 return new ViewCanvas();
153 public ViewCanvas getViewPort()
159 //-----------------------------------------------------------//
160 // Creation menu for view3d
161 //-----------------------------------------------------------//
162 private void createMenu3d()
165 JToggleButton toggle;
168 button = new HeavyButton(imgFitAll);
169 button.setToolTipText(res1.getString("TT_FIT_ALL"));
170 button.setActionCommand("FitAll");
171 button.addActionListener(VPort);
172 button.setMargin(margin);
173 buttonsBar.add(button);
175 button = new HeavyButton(imgZoom);
176 button.setToolTipText(res1.getString("TT_ZOOM"));
177 button.setActionCommand("Zoom");
178 button.addActionListener(VPort);
179 button.setMargin(margin);
180 buttonsBar.add(button);
182 button = new HeavyButton(imgDynZoom);
183 button.setToolTipText(res1.getString("TT_DYN_ZOOM"));
184 button.setActionCommand("DynZoom");
185 button.addActionListener(VPort);
186 button.setMargin(margin);
187 buttonsBar.add(button);
189 buttonsBar.addSeparator();
192 button = new HeavyButton(imgDynPan);
193 button.setToolTipText(res1.getString("TT_DYN_PAN"));
194 button.setActionCommand("DynPan");
195 button.addActionListener(VPort);
196 button.setMargin(margin);
197 buttonsBar.add(button);
199 button = new HeavyButton(imgGlobPan);
200 button.setToolTipText(res1.getString("TT_GLOB_PAN"));
201 button.setActionCommand("GlobPan");
202 button.addActionListener(VPort);
203 button.setMargin(margin);
204 buttonsBar.add(button);
206 buttonsBar.addSeparator();
209 button = new HeavyButton(imgFront);
210 button.setToolTipText(res1.getString("TT_FRONT"));
211 button.setActionCommand("Front");
212 button.addActionListener(VPort);
213 button.setMargin(margin);
214 buttonsBar.add(button);
216 button = new HeavyButton(imgTop);
217 button.setToolTipText(res1.getString("TT_TOP"));
218 button.setActionCommand("Top");
219 button.addActionListener(VPort);
220 button.setMargin(margin);
221 buttonsBar.add(button);
223 button = new HeavyButton(imgLeft);
224 button.setToolTipText(res1.getString("TT_LEFT"));
225 button.setActionCommand("Left");
226 button.addActionListener(VPort);
227 button.setMargin(margin);
228 buttonsBar.add(button);
230 button = new HeavyButton(imgBack);
231 button.setToolTipText(res1.getString("TT_BACK"));
232 button.setActionCommand("Back");
233 button.addActionListener(VPort);
234 button.setMargin(margin);
235 buttonsBar.add(button);
237 button = new HeavyButton(imgRight);
238 button.setToolTipText(res1.getString("TT_RIGHT"));
239 button.setActionCommand("Right");
240 button.addActionListener(VPort);
241 button.setMargin(margin);
242 buttonsBar.add(button);
244 button = new HeavyButton(imgBottom);
245 button.setToolTipText(res1.getString("TT_BOTTOM"));
246 button.setActionCommand("Bottom");
247 button.addActionListener(VPort);
248 button.setMargin(margin);
249 buttonsBar.add(button);
251 button = new HeavyButton(imgAxo);
252 button.setToolTipText(res1.getString("TT_AXO"));
253 button.setActionCommand("Axo");
254 button.addActionListener(VPort);
255 button.setMargin(margin);
256 buttonsBar.add(button);
258 buttonsBar.addSeparator();
261 button = new HeavyButton(imgRotate);
262 button.setToolTipText(res1.getString("TT_ROTATE"));
263 button.setActionCommand("Rotate");
264 button.addActionListener(VPort);
265 button.setMargin(margin);
266 buttonsBar.add(button);
268 buttonsBar.addSeparator();
271 button = new HeavyButton(imgReset);
272 button.setToolTipText(res1.getString("TT_RESET"));
273 button.setActionCommand("Reset");
274 button.addActionListener(VPort);
275 button.setMargin(margin);
276 buttonsBar.add(button);
278 buttonsBar.addSeparator();
281 ButtonGroup group = new ButtonGroup();
282 toggle = new JToggleButton(imgHiddenOff, false);
283 toggle.setToolTipText(res1.getString("TT_HIDDEN_OFF"));
284 toggle.setActionCommand("HiddenOff");
285 toggle.addActionListener(VPort);
286 toggle.setMargin(margin);
288 buttonsBar.add(toggle);
290 toggle = new JToggleButton(imgHiddenOn, true);
291 toggle.setToolTipText(res1.getString("TT_HIDDEN_ON"));
292 toggle.setActionCommand("HiddenOn");
293 toggle.addActionListener(VPort);
294 toggle.setMargin(margin);
296 buttonsBar.add(toggle);
298 VPort.SetDegenerateMode(true);
302 //-----------------------------------------------------------//
303 // Creation menu for view2d
304 //-----------------------------------------------------------//
305 private void createMenu2d()
310 button = new HeavyButton(imgFitAll);
311 button.setToolTipText(res1.getString("TT_FIT_ALL"));
312 button.setActionCommand("FitAll");
313 button.addActionListener(VPort);
314 button.setMargin(margin);
315 buttonsBar.add(button);
317 button = new HeavyButton(imgZoom);
318 button.setToolTipText(res1.getString("TT_ZOOM"));
319 button.setActionCommand("Zoom");
320 button.addActionListener(VPort);
321 button.setMargin(margin);
322 buttonsBar.add(button);
324 button = new HeavyButton(imgDynZoom);
325 button.setToolTipText(res1.getString("TT_DYN_ZOOM"));
326 button.setActionCommand("DynZoom");
327 button.addActionListener(VPort);
328 button.setMargin(margin);
329 buttonsBar.add(button);
331 buttonsBar.addSeparator();
334 button = new HeavyButton(imgDynPan);
335 button.setToolTipText(res1.getString("TT_DYN_PAN"));
336 button.setActionCommand("DynPan");
337 button.addActionListener(VPort);
338 button.setMargin(margin);
339 buttonsBar.add(button);
341 button = new HeavyButton(imgGlobPan);
342 button.setToolTipText(res1.getString("TT_GLOB_PAN"));
343 button.setActionCommand("GlobPan");
344 button.addActionListener(VPort);
345 button.setMargin(margin);
346 buttonsBar.add(button);
348 buttonsBar.addSeparator();
351 button = new HeavyButton(imgRectLine);
352 button.setToolTipText(res1.getString("TT_RECT_LINE"));
353 button.setActionCommand("RectLine");
354 button.addActionListener(VPort);
355 button.setMargin(margin);
356 buttonsBar.add(button);
358 button = new HeavyButton(imgRectPoint);
359 button.setToolTipText(res1.getString("TT_RECT_POINT"));
360 button.setActionCommand("RectPoint");
361 button.addActionListener(VPort);
362 button.setMargin(margin);
363 buttonsBar.add(button);
365 button = new HeavyButton(imgCircLine);
366 button.setToolTipText(res1.getString("TT_CIRC_LINE"));
367 button.setActionCommand("CircLine");
368 button.addActionListener(VPort);
369 button.setMargin(margin);
370 buttonsBar.add(button);
372 button = new HeavyButton(imgCircPoint);
373 button.setToolTipText(res1.getString("TT_CIRC_POINT"));
374 button.setActionCommand("CircPoint");
375 button.addActionListener(VPort);
376 button.setMargin(margin);
377 buttonsBar.add(button);
379 button = new HeavyButton(imgEditGrid);
380 button.setToolTipText(res1.getString("TT_EDIT_GRID"));
381 button.setActionCommand("EditGrid");
382 button.addActionListener(VPort);
383 button.setMargin(margin);
384 buttonsBar.add(button);
386 button = new HeavyButton(imgEraseGrid);
387 button.setToolTipText(res1.getString("TT_ERASE_GRID"));
388 button.setActionCommand("EraseGrid");
389 button.addActionListener(VPort);
390 button.setMargin(margin);
391 buttonsBar.add(button);
395 //-----------------------------------------------------------//
397 //-----------------------------------------------------------//
398 public Dimension getMinimumSize()
400 return new Dimension(700, 100);
404 //-----------------------------------------------------------//
406 //-----------------------------------------------------------//
407 public void ChangeBackgroundColor()
409 Color newColor = JColorChooser.showDialog(this, res1.getString("DLG_CHANGECOLOR"),
410 VPort.GetBackgroundColor());
411 if (newColor != null)
412 VPort.SetBackgroundColor(newColor);
416 //-----------------------------------------------------------//
418 //-----------------------------------------------------------//
419 public PopupMenu getDefaultPopup()
421 PopupMenu popup = new PopupMenu(res1.getString("VIEW_POPUP"));
423 MenuItem item = new MenuItem(res1.getString("MN_BACKGROUND"));
424 item.setActionCommand("ChangeColor");
425 item.addActionListener(this);
432 //=======================================================================//
434 //=======================================================================//
435 public void actionPerformed(ActionEvent event)
437 String nameAction = event.getActionCommand();
442 if (nameAction.equals("ChangeColor"))
443 ChangeBackgroundColor();
447 //=======================================================================//
448 // External Listeners //
449 //=======================================================================//
450 public synchronized void removeMouseMotionListener(MouseMotionListener l)
452 super.removeMouseMotionListener(l);
453 if (mouseMotionListeners != null && mouseMotionListeners.contains(l))
455 Vector v = (Vector) mouseMotionListeners.clone();
457 mouseMotionListeners = v;
461 //=======================================================================//
462 public synchronized void addMouseMotionListener(MouseMotionListener l)
464 super.addMouseMotionListener(l);
465 Vector v = mouseMotionListeners == null ? new Vector(2) : (Vector) mouseMotionListeners.clone();
469 mouseMotionListeners = v;
473 //=======================================================================//
474 public void MouseDragged(MouseEvent e)
476 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
477 e.getModifiers(), e.getX(), e.getY(),
478 e.getClickCount(), e.isPopupTrigger());
479 if (VPort.hasWindow()) fireMouseDragged(event);
481 protected void fireMouseDragged(MouseEvent e)
483 if (mouseMotionListeners != null)
485 Vector listeners = mouseMotionListeners;
486 int count = listeners.size();
487 for (int i = 0; i < count; i++)
488 ((MouseMotionListener) listeners.elementAt(i)).mouseDragged(e);
492 //=======================================================================//
493 public void MouseMoved(MouseEvent e)
495 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
496 e.getModifiers(), e.getX(), e.getY(),
497 e.getClickCount(), e.isPopupTrigger());
498 if (VPort.hasWindow()) fireMouseMoved(event);
500 protected void fireMouseMoved(MouseEvent e)
502 if (mouseMotionListeners != null)
504 Vector listeners = mouseMotionListeners;
505 int count = listeners.size();
506 for (int i = 0; i < count; i++)
507 ((MouseMotionListener) listeners.elementAt(i)).mouseMoved(e);
511 //=======================================================================//
512 public synchronized void removeMouseListener(MouseListener l)
514 super.removeMouseListener(l);
515 if (mouseListeners != null && mouseListeners.contains(l))
517 Vector v = (Vector) mouseListeners.clone();
523 //=======================================================================//
524 public synchronized void addMouseListener(MouseListener l)
526 super.addMouseListener(l);
527 Vector v = mouseListeners == null ? new Vector(2) : (Vector) mouseListeners.clone();
535 //=======================================================================//
536 public void MouseClicked(MouseEvent e)
538 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
539 e.getModifiers(), e.getX(), e.getY(),
540 e.getClickCount(), e.isPopupTrigger());
541 if (VPort.hasWindow()) fireMouseClicked(event);
543 protected void fireMouseClicked(MouseEvent e)
545 if (mouseListeners != null)
547 Vector listeners = mouseListeners;
548 int count = listeners.size();
549 for (int i = 0; i < count; i++)
550 ((MouseListener) listeners.elementAt(i)).mouseClicked(e);
554 //=======================================================================//
555 public void MouseEntered(MouseEvent e)
557 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
558 e.getModifiers(), e.getX(), e.getY(),
559 e.getClickCount(), e.isPopupTrigger());
560 if (VPort.hasWindow()) fireMouseEntered(event);
562 protected void fireMouseEntered(MouseEvent e)
564 if (mouseListeners != null)
566 Vector listeners = mouseListeners;
567 int count = listeners.size();
568 for (int i = 0; i < count; i++)
569 ((MouseListener) listeners.elementAt(i)).mouseEntered(e);
573 //=======================================================================//
574 public void MouseExited(MouseEvent e)
576 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
577 e.getModifiers(), e.getX(), e.getY(),
578 e.getClickCount(), e.isPopupTrigger());
579 if (VPort.hasWindow()) fireMouseExited(event);
581 protected void fireMouseExited(MouseEvent e)
583 if (mouseListeners != null)
585 Vector listeners = mouseListeners;
586 int count = listeners.size();
587 for (int i = 0; i < count; i++)
588 ((MouseListener) listeners.elementAt(i)).mouseExited(e);
592 //=======================================================================//
593 public void MousePressed(MouseEvent e)
595 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
596 e.getModifiers(), e.getX(), e.getY(),
597 e.getClickCount(), e.isPopupTrigger());
598 if (VPort.hasWindow()) fireMousePressed(event);
600 protected void fireMousePressed(MouseEvent e)
602 if (mouseListeners != null)
604 Vector listeners = mouseListeners;
605 int count = listeners.size();
606 for (int i = 0; i < count; i++)
607 ((MouseListener) listeners.elementAt(i)).mousePressed(e);
611 //=======================================================================//
612 public void MouseReleased(MouseEvent e)
614 MouseEvent event = new MouseEvent(this, e.getID(), e.getWhen(),
615 e.getModifiers(), e.getX(), e.getY(),
616 e.getClickCount(), e.isPopupTrigger());
617 if (VPort.hasWindow()) fireMouseReleased(event);
619 protected void fireMouseReleased(MouseEvent e)
621 if (mouseListeners != null)
623 Vector listeners = mouseListeners;
624 int count = listeners.size();
625 for (int i = 0; i < count; i++)
626 ((MouseListener) listeners.elementAt(i)).mouseReleased(e);
630 //=======================================================================//
632 //=======================================================================//
633 public void keyTyped(KeyEvent e)
637 //=======================================================================//
638 public void keyPressed(KeyEvent e)
642 //=======================================================================//
643 public void keyReleased(KeyEvent e)
645 if (e.getKeyCode() == e.VK_ESCAPE) VPort.ResetState();
648 //=======================================================================//
649 public synchronized void removeKeyListener(KeyListener l)
651 if(keyListeners != null && keyListeners.contains(l))
653 Vector v = (Vector) keyListeners.clone();
656 super.removeKeyListener(l);
660 //=======================================================================//
661 public synchronized void addKeyListener(KeyListener l)
663 Vector v = keyListeners == null ? new Vector(2) : (Vector) keyListeners.clone();
668 super.addKeyListener(l);