diff --git a/src/main/java/ch/psi/mxsc/MainPanel.form b/src/main/java/ch/psi/mxsc/MainPanel.form index 8b186f2..1b106ff 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.form +++ b/src/main/java/ch/psi/mxsc/MainPanel.form @@ -1046,12 +1046,12 @@ - + - + - + @@ -1088,7 +1088,7 @@ - + diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index 2edc88b..680b204 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -695,18 +695,18 @@ public class MainPanel extends Panel { panelHexiposiLayout.setHorizontalGroup( panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelHexiposiLayout.createSequentialGroup() - .addContainerGap(13, Short.MAX_VALUE) + .addContainerGap(9, Short.MAX_VALUE) .addGroup(panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(buttonDetectCover) .addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(14, Short.MAX_VALUE)) + .addContainerGap(9, Short.MAX_VALUE)) ); panelHexiposiLayout.setVerticalGroup( panelHexiposiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelHexiposiLayout.createSequentialGroup() - .addContainerGap(15, Short.MAX_VALUE) + .addContainerGap(14, Short.MAX_VALUE) .addComponent(hexiposiPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) .addComponent(buttonDetectCover) .addContainerGap()) ); @@ -733,11 +733,11 @@ public class MainPanel extends Panel { panelViewTypeLayout.setHorizontalGroup( panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelViewTypeLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap(8, Short.MAX_VALUE) .addGroup(panelViewTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(buttonDrawing) .addComponent(buttonCamera)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(8, Short.MAX_VALUE)) ); panelViewTypeLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonCamera, buttonDrawing}); @@ -808,7 +808,7 @@ public class MainPanel extends Panel { .addGap(4, 4, 4) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jSeparator2) - .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 35, Short.MAX_VALUE))) + .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 35, Short.MAX_VALUE))) .addGroup(jPanel3Layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) @@ -996,7 +996,7 @@ public class MainPanel extends Panel { .addGroup(panelSystemStatusLayout.createSequentialGroup() .addComponent(buttonRelease) .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(filler1, javax.swing.GroupLayout.DEFAULT_SIZE, 38, Short.MAX_VALUE)) + .addComponent(filler1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(4, 4, 4)) ); @@ -1196,7 +1196,7 @@ public class MainPanel extends Panel { .addGroup(panelExpertLayout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(checkExpert) - .addGap(18, 18, Short.MAX_VALUE) + .addGap(18, 26, Short.MAX_VALUE) .addComponent(buttonExpertCommands) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonRecovery) @@ -1216,18 +1216,18 @@ public class MainPanel extends Panel { .addGroup(panelDevicesLayout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(devicesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelExpert, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(13, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panelDevicesLayout.setVerticalGroup( panelDevicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelDevicesLayout.createSequentialGroup() - .addContainerGap(14, Short.MAX_VALUE) + .addContainerGap(7, Short.MAX_VALUE) .addGroup(panelDevicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panelExpert, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(devicesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE)) - .addContainerGap()) + .addComponent(devicesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)) + .addContainerGap(7, Short.MAX_VALUE)) ); javax.swing.GroupLayout panelRightLayout = new javax.swing.GroupLayout(panelRight); @@ -1237,16 +1237,16 @@ public class MainPanel extends Panel { .addGroup(panelRightLayout.createSequentialGroup() .addGap(0, 0, 0) .addGroup(panelRightLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE) + .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE) .addComponent(panelDisplayMode, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(panelDevices, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)) + .addComponent(panelDevices, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)) .addGap(0, 0, 0)) ); panelRightLayout.setVerticalGroup( panelRightLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelRightLayout.createSequentialGroup() .addGap(0, 0, 0) - .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE) + .addComponent(panelDetail, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(panelDevices, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) @@ -1417,7 +1417,7 @@ public class MainPanel extends Panel { .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(panelTop, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0) - .addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE) + .addComponent(panelBottom, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE) .addGap(1, 1, 1)) ); }// //GEN-END:initComponents @@ -1480,6 +1480,16 @@ public class MainPanel extends Panel { private void checkExpertActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkExpertActionPerformed + if (checkExpert.isSelected()){ + PasswordDialog dlg = new PasswordDialog(getTopLevel(), true, 1234); + dlg.setResizable(false); + dlg.setLocationRelativeTo(getTopLevel()); + dlg.setVisible(true); + if (dlg.getResult() == false){ + checkExpert.setSelected(false); + return; + } + } setExpertMode(checkExpert.isSelected()); }//GEN-LAST:event_checkExpertActionPerformed diff --git a/src/main/java/ch/psi/mxsc/PasswordDialog.form b/src/main/java/ch/psi/mxsc/PasswordDialog.form new file mode 100644 index 0000000..0d8ddf9 --- /dev/null +++ b/src/main/java/ch/psi/mxsc/PasswordDialog.form @@ -0,0 +1,157 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/ch/psi/mxsc/PasswordDialog.java b/src/main/java/ch/psi/mxsc/PasswordDialog.java new file mode 100644 index 0000000..270d609 --- /dev/null +++ b/src/main/java/ch/psi/mxsc/PasswordDialog.java @@ -0,0 +1,282 @@ +package ch.psi.mxsc; + + +import ch.psi.utils.swing.StandardDialog; +import ch.psi.utils.swing.SwingUtils; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + + +/** + * + */ +public class PasswordDialog extends StandardDialog { + final List numbers; + final long secret; + + public PasswordDialog(java.awt.Frame parent, boolean modal, long secret) { + super(parent, modal); + initComponents(); + numbers = Arrays.asList(0,1,2,3,4,5,6,7,8,9); + this.secret = secret; + Collections.shuffle(numbers); + setTitle("Password"); + + button1.setText(numbers.get(0) + " or " + numbers.get(1)); + button2.setText(numbers.get(2) + " or " + numbers.get(3)); + button3.setText(numbers.get(4) + " or " + numbers.get(5)); + button4.setText(numbers.get(6) + " or " + numbers.get(7)); + button5.setText(numbers.get(8) + " or " + numbers.get(9)); + } + + + + boolean checkPassword(){ + char[] password = textPassword.getPassword(); + int length = password.length; + String pass = String.valueOf(secret); + if ((length==0) || (length != pass.length())) { + return false; + } + + for (int i=0; i//GEN-BEGIN:initComponents + private void initComponents() { + + button2 = new javax.swing.JButton(); + button1 = new javax.swing.JButton(); + button3 = new javax.swing.JButton(); + button4 = new javax.swing.JButton(); + button5 = new javax.swing.JButton(); + buttonCancel = new javax.swing.JButton(); + buttonOk = new javax.swing.JButton(); + buttonClear = new javax.swing.JButton(); + textPassword = new javax.swing.JPasswordField(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + + button2.setText("X or Y"); + button2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + button2ActionPerformed(evt); + } + }); + + button1.setText("X or Y"); + button1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + button1ActionPerformed(evt); + } + }); + + button3.setText("X or Y"); + button3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + button3ActionPerformed(evt); + } + }); + + button4.setText("X or Y"); + button4.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + button4ActionPerformed(evt); + } + }); + + button5.setText("X or Y"); + button5.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + button5ActionPerformed(evt); + } + }); + + buttonCancel.setText("Cancel"); + buttonCancel.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonCancelActionPerformed(evt); + } + }); + + buttonOk.setText("Ok"); + buttonOk.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonOkActionPerformed(evt); + } + }); + + buttonClear.setText("Clear"); + buttonClear.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonClearActionPerformed(evt); + } + }); + + textPassword.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N + textPassword.setHorizontalAlignment(javax.swing.JTextField.CENTER); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(button1) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(button2) + .addGap(18, 18, 18) + .addComponent(button3) + .addGap(18, 18, 18) + .addComponent(button4) + .addGap(18, 18, 18) + .addComponent(button5)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(textPassword) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(buttonClear, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(9, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(buttonOk, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonCancel, buttonOk}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(40, 40, 40) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(button2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(button1, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(button3, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(button4, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(button5, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(44, 44, 44) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(buttonClear) + .addComponent(textPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonOk) + .addComponent(buttonCancel)) + .addContainerGap()) + ); + + pack(); + }// //GEN-END:initComponents + + private void buttonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonClearActionPerformed + textPassword.setText(""); + }//GEN-LAST:event_buttonClearActionPerformed + + private void buttonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCancelActionPerformed + cancel(); + }//GEN-LAST:event_buttonCancelActionPerformed + + private void buttonOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOkActionPerformed + if (!checkPassword()){ + SwingUtils.showMessage(this, "Error", "Invalid password"); + buttonClearActionPerformed(null); + return; + } + accept(); + }//GEN-LAST:event_buttonOkActionPerformed + + private void button1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button1ActionPerformed + textPassword.setText(textPassword.getText() + "0"); + }//GEN-LAST:event_button1ActionPerformed + + private void button2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button2ActionPerformed + textPassword.setText(textPassword.getText() + "1"); + }//GEN-LAST:event_button2ActionPerformed + + private void button3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button3ActionPerformed + textPassword.setText(textPassword.getText() + "2"); + }//GEN-LAST:event_button3ActionPerformed + + private void button4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button4ActionPerformed + textPassword.setText(textPassword.getText() + "3"); + }//GEN-LAST:event_button4ActionPerformed + + private void button5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button5ActionPerformed + textPassword.setText(textPassword.getText() + "4"); + }//GEN-LAST:event_button5ActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(PasswordDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(PasswordDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(PasswordDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(PasswordDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the dialog */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + PasswordDialog dialog = new PasswordDialog(new javax.swing.JFrame(), true, 1234); + dialog.addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(java.awt.event.WindowEvent e) { + System.exit(0); + } + }); + dialog.setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton button1; + private javax.swing.JButton button2; + private javax.swing.JButton button3; + private javax.swing.JButton button4; + private javax.swing.JButton button5; + private javax.swing.JButton buttonCancel; + private javax.swing.JButton buttonClear; + private javax.swing.JButton buttonOk; + private javax.swing.JPasswordField textPassword; + // End of variables declaration//GEN-END:variables +}