From 0b98ba19a0f12809fc43899cf299e0408d30d587 Mon Sep 17 00:00:00 2001 From: jprocter Date: Mon, 29 Aug 2011 15:35:56 +0100 Subject: [PATCH] refactored popup dialog boilerplate code to own class --- src/jalview/gui/FeatureColourChooser.java | 72 ++------------------ src/jalview/gui/JalviewDialog.java | 103 +++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 65 deletions(-) create mode 100644 src/jalview/gui/JalviewDialog.java diff --git a/src/jalview/gui/FeatureColourChooser.java b/src/jalview/gui/FeatureColourChooser.java index e9a88ac..9943df9 100644 --- a/src/jalview/gui/FeatureColourChooser.java +++ b/src/jalview/gui/FeatureColourChooser.java @@ -29,10 +29,8 @@ import jalview.datamodel.*; import jalview.schemes.*; import java.awt.Dimension; -public class FeatureColourChooser extends JPanel +public class FeatureColourChooser extends JalviewDialog { - JDialog frame; - // FeatureSettings fs; FeatureRenderer fr; @@ -77,12 +75,7 @@ public class FeatureColourChooser extends JPanel this.fr = frender; this.type = type; ap = fr.ap; - frame = new JDialog(Desktop.instance, true); - frame.setTitle("Graduated Feature Colour for " + type); - Rectangle deskr = Desktop.instance.getBounds(); - frame.setBounds(new Rectangle((int) (deskr.getCenterX() - 240), - (int) (deskr.getCenterY() - 92), 480, 185)); - frame.setContentPane(this); + initDialogFrame(this,true, block,"Graduated Feature Colour for " + type, 480, 185); // frame.setLayer(JLayeredPane.PALETTE_LAYER); // Desktop.addInternalFrame(frame, "Graduated Feature Colour for "+type, // 480, 145); @@ -167,22 +160,7 @@ public class FeatureColourChooser extends JPanel adjusting = false; changeColour(); - if (!block) - { - new Thread(new Runnable() - { - - public void run() - { - frame.show(); - } - - }).start(); - } - else - { - frame.show(); - } + waitForInput(); } public FeatureColourChooser() @@ -232,24 +210,6 @@ public class FeatureColourChooser extends JPanel minText.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); maxText.setText("Max:"); maxText.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - ok.setOpaque(false); - ok.setText("OK"); - ok.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - ok_actionPerformed(e); - } - }); - cancel.setOpaque(false); - cancel.setText("Cancel"); - cancel.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - cancel_actionPerformed(e); - } - }); this.setLayout(borderLayout1); jPanel2.setLayout(flowLayout1); jPanel1.setBackground(Color.white); @@ -331,10 +291,6 @@ public class FeatureColourChooser extends JPanel JPanel maxColour = new JPanel(); - JButton ok = new JButton(); - - JButton cancel = new JButton(); - JPanel colourPanel = new JPanel(); JPanel jPanel1 = new JPanel(); @@ -503,7 +459,7 @@ public class FeatureColourChooser extends JPanel ap.paintAlignment(false); } - private void raiseClosed() + protected void raiseClosed() { if (this.colourEditor != null) { @@ -511,29 +467,15 @@ public class FeatureColourChooser extends JPanel } } - public void ok_actionPerformed(ActionEvent e) + public void okPressed() { changeColour(); - try - { - frame.dispose(); - raiseClosed(); - } catch (Exception ex) - { - } } - public void cancel_actionPerformed(ActionEvent e) + + public void cancelPressed() { reset(); - try - { - frame.dispose(); - // frame.setClosed(true); - raiseClosed(); - } catch (Exception ex) - { - } } void reset() diff --git a/src/jalview/gui/JalviewDialog.java b/src/jalview/gui/JalviewDialog.java new file mode 100644 index 0000000..4630cfc --- /dev/null +++ b/src/jalview/gui/JalviewDialog.java @@ -0,0 +1,103 @@ +package jalview.gui; + +import java.awt.Container; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; + +/** + * Boilerplate dialog class. Implements basic functionality necessary for model blocking/non-blocking dialogs + * with an OK and Cancel button ready to add to the content pane. + * @author jimp + * + */ +public abstract class JalviewDialog extends JPanel +{ + + protected JDialog frame; + protected JButton ok = new JButton(); + protected JButton cancel = new JButton(); + boolean block=false; + + public void waitForInput() + { + if (!block) + { + new Thread(new Runnable() + { + + public void run() + { + frame.show(); + } + + }).start(); + } + else + { + frame.show(); + } + } + + protected void initDialogFrame(Container content, + boolean modal, boolean block, String title, int width, int height) + { + + frame = new JDialog(Desktop.instance, true); + frame.setTitle(title); + if (Desktop.instance!=null) + { + Rectangle deskr = Desktop.instance.getBounds(); + frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width/2), + (int) (deskr.getCenterY() - height/2), width, height)); + } else { + frame.setSize(width,height); + } + frame.setContentPane(content); + this.block = block; + + ok.setOpaque(false); + ok.setText("OK"); + ok.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + okPressed(); + closeDialog(); + } + }); + cancel.setOpaque(false); + cancel.setText("Cancel"); + cancel.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + cancelPressed(); + closeDialog(); + } + }); + + } + /** + * clean up and raise the 'dialog closed' event by calling raiseClosed + */ + protected void closeDialog() + { + try + { + frame.dispose(); + raiseClosed(); + } catch (Exception ex) + { + } + } + + protected abstract void raiseClosed(); + protected abstract void okPressed(); + protected abstract void cancelPressed(); + +} -- 1.7.10.2