7ce77a30598cc03a404745f5c4e481233e70f7fe
[jalview.git] / src / jalview / gui / WebserviceInfo.java
1 package jalview.gui;\r
2 \r
3 import java.awt.*;\r
4 import java.awt.event.*;\r
5 import javax.swing.*;\r
6 import jalview.jbgui.GWebserviceInfo;\r
7 \r
8 public class WebserviceInfo extends GWebserviceInfo\r
9 {\r
10 \r
11   public static final int STATE_QUEUING = 0;\r
12   public static final int STATE_RUNNING = 1;\r
13   public static final int STATE_STOPPED_OK = 2;\r
14   public static final int STATE_STOPPED_ERROR = 3;\r
15   int currentStatus = STATE_QUEUING;\r
16   Image image;\r
17   int angle = 0;\r
18 \r
19   String title="";\r
20   jalview.ws.WSClientI thisService;\r
21   boolean serviceIsCancellable;\r
22   public jalview.ws.WSClientI getthisService() {\r
23     return thisService;\r
24   }\r
25   public void setthisService(jalview.ws.WSClientI newservice) {\r
26     thisService = newservice;\r
27     serviceIsCancellable = newservice.isCancellable();\r
28   }\r
29 \r
30   public WebserviceInfo(String title, String info)\r
31   {\r
32     init(title, info, 520, 500);\r
33   }\r
34 \r
35   public WebserviceInfo(String title, String info, int width, int height)\r
36   {\r
37     init(title, info, width, height);\r
38   }\r
39 \r
40   void init(String title, String info, int width, int height)\r
41   {\r
42     JInternalFrame frame = new JInternalFrame();\r
43     frame.setContentPane(this);\r
44     Desktop.addInternalFrame(frame, title, width, height);\r
45 \r
46     this.title = title;\r
47     setInfoText(info);\r
48     java.net.URL url = getClass().getResource("/images/logo.gif");\r
49     image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
50     MediaTracker mt = new MediaTracker(this);\r
51     mt.addImage(image, 0);\r
52     try\r
53     {\r
54       mt.waitForID(0);\r
55     }\r
56     catch (Exception ex)\r
57     {}\r
58 \r
59 \r
60     AnimatedPanel ap = new AnimatedPanel();\r
61     titlePanel.add(ap, BorderLayout.CENTER);\r
62     Thread thread = new Thread(ap);\r
63     thread.start();\r
64   }\r
65 \r
66   public void setStatus(int status)\r
67   {\r
68     currentStatus = status;\r
69   }\r
70 \r
71   public String getInfoText()\r
72   {   return infoText.getText();  }\r
73 \r
74   public void setInfoText(String text)\r
75   {   infoText.setText(text);     }\r
76 \r
77   public void appendInfoText(String text)\r
78   {  infoText.append(text);  }\r
79 \r
80   public String getProgressText()\r
81   {   return progressText.getText();  }\r
82 \r
83   public void setProgressText(String text)\r
84   {   progressText.setText(text);   }\r
85 \r
86   public void appendProgressText(String text)\r
87   {   progressText.append(text);  }\r
88 \r
89   protected void cancel_actionPerformed(ActionEvent e)\r
90   {\r
91     if (!serviceIsCancellable)\r
92       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
93                                             "Cancel not implemented yet!!" ,\r
94                                             "Cancel job"\r
95                                             ,JOptionPane.WARNING_MESSAGE);\r
96     else\r
97       thisService.cancelJob();\r
98   }\r
99 \r
100 \r
101   class AnimatedPanel extends JPanel implements Runnable\r
102   {\r
103     long startTime=0;\r
104     public void run()\r
105     {\r
106       startTime = System.currentTimeMillis();\r
107       while(currentStatus<STATE_STOPPED_OK)\r
108       try\r
109       {\r
110         Thread.sleep(50);\r
111 \r
112         int units =  (int)((System.currentTimeMillis()-startTime)/10f);\r
113         angle += units;\r
114         angle %= 360;\r
115         startTime = System.currentTimeMillis();\r
116         repaint();\r
117 \r
118       }\r
119       catch (Exception ex)\r
120       {}\r
121       angle = 0;\r
122       cancel.setEnabled(false);\r
123 \r
124     }\r
125 \r
126    synchronized public void  paintComponent(Graphics g1)\r
127     {\r
128       Graphics2D g = (Graphics2D) g1;\r
129       g.setColor(Color.white);\r
130       g.fillRect(0, 0, getWidth(), getHeight());\r
131       if (image != null)\r
132       {\r
133         g.rotate(Math.toRadians(angle), 28, 28);\r
134         g.drawImage(image, 10, 10, this);\r
135         g.rotate( -Math.toRadians(angle), 28, 28);\r
136       }\r
137       g.setFont(new Font("Arial", Font.BOLD, 12));\r
138       g.setColor(Color.black);\r
139       switch(currentStatus)\r
140       {\r
141         case STATE_QUEUING:\r
142           g.drawString(title.concat(" - queuing"), 60, 30);\r
143           break;\r
144         case STATE_RUNNING:\r
145           g.drawString(title.concat(" - running"), 60, 30);\r
146           break;\r
147         case STATE_STOPPED_OK:\r
148           g.drawString(title.concat(" - complete"), 60, 30);\r
149           break;\r
150         case STATE_STOPPED_ERROR:\r
151           g.drawString(title.concat(" - error!"), 60, 30);\r
152           break;\r
153       }\r
154 \r
155     }\r
156   }\r
157 }\r