📄 busparameters.java
字号:
* Added for ArchGen Plugin - BVE * @param var * @param lib * @param libParameters * @return */ private static String replaceVariableInString(String var, Library lib, Map<Library,String[]> libParameters) { String varString = var; for(;;) { int dollarPos = varString.indexOf("$("); if (dollarPos < 0) break; int closePos = varString.indexOf(')', dollarPos); if (closePos < 0) { System.out.println("ERROR: Bus parameter '" + varString + "' is missing the close parenthesis"); break; } String varName = varString.substring(dollarPos+2, closePos); String [] paramList = libParameters.get(lib); String paramValue = null; if (paramList != null) { paramValue = findParameterValue(paramList, varName); } if (paramValue == null) { for(Iterator<Library> it = Library.getLibraries(); it.hasNext(); ) { Library aLib = it.next(); if (aLib == lib || aLib.isHidden()) continue; paramList = libParameters.get(aLib); paramValue = findParameterValue(paramList, varName); if (paramValue != null) break; } if (paramValue == null) { System.out.println("ERROR: Bus parameter '" + varName + "' is not defined"); break; } } varString = varString.substring(0, dollarPos) + paramValue + varString.substring(closePos+1); } return varString; } private static String updateVariable(Variable var, Library lib, Map<Library,String[]> libParameters) { // first substitute variable names String varString = (String)var.getObject(); // BVE - Old code refactored into helper function varString = replaceVariableInString(varString, lib, libParameters); // now that variables are substituted, handle arithmetic for(int i=0; i<varString.length(); i++) { char op = varString.charAt(i); if (op != '+' && op != '-' && op != '*' && op != '/') continue; // gather number before the operator int start = i; while (start > 0 && TextUtils.isDigit(varString.charAt(start-1))) start--; int end = i; while (end+1 < varString.length() && TextUtils.isDigit(varString.charAt(end+1))) end++; if (start < i && end > i) { // found numbers int startVal = TextUtils.atoi(varString.substring(start)); int endVal = TextUtils.atoi(varString.substring(i+1)); int res = 0; if (op == '+') { res = startVal + endVal; } else if (op == '-') { res = startVal - endVal; } else if (op == '*') { res = startVal * endVal; } else if (op == '/') { if (endVal != 0) res = startVal / endVal; } String newString = Integer.toString(res); varString = varString.substring(0, start) + newString + varString.substring(end+1); i = start + newString.length() - 1; } } return varString; } private static String findParameterValue(String [] parameterList, String varName) { for(int i=0; i<parameterList.length; i++) { String param = parameterList[i]; int equalPos = param.indexOf('='); if (equalPos < 0) continue; if (varName.equalsIgnoreCase(param.substring(0, equalPos))) return param.substring(equalPos+1); } return null; } /** * Class to create a bus template on an arc or export. */ private static class AddTemplate extends Job { private ElectricObject owner; private String templateString; private AddTemplate(ElectricObject owner) { super("Create Bus Parameter", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER); this.owner = owner; this.templateString = ""; startJob(); } /** * Constructor for adding a bus parameter template to an ElectricObject immediately or as a job. * Added the ability to append a string to the template * Added for ArchGen Plugin - BVE * @param owner * @param suffix * @return */ private AddTemplate(ElectricObject owner, boolean doItNow, String initValue) { super("Create Bus Parameter", User.getUserTool(), Job.Type.CHANGE, null, null, Job.Priority.USER); this.owner = owner; this.templateString = initValue; if (doItNow) { try {doIt();} catch (Exception e) {e.printStackTrace();} }else { startJob(); } } public boolean doIt() throws JobException { if (owner instanceof NodeInst) { // add template to node NodeInst ni = (NodeInst)owner; TextDescriptor td = ni.getTextDescriptor(NodeInst.NODE_NAME); double relSize = 1; if (!td.getSize().isAbsolute()) relSize = td.getSize().getSize(); td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE); if(!templateString.equals("")) { ni.newVar(NODE_BUS_TEMPLATE, ni.getName()+templateString, td); }else { ni.newVar(NODE_BUS_TEMPLATE, ni.getName(), td); } } else if (owner instanceof ArcInst) { // add template to arc ArcInst ai = (ArcInst)owner; TextDescriptor td = ai.getTextDescriptor(ArcInst.ARC_NAME); double relSize = 1; if (!td.getSize().isAbsolute()) relSize = td.getSize().getSize(); td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE); if(!templateString.equals("")) { ai.newVar(ARC_BUS_TEMPLATE, ai.getName()+templateString, td); }else { ai.newVar(ARC_BUS_TEMPLATE, ai.getName(), td); } } else { // add template to export Export e = (Export)owner; TextDescriptor td = e.getTextDescriptor(Export.EXPORT_NAME); double relSize = 1; if (!td.getSize().isAbsolute()) relSize = td.getSize().getSize(); td = td.withOff(td.getXOff(), td.getYOff() - relSize*1.5).withRelSize(relSize/2).withDispPart(TextDescriptor.DispPos.NAMEVALUE); if(!templateString.equals("")) { e.newVar(EXPORT_BUS_TEMPLATE, e.getName()+templateString, td); }else { e.newVar(EXPORT_BUS_TEMPLATE, e.getName(), td); } } return true; } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; done = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); libraryPopup = new javax.swing.JComboBox(); variablesPane = new javax.swing.JScrollPane(); jLabel2 = new javax.swing.JLabel(); value = new javax.swing.JTextField(); update = new javax.swing.JButton(); deleteVariable = new javax.swing.JButton(); newVariable = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); getContentPane().setLayout(new java.awt.GridBagLayout()); setTitle("Bus Parameters"); setName(""); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); getAccessibleContext().setAccessibleName("Bus Parameters"); done.setText("Done"); done.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doneActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 8; gridBagConstraints.weightx = 0.5; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(done, gridBagConstraints); jLabel1.setText("Library:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(jLabel1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(libraryPopup, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.gridheight = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 0.5; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(variablesPane, gridBagConstraints); jLabel2.setText("Parameters:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(jLabel2, gridBagConstraints); value.setColumns(8); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 0.5; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(value, gridBagConstraints); update.setText("Update All Templates"); update.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { updateActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 7; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(update, gridBagConstraints); deleteVariable.setText("Delete Parameter"); deleteVariable.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteVariableActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 5; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(deleteVariable, gridBagConstraints); newVariable.setText("New Parameter"); newVariable.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { newVariableActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 4; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(newVariable, gridBagConstraints); jLabel3.setText("Parameter Value:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(jLabel3, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(jSeparator1, gridBagConstraints); pack(); } // </editor-fold>//GEN-END:initComponents private void newVariableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newVariableActionPerformed String libName = (String)libraryPopup.getSelectedItem(); Library lib = Library.findLibrary(libName); if (lib == null) return; String [] parameterList = libParameters.get(lib); String newParName = Job.getUserInterface().askForInput("New Bus Parameter Name:", "Create New Bus Parameter", ""); if (newParName == null) return; // make sure the name is unique int insertAfter = -1; for(int i=0; i<parameterList.length; i++) { int equalPos = parameterList[i].indexOf('='); if (equalPos < 0) continue; String varName = parameterList[i].substring(0, equalPos); if (varName.equalsIgnoreCase(newParName)) { Job.getUserInterface().showErrorMessage("That bus parameter name already exists", "Duplicate Name"); return; } if (varName.compareToIgnoreCase(newParName) < 0) insertAfter = i; } String [] newParameterList = new String[parameterList.length+1]; int j = 0; for(int i=0; i<parameterList.length; i++) { if (i == insertAfter+1) newParameterList[j++] = newParName + "=1"; newParameterList[j++] = parameterList[i]; } if (parameterList.length == insertAfter+1) newParameterList[j++] = newParName + "=1"; libParameters.put(lib, newParameterList); new UpdateLibrary(lib, newParameterList); libraryChanged(); }//GEN-LAST:event_newVariableActionPerformed private void deleteVariableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteVariableActionPerformed String libName = (String)libraryPopup.getSelectedItem(); Library lib = Library.findLibrary(libName); if (lib == null) return; String [] parameterList = libParameters.get(lib); int selectedIndex = parametersList.getSelectedIndex(); if (selectedIndex < 0 || selectedIndex >= parameterList.length) return; String [] newParameterList = new String[parameterList.length-1]; int j = 0; for(int i=0; i<parameterList.length; i++) { if (i != selectedIndex) newParameterList[j++] = parameterList[i]; } libParameters.put(lib, newParameterList); new UpdateLibrary(lib, newParameterList); libraryChanged(); }//GEN-LAST:event_deleteVariableActionPerformed private void updateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateActionPerformed new UpdateAllParameters(libParameters); }//GEN-LAST:event_updateActionPerformed private void doneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doneActionPerformed closeDialog(null); }//GEN-LAST:event_doneActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog { setVisible(false); dispose(); }//GEN-LAST:event_closeDialog // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton deleteVariable; private javax.swing.JButton done; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JSeparator jSeparator1; private javax.swing.JComboBox libraryPopup; private javax.swing.JButton newVariable; private javax.swing.JButton update; private javax.swing.JTextField value; private javax.swing.JScrollPane variablesPane; // End of variables declaration//GEN-END:variables}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -