home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / Alert.class (.txt) next >
Encoding:
Java Class File  |  1998-10-01  |  8.8 KB  |  288 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.Hashtable;
  4.  
  5. public class Alert {
  6.    public static final int DEFAULT_OPTION = 1;
  7.    public static final int SECOND_OPTION = 2;
  8.    public static final int THIRD_OPTION = 3;
  9.    private final int MIN_WIDTH = 200;
  10.    private final int WIDTH_MARGIN = 7;
  11.    private final int TOP_MARGIN = 8;
  12.    private final int BOTTOM_MARGIN = 8;
  13.    private final int TEXT_TOP_MARGIN;
  14.    private final int TEXT_BOTTOM_MARGIN = 3;
  15.    private final int BUTTON_HORIZ_MARGIN = 6;
  16.    private final int TITLE_LEFT_MARGIN = 3;
  17.    private final float BUTTON_CENTER_RATIO = 0.6666667F;
  18.    static final String DEFAULT_ACTION = "performDefaultAction";
  19.    static final String SECOND_ACTION = "performSecondAction";
  20.    static final String THIRD_ACTION = "performThirdAction";
  21.    private final int MIN_BUTTON_WIDTH = 50;
  22.    private Window window;
  23.    private AlertContentView contentView = new AlertContentView(this, 0, 0, 100, 100);
  24.    private TextField titleTextField;
  25.    private TextView messageTextView;
  26.    private Button defaultButton;
  27.    private Button secondButton;
  28.    private Button thirdButton;
  29.    private int result;
  30.    private Button bitmapContainer = new Button(0, 0, 100, 100);
  31.  
  32.    public static Image notificationImage() {
  33.       return Bitmap.bitmapNamed("netscape/application/alertNotification.gif");
  34.    }
  35.  
  36.    public static Image questionImage() {
  37.       return Bitmap.bitmapNamed("netscape/application/alertQuestion.gif");
  38.    }
  39.  
  40.    public static Image warningImage() {
  41.       return Bitmap.bitmapNamed("netscape/application/alertWarning.gif");
  42.    }
  43.  
  44.    public static int runAlertInternally(String var0, String var1, String var2, String var3, String var4) {
  45.       return runAlertInternally((Image)null, var0, var1, var2, var3, var4);
  46.    }
  47.  
  48.    public static int runAlertExternally(String var0, String var1, String var2, String var3, String var4) {
  49.       return runAlertExternally((Image)null, var0, var1, var2, var3, var4);
  50.    }
  51.  
  52.    public static int runAlertInternally(Image var0, String var1, String var2, String var3, String var4, String var5) {
  53.       Alert var6 = new Alert(var1, var2, var3, var4, var5);
  54.       var6.setImage(var0);
  55.       return var6.run(false);
  56.    }
  57.  
  58.    public static int runAlertExternally(Image var0, String var1, String var2, String var3, String var4, String var5) {
  59.       Alert var6 = new Alert(var1, var2, var3, var4, var5);
  60.       var6.setImage(var0);
  61.       return var6.run(true);
  62.    }
  63.  
  64.    private Alert(String var1, String var2, String var3, String var4, String var5) {
  65.       this.bitmapContainer.setEnabled(false);
  66.       this.bitmapContainer.setBordered(false);
  67.       Size var6 = this.bitmapContainer.minSize();
  68.       this.bitmapContainer.sizeTo(var6.width, var6.height);
  69.       this.contentView.addSubview(this.bitmapContainer);
  70.       this.titleTextField = new TextField(0, 0, 100, 0);
  71.       this.titleTextField.setFont(new Font(Font.defaultFont().name(), 1, 18));
  72.       this.titleTextField.setJustification(0);
  73.       this.titleTextField.setStringValue(var1);
  74.       this.titleTextField.setBorder((Border)null);
  75.       this.titleTextField.setBackgroundColor(Color.lightGray);
  76.       this.titleTextField.setEditable(false);
  77.       this.contentView.addSubview(this.titleTextField);
  78.       this.messageTextView = new TextView(0, 0, 100, 20);
  79.       this.messageTextView.setEditable(false);
  80.       this.messageTextView.setSelectable(false);
  81.       this.messageTextView.setString("\n" + var2 + "\n");
  82.       this.messageTextView.setBackgroundColor(Color.lightGray);
  83.       Hashtable var7 = this.messageTextView.defaultAttributes();
  84.       TextParagraphFormat var8 = (TextParagraphFormat)var7.get("ParagraphFormatKey");
  85.       var7 = (Hashtable)var7.clone();
  86.       var8 = (TextParagraphFormat)var8.clone();
  87.       var8.setLeftMargin(0);
  88.       var8.setLeftIndent(0);
  89.       var8.setRightMargin(0);
  90.       var7.put("ParagraphFormatKey", var8);
  91.       this.messageTextView.setDefaultAttributes(var7);
  92.       this.contentView.addSubview(this.messageTextView);
  93.       this.defaultButton = new Button(0, 0, 100, 20);
  94.       this.defaultButton.setTitle(var3);
  95.       this.defaultButton.setTarget(this.contentView);
  96.       this.defaultButton.setCommand("performDefaultAction");
  97.       this.contentView.addSubview(this.defaultButton);
  98.       if (var4 != null) {
  99.          this.secondButton = new Button(0, 0, 100, 20);
  100.          this.secondButton.setTitle(var4);
  101.          this.secondButton.setTarget(this.contentView);
  102.          this.secondButton.setCommand("performSecondAction");
  103.          this.contentView.addSubview(this.secondButton);
  104.       }
  105.  
  106.       if (var5 != null) {
  107.          this.thirdButton = new Button(0, 0, 100, 20);
  108.          this.thirdButton.setTitle(var5);
  109.          this.thirdButton.setTarget(this.contentView);
  110.          this.thirdButton.setCommand("performThirdAction");
  111.          this.contentView.addSubview(this.thirdButton);
  112.       }
  113.  
  114.    }
  115.  
  116.    private void setImage(Image var1) {
  117.       this.bitmapContainer.setImage(var1);
  118.       Size var2 = this.bitmapContainer.minSize();
  119.       this.bitmapContainer.sizeTo(var2.width, var2.height);
  120.    }
  121.  
  122.    private void calculateLayout() {
  123.       int var3 = 200;
  124.       boolean var4 = false;
  125.       int var5 = 0;
  126.       int var6 = 0;
  127.       FontMetrics var1 = new FontMetrics(this.titleTextField.font());
  128.       var3 = this.max(var3, var1.stringWidth(this.titleTextField.stringValue()) + 14 + 3 + this.bitmapContainer.width());
  129.       this.titleTextField.sizeTo(100, var1.stringHeight());
  130.       Size var7 = this.requiredSizeToPreserveLinesInTextView(this.messageTextView);
  131.       var3 = this.max(var3, var7.width + 14);
  132.       this.messageTextView.sizeTo(var7.width, var7.height);
  133.       Size var8 = new Size();
  134.       int var9 = 1;
  135.       var1 = new FontMetrics(this.defaultButton.font());
  136.       var8.width = this.max(var1.stringWidth(this.defaultButton.title()) + 10, 50);
  137.       var8.height = var1.stringHeight() + 4;
  138.       if (this.secondButton != null) {
  139.          var8.width = this.max(var8.width, var1.stringWidth(this.secondButton.title()) + 10);
  140.          ++var9;
  141.       }
  142.  
  143.       if (this.thirdButton != null) {
  144.          var8.width = this.max(var8.width, var1.stringWidth(this.thirdButton.title()) + 10);
  145.          ++var9;
  146.       }
  147.  
  148.       int var2 = 14 + var9 * var8.width + (var9 - 1) * 6;
  149.       if (var2 < var3 && (float)var2 / (float)var3 > 0.6666667F) {
  150.          var6 = (var3 - var9 * var8.width) / (1 + var9);
  151.          var5 = (int)((double)var6 * 0.8571428571428571);
  152.          var6 = (var3 - var9 * var8.width - (var9 - 1) * var5) / 2;
  153.          var4 = true;
  154.       } else {
  155.          var4 = false;
  156.          var3 = this.max(var3, var2);
  157.       }
  158.  
  159.       Rect var10 = new Rect();
  160.       var10.x = 7;
  161.       var10.y = 8;
  162.       if (this.bitmapContainer.image() != null) {
  163.          if (this.bitmapContainer.superview() == null) {
  164.             this.contentView.addSubview(this.bitmapContainer);
  165.          }
  166.  
  167.          this.bitmapContainer.moveTo(var10.x, var10.y);
  168.       } else {
  169.          this.bitmapContainer.removeFromSuperview();
  170.       }
  171.  
  172.       if (this.bitmapContainer.image() != null) {
  173.          var10.x += this.bitmapContainer.width() + 3;
  174.          var10.y = 8 + this.bitmapContainer.height() - this.titleTextField.height() + var1.descent() + 1;
  175.       } else {
  176.          var10.y = 8;
  177.       }
  178.  
  179.       var10.width = var3 - 14 - 3 - this.bitmapContainer.width();
  180.       var10.height = this.titleTextField.bounds.height;
  181.       this.titleTextField.setBounds(var10);
  182.       if (this.bitmapContainer.y() + this.bitmapContainer.height() > var10.y + var10.height) {
  183.          var10.y = this.bitmapContainer.y() + this.bitmapContainer.height();
  184.       } else {
  185.          var10.y += var10.height;
  186.       }
  187.  
  188.       var10.x = 7;
  189.       var10.width = this.messageTextView.bounds.width;
  190.       var10.height = this.messageTextView.bounds.height;
  191.       this.messageTextView.setBounds(var10);
  192.       var10.y += var10.height + 3;
  193.       if (var4) {
  194.          var10.x = var6;
  195.          var10.width = var8.width;
  196.          var10.height = var8.height;
  197.          this.defaultButton.setBounds(var10);
  198.          if (this.secondButton != null) {
  199.             var10.x += var10.width + var5;
  200.             this.secondButton.setBounds(var10);
  201.          }
  202.  
  203.          if (this.thirdButton != null) {
  204.             var10.x += var10.width + var5;
  205.             this.thirdButton.setBounds(var10);
  206.          }
  207.       } else {
  208.          var10.x = var3 - (7 + var8.width * var9 + 6 * (var9 - 1));
  209.          var10.width = var8.width;
  210.          var10.height = var8.height;
  211.          this.defaultButton.setBounds(var10);
  212.          var10.x += var8.width + 6;
  213.          if (this.secondButton != null) {
  214.             this.secondButton.setBounds(var10);
  215.             var10.x += var8.width + 6;
  216.          }
  217.  
  218.          if (this.thirdButton != null) {
  219.             this.thirdButton.setBounds(var10);
  220.          }
  221.       }
  222.  
  223.       Size var11 = new Size();
  224.       var11.width = var3;
  225.       var11.height = var10.y + var8.height + 8;
  226.       this.contentView.sizeTo(var11.width, var11.height);
  227.    }
  228.  
  229.    private int run(boolean var1) {
  230.       this.calculateLayout();
  231.       if (var1) {
  232.          this.window = new ExternalWindow(1);
  233.       } else {
  234.          this.window = new InternalWindow();
  235.          InternalAlertBorder var3 = new InternalAlertBorder((InternalWindow)this.window);
  236.          ((InternalWindow)this.window).setBorder(var3);
  237.       }
  238.  
  239.       this.window.setResizable(false);
  240.       Size var2 = this.window.windowSizeForContentSize(this.contentView.bounds.width, this.contentView.bounds.height);
  241.       this.window.sizeTo(var2.width, var2.height);
  242.       this.window.addSubview(this.contentView);
  243.       this.window.center();
  244.       this.window.showModally();
  245.       return this.result;
  246.    }
  247.  
  248.    private int max(int var1, int var2) {
  249.       return var1 > var2 ? var1 : var2;
  250.    }
  251.  
  252.    private Size requiredSizeToPreserveLinesInTextView(TextView var1) {
  253.       FontMetrics var2 = new FontMetrics(var1.font());
  254.       FastStringBuffer var3 = new FastStringBuffer();
  255.       int var6 = 0;
  256.       int var8 = 1;
  257.       int var4 = 0;
  258.  
  259.       for(int var5 = var1.length(); var4 < var5; ++var4) {
  260.          char var7;
  261.          if ((var7 = var1.characterAt(var4)) == '\n') {
  262.             var6 = this.max(var6, var2.stringWidth(var3.toString()));
  263.             var3.truncateToLength(0);
  264.             ++var8;
  265.          } else {
  266.             var3.append(var7);
  267.          }
  268.       }
  269.  
  270.       if (var3.length() != 0) {
  271.          var6 = this.max(var6, var2.stringWidth(var3.toString()));
  272.       }
  273.  
  274.       Size var9 = new Size();
  275.       var9.width = var6;
  276.       var9.height = var2.stringHeight() * var8;
  277.       return var9;
  278.    }
  279.  
  280.    void setResult(int var1) {
  281.       this.result = var1;
  282.    }
  283.  
  284.    void hide() {
  285.       this.window.hide();
  286.    }
  287. }
  288.