Example #1
0
  CatenaSetting() {
    super(PeaFactory.getFrame());
    setting = this;
    // setting.setUndecorated(true);
    setting.setAlwaysOnTop(true);

    this.setIconImage(MainView.getImage());

    JPanel scryptPane = (JPanel) setting.getContentPane(); // new JPanel();
    scryptPane.setBorder(new LineBorder(Color.GRAY, 2));
    scryptPane.setLayout(new BoxLayout(scryptPane, BoxLayout.Y_AXIS));

    JLabel scryptLabel = new JLabel("Settings for CATENA:");
    scryptLabel.setPreferredSize(new Dimension(250, 30));

    JLabel tipLabel1 = new JLabel("Settings for this session only");
    tipLabel1.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 11));
    tipLabel1.setPreferredSize(new Dimension(250, 20));
    scryptPane.add(scryptLabel);
    scryptPane.add(tipLabel1);

    JLabel instanceLabel = new JLabel("Select an instance of Catena:");
    instanceLabel.setPreferredSize(new Dimension(250, 40));
    scryptPane.add(instanceLabel);

    JLabel instanceRecommendedLabel = new JLabel("recommended: Dragonfly-Full");
    instanceRecommendedLabel.setPreferredSize(new Dimension(250, 20));
    instanceRecommendedLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 11));
    scryptPane.add(instanceRecommendedLabel);

    JRadioButton dragonflyFullButton = new JRadioButton("Dragonfly-Full");
    dragonflyFullButton.setMnemonic(KeyEvent.VK_U);
    dragonflyFullButton.addActionListener(this);
    dragonflyFullButton.setActionCommand("Dragonfly-Full");
    scryptPane.add(dragonflyFullButton);

    JRadioButton butterflyFullButton = new JRadioButton("Butterfly-Full");
    butterflyFullButton.setMnemonic(KeyEvent.VK_U);
    butterflyFullButton.addActionListener(this);
    butterflyFullButton.setActionCommand("Butterfly-Full");
    scryptPane.add(butterflyFullButton);

    JRadioButton dragonflyButton = new JRadioButton("Dragonfly");
    dragonflyButton.setMnemonic(KeyEvent.VK_B);
    dragonflyButton.addActionListener(this);
    dragonflyButton.setActionCommand("Dragonfly");
    scryptPane.add(dragonflyButton);

    JRadioButton butterflyButton = new JRadioButton("Butterfly");
    butterflyButton.setMnemonic(KeyEvent.VK_B);
    butterflyButton.addActionListener(this);
    butterflyButton.setActionCommand("Butterfly");
    scryptPane.add(butterflyButton);

    // Group the radio buttons.
    ButtonGroup group = new ButtonGroup();
    group.add(dragonflyButton);
    group.add(dragonflyFullButton);
    group.add(butterflyButton);
    group.add(butterflyFullButton);

    group.setSelected(dragonflyFullButton.getModel(), true);

    scryptPane.add(Box.createVerticalStrut(20));

    JLabel memoryLabel = new JLabel("Memory cost parameter GARLIC: ");
    memoryLabel.setPreferredSize(new Dimension(220, 40));
    scryptPane.add(memoryLabel);
    memoryField =
        new JTextField() {
          private static final long serialVersionUID = 1L;

          public void processKeyEvent(KeyEvent ev) {
            char c = ev.getKeyChar();
            try {
              // printable characters
              if (c > 31 && c < 65535 && c != 127) {
                Integer.parseInt(c + ""); // parse
              }
              super.processKeyEvent(ev);
            } catch (NumberFormatException nfe) {
              // if not a number: ignore
            }
          }
        };
    memoryField.setText("18");
    memoryField.setColumns(2);
    memoryField.setDragEnabled(true);

    memoryField
        .getDocument()
        .addDocumentListener(
            new DocumentListener() {
              public void changedUpdate(DocumentEvent e) {
                warn();
              }

              public void removeUpdate(DocumentEvent e) {
                warn();
              }

              public void insertUpdate(DocumentEvent e) {
                warn();
              }

              public void warn() {
                int garlic = 0;
                try {
                  garlic = Integer.parseInt(memoryField.getText());
                } catch (Exception nfe) {
                  errorLabel.setText("Invalid input");
                  return;
                }
                if (garlic == 0) {
                  errorLabel.setText("Invalid value");
                } else if (garlic < 14) {
                  errorLabel.setText("Warning: Weak parameter");
                } else if (garlic > 22 && garlic < 64) {
                  errorLabel.setText("Warning: Long execution time");
                } else if (garlic > 63) {
                  errorLabel.setText("Invalid value: must be < 64");
                } else {
                  errorLabel.setText("");
                }
              }
            });

    memoryRecommendedLabel = new JLabel("recommended >= 18");
    memoryRecommendedLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 11));
    JPanel memoryPanel = new JPanel();
    memoryPanel.add(memoryField);
    memoryPanel.add(memoryRecommendedLabel);
    scryptPane.add(memoryPanel);

    scryptPane.add(Box.createVerticalStrut(10));

    JLabel timeLabel = new JLabel("Time cost parameter LAMBDA: ");
    timeLabel.setPreferredSize(new Dimension(220, 40));
    scryptPane.add(timeLabel);
    timeField =
        new JTextField() {
          private static final long serialVersionUID = 1L;

          public void processKeyEvent(KeyEvent ev) {
            char c = ev.getKeyChar();
            try {
              // printable characters
              if (c > 31 && c < 65535 && c != 127) {
                Integer.parseInt(c + ""); // parse
              }
              super.processKeyEvent(ev);
            } catch (NumberFormatException nfe) {
              // if not a number: ignore
            }
          }
        };
    timeField.setText("2");
    timeField.setColumns(3);
    timeField.setDragEnabled(true);

    timeField
        .getDocument()
        .addDocumentListener(
            new DocumentListener() {
              public void changedUpdate(DocumentEvent e) {
                warn();
              }

              public void removeUpdate(DocumentEvent e) {
                warn();
              }

              public void insertUpdate(DocumentEvent e) {
                warn();
              }

              public void warn() {
                int lambda = 0;
                try {
                  lambda = Integer.parseInt(timeField.getText());
                } catch (Exception nfe) {
                  errorLabel.setText("Invalid input");
                  return;
                }
                if (lambda == 0) {
                  errorLabel.setText("Invalid value");
                } else if (lambda == 1) {
                  errorLabel.setText("Warning: Weak parameter");
                } else if (lambda > 4) {
                  errorLabel.setText("Warning: Long execution time");
                } else {
                  errorLabel.setText("");
                }
              }
            });

    timeRecommendedLabel = new JLabel("recommended 2");
    timeRecommendedLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 11));
    JPanel timePanel = new JPanel();
    timePanel.add(timeField);
    timePanel.add(timeRecommendedLabel);
    scryptPane.add(timePanel);

    scryptPane.add(Box.createVerticalStrut(10));

    errorLabel = new JLabel("");
    errorLabel.setForeground(Color.RED);
    scryptPane.add(errorLabel);

    JButton scryptOkButton = new JButton("ok");
    scryptOkButton.setActionCommand("newSetting");
    scryptOkButton.addActionListener(this);
    scryptPane.add(scryptOkButton);
    setting.pack();
    setting.setLocation(100, 100);
    setting.setVisible(true);
  }