import jalview.util.Platform;
import jalview.viewmodel.AlignmentViewport;
+import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
+import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
FeatureSettingsControllerGuiI featureSettings)
{
boolean showInternalFrame = false;
- if (featureSettingsUI == null)
+ if (featureSettingsUI == null || featureSettingsPanels == null)
{
showInternalFrame = true;
featureSettingsPanels = new JTabbedPane();
- featureSettingsUI = new JInternalFrame(
- "Feature Settings for CDS and Protein Views");
+ featureSettingsUI = new JInternalFrame(MessageManager.getString(
+ "label.sequence_feature_settings_for_CDS_and_Protein"));
featureSettingsPanels.setOpaque(true);
- featureSettingsUI.setContentPane(featureSettingsPanels);
- JPanel dummyDNA = new JPanel(),dummyProtein=new JPanel();
- FocusListener fl1 = new FocusListener()
+
+ JPanel dialog = new JPanel();
+ dialog.setOpaque(true);
+ dialog.setLayout(new BorderLayout());
+ dialog.add(featureSettingsPanels, BorderLayout.CENTER);
+ JPanel buttons = new JPanel();
+ JButton ok = new JButton(MessageManager.getString("action.ok"));
+ ok.addActionListener(new ActionListener()
{
@Override
- public void focusLost(FocusEvent e)
+ public void actionPerformed(ActionEvent e)
{
- // TODO Auto-generated method stub
-
+ try
+ {
+ featureSettingsUI.setClosed(true);
+ } catch (PropertyVetoException pv)
+ {
+ pv.printStackTrace();
+ }
}
+ });
+ JButton cancel = new JButton(
+ MessageManager.getString("action.cancel"));
+ cancel.addActionListener(new ActionListener()
+ {
@Override
- public void focusGained(FocusEvent e)
+ public void actionPerformed(ActionEvent e)
{
- int tab = featureSettingsPanels.getSelectedIndex();
- getAlignFrames().get(tab).showFeatureSettingsUI();
+ try
+ {
+ for (Component fspanel : featureSettingsPanels.getComponents())
+ {
+ if (fspanel instanceof FeatureSettingsControllerGuiI)
+ {
+ ((FeatureSettingsControllerGuiI) fspanel).revert();
+ }
+ }
+ featureSettingsUI.setClosed(true);
+ } catch (Exception pv)
+ {
+ pv.printStackTrace();
+ }
}
- };
- dummyDNA.addFocusListener(fl1);
- dummyProtein.addFocusListener(fl1);
-
- featureSettingsPanels.addTab("CDS", dummyDNA);
- featureSettingsPanels.addTab("Protein", dummyProtein);
+ });
+ buttons.add(ok);
+ buttons.add(cancel);
+ dialog.add(buttons, BorderLayout.SOUTH);
+ featureSettingsUI.setContentPane(dialog);
+ createDummyTabs();
}
if (featureSettingsPanels
.indexOfTabComponent((Component) featureSettings) > -1)
if (pos == 0)
{
featureSettingsPanels.removeTabAt(0);
- featureSettingsPanels.insertTab("CDS", null,
- (Component) featureSettings, "Feature Settings for DNA CDS",
+ featureSettingsPanels.insertTab(tabName[0], null,
+ (Component) featureSettings,
+ MessageManager.formatMessage(
+ "label.sequence_feature_settings_for", tabName[0]),
0);
}
if (pos == 1)
{
featureSettingsPanels.removeTabAt(1);
- featureSettingsPanels.insertTab("Protein", null,
- (Component) featureSettings, "Feature Settings for Protein",
+ featureSettingsPanels.insertTab(tabName[1], null,
+ (Component) featureSettings,
+ MessageManager.formatMessage(
+ "label.sequence_feature_settings_for", tabName[1]),
1);
}
featureSettingsPanels.setSelectedComponent((Component) featureSettings);
+
+ // TODO: JAL-3535 - construct a feature settings title including names of
+ // currently selected CDS and Protein names
+
if (showInternalFrame)
{
if (Platform.isAMac())
{
Desktop.addInternalFrame(featureSettingsUI,
MessageManager.getString(
- "Feature Settings for CDS and Protein Views"),
+ "label.sequence_feature_settings_for_CDS_and_Protein"),
600, 480);
}
else
{
Desktop.addInternalFrame(featureSettingsUI,
MessageManager.getString(
- "Feature Settings for CDS and Protein Views"),
+ "label.sequence_feature_settings_for_CDS_and_Protein"),
600, 450);
}
featureSettingsUI
if (fsettings != null)
{
featureSettingsPanels.removeTabAt(tab);
- fsettings.closeFeatureSettings();
+ fsettings.featureSettings_isClosed();
}
else
{
}
}
+ /*
+ * for materialising feature settings for a tab when clicked on
+ */
+ private FocusListener fl1 = new FocusListener()
+ {
+
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void focusGained(FocusEvent e)
+ {
+ int tab = featureSettingsPanels.getSelectedIndex();
+ getAlignFrames().get(tab).showFeatureSettingsUI();
+ }
+ };
+
+ /**
+ * tab names for feature settings
+ */
+ private String[] tabName = new String[] {
+ MessageManager.getString("label.CDS"),
+ MessageManager.getString("label.protein") };
+
+ /**
+ * create placeholder tabs which materialise the feature settings for a given
+ * view. Also reinitialises any tabs containing stale feature settings
+ */
+ private void createDummyTabs()
+ {
+ for (int tabIndex = 0; tabIndex < 2; tabIndex++)
+ {
+ JPanel dummyTab = new JPanel();
+ dummyTab.addFocusListener(fl1);
+ featureSettingsPanels.addTab(tabName[tabIndex], dummyTab);
+ }
+ }
+
+ private void replaceWithDummyTab(FeatureSettingsControllerI toClose)
+ {
+ Component dummyTab = null;
+ for (int tabIndex = 0; tabIndex < 2; tabIndex++)
+ {
+ if (featureSettingsPanels.getTabCount() > tabIndex)
+ {
+ dummyTab = featureSettingsPanels.getTabComponentAt(tabIndex);
+ if (dummyTab instanceof FeatureSettingsControllerGuiI
+ && !dummyTab.isVisible())
+ {
+ featureSettingsPanels.removeTabAt(tabIndex);
+ // close the feature Settings tab
+ ((FeatureSettingsControllerGuiI) dummyTab)
+ .featureSettings_isClosed();
+ // create a dummy tab in its place
+ dummyTab = new JPanel();
+ dummyTab.addFocusListener(fl1);
+ featureSettingsPanels.insertTab(tabName[tabIndex], null, dummyTab,
+ MessageManager.formatMessage(
+ "label.sequence_feature_settings_for",
+ tabName[tabIndex]),
+ tabIndex);
+ }
+ }
+ }
+ }
+
@Override
public void closeFeatureSettings(
- FeatureSettingsControllerI featureSettings)
+ FeatureSettingsControllerI featureSettings,
+ boolean closeContainingFrame)
{
if (featureSettingsUI != null)
{
- try
+ if (closeContainingFrame)
{
- featureSettingsUI.setClosed(true);
- } catch (Exception x)
+ try
+ {
+ featureSettingsUI.setClosed(true);
+ } catch (Exception x)
+ {
+ }
+ featureSettingsUI = null;
+ }
+ else
{
+ replaceWithDummyTab(featureSettings);
}
- featureSettingsUI = null;
}
}
+
+ @Override
+ public boolean isFeatureSettingsOpen()
+ {
+ return featureSettingsUI != null && !featureSettingsUI.isClosed();
+ }
}
\ No newline at end of file