X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=63ba101d334ccfb5e947f19354c4a526e2b8f160;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=4b9d90fb031875ebdbae9f84eb403976b6aab312;hpb=be2991221f61799469e24b163d28ff58851d935f;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 4b9d90f..63ba101 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -95,6 +95,7 @@ import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Panel; +import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; @@ -106,6 +107,7 @@ import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.util.Arrays; @@ -234,6 +236,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel); viewport.updateConservation(alignPanel); viewport.updateConsensus(alignPanel); + viewport.initInformationWorker(alignPanel); displayNonconservedMenuItem.setState(viewport.getShowUnconserved()); followMouseOverFlag.setState(viewport.isFollowHighlight()); @@ -343,7 +346,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, createAlignFrameWindow(embedded); validate(); alignPanel.adjustAnnotationHeight(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); } public AlignViewport getAlignViewport() @@ -415,8 +418,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { viewport.featureSettings.refreshTable(); } - alignPanel.paintAlignment(true); - statusBar.setText(MessageManager + alignPanel.paintAlignment(true, true); + setStatus(MessageManager .getString("label.successfully_added_features_alignment")); } return featuresFile; @@ -574,8 +577,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, case KeyEvent.VK_F2: viewport.cursorMode = !viewport.cursorMode; - statusBar.setText(MessageManager - .formatMessage("label.keyboard_editing_mode", new String[] + setStatus(MessageManager.formatMessage("label.keyboard_editing_mode", + new String[] { (viewport.cursorMode ? "on" : "off") })); if (viewport.cursorMode) { @@ -691,7 +694,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, break; } - alignPanel.paintAlignment(true); + // TODO: repaint flags set only if the keystroke warrants it + alignPanel.paintAlignment(true, true); } /** @@ -879,7 +883,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } else if (source == autoCalculate) { - viewport.autoCalculateConsensus = autoCalculate.getState(); + viewport.setAutoCalculateConsensusAndConservation(autoCalculate.getState()); } else if (source == sortByTree) { @@ -917,7 +921,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { applyAutoAnnotationSettings_actionPerformed(); } - alignPanel.paintAlignment(true); + // TODO: repaint flags set only if warranted + alignPanel.paintAlignment(true, true); } /** @@ -1094,7 +1099,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == invertColSel) { viewport.invertColumnSelection(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(false, false); viewport.sendSelection(); } else if (source == remove2LeftMenuItem) @@ -1128,34 +1133,34 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == showColumns) { viewport.showAllHiddenColumns(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); viewport.sendSelection(); } else if (source == showSeqs) { viewport.showAllHiddenSeqs(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); // uncomment if we want to slave sequence selections in split frame // viewport.sendSelection(); } else if (source == hideColumns) { viewport.hideSelectedColumns(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); viewport.sendSelection(); } else if (source == hideSequences && viewport.getSelectionGroup() != null) { viewport.hideAllSelectedSeqs(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); // uncomment if we want to slave sequence selections in split frame // viewport.sendSelection(); } else if (source == hideAllButSelection) { toggleHiddenRegions(false, false); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); viewport.sendSelection(); } else if (source == hideAllSelection) @@ -1164,14 +1169,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.expandColSelection(sg, false); viewport.hideAllSelectedSeqs(); viewport.hideSelectedColumns(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); viewport.sendSelection(); } else if (source == showAllHidden) { viewport.showAllHiddenColumns(); viewport.showAllHiddenSeqs(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); viewport.sendSelection(); } else if (source == showGroupConsensus) @@ -1200,7 +1205,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } else if (source == featureSettings) { - new FeatureSettings(alignPanel); + showFeatureSettingsUI(); } else if (source == alProperties) { @@ -1320,6 +1325,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { sortGroupMenuItem_actionPerformed(); } + else if (source == sortEValueMenuItem) + { + sortEValueMenuItem_actionPerformed(); + } + else if (source == sortBitScoreMenuItem) + { + sortBitScoreMenuItem_actionPerformed(); + } else if (source == removeRedundancyMenuItem) { removeRedundancyMenuItem_actionPerformed(); @@ -1443,15 +1456,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, FeaturesFile formatter = new FeaturesFile(); if (format.equalsIgnoreCase("Jalview")) { - features = formatter.printJalviewFormat(viewport.getAlignment() - .getSequencesArray(), getDisplayedFeatureCols(), - getDisplayedFeatureGroups(), true); + features = formatter.printJalviewFormat( + viewport.getAlignment().getSequencesArray(), + alignPanel.getFeatureRenderer(), true, false); } else { - features = formatter.printGffFormat(viewport.getAlignment() - .getSequencesArray(), getDisplayedFeatureCols(), - getDisplayedFeatureGroups(), true); + features = formatter.printGffFormat( + viewport.getAlignment().getSequencesArray(), + alignPanel.getFeatureRenderer(), true, false); } if (displayTextbox) @@ -1568,7 +1581,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, try { new URL(url); - url = URLEncoder.encode(url); + url = URLEncoder.encode(url, "UTF-8"); } /* * When we finally deprecate 1.1 compatibility, we can start to use @@ -1580,6 +1593,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, catch (java.net.MalformedURLException ex) { url = viewport.applet.getCodeBase() + url; + } catch (UnsupportedEncodingException ex) + { + System.err.println( + "WARNING = IMPLEMENTATION ERROR - UNSUPPORTED ENCODING EXCEPTION FOR " + + url); + ex.printStackTrace(); } return url; } @@ -1690,8 +1709,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // viewport.getColumnSelection().getHiddenColumns() // != null; updateEditMenuBar(); - originalSource.firePropertyChange("alignment", null, - originalSource.getAlignment().getSequences()); + originalSource.notifyAlignment(); } /** @@ -1723,8 +1741,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // != null; updateEditMenuBar(); - originalSource.firePropertyChange("alignment", null, - originalSource.getAlignment().getSequences()); + originalSource.notifyAlignment(); } AlignmentViewport getOriginatingSource(CommandI command) @@ -1783,7 +1800,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } viewport.getAlignment().moveSelectedSequencesByOne(sg, up ? null : viewport.getHiddenRepSequences(), up); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); /* * Also move cDNA/protein complement sequences @@ -1795,7 +1812,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport, complement); complement.getAlignment().moveSelectedSequencesByOne(mappedSelection, up ? null : complement.getHiddenRepSequences(), up); - getSplitFrame().getComplement(this).alignPanel.paintAlignment(true); + getSplitFrame().getComplement(this).alignPanel.paintAlignment(true, + false); } } @@ -1902,7 +1920,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, static StringBuffer copiedSequences; - static Vector copiedHiddenColumns; + static HiddenColumns copiedHiddenColumns; protected void copy_actionPerformed() { @@ -1926,14 +1944,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.hasHiddenColumns() && viewport.getSelectionGroup() != null) { - copiedHiddenColumns = new Vector<>(viewport.getAlignment() - .getHiddenColumns().getHiddenColumnsCopy()); int hiddenOffset = viewport.getSelectionGroup().getStartRes(); - for (int[] region : copiedHiddenColumns) - { - region[0] = region[0] - hiddenOffset; - region[1] = region[1] - hiddenOffset; - } + int hiddenCutoff = viewport.getSelectionGroup().getEndRes(); + + // create new HiddenColumns object with copy of hidden regions + // between startRes and endRes, offset by startRes + copiedHiddenColumns = new HiddenColumns( + viewport.getAlignment().getHiddenColumns(), hiddenOffset, + hiddenCutoff, hiddenOffset); } else { @@ -2002,13 +2020,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { try { - if (copiedSequences == null) { return; } - StringTokenizer st = new StringTokenizer(copiedSequences.toString()); + StringTokenizer st = new StringTokenizer(copiedSequences.toString(), + "\t"); Vector seqs = new Vector(); while (st.hasMoreElements()) { @@ -2040,14 +2058,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } AlignFrame af = new AlignFrame(new Alignment(newSeqs), viewport.applet, newtitle, false); - if (copiedHiddenColumns != null) - { - for (int i = 0; i < copiedHiddenColumns.size(); i++) - { - int[] region = copiedHiddenColumns.elementAt(i); - af.viewport.hideColumns(region[0], region[1]); - } - } + af.viewport.setHiddenColumns(copiedHiddenColumns); jalview.bin.JalviewLite.addFrame(af, newtitle, frameWidth, frameHeight); @@ -2076,10 +2087,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, seqs, 0, viewport.getAlignment().getWidth(), viewport.getAlignment())); - viewport.getRanges().setEndSeq(viewport.getAlignment().getHeight()); + viewport.getRanges().setEndSeq(viewport.getAlignment().getHeight() - 1); // BH + // 2019.04.18 viewport.getAlignment().getWidth(); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + viewport.notifyAlignment(); } @@ -2153,8 +2164,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.setSelectionGroup(null); viewport.getAlignment().deleteGroup(sg); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + viewport.notifyAlignment(); if (viewport.getAlignment().getHeight() < 1) { @@ -2228,7 +2238,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.updateAnnotation(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); } } @@ -2265,7 +2275,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // JAL-2034 - should delegate to // alignPanel to decide if overview needs // updating. - alignPanel.paintAlignment(false); + alignPanel.paintAlignment(false, false); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); viewport.sendSelection(); } @@ -2285,7 +2295,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // JAL-2034 - should delegate to // alignPanel to decide if overview needs // updating. - alignPanel.paintAlignment(false); + alignPanel.paintAlignment(false, false); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); viewport.sendSelection(); } @@ -2305,7 +2315,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void invertColSel_actionPerformed() { viewport.invertColumnSelection(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); viewport.sendSelection(); } @@ -2352,8 +2362,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, column, al); } - statusBar.setText(MessageManager - .formatMessage("label.removed_columns", new String[] + setStatus(MessageManager.formatMessage("label.removed_columns", + new String[] { Integer.valueOf(trimRegion.getSize()).toString() })); addHistoryItem(trimRegion); @@ -2366,7 +2376,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } - viewport.firePropertyChange("alignment", null, al.getSequences()); + viewport.notifyAlignment(); } } @@ -2396,8 +2406,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, addHistoryItem(removeGapCols); - statusBar.setText(MessageManager - .formatMessage("label.removed_empty_columns", new String[] + setStatus(MessageManager.formatMessage("label.removed_empty_columns", + new String[] { Integer.valueOf(removeGapCols.getSize()).toString() })); // This is to maintain viewport position on first residue @@ -2410,7 +2420,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // if (viewport.hasHiddenColumns) // viewport.getColumnSelection().compensateForEdits(shifts); ranges.setStartRes(seq.findIndex(startRes) - 1); - viewport.firePropertyChange("alignment", null, al.getSequences()); + viewport.notifyAlignment(); } @@ -2444,7 +2454,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ranges.setStartRes(seq.findIndex(startRes) - 1); - viewport.firePropertyChange("alignment", null, al.getSequences()); + viewport.notifyAlignment(); } @@ -2597,19 +2607,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { viewport.setShowJVSuffix(seqLimits.getState()); alignPanel.fontChanged(); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } protected void colourTextMenuItem_actionPerformed() { viewport.setColourText(colourTextMenuItem.getState()); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(false, false); } protected void displayNonconservedMenuItem_actionPerformed() { viewport.setShowUnconserved(displayNonconservedMenuItem.getState()); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(false, false); } protected void wrapMenuItem_actionPerformed() @@ -2619,7 +2629,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, scaleAbove.setEnabled(wrapMenuItem.getState()); scaleLeft.setEnabled(wrapMenuItem.getState()); scaleRight.setEnabled(wrapMenuItem.getState()); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } public void overviewMenuItem_actionPerformed() @@ -2662,7 +2672,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { viewport.setGlobalColourScheme(cs); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, true); } protected void modifyPID_actionPerformed() @@ -2737,7 +2747,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.getAlignment())); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } public void sortIDMenuItem_actionPerformed() @@ -2746,7 +2756,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, AlignmentSorter.sortByID(viewport.getAlignment()); addHistoryItem( new OrderCommand("ID Sort", oldOrder, viewport.getAlignment())); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } public void sortLengthMenuItem_actionPerformed() @@ -2755,7 +2765,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, AlignmentSorter.sortByLength(viewport.getAlignment()); addHistoryItem(new OrderCommand("Length Sort", oldOrder, viewport.getAlignment())); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } public void sortGroupMenuItem_actionPerformed() @@ -2764,7 +2774,27 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, AlignmentSorter.sortByGroup(viewport.getAlignment()); addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.getAlignment())); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); + + } + + public void sortEValueMenuItem_actionPerformed() + { + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortByEValue(viewport.getAlignment()); + addHistoryItem(new OrderCommand("Group Sort", oldOrder, + viewport.getAlignment())); + alignPanel.paintAlignment(true, false); + + } + + public void sortBitScoreMenuItem_actionPerformed() + { + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); + AlignmentSorter.sortByBitScore(viewport.getAlignment()); + addHistoryItem(new OrderCommand("Group Sort", oldOrder, + viewport.getAlignment())); + alignPanel.paintAlignment(true, false); } @@ -2804,7 +2834,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, current.insertCharAt(Width - 1, viewport.getGapCharacter()); } } - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(false, false); } if ((viewport.getSelectionGroup() != null @@ -2868,7 +2898,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, current.insertCharAt(Width - 1, viewport.getGapCharacter()); } } - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(false, false); } @@ -2921,7 +2951,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, addHistoryItem(new OrderCommand(MessageManager .formatMessage("label.order_by_params", new String[] { title }), oldOrder, viewport.getAlignment())); - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); } /** @@ -2979,7 +3009,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, addHistoryItem(new OrderCommand(undoname, oldOrder, viewport.getAlignment())); } - alignPanel.paintAlignment(true); + alignPanel.paintAlignment(true, false); return true; } @@ -3118,6 +3148,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem sortGroupMenuItem = new MenuItem(); + MenuItem sortEValueMenuItem = new MenuItem(); + + MenuItem sortBitScoreMenuItem = new MenuItem(); + MenuItem removeRedundancyMenuItem = new MenuItem(); MenuItem pairwiseAlignmentMenuItem = new MenuItem(); @@ -3515,17 +3549,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, hydrophobicityColour.setLabel( MessageManager.getString("label.colourScheme_hydrophobic")); hydrophobicityColour.addActionListener(this); - helixColour.setLabel(MessageManager - .getString("label.colourScheme_helix_propensity")); + helixColour.setLabel( + MessageManager.getString("label.colourScheme_helixpropensity")); helixColour.addActionListener(this); strandColour.setLabel(MessageManager - .getString("label.colourScheme_strand_propensity")); + .getString("label.colourScheme_strandpropensity")); strandColour.addActionListener(this); turnColour.setLabel( - MessageManager.getString("label.colourScheme_turn_propensity")); + MessageManager.getString("label.colourScheme_turnpropensity")); turnColour.addActionListener(this); buriedColour.setLabel( - MessageManager.getString("label.colourScheme_buried_index")); + MessageManager.getString("label.colourScheme_buriedindex")); buriedColour.addActionListener(this); purinePyrimidineColour.setLabel(MessageManager .getString("label.colourScheme_purine/pyrimidine")); @@ -3534,19 +3568,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // .getString("label.rna_interaction")); // RNAInteractionColour.addActionListener(this); RNAHelixColour.setLabel( - MessageManager.getString("label.colourScheme_rna_helices")); + MessageManager.getString("label.colourScheme_rnahelices")); RNAHelixColour.addActionListener(this); userDefinedColour .setLabel(MessageManager.getString("action.user_defined")); userDefinedColour.addActionListener(this); PIDColour.setLabel( - MessageManager.getString("label.colourScheme_%_identity")); + MessageManager.getString("label.colourScheme_%identity")); PIDColour.addActionListener(this); BLOSUM62Colour.setLabel( MessageManager.getString("label.colourScheme_blosum62")); BLOSUM62Colour.addActionListener(this); tcoffeeColour.setLabel( - MessageManager.getString("label.colourScheme_t-coffee_scores")); + MessageManager.getString("label.colourScheme_t-coffeescores")); // it will be enabled only if a score file is provided tcoffeeColour.setEnabled(false); tcoffeeColour.addActionListener(this); @@ -3818,7 +3852,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, */ statusBar.setBackground(Color.white); statusBar.setFont(new java.awt.Font("Verdana", 0, 11)); - statusBar.setText(MessageManager.getString("label.status_bar")); + setStatus(MessageManager.getString("label.status_bar")); this.add(statusBar, BorderLayout.SOUTH); } @@ -3958,7 +3992,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * without an additional javascript library to exchange messages between the * distinct applets. See http://issues.jalview.org/browse/JAL-621 * - * @param viewer + * @param jmolViewer * JmolViewer instance * @param sequenceIds * - sequence Ids to search for associations @@ -4146,7 +4180,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { // register the association(s) and quit, don't create any windows. if (StructureSelectionManager.getStructureSelectionManager(applet) - .setMapping(seqs, chains, pdb.getFile(), protocol) == null) + .setMapping(seqs, chains, pdb.getFile(), protocol, + null) == null) { System.err.println("Failed to map " + pdb.getFile() + " (" + protocol + ") to any sequences"); @@ -4186,7 +4221,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } else { - new MCview.AppletPDBViewer(pdb, seqs, chains, alignPanel, protocol); + new mc_view.AppletPDBViewer(pdb, seqs, chains, alignPanel, protocol); } } @@ -4334,4 +4369,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, return alignPanel.av.featureSettings; } + @Override + public FeatureSettingsControllerI showFeatureSettingsUI() + { + return new FeatureSettings(alignPanel); + } + + private Rectangle fs_bounds = null; + + @Override + public void setFeatureSettingsGeometry(Rectangle bounds) + { + fs_bounds = bounds; + } + + @Override + public Rectangle getFeatureSettingsGeometry() + { + return fs_bounds; + } + }