refactor to abstract jmol/jalview binding and applet and application specific sequenc...
[jalview.git] / src / jalview / gui / AppJmolBinding.java
1 /**
2  * 
3  */
4 package jalview.gui;
5
6 import java.util.Vector;
7
8 import jalview.bin.Cache;
9 import jalview.datamodel.PDBEntry;
10 import jalview.datamodel.SequenceI;
11
12 import org.jmol.popup.JmolPopup;
13
14 class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding
15 {
16
17   /**
18    * 
19    */
20   private AppJmol appJmolWindow;
21
22   public AppJmolBinding(AppJmol appJmol, PDBEntry[] pdbentry,
23           SequenceI[] seq, String[] chains, String protocol)
24   {
25     super(pdbentry, seq, chains, protocol);
26     appJmolWindow = appJmol;
27   }
28   FeatureRenderer fr=null;
29   @Override
30   public jalview.api.FeatureRenderer getFeatureRenderer()
31   {
32     if (appJmolWindow.ap.av.showSequenceFeatures)
33     {
34       if (fr == null)
35       {
36         fr = new FeatureRenderer(appJmolWindow.ap);
37       }
38
39       fr.transferSettings(appJmolWindow.ap.seqPanel.seqCanvas
40                       .getFeatureRenderer());
41     }
42
43     return fr;
44   }
45
46   @Override
47   public jalview.api.SequenceRenderer getSequenceRenderer()
48   {
49     return new SequenceRenderer(appJmolWindow.ap.av);
50   }
51
52   public void sendConsoleEcho(String strEcho)
53   {
54     if (appJmolWindow.scriptWindow != null)
55     {
56       appJmolWindow.scriptWindow.sendConsoleEcho(strEcho);
57     }
58   }
59
60   public void sendConsoleMessage(String strStatus)
61   {
62     if (appJmolWindow.scriptWindow!=null && strStatus != null
63             )
64       //      && !strStatus.equals("Script completed"))
65       // should we squash the script completed string ?
66     {
67       appJmolWindow.scriptWindow.sendConsoleMessage(strStatus);
68     }
69   }
70
71   @Override
72   public void showUrl(String url, String target)
73   {
74     try {
75       jalview.util.BrowserLauncher.openURL(url);
76     } catch (Exception e) {
77       Cache.log.error("Failed to launch Jmol-associated url " + url, e);
78       // TODO: 2.6 : warn user if browser was not configured.
79     }
80   }
81
82   @Override
83   public void updateUI()
84   {
85     // appJmolWindow.repaint();
86     appJmolWindow.updateTitleAndMenus();
87   }
88
89   public void updateColours(Object source)
90   {
91     AlignmentPanel ap = (AlignmentPanel) source;
92     if (appJmolWindow.ap.alignFrame.getCurrentView()!=ap.av)
93       return;
94     
95     colourBySequence(ap.av.getShowSequenceFeatures(), ap.av.alignment);
96   }
97
98   public void notifyScriptTermination(String strStatus, int msWalltime)
99   {
100     if (appJmolWindow.scriptWindow != null)
101       appJmolWindow.scriptWindow.notifyScriptTermination(strStatus, msWalltime);
102   }
103
104   public void showUrl(String url)
105   {
106     showUrl(url,"jmol");
107   }
108
109   public void newJmolPopup(boolean translateLocale, String menuName,
110           boolean asPopup)
111   {
112
113     jmolpopup = JmolPopup.newJmolPopup(viewer, translateLocale, menuName,
114             asPopup);
115   }
116   public synchronized void addSequence(SequenceI[] seq)
117   {
118     Vector v = new Vector();
119     for (int i = 0; i < sequence.length; i++)
120       v.addElement(sequence[i]);
121
122     for (int i = 0; i < seq.length; i++)
123       if (!v.contains(seq[i]))
124         v.addElement(seq[i]);
125
126     SequenceI[] tmp = new SequenceI[v.size()];
127     v.copyInto(tmp);
128     sequence = tmp;
129   }
130 }