Changeset 7837 for trunk


Ignore:
Timestamp:
12/15/11 15:40:53 (8 years ago)
Author:
aivar
Message:

Still working on fitted images, starting UI changes

Location:
trunk/projects/slim-plugin/src/main/java
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/slim-plugin/src/main/java/imagej/slim/histogram/HistogramPanel.java

    r7836 r7837  
    2020public class HistogramPanel extends JPanel { 
    2121    static final int ONE_HEIGHT = 20; 
    22     static final int FUDGE_FACTOR = 3; 
     22    static final int FUDGE_FACTOR = 4; 
    2323    private IHistogramPanelListener _listener; 
    2424    private final Object _synchObject = new Object(); 
     
    7474                            _minCursor = _inset - 1; 
    7575                        } 
     76                        if (_minCursor >= _maxCursor) { 
     77                            _minCursor = _maxCursor - 1; 
     78                        } 
    7679                        _draggingMinCursor = false; 
    7780                        changed = true; 
     
    8285                            _maxCursor = _width - _inset; 
    8386                        } 
     87                        if (_maxCursor <= _minCursor) { 
     88                            _maxCursor = _minCursor + 1; 
     89                        } 
    8490                        _draggingMaxCursor = false; 
    8591                        changed = true; 
     
    8995                    repaint(); 
    9096                    if (null != _listener) { 
    91                         // convert to 0..(_width - 1) 
    92                         int min = _minCursor - _inset + 1; 
     97                        // convert to 0..width - 1 range 
     98                        int min = _minCursor - _inset + 1; //TODO _min/_maxCursor c/b changed by now 
    9399                        int max = _maxCursor - _inset - 1; 
    94100                        _listener.setMinMax(min, max); 
     
    108114             
    109115            public void mouseDragged(MouseEvent e) { 
     116                boolean changed = false; 
    110117                synchronized (_synchObject) { 
    111118                    if (_draggingMinCursor) { 
     119                        // don't drag past max cursor 
    112120                        if (_maxCursor > e.getX()) { 
    113121                            _minCursor = e.getX(); 
    114122                        } 
    115                         repaint(); 
     123                        // don't drag out of this panel 
     124                        if (_minCursor < 0) { 
     125                            _minCursor = 0; 
     126                        } 
     127                        changed = true; 
    116128                    } 
    117129                    else if (_draggingMaxCursor) { 
     130                        // don't drag past min cursor 
    118131                        if (_minCursor < e.getX()) { 
    119132                            _maxCursor = e.getX(); 
    120133                        } 
    121                         repaint(); 
     134                        // don't drag out of this panel 
     135                        if (_maxCursor >= 2 * _inset + _width) { 
     136                            _maxCursor = 2 * _inset + _width - 1; 
     137                        } 
     138                        changed = true; 
    122139                    }     
    123140                } 
     141                if (changed) { 
     142                    repaint(); 
     143                     
     144                    boolean expanding = false; 
     145                    if (_minCursor < _inset) { 
     146                        expanding = true; 
     147                    } 
     148                    else if (_maxCursor > _width - _inset) { 
     149                        expanding = true; 
     150                    } 
     151                    if (expanding) { 
     152                        if (null != _listener) { 
     153                            // convert to 0..width - 1 range 
     154                            int min = _minCursor - _inset + 1; 
     155                            int max = _maxCursor - _inset - 1; 
     156                            _listener.setMinMax(min, max); 
     157                        } 
     158                    } 
     159                }   
    124160            } 
    125161        }); 
  • trunk/projects/slim-plugin/src/main/java/imagej/slim/histogram/HistogramTool.java

    r7836 r7837  
    1818import java.awt.event.ItemEvent; 
    1919import java.awt.event.ItemListener; 
     20import java.util.Timer; 
     21import java.util.TimerTask; 
    2022 
    2123import javax.swing.BoxLayout; 
     
    3032 
    3133/** 
     34 * This is the main class for this histogram tool.  It handles layout, wiring, 
     35 * and logic. 
    3236 * 
    33  * @author aivar 
     37 * @author Aivar Grislis 
    3438 */ 
    35 public class HistogramTool implements IHistogramPanelListener { 
    36     private final static int WIDTH = 320; 
    37     private final static int HISTOGRAM_HEIGHT = 160; 
     39public class HistogramTool { 
     40    private final static int WIDTH = 264; 
     41    private final static int HISTOGRAM_HEIGHT = 140; 
    3842    private final static int COLORBAR_HEIGHT = 20; 
    3943    private final static int EXTRA = 4; 
     44    private final static int TASK_PERIOD = 100; 
    4045    //TODO kludged in, user s/b able to select LUTS, somewhere else: 
    4146    private final static String HARDCODED_LUT =  "/Applications/ImageJ/luts/aivar6.lut"; // aivar6 is my five color blue/cyan/green/yellow/red spectral palette 
     
    4550    private HistogramPanel _histogram; 
    4651    private ColorBarPanel _colorBar; 
    47      
     52  
     53    /** 
     54     * Constructor, handles layout and wiring. 
     55     */ 
    4856    private HistogramTool() { 
    4957        // create the histogram and color bar display panels 
    5058        _histogram = new HistogramPanel(WIDTH, HISTOGRAM_HEIGHT, EXTRA); 
    51         _histogram.setListener(this); 
     59        _histogram.setListener(new HistogramPanelListener()); 
    5260        _colorBar = new ColorBarPanel(WIDTH, COLORBAR_HEIGHT, EXTRA); 
    5361        _colorBar.setLUT(getLUT()); 
     
    6775        _histogram.setCursors(3, 44); 
    6876    } 
    69      
     77 
     78    /** 
     79     * Class is a singleton for convenience. 
     80     *  
     81     * @return  
     82     */ 
    7083    public static synchronized HistogramTool getInstance() { 
    7184        if (null == INSTANCE) { 
     
    7487        return INSTANCE; 
    7588    } 
    76      
     89 
     90    /** 
     91     * Gets an IndexColorModel by loading a hardcoded LUT file. 
     92     * Temporary expedient, belongs elsewhere. 
     93     *  
     94     * @return  
     95     */ 
    7796    public static IndexColorModel getIndexColorModel() { 
    7897        IndexColorModel colorModel = null; 
     
    85104        return colorModel; 
    86105    } 
    87      
     106 
     107    /** 
     108     * Gets a LUT. 
     109     *  
     110     * @return  
     111     */ 
    88112    public static LUT getLUT() { 
    89113        IndexColorModel colorModel = getIndexColorModel(); 
     
    91115        return lut; 
    92116    } 
    93      
     117 
     118    /** 
     119     * @param histogramData  
     120     */ 
     121    //TODO this method is called from the focus listener only??? 
     122    //  what about changes during the fit? 
    94123    public void setHistogramData(HistogramData histogramData) { 
    95124        _histogramData = histogramData; 
     
    101130    } 
    102131 
    103     public void setMinMax(int min, int max) { 
    104         System.out.println("setMinMax(" + min + "," + max + ")"); 
     132    /** 
     133     * Inner class to listen for the user moving the cursor on the histogram. 
     134     */ 
     135    private class HistogramPanelListener implements IHistogramPanelListener { 
     136        private Timer _timer = null; 
     137         
     138        private HistogramPanelListener() { 
     139        } 
     140  
     141        /** 
     142         * Listens to the HistogramPanel, gets minimum and maximum cursor bar 
     143         * positions in pixels.  Called when the cursor bar is moved and the 
     144         * mouse button released.  Also called during a drag operation when the 
     145         * cursor bar is out of bounds. 
     146         *  
     147         * @param min 
     148         * @param max  
     149         */ 
     150        public void setMinMax(int min, int max) { 
     151            System.out.println("setMinMax(" + min + "," + max + ")"); 
     152            if (min < 0 || max > 255) { 
     153                // cursor is out of bounds, set up a periodic task to stretch 
     154                // the bounds 
     155                if (null == _timer) { 
     156                    System.out.println("Schedule"); 
     157                    _timer = new Timer(); 
     158                    _timer.schedule(new PeriodicTask(), 0, TASK_PERIOD); 
     159                } 
     160            } 
     161            else { 
     162                if (null != _timer) { 
     163                    _timer.cancel(); 
     164                    _timer = null; 
     165                } 
     166            } 
     167        } 
     168         
     169        public void expand() { } 
     170         
     171        private class PeriodicTask extends TimerTask { 
     172            public void run() { 
     173                System.out.println("timer task"); 
     174            }    
     175        } 
    105176    } 
    106177} 
  • trunk/projects/slim-plugin/src/main/java/imagej/slim/histogram/IHistogramPanelListener.java

    r7836 r7837  
    77 
    88/** 
    9  * 
    10  * @author aivar 
     9 * Interface for a listener to catch the user moving the cursor on the  
     10 * histogram panel. 
     11 *  
     12 * @author Aivar Grislis 
    1113 */ 
    1214public interface IHistogramPanelListener { 
     15    public enum Direction { LEFT, RIGHT }; 
     16     
     17    /** 
     18     * Sets a new minimum and maximum cursor on the histogram panel. 
     19     * Note that these values are in pixels. 
     20     *  
     21     * @param min 
     22     * @param max  
     23     */ 
    1324    public void setMinMax(int min, int max); 
     25     
     26    public void expand(); //TODO direction 
    1427} 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/MyStackWindow.java

    r7821 r7837  
    7272                } 
    7373            ); 
    74  
    7574        } 
    7675    } 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/ui/UserInterfacePanel.java

    r7804 r7837  
    106106    private static final String EXCITATION_CREATE = "Use current X Y"; 
    107107     
    108     private static final String DO_FIT = "Do Fit"; 
    109     private static final String CANCEL_FIT = "Cancel Fit"; 
     108    private static final String MAKE_IMAGES = "Make Images"; 
     109    private static final String CANCEL_IMAGES = "Cancel Images"; 
    110110 
    111111    private static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(10, 10, 10, 10); 
     
    252252        buttonPanel.add(m_quitButton); 
    253253        buttonPanel.add(Box.createRigidArea(new Dimension(10, 0))); 
    254         m_fitButton = new JButton("Do Fit"); 
     254        m_fitButton = new JButton(MAKE_IMAGES); 
    255255        m_fitButton.addActionListener( 
    256256            new ActionListener() { 
    257257                public void actionPerformed(ActionEvent e) { 
    258258                    String text = (String)e.getActionCommand(); 
    259                     if (text.equals("Do Fit")){ 
     259                    if (text.equals(MAKE_IMAGES)) { 
    260260                        enableAll(false); 
    261261                        setFitButtonState(false); 
     
    822822     
    823823    private void setFitButtonState(boolean on) { 
    824         m_fitButton.setText(on ? DO_FIT : CANCEL_FIT); 
     824        m_fitButton.setText(on ? MAKE_IMAGES : CANCEL_IMAGES); 
    825825    } 
    826826     
    827827    private boolean getFitButtonState() { 
    828         return m_fitButton.getText().equals(DO_FIT); 
     828        return m_fitButton.getText().equals(MAKE_IMAGES); 
    829829    } 
    830830 
Note: See TracChangeset for help on using the changeset viewer.