home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / motif / X11Selection.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  4.9 KB  |  246 lines

  1. package sun.awt.motif;
  2.  
  3. import java.awt.datatransfer.DataFlavor;
  4. import java.awt.datatransfer.Transferable;
  5. import java.awt.datatransfer.UnsupportedFlavorException;
  6. import java.io.IOException;
  7. import java.io.StringBufferInputStream;
  8. import java.util.Vector;
  9. import sun.awt.Modality;
  10.  
  11. public class X11Selection implements Transferable {
  12.    static Vector selections;
  13.    static Vector targetMap;
  14.    int atom;
  15.    X11SelectionHolder holder;
  16.    Transferable contents;
  17.    String dataString;
  18.    int[] targetArray;
  19.    Object data;
  20.    Modality m_modality;
  21.  
  22.    static native void init();
  23.  
  24.    static native int getAtomForTarget(String var0);
  25.  
  26.    static native void registerTargetForFlavor(DataFlavor var0, String var1);
  27.  
  28.    static DataFlavor[] convertTargetsToFlavors(int[] var0) {
  29.       Vector var1 = new Vector();
  30.  
  31.       for(int var2 = 0; var2 < var0.length; ++var2) {
  32.          byte var3 = 0;
  33.          if (var3 < targetMap.size()) {
  34.             Target var4 = (Target)targetMap.elementAt(var3);
  35.             if (var4.atom == var0[var2]) {
  36.                for(int var5 = 0; var5 < var4.flavors.size(); ++var5) {
  37.                   DataFlavor var6 = (DataFlavor)var4.flavors.elementAt(var5);
  38.                   boolean var7 = false;
  39.  
  40.                   for(int var8 = 0; var8 < var1.size(); ++var8) {
  41.                      if (var6.equals((DataFlavor)var1.elementAt(var8))) {
  42.                         var7 = true;
  43.                         break;
  44.                      }
  45.                   }
  46.  
  47.                   if (!var7) {
  48.                      var1.addElement(var6);
  49.                   }
  50.                }
  51.             }
  52.          }
  53.       }
  54.  
  55.       DataFlavor[] var9 = new DataFlavor[var1.size()];
  56.  
  57.       for(int var10 = 0; var10 < var1.size(); ++var10) {
  58.          var9[var10] = (DataFlavor)var1.elementAt(var10);
  59.       }
  60.  
  61.       return var9;
  62.    }
  63.  
  64.    static int[] convertFlavorToTargets(DataFlavor var0) {
  65.       int[] var1 = new int[24];
  66.       int var2 = 0;
  67.  
  68.       for(int var3 = 0; var3 < targetMap.size(); ++var3) {
  69.          Target var4 = (Target)targetMap.elementAt(var3);
  70.  
  71.          for(int var5 = 0; var5 < var4.flavors.size(); ++var5) {
  72.             DataFlavor var6 = (DataFlavor)var4.flavors.elementAt(var5);
  73.             if (var6.equals(var0)) {
  74.                var1[var2++] = var4.atom;
  75.                break;
  76.             }
  77.          }
  78.       }
  79.  
  80.       int[] var7 = new int[var2];
  81.  
  82.       for(int var8 = 0; var8 < var2; ++var8) {
  83.          var7[var8] = var1[var8];
  84.       }
  85.  
  86.       return var7;
  87.    }
  88.  
  89.    public X11Selection(String var1) {
  90.       this.create(var1);
  91.       selections.addElement(this);
  92.    }
  93.  
  94.    native void create(String var1);
  95.  
  96.    native void pDispose();
  97.  
  98.    native boolean pGetSelectionOwnership();
  99.  
  100.    boolean getSelectionOwnership(Transferable var1, X11SelectionHolder var2) {
  101.       this.holder = var2;
  102.       this.contents = var1;
  103.       if (this.pGetSelectionOwnership()) {
  104.          return true;
  105.       } else {
  106.          this.holder = null;
  107.          this.contents = null;
  108.          return false;
  109.       }
  110.    }
  111.  
  112.    void lostSelectionOwnership() {
  113.       this.holder.lostSelectionOwnership();
  114.       this.holder = null;
  115.       this.contents = null;
  116.    }
  117.  
  118.    public String getStringDataFromOwner(DataFlavor var1) {
  119.       if (this.contents != null) {
  120.          Class var2 = var1.getRepresentationClass();
  121.  
  122.          try {
  123.             if (var2 == Class.forName("java.lang.String")) {
  124.                this.dataString = (String)this.contents.getTransferData(var1);
  125.                return this.dataString;
  126.             }
  127.          } catch (ClassNotFoundException var3) {
  128.          } catch (Exception var4) {
  129.          }
  130.       }
  131.  
  132.       return null;
  133.    }
  134.  
  135.    void enterModal() {
  136.       try {
  137.          this.m_modality = new Modality();
  138.          this.m_modality.enter();
  139.       } catch (InterruptedException var2) {
  140.       } catch (ThreadDeath var3) {
  141.          throw (ThreadDeath)((Throwable)var3).fillInStackTrace();
  142.       }
  143.    }
  144.  
  145.    void exitModal() {
  146.       if (this.m_modality != null) {
  147.          this.m_modality.exit();
  148.       }
  149.  
  150.    }
  151.  
  152.    native void pGetTransferTargets();
  153.  
  154.    native void pGetTransferData(int[] var1);
  155.  
  156.    public DataFlavor[] getTransferDataFlavors() {
  157.       this.targetArray = null;
  158.       SelectionThread var1 = new SelectionThread(this, (int[])null);
  159.       synchronized(var1){}
  160.  
  161.       try {
  162.          try {
  163.             ((Thread)var1).start();
  164.             var1.wait();
  165.          } catch (InterruptedException var5) {
  166.          }
  167.       } catch (Throwable var6) {
  168.          throw var6;
  169.       }
  170.  
  171.       return this.targetArray != null && this.targetArray.length != 0 ? convertTargetsToFlavors(this.targetArray) : null;
  172.    }
  173.  
  174.    public boolean isDataFlavorSupported(DataFlavor var1) {
  175.       DataFlavor[] var2 = this.getTransferDataFlavors();
  176.  
  177.       for(int var3 = 0; var3 < var2.length; ++var3) {
  178.          if (var2[var3].equals(var1)) {
  179.             return true;
  180.          }
  181.       }
  182.  
  183.       return false;
  184.    }
  185.  
  186.    public Object getTransferData(DataFlavor var1) throws UnsupportedFlavorException, IOException {
  187.       this.data = null;
  188.       int[] var2 = convertFlavorToTargets(var1);
  189.       if (var2.length == 0) {
  190.          throw new UnsupportedFlavorException(var1);
  191.       } else {
  192.          SelectionThread var3 = new SelectionThread(this, var2);
  193.          synchronized(var3){}
  194.  
  195.          try {
  196.             try {
  197.                ((Thread)var3).start();
  198.                var3.wait();
  199.             } catch (InterruptedException var9) {
  200.             }
  201.          } catch (Throwable var10) {
  202.             throw var10;
  203.          }
  204.  
  205.          if (this.data == null) {
  206.             throw new IOException("could not get transfer data");
  207.          } else if (var1.equals(DataFlavor.plainTextFlavor)) {
  208.             return new StringBufferInputStream((String)this.data);
  209.          } else {
  210.             Class var4 = var1.getRepresentationClass();
  211.  
  212.             try {
  213.                if (var4 == Class.forName("java.io.InputStream")) {
  214.                   throw new IOException("can't deal with InputStream yet");
  215.                } else {
  216.                   return this.data;
  217.                }
  218.             } catch (ClassNotFoundException var8) {
  219.                throw new IOException("couldn't get representation class");
  220.             }
  221.          }
  222.       }
  223.    }
  224.  
  225.    public void dispose() {
  226.       selections.removeElement(this);
  227.       this.pDispose();
  228.    }
  229.  
  230.    static {
  231.       init();
  232.       selections = new Vector();
  233.       registerTargetForFlavor(DataFlavor.stringFlavor, "STRING");
  234.       registerTargetForFlavor(DataFlavor.plainTextFlavor, "STRING");
  235.       targetMap = new Vector();
  236.       Target var0 = new Target("STRING");
  237.       var0.addFlavorMap(DataFlavor.stringFlavor);
  238.       var0.addFlavorMap(DataFlavor.plainTextFlavor);
  239.       targetMap.addElement(var0);
  240.       var0 = new Target("COMPOUND_TEXT");
  241.       var0.addFlavorMap(DataFlavor.stringFlavor);
  242.       var0.addFlavorMap(DataFlavor.plainTextFlavor);
  243.       targetMap.addElement(var0);
  244.    }
  245. }
  246.