home *** CD-ROM | disk | FTP | other *** search
- package netscape.application;
-
- import netscape.util.Hashtable;
-
- public class Alert {
- public static final int DEFAULT_OPTION = 1;
- public static final int SECOND_OPTION = 2;
- public static final int THIRD_OPTION = 3;
- private final int MIN_WIDTH = 200;
- private final int WIDTH_MARGIN = 7;
- private final int TOP_MARGIN = 8;
- private final int BOTTOM_MARGIN = 8;
- private final int TEXT_TOP_MARGIN;
- private final int TEXT_BOTTOM_MARGIN = 3;
- private final int BUTTON_HORIZ_MARGIN = 6;
- private final int TITLE_LEFT_MARGIN = 3;
- private final float BUTTON_CENTER_RATIO = 0.6666667F;
- static final String DEFAULT_ACTION = "performDefaultAction";
- static final String SECOND_ACTION = "performSecondAction";
- static final String THIRD_ACTION = "performThirdAction";
- private final int MIN_BUTTON_WIDTH = 50;
- private Window window;
- private AlertContentView contentView = new AlertContentView(this, 0, 0, 100, 100);
- private TextField titleTextField;
- private TextView messageTextView;
- private Button defaultButton;
- private Button secondButton;
- private Button thirdButton;
- private int result;
- private Button bitmapContainer = new Button(0, 0, 100, 100);
-
- public static Image notificationImage() {
- return Bitmap.bitmapNamed("netscape/application/alertNotification.gif");
- }
-
- public static Image questionImage() {
- return Bitmap.bitmapNamed("netscape/application/alertQuestion.gif");
- }
-
- public static Image warningImage() {
- return Bitmap.bitmapNamed("netscape/application/alertWarning.gif");
- }
-
- public static int runAlertInternally(String var0, String var1, String var2, String var3, String var4) {
- return runAlertInternally((Image)null, var0, var1, var2, var3, var4);
- }
-
- public static int runAlertExternally(String var0, String var1, String var2, String var3, String var4) {
- return runAlertExternally((Image)null, var0, var1, var2, var3, var4);
- }
-
- public static int runAlertInternally(Image var0, String var1, String var2, String var3, String var4, String var5) {
- Alert var6 = new Alert(var1, var2, var3, var4, var5);
- var6.setImage(var0);
- return var6.run(false);
- }
-
- public static int runAlertExternally(Image var0, String var1, String var2, String var3, String var4, String var5) {
- Alert var6 = new Alert(var1, var2, var3, var4, var5);
- var6.setImage(var0);
- return var6.run(true);
- }
-
- private Alert(String var1, String var2, String var3, String var4, String var5) {
- this.bitmapContainer.setEnabled(false);
- this.bitmapContainer.setBordered(false);
- Size var6 = this.bitmapContainer.minSize();
- this.bitmapContainer.sizeTo(var6.width, var6.height);
- this.contentView.addSubview(this.bitmapContainer);
- this.titleTextField = new TextField(0, 0, 100, 0);
- this.titleTextField.setFont(new Font(Font.defaultFont().name(), 1, 18));
- this.titleTextField.setJustification(0);
- this.titleTextField.setStringValue(var1);
- this.titleTextField.setBorder((Border)null);
- this.titleTextField.setBackgroundColor(Color.lightGray);
- this.titleTextField.setEditable(false);
- this.contentView.addSubview(this.titleTextField);
- this.messageTextView = new TextView(0, 0, 100, 20);
- this.messageTextView.setEditable(false);
- this.messageTextView.setSelectable(false);
- this.messageTextView.setString("\n" + var2 + "\n");
- this.messageTextView.setBackgroundColor(Color.lightGray);
- Hashtable var7 = this.messageTextView.defaultAttributes();
- TextParagraphFormat var8 = (TextParagraphFormat)var7.get("ParagraphFormatKey");
- var7 = (Hashtable)var7.clone();
- var8 = (TextParagraphFormat)var8.clone();
- var8.setLeftMargin(0);
- var8.setLeftIndent(0);
- var8.setRightMargin(0);
- var7.put("ParagraphFormatKey", var8);
- this.messageTextView.setDefaultAttributes(var7);
- this.contentView.addSubview(this.messageTextView);
- this.defaultButton = new Button(0, 0, 100, 20);
- this.defaultButton.setTitle(var3);
- this.defaultButton.setTarget(this.contentView);
- this.defaultButton.setCommand("performDefaultAction");
- this.contentView.addSubview(this.defaultButton);
- if (var4 != null) {
- this.secondButton = new Button(0, 0, 100, 20);
- this.secondButton.setTitle(var4);
- this.secondButton.setTarget(this.contentView);
- this.secondButton.setCommand("performSecondAction");
- this.contentView.addSubview(this.secondButton);
- }
-
- if (var5 != null) {
- this.thirdButton = new Button(0, 0, 100, 20);
- this.thirdButton.setTitle(var5);
- this.thirdButton.setTarget(this.contentView);
- this.thirdButton.setCommand("performThirdAction");
- this.contentView.addSubview(this.thirdButton);
- }
-
- }
-
- private void setImage(Image var1) {
- this.bitmapContainer.setImage(var1);
- Size var2 = this.bitmapContainer.minSize();
- this.bitmapContainer.sizeTo(var2.width, var2.height);
- }
-
- private void calculateLayout() {
- int var3 = 200;
- boolean var4 = false;
- int var5 = 0;
- int var6 = 0;
- FontMetrics var1 = new FontMetrics(this.titleTextField.font());
- var3 = this.max(var3, var1.stringWidth(this.titleTextField.stringValue()) + 14 + 3 + this.bitmapContainer.width());
- this.titleTextField.sizeTo(100, var1.stringHeight());
- Size var7 = this.requiredSizeToPreserveLinesInTextView(this.messageTextView);
- var3 = this.max(var3, var7.width + 14);
- this.messageTextView.sizeTo(var7.width, var7.height);
- Size var8 = new Size();
- int var9 = 1;
- var1 = new FontMetrics(this.defaultButton.font());
- var8.width = this.max(var1.stringWidth(this.defaultButton.title()) + 10, 50);
- var8.height = var1.stringHeight() + 4;
- if (this.secondButton != null) {
- var8.width = this.max(var8.width, var1.stringWidth(this.secondButton.title()) + 10);
- ++var9;
- }
-
- if (this.thirdButton != null) {
- var8.width = this.max(var8.width, var1.stringWidth(this.thirdButton.title()) + 10);
- ++var9;
- }
-
- int var2 = 14 + var9 * var8.width + (var9 - 1) * 6;
- if (var2 < var3 && (float)var2 / (float)var3 > 0.6666667F) {
- var6 = (var3 - var9 * var8.width) / (1 + var9);
- var5 = (int)((double)var6 * 0.8571428571428571);
- var6 = (var3 - var9 * var8.width - (var9 - 1) * var5) / 2;
- var4 = true;
- } else {
- var4 = false;
- var3 = this.max(var3, var2);
- }
-
- Rect var10 = new Rect();
- var10.x = 7;
- var10.y = 8;
- if (this.bitmapContainer.image() != null) {
- if (this.bitmapContainer.superview() == null) {
- this.contentView.addSubview(this.bitmapContainer);
- }
-
- this.bitmapContainer.moveTo(var10.x, var10.y);
- } else {
- this.bitmapContainer.removeFromSuperview();
- }
-
- if (this.bitmapContainer.image() != null) {
- var10.x += this.bitmapContainer.width() + 3;
- var10.y = 8 + this.bitmapContainer.height() - this.titleTextField.height() + var1.descent() + 1;
- } else {
- var10.y = 8;
- }
-
- var10.width = var3 - 14 - 3 - this.bitmapContainer.width();
- var10.height = this.titleTextField.bounds.height;
- this.titleTextField.setBounds(var10);
- if (this.bitmapContainer.y() + this.bitmapContainer.height() > var10.y + var10.height) {
- var10.y = this.bitmapContainer.y() + this.bitmapContainer.height();
- } else {
- var10.y += var10.height;
- }
-
- var10.x = 7;
- var10.width = this.messageTextView.bounds.width;
- var10.height = this.messageTextView.bounds.height;
- this.messageTextView.setBounds(var10);
- var10.y += var10.height + 3;
- if (var4) {
- var10.x = var6;
- var10.width = var8.width;
- var10.height = var8.height;
- this.defaultButton.setBounds(var10);
- if (this.secondButton != null) {
- var10.x += var10.width + var5;
- this.secondButton.setBounds(var10);
- }
-
- if (this.thirdButton != null) {
- var10.x += var10.width + var5;
- this.thirdButton.setBounds(var10);
- }
- } else {
- var10.x = var3 - (7 + var8.width * var9 + 6 * (var9 - 1));
- var10.width = var8.width;
- var10.height = var8.height;
- this.defaultButton.setBounds(var10);
- var10.x += var8.width + 6;
- if (this.secondButton != null) {
- this.secondButton.setBounds(var10);
- var10.x += var8.width + 6;
- }
-
- if (this.thirdButton != null) {
- this.thirdButton.setBounds(var10);
- }
- }
-
- Size var11 = new Size();
- var11.width = var3;
- var11.height = var10.y + var8.height + 8;
- this.contentView.sizeTo(var11.width, var11.height);
- }
-
- private int run(boolean var1) {
- this.calculateLayout();
- if (var1) {
- this.window = new ExternalWindow(1);
- } else {
- this.window = new InternalWindow();
- InternalAlertBorder var3 = new InternalAlertBorder((InternalWindow)this.window);
- ((InternalWindow)this.window).setBorder(var3);
- }
-
- this.window.setResizable(false);
- Size var2 = this.window.windowSizeForContentSize(this.contentView.bounds.width, this.contentView.bounds.height);
- this.window.sizeTo(var2.width, var2.height);
- this.window.addSubview(this.contentView);
- this.window.center();
- this.window.showModally();
- return this.result;
- }
-
- private int max(int var1, int var2) {
- return var1 > var2 ? var1 : var2;
- }
-
- private Size requiredSizeToPreserveLinesInTextView(TextView var1) {
- FontMetrics var2 = new FontMetrics(var1.font());
- FastStringBuffer var3 = new FastStringBuffer();
- int var6 = 0;
- int var8 = 1;
- int var4 = 0;
-
- for(int var5 = var1.length(); var4 < var5; ++var4) {
- char var7;
- if ((var7 = var1.characterAt(var4)) == '\n') {
- var6 = this.max(var6, var2.stringWidth(var3.toString()));
- var3.truncateToLength(0);
- ++var8;
- } else {
- var3.append(var7);
- }
- }
-
- if (var3.length() != 0) {
- var6 = this.max(var6, var2.stringWidth(var3.toString()));
- }
-
- Size var9 = new Size();
- var9.width = var6;
- var9.height = var2.stringHeight() * var8;
- return var9;
- }
-
- void setResult(int var1) {
- this.result = var1;
- }
-
- void hide() {
- this.window.hide();
- }
- }
-