Changeset 2980


Ignore:
Timestamp:
07/13/07 18:01:02 (13 years ago)
Author:
curtis
Message:

Some work on the cache component; add "gui" command to cache tester.

Location:
trunk/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/cache/Cache.java

    r2975 r2980  
    77import java.io.*; 
    88import java.util.Arrays; 
     9import javax.swing.JFrame; 
    910import loci.formats.*; 
    1011 
     
    172173      if (cmd.equals("")) continue; 
    173174      else if (cmd.startsWith("e") || cmd.startsWith("q")) break; // exit/quit 
     175      else if (cmd.startsWith("g")) { // gui 
     176        JFrame frame = new JFrame("Cache controls"); 
     177        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     178        ReflectedUniverse ru = new ReflectedUniverse(); 
     179        try { 
     180          ru.exec("import loci.formats.gui.CacheComponent"); 
     181          ru.setVar("cache", cache); 
     182          ru.setVar("doSource", true); 
     183          ru.setVar("axes", new String[] {"Z", "C", "T"}); 
     184          ru.setVar("id", id); 
     185          ru.exec("widget = new CacheComponent(cache, doSource, axes, id)"); 
     186          ru.setVar("frame", frame); 
     187          ru.exec("frame.setContentPane(widget)"); 
     188          frame.pack(); 
     189          frame.setVisible(true); 
     190        } 
     191        catch (ReflectException exc) { LogTools.trace(exc); } 
     192      } 
    174193      else if (cmd.startsWith("h")) { // help 
    175194        LogTools.println("Available commands:"); 
     195        LogTools.println("  gui      -- pops up a GUI to configure the cache"); 
    176196        LogTools.println("  info     -- displays the cache state"); 
     197        LogTools.println("  position -- changes the current position"); 
    177198        LogTools.println("  strategy -- changes the cache strategy"); 
    178199        LogTools.println("  source   -- changes the cache source"); 
    179         LogTools.println("  position -- changes the current position"); 
    180200        LogTools.println("  range    -- changes the cache ranges"); 
    181201        LogTools.println("  priority -- changes the cache priorities"); 
    182202        LogTools.println("  read     -- gets a plane from the cache"); 
    183203        LogTools.println("  exit     -- quits the interpreter"); 
    184       } 
    185       else if (cmd.startsWith("re")) { // read 
    186         LogTools.print("Z: "); 
    187         int z = Integer.parseInt(r.readLine().trim()); 
    188         LogTools.print("C: "); 
    189         int c = Integer.parseInt(r.readLine().trim()); 
    190         LogTools.print("T: "); 
    191         int t = Integer.parseInt(r.readLine().trim()); 
    192         LogTools.println("Retrieving Z" + z + "-C" + c + "-T" + t); 
    193         Object o = cache.getObject(new int[] {z, c, t}); 
    194         LogTools.println(o); 
    195204      } 
    196205      else if (cmd.startsWith("i")) { // info 
     
    245254        printArray("lengths", strategy.getLengths()); 
    246255      } 
    247       else if (cmd.startsWith("st")) { // strategy 
    248         LogTools.println("0: crosshair"); 
    249         LogTools.println("1: rectangle"); 
    250         LogTools.print("> "); 
    251         int n = Integer.parseInt(r.readLine().trim()); 
    252         int[] l = getLengths(reader); 
    253         switch (n) { 
    254           case 0: 
    255             cache.setStrategy(new CrosshairStrategy(l)); 
    256             LogTools.println("Strategy set to crosshair"); 
    257             break; 
    258           case 1: 
    259             cache.setStrategy(new RectangleStrategy(l)); 
    260             LogTools.println("Strategy set to rectangle"); 
    261             break; 
    262           default: 
    263             LogTools.println("Unknown strategy: " + n); 
    264         } 
    265       } 
    266       else if (cmd.startsWith("so")) { // source 
    267         LogTools.println("0: BufferedImage"); 
    268         LogTools.println("1: byte array"); 
    269         LogTools.println("2: ImageProcessor"); 
    270         LogTools.print("> "); 
    271         int n = Integer.parseInt(r.readLine().trim()); 
    272         switch (n) { 
    273           case 0: 
    274             cache.setSource(new BufferedImageSource(reader)); 
    275             LogTools.println("Source set to BufferedImage"); 
    276             break; 
    277           case 1: 
    278             cache.setSource(new ByteArraySource(reader)); 
    279             LogTools.println("Source set to byte array"); 
    280             break; 
    281           case 2: 
    282             cache.setSource(new ImageProcessorSource(reader)); 
    283             LogTools.println("Source set to ImageProcessor"); 
    284             break; 
    285           default: 
    286             LogTools.println("Unknown source: " + n); 
    287         } 
    288       } 
    289256      else if (cmd.startsWith("po")) { // position 
    290257        LogTools.print("Z: "); 
     
    295262        int t = Integer.parseInt(r.readLine().trim()); 
    296263        cache.setCurrentPos(new int[] {z, c, t}); 
    297       } 
    298       else if (cmd.startsWith("ra")) { // range 
    299         LogTools.print("Z: "); 
    300         int z = Integer.parseInt(r.readLine().trim()); 
    301         LogTools.print("C: "); 
    302         int c = Integer.parseInt(r.readLine().trim()); 
    303         LogTools.print("T: "); 
    304         int t = Integer.parseInt(r.readLine().trim()); 
    305         cache.getStrategy().setRange(z, 0); 
    306         cache.getStrategy().setRange(c, 1); 
    307         cache.getStrategy().setRange(t, 2); 
    308264      } 
    309265      else if (cmd.startsWith("pr")) { // priority 
     
    325281        strategy.setPriority(t, 2); 
    326282      } 
     283      else if (cmd.startsWith("ra")) { // range 
     284        LogTools.print("Z: "); 
     285        int z = Integer.parseInt(r.readLine().trim()); 
     286        LogTools.print("C: "); 
     287        int c = Integer.parseInt(r.readLine().trim()); 
     288        LogTools.print("T: "); 
     289        int t = Integer.parseInt(r.readLine().trim()); 
     290        cache.getStrategy().setRange(z, 0); 
     291        cache.getStrategy().setRange(c, 1); 
     292        cache.getStrategy().setRange(t, 2); 
     293      } 
     294      else if (cmd.startsWith("re")) { // read 
     295        LogTools.print("Z: "); 
     296        int z = Integer.parseInt(r.readLine().trim()); 
     297        LogTools.print("C: "); 
     298        int c = Integer.parseInt(r.readLine().trim()); 
     299        LogTools.print("T: "); 
     300        int t = Integer.parseInt(r.readLine().trim()); 
     301        LogTools.println("Retrieving Z" + z + "-C" + c + "-T" + t); 
     302        Object o = cache.getObject(new int[] {z, c, t}); 
     303        LogTools.println(o); 
     304      } 
     305      else if (cmd.startsWith("so")) { // source 
     306        LogTools.println("0: BufferedImage"); 
     307        LogTools.println("1: byte array"); 
     308        LogTools.println("2: ImageProcessor"); 
     309        LogTools.print("> "); 
     310        int n = Integer.parseInt(r.readLine().trim()); 
     311        switch (n) { 
     312          case 0: 
     313            cache.setSource(new BufferedImageSource(reader)); 
     314            LogTools.println("Source set to BufferedImage"); 
     315            break; 
     316          case 1: 
     317            cache.setSource(new ByteArraySource(reader)); 
     318            LogTools.println("Source set to byte array"); 
     319            break; 
     320          case 2: 
     321            cache.setSource(new ImageProcessorSource(reader)); 
     322            LogTools.println("Source set to ImageProcessor"); 
     323            break; 
     324          default: 
     325            LogTools.println("Unknown source: " + n); 
     326        } 
     327      } 
     328      else if (cmd.startsWith("st")) { // strategy 
     329        LogTools.println("0: crosshair"); 
     330        LogTools.println("1: rectangle"); 
     331        LogTools.print("> "); 
     332        int n = Integer.parseInt(r.readLine().trim()); 
     333        int[] l = getLengths(reader); 
     334        switch (n) { 
     335          case 0: 
     336            cache.setStrategy(new CrosshairStrategy(l)); 
     337            LogTools.println("Strategy set to crosshair"); 
     338            break; 
     339          case 1: 
     340            cache.setStrategy(new RectangleStrategy(l)); 
     341            LogTools.println("Strategy set to rectangle"); 
     342            break; 
     343          default: 
     344            LogTools.println("Unknown strategy: " + n); 
     345        } 
     346      } 
    327347      else LogTools.println("Unknown command: " + cmd); 
    328348    } 
  • trunk/loci/formats/gui/CacheComponent.java

    r2976 r2980  
    2929  private int[] lengths; 
    3030 
    31   /** Spinners for choosing number of slices to cache ahead. */ 
    32   private Vector forward; 
    33  
    34   /** Spinners for choosing number of slices to cache behind. */ 
    35   private Vector backward; 
     31  /** Spinners for choosing range of slices to cache. */ 
     32  private Vector range; 
    3633 
    3734  /** Buttons for choosing axis priority. */ 
     
    4138 
    4239  public CacheComponent(Cache cache, boolean doSource, String[] axisLabels, 
    43     String file, int[] lengths) 
     40    String file) 
    4441  { 
    4542    super(); 
    4643    this.cache = cache; 
    4744    this.file = file; 
    48     this.lengths = lengths; 
    49  
    50     BoxLayout thisLayout = new BoxLayout(this, BoxLayout.Y_AXIS); 
    51     setLayout(thisLayout); 
     45    this.lengths = cache.getStrategy().getLengths(); 
     46 
     47    // constants 
     48    final String[] strategies = new String[] {"Crosshair", "Rectangle"}; 
     49    final String[] priorities = {"max", "high", "normal", "low", "min"}; 
     50    final String[] order = {"centered", "forward", "backward"}; 
     51 
     52    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
    5253 
    5354    CellConstraints cc = new CellConstraints(); 
    5455 
    55     forward = new Vector(); 
    56     backward = new Vector(); 
     56    range = new Vector(); 
    5757 
    5858    JPanel top = new JPanel(); 
    59     FormLayout layout = new FormLayout("pref,pref:grow,pref,pref:grow,pref", 
    60       doSource ? "pref,pref:grow,pref,pref:grow,pref" : "pref,pref:grow,pref"); 
     59    FormLayout layout = new FormLayout("pref:grow,3dlu,pref:grow", 
     60      doSource ? "pref:grow,3dlu,pref:grow" : "pref:grow"); 
    6161    top.setLayout(layout); 
    6262 
     
    6565    if (doSource) { 
    6666      JLabel label = new JLabel("Objects to cache: "); 
    67       top.add(label, cc.xy(2, 2)); 
     67      top.add(label, cc.xy(1, 1)); 
    6868      String[] sources = 
    6969        new String[] {"byte arrays", "BufferedImages", "ImageProcessors"}; 
     
    7171      sourceChooser.setActionCommand("source"); 
    7272      sourceChooser.addActionListener(this); 
    73       top.add(sourceChooser, cc.xy(4, 2)); 
     73      top.add(sourceChooser, cc.xy(3, 1)); 
    7474    } 
    7575 
     
    7777 
    7878    JLabel label = new JLabel("Caching strategy: "); 
    79     top.add(label, cc.xy(2, doSource ? 4 : 2)); 
    80     String[] strategies = new String[] {"Crosshair - forward first", 
    81       "Crosshair - backward first", "Rectangle - forward first", 
    82       "Rectangle - backward first"}; 
     79    top.add(label, cc.xy(1, doSource ? 3 : 1)); 
    8380    JComboBox strategyChooser = new JComboBox(strategies); 
    8481    strategyChooser.setActionCommand("strategy"); 
    8582    strategyChooser.addActionListener(this); 
    86     top.add(strategyChooser, cc.xy(4, doSource ? 4 : 2)); 
     83    top.add(strategyChooser, cc.xy(3, doSource ? 3 : 1)); 
    8784 
    8885    add(top); 
     
    9188 
    9289    JPanel middle = new JPanel(); 
    93     String rowString = "pref,pref:grow,pref,"; 
    94     for (int i=0; i<axisLabels.length; i++) { 
    95       rowString += "pref:grow,pref,"; 
    96     } 
    97     layout = new FormLayout("pref,pref:grow,pref,pref:grow,pref,pref:grow,pref", 
    98       rowString); 
     90    StringBuffer rows = new StringBuffer(); 
     91    rows.append("pref:grow"); 
     92    for (int i=0; i<axisLabels.length; i++) rows.append(",3dlu,pref:grow"); 
     93    layout = new FormLayout( 
     94      "pref:grow,3dlu,pref:grow,3dlu,pref:grow,3dlu,pref:grow", 
     95      rows.toString()); 
    9996    middle.setLayout(layout); 
    10097 
    101     JLabel header = new JLabel("Axis"); 
    102     middle.add(header, cc.xy(2, 2)); 
    103     header = new JLabel("Forward"); 
    104     middle.add(header, cc.xy(4, 2)); 
    105     header = new JLabel("Backward"); 
    106     middle.add(header, cc.xy(6, 2)); 
     98    middle.add(new JLabel("Axis"), cc.xy(1, 1)); 
     99    middle.add(new JLabel("Range"), cc.xy(3, 1)); 
     100    middle.add(new JLabel("Priority"), cc.xy(5, 1)); 
     101    middle.add(new JLabel("Order"), cc.xy(7, 1)); 
    107102 
    108103    for (int i=0; i<axisLabels.length; i++) { 
    109104      JLabel l = new JLabel(axisLabels[i]); 
    110       middle.add(l, cc.xy(2, i*2 + 4)); 
    111       JSpinner f = new JSpinner(new SpinnerNumberModel(1, 0, lengths[i], 1)); 
    112       middle.add(f, cc.xy(4, i*2 + 4)); 
    113       JSpinner b = new JSpinner(new SpinnerNumberModel(1, 0, lengths[i], 1)); 
    114       middle.add(b, cc.xy(6, i*2 + 4)); 
    115       forward.add(f); 
    116       backward.add(b); 
     105      middle.add(l, cc.xy(1, i*2 + 3)); 
     106      JSpinner r = new JSpinner(new SpinnerNumberModel(1, 0, lengths[i], 1)); 
     107      middle.add(r, cc.xy(3, i*2 + 3)); 
     108      range.add(r); 
     109      JComboBox prio = new JComboBox(priorities); 
     110      middle.add(prio, cc.xy(5, i*2 + 3)); 
     111      JComboBox ord = new JComboBox(order); 
     112      middle.add(ord, cc.xy(7, i*2 + 3)); 
    117113    } 
    118114 
     
    121117    if (sourceChooser != null) updateSource(sourceChooser); 
    122118    updateStrategy(strategyChooser); 
    123  
    124     // add priority choices 
    125  
    126     JPanel bottom = new JPanel(); 
    127     String colString = "pref,pref:grow,pref,"; 
    128     for (int i=0; i<axisLabels.length; i++) { 
    129       colString += "pref:grow,pref,"; 
    130     } 
    131     layout = new FormLayout(colString, rowString); 
    132     bottom.setLayout(layout); 
    133  
    134     priority = new JRadioButton[axisLabels.length][axisLabels.length]; 
    135     String[] priorities = new String[] { 
    136       "High priority", "Medium priority", "Low priority" 
    137     }; 
    138     int skip = axisLabels.length / 3; 
    139  
    140     for (int i=0; i<axisLabels.length; i++) { 
    141       JLabel l = new JLabel(""); 
    142       if (i % skip == 0) { 
    143         l = new JLabel(priorities[i / skip]); 
    144       } 
    145       bottom.add(l, cc.xy(2, (i + 1) * 2)); 
    146  
    147       ButtonGroup g = new ButtonGroup(); 
    148       for (int j=0; j<axisLabels.length; j++) { 
    149         JRadioButton button = new JRadioButton(axisLabels[j], i == j); 
    150         priority[i][j] = button; 
    151         button.addChangeListener(this); 
    152         g.add(button); 
    153         bottom.add(button, cc.xy((j + 2) * 2, (i + 1) * 2)); 
    154       } 
    155     } 
    156  
    157     add(bottom); 
    158119 
    159120    JButton reset = new JButton("Reset"); 
     
    224185    } 
    225186 
    226     for (int i=0; i<forward.size(); i++) { 
    227       JSpinner f = (JSpinner) forward.get(i); 
    228       JSpinner b = (JSpinner) backward.get(i); 
    229 //      strategy.setForward(((Integer) f.getValue()).intValue(), i); 
    230 //      strategy.setBackward(((Integer) b.getValue()).intValue(), i); 
     187    for (int i=0; i<range.size(); i++) { 
     188      JSpinner r = (JSpinner) range.get(i); 
     189      strategy.setRange(((Integer) r.getValue()).intValue(), i); 
    231190    } 
    232191  } 
     
    234193  // -- Helper methods -- 
    235194 
    236   private int[] getForward() { 
    237     int[] n = new int[forward.size()]; 
     195  private int[] getRange() { 
     196    int[] n = new int[range.size()]; 
    238197    for (int i=0; i<n.length; i++) { 
    239       n[i] = ((Integer) ((JSpinner) forward.get(i)).getValue()).intValue(); 
    240     } 
    241     return n; 
    242   } 
    243  
    244   private int[] getBackward() { 
    245     int[] n = new int[backward.size()]; 
    246     for (int i=0; i<n.length; i++) { 
    247       n[i] = ((Integer) ((JSpinner) backward.get(i)).getValue()).intValue(); 
     198      n[i] = ((Integer) ((JSpinner) range.get(i)).getValue()).intValue(); 
    248199    } 
    249200    return n; 
     
    285236      } 
    286237//      strategy.setForwardFirst(forwardFirst); 
    287       int[] fwd = getForward(); 
    288 //      for (int i=0; i<fwd.length; i++) strategy.setForward(fwd[i], i); 
    289       int[] bwd = getBackward(); 
    290 //      for (int i=0; i<bwd.length; i++) strategy.setBackward(bwd[i], i); 
     238      int[] rng = getRange(); 
     239      for (int i=0; i<rng.length; i++) strategy.setRange(rng[i], i); 
    291240      cache.setStrategy(strategy); 
    292241    } 
Note: See TracChangeset for help on using the changeset viewer.