Changeset 6469


Ignore:
Timestamp:
06/03/10 16:58:36 (10 years ago)
Author:
curtis
Message:

Force non-overlapping ZCT order when swapping dimensions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/loci-plugins/src/loci/plugins/in/SwapDialog.java

    r6273 r6469  
    2626package loci.plugins.in; 
    2727 
    28 import ij.IJ; 
    2928import ij.gui.GenericDialog; 
     29 
     30import java.awt.Choice; 
     31import java.awt.event.ItemEvent; 
     32import java.awt.event.ItemListener; 
     33import java.util.List; 
    3034 
    3135import loci.plugins.util.ImageProcessorReader; 
     
    3943 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/loci-plugins/src/loci/plugins/in/SwapDialog.java">SVN</a></dd></dl> 
    4044 */ 
    41 public class SwapDialog extends ImporterDialog { 
     45public class SwapDialog extends ImporterDialog implements ItemListener { 
     46 
     47  // -- Fields -- 
     48 
     49  private Choice zChoice, cChoice, tChoice; 
    4250 
    4351  // -- Constructor -- 
     
    4957 
    5058  // -- ImporterDialog methods -- 
    51    
     59 
    5260  @Override 
    5361  protected boolean needPrompt() { 
    5462    return !process.isWindowless() && options.isSwapDimensions(); 
    5563  } 
    56    
     64 
    5765  @Override 
    5866  protected GenericDialog constructDialog() { 
     
    7684      } 
    7785    } 
     86 
     87    List<Choice> choices = WindowTools.getChoices(gd); 
     88    zChoice = choices.get(0); 
     89    cChoice = choices.get(1); 
     90    tChoice = choices.get(2); 
     91    zChoice.addItemListener(this); 
     92    cChoice.addItemListener(this); 
     93    tChoice.addItemListener(this); 
     94 
    7895    WindowTools.addScrollBars(gd); 
    7996 
    8097    return gd; 
    8198  } 
    82    
     99 
    83100  @Override 
    84101  protected boolean harvestResults(GenericDialog gd) { 
     
    94111 
    95112      if (z.equals(t) || z.equals(c) || c.equals(t)) { 
    96         IJ.error("Invalid swapping options - each axis can be used only once."); 
    97         throw new IllegalStateException(); // CTR FIXME 
     113        // should never occur... ;-) 
     114        throw new IllegalStateException( 
     115          "Invalid swapping options - each axis can be used only once."); 
    98116      } 
    99117 
     
    112130  } 
    113131 
     132  // -- ItemListener methods -- 
     133 
     134  public void itemStateChanged(ItemEvent e) { 
     135    final Object src = e.getSource(); 
     136    final int zIndex = zChoice.getSelectedIndex(); 
     137    final int cIndex = cChoice.getSelectedIndex(); 
     138    final int tIndex = tChoice.getSelectedIndex(); 
     139    if (src == zChoice) { 
     140      if (zIndex == cIndex) cChoice.select(firstAvailable(zIndex, tIndex)); 
     141      else if (zIndex == tIndex) tChoice.select(firstAvailable(zIndex, cIndex)); 
     142    } 
     143    else if (src == cChoice) { 
     144      if (cIndex == zIndex) zChoice.select(firstAvailable(cIndex, tIndex)); 
     145      else if (cIndex == tIndex) tChoice.select(firstAvailable(zIndex, cIndex)); 
     146    } 
     147    else if (src == tChoice) { 
     148      if (tIndex == zIndex) zChoice.select(firstAvailable(cIndex, tIndex)); 
     149      else if (tIndex == cIndex) cChoice.select(firstAvailable(zIndex, tIndex)); 
     150    } 
     151  } 
     152 
     153  // -- Helper methods -- 
     154 
     155  private int firstAvailable(int... index) { 
     156    final int minValue = 0, maxValue = 2; 
     157    for (int v=minValue; v<=maxValue; v++) { 
     158      boolean taken = false; 
     159      for (int i : index) { 
     160        if (v == i) { 
     161          taken = true; 
     162          break; 
     163        } 
     164      } 
     165      if (!taken) return v; 
     166    } 
     167    return -1; 
     168  } 
     169 
    114170} 
Note: See TracChangeset for help on using the changeset viewer.