Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / java / java / PropertiesDlg.java
1
2 //Title:        Cas.Cade Object Library - samples of using
3 //Version:      
4 //Copyright:    Copyright (c) 1999
5 //Author:       User Interface group
6 //Company:      MatraDatavision
7 //Description:  
8
9 import java.awt.*;
10 import java.awt.event.*;
11 import java.math.*;
12 import java.util.*;
13 import javax.swing.*;
14 import javax.swing.border.*;
15 import javax.swing.event.*;
16 import util.*;
17 import CASCADESamplesJni.*;
18 // import CASCADESamplesJni.Aspect_TypeOfLine;
19 // import CASCADESamplesJni.TShort_Array1OfShortReal;
20 // import CASCADESamplesJni.V2d_Viewer;
21 // import CASCADESamplesJni.Quantity_Color;
22 // import CASCADESamplesJni.Quantity_NameOfColor;
23 // import CASCADESamplesJni.Quantity_TypeOfColor;
24 // import CASCADESamplesJni.Aspect_TypeMap;
25 // import CASCADESamplesJni.Aspect_FontMap;
26 // import CASCADESamplesJni.Aspect_MarkMap;
27 // import CASCADESamplesJni.Aspect_FontStyle;
28 // import CASCADESamplesJni.Aspect_LineStyle;
29 // import CASCADESamplesJni.Aspect_WidthMap;
30 // import CASCADESamplesJni.Aspect_ColorMap;
31 // import CASCADESamplesJni.Aspect_WidthOfLine;
32
33 import jcas.Standard_CString;
34 import SampleHLRJni.*;
35
36 class PropertiesDlg extends JDialog
37                     implements ActionListener
38 {
39   private V2d_Viewer myViewer;
40
41   //-----------------------------------------------------------//
42   // GUI components
43   //-----------------------------------------------------------//
44   WidthMapPane myWidthPane;
45   ColorMapPane myColorPane;
46   FontMapPane myFontPane;
47   TypeMapPane myTypePane;
48   MarkMapPane myMarkPane;
49   JButton btnApply;
50
51
52 //=======================================================================//
53 // Construction
54 //=======================================================================//
55   public PropertiesDlg(Frame frame, V2d_Viewer viewer)
56   {
57     super(frame, "View Map Properties", true);
58     myViewer = viewer;
59     try
60     {
61       jbInit();
62 //    setSize(500, 500);
63       pack();
64     }
65     catch(Exception e)
66     {
67       e.printStackTrace();
68     }
69   }
70
71   private void jbInit() throws Exception
72   {
73     getContentPane().setLayout(new BorderLayout());
74
75     JTabbedPane myTabbedPane = new JTabbedPane();
76     myTabbedPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
77
78     myWidthPane = new WidthMapPane(myViewer, this);
79     myTabbedPane.addTab("Width Map", myWidthPane);
80
81     myColorPane = new ColorMapPane(myViewer, this);
82     myTabbedPane.addTab("Color Map", myColorPane);
83
84     myFontPane = new FontMapPane(myViewer, this);
85     myTabbedPane.addTab("Font Map", myFontPane);
86
87     myTypePane = new TypeMapPane(myViewer, this);
88     myTabbedPane.addTab("Type Map", myTypePane);
89
90     myMarkPane = new MarkMapPane(myViewer, this);
91     myTabbedPane.addTab("Mark Map", myMarkPane);
92
93     getContentPane().add(myTabbedPane, BorderLayout.CENTER);
94
95     JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
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
107     btnApply = new JButton("Apply");
108     btnApply.addActionListener(this);
109     btnApply.setActionCommand("Apply");
110     btnApply.setEnabled(false);
111     controlPanel.add(btnApply);
112     getContentPane().add(controlPanel, BorderLayout.SOUTH);
113   }
114
115
116 //=======================================================================//
117 // Commands
118 //=======================================================================//
119   public void setModified()
120   {
121     btnApply.setEnabled(true);
122   }
123
124 //=======================================================================//
125   public String format(double value)
126   {
127     return format(value, 6);
128   }
129
130   public String format(double value, int prec)
131   {
132     BigDecimal aValue = new BigDecimal(value);
133     return aValue.setScale(prec, BigDecimal.ROUND_HALF_UP).toString();
134   }
135
136 //=======================================================================//
137   private void apply()
138   {
139     myWidthPane.apply();
140     myColorPane.apply();
141     myFontPane.apply();
142     myTypePane.apply();
143     myMarkPane.apply();
144     
145     myViewer.Update();
146     
147     btnApply.setEnabled(false);
148   }
149
150 //=======================================================================//
151   private void close(boolean isOK)
152   {
153     if (isOK) apply();
154     dispose();
155   }
156
157
158 //=======================================================================//
159 // Action listener interface
160 //=======================================================================//
161   public void actionPerformed(ActionEvent event)
162   {
163     String nameAction = event.getActionCommand();
164     if (nameAction.equals("Apply")) apply();
165     else if (nameAction.equals("OK")) close(true);
166     else if (nameAction.equals("Cancel")) close(false);
167   }
168
169 }
170
171
172
173 //=======================================================================//
174 //                                                                       //
175 //                              WidthMapPane                             //
176 //                                                                       //
177 //=======================================================================//
178 class WidthMapPane extends JPanel implements ChangeListener,
179                                              ActionListener
180 {
181   private V2d_Viewer myViewer;
182   private Aspect_WidthMap myWidthMap;
183   private PropertiesDlg myDlg;
184
185   //-----------------------------------------------------------//
186   // GUI components
187   //-----------------------------------------------------------//
188   JLabel lblMapSize;
189   TitledBorder brdEntries;
190   JSlider sldEntries;
191   JLabel lblType;
192   JLabel lblWidth;
193   JComboBox cmbType;
194   RealField txtWidth;
195   JButton btnUpdate;
196
197
198 //=======================================================================//
199 // Construction
200 //=======================================================================//
201   public WidthMapPane(V2d_Viewer viewer, PropertiesDlg parent)
202   {
203     myViewer = viewer;
204 //     myWidthMap = new Aspect_WidthMap(myViewer.WidthMap());
205     myWidthMap = myViewer.WidthMap();
206     myDlg = parent;
207
208     try
209     {
210       jbInit();
211       initValues();
212     }
213     catch(Exception ex)
214     {
215       ex.printStackTrace();
216     }
217   }
218
219   private void jbInit() throws Exception
220   {
221     setLayout(new GridBagLayout());
222
223     JPanel labelPanel = new JPanel();
224     labelPanel.add(new JLabel("Size of the width map: "));
225     lblMapSize = new JLabel();
226     labelPanel.add(lblMapSize);
227     add(labelPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
228             GridBagConstraints.WEST, GridBagConstraints.NONE,
229             new Insets(5, 10, 5, 10), 0, 0));
230
231     // Entries pane
232     JPanel entriesPanel = new JPanel(new GridBagLayout());
233     brdEntries = new TitledBorder(BorderFactory.createEtchedBorder(), "Entries:");
234     entriesPanel.setBorder(brdEntries);
235
236     sldEntries = new JSlider();
237     sldEntries.setMinimum(0);
238     sldEntries.setMinorTickSpacing(1);
239     sldEntries.setPaintLabels(true);
240     sldEntries.setPaintTicks(true);
241     sldEntries.setPaintTrack(true);
242     sldEntries.addChangeListener(this);
243     entriesPanel.add(sldEntries, new GridBagConstraints(0, 0, 2, 1, 1.0, 1.0,
244             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
245             new Insets(5, 5, 5, 5), 0, 0));
246
247     entriesPanel.add(new JLabel("Type: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
248             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
249             new Insets(5, 5, 5, 5), 0, 0));
250     lblType = new JLabel();
251     entriesPanel.add(lblType, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
252             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
253             new Insets(5, 5, 5, 5), 0, 0));
254
255     entriesPanel.add(new JLabel("Width: "), new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0,
256             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
257             new Insets(5, 5, 5, 5), 0, 0));
258     lblWidth = new JLabel();
259     entriesPanel.add(lblWidth, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
260             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
261             new Insets(5, 5, 5, 5), 0, 0));
262     add(entriesPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0,
263             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
264             new Insets(5, 5, 5, 5), 0, 0));
265
266     // New entry pane
267     JPanel entryPanel = new JPanel(new GridBagLayout());
268     entryPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),
269                          "  New entry:  "));
270
271     entryPanel.add(new JLabel("Type: "), new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
272             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
273             new Insets(5, 5, 5, 5), 0, 0));
274     String[] items = {"THIN", "MEDIUM", "THICK", "VERYTHICK", "USERDEFINED"};
275     cmbType = new JComboBox(items);
276     cmbType.setEditable(false);
277     cmbType.addActionListener(this);
278     cmbType.setActionCommand("Type");
279     entryPanel.add(cmbType, new GridBagConstraints(1, 0, 1, 1, 0.5, 1.0,
280             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
281             new Insets(5, 5, 5, 5), 0, 0));
282
283     entryPanel.add(new JLabel("Width: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
284             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
285             new Insets(5, 5, 5, 5), 0, 0));
286     txtWidth = new RealField(10);
287     entryPanel.add(txtWidth, new GridBagConstraints(1, 1, 1, 1, 0.5, 1.0,
288             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
289             new Insets(5, 5, 5, 5), 0, 0));
290
291     btnUpdate = new JButton("Update current");
292     btnUpdate.addActionListener(this);
293     btnUpdate.setActionCommand("Update");
294     entryPanel.add(btnUpdate, new GridBagConstraints(2, 0, 1, 1, 0.5, 1.0,
295             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
296             new Insets(5, 5, 5, 5), 0, 0));
297     JButton button = new JButton("Add");
298     button.addActionListener(this);
299     button.setActionCommand("Add");
300     entryPanel.add(button, new GridBagConstraints(2, 1, 1, 1, 0.5, 1.0,
301             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
302             new Insets(5, 5, 5, 5), 0, 0));
303
304     add(entryPanel, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
305             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
306             new Insets(5, 5, 5, 5), 0, 0));
307   }
308
309   private void initValues()
310   {
311     updateEntries(0);
312   }
313
314
315 //=======================================================================//
316 // Commands
317 //=======================================================================//
318   public void updateEntries(int index)
319   {
320     int mapSize = myWidthMap.Size();
321     lblMapSize.setText("" + mapSize);
322     if (index == -1) index = mapSize - 1;
323
324     sldEntries.setMaximum(mapSize - 1);
325     sldEntries.setValue(index);
326
327     if (sldEntries.getMaximum() <= 15)
328     {
329       sldEntries.setMajorTickSpacing(1);
330       sldEntries.setSnapToTicks(true);
331     }
332     else if (sldEntries.getMaximum() <= 75)
333     {
334       sldEntries.setMajorTickSpacing(5);
335       sldEntries.setSnapToTicks(false);
336     }
337     else if (sldEntries.getMaximum() <= 150)
338     {
339       sldEntries.setMajorTickSpacing(10);
340       sldEntries.setSnapToTicks(false);
341     }
342     else
343     {
344       sldEntries.setMajorTickSpacing(25);
345       sldEntries.setMinorTickSpacing(5);
346       sldEntries.setSnapToTicks(false);
347     }
348
349     updateEntryPane(index);
350   }
351
352 //=======================================================================//
353   public void updateEntryPane(int index)
354   {
355     brdEntries.setTitle("  Entries:   " + index + "  ");
356     repaint();
357
358     Aspect_WidthMapEntry anEntry = myWidthMap.Entry(index + 1);
359
360     switch (anEntry.Type())
361     {
362       case Aspect_WidthOfLine.Aspect_WOL_THIN:
363         lblType.setText("Aspect_WOL_THIN");
364         break;
365       case Aspect_WidthOfLine.Aspect_WOL_MEDIUM:
366         lblType.setText("Aspect_WOL_MEDIUM");
367         break;
368       case Aspect_WidthOfLine.Aspect_WOL_THICK:
369         lblType.setText("Aspect_WOL_THICK");
370         break;
371       case Aspect_WidthOfLine.Aspect_WOL_VERYTHICK:
372         lblType.setText("Aspect_WOL_VERYTHICK");
373         break;
374       case Aspect_WidthOfLine.Aspect_WOL_USERDEFINED:
375         lblType.setText("Aspect_WOL_USERDEFINED");
376         break;
377       default:
378         lblType.setText("Unknown");
379     }
380     
381     lblWidth.setText(myDlg.format(anEntry.Width()));
382     cmbType.setSelectedIndex(anEntry.Type());
383     txtWidth.setText(myDlg.format(anEntry.Width()));
384
385     if (index == 0)
386       btnUpdate.setEnabled(false);
387     else
388       btnUpdate.setEnabled(true);
389   }
390
391 //=======================================================================//
392   public void onTypeChanged()
393   {
394     if (cmbType.getSelectedIndex() == 4)  // USERDEFINED
395       txtWidth.setEnabled(true);
396     else
397     {
398       txtWidth.setEnabled(false);
399       Aspect_WidthMapEntry aTmpEntry =
400           new Aspect_WidthMapEntry(99, cmbType.getSelectedIndex());
401       txtWidth.setText(myDlg.format(aTmpEntry.Width()));
402     }
403   }
404
405 //=======================================================================//
406   public void updateCurrentEntry()
407   {
408     Aspect_WidthMapEntry anEntry = myWidthMap.Entry(sldEntries.getValue() + 1);
409     if (cmbType.getSelectedIndex() == Aspect_WidthOfLine.Aspect_WOL_USERDEFINED)
410       anEntry.SetWidth(txtWidth.getValue());
411     else
412       anEntry.SetType((short)cmbType.getSelectedIndex());
413     myWidthMap.AddEntry(anEntry);
414     myDlg.setModified();
415     updateEntryPane(sldEntries.getValue());
416   }
417
418 //=======================================================================//
419   public void addNewEntry()
420   {
421     int newEntryIndex;
422     if (cmbType.getSelectedIndex() == Aspect_WidthOfLine.Aspect_WOL_USERDEFINED)
423       newEntryIndex = myWidthMap.AddEntry(txtWidth.getValue());
424     else
425       newEntryIndex = myWidthMap.AddEntry(cmbType.getSelectedIndex());
426     myDlg.setModified();
427     updateEntries(newEntryIndex);
428   }
429
430 //=======================================================================//
431   public void apply()
432   {
433 //     myViewer.SetWidthMap(myWidthMap.getAspectWidthMap());
434     myViewer.SetWidthMap(myWidthMap);
435   }
436
437 //=======================================================================//
438 // Change listener interface
439 //=======================================================================//
440   public void stateChanged(ChangeEvent event)
441   {
442     JSlider slider = (JSlider) event.getSource();
443     if (slider.equals(sldEntries))
444       updateEntryPane(sldEntries.getValue());
445   }
446
447 //=======================================================================//
448 // Action listener interface
449 //=======================================================================//
450   public void actionPerformed(ActionEvent event)
451   {
452     String nameAction = event.getActionCommand();
453     if (nameAction.equals("Type")) onTypeChanged();
454     else if (nameAction.equals("Update")) updateCurrentEntry();
455     else if (nameAction.equals("Add")) addNewEntry();
456   }
457
458 }
459
460
461
462 //=======================================================================//
463 //                                                                       //
464 //                              ColorMapPane                             //
465 //                                                                       //
466 //=======================================================================//
467 class ColorMapPane extends JPanel implements ChangeListener,
468                                              ActionListener,
469                                              FocusListener
470 {
471   private V2d_Viewer myViewer;
472   private Aspect_ColorMap myColorMap;
473   private PropertiesDlg myDlg;
474
475   //-----------------------------------------------------------//
476   // GUI components
477   //-----------------------------------------------------------//
478   JLabel lblMapSize, lblMapType;
479   TitledBorder brdEntries;
480   JSlider sldEntries;
481   JLabel lblRed, lblGreen, lblBlue;
482   JLabel lblName;
483   JPanel entryPanel;
484   RealField txtRed, txtGreen, txtBlue;
485   JComboBox cmbName;
486   JLabel lblNotAvailable;
487   JButton btnUpdate;
488
489
490 //=======================================================================//
491 // Construction
492 //=======================================================================//
493   public ColorMapPane(V2d_Viewer viewer, PropertiesDlg parent)
494   {
495     myViewer = viewer;
496 //     myColorMap = new Aspect_ColorMap(myViewer.ColorMap());
497     myColorMap = myViewer.ColorMap();
498     myDlg = parent;
499
500     try
501     {
502       jbInit();
503       initValues();
504     }
505     catch(Exception ex)
506     {
507       ex.printStackTrace();
508     }
509   }
510
511   private void jbInit() throws Exception
512   {
513     setLayout(new GridBagLayout());
514
515     JPanel infoPanel = new JPanel(new GridBagLayout());
516
517     JPanel labelPanel = new JPanel(new GridBagLayout());
518     labelPanel.add(new JLabel("Type of the color map: "),
519             new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
520             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
521             new Insets(5, 5, 5, 5), 0, 0));
522     lblMapType = new JLabel();
523     labelPanel.add(lblMapType, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0,
524             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
525             new Insets(5, 5, 5, 5), 0, 0));
526
527     labelPanel.add(new JLabel("Size of the color map: "),
528             new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
529             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
530             new Insets(5, 5, 5, 5), 0, 0));
531     lblMapSize = new JLabel();
532     labelPanel.add(lblMapSize, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
533             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
534             new Insets(5, 5, 5, 5), 0, 0));
535     infoPanel.add(labelPanel, new GridBagConstraints(0, 0, 1, 1, 0.7, 1.0,
536             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
537             new Insets(5, 5, 5, 5), 0, 0));
538
539     JPanel buttonsPanel = new JPanel(new GridLayout(0, 1, 5, 5));
540     JButton button = new JButton("New generic color map");
541     button.addActionListener(this);
542     button.setActionCommand("NewGeneric");
543     buttonsPanel.add(button);
544     button = new JButton("New color cube color map");
545     button.addActionListener(this);
546     button.setActionCommand("NewColorCube");
547     buttonsPanel.add(button);
548     button = new JButton("New color ramp color map");
549     button.addActionListener(this);
550     button.setActionCommand("NewColorRamp");
551     buttonsPanel.add(button);
552     infoPanel.add(buttonsPanel, new GridBagConstraints(1, 0, 1, 1, 0.3, 1.0,
553             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
554             new Insets(5, 5, 5, 5), 0, 0));
555
556     add(infoPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
557             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
558             new Insets(5, 5, 5, 5), 0, 0));
559
560     // Entries pane
561     JPanel entriesPanel = new JPanel(new GridBagLayout());
562     brdEntries = new TitledBorder(BorderFactory.createEtchedBorder(), "Entries:");
563     entriesPanel.setBorder(brdEntries);
564
565     sldEntries = new JSlider();
566     sldEntries.setMinimum(0);
567     sldEntries.setMinorTickSpacing(1);
568     sldEntries.setPaintLabels(true);
569     sldEntries.setPaintTicks(true);
570     sldEntries.setPaintTrack(true);
571     sldEntries.addChangeListener(this);
572     entriesPanel.add(sldEntries, new GridBagConstraints(0, 0, 5, 1, 1.0, 1.0,
573             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
574             new Insets(5, 5, 5, 5), 0, 0));
575
576     entriesPanel.add(new JLabel("Color: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
577             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
578             new Insets(5, 5, 5, 5), 0, 0));
579     lblRed = new JLabel();
580     entriesPanel.add(lblRed, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
581             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
582             new Insets(5, 5, 5, 5), 0, 0));
583     lblGreen = new JLabel();
584     entriesPanel.add(lblGreen, new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0,
585             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
586             new Insets(5, 5, 5, 5), 0, 0));
587     lblBlue = new JLabel();
588     entriesPanel.add(lblBlue, new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0,
589             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
590             new Insets(5, 5, 5, 5), 0, 0));
591     lblName = new JLabel();
592     entriesPanel.add(lblName, new GridBagConstraints(4, 1, 1, 1, 1.0, 1.0,
593             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
594             new Insets(5, 5, 5, 5), 0, 0));
595     add(entriesPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0,
596             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
597             new Insets(5, 5, 5, 5), 0, 0));
598
599     // New entry pane
600     entryPanel = new JPanel(new GridLayout(0, 1, 5, 5));
601     entryPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),
602                            "  New entry:  "));
603
604     JPanel colorPanel = new JPanel(new GridBagLayout());
605     colorPanel.add(new JLabel("Color: "), new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
606             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
607             new Insets(5, 5, 5, 5), 0, 0));
608     txtRed = new RealField(6);
609     txtRed.addFocusListener(this);
610     colorPanel.add(txtRed, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0,
611             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
612             new Insets(5, 5, 5, 5), 0, 0));
613     txtGreen = new RealField(6);
614     txtGreen.addFocusListener(this);
615     colorPanel.add(txtGreen, new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0,
616             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
617             new Insets(5, 5, 5, 5), 0, 0));
618     txtBlue = new RealField(6);
619     txtBlue.addFocusListener(this);
620     colorPanel.add(txtBlue, new GridBagConstraints(3, 0, 1, 1, 1.0, 1.0,
621             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
622             new Insets(5, 5, 5, 5), 0, 0));
623
624     String[] items = new String[517];
625     for (int i = 0; i < 517; i++)
626       items[i] = Quantity_Color.StringName((short)i).GetValue();
627     cmbName = new JComboBox(items);
628     cmbName.setEditable(false);
629     cmbName.addActionListener(this);
630     cmbName.setActionCommand("ColorName");
631     colorPanel.add(cmbName, new GridBagConstraints(4, 0, 1, 1, 1.0, 1.0,
632             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
633             new Insets(5, 5, 5, 5), 0, 0));
634     entryPanel.add(colorPanel);
635
636     buttonsPanel = new JPanel(new GridLayout(1, 0, 10, 20));
637     buttonsPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
638     btnUpdate = new JButton("Update current");
639     btnUpdate.addActionListener(this);
640     btnUpdate.setActionCommand("Update");
641     buttonsPanel.add(btnUpdate);
642     button = new JButton("Add");
643     button.addActionListener(this);
644     button.setActionCommand("Add");
645     buttonsPanel.add(button);
646     button = new JButton("Edit...");
647     button.addActionListener(this);
648     button.setActionCommand("Edit");
649     buttonsPanel.add(button);
650     entryPanel.add(buttonsPanel);
651     add(entryPanel, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
652             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
653             new Insets(5, 5, 5, 5), 0, 0));
654
655     lblNotAvailable = new JLabel("Not available for this type of Color map");
656     lblNotAvailable.setHorizontalAlignment(SwingConstants.CENTER);
657     lblNotAvailable.setVerticalAlignment(SwingConstants.CENTER);
658     lblNotAvailable.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),
659                            "  New entry:  "));
660     add(lblNotAvailable, new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0,
661             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
662             new Insets(5, 5, 5, 5), 0, 0));
663   }
664
665   private void initValues()
666   {
667     updateEntries(0);
668   }
669
670
671 //=======================================================================//
672 // Commands
673 //=======================================================================//
674   public void updateEntries(int index)
675   {
676     switch (myColorMap.Type())
677     {
678       case Aspect_TypeOfColorMap.Aspect_TOC_Generic:
679         lblMapType.setText("Generic");
680         break;
681       case Aspect_TypeOfColorMap.Aspect_TOC_ColorCube:
682         lblMapType.setText("ColorCube");
683         break;
684       case Aspect_TypeOfColorMap.Aspect_TOC_ColorRamp:
685         lblMapType.setText("ColorRamp");
686         break;
687       default:
688         lblMapType.setText("Unknown");
689     }
690
691     if (myColorMap.Type() == Aspect_TypeOfColorMap.Aspect_TOC_Generic)
692     {
693       lblNotAvailable.setVisible(false);
694       entryPanel.setVisible(true);
695     }
696     else
697     {
698       lblNotAvailable.setVisible(true);
699       entryPanel.setVisible(false);
700     }
701
702     int mapSize = myColorMap.Size();
703     lblMapSize.setText("" + mapSize);
704     if (index == -1) index = mapSize - 1;
705
706     sldEntries.setMaximum(mapSize - 1);
707     sldEntries.setValue(index);
708
709     if (sldEntries.getMaximum() <= 15)
710     {
711       sldEntries.setMajorTickSpacing(1);
712       sldEntries.setMinorTickSpacing(1);
713       sldEntries.setSnapToTicks(true);
714       sldEntries.setPaintLabels(true);
715     }
716     else if (sldEntries.getMaximum() <= 75)
717     {
718       sldEntries.setMajorTickSpacing(5);
719       sldEntries.setMinorTickSpacing(1);
720       sldEntries.setSnapToTicks(false);
721       sldEntries.setPaintLabels(true);
722     }
723     else if (sldEntries.getMaximum() <= 150)
724     {
725       sldEntries.setMajorTickSpacing(10);
726       sldEntries.setMinorTickSpacing(2);
727       sldEntries.setSnapToTicks(false);
728       sldEntries.setPaintLabels(true);
729     }
730     else
731     {
732       sldEntries.setMajorTickSpacing(25);
733       sldEntries.setMinorTickSpacing(5);
734       sldEntries.setSnapToTicks(false);
735       sldEntries.setPaintLabels(false);
736     }
737
738     updateEntryPane(index);
739   }
740
741   public void updateEntryPane(int index)
742   {
743     brdEntries.setTitle("  Entries:   " + index + "  ");
744     repaint();
745
746     Aspect_ColorMapEntry anEntry = myColorMap.FindEntry(index);
747
748     if (anEntry.IsAllocated())
749     {
750       Quantity_Color aColor = anEntry.Color();
751       double red = aColor.Red();
752       double green = aColor.Green();
753       double blue = aColor.Blue();
754       int name = aColor.Name();
755
756       lblRed.setText(myDlg.format(red));
757       lblGreen.setText(myDlg.format(green));
758       lblBlue.setText(myDlg.format(blue));
759       lblName.setText(Quantity_Color.StringName((short)name).toString());
760
761       txtRed.setText(myDlg.format(red));
762       txtGreen.setText(myDlg.format(green));
763       txtBlue.setText(myDlg.format(blue));
764       cmbName.setSelectedIndex(name);
765     }
766     else
767     {
768       lblRed.setText("");
769       lblGreen.setText("");
770       lblBlue.setText("");
771       lblName.setText("Not allocated");
772
773       txtRed.setText("");
774       txtGreen.setText("");
775       txtBlue.setText("");
776       cmbName.setSelectedIndex(0);
777     }
778
779     if (index == 0)
780       btnUpdate.setEnabled(false);
781     else
782       btnUpdate.setEnabled(true);
783   }
784
785   public void newGenericMap()
786   {
787     myColorMap = V2d_DefaultMap.ColorMap();
788     myDlg.setModified();
789     updateEntries(0);
790   }
791
792   public void newColorCubeMap()
793   {
794     ColorCubeDlg aDlg = new ColorCubeDlg(myDlg);
795     Position.centerWindow(aDlg);
796     aDlg.show();
797     if (aDlg.isOK())
798     {
799       myColorMap = aDlg.getColorMap();
800       myDlg.setModified();
801       updateEntries(0);
802     }
803   }
804
805   public void newColorRampMap()
806   {
807     ColorRampDlg aDlg = new ColorRampDlg(myDlg);
808     Position.centerWindow(aDlg);
809     aDlg.show();
810     if (aDlg.isOK())
811     {
812       myColorMap = aDlg.getColorMap();
813       myDlg.setModified();
814       updateEntries(0);
815     }
816   }
817
818   public void onColorNameChanged()
819   {
820     Quantity_Color aColor = new Quantity_Color((short)cmbName.getSelectedIndex());
821     txtRed.setText(myDlg.format(aColor.Red()));
822     txtGreen.setText(myDlg.format(aColor.Green()));
823     txtBlue.setText(myDlg.format(aColor.Blue()));
824   }
825
826   public void onColorEdit()
827   {
828     Color newColor = JColorChooser.showDialog(myDlg, "Select Color",
829             new Color((float) txtRed.getValue(), (float) txtGreen.getValue(),
830                       (float) txtBlue.getValue()));
831     if (newColor != null)
832     {
833       double red = newColor.getRed()/255.;
834       double green = newColor.getGreen()/255.;
835       double blue = newColor.getBlue()/255.;
836       txtRed.setText(myDlg.format(red));
837       txtGreen.setText(myDlg.format(green));
838       txtBlue.setText(myDlg.format(blue));
839       cmbName.setSelectedIndex(Quantity_Color.Name(red, green, blue));
840     }
841   }
842
843   public void updateCurrentEntry()
844   {
845     Aspect_GenericColorMap aMap = null;
846     if (myColorMap instanceof Aspect_GenericColorMap)
847       aMap = (Aspect_GenericColorMap) myColorMap;
848     else if (myColorMap.Type() == Aspect_TypeOfColorMap.Aspect_TOC_Generic)
849       aMap = (Aspect_GenericColorMap) myColorMap.DownCast(
850               new Standard_CString("Aspect_GenericColorMap"),
851               new Standard_CString("SampleHLRJni"));
852
853     if (aMap != null)
854     {
855       Aspect_ColorMapEntry anEntry = myColorMap.FindEntry(sldEntries.getValue());
856       Quantity_Color aColor = new Quantity_Color(txtRed.getValue(),
857               txtGreen.getValue(), txtBlue.getValue(),
858               Quantity_TypeOfColor.Quantity_TOC_RGB);
859       anEntry.SetColor(aColor);
860       aMap.AddEntry(anEntry);
861       myDlg.setModified();
862       updateEntryPane(sldEntries.getValue());
863     }
864   }
865
866   public void addNewEntry()
867   {
868     Aspect_GenericColorMap aMap = null;
869     if (myColorMap instanceof Aspect_GenericColorMap)
870       aMap = (Aspect_GenericColorMap) myColorMap;
871     else if (myColorMap.Type() == Aspect_TypeOfColorMap.Aspect_TOC_Generic)
872       aMap = (Aspect_GenericColorMap) myColorMap.DownCast(
873               new Standard_CString("Aspect_GenericColorMap"),
874               new Standard_CString("SampleHLRJni"));
875
876     if (aMap != null)
877     {
878       Quantity_Color aColor = new Quantity_Color(txtRed.getValue(),
879               txtGreen.getValue(), txtBlue.getValue(),
880               Quantity_TypeOfColor.Quantity_TOC_RGB);
881       aMap.AddEntry(aColor);
882       myDlg.setModified();
883       updateEntries(-1);
884     }
885   }
886
887   public void apply()
888   {
889 //     myViewer.SetColorMap(myColorMap.getAspectColorMap());
890     if(myColorMap instanceof Aspect_GenericColorMap)
891       myViewer.SetColorMap((Aspect_GenericColorMap)myColorMap); // AVO: cast inserted
892     else{
893       System.out.println("Error: !!!!!!!!! Not the generic color map!!!");
894     }
895   }
896
897 //=======================================================================//
898 // Focus listener interface
899 //=======================================================================//
900   public void focusGained(FocusEvent event)
901   {
902   }
903
904   public void focusLost(FocusEvent event)
905   {
906     RealField field = (RealField) event.getSource();
907     if (field.getValue() < 0) field.setText("0");
908     if (field.getValue() > 1) field.setText("1");
909     cmbName.setSelectedIndex(Quantity_Color.Name(txtRed.getValue(),
910                              txtGreen.getValue(), txtBlue.getValue()));
911   }
912
913 //=======================================================================//
914 // Change listener interface
915 //=======================================================================//
916   public void stateChanged(ChangeEvent event)
917   {
918     JSlider slider = (JSlider) event.getSource();
919     if (slider.equals(sldEntries))
920       updateEntryPane(sldEntries.getValue());
921   }
922
923 //=======================================================================//
924 // Action listener interface
925 //=======================================================================//
926   public void actionPerformed(ActionEvent event)
927   {
928     String nameAction = event.getActionCommand();
929     if (nameAction.equals("ColorName")) onColorNameChanged();
930     else if (nameAction.equals("Edit")) onColorEdit();
931     else if (nameAction.equals("Update")) updateCurrentEntry();
932     else if (nameAction.equals("Add")) addNewEntry();
933     else if (nameAction.equals("NewGeneric")) newGenericMap();
934     else if (nameAction.equals("NewColorCube")) newColorCubeMap();
935     else if (nameAction.equals("NewColorRamp")) newColorRampMap();
936   }
937
938 }
939
940
941
942 //=======================================================================//
943 //                                                                       //
944 //                               FontMapPane                             //
945 //                                                                       //
946 //=======================================================================//
947 class FontMapPane extends JPanel implements ChangeListener,
948                                             ActionListener
949 {
950   private V2d_Viewer myViewer;
951   private Aspect_FontMap myFontMap;
952   private PropertiesDlg myDlg;
953
954   //-----------------------------------------------------------//
955   // GUI components
956   //-----------------------------------------------------------//
957   JLabel lblMapSize;
958   TitledBorder brdEntries;
959   JSlider sldEntries;
960   JLabel lblType, lblValue, lblSize, lblSlant;
961   JComboBox cmbType;
962   JTextField txtValue;
963   IntegerField txtSize, txtSlant;
964   JButton btnEdit, btnUpdate, btnAdd;
965
966
967 //=======================================================================//
968 // Construction
969 //=======================================================================//
970   public FontMapPane(V2d_Viewer viewer, PropertiesDlg parent)
971   {
972     myViewer = viewer;
973 //     myFontMap = new Aspect_FontMap(myViewer.FontMap());
974     myFontMap = myViewer.FontMap();
975     myDlg = parent;
976
977     try
978     {
979       jbInit();
980       initValues();
981     }
982     catch(Exception ex)
983     {
984       ex.printStackTrace();
985     }
986   }
987
988   private void jbInit() throws Exception
989   {
990     setLayout(new GridBagLayout());
991
992     JPanel labelPanel = new JPanel();
993     labelPanel.add(new JLabel("Size of the font map: "));
994     lblMapSize = new JLabel();
995     labelPanel.add(lblMapSize);
996     add(labelPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
997             GridBagConstraints.WEST, GridBagConstraints.NONE,
998             new Insets(5, 10, 5, 10), 0, 0));
999
1000     // Entries pane
1001     JPanel entriesPanel = new JPanel(new GridBagLayout());
1002     brdEntries = new TitledBorder(BorderFactory.createEtchedBorder(), "Entries:");
1003     entriesPanel.setBorder(brdEntries);
1004
1005     sldEntries = new JSlider();
1006     sldEntries.setMinimum(0);
1007     sldEntries.setMinorTickSpacing(1);
1008     sldEntries.setPaintLabels(true);
1009     sldEntries.setPaintTicks(true);
1010     sldEntries.setPaintTrack(true);
1011     sldEntries.addChangeListener(this);
1012     entriesPanel.add(sldEntries, new GridBagConstraints(0, 0, 2, 1, 1.0, 1.0,
1013             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1014             new Insets(5, 5, 5, 5), 0, 0));
1015
1016     entriesPanel.add(new JLabel("Type: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
1017             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1018             new Insets(5, 5, 5, 5), 0, 0));
1019     lblType = new JLabel();
1020     entriesPanel.add(lblType, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
1021             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1022             new Insets(5, 5, 5, 5), 0, 0));
1023
1024     entriesPanel.add(new JLabel("Value: "), new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0,
1025             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1026             new Insets(5, 5, 5, 5), 0, 0));
1027     lblValue = new JLabel();
1028     entriesPanel.add(lblValue, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
1029             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1030             new Insets(5, 5, 5, 5), 0, 0));
1031
1032     entriesPanel.add(new JLabel("Size: "), new GridBagConstraints(0, 3, 1, 1, 0.0, 1.0,
1033             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1034             new Insets(5, 5, 5, 5), 0, 0));
1035     lblSize = new JLabel();
1036     entriesPanel.add(lblSize, new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0,
1037             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1038             new Insets(5, 5, 5, 5), 0, 0));
1039
1040     entriesPanel.add(new JLabel("Slant: "), new GridBagConstraints(0, 4, 1, 1, 0.0, 1.0,
1041             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1042             new Insets(5, 5, 5, 5), 0, 0));
1043     lblSlant = new JLabel();
1044     entriesPanel.add(lblSlant, new GridBagConstraints(1, 4, 1, 1, 1.0, 1.0,
1045             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1046             new Insets(5, 5, 5, 5), 0, 0));
1047     add(entriesPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0,
1048             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
1049             new Insets(5, 5, 5, 5), 0, 0));
1050
1051     // New entry pane
1052     JPanel entryPanel = new JPanel(new GridBagLayout());
1053     entryPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),
1054                          "  New entry:  "));
1055
1056     entryPanel.add(new JLabel("Type: "), new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
1057             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1058             new Insets(5, 5, 5, 5), 0, 0));
1059     String[] items = {"DEFAULT", "COURIER", "HELVETICA", "TIMES", "USERDEFINED"};
1060     cmbType = new JComboBox(items);
1061     cmbType.setEditable(false);
1062     cmbType.addActionListener(this);
1063     cmbType.setActionCommand("Type");
1064     entryPanel.add(cmbType, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0,
1065             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1066             new Insets(5, 5, 5, 5), 0, 0));
1067     btnEdit = new JButton("Edit...");
1068     btnEdit.addActionListener(this);
1069     btnEdit.setActionCommand("Edit");
1070     entryPanel.add(btnEdit, new GridBagConstraints(2, 0, 1, 1, 0.0, 1.0,
1071             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1072             new Insets(5, 5, 5, 5), 0, 0));
1073
1074     entryPanel.add(new JLabel("Value: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
1075             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1076             new Insets(5, 5, 5, 5), 0, 0));
1077     txtValue = new JTextField(20);
1078     txtValue.setEditable(false);
1079     entryPanel.add(txtValue, new GridBagConstraints(1, 1, 2, 1, 1.5, 1.0,
1080             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1081             new Insets(5, 5, 5, 5), 0, 0));
1082
1083     entryPanel.add(new JLabel("Size: "), new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0,
1084             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1085             new Insets(5, 5, 5, 5), 0, 0));
1086     txtSize = new IntegerField(6);
1087     entryPanel.add(txtSize, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
1088             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1089             new Insets(5, 5, 5, 5), 0, 0));
1090     btnUpdate = new JButton("Update current");
1091     btnUpdate.addActionListener(this);
1092     btnUpdate.setActionCommand("Update");
1093     entryPanel.add(btnUpdate, new GridBagConstraints(2, 2, 1, 1, 0.0, 1.0,
1094             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1095             new Insets(5, 5, 5, 5), 0, 0));
1096
1097     entryPanel.add(new JLabel("Slant: "), new GridBagConstraints(0, 3, 1, 1, 0.0, 1.0,
1098             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1099             new Insets(5, 5, 5, 5), 0, 0));
1100     txtSlant = new IntegerField(6);
1101     entryPanel.add(txtSlant, new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0,
1102             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1103             new Insets(5, 5, 5, 5), 0, 0));
1104     btnAdd = new JButton("Add");
1105     btnAdd.addActionListener(this);
1106     btnAdd.setActionCommand("Add");
1107     entryPanel.add(btnAdd, new GridBagConstraints(2, 3, 1, 1, 0.0, 1.0,
1108             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1109             new Insets(5, 5, 5, 5), 0, 0));
1110
1111     add(entryPanel, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
1112             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1113             new Insets(5, 5, 5, 5), 0, 0));
1114   }
1115
1116   private void initValues()
1117   {
1118     updateEntries(0);
1119   }
1120
1121
1122 //=======================================================================//
1123 // Commands
1124 //=======================================================================//
1125   public void updateEntries(int index)
1126   {
1127     int mapSize = myFontMap.Size();
1128     lblMapSize.setText("" + mapSize);
1129     if (index == -1) index = mapSize - 1;
1130
1131     sldEntries.setMaximum(mapSize - 1);
1132     sldEntries.setValue(index);
1133
1134     if (sldEntries.getMaximum() <= 15)
1135     {
1136       sldEntries.setMajorTickSpacing(1);
1137       sldEntries.setSnapToTicks(true);
1138     }
1139     else if (sldEntries.getMaximum() <= 75)
1140     {
1141       sldEntries.setMajorTickSpacing(5);
1142       sldEntries.setSnapToTicks(false);
1143     }
1144     else if (sldEntries.getMaximum() <= 150)
1145     {
1146       sldEntries.setMajorTickSpacing(10);
1147       sldEntries.setSnapToTicks(false);
1148     }
1149     else
1150     {
1151       sldEntries.setMajorTickSpacing(25);
1152       sldEntries.setMinorTickSpacing(5);
1153       sldEntries.setSnapToTicks(false);
1154     }
1155
1156     updateEntryPane(index);
1157   }
1158
1159   public void updateEntryPane(int index)
1160   {
1161     brdEntries.setTitle("  Entries:   " + index + "  ");
1162     repaint();
1163
1164     Aspect_FontMapEntry anEntry = myFontMap.Entry(index + 1);
1165     Aspect_FontStyle aStyle = anEntry.Type();
1166
1167     switch (aStyle.Style())
1168     {
1169       case Aspect_TypeOfFont.Aspect_TOF_DEFAULT:
1170         lblType.setText("Aspect_TOF_DEFAULT");
1171         break;
1172       case Aspect_TypeOfFont.Aspect_TOF_COURIER:
1173         lblType.setText("Aspect_TOF_COURIER");
1174         break;
1175       case Aspect_TypeOfFont.Aspect_TOF_HELVETICA:
1176         lblType.setText("Aspect_TOF_HELVETICA");
1177         break;
1178       case Aspect_TypeOfFont.Aspect_TOF_TIMES:
1179         lblType.setText("Aspect_TOF_TIMES");
1180         break;
1181       case Aspect_TypeOfFont.Aspect_TOF_USERDEFINED:
1182         lblType.setText("Aspect_TOF_USERDEFINED");
1183         break;
1184       default:
1185         lblType.setText("Unknown");
1186     }
1187
1188     lblValue.setText(aStyle.Value().GetValue());
1189     lblSize.setText(myDlg.format(aStyle.Size(), 1));
1190     lblSlant.setText(myDlg.format(aStyle.Slant(), 1));
1191     
1192     cmbType.setSelectedIndex(aStyle.Style());
1193     txtValue.setText(aStyle.Value().GetValue());
1194     txtSize.setText(myDlg.format(aStyle.Size(), 1));
1195     txtSlant.setText(myDlg.format(aStyle.Slant(), 1));
1196   }
1197
1198   public void onTypeChanged()
1199   {
1200     if (cmbType.getSelectedIndex() == Aspect_TypeOfFont.Aspect_TOF_USERDEFINED)
1201     {
1202       txtValue.setText("Please, select the font");
1203       txtSize.setText("");
1204       txtSlant.setText("");
1205       btnEdit.setEnabled(true);
1206       btnUpdate.setEnabled(false);
1207       btnAdd.setEnabled(false);
1208       txtSize.setEnabled(false);
1209       txtSlant.setEnabled(false);
1210     }
1211     else
1212     {
1213       Aspect_FontStyle aStyle = new Aspect_FontStyle((short)cmbType.getSelectedIndex(),
1214                                                      0.3, 0.0, false);
1215       txtValue.setText(aStyle.Value().GetValue());
1216       txtSize.setText(myDlg.format(aStyle.Size(), 1));
1217       txtSlant.setText(myDlg.format(aStyle.Slant(), 1));
1218       btnEdit.setEnabled(false);
1219       btnUpdate.setEnabled(true);
1220       btnAdd.setEnabled(true);
1221       txtSize.setEnabled(true);
1222       txtSlant.setEnabled(true);
1223     }
1224   }
1225
1226   public void onFontEdit()
1227   {
1228     Font defFont = new Font("Helvetica", Font.BOLD, 10); 
1229     JFontChooser aDlg = new JFontChooser(defFont);
1230     if (aDlg.showDialog(myDlg, "Choose a font") == JFontChooser.ACCEPT_OPTION)
1231     {
1232       Font newFont = aDlg.getSelectedFont();
1233       Standard_CString name =
1234           new Standard_CString(newFont.getFamily() + (newFont.isBold() ?
1235                   (newFont.isItalic() ? "-BoldItalic" : "-Bold") :
1236                   (newFont.isItalic() ? "-Italic" : "")));
1237       Aspect_FontStyle aStyle =
1238           new Aspect_FontStyle(name, newFont.getSize()*25.4/72., 0.0, false);
1239       txtValue.setText(aStyle.Value().GetValue());
1240       txtSize.setText(myDlg.format(aStyle.Size(), 1));
1241       txtSlant.setText("");
1242       btnUpdate.setEnabled(true);
1243       btnAdd.setEnabled(true);
1244     }
1245   }
1246
1247   public void updateCurrentEntry()
1248   {
1249     Aspect_FontMapEntry anEntry = myFontMap.Entry(sldEntries.getValue() + 1);
1250     if (cmbType.getSelectedIndex() == Aspect_TypeOfFont.Aspect_TOF_USERDEFINED)
1251     {
1252       Aspect_FontStyle aStyle =
1253           new Aspect_FontStyle(new Standard_CString(txtValue.getText()));
1254       anEntry.SetType(aStyle);
1255     }
1256     else
1257     {
1258       Aspect_FontStyle aStyle =
1259           new Aspect_FontStyle((short)cmbType.getSelectedIndex(), (double)txtSize.getValue(),
1260                                (double)txtSlant.getValue(), false);
1261       anEntry.SetType(aStyle);
1262     }
1263     myFontMap.AddEntry(anEntry);
1264     myDlg.setModified();
1265     updateEntryPane(sldEntries.getValue());
1266   }
1267
1268   public void addNewEntry()
1269   {
1270     Aspect_FontStyle aStyle;
1271     if (cmbType.getSelectedIndex() == Aspect_TypeOfFont.Aspect_TOF_USERDEFINED)
1272       aStyle = new Aspect_FontStyle(new Standard_CString(txtValue.getText()));
1273     else
1274       aStyle = new Aspect_FontStyle((short)cmbType.getSelectedIndex(), (double)txtSize.getValue(), (double)txtSlant.getValue(), false);
1275     myFontMap.AddEntry(aStyle);
1276     myDlg.setModified();
1277     updateEntries(-1);
1278   }
1279
1280   public void apply()
1281   {
1282 //     myViewer.SetFontMap(myFontMap.getAspectFontMap(), true);
1283     myViewer.SetFontMap(myFontMap, true);
1284   }
1285
1286 //=======================================================================//
1287 // Change listener interface
1288 //=======================================================================//
1289   public void stateChanged(ChangeEvent event)
1290   {
1291     JSlider slider = (JSlider) event.getSource();
1292     if (slider.equals(sldEntries))
1293       updateEntryPane(sldEntries.getValue());
1294   }
1295
1296 //=======================================================================//
1297 // Action listener interface
1298 //=======================================================================//
1299   public void actionPerformed(ActionEvent event)
1300   {
1301     String nameAction = event.getActionCommand();
1302     if (nameAction.equals("Type")) onTypeChanged();
1303     else if (nameAction.equals("Edit")) onFontEdit();
1304     else if (nameAction.equals("Update")) updateCurrentEntry();
1305     else if (nameAction.equals("Add")) addNewEntry();
1306   }
1307 }
1308
1309
1310
1311 //=======================================================================//
1312 //                                                                       //
1313 //                               TypeMapPane                             //
1314 //                                                                       //
1315 //=======================================================================//
1316 class TypeMapPane extends JPanel implements ChangeListener,
1317                                             ActionListener
1318 {
1319   private V2d_Viewer myViewer;
1320   private Aspect_TypeMap myTypeMap;
1321   private PropertiesDlg myDlg;
1322
1323   //-----------------------------------------------------------//
1324   // GUI components
1325   //-----------------------------------------------------------//
1326   JLabel lblMapSize;
1327   TitledBorder brdEntries;
1328   JSlider sldEntries;
1329   JLabel lblStyle;
1330   JLabel lblValue;
1331   JComboBox cmbStyle;
1332   JTextField txtValue;
1333   JButton btnUpdate;
1334
1335
1336 //=======================================================================//
1337 // Construction
1338 //=======================================================================//
1339   public TypeMapPane(V2d_Viewer viewer, PropertiesDlg parent)
1340   {
1341     myViewer = viewer;
1342 //     myTypeMap = new Aspect_TypeMap(myViewer.TypeMap());
1343     myTypeMap = myViewer.TypeMap();
1344     myDlg = parent;
1345
1346     try
1347     {
1348       jbInit();
1349       initValues();
1350     }
1351     catch(Exception ex)
1352     {
1353       ex.printStackTrace();
1354     }
1355   }
1356
1357   private void jbInit() throws Exception
1358   {
1359     setLayout(new GridBagLayout());
1360
1361     JPanel labelPanel = new JPanel();
1362     labelPanel.add(new JLabel("Size of the type map: "));
1363     lblMapSize = new JLabel();
1364     labelPanel.add(lblMapSize);
1365     add(labelPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
1366             GridBagConstraints.WEST, GridBagConstraints.NONE,
1367             new Insets(5, 10, 5, 10), 0, 0));
1368
1369     // Entries pane
1370     JPanel entriesPanel = new JPanel(new GridBagLayout());
1371     brdEntries = new TitledBorder(BorderFactory.createEtchedBorder(), "Entries:");
1372     entriesPanel.setBorder(brdEntries);
1373
1374     sldEntries = new JSlider();
1375     sldEntries.setMinimum(0);
1376     sldEntries.setMinorTickSpacing(1);
1377     sldEntries.setPaintLabels(true);
1378     sldEntries.setPaintTicks(true);
1379     sldEntries.setPaintTrack(true);
1380     sldEntries.addChangeListener(this);
1381     entriesPanel.add(sldEntries, new GridBagConstraints(0, 0, 2, 1, 1.0, 1.0,
1382             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1383             new Insets(5, 5, 5, 5), 0, 0));
1384
1385     entriesPanel.add(new JLabel("Style: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
1386             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1387             new Insets(5, 5, 5, 5), 0, 0));
1388     lblStyle = new JLabel();
1389     entriesPanel.add(lblStyle, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
1390             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1391             new Insets(5, 5, 5, 5), 0, 0));
1392
1393     entriesPanel.add(new JLabel("Value: "), new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0,
1394             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1395             new Insets(5, 5, 5, 5), 0, 0));
1396     lblValue = new JLabel();
1397     entriesPanel.add(lblValue, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
1398             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1399             new Insets(5, 5, 5, 5), 0, 0));
1400     add(entriesPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0,
1401             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
1402             new Insets(5, 5, 5, 5), 0, 0));
1403
1404     // New entry pane
1405     JPanel entryPanel = new JPanel(new GridBagLayout());
1406     entryPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(),
1407                          "  New entry:  "));
1408
1409     entryPanel.add(new JLabel("Style: "), new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0,
1410             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1411             new Insets(5, 5, 5, 5), 0, 0));
1412     String[] items = {"SOLID", "DASH", "DOT", "DOTDASH", "USERDEFINED"};
1413     cmbStyle = new JComboBox(items);
1414     cmbStyle.setEditable(false);
1415     cmbStyle.addActionListener(this);
1416     cmbStyle.setActionCommand("Style");
1417     entryPanel.add(cmbStyle, new GridBagConstraints(1, 0, 1, 1, 0.5, 1.0,
1418             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1419             new Insets(5, 5, 5, 5), 0, 0));
1420
1421     entryPanel.add(new JLabel("Value: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
1422             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1423             new Insets(5, 5, 5, 5), 0, 0));
1424     txtValue = new JTextField(20);
1425     entryPanel.add(txtValue, new GridBagConstraints(1, 1, 1, 1, 0.5, 1.0,
1426             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1427             new Insets(5, 5, 5, 5), 0, 0));
1428
1429     btnUpdate = new JButton("Update current");
1430     btnUpdate.addActionListener(this);
1431     btnUpdate.setActionCommand("Update");
1432     entryPanel.add(btnUpdate, new GridBagConstraints(2, 0, 1, 1, 0.5, 1.0,
1433             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1434             new Insets(5, 5, 5, 5), 0, 0));
1435     JButton button = new JButton("Add");
1436     button.addActionListener(this);
1437     button.setActionCommand("Add");
1438     entryPanel.add(button, new GridBagConstraints(2, 1, 1, 1, 0.5, 1.0,
1439             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1440             new Insets(5, 5, 5, 5), 0, 0));
1441
1442     add(entryPanel, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
1443             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1444             new Insets(5, 5, 5, 5), 0, 0));
1445   }
1446
1447   private void initValues()
1448   {
1449     updateEntries(0);
1450   }
1451
1452
1453 //=======================================================================//
1454 // Commands
1455 //=======================================================================//
1456   public void updateEntries(int index)
1457   {
1458     int mapSize = myTypeMap.Size();
1459     lblMapSize.setText("" + mapSize);
1460     if (index == -1) index = mapSize - 1;
1461
1462     sldEntries.setMaximum(mapSize - 1);
1463     sldEntries.setValue(index);
1464
1465     if (sldEntries.getMaximum() <= 15)
1466     {
1467       sldEntries.setMajorTickSpacing(1);
1468       sldEntries.setSnapToTicks(true);
1469     }
1470     else if (sldEntries.getMaximum() <= 75)
1471     {
1472       sldEntries.setMajorTickSpacing(5);
1473       sldEntries.setSnapToTicks(false);
1474     }
1475     else if (sldEntries.getMaximum() <= 150)
1476     {
1477       sldEntries.setMajorTickSpacing(10);
1478       sldEntries.setSnapToTicks(false);
1479     }
1480     else
1481     {
1482       sldEntries.setMajorTickSpacing(25);
1483       sldEntries.setMinorTickSpacing(5);
1484       sldEntries.setSnapToTicks(false);
1485     }
1486
1487     updateEntryPane(index);
1488   }
1489
1490 //=======================================================================//
1491   public void updateEntryPane(int index)
1492   {
1493     brdEntries.setTitle("  Entries:   " + index + "  ");
1494     repaint();
1495
1496     Aspect_TypeMapEntry anEntry = myTypeMap.Entry(index + 1);
1497     if (anEntry.IsAllocated())
1498     {
1499       Aspect_LineStyle aStyle = anEntry.Type();
1500
1501       switch (aStyle.Style())
1502       {
1503         case Aspect_TypeOfLine.Aspect_TOL_SOLID:
1504           lblStyle.setText("SOLID");
1505           break;
1506         case Aspect_TypeOfLine.Aspect_TOL_DASH:
1507           lblStyle.setText("DASH");
1508           break;
1509         case Aspect_TypeOfLine.Aspect_TOL_DOT:
1510           lblStyle.setText("DOT");
1511           break;
1512         case Aspect_TypeOfLine.Aspect_TOL_DOTDASH:
1513           lblStyle.setText("DOTDASH");
1514           break;
1515         case Aspect_TypeOfLine.Aspect_TOL_USERDEFINED:
1516           lblStyle.setText("USERDEFINED");
1517           break;
1518         default:
1519           lblStyle.setText("Unknown");
1520       }
1521
1522       lblValue.setText(buildValuesString(aStyle.Values()));
1523       cmbStyle.setSelectedIndex(aStyle.Style());
1524       txtValue.setText(buildValuesString(aStyle.Values()));
1525     }
1526     else
1527     {
1528       lblStyle.setText("Not allocated");
1529       lblValue.setText("");
1530       cmbStyle.setSelectedIndex(4);
1531       txtValue.setText("");
1532     }
1533   }
1534
1535 //=======================================================================//
1536   public void onStyleChanged()
1537   {
1538     if (cmbStyle.getSelectedIndex() == Aspect_TypeOfLine.Aspect_TOL_USERDEFINED)
1539       txtValue.setEnabled(true);
1540     else
1541     {
1542       txtValue.setEnabled(false);
1543
1544       Aspect_TypeMapEntry aTmpEntry = new Aspect_TypeMapEntry(99, new Aspect_LineStyle((short)cmbStyle.getSelectedIndex()));
1545       Aspect_LineStyle aStyle = aTmpEntry.Type();
1546       txtValue.setText(buildValuesString(aStyle.Values()));
1547     }
1548   }
1549
1550 //=======================================================================//
1551   public void updateCurrentEntry()
1552   {
1553     Aspect_TypeMapEntry anEntry = myTypeMap.Entry(sldEntries.getValue() + 1);
1554     
1555     if (cmbStyle.getSelectedIndex() == Aspect_TypeOfLine.Aspect_TOL_USERDEFINED)
1556     {
1557       TColQuantity_Array1OfLength aValues = extractValues(txtValue.getText());
1558       if (aValues != null)
1559       {
1560         Aspect_LineStyle aStyle = new Aspect_LineStyle(aValues);
1561         anEntry.SetType(aStyle);
1562       }
1563       else
1564       {
1565         JOptionPane.showMessageDialog(myDlg, "The string isn't valid",
1566             "Error", JOptionPane.ERROR_MESSAGE);
1567         return;
1568       }
1569     }
1570     else
1571     {
1572 //       Aspect_LineStyle aStyle = new Aspect_LineStyle(cmbStyle.getSelectedIndex());
1573       Aspect_LineStyle aStyle = new Aspect_LineStyle((short)cmbStyle.getSelectedIndex());
1574       anEntry.SetType(aStyle);
1575     }
1576     myTypeMap.AddEntry(anEntry);
1577     myDlg.setModified();
1578     updateEntryPane(sldEntries.getValue());
1579   }
1580
1581 //=======================================================================//
1582   public void addNewEntry()
1583   {
1584     int newEntryIndex;
1585     if (cmbStyle.getSelectedIndex() == Aspect_TypeOfLine.Aspect_TOL_USERDEFINED)
1586     {
1587       TColQuantity_Array1OfLength aValues = extractValues(txtValue.getText());
1588       if (aValues != null)
1589       {
1590         Aspect_LineStyle aStyle = new Aspect_LineStyle(aValues);
1591         newEntryIndex = myTypeMap.AddEntry(aStyle);
1592       }
1593       else
1594       {
1595         JOptionPane.showMessageDialog(myDlg, "The string isn't valid",
1596             "Error", JOptionPane.ERROR_MESSAGE);
1597         return;
1598       }
1599     }
1600     else
1601     {
1602       Aspect_LineStyle aStyle = new Aspect_LineStyle((short)cmbStyle.getSelectedIndex());
1603       newEntryIndex = myTypeMap.AddEntry(aStyle);
1604     }
1605     myDlg.setModified();
1606     updateEntries(newEntryIndex);
1607   }
1608
1609 //=======================================================================//
1610   public void apply()
1611   {
1612 //     myViewer.SetTypeMap(myTypeMap.getAspectTypeMap());
1613     myViewer.SetTypeMap(myTypeMap);
1614   }
1615
1616 //=======================================================================//
1617   private TColQuantity_Array1OfLength extractValues(String aValues)
1618   {
1619     if (aValues.equals(""))
1620       return null;
1621       
1622     Vector v = new Vector(5);
1623     int pos = 0;
1624     boolean isFinish = false;
1625
1626     while (!isFinish)
1627     {
1628       int k = aValues.indexOf(";", pos);
1629       if (k == -1)
1630       {
1631         try {
1632           BigDecimal value = new BigDecimal(aValues.substring(pos).trim());
1633           v.add(value);
1634         }
1635         catch (Exception e) {
1636           return null;
1637         }
1638         isFinish = true;
1639       }
1640       else
1641       {
1642         try {
1643           BigDecimal value = new BigDecimal(aValues.substring(pos, k).trim());
1644           v.add(value);
1645         }
1646         catch (Exception e) {
1647           return null;
1648         }
1649         pos = k + 1;
1650       }
1651     }
1652     if (v.isEmpty())
1653       return null;
1654
1655     int count = v.size();
1656     TColQuantity_Array1OfLength anArray = new TColQuantity_Array1OfLength(1, count);
1657     for (int i = 0; i < count; i++)
1658     {
1659       BigDecimal value = (BigDecimal) v.get(i);
1660       anArray.SetValue(i+1, value.doubleValue());
1661     }
1662     return anArray;
1663   }
1664
1665 //=======================================================================//
1666   private String buildValuesString(TColQuantity_Array1OfLength anArray)
1667   {
1668     String aValues = new String("");
1669     int count = anArray.Length();
1670     for (int i = 0; i < count; i++)
1671     {
1672       if (i > 0) aValues += "; ";
1673       aValues += myDlg.format(anArray.Value(i+1));
1674     }
1675     return aValues;
1676   }
1677
1678 //=======================================================================//
1679 // Change listener interface
1680 //=======================================================================//
1681   public void stateChanged(ChangeEvent event)
1682   {
1683     JSlider slider = (JSlider) event.getSource();
1684     if (slider.equals(sldEntries))
1685       updateEntryPane(sldEntries.getValue());
1686   }
1687
1688 //=======================================================================//
1689 // Action listener interface
1690 //=======================================================================//
1691   public void actionPerformed(ActionEvent event)
1692   {
1693     String nameAction = event.getActionCommand();
1694     if (nameAction.equals("Style")) onStyleChanged();
1695     else if (nameAction.equals("Update")) updateCurrentEntry();
1696     else if (nameAction.equals("Add")) addNewEntry();
1697   }
1698
1699 }
1700
1701
1702
1703 //=======================================================================//
1704 //                                                                       //
1705 //                               MarkMapPane                             //
1706 //                                                                       //
1707 //=======================================================================//
1708 class MarkMapPane extends JPanel implements ChangeListener
1709 {
1710   private V2d_Viewer myViewer;
1711   private Aspect_MarkMap myMarkMap;
1712   private PropertiesDlg myDlg;
1713
1714   //-----------------------------------------------------------//
1715   // GUI components
1716   //-----------------------------------------------------------//
1717   JLabel lblMapSize;
1718   TitledBorder brdEntries;
1719   JSlider sldEntries;
1720   JLabel lblStyle;
1721   JPanel paneXValues, paneYValues, paneSValues;
1722
1723
1724 //=======================================================================//
1725 // Construction
1726 //=======================================================================//
1727   public MarkMapPane(V2d_Viewer viewer, PropertiesDlg parent)
1728   {
1729     myViewer = viewer;
1730 //     myMarkMap = new Aspect_MarkMap(myViewer.MarkMap());
1731     myMarkMap = myViewer.MarkMap();
1732     myDlg = parent;
1733
1734     try
1735     {
1736       jbInit();
1737       initValues();
1738     }
1739     catch(Exception ex)
1740     {
1741       ex.printStackTrace();
1742     }
1743   }
1744
1745   private void jbInit() throws Exception
1746   {
1747     setLayout(new GridBagLayout());
1748
1749     JPanel labelPanel = new JPanel();
1750     labelPanel.add(new JLabel("Size of the mark map: "));
1751     lblMapSize = new JLabel();
1752     labelPanel.add(lblMapSize);
1753     add(labelPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
1754             GridBagConstraints.WEST, GridBagConstraints.NONE,
1755             new Insets(5, 10, 5, 10), 0, 0));
1756
1757     // Entries pane
1758     JPanel entriesPanel = new JPanel(new GridBagLayout());
1759     brdEntries = new TitledBorder(BorderFactory.createEtchedBorder(), "Entries:");
1760     entriesPanel.setBorder(brdEntries);
1761
1762     sldEntries = new JSlider();
1763     sldEntries.setMinimum(0);
1764     sldEntries.setMinorTickSpacing(1);
1765     sldEntries.setPaintLabels(true);
1766     sldEntries.setPaintTicks(true);
1767     sldEntries.setPaintTrack(true);
1768     sldEntries.addChangeListener(this);
1769     entriesPanel.add(sldEntries, new GridBagConstraints(0, 0, 2, 1, 1.0, 1.0,
1770             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1771             new Insets(5, 5, 5, 5), 0, 0));
1772
1773     entriesPanel.add(new JLabel("Style: "), new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0,
1774             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1775             new Insets(5, 5, 5, 5), 0, 0));
1776     lblStyle = new JLabel();
1777     entriesPanel.add(lblStyle, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
1778             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1779             new Insets(5, 5, 5, 5), 0, 0));
1780
1781     entriesPanel.add(new JLabel("XValues: "), new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0,
1782             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1783             new Insets(5, 5, 5, 5), 0, 0));
1784     paneXValues = new JPanel() {
1785         public Dimension getPreferredSize() {
1786           Dimension size = super.getPreferredSize();
1787           return new Dimension(size.width, Math.min(size.height, 100));
1788           }
1789         public Dimension getMinimumSize() {
1790           Dimension size = super.getMinimumSize();
1791           return new Dimension(size.width, Math.min(size.height, 100));
1792           }
1793         };
1794     entriesPanel.add(paneXValues, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0,
1795             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1796             new Insets(5, 5, 5, 5), 0, 0));
1797
1798     entriesPanel.add(new JLabel("YValues: "), new GridBagConstraints(0, 3, 1, 1, 0.0, 1.0,
1799             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1800             new Insets(5, 5, 5, 5), 0, 0));
1801     paneYValues = new JPanel() {
1802         public Dimension getPreferredSize() {
1803           Dimension size = super.getPreferredSize();
1804           return new Dimension(size.width, Math.min(size.height, 100));
1805           }
1806         public Dimension getMinimumSize() {
1807           Dimension size = super.getMinimumSize();
1808           return new Dimension(size.width, Math.min(size.height, 100));
1809           }
1810         };
1811     entriesPanel.add(paneYValues, new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0,
1812             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1813             new Insets(5, 5, 5, 5), 0, 0));
1814
1815     entriesPanel.add(new JLabel("SValues: "), new GridBagConstraints(0, 4, 1, 1, 0.0, 1.0,
1816             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1817             new Insets(5, 5, 5, 5), 0, 0));
1818     paneSValues = new JPanel() {
1819         public Dimension getPreferredSize() {
1820           Dimension size = super.getPreferredSize();
1821           return new Dimension(size.width, Math.min(size.height, 100));
1822           }
1823         public Dimension getMinimumSize() {
1824           Dimension size = super.getMinimumSize();
1825           return new Dimension(size.width, Math.min(size.height, 100));
1826           }
1827         };
1828     entriesPanel.add(paneSValues, new GridBagConstraints(1, 4, 1, 1, 1.0, 1.0,
1829             GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
1830             new Insets(5, 5, 5, 5), 0, 0));
1831     add(entriesPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0,
1832             GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
1833             new Insets(5, 5, 5, 5), 0, 0));
1834   }
1835
1836   private void initValues()
1837   {
1838     updateEntries(0);
1839   }
1840
1841
1842 //=======================================================================//
1843 // Commands
1844 //=======================================================================//
1845   public void updateEntries(int index)
1846   {
1847     int mapSize = myMarkMap.Size();
1848     lblMapSize.setText("" + mapSize);
1849     if (index == -1) index = mapSize - 1;
1850
1851     sldEntries.setMaximum(mapSize - 1);
1852     sldEntries.setValue(index);
1853
1854     if (sldEntries.getMaximum() <= 15)
1855     {
1856       sldEntries.setMajorTickSpacing(1);
1857       sldEntries.setSnapToTicks(true);
1858     }
1859     else if (sldEntries.getMaximum() <= 75)
1860     {
1861       sldEntries.setMajorTickSpacing(5);
1862       sldEntries.setSnapToTicks(false);
1863     }
1864     else if (sldEntries.getMaximum() <= 150)
1865     {
1866       sldEntries.setMajorTickSpacing(10);
1867       sldEntries.setSnapToTicks(false);
1868     }
1869     else
1870     {
1871       sldEntries.setMajorTickSpacing(25);
1872       sldEntries.setMinorTickSpacing(5);
1873       sldEntries.setSnapToTicks(false);
1874     }
1875
1876     updateEntryPane(index);
1877   }
1878
1879 //=======================================================================//
1880   public void updateEntryPane(int index)
1881   {
1882     brdEntries.setTitle("  Entries:   " + index + "  ");
1883     repaint();
1884
1885     Aspect_MarkMapEntry anEntry = myMarkMap.Entry(index + 1);
1886     if (anEntry.IsAllocated())
1887     {
1888       Aspect_MarkerStyle aStyle = anEntry.Style();
1889
1890       switch (aStyle.Type())
1891       {
1892         case Aspect_TypeOfMarker.Aspect_TOM_POINT:
1893           lblStyle.setText("Aspect_TOM_POINT");
1894           break;
1895         case Aspect_TypeOfMarker.Aspect_TOM_PLUS:
1896           lblStyle.setText("Aspect_TOM_PLUS");
1897           break;
1898         case Aspect_TypeOfMarker.Aspect_TOM_STAR:
1899           lblStyle.setText("Aspect_TOM_STAR");
1900           break;
1901         case Aspect_TypeOfMarker.Aspect_TOM_O:
1902           lblStyle.setText("Aspect_TOM_O");
1903           break;
1904         case Aspect_TypeOfMarker.Aspect_TOM_X:
1905           lblStyle.setText("Aspect_TOM_X");
1906           break;
1907         case Aspect_TypeOfMarker.Aspect_TOM_O_POINT:
1908           lblStyle.setText("Aspect_TOM_O_POINT");
1909           break;
1910         case Aspect_TypeOfMarker.Aspect_TOM_O_PLUS:
1911           lblStyle.setText("Aspect_TOM_O_PLUS");
1912           break;
1913         case Aspect_TypeOfMarker.Aspect_TOM_O_STAR:
1914           lblStyle.setText("Aspect_TOM_O_STAR");
1915           break;
1916         case Aspect_TypeOfMarker.Aspect_TOM_O_X:
1917           lblStyle.setText("Aspect_TOM_O_X");
1918           break;
1919         case Aspect_TypeOfMarker.Aspect_TOM_BALL:
1920           lblStyle.setText("Aspect_TOM_BALL");
1921           break;
1922         case Aspect_TypeOfMarker.Aspect_TOM_RING1:
1923           lblStyle.setText("Aspect_TOM_RING1");
1924           break;
1925         case Aspect_TypeOfMarker.Aspect_TOM_RING2:
1926           lblStyle.setText("Aspect_TOM_RING2");
1927           break;
1928         case Aspect_TypeOfMarker.Aspect_TOM_RING3:
1929           lblStyle.setText("Aspect_TOM_RING3");
1930           break;
1931         case Aspect_TypeOfMarker.Aspect_TOM_USERDEFINED:
1932           lblStyle.setText("Aspect_TOM_USERDEFINED");
1933           break;
1934         default:
1935           lblStyle.setText("Unknown");
1936       }
1937
1938       setValues(paneXValues, getStringValues(aStyle.XValues()));
1939       setValues(paneYValues, getStringValues(aStyle.YValues()));
1940       setValues(paneSValues, getStringValues(aStyle.SValues()));
1941     }
1942     else
1943     {
1944       lblStyle.setText("Not allocated");
1945       paneXValues.removeAll();
1946       paneYValues.removeAll();
1947       paneSValues.removeAll();
1948     }
1949   }
1950
1951 //=======================================================================//
1952   public void apply()
1953   {
1954   }
1955
1956  //=======================================================================//
1957  private void setValues(JPanel pane, String[] aValues)
1958   {
1959     pane.removeAll();
1960     pane.setLayout(new ToolbarLayout(ToolbarLayout.LEFT, ToolbarLayout.TOP, 10, 0));
1961     for (int i = 0; i < aValues.length; i++)
1962       pane.add(new JLabel(aValues[i]));
1963   }
1964
1965 //=======================================================================//
1966   private String[] getStringValues(TShort_Array1OfShortReal anArray)
1967   {
1968     int count = anArray.Length();
1969     if (count == 0)
1970       return new String[1];
1971
1972     String[] aValues = new String[count];
1973     for (int i = 0; i < count; i++)
1974       aValues[i] = myDlg.format(anArray.Value(i+1));
1975     return aValues;
1976   }
1977
1978 //=======================================================================//
1979   private String[] getStringValues(TColStd_Array1OfBoolean anArray)
1980   {
1981     int count = anArray.Length();
1982     String[] aValues = new String[count];
1983     for (int i = 0; i < count; i++)
1984       aValues[i] = anArray.Value(i+1) ? "True" : "False";
1985     return aValues;
1986   }
1987
1988
1989 //=======================================================================//
1990 // Change listener interface
1991 //=======================================================================//
1992   public void stateChanged(ChangeEvent event)
1993   {
1994     JSlider slider = (JSlider) event.getSource();
1995     if (slider.equals(sldEntries))
1996       updateEntryPane(sldEntries.getValue());
1997   }
1998
1999 }
2000
2001
2002 //=======================================================================//
2003 //                                                                       //
2004 //                              ColorCubeDlg                             //
2005 //                                                                       //
2006 //=======================================================================//
2007 class ColorCubeDlg extends JDialog implements ActionListener
2008 {
2009   private IntegerField txtBasePixel = new IntegerField("0");
2010   private IntegerField txtRedMax = new IntegerField("7");
2011   private IntegerField txtRedMult = new IntegerField("1");
2012   private IntegerField txtGreenMax = new IntegerField("7");
2013   private IntegerField txtGreenMult = new IntegerField("8");
2014   private IntegerField txtBlueMax = new IntegerField("3");
2015   private IntegerField txtBlueMult = new IntegerField("64");
2016   private boolean isOK = false;
2017
2018 //=======================================================================//
2019 // Construction
2020 //=======================================================================//
2021   public ColorCubeDlg(PropertiesDlg parent)
2022   {
2023     super(parent, "New Color Cube", true);
2024     try
2025     {
2026       jbInit();
2027     }
2028     catch(Exception ex)
2029     {
2030       ex.printStackTrace();
2031     }
2032   }
2033
2034   private void jbInit() throws Exception
2035   {
2036     getContentPane().setLayout(new BorderLayout(10, 10));
2037
2038     JPanel infoPane = new JPanel(new GridLayout(0, 2, 10, 10));
2039     infoPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
2040     infoPane.add(new JLabel("base_pixel"));
2041     infoPane.add(txtBasePixel);
2042     infoPane.add(new JLabel("redmax"));
2043     infoPane.add(txtRedMax);
2044     infoPane.add(new JLabel("redmult"));
2045     infoPane.add(txtRedMult);
2046     infoPane.add(new JLabel("greenmax"));
2047     infoPane.add(txtGreenMax);
2048     infoPane.add(new JLabel("greenmult"));
2049     infoPane.add(txtGreenMult);
2050     infoPane.add(new JLabel("bluemax"));
2051     infoPane.add(txtBlueMax);
2052     infoPane.add(new JLabel("bluemult"));
2053     infoPane.add(txtBlueMult);
2054     getContentPane().add(infoPane, BorderLayout.CENTER);
2055
2056     JPanel controlPane = new JPanel();
2057     controlPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
2058     JPanel pane = new JPanel(new GridLayout(0, 1, 10, 10));
2059     JButton button = new JButton("OK");
2060     button.addActionListener(this);
2061     button.setActionCommand("OK");
2062     pane.add(button);
2063     button = new JButton("Cancel");
2064     button.addActionListener(this);
2065     button.setActionCommand("Cancel");
2066     pane.add(button);
2067     controlPane.add(pane);
2068     getContentPane().add(controlPane, BorderLayout.EAST);
2069     pack();
2070   }
2071
2072 //=======================================================================//
2073   private void close(boolean b)
2074   {
2075     isOK = b;
2076     dispose();
2077   }
2078
2079 //=======================================================================//
2080   public boolean isOK()
2081   {
2082     return isOK;
2083   }
2084
2085 //=======================================================================//
2086   public Aspect_ColorCubeColorMap getColorMap()
2087   {
2088     if (isOK)
2089     {
2090       Aspect_ColorCubeColorMap aMap =
2091           new Aspect_ColorCubeColorMap(txtBasePixel.getValue(),
2092                                        txtRedMax.getValue(), txtRedMult.getValue(),
2093                                        txtGreenMax.getValue(), txtGreenMult.getValue(),
2094                                        txtBlueMax.getValue(), txtBlueMult.getValue());
2095       return aMap;
2096     }
2097
2098     return null; 
2099   }
2100
2101
2102 //=======================================================================//
2103 // Action listener interface
2104 //=======================================================================//
2105   public void actionPerformed(ActionEvent event)
2106   {
2107     String nameAction = event.getActionCommand();
2108     if (nameAction.equals("OK")) close(true);
2109     else if (nameAction.equals("Cancel")) close(false);
2110   }
2111
2112 }
2113
2114
2115
2116 //=======================================================================//
2117 //                                                                       //
2118 //                              ColorRampDlg                             //
2119 //                                                                       //
2120 //=======================================================================//
2121 class ColorRampDlg extends JDialog implements ActionListener,
2122                                               FocusListener
2123 {
2124   private IntegerField txtBasePixel;
2125   private IntegerField txtDimension;
2126   private JComboBox cmbName;
2127   private RealField txtRed;
2128   private RealField txtGreen;
2129   private RealField txtBlue;
2130   private boolean isOK = false;
2131   private PropertiesDlg myDlg;
2132
2133 //=======================================================================//
2134 // Construction
2135 //=======================================================================//
2136   public ColorRampDlg(PropertiesDlg parent)
2137   {
2138     super(parent, "New Color Ramp", true);
2139     myDlg = parent;
2140     try
2141     {
2142       jbInit();
2143     }
2144     catch(Exception ex)
2145     {
2146       ex.printStackTrace();
2147     }
2148   }
2149
2150   private void jbInit() throws Exception
2151   {
2152     getContentPane().setLayout(new BorderLayout(10, 10));
2153
2154     JPanel infoPane = new JPanel(new GridLayout(0, 2, 10, 10));
2155     infoPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
2156     infoPane.add(new JLabel("base_pixel"));
2157     txtBasePixel = new IntegerField("0");
2158     infoPane.add(txtBasePixel);
2159     infoPane.add(new JLabel("dimension"));
2160     txtDimension = new IntegerField("16");
2161     infoPane.add(txtDimension);
2162     infoPane.add(new JLabel("Color Name"));
2163
2164     String[] items = new String[517];
2165     for (int i = 0; i < 517; i++)
2166       items[i] = Quantity_Color.StringName((short)i).GetValue();
2167     cmbName = new JComboBox(items);
2168     cmbName.setEditable(false);
2169     cmbName.addActionListener(this);
2170     cmbName.setActionCommand("ColorName");
2171     infoPane.add(cmbName);
2172     getContentPane().add(infoPane, BorderLayout.CENTER);
2173
2174     JPanel colorPane = new JPanel(new GridLayout(1, 0, 10, 10));
2175     colorPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
2176     txtRed = new RealField(8);
2177     txtRed.addFocusListener(this);
2178     colorPane.add(txtRed);
2179     txtGreen = new RealField(8);
2180     txtGreen.addFocusListener(this);
2181     colorPane.add(txtGreen);
2182     txtBlue = new RealField(8);
2183     txtBlue.addFocusListener(this);
2184     colorPane.add(txtBlue);
2185     JButton button = new JButton("Edit...");
2186     button.addActionListener(this);
2187     button.setActionCommand("Edit");
2188     colorPane.add(button);
2189     cmbName.setSelectedIndex(Quantity_NameOfColor.Quantity_NOC_RED);
2190     getContentPane().add(colorPane, BorderLayout.SOUTH);
2191
2192     JPanel controlPane = new JPanel();
2193     controlPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
2194     JPanel pane = new JPanel(new GridLayout(0, 1, 10, 10));
2195     button = new JButton("OK");
2196     button.addActionListener(this);
2197     button.setActionCommand("OK");
2198     pane.add(button);
2199     button = new JButton("Cancel");
2200     button.addActionListener(this);
2201     button.setActionCommand("Cancel");
2202     pane.add(button);
2203     controlPane.add(pane);
2204     getContentPane().add(controlPane, BorderLayout.EAST);
2205     pack();
2206   }
2207
2208 //=======================================================================//
2209   private void close(boolean b)
2210   {
2211     isOK = b;
2212     dispose();
2213   }
2214
2215 //=======================================================================//
2216   private void editColor()
2217   {
2218     Color newColor = JColorChooser.showDialog(this, "Select Color",
2219             new Color((float) txtRed.getValue(), (float) txtGreen.getValue(),
2220                       (float) txtBlue.getValue()));
2221     if (newColor != null)
2222     {
2223       double red = newColor.getRed()/255.;
2224       double green = newColor.getGreen()/255.;
2225       double blue = newColor.getBlue()/255.;
2226       txtRed.setText(myDlg.format(red));
2227       txtGreen.setText(myDlg.format(green));
2228       txtBlue.setText(myDlg.format(blue));
2229       cmbName.setSelectedIndex(Quantity_Color.Name(red, green, blue));
2230     }
2231   }
2232
2233 //=======================================================================//
2234   private void changeColor()
2235   {
2236     Quantity_Color aColor = new Quantity_Color((short)cmbName.getSelectedIndex());
2237     txtRed.setText(myDlg.format(aColor.Red()));
2238     txtGreen.setText(myDlg.format(aColor.Green()));
2239     txtBlue.setText(myDlg.format(aColor.Blue()));
2240   }
2241
2242 //=======================================================================//
2243   public boolean isOK()
2244   {
2245     return isOK;
2246   }
2247
2248 //=======================================================================//
2249   public Aspect_ColorRampColorMap getColorMap()
2250   {
2251     if (isOK)
2252     {
2253       Quantity_Color aColor =
2254           new Quantity_Color(txtRed.getValue(), txtGreen.getValue(), txtBlue.getValue(),
2255                              Quantity_TypeOfColor.Quantity_TOC_RGB);
2256       Aspect_ColorRampColorMap aMap =
2257           new Aspect_ColorRampColorMap(txtBasePixel.getValue(), txtDimension.getValue(),
2258                                        aColor);
2259       return aMap;
2260     }
2261     
2262     return null; 
2263   }
2264
2265
2266 //=======================================================================//
2267 // Focus listener interface
2268 //=======================================================================//
2269   public void focusGained(FocusEvent event)
2270   {
2271   }
2272
2273   public void focusLost(FocusEvent event)
2274   {
2275     RealField field = (RealField) event.getSource();
2276     if (field.getValue() < 0) field.setText("0");
2277     if (field.getValue() > 1) field.setText("1");
2278     cmbName.setSelectedIndex(Quantity_Color.Name(txtRed.getValue(),
2279                              txtGreen.getValue(), txtBlue.getValue()));
2280   }
2281
2282 //=======================================================================//
2283 // Action listener interface
2284 //=======================================================================//
2285   public void actionPerformed(ActionEvent event)
2286   {
2287     String nameAction = event.getActionCommand();
2288     if (nameAction.equals("OK")) close(true);
2289     else if (nameAction.equals("Cancel")) close(false);
2290     else if (nameAction.equals("Edit")) editColor();
2291     else if (nameAction.equals("ColorName")) changeColor();
2292   }
2293
2294 }
2295
2296