~ubuntu-branches/ubuntu/vivid/electric/vivid

« back to all changes in this revision

Viewing changes to com/sun/electric/tool/user/dialogs/GetInfoNode.java

  • Committer: Package Import Robot
  • Author(s): Markus Koschany
  • Date: 2014-07-08 21:54:23 UTC
  • mfrom: (1.1.6) (3.1.9 sid)
  • Revision ID: package-import@ubuntu.com-20140708215423-4zrgsca1e28tzcoc
Tags: 9.05+dfsg-1
* Imported Upstream version 9.05+dfsg.
* Add signing-key.pgp and check for valid upstream tarballs with uscan's
  pgpsigurlmangle feature.
* Move the package to Git.

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
import com.sun.electric.technology.PrimitiveNodeSize;
46
46
import com.sun.electric.technology.Technology;
47
47
import com.sun.electric.technology.Technology.NodeLayer;
 
48
import com.sun.electric.technology.Technology.ExtraField;
48
49
import com.sun.electric.technology.technologies.Artwork;
49
50
import com.sun.electric.technology.technologies.Generic;
50
51
import com.sun.electric.technology.technologies.Schematics;
69
70
import java.awt.GridBagConstraints;
70
71
import java.awt.Insets;
71
72
import java.awt.geom.Point2D;
 
73
import java.io.Serializable;
72
74
import java.util.ArrayList;
73
75
import java.util.Iterator;
74
76
import java.util.List;
102
104
        private List<AttributesTable.AttValPair> allAttributes;
103
105
        private List<ArcInst> portObjects;
104
106
        private boolean bigger;
105
 
        private boolean scalableTrans;
106
 
        private boolean multiCutNode;
107
 
        private boolean carbonNanotubeNode;
108
107
        private boolean swapXY;
 
108
        private ExtraFields extraFields = new ExtraFields();
109
109
        private AttributesTable attributesTable;
110
110
        private EditWindow wnd;
111
111
 
 
112
        private static class ExtraFields implements Serializable
 
113
        {
 
114
                private boolean scalableTrans;
 
115
                private boolean multiCutNode;
 
116
                private boolean carbonNanotubeNode;
 
117
                private boolean routingExclusionNode;
 
118
                private ExtraField extraField1;
 
119
                private ExtraField extraField2;
 
120
        }
 
121
 
112
122
        private static Preferences prefs = Preferences.userNodeForPackage(GetInfoNode.class);
113
123
 
