示例#1
0
/**
 * Creation date: (2/25/2004 10:53:54 AM)
 *
 * @author: Jarek Foltynski
 */
public abstract class FFT {
  public static final String items[] = {
    "INTEGER", "FLOAT", "NATIVE",
  };

  // Those values can be changed
  public int NO_OF_BITS; // 	number of bits in sample number
  public int MAX_AMPLITUDE_BITS; // max number of bits in signal amplitude

  public static final int DEFAULT_SAMPLES_NUMBER = 1024;
  public static final int DEFAULT_MAX_AMPLITUDE = 1024;

  public static final int C_INTEGER = 0;
  public static final int C_FLOAT = 1;
  public static final int C_NATIVE = 2;
  public static final int C_DOUBLE = 3;
  public static final int C_LONG = 4;

  public int samplesNumber;
  public int maxAmplitude;
  public int oPB;
  public int oPBV;
  public int type;

  protected static boolean debug = bioera.Debugger.get("fft");

  protected FFT(int len, int amp, int outputPrecBits) {
    samplesNumber = len;
    maxAmplitude = amp;
    oPB = outputPrecBits;
    oPBV = 1 << oPB;
  }

  public static final FFT getFFT(int type, int length, int maxAmplitude, int outputPrecisionBits)
      throws Exception {
    return newInstance(type, length, maxAmplitude, outputPrecisionBits);
  }

  public abstract int getPrecisionFactor();

  public void init() throws Exception {
    int x = 0;
    while ((1 << x) < samplesNumber) {
      x++;
    }
    NO_OF_BITS = x;

    if ((1 << NO_OF_BITS) != samplesNumber)
      throw new RuntimeException(
          "The length of the sample " + samplesNumber + " must be power of 2 (" + NO_OF_BITS + ")");

    x = 0;
    while ((1 << x) < maxAmplitude) {
      x++;
    }
    MAX_AMPLITUDE_BITS = x;
  }

  protected static final void initializeNative() {
    try {
      System.loadLibrary("bioerafft");
    } catch (Throwable e) {
      // e.printStackTrace();
      if (debug) {
        System.out.println("" + e.getMessage());
        System.out.println(
            "Native implementation (bioerafft) of FFT not found in "
                + System.getProperty("java.library.path")
                + ", using pure version");
      }
    }
  }

  public static final FFT newInstance() throws Exception {
    return newInstance(C_INTEGER, DEFAULT_SAMPLES_NUMBER, DEFAULT_MAX_AMPLITUDE, 0);
  }

  public static final FFT newInstance(
      int itype, int length, int maxAmplitude, int outputPrecisionBits) throws Exception {
    if (itype == C_NATIVE) initializeNative();

    FFT ret;
    switch (itype) {
      case C_INTEGER:
        ret = new FFTInteger(length, maxAmplitude, outputPrecisionBits);
        break;
      case C_FLOAT:
        ret = new FFTFloat(length, maxAmplitude, outputPrecisionBits);
        break;
      case C_NATIVE:
        ret = new FFTNative(length, maxAmplitude, outputPrecisionBits);
        break;
      case C_DOUBLE:
        ret = new FFTDouble(length, maxAmplitude, outputPrecisionBits);
        break;
      case C_LONG:
        ret = new FFTInteger(length, maxAmplitude, outputPrecisionBits);
        break;
      default:
        throw new RuntimeException("Unknown type: " + itype);
    }

    ret.type = itype;
    ret.init();

    return ret;
  }

  public abstract void perform(int input[], int output[]);

  public int type() throws Exception {
    return this.type;
  }

  public void performComplex(int inpRe[], int inpIm[], int outRe[], int outIm[]) {
    throw new RuntimeException("Complex transform not implemented");
  }

  public static void setDebug(boolean newValue) {
    debug = newValue;
  }
}
/**
 * Creation date: (2/25/2004 10:53:54 AM)
 *
 * @author: Jarek Foltynski
 */
public class DialogNewElement extends GenericDialog implements ActionListener {
  JButton bAdd;
  JButton bOK;
  JButton bCancel;
  JList list;
  int cX, cY;
  StringBuffer keys = new StringBuffer();
  BoxItem newItem;

