home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / plaf / basic / BasicTextUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  13.0 KB  |  600 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Font;
  8. import java.awt.Graphics;
  9. import java.awt.Insets;
  10. import java.awt.LayoutManager;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.Shape;
  14. import java.beans.PropertyChangeEvent;
  15. import javax.swing.Action;
  16. import javax.swing.ActionMap;
  17. import javax.swing.InputMap;
  18. import javax.swing.JComponent;
  19. import javax.swing.KeyStroke;
  20. import javax.swing.SwingUtilities;
  21. import javax.swing.UIManager;
  22. import javax.swing.border.Border;
  23. import javax.swing.plaf.ActionMapUIResource;
  24. import javax.swing.plaf.ComponentInputMapUIResource;
  25. import javax.swing.plaf.InputMapUIResource;
  26. import javax.swing.plaf.TextUI;
  27. import javax.swing.plaf.UIResource;
  28. import javax.swing.text.AbstractDocument;
  29. import javax.swing.text.BadLocationException;
  30. import javax.swing.text.Caret;
  31. import javax.swing.text.DefaultEditorKit;
  32. import javax.swing.text.Document;
  33. import javax.swing.text.EditorKit;
  34. import javax.swing.text.Element;
  35. import javax.swing.text.Highlighter;
  36. import javax.swing.text.JTextComponent;
  37. import javax.swing.text.Keymap;
  38. import javax.swing.text.Position;
  39. import javax.swing.text.View;
  40. import javax.swing.text.ViewFactory;
  41. import javax.swing.text.Position.Bias;
  42.  
  43. public abstract class BasicTextUI extends TextUI implements ViewFactory {
  44.    private static final EditorKit defaultKit = new DefaultEditorKit();
  45.    transient JTextComponent editor;
  46.    transient boolean painted = false;
  47.    transient RootView rootView = new RootView(this);
  48.    transient UpdateHandler updateHandler = new UpdateHandler(this);
  49.    private static final Position.Bias[] discardBias = new Position.Bias[1];
  50.  
  51.    protected Caret createCaret() {
  52.       return new BasicCaret();
  53.    }
  54.  
  55.    protected Highlighter createHighlighter() {
  56.       return new BasicHighlighter();
  57.    }
  58.  
  59.    protected String getKeymapName() {
  60.       String var1 = this.getClass().getName();
  61.       int var2 = var1.lastIndexOf(46);
  62.       if (var2 >= 0) {
  63.          var1 = var1.substring(var2 + 1, var1.length());
  64.       }
  65.  
  66.       return var1;
  67.    }
  68.  
  69.    protected Keymap createKeymap() {
  70.       String var1 = this.getKeymapName();
  71.       Keymap var2 = JTextComponent.getKeymap(var1);
  72.       if (var2 == null) {
  73.          Keymap var3 = JTextComponent.getKeymap("default");
  74.          var2 = JTextComponent.addKeymap(var1, var3);
  75.          String var4 = this.getPropertyPrefix();
  76.          Object var5 = UIManager.get(var4 + ".keyBindings");
  77.          if (var5 != null && var5 instanceof JTextComponent.KeyBinding[]) {
  78.             JTextComponent.KeyBinding[] var6 = (JTextComponent.KeyBinding[])var5;
  79.             JTextComponent.loadKeymap(var2, var6, this.getComponent().getActions());
  80.          }
  81.       }
  82.  
  83.       return var2;
  84.    }
  85.  
  86.    protected void propertyChange(PropertyChangeEvent var1) {
  87.    }
  88.  
  89.    protected abstract String getPropertyPrefix();
  90.  
  91.    protected void installDefaults() {
  92.       String var1 = this.getPropertyPrefix();
  93.       Font var2 = this.editor.getFont();
  94.       if (var2 == null || var2 instanceof UIResource) {
  95.          this.editor.setFont(UIManager.getFont(var1 + ".font"));
  96.       }
  97.  
  98.       Color var3 = this.editor.getBackground();
  99.       if (var3 == null || var3 instanceof UIResource) {
  100.          this.editor.setBackground(UIManager.getColor(var1 + ".background"));
  101.       }
  102.  
  103.       Color var4 = this.editor.getForeground();
  104.       if (var4 == null || var4 instanceof UIResource) {
  105.          this.editor.setForeground(UIManager.getColor(var1 + ".foreground"));
  106.       }
  107.  
  108.       Color var5 = this.editor.getCaretColor();
  109.       if (var5 == null || var5 instanceof UIResource) {
  110.          this.editor.setCaretColor(UIManager.getColor(var1 + ".caretForeground"));
  111.       }
  112.  
  113.       Color var6 = this.editor.getSelectionColor();
  114.       if (var6 == null || var6 instanceof UIResource) {
  115.          this.editor.setSelectionColor(UIManager.getColor(var1 + ".selectionBackground"));
  116.       }
  117.  
  118.       Color var7 = this.editor.getSelectedTextColor();
  119.       if (var7 == null || var7 instanceof UIResource) {
  120.          this.editor.setSelectedTextColor(UIManager.getColor(var1 + ".selectionForeground"));
  121.       }
  122.  
  123.       Color var8 = this.editor.getDisabledTextColor();
  124.       if (var8 == null || var8 instanceof UIResource) {
  125.          this.editor.setDisabledTextColor(UIManager.getColor(var1 + ".inactiveForeground"));
  126.       }
  127.  
  128.       Border var9 = this.editor.getBorder();
  129.       if (var9 == null || var9 instanceof UIResource) {
  130.          this.editor.setBorder(UIManager.getBorder(var1 + ".border"));
  131.       }
  132.  
  133.       Insets var10 = this.editor.getMargin();
  134.       if (var10 == null || var10 instanceof UIResource) {
  135.          this.editor.setMargin(UIManager.getInsets(var1 + ".margin"));
  136.       }
  137.  
  138.       Caret var11 = this.editor.getCaret();
  139.       if (var11 == null || var11 instanceof UIResource) {
  140.          var11 = this.createCaret();
  141.          this.editor.setCaret(var11);
  142.          Object var12 = UIManager.get(var1 + ".caretBlinkRate");
  143.          if (var12 != null && var12 instanceof Integer) {
  144.             Integer var13 = (Integer)var12;
  145.             var11.setBlinkRate(var13);
  146.          }
  147.       }
  148.  
  149.       Highlighter var15 = this.editor.getHighlighter();
  150.       if (var15 == null || var15 instanceof UIResource) {
  151.          this.editor.setHighlighter(this.createHighlighter());
  152.       }
  153.  
  154.    }
  155.  
  156.    protected void uninstallDefaults() {
  157.       if (this.editor.getCaretColor() instanceof UIResource) {
  158.          this.editor.setCaretColor((Color)null);
  159.       }
  160.  
  161.       if (this.editor.getSelectionColor() instanceof UIResource) {
  162.          this.editor.setSelectionColor((Color)null);
  163.       }
  164.  
  165.       if (this.editor.getDisabledTextColor() instanceof UIResource) {
  166.          this.editor.setDisabledTextColor((Color)null);
  167.       }
  168.  
  169.       if (this.editor.getSelectedTextColor() instanceof UIResource) {
  170.          this.editor.setSelectedTextColor((Color)null);
  171.       }
  172.  
  173.       if (this.editor.getBorder() instanceof UIResource) {
  174.          this.editor.setBorder((Border)null);
  175.       }
  176.  
  177.       if (this.editor.getMargin() instanceof UIResource) {
  178.          this.editor.setMargin((Insets)null);
  179.       }
  180.  
  181.       if (this.editor.getCaret() instanceof UIResource) {
  182.          this.editor.setCaret((Caret)null);
  183.       }
  184.  
  185.       if (this.editor.getHighlighter() instanceof UIResource) {
  186.          this.editor.setHighlighter((Highlighter)null);
  187.       }
  188.  
  189.    }
  190.  
  191.    protected void installListeners() {
  192.    }
  193.  
  194.    protected void uninstallListeners() {
  195.    }
  196.  
  197.    protected void installKeyboardActions() {
  198.       this.editor.setKeymap(this.createKeymap());
  199.       InputMap var1 = this.getInputMap();
  200.       if (var1 != null) {
  201.          SwingUtilities.replaceUIInputMap(this.editor, 0, var1);
  202.       }
  203.  
  204.       ActionMap var2 = this.getActionMap();
  205.       if (var2 != null) {
  206.          SwingUtilities.replaceUIActionMap(this.editor, var2);
  207.       }
  208.  
  209.       this.updateFocusAcceleratorBinding(false);
  210.    }
  211.  
  212.    InputMap getInputMap() {
  213.       InputMapUIResource var1 = new InputMapUIResource();
  214.       InputMap var2 = (InputMap)UIManager.get(this.getPropertyPrefix() + ".focusInputMap");
  215.       if (var2 != null) {
  216.          ((InputMap)var1).setParent(var2);
  217.       }
  218.  
  219.       return var1;
  220.    }
  221.  
  222.    void updateFocusAcceleratorBinding(boolean var1) {
  223.       char var2 = this.editor.getFocusAccelerator();
  224.       if (var1 || var2 != 0) {
  225.          Object var3 = SwingUtilities.getUIInputMap(this.editor, 2);
  226.          if (var3 == null && var2 != 0) {
  227.             var3 = new ComponentInputMapUIResource(this.editor);
  228.             SwingUtilities.replaceUIInputMap(this.editor, 2, (InputMap)var3);
  229.             ActionMap var4 = this.getActionMap();
  230.             SwingUtilities.replaceUIActionMap(this.editor, var4);
  231.          }
  232.  
  233.          if (var3 != null) {
  234.             ((InputMap)var3).clear();
  235.             if (var2 != 0) {
  236.                ((InputMap)var3).put(KeyStroke.getKeyStroke(var2, 8), "requestFocus");
  237.             }
  238.          }
  239.       }
  240.  
  241.    }
  242.  
  243.    ActionMap getActionMap() {
  244.       String var1 = this.getPropertyPrefix() + ".actionMap";
  245.       ActionMap var2 = (ActionMap)UIManager.get(var1);
  246.       if (var2 == null) {
  247.          var2 = this.createActionMap();
  248.          if (var2 != null) {
  249.             UIManager.put(var1, var2);
  250.          }
  251.       }
  252.  
  253.       ActionMapUIResource var3 = new ActionMapUIResource();
  254.       ((ActionMap)var3).put("requestFocus", new FocusAction(this));
  255.       if (var2 != null) {
  256.          ((ActionMap)var3).setParent(var2);
  257.       }
  258.  
  259.       return var3;
  260.    }
  261.  
  262.    ActionMap createActionMap() {
  263.       ActionMapUIResource var1 = new ActionMapUIResource();
  264.  
  265.       for(Action var5 : this.editor.getActions()) {
  266.          ((ActionMap)var1).put(var5.getValue("Name"), var5);
  267.       }
  268.  
  269.       return var1;
  270.    }
  271.  
  272.    protected void uninstallKeyboardActions() {
  273.       this.editor.setKeymap((Keymap)null);
  274.       SwingUtilities.replaceUIInputMap(this.editor, 2, (InputMap)null);
  275.       SwingUtilities.replaceUIActionMap(this.editor, (ActionMap)null);
  276.    }
  277.  
  278.    protected void paintBackground(Graphics var1) {
  279.       var1.setColor(this.editor.getBackground());
  280.       var1.fillRect(0, 0, this.editor.getWidth(), this.editor.getHeight());
  281.    }
  282.  
  283.    protected final JTextComponent getComponent() {
  284.       return this.editor;
  285.    }
  286.  
  287.    protected void modelChanged() {
  288.       ViewFactory var1 = this.rootView.getViewFactory();
  289.       Document var2 = this.editor.getDocument();
  290.       Element var3 = var2.getDefaultRootElement();
  291.       this.setView(var1.create(var3));
  292.    }
  293.  
  294.    protected final void setView(View var1) {
  295.       this.editor.removeAll();
  296.       this.rootView.setView(var1);
  297.       this.painted = false;
  298.       this.editor.revalidate();
  299.       this.editor.repaint();
  300.    }
  301.  
  302.    protected void paintSafely(Graphics var1) {
  303.       this.painted = true;
  304.       Highlighter var2 = this.editor.getHighlighter();
  305.       Caret var3 = this.editor.getCaret();
  306.       if (this.editor.isOpaque()) {
  307.          this.paintBackground(var1);
  308.       }
  309.  
  310.       if (var2 != null) {
  311.          var2.paint(var1);
  312.       }
  313.  
  314.       Rectangle var4 = this.getVisibleEditorRect();
  315.       this.rootView.paint(var1, var4);
  316.       if (var3 != null) {
  317.          var3.paint(var1);
  318.       }
  319.  
  320.    }
  321.  
  322.    public void installUI(JComponent var1) {
  323.       if (var1 instanceof JTextComponent) {
  324.          this.editor = (JTextComponent)var1;
  325.          this.installDefaults();
  326.          this.editor.setOpaque(true);
  327.          this.editor.setAutoscrolls(true);
  328.          this.editor.addPropertyChangeListener(this.updateHandler);
  329.          Document var2 = this.editor.getDocument();
  330.          if (var2 == null) {
  331.             this.editor.setDocument(this.getEditorKit(this.editor).createDefaultDocument());
  332.          } else {
  333.             var2.addDocumentListener(this.updateHandler);
  334.             this.modelChanged();
  335.          }
  336.  
  337.          this.installListeners();
  338.          this.installKeyboardActions();
  339.          LayoutManager var3 = this.editor.getLayout();
  340.          if (var3 == null || var3 instanceof UIResource) {
  341.             this.editor.setLayout(this.updateHandler);
  342.          }
  343.  
  344.       } else {
  345.          throw new Error("TextUI needs JTextComponent");
  346.       }
  347.    }
  348.  
  349.    public void uninstallUI(JComponent var1) {
  350.       this.editor.removePropertyChangeListener(this.updateHandler);
  351.       this.editor.getDocument().removeDocumentListener(this.updateHandler);
  352.       this.painted = false;
  353.       this.uninstallDefaults();
  354.       this.rootView.setView((View)null);
  355.       ((Container)var1).removeAll();
  356.       LayoutManager var2 = ((Container)var1).getLayout();
  357.       if (var2 instanceof UIResource) {
  358.          ((Container)var1).setLayout((LayoutManager)null);
  359.       }
  360.  
  361.       this.uninstallKeyboardActions();
  362.       this.uninstallListeners();
  363.    }
  364.  
  365.    public void update(Graphics var1, JComponent var2) {
  366.       this.paint(var1, var2);
  367.    }
  368.  
  369.    public final void paint(Graphics var1, JComponent var2) {
  370.       if (this.rootView.getViewCount() > 0 && this.rootView.getView(0) != null) {
  371.          Document var3 = this.editor.getDocument();
  372.          if (var3 instanceof AbstractDocument) {
  373.             ((AbstractDocument)var3).readLock();
  374.          }
  375.  
  376.          try {
  377.             this.paintSafely(var1);
  378.          } finally {
  379.             if (var3 instanceof AbstractDocument) {
  380.                ((AbstractDocument)var3).readUnlock();
  381.             }
  382.  
  383.          }
  384.       }
  385.  
  386.    }
  387.  
  388.    public Dimension getPreferredSize(JComponent var1) {
  389.       Document var2 = this.editor.getDocument();
  390.       Insets var3 = var1.getInsets();
  391.       Dimension var4 = ((Component)var1).getSize();
  392.       if (var2 instanceof AbstractDocument) {
  393.          ((AbstractDocument)var2).readLock();
  394.       }
  395.  
  396.       try {
  397.          if (var4.width > var3.left + var3.right && var4.height > var3.top + var3.bottom) {
  398.             this.rootView.setSize((float)(var4.width - var3.left - var3.right), (float)(var4.height - var3.top - var3.bottom));
  399.          }
  400.  
  401.          var4.width = (int)Math.min((long)this.rootView.getPreferredSpan(0) + (long)var3.left + (long)var3.right, 2147483647L);
  402.          var4.height = (int)Math.min((long)this.rootView.getPreferredSpan(1) + (long)var3.top + (long)var3.bottom, 2147483647L);
  403.       } finally {
  404.          if (var2 instanceof AbstractDocument) {
  405.             ((AbstractDocument)var2).readUnlock();
  406.          }
  407.  
  408.       }
  409.  
  410.       return var4;
  411.    }
  412.  
  413.    public Dimension getMinimumSize(JComponent var1) {
  414.       Document var2 = this.editor.getDocument();
  415.       Insets var3 = var1.getInsets();
  416.       Dimension var4 = new Dimension();
  417.       if (var2 instanceof AbstractDocument) {
  418.          ((AbstractDocument)var2).readLock();
  419.       }
  420.  
  421.       try {
  422.          var4.width = (int)this.rootView.getMinimumSpan(0) + var3.left + var3.right;
  423.          var4.height = (int)this.rootView.getMinimumSpan(1) + var3.top + var3.bottom;
  424.       } finally {
  425.          if (var2 instanceof AbstractDocument) {
  426.             ((AbstractDocument)var2).readUnlock();
  427.          }
  428.  
  429.       }
  430.  
  431.       return var4;
  432.    }
  433.  
  434.    public Dimension getMaximumSize(JComponent var1) {
  435.       Document var2 = this.editor.getDocument();
  436.       Insets var3 = var1.getInsets();
  437.       Dimension var4 = new Dimension();
  438.       if (var2 instanceof AbstractDocument) {
  439.          ((AbstractDocument)var2).readLock();
  440.       }
  441.  
  442.       try {
  443.          var4.width = (int)Math.min((long)this.rootView.getMaximumSpan(0) + (long)var3.left + (long)var3.right, 2147483647L);
  444.          var4.height = (int)Math.min((long)this.rootView.getMaximumSpan(1) + (long)var3.top + (long)var3.bottom, 2147483647L);
  445.       } finally {
  446.          if (var2 instanceof AbstractDocument) {
  447.             ((AbstractDocument)var2).readUnlock();
  448.          }
  449.  
  450.       }
  451.  
  452.       return var4;
  453.    }
  454.  
  455.    protected Rectangle getVisibleEditorRect() {
  456.       Rectangle var1 = this.editor.getBounds();
  457.       if (var1.width > 0 && var1.height > 0) {
  458.          var1.x = var1.y = 0;
  459.          Insets var2 = this.editor.getInsets();
  460.          var1.x += var2.left;
  461.          var1.y += var2.top;
  462.          var1.width -= var2.left + var2.right;
  463.          var1.height -= var2.top + var2.bottom;
  464.          return var1;
  465.       } else {
  466.          return null;
  467.       }
  468.    }
  469.  
  470.    public Rectangle modelToView(JTextComponent var1, int var2) throws BadLocationException {
  471.       return this.modelToView(var1, var2, Bias.Forward);
  472.    }
  473.  
  474.    public Rectangle modelToView(JTextComponent var1, int var2, Position.Bias var3) throws BadLocationException {
  475.       Document var4 = this.editor.getDocument();
  476.       if (var4 instanceof AbstractDocument) {
  477.          ((AbstractDocument)var4).readLock();
  478.       }
  479.  
  480.       Rectangle var7;
  481.       try {
  482.          Rectangle var5 = this.getVisibleEditorRect();
  483.          if (var5 == null) {
  484.             return null;
  485.          }
  486.  
  487.          this.rootView.setSize((float)var5.width, (float)var5.height);
  488.          Shape var6 = this.rootView.modelToView(var2, var5, var3);
  489.          if (var6 == null) {
  490.             return null;
  491.          }
  492.  
  493.          var7 = var6.getBounds();
  494.       } finally {
  495.          if (var4 instanceof AbstractDocument) {
  496.             ((AbstractDocument)var4).readUnlock();
  497.          }
  498.  
  499.       }
  500.  
  501.       return var7;
  502.    }
  503.  
  504.    public int viewToModel(JTextComponent var1, Point var2) {
  505.       return this.viewToModel(var1, var2, discardBias);
  506.    }
  507.  
  508.    public int viewToModel(JTextComponent var1, Point var2, Position.Bias[] var3) {
  509.       int var4 = -1;
  510.       Document var5 = this.editor.getDocument();
  511.       if (var5 instanceof AbstractDocument) {
  512.          ((AbstractDocument)var5).readLock();
  513.       }
  514.  
  515.       try {
  516.          Rectangle var6 = this.getVisibleEditorRect();
  517.          if (var6 != null) {
  518.             this.rootView.setSize((float)var6.width, (float)var6.height);
  519.             var4 = this.rootView.viewToModel((float)var2.x, (float)var2.y, var6, var3);
  520.          }
  521.       } finally {
  522.          if (var5 instanceof AbstractDocument) {
  523.             ((AbstractDocument)var5).readUnlock();
  524.          }
  525.  
  526.       }
  527.  
  528.       return var4;
  529.    }
  530.  
  531.    public int getNextVisualPositionFrom(JTextComponent var1, int var2, Position.Bias var3, int var4, Position.Bias[] var5) throws BadLocationException {
  532.       Document var6 = this.editor.getDocument();
  533.       if (var6 instanceof AbstractDocument) {
  534.          ((AbstractDocument)var6).readLock();
  535.       }
  536.  
  537.       int var8;
  538.       try {
  539.          if (!this.painted) {
  540.             return -1;
  541.          }
  542.  
  543.          Rectangle var7 = this.getVisibleEditorRect();
  544.          this.rootView.setSize((float)var7.width, (float)var7.height);
  545.          var8 = this.rootView.getNextVisualPositionFrom(var2, var3, var7, var4, var5);
  546.       } finally {
  547.          if (var6 instanceof AbstractDocument) {
  548.             ((AbstractDocument)var6).readUnlock();
  549.          }
  550.  
  551.       }
  552.  
  553.       return var8;
  554.    }
  555.  
  556.    public void damageRange(JTextComponent var1, int var2, int var3) {
  557.       this.damageRange(var1, var2, var3, Bias.Forward, Bias.Backward);
  558.    }
  559.  
  560.    public void damageRange(JTextComponent var1, int var2, int var3, Position.Bias var4, Position.Bias var5) {
  561.       if (this.painted) {
  562.          Rectangle var6 = this.getVisibleEditorRect();
  563.          Document var7 = var1.getDocument();
  564.          if (var7 instanceof AbstractDocument) {
  565.             ((AbstractDocument)var7).readLock();
  566.          }
  567.  
  568.          try {
  569.             this.rootView.setSize((float)var6.width, (float)var6.height);
  570.             Shape var8 = this.rootView.modelToView(var2, var4, var3, var5, var6);
  571.             Rectangle var9 = var8 instanceof Rectangle ? (Rectangle)var8 : var8.getBounds();
  572.             this.editor.repaint(var9.x, var9.y, var9.width, var9.height);
  573.          } catch (BadLocationException var14) {
  574.          } finally {
  575.             if (var7 instanceof AbstractDocument) {
  576.                ((AbstractDocument)var7).readUnlock();
  577.             }
  578.  
  579.          }
  580.       }
  581.  
  582.    }
  583.  
  584.    public EditorKit getEditorKit(JTextComponent var1) {
  585.       return defaultKit;
  586.    }
  587.  
  588.    public View getRootView(JTextComponent var1) {
  589.       return this.rootView;
  590.    }
  591.  
  592.    public View create(Element var1) {
  593.       return null;
  594.    }
  595.  
  596.    public View create(Element var1, int var2, int var3) {
  597.       return null;
  598.    }
  599. }
  600.