114
124
        /**
532
542
                {
533
543
                        if (!ni.getFunction().isFET())
534
544
                        {
535
 
                                textField1.setEditable(true);
536
545
                                textField1Label.setText("Area:");
537
546
 
538
547
                                Variable var = ni.getVar(Schematics.ATTR_AREA);
539
 
                                textField1.setText(var.getPureValue(-1));
 
548
                initialTextField1 = var.getPureValue(-1);
 
549
                                textField1.setEditable(true);
 
550
                textField1.setText(initialTextField1);
540
551
                        }
541
552
                }
542
553
 
543
 
                multiCutNode = false;
 
554
                extraFields.multiCutNode = false;
544
555
                if (!ni.isCellInstance())
545
556
                {
546
557
                        PrimitiveNode pnp = (PrimitiveNode)np;
547
 
                        multiCutNode = pnp.isMulticut();
 
558
                        extraFields.multiCutNode = pnp.isMulticut();
548
559
//                      if (pnp.findMulticut() != null) multiCutNode = true;
549
560
                }
550
 
                if (multiCutNode)
 
561
                if (extraFields.multiCutNode)
551
562
                {
552
563
                        popupLabel.setText("Cut placement:");
553
564
                        popup.setEnabled(true);
558
569
                        popup.setSelectedIndex(initialPopupIndex);
559
570
 
560
571
                        textField1Label.setText("Cut spacing:");
561
 
                        textField1.setEditable(true);
562
572
            Variable var = ni.getVar(NodeLayer.CUT_SPACING);
563
 
                        if (var == null)
564
 
                                textField1.setText("DEFAULT");
565
 
            else
566
 
                textField1.setText(var.getPureValue(-1));
567
 
                }
568
 
 
569
 
                carbonNanotubeNode = false;
 
573
                        if (var == null) initialTextField1 = "DEFAULT"; else
 
574
                initialTextField1 = var.getPureValue(-1);
 
575
                        textField1.setEditable(true);
 
576
                textField1.setText(initialTextField1);
 
577
                }
 
578
 
 
579
                extraFields.extraField1 = extraFields.extraField2 = null;
 
580
                if (!ni.isCellInstance())
 
581
                {
 
582
                        List phFields = Technology.getExtraFields((PrimitiveNode)ni.getProto());
 
583
                        if (phFields != null)
 
584
                        {
 
585
                                for(Object o : phFields)
 
586
                                {
 
587
                                        ExtraField ef = (ExtraField)o;
 
588
                                        if (extraFields.extraField1 == null)
 
589
                                        {
 
590
                                                extraFields.extraField1 = ef;
 
591
                                                textField1Label.setText(ef.getDescription() + ":");
 
592
                                    Variable var = ni.getVar(ef.getKey());
 
593
                                                if (var == null) initialTextField1 = "DEFAULT"; else
 
594
                                        initialTextField1 = var.getPureValue(-1);
 
595
                                                textField1.setEditable(true);
 
596
                                textField1.setText(initialTextField1);
 
597
                                        } else
 
598
                                        {
 
599
                                                extraFields.extraField2 = ef;
 
600
                                                textField2Label.setText(ef.getDescription() + ":");
 
601
                                    Variable var = ni.getVar(ef.getKey());
 
602
                                                if (var == null) initialTextField2 = "DEFAULT"; else
 
603
                                        initialTextField2 = var.getPureValue(-1);
 
604
                                                textField2.setEditable(true);
 
605
                                                textField2.setText(initialTextField2);
 
606
                                        }
 
607
                                }
 
608
                        }
 
609
                }
 
610
 
 
611
                extraFields.routingExclusionNode = false;
 
612
                if (ni.getProto() == Generic.tech().routeNode)
 
613
                {
 
614
                        extraFields.routingExclusionNode = true;
 
615
                        textField1Label.setText("Routing exclusion layers:");
 
616
            Variable var = ni.getVar(Generic.ROUTING_EXCLUSION);
 
617
                        if (var == null) initialTextField1 = ""; else
 
618
                initialTextField1 = var.getPureValue(-1);
 
619
                        textField1.setEditable(true);
 
620
                textField1.setText(initialTextField1);
 
621
                }
 
622
 
 
623
                extraFields.carbonNanotubeNode = false;
570
624
                if (!ni.isCellInstance())
571
625
                {
572
626
                        PrimitiveNode pnp = (PrimitiveNode)np;
575
629
                        {
576
630
                                NodeLayer[] primLayers = pnp.getNodeLayers();
577
631
                    for (NodeLayer nodeLayer: primLayers)
578
 
                        if (nodeLayer.getLayer().isCarbonNanotubeLayer()) carbonNanotubeNode = true;
 
632
                        if (nodeLayer.getLayer().isCarbonNanotubeLayer()) extraFields.carbonNanotubeNode = true;
579
633
                        }
580
634
                }
581
 
                if (carbonNanotubeNode)
 
635
                if (extraFields.carbonNanotubeNode)
582
636
                {
583
637
                        textField1Label.setText("Number of Carbon Nanotubes:");
584
 
                        textField1.setEditable(true);
585
638
            Variable var = ni.getVar(NodeLayer.CARBON_NANOTUBE_COUNT);
586
 
                        if (var == null)
587
 
                                textField1.setText("DEFAULT");
588
 
            else
589
 
                textField1.setText(var.getPureValue(-1));
 
639
                        if (var == null) initialTextField1 = "DEFAULT"; else
 
640
                initialTextField1 = var.getPureValue(-1);
 
641
                        textField1.setEditable(true);
 
642
                textField1.setText(initialTextField1);
590
643
 
591
644
                        textField2Label.setText("Spacing of Carbon Nanotubes:");
 
645
            var = ni.getVar(NodeLayer.CARBON_NANOTUBE_PITCH);
 
646
                        if (var == null) initialTextField2 = "DEFAULT"; else
 
647
                initialTextField2 = var.getPureValue(-1);
592
648
                        textField2.setEditable(true);
593
 
            var = ni.getVar(NodeLayer.CARBON_NANOTUBE_PITCH);
594
 
                        if (var == null)
595
 
                                textField2.setText("DEFAULT");
596
 
            else
597
 
                textField2.setText(var.getPureValue(-1));
 
649
                        textField2.setText(initialTextField2);
598
650
                }
599
651
 
600
 
                scalableTrans = false;
 
652
                extraFields.scalableTrans = false;
601
653
                if (!ni.isCellInstance())
602
654
                {
603
655
                        if (np.getTechnology() == Technology.getMocmosTechnology())
604
656
                        {
605
657
                                if (np.getName().equals("P-Transistor-Scalable") ||
606
658
                                        np.getName().equals("N-Transistor-Scalable"))
607
 
                                                scalableTrans = true;
 
659
                                        extraFields.scalableTrans = true;
608
660
                        }
609
661
                }
610
 
                if (scalableTrans)
 
662
                if (extraFields.scalableTrans)
611
663
                {
612
664
                        popupLabel.setText("Contacts:");
613
665
                        popup.addItem("Top & Bottom / normal spacing");
978
1030
                private String initialTextField1, currentTextField1;
979
1031
                private String initialTextField2, currentTextField2;
980
1032
                private String initialPopupEntry, currentPopupEntry;
981
 
                private boolean scalableTrans;
982
 
                private boolean multiCutNode;
983
 
                private boolean carbonNanotubeNode;
 
1033
                private ExtraFields extrafields;
984
1034
                private boolean swapXY;
985
1035
 
986
1036
                public ChangeNode(NodeInst ni,
998
1048
                        String initialTextField2, String currentTextField2,
999
1049
                        String initialPopupEntry, String currentPopupEntry,
1000
1050
                        boolean bigger,
1001
 
                        boolean scalableTrans,
1002
 
                        boolean multiCutNode,
1003
 
                        boolean carbonNanotubeNode,
 
1051
                        ExtraFields extrafields,
1004
1052
                        boolean swapXY)
1005
1053
                {
1006
1054
                        super("Modify Node", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER);
1021
1069
                        this.initialTextField1 = initialTextField1;                       this.currentTextField1 = currentTextField1;
1022
1070
                        this.initialTextField2 = initialTextField2;                       this.currentTextField2 = currentTextField2;
1023
1071
                        this.initialPopupEntry = initialPopupEntry;                       this.currentPopupEntry = currentPopupEntry;
1024
 
                        this.scalableTrans = scalableTrans;
1025
 
                        this.multiCutNode = multiCutNode;
1026
 
                        this.carbonNanotubeNode = carbonNanotubeNode;
 
1072
                        this.extrafields = extrafields;
1027
1073
                        this.swapXY = swapXY;
1028
1074
                        startJob();
1029
1075
                }
1066
1112
                        }
1067
1113
 
1068
1114
                        // handle special node information
1069
 
                        if (scalableTrans)
 
1115
                        if (extrafields.scalableTrans)
1070
1116
                        {
1071
1117
                                if (currentPopupIndex != initialPopupIndex)
1072
1118
                                {
1088
1134
                                        }
1089
1135
                                }
1090
1136
                        }
1091
 
                        if (multiCutNode)
 
1137
 
 
1138
                        if (extrafields.extraField1 != null)
 
1139
                        {
 
1140
                                if (!currentTextField1.equals(initialTextField1))
 
1141
                                {
 
1142
                                        if (currentTextField1.length() == 0)
 
1143
                                                ni.delVar(extrafields.extraField1.getKey()); else
 
1144
                                                        ni.newVar(extrafields.extraField1.getKey(), new Double(TextUtils.atof(currentTextField1)), ep);
 
1145
                                }
 
1146
                        }
 
1147
                        if (extrafields.extraField2 != null)
 
1148
                        {
 
1149
                                if (!currentTextField2.equals(initialTextField2))
 
1150
                                {
 
1151
                                        if (currentTextField2.length() == 0)
 
1152
                                                ni.delVar(extrafields.extraField2.getKey()); else
 
1153
                                                        ni.newVar(extrafields.extraField2.getKey(), new Double(TextUtils.atof(currentTextField2)), ep);
 
1154
                                }
 
1155
                        }
 
1156
 
 
1157
                        if (extrafields.multiCutNode)
1092
1158
                        {
1093
1159
                                if (!currentTextField1.equals(initialTextField1))
1094
1160
                                {
1105
1171
                                        changed = true;
1106
1172
                                }
1107
1173
                        }
1108
 
                        if (carbonNanotubeNode)
 
1174
 
 
1175
                        if (extrafields.carbonNanotubeNode)
1109
1176
                        {
1110
1177
                                if (!currentTextField1.equals(initialTextField1))
1111
1178
                                {
1120
1187
                                                        ni.newVar(NodeLayer.CARBON_NANOTUBE_PITCH, new Double(TextUtils.atof(currentTextField2)), ep);
1121
1188
                                }
1122
1189
                        }
 
1190
 
 
1191
                        if (extrafields.routingExclusionNode)
 
1192
                        {
 
1193
                                if (!currentTextField1.equals(initialTextField1))
 
1194
                                        ni.updateVar(Generic.ROUTING_EXCLUSION, currentTextField1, ep);
 
1195
                        }
 
1196
 
1123
1197
                        PrimitiveNode.Function fun = ni.getFunction();
1124
1198
                        if (fun == PrimitiveNode.Function.DIODE || fun == PrimitiveNode.Function.DIODEZ)
1125
1199
                        {
1278
1352
                                                // set length and width by node size for layout transistors
1279
1353
                                                double initialWidth = size.getDoubleWidth();
1280
1354
                                                double initialLength = size.getDoubleLength();
1281
 
                                                double width = TextUtils.atof(currentXSize, new Double(initialWidth));
1282
 
                                                double length = TextUtils.atof(currentYSize, new Double(initialLength));
 
1355
                                                double width = TextUtils.atof(currentXSize, new Double(initialWidth), TextDescriptor.Unit.DISTANCE, Technology.getCurrent());
 
1356
                                                double length = TextUtils.atof(currentYSize, new Double(initialLength), TextDescriptor.Unit.DISTANCE, Technology.getCurrent());
 
1357
//                                              double width = TextUtils.atof(currentXSize, new Double(initialWidth));
 
1358
//                                              double length = TextUtils.atof(currentYSize, new Double(initialLength));
1283
1359
                                                if (!DBMath.doublesEqual(width, initialWidth) ||
1284
1360
                                                        !DBMath.doublesEqual(length, initialLength))
1285
1361
                                                {
1949
2025
                        initialTextField2, textField2.getText(),
1950
2026
                        initialPopupEntry, (String)popup.getSelectedItem(),
1951
2027
                        bigger,
1952
 
                        scalableTrans,
1953
 
                        multiCutNode,
1954
 
                        carbonNanotubeNode,
 
2028
                        extraFields,
1955
2029
                        swapXY);
1956
2030
                attributesTable.applyChanges();
1957
2031