  private static boolean debug = bioera.Debugger.get("designer.newdialog");
  //	BoxItem box;
  /** EdiDialog constructor comment. */
  public DialogNewElement(JFrame f) {
    super(f, "New Element");
  }
  //	BoxItem box;
  /** EdiDialog constructor comment. */
  public DialogNewElement(JFrame f, String name) {
    super(f, name);
  }
  /** Invoked when an action occurs. */
  public void actionAdd() {
    int i = list.getSelectedIndex();

    if (i == -1) return;

    newItem =
        createNewElement(
            (String) DesignFrame.processingElements[list.getSelectedIndex()][1], cX, cY);
  }
  /** Invoked when an action occurs. */
  public void actionOK() {
    int i = list.getSelectedIndex();

    if (i == -1) return;

    newItem =
        createNewElement(
            (String) DesignFrame.processingElements[list.getSelectedIndex()][1], cX, cY);

    dispose();
  }
  /** Invoked when an action occurs. */
  public void actionPerformed(java.awt.event.ActionEvent event) {
    // System.out.println("command=" + event.getActionCommand());

    if (event.getSource() == bCancel) {
      dispose();
      return;
    }

    if (event.getSource() == bAdd) actionAdd();
    else actionOK();
  }
  /** Invoked when an action occurs. */
  public static BoxItem createNewElement(String className, int posX, int posY) {
    BoxItem ret = null;
    Element elem = null;
    try {
      if (debug) System.out.println("Creating new element '" + className + "'");
      elem = Element.newInstance(className);

      if (elem == null) {
        if (debug) System.out.println("Element '" + className + "' not found");
        return null;
      }

      ret = elem.getDesignerBox();
      ret.setBounds(
          (posX / DesignEventHandler.ELEM_STEP) * DesignEventHandler.ELEM_STEP,
          (posY / DesignEventHandler.ELEM_STEP) * DesignEventHandler.ELEM_STEP,
          ConfigurableSystemSettings.getDesignerElementWidth(),
          ConfigurableSystemSettings.getDesignerElementHeight());
      Main.app.designFrame.addElement(ret);
      Item.highlighted.clear();
      Item.highlighted.add(ret);
      Main.app.processor.add(elem);
      // elem.setActive(false);
      Main.app.designFrame.panel.repaint();

      if (elem instanceof Display) {
        Chart chart = ((Display) elem).newChart();
        ((Display) elem).setChart(chart);
        chart.setAtTopLayer();
        // System.out.println("c1 " + chart.getBounds());
        Main.app.runtimeFrame.addChart(chart);
        // Main.app.runtimeFrame.show();
        Main.app.runtimeFrame.setVisible();
        // Main.app.runtimeFrame.repaint();

        // Change runtime to edit mode if not now
        if (!Main.app.runtimeFrame.framedCharts) {
          Main.app.runtimeFrame.framedCharts = true;
          try {
            Main.app.runtimeFrame.reload();
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        }
      }
      elem.reinit();
    } catch (Exception e) {
      if (elem != null) elem.disactivate(e);
      System.out.println("New element error: " + e);
      // e.printStackTrace();
    } catch (Throwable e) {
      System.out.println("Critical error occurred while creating new element: " + e);
      e.printStackTrace();
    }

    return ret;
  }
  /** EdiDialog constructor comment. */
  public String getSelectedElementName(Object src) {
    String name = null;
    if (src == list) {
      name = (String) list.getSelectedValue();
    } else if (src == bOK) {
      name = (String) list.getSelectedValue();
      if (name == null) {
        // Button ok was pressed, but no selection was done, do nothing
        return null;
      }
    } else {
      dispose();
      return null;
    }

    return name;
  }
  /** EdiDialog constructor comment. */
  public void keyReleased(java.awt.event.KeyEvent e) {
    if (e.getSource() == list) {
      switch (e.getKeyCode()) {
        case KeyEvent.VK_DELETE:
        case KeyEvent.VK_BACK_SPACE:
          if (keys.length() > 0) keys.setLength(keys.length() - 1);
          break;
        case KeyEvent.VK_ESCAPE:
          dispose();
          break;
        case KeyEvent.VK_ENTER:
          dispose();
          actionOK();
          break;
        case KeyEvent.VK_SPACE:
          actionAdd();
          break;
        default:
          // keys.append((char) e.getKeyChar());
          list.ensureIndexIsVisible(list.getSelectedIndex());
      }

      //		if (debug)
      //			System.out.println("keys: " + keys);
      return;
    }

    switch (e.getKeyCode()) {
      case KeyEvent.VK_ENTER:
      case KeyEvent.VK_ESCAPE:
        dispose();
        break;
      default:
        break;
    }

    super.keyReleased(e);
  }
  /** Invoked when an action occurs. */
  public void locateOnComponent(int x, int y, java.awt.Component f) {
    cX = x;
    cY = y;
    super.locateOnComponent(x, y, f);
  }
  /** EdiDialog constructor comment. */
  public static void main(String args[]) throws Exception {
    try {
      System.out.println("started");
      DialogNewElement.test();
      System.out.println("Finished");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /** EdiDialog constructor comment. */
  public void show() {
    getContentPane().setLayout(new java.awt.BorderLayout());
    JScrollPane center = new JScrollPane();
    getContentPane().add(center, java.awt.BorderLayout.CENTER);
    list = new JList();
    list.setBackground(parentWindow.getBackground());
    DefaultListModel model = new DefaultListModel();
    list.setModel(model);
    for (int i = 0; i < DesignFrame.processingElements.length; i++) {
      model.addElement((String) DesignFrame.processingElements[i][0]);
    }

    // list.ActionListener((ActionListener) this);
    center.setViewportView(list);

    JPanel down = new JPanel();
    getContentPane().add(down, java.awt.BorderLayout.SOUTH);
    down.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 2, 2));
    bOK = new JButton("OK");
    bOK.addActionListener(this);
    bAdd = new JButton("Add");
    bAdd.addActionListener(this);
    bCancel = new JButton("Cancel");
    bCancel.addActionListener(this);
    down.add(bOK);
    down.add(bAdd);
    down.add(bCancel);
    pack();
    setSize(getWidth(), getHeight() * 2);

    list.addKeyListener(this);
    super.show();
  }
  /** EdiDialog constructor comment. */
  public static void test() {
    JFrame frame = new JFrame();
    frame.addWindowListener(new CloseSaveWindowsListener());
    frame.setBackground(ConfigurableSystemSettings.backgroundColor.getAWTColor());
    frame.getContentPane().setLayout(new java.awt.BorderLayout());
    frame.setBounds(50, 50, 400, 400);
    frame.show();

    DialogNewElement dialog = new DialogNewElement(frame);
    dialog.show();
  }

  public static void setDebug(boolean newValue) {
    debug = newValue;
  }
}