/projects/azureus-4.7.0.2/org/gudy/azureus2/ui/swt/mainwindow/SystemWarningWindow.java
Java | 420 lines | 311 code | 85 blank | 24 comment | 32 complexity | 5f1b317d396c8098e3c83fb64b1e20dd MD5 | raw file
- /**
- * Created on Jan 4, 2010
- *
- * Copyright 2008 Vuze, Inc. All rights reserved.
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- package org.gudy.azureus2.ui.swt.mainwindow;
- import java.util.ArrayList;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.events.*;
- import org.eclipse.swt.graphics.*;
- import org.eclipse.swt.layout.*;
- import org.eclipse.swt.widgets.*;
- import org.gudy.azureus2.core3.internat.MessageText;
- import org.gudy.azureus2.core3.logging.LogAlert;
- import org.gudy.azureus2.core3.util.AERunnable;
- import org.gudy.azureus2.core3.util.Constants;
- import org.gudy.azureus2.core3.util.Debug;
- import org.gudy.azureus2.ui.swt.Alerts;
- import org.gudy.azureus2.ui.swt.Messages;
- import org.gudy.azureus2.ui.swt.Utils;
- import org.gudy.azureus2.ui.swt.shells.GCStringPrinter;
- import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
- import org.gudy.azureus2.ui.swt.shells.GCStringPrinter.URLInfo;
- import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
- import com.aelitis.azureus.ui.swt.utils.ColorCache;
- /**
- * @author TuxPaper
- * @created Jan 4, 2010
- *
- */
- public class SystemWarningWindow
- {
- private final static int WIDTH = 230;
- private final static int BORDER_X = 12;
- private final static int BORDER_Y0 = 10;
- private final static int BORDER_Y1 = 6;
- private final static int GAP_Y = 5;
- private final static int GAP_BUTTON_Y = 20;
- private final static int GAP_Y_TITLE_COUNT = 3;
- private final LogAlert logAlert;
- private final Point ptBottomRight;
- private final Shell parent;
- private Shell shell;
- private Image imgClose;
- private Rectangle boundsClose;
- private GCStringPrinter spText;
- private GCStringPrinter spTitle;
- private GCStringPrinter spCount;
- private Point sizeTitle;
- private Point sizeText;
- private Point sizeCount;
- private Font fontTitle;
- private Font fontCount;
- private int height;
- private Rectangle rectX;
- private int historyPosition;
- private String title;
- private String text;
-
- public static int numWarningWindowsOpen = 0;
- public SystemWarningWindow(LogAlert logAlert, Point ptBottomRight,
- Shell parent, int historyPosition) {
- this.logAlert = logAlert;
- this.ptBottomRight = ptBottomRight;
- this.parent = parent;
- this.historyPosition = historyPosition;
- String amb_key_suffix;
- switch (logAlert.entryType) {
- case LogAlert.AT_ERROR:
- amb_key_suffix = "error";
- break;
- case LogAlert.AT_INFORMATION:
- amb_key_suffix = "information";
- break;
- case LogAlert.AT_WARNING:
- amb_key_suffix = "warning";
- break;
- default:
- amb_key_suffix = null;
- break;
- }
- title = amb_key_suffix == null ? Constants.APP_NAME
- : MessageText.getString("AlertMessageBox." + amb_key_suffix);
- if (logAlert.text.startsWith("{")) {
- text = MessageText.expandValue(logAlert.text);
- } else {
- text = logAlert.text;
- }
-
- if (logAlert.err != null) {
- text += "\n" + Debug.getExceptionMessage(logAlert.err);
- }
- if (logAlert.details != null) {
- text += "\n<A HREF=\"details\">" + MessageText.getString("v3.MainWindow.button.viewdetails") + "</A>";
- }
- Utils.execSWTThread(new AERunnable() {
- public void runSupport() {
- openWindow();
- }
- });
- }
- protected void openWindow() {
- Display display = parent.getDisplay();
- //shell = new Shell(parent, SWT.TOOL | SWT.TITLE | SWT.CLOSE);
- //shell.setText("Warning (X of X)");
- shell = new Shell(parent, SWT.TOOL);
- shell.setLayout(new FormLayout());
- shell.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
- shell.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
-
- Menu menu = new Menu(shell);
- MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
- Messages.setLanguageText(menuItem, "MyTorrentsView.menu.thisColumn.toClipboard");
- menuItem.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- ClipboardCopy.copyToClipBoard(logAlert.text
- + (logAlert.details == null ? "" : "\n" + logAlert.details));
- }
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
- shell.setMenu(menu);
- ImageLoader imageLoader = ImageLoader.getInstance();
- imgClose = imageLoader.getImage("image.systemwarning.closeitem");
- boundsClose = imgClose.getBounds();
- GC gc = new GC(shell);
- FontData[] fontdata = gc.getFont().getFontData();
- fontdata[0].setHeight(fontdata[0].getHeight() + 1);
- fontdata[0].setStyle(SWT.BOLD);
- fontTitle = new Font(display, fontdata);
-
- fontdata = gc.getFont().getFontData();
- fontdata[0].setHeight(fontdata[0].getHeight() - 1);
- fontCount = new Font(display, fontdata);
- shell.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- Utils.disposeSWTObjects(new Object[] {
- fontTitle,
- fontCount,
- });
- numWarningWindowsOpen--;
- }
- });
- Rectangle printArea = new Rectangle(BORDER_X, 0, WIDTH - (BORDER_X * 2),
- 5000);
- spText = new GCStringPrinter(gc, text, printArea, true, false, SWT.WRAP);
- spText.setUrlColor(Colors.blues[Colors.FADED_DARKEST]);
- spText.calculateMetrics();
- gc.setFont(fontCount);
- String sCount = MessageText.getString("OpenTorrentWindow.xOfTotal",
- new String[] {
- "" + historyPosition + 1,
- "" + getWarningCount()
- });
- spCount = new GCStringPrinter(gc, sCount, printArea, true, false, SWT.WRAP);
- spCount.calculateMetrics();
- gc.setFont(fontTitle);
- spTitle = new GCStringPrinter(gc, title, printArea, true, false, SWT.WRAP);
- spTitle.calculateMetrics();
- gc.dispose();
- sizeText = spText.getCalculatedSize();
- sizeTitle = spTitle.getCalculatedSize();
- sizeCount = spCount.getCalculatedSize();
- FormData fd;
- Button btnDismiss = new Button(shell, SWT.PUSH);
- Messages.setLanguageText(btnDismiss, "Button.dismiss");
- final int btnHeight = btnDismiss.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
- Button btnPrev = new Button(shell, SWT.PUSH);
- btnPrev.setText("<");
- Button btnNext = new Button(shell, SWT.PUSH);
- btnNext.setText(">");
- fd = new FormData();
- fd.bottom = new FormAttachment(100, -BORDER_Y1);
- fd.right = new FormAttachment(100, -BORDER_X);
- btnNext.setLayoutData(fd);
- fd = new FormData();
- fd.bottom = new FormAttachment(100, -BORDER_Y1);
- fd.right = new FormAttachment(btnNext, -BORDER_X);
- btnPrev.setLayoutData(fd);
- fd = new FormData();
- fd.bottom = new FormAttachment(100, -BORDER_Y1);
- fd.right = new FormAttachment(btnPrev, -BORDER_X);
- btnDismiss.setLayoutData(fd);
- height = BORDER_Y0 + sizeTitle.y + GAP_Y + sizeText.y + GAP_Y_TITLE_COUNT
- + sizeCount.y + GAP_BUTTON_Y + btnHeight + BORDER_Y1;
- Rectangle area = shell.computeTrim(ptBottomRight.x - WIDTH, ptBottomRight.y
- - height, WIDTH, height);
- shell.setBounds(area);
- shell.setLocation(ptBottomRight.x - area.width, ptBottomRight.y
- - area.height - 2);
- rectX = new Rectangle(area.width - BORDER_X - boundsClose.width, BORDER_Y0,
- boundsClose.width, boundsClose.height);
- shell.addMouseMoveListener(new MouseMoveListener() {
- int lastCursor = SWT.CURSOR_ARROW;
- public void mouseMove(MouseEvent e) {
- if (shell == null || shell.isDisposed()) {
- return;
- }
- URLInfo hitUrl = spText.getHitUrl(e.x, e.y);
- int cursor = (rectX.contains(e.x, e.y)) || hitUrl != null
- ? SWT.CURSOR_HAND : SWT.CURSOR_ARROW;
- if (cursor != lastCursor) {
- lastCursor = cursor;
- shell.setCursor(e.display.getSystemCursor(cursor));
- }
- }
- });
- shell.addMouseListener(new MouseListener() {
- public void mouseUp(MouseEvent e) {
- if (shell == null || shell.isDisposed()) {
- return;
- }
- if (rectX.contains(e.x, e.y)) {
- shell.dispose();
- }
- URLInfo hitUrl = spText.getHitUrl(e.x, e.y);
- if (hitUrl != null) {
- if (hitUrl.url.equals("details")) {
- MessageBoxShell mb = new MessageBoxShell(Constants.APP_NAME,
- logAlert.details, new String[] {
- MessageText.getString("Button.ok")
- }, 0);
- mb.setUseTextBox(true);
- mb.setParent(Utils.findAnyShell());
- mb.open(null);
- } else {
- Utils.launch(hitUrl.url);
- }
- }
- }
- public void mouseDown(MouseEvent e) {
- }
- public void mouseDoubleClick(MouseEvent e) {
- }
- });
- shell.addPaintListener(new PaintListener() {
- public void paintControl(PaintEvent e) {
- e.gc.drawImage(imgClose, WIDTH - BORDER_X - boundsClose.width,
- BORDER_Y0);
- Rectangle printArea;
- printArea = new Rectangle(BORDER_X, BORDER_Y0 + sizeTitle.y + GAP_Y_TITLE_COUNT,
- WIDTH, 100);
- String sCount = MessageText.getString("OpenTorrentWindow.xOfTotal",
- new String[] {
- "" + (historyPosition + 1),
- "" + getWarningCount()
- });
- e.gc.setAlpha(180);
- Font lastFont = e.gc.getFont();
- e.gc.setFont(fontCount);
- spCount = new GCStringPrinter(e.gc, sCount, printArea, true, false,
- SWT.WRAP | SWT.TOP);
- spCount.printString();
- e.gc.setAlpha(255);
- sizeCount = spCount.getCalculatedSize();
- e.gc.setFont(lastFont);
- spText.printString(e.gc, new Rectangle(BORDER_X, BORDER_Y0
- + sizeTitle.y + GAP_Y_TITLE_COUNT + sizeCount.y + GAP_Y, WIDTH - BORDER_X
- - BORDER_X, 5000), SWT.WRAP | SWT.TOP);
- e.gc.setFont(fontTitle);
- e.gc.setForeground(ColorCache.getColor(e.gc.getDevice(), "#54728c"));
- spTitle.printString(e.gc, new Rectangle(BORDER_X, BORDER_Y0, WIDTH
- - BORDER_X - BORDER_X, 5000), SWT.WRAP | SWT.TOP);
- e.gc.setLineStyle(SWT.LINE_DOT);
- e.gc.setLineWidth(1);
- e.gc.setAlpha(180);
- e.gc.drawLine(BORDER_X, height - btnHeight - (GAP_BUTTON_Y / 2)
- - BORDER_Y1, WIDTH - BORDER_X, height - btnHeight
- - (GAP_BUTTON_Y / 2) - BORDER_Y1);
- }
- });
- shell.addTraverseListener(new TraverseListener() {
- public void keyTraversed(TraverseEvent e) {
- if (e.detail == SWT.TRAVERSE_ESCAPE) {
- shell.dispose();
- return;
- }
- }
- });
- btnPrev.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
- int pos = historyPosition - 1;
- if (pos < 0 || pos >= alerts.size()) {
- return;
- }
- new SystemWarningWindow(alerts.get(pos), ptBottomRight, parent, pos);
- shell.dispose();
- }
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
- btnPrev.setEnabled(historyPosition > 0);
- btnNext.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
- int pos = historyPosition + 1;
- if (pos >= alerts.size()) {
- return;
- }
- new SystemWarningWindow(alerts.get(pos), ptBottomRight, parent, pos);
- shell.dispose();
- }
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
- ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
- btnNext.setEnabled(alerts.size() != historyPosition + 1);
- btnDismiss.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
- for (int i = 0; i < alerts.size() && i <= historyPosition; i++) {
- Alerts.markAlertAsViewed(alerts.get(i));
- }
- shell.dispose();
- }
-
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
-
- shell.open();
- numWarningWindowsOpen++;
- }
- private int getWarningCount() {
- ArrayList<LogAlert> historyList = Alerts.getUnviewedLogAlerts();
- return historyList.size();
- }
- }