label.input_alignment = Input Alignment
label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.
label.vamsas_document_import_failed = Vamsas Document Import Failed
-label.couldnt_locate = Couldn't locate {0}
+label.couldnt_locate = Couldn''t locate {0}
label.url_not_found = URL not found
label.new_sequence_url_link = New sequence URL link
label.cannot_edit_annotations_in_wrapped_view = Cannot edit annotations in wrapped view
import javax.swing.event.InternalFrameEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
-import javax.swing.text.JTextComponent;
/**
* This class provides the swing GUI layout for FTS Panel and implements most of
if (tabs != null
&& tabs.getSelectedComponent() == ftsPanel)
{
- txt_search.requestFocusInWindow();
+ txt_search.getComponent().requestFocusInWindow();
}
}
});
"label.separate_multiple_query_values", new Object[]
{ getCmbSearchTarget().getSelectedItem().toString() });
}
- txt_search.setToolTipText(
+ txt_search.getComponent().setToolTipText(
JvSwingUtils.wrapTooltip(true, tooltipText));
searchAction(true);
}
}
});
- txt_search.setFont(new java.awt.Font("Verdana", 0, 12));
+ txt_search.getComponent().setFont(new java.awt.Font("Verdana", 0, 12));
- txt_search.getEditor().getEditorComponent()
- .addKeyListener(new KeyAdapter()
+ txt_search.addKeyListener(new KeyAdapter()
{
@Override
public void keyPressed(KeyEvent e)
}
}
}, false);
- ((JTextComponent) txt_search.getEditor().getEditorComponent())
- .getDocument().addDocumentListener(listener);
+ txt_search.addDocumentListener(listener);
txt_search.addFocusListener(new FocusListener()
{
btn_ok.setEnabled(false);
btn_next_page.setEnabled(false);
btn_prev_page.setEnabled(false);
- txt_search.setEnabled(false);
+ txt_search.getComponent().setEnabled(false);
cmb_searchTarget.setEnabled(false);
previousWantedFields = getFTSRestClient()
.getAllDefaultDisplayedFTSDataColumns()
btn_back.setEnabled(true);
btn_cancel.setEnabled(true);
refreshPaginatorState();
- txt_search.setEnabled(true);
+ txt_search.getComponent().setEnabled(true);
cmb_searchTarget.setEnabled(true);
if (wantedFieldsUpdated())
{
pnl_results.add(tabbedPane);
pnl_inputs.add(cmb_searchTarget);
- pnl_inputs.add(txt_search);
+ pnl_inputs.add(txt_search.getComponent());
pnl_inputs.add(btn_autosearch);
pnl_inputs.add(lbl_loading);
pnl_inputs.add(lbl_warning);
return cmb_searchTarget;
}
- public JComboBox<String> getTxtSearch()
- {
- return txt_search;
- }
-
public JInternalFrame getMainFrame()
{
return mainFrame;
* @version $Revision$
*/
public class AlignFrame extends GAlignFrame implements DropTargetListener,
- IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener,
- PropertyChangeListener
+ IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener
{
public static final int DEFAULT_WIDTH = 700;
init();
}
- @Override
- public void propertyChange(PropertyChangeEvent evt)
- {
- Desktop.getDesktop().propertyChange(evt);
- }
-
- /**
- * BH 2018
- *
- * @return true if we have any features
- */
- @Override
- protected boolean haveAlignmentFeatures()
- {
- AlignmentI alignment = getViewport().getAlignment();
-
- for (int i = 0; i < alignment.getHeight(); i++)
- {
- SequenceI seq = alignment.getSequenceAt(i);
- for (String group : seq.getFeatures().getFeatureGroups(true))
- {
- if (group != null)
- return true;
- }
- }
- return false;
- }
-
/**
* initalise the alignframe from the underlying viewport data and the
* configurations
MessageManager.getString("label.search_filter")));
searchBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXX");
- searchBox.setToolTipText(
+ searchBox.getComponent().setToolTipText(
MessageManager.getString("info.enter_search_text_here"));
- searchBox.getEditor().getEditorComponent()
- .addKeyListener(new java.awt.event.KeyAdapter()
+ searchBox.addKeyListener(new java.awt.event.KeyAdapter()
{
@Override
public void keyPressed(KeyEvent e)
}
}
});
- searchBox.getEditor().getEditorComponent()
- .addFocusListener(new FocusAdapter()
+ searchBox.addFocusListener(new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
});
syncState();
- this.add(searchBox);
+ this.add(searchBox.getComponent());
this.add(displayName);
this.add(description);
}
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
+import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent;
}
/**
- * DOCUMENT ME!
+ * Shows a dialog for input of a URL at which to retrieve alignment data
*
- * @param e
- * DOCUMENT ME!
+ * @param viewport
*/
@Override
public void inputURLMenuItem_actionPerformed(AlignViewport viewport)
JLabel label = new JLabel(
MessageManager.getString("label.input_file_url"));
- JComboBox history = new JComboBox();
JPanel panel = new JPanel(new GridLayout(2, 1));
panel.add(label);
- panel.add(history);
- history.setPreferredSize(new Dimension(400, 20));
- history.setEditable(true);
- history.addItem("http://www.");
-
- String historyItems = jalview.bin.Cache.getProperty("RECENT_URL");
-
- StringTokenizer st;
-
- if (historyItems != null)
+
+ /*
+ * the URL to fetch is
+ * Java: an editable combobox with history
+ * JS: (pending JAL-3038) a plain text field
+ */
+ JComponent history;
+ String urlBase = "http://www.";
+ if (Jalview.isJS())
{
- st = new StringTokenizer(historyItems, "\t");
-
- while (st.hasMoreTokens())
+ history = new JTextField(urlBase, 35);
+ }
+ else
+ {
+ JComboBox<String> asCombo = new JComboBox<>();
+ asCombo.setPreferredSize(new Dimension(400, 20));
+ asCombo.setEditable(true);
+ asCombo.addItem(urlBase);
+ String historyItems = Cache.getProperty("RECENT_URL");
+ if (historyItems != null)
{
- history.addItem(st.nextElement());
+ for (String token : historyItems.split("\\t"))
+ {
+ asCombo.addItem(token);
+ }
}
+ history = asCombo;
}
+ panel.add(history);
- // BH 2018 -- providing a callback for SwingJS
- // dialogOption is just a simple way to provide
- // context for the modal-like response.
- // The only requirement is that desktop implement
- // PropertyChangeListener, which is used already in Java
- // for changes in input value and such within the dialogs.
+ Object[] options = new Object[] { MessageManager.getString("action.ok"),
+ MessageManager.getString("action.cancel") };
+ RunResponse action = new RunResponse(JvOptionPane.OK_OPTION) {
+ @Override
+ public void run()
+ {
+ String url = Jalview.isJS() ? ((JTextField) history).getText()
+ : ((JComboBox<String>) history).getSelectedItem()
+ .toString();
- String dialogOption = "label.input_alignment_from_url";
- desktop.dialogData = new Object[] { dialogOption, viewport, history };
- desktop.onDialogReturn(JvOptionPane.showInternalConfirmDialog(desktop,
- panel, MessageManager.getString(dialogOption),
- JvOptionPane.OK_CANCEL_OPTION));
+ if (url.toLowerCase().endsWith(".jar"))
+ {
+ if (viewport != null)
+ {
+ new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+ FileFormat.Jalview);
+ }
+ else
+ {
+ new FileLoader().LoadFile(url, DataSourceType.URL,
+ FileFormat.Jalview);
+ }
+ }
+ else
+ {
+ FileFormatI format = null;
+ try
+ {
+ format = new IdentifyFile().identify(url, DataSourceType.URL);
+ } catch (FileFormatException e)
+ {
+ // TODO revise error handling, distinguish between
+ // URL not found and response not valid
+ }
+
+ if (format == null)
+ {
+ String msg = MessageManager.formatMessage("label.couldnt_locate", url);
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop, msg,
+ MessageManager.getString("label.url_not_found"),
+ JvOptionPane.WARNING_MESSAGE);
- // no code may follow this, as SwingJS will not block
- // callback in JavaScript comes via a property change event,
- // thus going into desktop.onDialogReturn(int) just the same as
- // in Java.
+ return;
+ }
+ if (viewport != null)
+ {
+ new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+ format);
+ }
+ else
+ {
+ new FileLoader().LoadFile(url, DataSourceType.URL, format);
+ }
+ }
+ }};
+ String dialogOption = MessageManager
+ .getString("label.input_alignment_from_url");
+ JvOptionPane.newOptionDialog(desktop).response(action)
+ .showInternalDialog(panel, dialogOption,
+ JvOptionPane.YES_NO_CANCEL_OPTION,
+ JvOptionPane.PLAIN_MESSAGE, null, options,
+ MessageManager.getString("action.ok"));
}
/**
* @author AMW
*/
public class MyDesktopPane extends JDesktopPane
- implements Runnable, PropertyChangeListener
+ implements Runnable
{
-
- public Object[] dialogData;
-
- // @Override
- @Override
- public void propertyChange(PropertyChangeEvent event)
- {
- // TODO this is obsolete with JAL-3048 - delete?
- Object val = event.getNewValue();
- String name = event.getPropertyName();
- System.out.println(name);
- switch (event.getSource().getClass().getName())
- {
- case "javax.swing.JOptionPane":
- switch (name)
- {
- case "inputValue":
- onDialogReturn(val);
- return;
- case "value":
- if (val instanceof Integer)
- {
- onDialogReturn(((Integer) val).intValue());
- }
- else
- {
- onDialogReturn(val);
- }
- return;
- }
- break;
- case "javax.swing.JFileChooser":
- switch (name)
- {
- case "SelectedFile":
- // in JavaScript, this File object will have a _bytes property,
- // because the file data has already been loaded
- onDialogReturn(new Object[] { (File) val });
- return;
- }
- break;
- }
- System.out.println(event.getSource().getClass().getName() + " "
- + event.getPropertyName() + ": " + event.getNewValue());
- }
-
- // JSCOmponent.DialogCaller interface
- void onDialogReturn(Object value)
- {
- switch ((String) dialogData[0])
- {
- case "SelectedFile":
- case "runnable":
- dialogData[0] = value;
- ((Runnable) dialogData[1]).run();
- break;
- default:
- }
- }
-
- // JSCOmponent.DialogCaller interface
- void onDialogReturn(int value)
- {
- if (value != Math.floor(value))
- {
- // in JavaScript, this will be NaN, oddly enough
- return;
- }
-
- switch ((String) dialogData[0])
- {
- case "runnable":
- dialogData[0] = Integer.valueOf(value);
- ((Runnable) dialogData[1]).run();
- break;
- case "label.input_alignment_from_url":
- // reconstruct the parameter data
- int reply = value;
- AlignViewport viewport = (AlignViewport) dialogData[1];
- JComboBox history = (JComboBox) dialogData[2];
- // the rest of this is unchangaed
- if (reply != JvOptionPane.OK_OPTION)
- {
- return;
- }
-
- String url = history.getSelectedItem().toString();
-
- if (url.toLowerCase().endsWith(".jar"))
- {
- if (viewport != null)
- {
- new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
- FileFormat.Jalview);
- }
- else
- {
- new FileLoader().LoadFile(url, DataSourceType.URL,
- FileFormat.Jalview);
- }
- }
- else
- {
- FileFormatI format = null;
- try
- {
- format = new IdentifyFile().identify(url, DataSourceType.URL);
- } catch (FileFormatException e)
- {
- // TODO revise error handling, distinguish between
- // URL not found and response not valid
- }
-
- if (format == null)
- {
- JvOptionPane.showInternalMessageDialog(Desktop.desktop,
- MessageManager.formatMessage("label.couldnt_locate",
- new Object[]
- { url }),
- MessageManager.getString("label.url_not_found"),
- JvOptionPane.WARNING_MESSAGE);
-
- return;
- }
-
- if (viewport != null)
- {
- new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
- format);
- }
- else
- {
- new FileLoader().LoadFile(url, DataSourceType.URL, format);
- }
- }
-
- break;
- }
-
- }
-
private static final float ONE_MB = 1048576f;
boolean showMemoryUsage = false;
Desktop.addInternalFrame(frame, MessageManager.getString("label.find"),
MY_WIDTH, MY_HEIGHT);
frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
- searchBox.requestFocus();
+ searchBox.getComponent().requestFocus();
}
/**
List<SequenceI> seqs = new ArrayList<SequenceI>();
List<SequenceFeature> features = new ArrayList<SequenceFeature>();
- String searchString = searchBox.getEditor().getItem().toString().trim();
+ String searchString = searchBox.getUserInput();
String desc = "Search Results";
/*
{
createFeatures.setEnabled(false);
- String searchString = searchBox.getUserInput().trim();
+ String searchString = searchBox.getUserInput();
if (isInvalidSearchString(searchString))
{
seqIndex = 0;
JvOptionPane.showInternalMessageDialog(this,
MessageManager.getString("label.finished_searching"), null,
- JvOptionPane.INFORMATION_MESSAGE);
+ JvOptionPane.PLAIN_MESSAGE);
}
else
{
resIndex = -1;
seqIndex = 0;
JvOptionPane.showInternalMessageDialog(this, message, null,
- JvOptionPane.INFORMATION_MESSAGE);
+ JvOptionPane.PLAIN_MESSAGE);
}
}
}
package jalview.io.cache;
import jalview.bin.Cache;
+import jalview.bin.Jalview;
import jalview.util.MessageManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Set;
import javax.swing.JComboBox;
+import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
+import javax.swing.JTextField;
import javax.swing.SwingUtilities;
+import javax.swing.event.CaretListener;
+import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
-public class JvCacheableInputBox<E> extends JComboBox<String>
+/**
+ * A class that provides an editable combobox with a memory of previous entries
+ * that may be persisted
+ *
+ * @author tcofoegbu
+ *
+ * @param <E>
+ */
+/*
+ * (temporary?) patches to wrap a JTextField instead when running as Javascript
+ */
+public class JvCacheableInputBox<E>
{
+ private JComboBox<String> comboBox; // used for Jalview
- private static final long serialVersionUID = 5774610435079326695L;
+ private JTextField textField; // used for JalviewJS
- private static final int LEFT_BOARDER_WIDTH = 16;
+ private static final long serialVersionUID = 5774610435079326695L;
private String cacheKey;
return enterWasPressed;
}
+ /**
+ * Constructor
+ *
+ * @param newCacheKey
+ */
public JvCacheableInputBox(String newCacheKey)
{
super();
- this.cacheKey = newCacheKey;
- setEditable(true);
- addKeyListener(new KeyListener()
+ if (Jalview.isJS())
{
+ textField = new JTextField();
+ return;
+ }
+ this.cacheKey = newCacheKey;
+ comboBox = new JComboBox<String>();
+ comboBox.setEditable(true);
+ comboBox.addKeyListener(new KeyAdapter()
+ {
@Override
public void keyTyped(KeyEvent e)
{
}
// let event bubble up
}
-
- @Override
- public void keyReleased(KeyEvent e)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void keyPressed(KeyEvent e)
- {
- // TODO Auto-generated method stub
-
- }
});
- setPrototypeDisplayValue(
+ comboBox.setPrototypeDisplayValue(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
appCache = AppCache.getInstance();
initCachePopupMenu();
});
popup.add(menuItemClearCache);
- setComponentPopupMenu(popup);
- add(popup);
+ comboBox.setComponentPopupMenu(popup);
+ comboBox.add(popup);
}
/**
*/
public void updateCache()
{
+ if (Jalview.isJS())
+ {
+ return;
+ }
SwingUtilities.invokeLater(new Runnable()
{
@Override
}
String lastSearch = userInput;
- if (getItemCount() > 0)
+ if (comboBox.getItemCount() > 0)
{
- removeAllItems();
+ comboBox.removeAllItems();
}
Set<String> cacheItems = appCache.getAllCachedItemsFor(cacheKey);
List<String> reversedCacheItems = new ArrayList<>();
Collections.reverse(reversedCacheItems);
if (lastSearch.isEmpty())
{
- addItem("");
+ comboBox.addItem("");
}
if (reversedCacheItems != null && !reversedCacheItems.isEmpty())
}
else
{
- addItem(cacheItem);
+ comboBox.addItem(cacheItem);
}
}
else
{
- addItem(cacheItem);
+ comboBox.addItem(cacheItem);
}
}
appCache.putCache(cacheKey, foundCache);
*/
public void persistCache()
{
- appCache.persistCache(cacheKey);
+ if (!Jalview.isJS())
+ {
+ appCache.persistCache(cacheKey);
+ }
}
/**
- * Method to obtain input text from the cache box
+ * Returns the trimmed text in the input field
*
* @return
*/
public String getUserInput()
{
- return getEditor().getItem() == null ? ""
- : getEditor().getItem().toString().trim();
+ if (Jalview.isJS())
+ {
+ return textField.getText().trim();
+ }
+ Object item = comboBox.getEditor().getItem();
+ return item == null ? "" : item.toString().trim();
+ }
+
+ public JComponent getComponent()
+ {
+ return Jalview.isJS() ? textField : comboBox;
+ }
+
+ public void addActionListener(ActionListener actionListener)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.addActionListener(actionListener);
+ }
+ }
+
+ public void addDocumentListener(DocumentListener listener)
+ {
+ if (!Jalview.isJS())
+ {
+ ((JTextComponent) comboBox.getEditor().getEditorComponent())
+ .getDocument().addDocumentListener(listener);
+ }
+ }
+
+ public void addFocusListener(FocusListener focusListener)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.addFocusListener(focusListener);
+ }
+ }
+
+ public void addKeyListener(KeyListener kl)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.getEditor().getEditorComponent().addKeyListener(kl);
+ }
+ }
+
+ public void setEditable(boolean b)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.setEditable(b);
+ }
+ }
+
+ public void setPrototypeDisplayValue(String string)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.setPrototypeDisplayValue(string);
+ }
+ }
+
+ public void setSelectedItem(String userInput)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.setSelectedItem(userInput);
+ }
+ }
+
+ public boolean isPopupVisible()
+ {
+ if (!Jalview.isJS())
+ {
+ return comboBox.isPopupVisible();
+ }
+ return false;
+ }
+
+ public void addCaretListener(CaretListener caretListener)
+ {
+ if (!Jalview.isJS())
+ {
+ ((JTextComponent) comboBox.getEditor().getEditorComponent())
+ .addCaretListener(caretListener);
+ }
+ }
+
+ public void addItem(String item)
+ {
+ if (!Jalview.isJS())
+ {
+ comboBox.addItem(item);
+ }
}
}
addMenuActionAndAccelerator(keyStroke, closeMenuItem, al);
JMenu editMenu = new JMenu(MessageManager.getString("action.edit"));
- JMenu viewMenu = new JMenu(MessageManager.getString("action.view")) {
-
- public void setPopupMenuVisible(boolean b) {
- if (b) {
- openFeatureSettings.setEnabled(haveAlignmentFeatures());
- }
- super.setPopupMenuVisible(b);
- }
-
- };
+ JMenu viewMenu = new JMenu(MessageManager.getString("action.view"));
JMenu annotationsMenu = new JMenu(
MessageManager.getString("action.annotations"));
JMenu showMenu = new JMenu(MessageManager.getString("action.show"));
// selectMenu.add(listenToViewSelections);
}
- protected boolean haveAlignmentFeatures()
- {
- // because gAlignFrame is not an abstract class -- see AlignFrame
- return false;
- }
-
protected void loadVcf_actionPerformed()
{
}
import javax.swing.SwingUtilities;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
-import javax.swing.text.JTextComponent;
public class GFinder extends JPanel
{
createFeatures_actionPerformed();
}
});
- searchBox.setFont(new java.awt.Font("Verdana", Font.PLAIN, 12));
- ((JTextComponent) searchBox.getEditor().getEditorComponent())
- .addCaretListener(new CaretListener()
+ searchBox.getComponent()
+ .setFont(new java.awt.Font("Verdana", Font.PLAIN, 12));
+ searchBox.addCaretListener(new CaretListener()
{
@Override
public void caretUpdate(CaretEvent e)
textfield_caretUpdate(e);
}
});
- searchBox.getEditor().getEditorComponent()
- .addKeyListener(new java.awt.event.KeyAdapter()
+ searchBox.addKeyListener(new java.awt.event.KeyAdapter()
{
@Override
public void keyPressed(KeyEvent e)
actionsPanel.add(createFeatures, null);
this.add(jLabelFind, java.awt.BorderLayout.WEST);
this.add(actionsPanel, java.awt.BorderLayout.EAST);
- this.add(jPanel2, java.awt.BorderLayout.SOUTH);
+ // this.add(jPanel2, java.awt.BorderLayout.SOUTH);
this.add(jPanel3, java.awt.BorderLayout.NORTH);
this.add(jPanel4, java.awt.BorderLayout.CENTER);
- jPanel4.add(searchBox, java.awt.BorderLayout.NORTH);
+ jPanel4.add(searchBox.getComponent(), java.awt.BorderLayout.NORTH);
JPanel optionsPanel = new JPanel();
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import junit.extensions.PA;
+
public class PDBFTSPanelTest
{
{
PDBFTSPanel searchPanel = new PDBFTSPanel(null);
JInternalFrame mainFrame = searchPanel.getMainFrame();
- JComboBox<String> txt_search = searchPanel.getTxtSearch();
+// JComboBox<String> txt_search = PA.gsearchPanel.getTxtSearch();
assertTrue(mainFrame.getTitle().length() == 20);
assertTrue(mainFrame.getTitle()
.equalsIgnoreCase("PDB Sequence Fetcher"));
- txt_search.setSelectedItem("ABC");
+ PA.invokeMethod(PA.getValue(searchPanel, "txt_search"), "setSelectedItem(java.lang.String)", "ABC");
+ // txt_search.setSelectedItem("ABC");
try
{
// wait for web-service to handle response
try
{
- // This 1ms delay is essential to prevent the
+ // This delay is essential to prevent the
// assertion below from executing before
// swing thread finishes updating the combo-box
Thread.sleep(100);