Changeset 7111


Ignore:
Timestamp:
10/21/10 21:13:27 (9 years ago)
Author:
aivar
Message:

Fleshed out.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/slim-plugin/src/main/java/loci/slim/ui/UserInterfacePanel.java

    r7065 r7111  
    3737import java.awt.BorderLayout; 
    3838import java.awt.CardLayout; 
    39 import java.awt.CheckboxMenuItem; 
    40 import java.awt.Color; 
    4139import java.awt.Dimension; 
    42 import java.awt.Font; 
    43 import java.awt.Menu; 
    44 import java.awt.MenuBar; 
    45 import java.awt.MenuItem; 
    46 import java.awt.Toolkit; 
    4740import java.awt.event.ActionEvent; 
    4841import java.awt.event.ActionListener; 
     42import java.awt.event.ComponentAdapter; 
     43import java.awt.event.ComponentEvent; 
    4944import java.awt.event.ItemEvent; 
    5045import java.awt.event.ItemListener; 
    51 import java.awt.event.WindowEvent; 
    52 import java.awt.event.WindowListener; 
    53 import java.io.ByteArrayOutputStream; 
    54 import java.io.File; 
    55 import java.io.FileWriter; 
    56 import java.io.IOException; 
    57 import java.io.PrintStream; 
    58 import java.io.PrintWriter; 
    59 import java.rmi.RemoteException; 
    60 import java.util.Arrays; 
    61 import java.util.Hashtable; 
    62  
     46 
     47import javax.swing.border.Border; 
     48import javax.swing.BorderFactory; 
    6349import javax.swing.Box; 
    6450import javax.swing.BoxLayout; 
    6551import javax.swing.JButton; 
    6652import javax.swing.JCheckBox; 
    67 import javax.swing.JFileChooser; 
     53import javax.swing.JComboBox; 
    6854import javax.swing.JFrame; 
    6955import javax.swing.JLabel; 
    70 import javax.swing.JOptionPane; 
    7156import javax.swing.JPanel; 
    7257import javax.swing.JTextField; 
    73 import javax.swing.ProgressMonitor; 
    7458import javax.swing.SpringLayout; 
    7559import javax.swing.SwingConstants; 
    76 import javax.swing.SwingUtilities; 
    7760import javax.swing.border.EmptyBorder; 
    78 import javax.swing.border.TitledBorder; 
    79 import javax.swing.event.ChangeEvent; 
    80 import javax.swing.event.ChangeListener; 
    81 import javax.swing.event.DocumentEvent; 
    82 import javax.swing.event.DocumentListener; 
    83 import javax.swing.text.Document; 
    8461 
    8562import loci.slim.SLIMProcessor.FitAlgorithm; 
     
    9774 */ 
    9875 
    99 /* 
    100 class edit_dialog extends javax.swing.JFrame{ 
    101     javax.swing.JTextField title = new javax.swing.JTextField(); 
    102     public edit_dialog(){ 
    103         setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE); 
    104         setTitle("New entity"); 
    105         getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.PAGE_AXIS)); 
    106         add(title); 
    107         pack(); 
    108         setVisible(true); 
    109     } 
    110 } 
    111 Your problem is that you're creating a BoxLayout for a JFrame (this), but setting it as the layout for a JPanel (getContentPane()). Try: 
    112  
    113 getContentPane().setLayout( 
    114     new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS) 
    115 ); 
    116  
    117 link 
    118  */ 
    119 public class UserInterfacePanel /*extends JFrame*/ implements IUserInterfacePanel, ItemListener { 
     76public class UserInterfacePanel implements IUserInterfacePanel, ItemListener { 
    12077    // Unicode special characters 
    12178    private static final Character CHI    = '\u03c7'; 
     
    12784    private static final Character SUB_2  = '\u2082'; 
    12885    private static final Character SUB_3  = '\u2083'; 
     86     
     87    private static final String SUM_REGION = "Sum All"; 
     88    private static final String ROIS_REGION = "Sum Each ROI"; 
     89    private static final String PIXEL_REGION = "Single Pixel"; 
     90    private static final String ALL_REGION = "Each Pixel"; 
     91     
     92    private static final String PB_RLD_ALGORITHM = "Paul Barber NR RLD"; 
     93    private static final String PB_LMA_ALGORITHM = "Paul Barber NR LMA"; 
     94    private static final String JAOLHO_LMA_ALGORITHM = "Jaolho LMA"; 
     95    private static final String SLIM_CURVE_RLD_ALGORITHM = "SLIM Curve RLD"; 
     96    private static final String SLIM_CURVE_LMA_ALGORITHM = "SLIM Curve LMA"; 
     97 
     98    private static final String SINGLE_COMPONENT = "Single Exponential"; 
     99    private static final String DOUBLE_COMPONENT = "Double Exponential"; 
     100    private static final String TRIPLE_COMPONENT = "Triple Exponential"; 
     101    private static final String STRETCH_COMPONENT = "Stretched Exponential"; 
     102     
     103    private static final String DO_FIT = "Do Fit"; 
     104    private static final String CANCEL_FIT = "Cancel Fit"; 
     105 
     106    private static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(10, 10, 10, 10); 
     107    private static final Border ETCHED_BORDER = BorderFactory.createEtchedBorder(); 
     108 
     109    private static final String REGION_ITEMS[] = { SUM_REGION, ROIS_REGION, PIXEL_REGION, ALL_REGION }; 
     110    private static final String ALGORITHM_ITEMS[] = { JAOLHO_LMA_ALGORITHM, SLIM_CURVE_RLD_ALGORITHM, SLIM_CURVE_LMA_ALGORITHM }; 
     111    private static final String FUNCTION_ITEMS[] = { SINGLE_COMPONENT, DOUBLE_COMPONENT, TRIPLE_COMPONENT }; 
     112     
     113    public IUserInterfacePanelListener m_listener; 
    129114 
    130115    // UI panel 
    131     JPanel m_uiPanel; 
     116    JPanel m_COMPONENT; 
     117    JFrame m_frame; 
     118    JPanel m_cardPanel; 
     119 
     120    JComboBox m_regionComboBox; 
     121    JComboBox m_algorithmComboBox; 
     122    JComboBox m_functionComboBox; 
     123 
     124    // fit settings 
     125    JTextField m_xField; 
     126    JTextField m_yField; 
     127    JTextField m_startField; 
     128    JTextField m_stopField; 
     129    JTextField m_thresholdField; 
    132130 
    133131    // parameter panel 
     
    142140    JTextField m_cParam1; 
    143141    JCheckBox m_cFix1; 
     142    JTextField m_chiSqParam1; 
     143    JCheckBox m_startParam1; 
    144144 
    145145    // double exponent fit 
     
    154154    JTextField m_cParam2; 
    155155    JCheckBox m_cFix2; 
     156    JTextField m_chiSqParam2; 
     157    JCheckBox m_startParam2; 
    156158 
    157159    // triple exponent fit 
     
    170172    JTextField m_cParam3; 
    171173    JCheckBox m_cFix3; 
    172  
    173     // fit settings 
    174     JTextField m_xField; 
    175     JTextField m_yField; 
    176     JTextField m_startField; 
    177     JTextField m_stopField; 
    178     JTextField m_thresholdField; 
    179  
    180     // data 
    181     FitRegion m_region; 
    182     FitAlgorithm m_algorithm; 
    183     FitFunction m_function; 
    184     int m_start; 
    185     int m_stop; 
    186     int m_threshold; 
    187     int m_x; 
    188     int m_y; 
    189     int m_components; 
    190     double m_params[]; 
    191     boolean m_free[]; 
     174    JTextField m_chiSqParam3; 
     175    JCheckBox m_startParam3; 
     176 
     177    JButton m_fitButton; 
    192178 
    193179    public UserInterfacePanel(boolean showTau) { 
    194180        String lifetimeLabel = "" + (showTau ? TAU : LAMBDA); 
     181         
     182        m_frame = new JFrame("SLIM Plugin"); 
     183        m_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    195184 
    196185        // create outer panel 
    197         m_uiPanel = new JPanel(); //new BoxLayout(m_uiPanel, BoxLayout.Y_AXIS)); 
     186        JPanel outerPanel = new JPanel(); 
     187        outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS)); 
    198188 
    199189        // create inner panel 
    200         JPanel innerPanel = null; 
    201         innerPanel = new JPanel(); //new BoxLayout(innerPanel, BoxLayout.X_AXIS)); 
    202  
    203         // create parameter panel 
    204         m_paramPanel = new JPanel(new CardLayout()); 
    205  
    206         // create & add single exponential panel 
    207         m_paramPanel.add(createSingleExponentialPanel(lifetimeLabel), "PANEL 1"); 
    208  
    209         // create & add double exponential panel 
    210         m_paramPanel.add(createDoubleExponentialPanel(lifetimeLabel), "PANEL 2"); 
    211  
    212         // create & add triple exponential panel 
    213         m_paramPanel.add(createTripleExponentialPanel(lifetimeLabel), "PANEL 3"); 
    214  
    215         // create settings panel 
    216         JPanel settingsPanel = new JPanel(); 
    217         settingsPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
    218         settingsPanel.setLayout(new SpringLayout()); 
    219  
    220         JLabel xLabel = new JLabel("x"); 
     190        JPanel innerPanel = new JPanel(); 
     191        innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS)); 
     192 
     193        JPanel fitPanel = createFitPanel(); 
     194        fitPanel.setBorder(border("Fit")); 
     195        innerPanel.add(fitPanel); 
     196 
     197        JPanel controlPanel = createControlPanel(); 
     198        controlPanel.setBorder(border("Control")); 
     199        innerPanel.add(controlPanel); 
     200 
     201        // Create cards and the panel that contains the cards 
     202        m_cardPanel = new JPanel(new CardLayout()); 
     203        m_cardPanel.add(createSingleExponentialPanel(lifetimeLabel), SINGLE_COMPONENT); 
     204        m_cardPanel.add(createDoubleExponentialPanel(lifetimeLabel), DOUBLE_COMPONENT); 
     205        m_cardPanel.add(createTripleExponentialPanel(lifetimeLabel), TRIPLE_COMPONENT); 
     206        m_cardPanel.setBorder(border("Params")); 
     207        innerPanel.add(m_cardPanel); 
     208 
     209        outerPanel.add(innerPanel); 
     210 
     211        //Lay out the buttons from left to right. 
     212        JPanel buttonPanel = new JPanel(); 
     213        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); 
     214        buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); 
     215        buttonPanel.add(Box.createHorizontalGlue()); 
     216        //buttonPanel.add(new JButton("Panic Button")); 
     217        //buttonPanel.add(Box.createRigidArea(new Dimension(10, 0))); 
     218        m_fitButton = new JButton("Do Fit"); 
     219        m_fitButton.addActionListener(new FitButtonListener()); 
     220        buttonPanel.add(m_fitButton); 
     221 
     222        outerPanel.add(buttonPanel); 
     223        m_frame.getContentPane().add(outerPanel); 
     224 
     225        m_frame.pack(); 
     226        final Dimension preferred = m_frame.getPreferredSize(); 
     227        m_frame.setMinimumSize(preferred); 
     228        m_frame.addComponentListener( 
     229                new ComponentAdapter() { 
     230                    @Override 
     231                    public void componentResized(ComponentEvent e) { 
     232                        // allow horizontal but not vertical resize 
     233                        int width = m_frame.getWidth(); 
     234                        if (width < (int) preferred.getWidth()) { 
     235                            width = (int) preferred.getWidth(); 
     236                        } 
     237                        m_frame.setSize(width, (int) preferred.getHeight()); 
     238                    } 
     239 
     240        }); 
     241        m_frame.setVisible(true); 
     242    } 
     243 
     244    public JFrame getFrame() { 
     245        return m_frame; 
     246    } 
     247     
     248    public void setListener(IUserInterfacePanelListener listener) { 
     249        m_listener = listener; 
     250    } 
     251 
     252    public void reset() { 
     253        setFitButtonState(true); 
     254    } 
     255 
     256    private JPanel createFitPanel() { 
     257        JPanel fitPanel = new JPanel(); 
     258        fitPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
     259        fitPanel.setLayout(new SpringLayout()); 
     260 
     261        JLabel regionLabel = new JLabel("Region"); 
     262        regionLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
     263        fitPanel.add(regionLabel); 
     264        m_regionComboBox = new JComboBox(REGION_ITEMS); 
     265        fitPanel.add(m_regionComboBox); 
     266 
     267        JLabel algorithmLabel = new JLabel("Algorithm"); 
     268        algorithmLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
     269        fitPanel.add(algorithmLabel); 
     270        m_algorithmComboBox = new JComboBox(ALGORITHM_ITEMS); 
     271        fitPanel.add(m_algorithmComboBox); 
     272 
     273        JLabel functionLabel = new JLabel("Function"); 
     274        functionLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
     275        fitPanel.add(functionLabel); 
     276        m_functionComboBox = new JComboBox(FUNCTION_ITEMS); 
     277        m_functionComboBox.addItemListener(this); 
     278        fitPanel.add(m_functionComboBox); 
     279 
     280        // rows, cols, initX, initY, xPad, yPad 
     281        SpringUtilities.makeCompactGrid(fitPanel, 3, 2, 4, 4, 4, 4); 
     282 
     283        JPanel panel = new JPanel(new BorderLayout()); 
     284        panel.add("North", fitPanel); 
     285 
     286        return panel; 
     287    } 
     288 
     289    private JPanel createControlPanel() { 
     290        JPanel controlPanel = new JPanel(); 
     291        controlPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
     292        controlPanel.setLayout(new SpringLayout()); 
     293 
     294        JLabel xLabel = new JLabel("X"); 
    221295        xLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
    222         settingsPanel.add(xLabel); 
     296        controlPanel.add(xLabel); 
    223297        m_xField = new JTextField(9); 
    224         m_xField.setEditable(false); 
    225         settingsPanel.add(m_xField); 
    226  
    227         JLabel yLabel = new JLabel("y"); 
     298        controlPanel.add(m_xField); 
     299 
     300        JLabel yLabel = new JLabel("Y"); 
    228301        yLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
    229         settingsPanel.add(yLabel); 
     302        controlPanel.add(yLabel); 
    230303        m_yField = new JTextField(9); 
    231         m_yField.setEditable(false); 
    232         settingsPanel.add(m_yField); 
    233  
    234         JLabel startLabel = new JLabel("start"); 
     304        controlPanel.add(m_yField); 
     305 
     306        JLabel startLabel = new JLabel("Start"); 
    235307        startLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
    236         settingsPanel.add(startLabel); 
     308        controlPanel.add(startLabel); 
    237309        m_startField = new JTextField(9); 
    238         m_startField.setEditable(false); 
    239         settingsPanel.add(m_startField); 
    240  
    241         JLabel stopLabel = new JLabel("stop"); 
     310        controlPanel.add(m_startField); 
     311 
     312        JLabel stopLabel = new JLabel("Stop"); 
    242313        stopLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
    243         settingsPanel.add(stopLabel); 
     314        controlPanel.add(stopLabel); 
    244315        m_stopField = new JTextField(9); 
    245         m_stopField.setEditable(false); 
    246         settingsPanel.add(m_stopField); 
    247  
    248         JLabel thresholdLabel = new JLabel("threshold"); 
     316        controlPanel.add(m_stopField); 
     317 
     318        JLabel thresholdLabel = new JLabel("Threshold"); 
    249319        thresholdLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
    250         settingsPanel.add(thresholdLabel); 
     320        controlPanel.add(thresholdLabel); 
    251321        m_thresholdField = new JTextField(9); 
    252         m_thresholdField.setEditable(false); 
    253         settingsPanel.add(m_thresholdField); 
    254  
    255         // create control panel 
    256         JPanel controlPanel = new JPanel(); 
    257  
    258         innerPanel.add(controlPanel); 
    259         innerPanel.add(settingsPanel); 
    260         innerPanel.add(m_paramPanel); 
    261  
    262         JButton fitButton = new JButton("Fit"); 
    263  
    264         m_uiPanel.add(innerPanel); 
    265         m_uiPanel.add(fitButton); 
    266     } 
    267  
    268     public JPanel getPanel() { 
    269         return m_uiPanel; 
     322        controlPanel.add(m_thresholdField); 
     323 
     324        // rows, cols, initX, initY, xPad, yPad 
     325        SpringUtilities.makeCompactGrid(controlPanel, 5, 2, 4, 4, 4, 4); 
     326 
     327        JPanel panel = new JPanel(new BorderLayout()); 
     328        panel.add("North", controlPanel); 
     329 
     330        return panel; 
    270331    } 
    271332 
    272333    private JPanel createSingleExponentialPanel(String lifetimeLabel) { 
    273         JPanel expPanel1 = new JPanel(); 
    274         expPanel1.setBorder(new EmptyBorder(0, 0, 8, 8)); 
    275         expPanel1.setLayout(new SpringLayout()); 
    276  
    277         JLabel a1Label1 = new JLabel("a"); 
     334        JPanel expPanel = new JPanel(); 
     335        expPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
     336        expPanel.setLayout(new SpringLayout()); 
     337 
     338        JLabel a1Label1 = new JLabel("A"); 
    278339        a1Label1.setHorizontalAlignment(SwingConstants.RIGHT); 
    279         expPanel1.add(a1Label1); 
     340        expPanel.add(a1Label1); 
    280341        m_a1Param1 = new JTextField(9); 
    281         m_a1Param1.setEditable(false); 
    282         expPanel1.add(m_a1Param1); 
     342        //m_a1Param1.setEditable(false); 
     343        expPanel.add(m_a1Param1); 
    283344        m_a1Fix1 = new JCheckBox("Fix"); 
    284         m_a1Fix1.addItemListener(this); 
    285         expPanel1.add(m_a1Fix1); 
     345        //m_a1Fix1.addItemListener(this); 
     346        expPanel.add(m_a1Fix1); 
    286347 
    287348        JLabel t1Label1 = new JLabel(lifetimeLabel); 
    288349        t1Label1.setHorizontalAlignment(SwingConstants.RIGHT); 
    289         expPanel1.add(t1Label1); 
     350        expPanel.add(t1Label1); 
    290351        m_t1Param1 = new JTextField(9); 
    291         m_t1Param1.setEditable(false); 
    292         expPanel1.add(m_t1Param1); 
     352        //m_t1Param1.setEditable(false); 
     353        expPanel.add(m_t1Param1); 
    293354        m_t1Fix1 = new JCheckBox("Fix"); 
    294         m_t1Fix1.addItemListener(this); 
    295         expPanel1.add(m_t1Fix1); 
    296  
    297         JLabel cLabel1 = new JLabel("c"); 
     355        //m_t1Fix1.addItemListener(this); 
     356        expPanel.add(m_t1Fix1); 
     357 
     358        JLabel cLabel1 = new JLabel("C"); 
    298359        cLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
    299         expPanel1.add(cLabel1); 
     360        expPanel.add(cLabel1); 
    300361        m_cParam1 = new JTextField(9); 
    301         m_cParam1.setEditable(false); 
    302         expPanel1.add(m_cParam1); 
     362        //m_cParam1.setEditable(false); 
     363        expPanel.add(m_cParam1); 
    303364        m_cFix1 = new JCheckBox("Fix"); 
    304         m_cFix1.addItemListener(this); 
    305         expPanel1.add(m_cFix1); 
    306  
    307         return expPanel1; 
     365        //m_cFix1.addItemListener(this); 
     366        expPanel.add(m_cFix1); 
     367 
     368        JLabel chiSqLabel1 = new JLabel("" + CHI + SQUARE); 
     369        chiSqLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
     370        expPanel.add(chiSqLabel1); 
     371        m_chiSqParam1 = new JTextField(9); 
     372        m_chiSqParam1.setEditable(false); 
     373        expPanel.add(m_chiSqParam1); 
     374        JLabel nullLabel1 = new JLabel(""); 
     375        expPanel.add(nullLabel1); 
     376 
     377        // SLIMPlotter look & feel: 
     378        //Color fixColor = m_a1Param1.getBackground(); 
     379        //Color floatColor = a1Label1.getBackground(); 
     380        //m_a1Param1.setBackground(floatColor); 
     381        //m_t1Param1.setBackground(floatColor); 
     382        //m_cParam1.setBackground(floatColor); 
     383        //m_chiSqParam1.setBackground(floatColor); 
     384 
     385        // rows, cols, initX, initY, xPad, yPad 
     386        SpringUtilities.makeCompactGrid(expPanel, 4, 3, 4, 4, 4, 4); 
     387 
     388        JPanel panel = new JPanel(new BorderLayout()); 
     389        panel.add("North", expPanel); 
     390 
     391        m_startParam1 = new JCheckBox("Use as starting parameters for fit"); 
     392        panel.add("South", m_startParam1); 
     393        return panel; 
    308394    } 
    309395 
    310396    private JPanel createDoubleExponentialPanel(String lifetimeLabel) { 
    311         JPanel expPanel2 = new JPanel(); 
    312         expPanel2.setBorder(new EmptyBorder(0, 0, 8, 8)); 
    313         expPanel2.setLayout(new SpringLayout()); 
    314  
    315         JLabel a1Label2 = new JLabel("a" + SUB_1); 
     397        JPanel expPanel = new JPanel(); 
     398        expPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
     399        expPanel.setLayout(new SpringLayout()); 
     400 
     401        JLabel a1Label2 = new JLabel("A" + SUB_1); 
    316402        a1Label2.setHorizontalAlignment(SwingConstants.RIGHT); 
    317         expPanel2.add(a1Label2); 
     403        expPanel.add(a1Label2); 
    318404        m_a1Param2 = new JTextField(9); 
    319         m_a1Param2.setEditable(false); 
    320         expPanel2.add(m_a1Param2); 
     405        //m_a1Param2.setEditable(false); 
     406        expPanel.add(m_a1Param2); 
    321407        m_a1Fix2 = new JCheckBox("Fix"); 
    322         m_a1Fix2.addItemListener(this); 
    323         expPanel2.add(m_a1Fix2); 
     408        //m_a1Fix2.addItemListener(this); 
     409        expPanel.add(m_a1Fix2); 
    324410 
    325411        JLabel t1Label2 = new JLabel(lifetimeLabel + SUB_1); 
    326412        t1Label2.setHorizontalAlignment(SwingConstants.RIGHT); 
    327         expPanel2.add(t1Label2); 
     413        expPanel.add(t1Label2); 
    328414        m_t1Param2 = new JTextField(9); 
    329         m_t1Param2.setEditable(false); 
    330         expPanel2.add(m_t1Param2); 
     415        //m_t1Param2.setEditable(false); 
     416        expPanel.add(m_t1Param2); 
    331417        m_t1Fix2 = new JCheckBox("Fix"); 
    332         m_t1Fix2.addItemListener(this); 
    333         expPanel2.add(m_t1Fix2); 
    334  
    335         JLabel a2Label2 = new JLabel("a" + SUB_2); 
     418        //m_t1Fix2.addItemListener(this); 
     419        expPanel.add(m_t1Fix2); 
     420 
     421        JLabel a2Label2 = new JLabel("A" + SUB_2); 
    336422        a2Label2.setHorizontalAlignment(SwingConstants.RIGHT); 
    337         expPanel2.add(a2Label2); 
     423        expPanel.add(a2Label2); 
    338424        m_a2Param2 = new JTextField(9); 
    339         m_a2Param2.setEditable(false); 
    340         expPanel2.add(m_a2Param2); 
     425        //m_a2Param2.setEditable(false); 
     426        expPanel.add(m_a2Param2); 
    341427        m_a2Fix2 = new JCheckBox("Fix"); 
    342         m_a2Fix2.addItemListener(this); 
    343         expPanel2.add(m_a2Fix2); 
     428        //m_a2Fix2.addItemListener(this); 
     429        expPanel.add(m_a2Fix2); 
    344430 
    345431        JLabel t2Label2 = new JLabel(lifetimeLabel + SUB_2); 
    346432        t2Label2.setHorizontalAlignment(SwingConstants.RIGHT); 
    347         expPanel2.add(t2Label2); 
     433        expPanel.add(t2Label2); 
    348434        m_t2Param2 = new JTextField(9); 
    349         m_t2Param2.setEditable(false); 
    350         expPanel2.add(m_t2Param2); 
     435        //m_t2Param2.setEditable(false); 
     436        expPanel.add(m_t2Param2); 
    351437        m_t2Fix2 = new JCheckBox("Fix"); 
    352         m_t2Fix2.addItemListener(this); 
    353         expPanel2.add(m_t2Fix2); 
    354  
    355         JLabel cLabel2 = new JLabel("c"); 
     438        //m_t2Fix2.addItemListener(this); 
     439        expPanel.add(m_t2Fix2); 
     440 
     441        JLabel cLabel2 = new JLabel("C"); 
    356442        cLabel2.setHorizontalAlignment(SwingConstants.RIGHT); 
    357         expPanel2.add(cLabel2); 
     443        expPanel.add(cLabel2); 
    358444        m_cParam2 = new JTextField(9); 
    359         m_cParam2.setEditable(false); 
    360         expPanel2.add(m_cParam2); 
     445        //m_cParam2.setEditable(false); 
     446        expPanel.add(m_cParam2); 
    361447        m_cFix2 = new JCheckBox("Fix"); 
    362         m_cFix2.addItemListener(this); 
    363         expPanel2.add(m_cFix2); 
    364  
    365         return expPanel2; 
     448        //m_cFix2.addItemListener(this); 
     449        expPanel.add(m_cFix2); 
     450 
     451        JLabel chiSqLabel2 = new JLabel("" + CHI + SQUARE); 
     452        chiSqLabel2.setHorizontalAlignment(SwingConstants.RIGHT); 
     453        expPanel.add(chiSqLabel2); 
     454        m_chiSqParam2 = new JTextField(9); 
     455        //m_chiSqParam2.setEditable(false); 
     456        expPanel.add(m_chiSqParam2); 
     457        JLabel nullLabel2 = new JLabel(""); 
     458        expPanel.add(nullLabel2); 
     459 
     460        // From SLIMPlotter 
     461        //Color fixColor = m_a1Param2.getBackground(); 
     462        //Color floatColor = a1Label2.getBackground(); 
     463        //m_a1Param2.setBackground(floatColor); 
     464        //m_t1Param2.setBackground(floatColor); 
     465        //m_a2Param2.setBackground(floatColor); 
     466        //m_t2Param2.setBackground(floatColor); 
     467        //m_cParam2.setBackground(floatColor); 
     468        //m_chiSqParam2.setBackground(floatColor); 
     469 
     470        // rows, cols, initX, initY, xPad, yPad 
     471        SpringUtilities.makeCompactGrid(expPanel, 6, 3, 4, 4, 4, 4); 
     472 
     473        JPanel panel = new JPanel(new BorderLayout()); 
     474        panel.add("North", expPanel); 
     475 
     476        m_startParam2 = new JCheckBox("Use as starting parameters for fit"); 
     477        panel.add("South", m_startParam2); 
     478        return panel; 
    366479    } 
    367480 
    368481    private JPanel createTripleExponentialPanel(String lifetimeLabel) { 
    369         JPanel expPanel3 = new JPanel(); 
    370         expPanel3.setBorder(new EmptyBorder(0, 0, 8, 8)); 
    371         expPanel3.setLayout(new SpringLayout()); 
    372  
    373         JLabel a1Label3 = new JLabel("a" + SUB_1); 
     482        JPanel expPanel = new JPanel(); 
     483        expPanel.setBorder(new EmptyBorder(0, 0, 8, 8)); 
     484        expPanel.setLayout(new SpringLayout()); 
     485 
     486        JLabel a1Label3 = new JLabel("A" + SUB_1); 
    374487        a1Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    375         expPanel3.add(a1Label3); 
     488        expPanel.add(a1Label3); 
    376489        m_a1Param3 = new JTextField(9); 
    377         m_a1Param3.setEditable(false); 
    378         expPanel3.add(m_a1Param3); 
     490        //m_a1Param3.setEditable(false); 
     491        expPanel.add(m_a1Param3); 
    379492        m_a1Fix3 = new JCheckBox("Fix"); 
    380         m_a1Fix3.addItemListener(this); 
    381         expPanel3.add(m_a1Fix3); 
     493        //m_a1Fix3.addItemListener(this); 
     494        expPanel.add(m_a1Fix3); 
    382495 
    383496        JLabel t1Label3 = new JLabel(lifetimeLabel + SUB_1); 
    384497        t1Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    385         expPanel3.add(t1Label3); 
     498        expPanel.add(t1Label3); 
    386499        m_t1Param3 = new JTextField(9); 
    387         m_t1Param3.setEditable(false); 
    388         expPanel3.add(m_t1Param3); 
     500        //m_t1Param3.setEditable(false); 
     501        expPanel.add(m_t1Param3); 
    389502        m_t1Fix3 = new JCheckBox("Fix"); 
    390         m_t1Fix3.addItemListener(this); 
    391         expPanel3.add(m_t1Fix3); 
    392  
    393         JLabel a2Label3 = new JLabel("a" + SUB_2); 
     503        //m_t1Fix3.addItemListener(this); 
     504        expPanel.add(m_t1Fix3); 
     505 
     506        JLabel a2Label3 = new JLabel("A" + SUB_2); 
    394507        a2Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    395         expPanel3.add(a2Label3); 
     508        expPanel.add(a2Label3); 
    396509        m_a2Param3 = new JTextField(9); 
    397         m_a2Param3.setEditable(false); 
    398         expPanel3.add(m_a2Param3); 
     510        //m_a2Param3.setEditable(false); 
     511        expPanel.add(m_a2Param3); 
    399512        m_a2Fix3 = new JCheckBox("Fix"); 
    400         m_a2Fix3.addItemListener(this); 
    401         expPanel3.add(m_a2Fix3); 
     513        //m_a2Fix3.addItemListener(this); 
     514        expPanel.add(m_a2Fix3); 
    402515 
    403516        JLabel t2Label3 = new JLabel(lifetimeLabel + SUB_2); 
    404517        t2Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    405         expPanel3.add(t2Label3); 
     518        expPanel.add(t2Label3); 
    406519        m_t2Param3 = new JTextField(9); 
    407         m_t2Param3.setEditable(false); 
    408         expPanel3.add(m_t2Param3); 
     520        //m_t2Param3.setEditable(false); 
     521        expPanel.add(m_t2Param3); 
    409522        m_t2Fix3 = new JCheckBox("Fix"); 
    410         m_t2Fix3.addItemListener(this); 
    411         expPanel3.add(m_t2Fix3); 
    412  
    413         JLabel a3Label3 = new JLabel("a" + SUB_3); 
     523        //m_t2Fix3.addItemListener(this); 
     524        expPanel.add(m_t2Fix3); 
     525 
     526        JLabel a3Label3 = new JLabel("A" + SUB_3); 
    414527        a3Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    415         expPanel3.add(a3Label3); 
     528        expPanel.add(a3Label3); 
    416529        m_a3Param3 = new JTextField(9); 
    417         m_a3Param3.setEditable(false); 
    418         expPanel3.add(m_a3Param3); 
     530        //m_a3Param3.setEditable(false); 
     531        expPanel.add(m_a3Param3); 
    419532        m_a3Fix3 = new JCheckBox("Fix"); 
    420         m_a3Fix3.addItemListener(this); 
    421         expPanel3.add(m_a3Fix3); 
     533        //m_a3Fix3.addItemListener(this); 
     534        expPanel.add(m_a3Fix3); 
    422535 
    423536        JLabel t3Label3 = new JLabel(lifetimeLabel + SUB_3); 
    424537        t3Label3.setHorizontalAlignment(SwingConstants.RIGHT); 
    425         expPanel3.add(t3Label3); 
     538        expPanel.add(t3Label3); 
    426539        m_t3Param3 = new JTextField(9); 
    427         m_t3Param3.setEditable(false); 
    428         expPanel3.add(m_t3Param3); 
     540        //m_t3Param3.setEditable(false); 
     541        expPanel.add(m_t3Param3); 
    429542        m_t3Fix3 = new JCheckBox("Fix"); 
    430         m_t3Fix3.addItemListener(this); 
    431         expPanel3.add(m_t3Fix3); 
    432  
    433         JLabel cLabel3 = new JLabel("c"); 
     543        //m_t3Fix3.addItemListener(this); 
     544        expPanel.add(m_t3Fix3); 
     545 
     546        JLabel cLabel3 = new JLabel("C"); 
    434547        cLabel3.setHorizontalAlignment(SwingConstants.RIGHT); 
    435         expPanel3.add(cLabel3); 
     548        expPanel.add(cLabel3); 
    436549        m_cParam3 = new JTextField(9); 
    437         m_cParam3.setEditable(false); 
    438         expPanel3.add(m_cParam3); 
     550        //m_cParam3.setEditable(false); 
     551        expPanel.add(m_cParam3); 
    439552        m_cFix3 = new JCheckBox("Fix"); 
    440         m_cFix3.addItemListener(this); 
    441         expPanel3.add(m_cFix3); 
    442  
    443         return expPanel3; 
     553        //m_cFix3.addItemListener(this); 
     554        expPanel.add(m_cFix3); 
     555 
     556 
     557        JLabel chiSqLabel3 = new JLabel("" + CHI + SQUARE); 
     558        chiSqLabel3.setHorizontalAlignment(SwingConstants.RIGHT); 
     559        expPanel.add(chiSqLabel3); 
     560        m_chiSqParam3 = new JTextField(9); 
     561        //m_chiSqParam3.setEditable(false); 
     562        expPanel.add(m_chiSqParam3); 
     563        JLabel nullLabel3 = new JLabel(""); 
     564        expPanel.add(nullLabel3); 
     565 
     566        // SLIMPlotter look & feel: 
     567        //Color fixColor = m_a1Param3.getBackground(); 
     568        //Color floatColor = a1Label3.getBackground(); 
     569        //m_a1Param3.setBackground(floatColor); 
     570        //m_t1Param3.setBackground(floatColor); 
     571        //m_a2Param3.setBackground(floatColor); 
     572        //m_t2Param3.setBackground(floatColor); 
     573        //m_a3Param3.setBackground(floatColor); 
     574        //m_t3Param3.setBackground(floatColor); 
     575        //m_cParam3.setBackground(floatColor); 
     576        //m_chiSqParam3.setBackground(floatColor); 
     577 
     578        // rows, cols, initX, initY, xPad, yPad 
     579        SpringUtilities.makeCompactGrid(expPanel, 8, 3, 4, 4, 4, 4); 
     580         
     581        JPanel panel = new JPanel(new BorderLayout()); 
     582        panel.add("North", expPanel); 
     583 
     584        m_startParam3 = new JCheckBox("Use as starting parameters for fit"); 
     585        panel.add("South", m_startParam3); 
     586        return panel; 
     587 
     588    } 
     589 
     590    private Border border(String title) { 
     591        return BorderFactory.createCompoundBorder( 
     592                BorderFactory.createTitledBorder(ETCHED_BORDER, title), 
     593                EMPTY_BORDER); 
     594    } 
     595     
     596    private void setFitButtonState(boolean on) { 
     597        m_fitButton.setText(on ? DO_FIT : CANCEL_FIT); 
     598    } 
     599     
     600    private boolean getFitButtonState() { 
     601        return m_fitButton.getText().equals(DO_FIT); 
    444602    } 
    445603 
    446604    public FitRegion getRegion() { 
    447         return m_region; 
     605        FitRegion region = null; 
     606        String selected = (String) m_regionComboBox.getSelectedItem(); 
     607        if (selected.equals(SUM_REGION)) { 
     608            region = FitRegion.SUMMED; 
     609        } 
     610        else if (selected.equals(ROIS_REGION)) { 
     611            region = FitRegion.ROI; 
     612        } 
     613        else if (selected.equals(PIXEL_REGION)) { 
     614            region = FitRegion.POINT; 
     615        } 
     616        else if (selected.equals(ALL_REGION)) { 
     617            region = FitRegion.EACH; 
     618        } 
     619        return region; 
    448620    } 
    449621 
    450622    public FitAlgorithm getAlgorithm() { 
    451         return m_algorithm; 
     623        FitAlgorithm algorithm = null; 
     624        String selected = (String) m_algorithmComboBox.getSelectedItem(); 
     625        if (selected.equals(JAOLHO_LMA_ALGORITHM)) { 
     626            algorithm = FitAlgorithm.JAOLHO; 
     627        } 
     628        else if (selected.equals(SLIM_CURVE_RLD_ALGORITHM)) { 
     629            algorithm = FitAlgorithm.SLIMCURVE_RLD; 
     630        } 
     631        else if (selected.equals(SLIM_CURVE_LMA_ALGORITHM)) { 
     632            algorithm = FitAlgorithm.SLIMCURVE_LMA; 
     633        } 
     634        return algorithm; 
    452635    } 
    453636 
    454637    public FitFunction getFunction() { 
    455         return m_function; 
     638        FitFunction function = null; 
     639        String selected = (String) m_functionComboBox.getSelectedItem(); 
     640        if (selected.equals(SINGLE_COMPONENT)) { 
     641            function = FitFunction.SINGLE_EXPONENTIAL; 
     642        } 
     643        else if (selected.equals(DOUBLE_COMPONENT)) { 
     644            function = FitFunction.DOUBLE_EXPONENTIAL; 
     645        } 
     646        else if (selected.equals(TRIPLE_COMPONENT)) { 
     647            function = FitFunction.TRIPLE_EXPONENTIAL; 
     648        } 
     649        return function; 
     650    } 
     651 
     652    public int getX() { 
     653        return parseInt(m_xField); 
     654    } 
     655 
     656    public void setX(int x) { 
     657        m_xField.setText("" + x); 
     658    } 
     659 
     660    public int getY() { 
     661        return parseInt(m_yField); 
     662    } 
     663 
     664    public void setY(int y) { 
     665        m_yField.setText("" + y); 
    456666    } 
    457667 
    458668    public int getStart() { 
    459         return m_start; 
    460     } 
     669        return parseInt(m_startField); 
     670    } 
     671 
     672    public void setStart(int start) { 
     673        m_startField.setText("" + start); 
     674    } 
     675 
    461676    public int getStop() { 
    462         return m_stop; 
    463     } 
     677        return parseInt(m_stopField); 
     678    } 
     679 
     680    public void setStop(int stop) { 
     681        m_stopField.setText("" + stop); 
     682    } 
     683 
    464684    public int getThreshold() { 
    465         return m_threshold; 
    466     } 
    467  
    468     public int getX() { 
    469         return m_x; 
    470     } 
    471  
    472     public void setX(int x) { 
    473         m_x = x; 
    474     } 
    475  
    476     public int getY() { 
    477         return m_y; 
    478     } 
    479  
    480     public void setY(int y) { 
    481         m_y = y; 
     685        return parseInt(m_thresholdField); 
    482686    } 
    483687 
    484688    public int getComponents() { 
    485         return m_components; 
    486     } 
     689        int components = 0; 
     690        String function = (String) m_functionComboBox.getSelectedItem(); 
     691        if (function.equals(SINGLE_COMPONENT)) { 
     692            components = 1; 
     693        } 
     694        else if (function.equals(DOUBLE_COMPONENT)) { 
     695            components = 2; 
     696        } 
     697        else if (function.equals(TRIPLE_COMPONENT)) { 
     698            components = 3; 
     699        } 
     700        return components; 
     701    } 
     702 
    487703    public double[] getParameters() { 
    488         return m_params; 
     704        double parameters[] = null; 
     705        String function = (String) m_functionComboBox.getSelectedItem(); 
     706        if (function.equals(SINGLE_COMPONENT)) { 
     707            parameters = new double[3]; 
     708            parameters[0] = Double.valueOf(m_a1Param1.getText()); 
     709            parameters[1] = Double.valueOf(m_t1Param1.getText()); 
     710            parameters[2] = Double.valueOf(m_cParam1.getText()); 
     711        } 
     712        else if (function.equals(DOUBLE_COMPONENT)) { 
     713            parameters = new double[5]; 
     714            parameters[0] = Double.valueOf(m_a1Param2.getText()); 
     715            parameters[1] = Double.valueOf(m_t1Param2.getText()); 
     716            parameters[2] = Double.valueOf(m_a2Param2.getText()); 
     717            parameters[3] = Double.valueOf(m_t2Param2.getText()); 
     718            parameters[4] = Double.valueOf(m_cParam2.getText()); 
     719        } 
     720        else if (function.equals(TRIPLE_COMPONENT)) { 
     721            parameters = new double[7]; 
     722            parameters[0] = Double.valueOf(m_a1Param3.getText()); 
     723            parameters[1] = Double.valueOf(m_t1Param3.getText()); 
     724            parameters[2] = Double.valueOf(m_a2Param3.getText()); 
     725            parameters[3] = Double.valueOf(m_t2Param3.getText()); 
     726            parameters[4] = Double.valueOf(m_a3Param3.getText()); 
     727            parameters[5] = Double.valueOf(m_t3Param3.getText()); 
     728            parameters[6] = Double.valueOf(m_cParam3.getText()); 
     729        } 
     730        return parameters; 
    489731    } 
    490732 
    491733    public void setParameters(double params[]) { 
    492         m_params = params.clone(); 
    493     } 
     734        String function = (String) m_functionComboBox.getSelectedItem(); 
     735        if (function.equals(SINGLE_COMPONENT)) { 
     736            m_a1Param1.setText("" + params[0]); 
     737            m_t1Param1.setText("" + params[1]); 
     738            m_cParam1.setText("" + params[2]); 
     739        } 
     740        else if (function.equals(DOUBLE_COMPONENT)) { 
     741            m_a1Param2.setText("" + params[0]); 
     742            m_t1Param2.setText("" + params[1]); 
     743            m_a2Param2.setText("" + params[2]); 
     744            m_t2Param2.setText("" + params[3]); 
     745            m_cParam2.setText("" + params[4]); 
     746        } 
     747        else if (function.equals(TRIPLE_COMPONENT)) { 
     748            m_a1Param3.setText("" + params[0]); 
     749            m_t1Param3.setText("" + params[1]); 
     750            m_a2Param3.setText("" + params[2]); 
     751            m_t2Param3.setText("" + params[3]); 
     752            m_a3Param3.setText("" + params[4]); 
     753            m_t3Param3.setText("" + params[5]); 
     754            m_cParam3.setText("" + params[6]); 
     755         } 
     756    } 
     757 
    494758    public boolean[] getFree() { 
    495         return m_free; 
    496     } 
    497  
    498     public void itemStateChanged(ItemEvent e) { 
    499          
    500     } 
     759        boolean free[] = null; 
     760        String function = (String) m_functionComboBox.getSelectedItem(); 
     761        if (function.equals(SINGLE_COMPONENT)) { 
     762            free = new boolean[3]; 
     763            free[0] = !m_a1Fix1.isSelected(); 
     764            free[1] = !m_t1Fix1.isSelected(); 
     765            free[2] = !m_cFix1.isSelected(); 
     766        } 
     767        else if (function.equals(DOUBLE_COMPONENT)) { 
     768            free = new boolean[5]; 
     769            free[0] = !m_a1Fix2.isSelected(); 
     770            free[1] = !m_t1Fix2.isSelected(); 
     771            free[2] = !m_a2Fix2.isSelected(); 
     772            free[3] = !m_t2Fix2.isSelected(); 
     773            free[4] = !m_cFix2.isSelected(); 
     774        } 
     775        else if (function.equals(TRIPLE_COMPONENT)) { 
     776            free = new boolean[7]; 
     777            free[0] = !m_a1Fix3.isSelected(); 
     778            free[1] = !m_t1Fix3.isSelected(); 
     779            free[2] = !m_a2Fix3.isSelected(); 
     780            free[3] = !m_t2Fix3.isSelected(); 
     781            free[4] = !m_a3Fix3.isSelected(); 
     782            free[5] = !m_t3Fix3.isSelected(); 
     783            free[6] = !m_cFix3.isSelected(); 
     784 
     785        } 
     786        return free; 
     787    } 
     788 
     789    public void itemStateChanged(ItemEvent e) { //TODO this class is a listener, vs inner class (below), vs anonymous inner class 
     790        CardLayout cl = (CardLayout)(m_cardPanel.getLayout()); 
     791        cl.show(m_cardPanel, (String)e.getItem()); 
     792    } 
     793 
     794    private int parseInt(JTextField field) { 
     795        int value = 0; 
     796        try { 
     797            value = Integer.parseInt(field.getText()); 
     798        } 
     799        catch (NumberFormatException e) { 
     800            System.out.println("Error parsing " + field.getName()); 
     801        } 
     802        return value; 
     803    } 
     804 
     805    private class FitButtonListener implements ActionListener { 
     806        public void actionPerformed(ActionEvent e){ 
     807            String text = (String)e.getActionCommand(); 
     808            if (text.equals("Do Fit")){ 
     809                setFitButtonState(false); 
     810                if (null != m_listener) { 
     811                    m_listener.doFit(); 
     812                } 
     813            } 
     814            else{ 
     815                setFitButtonState(true); 
     816                if (null != m_listener) { 
     817                    m_listener.cancelFit(); 
     818                } 
     819            } 
     820        } 
     821    } 
     822 
    501823} 
Note: See TracChangeset for help on using the changeset viewer.