Changeset 2111 in josm


Ignore:
Timestamp:
2009-09-13T11:17:48+02:00 (15 years ago)
Author:
Gubaer
Message:

applied #3473: patch by bastiK: fix some bugs of ToggleDialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r2021 r2111  
    88import java.awt.GridBagLayout;
    99import java.awt.Image;
     10import java.awt.Rectangle;
    1011import java.awt.event.ActionEvent;
    1112import java.awt.event.ActionListener;
     
    4142 */
    4243public class ToggleDialog extends JPanel implements Helpful {
    43     private static final Logger logger = Logger.getLogger(ToggleDialog.class.getName());
     44//    private static final Logger logger = Logger.getLogger(ToggleDialog.class.getName());
    4445
    4546    /**
     
    8182    private String title;
    8283
    83     /** indicates whether the dialog is currently minimized or not */
    84     private boolean collapsed;
    85     /** indicates whether the dialog is docked or not */
    86     private boolean docked;
    87     /** indicates whether the dialog is showing or not */
     84    /**
     85     * Indicates whether the dialog is showing or not.
     86     */
    8887    private boolean isShowing;
    89 
     88    /**
     89     * If isShowing is true, indicates whether the dialog is docked or not, e. g.
     90     * shown as part of the main window or as a seperate dialog window.
     91     */
     92    private boolean isDocked;
     93    /**
     94     * If isShowing and isDocked are true, indicates whether the dialog is
     95     * currently minimized or not.
     96     */
     97    private boolean isCollapsed;
     98
     99    /** the preferred width of all docked toggle dialogs */
     100    final private int TOGGLE_DIALOG_WIDTH = 330;
    90101    /** the preferred height if the toggle dialog is expanded */
    91102    private int preferredHeight;
     
    95106    private JDialog detachedDialog;
    96107
    97 
    98108    /**
    99109     * Constructor
     
    109119        this.preferencePrefix = iconName;
    110120        init(name, iconName, tooltip, shortcut, preferredHeight);
     121    }
     122
     123    /**
     124     * Initializes the toggle dialog
     125     *
     126     * @param name
     127     * @param iconName
     128     * @param tooltip
     129     * @param shortcut
     130     * @param preferredHeight
     131     */
     132    private void init(String name, String iconName, String tooltip, Shortcut shortcut, final int preferredHeight) {
     133        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH, preferredHeight));
     134        this.preferredHeight = preferredHeight;
     135        toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut, iconName);
     136        String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
     137        toggleAction.putValue("help", helpId.substring(0, helpId.length()-6));
     138
     139        setLayout(new BorderLayout());
     140
     141        // show the minimize button
     142        lblMinimized = new JLabel(ImageProvider.get("misc", "normal"));
     143        titleBar = new TitleBar(name, iconName);
     144        add(titleBar, BorderLayout.NORTH);
     145
     146        setVisible(false);
     147        setBorder(BorderFactory.createEtchedBorder());
     148
     149        isDocked = Main.pref.getBoolean(preferencePrefix+".docked", true);
     150        isCollapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
    111151    }
    112152
     
    126166
    127167    /**
    128      * Initializes the toggle dialog
    129      *
    130      * @param name
    131      * @param iconName
    132      * @param tooltip
    133      * @param shortcut
    134      * @param preferredHeight
    135      */
    136     private void init(String name, String iconName, String tooltip, Shortcut shortcut, final int preferredHeight) {
    137         setPreferredSize(new Dimension(330,preferredHeight));
    138         toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut, iconName);
    139         String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
    140         toggleAction.putValue("help", helpId.substring(0, helpId.length()-6));
    141 
    142         setLayout(new BorderLayout());
    143 
    144         // show the minimize button
    145         lblMinimized = new JLabel(ImageProvider.get("misc", "normal"));
    146         titleBar = new TitleBar(name, iconName);
    147         add(titleBar, BorderLayout.NORTH);
    148 
    149         setVisible(false);
    150         setBorder(BorderFactory.createEtchedBorder());
    151 
    152         docked = Main.pref.getBoolean(preferencePrefix+".docked", true);
    153         collapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
     168     * Toggles between collapsed and expanded state
     169     *
     170     */
     171    protected void toggleExpandedState() {
     172        if (isCollapsed) {
     173            expand();
     174        } else {
     175            collapse();
     176        }
    154177    }
    155178
     
    160183    protected void collapse() {
    161184        setContentVisible(false);
    162         this.collapsed = true;
     185        isCollapsed = true;
    163186        Main.pref.put(preferencePrefix+".minimized", true);
    164         setPreferredSize(new Dimension(330,20));
    165         setMaximumSize(new Dimension(330,20));
     187        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH,20));
     188        setMaximumSize(new Dimension(TOGGLE_DIALOG_WIDTH,20));
    166189        lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
    167190        refreshToggleDialogsView();
     
    173196    protected void expand() {
    174197        setContentVisible(true);
    175         this.collapsed = false;
     198        isCollapsed = false;
    176199        Main.pref.put(preferencePrefix+".minimized", false);
    177         setPreferredSize(new Dimension(330,preferredHeight));
     200        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH,preferredHeight));
    178201        setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
    179202        lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
     
    228251        }
    229252        titleBar.setVisible(true);
    230         collapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
    231         if (collapsed) {
     253        isCollapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
     254        if (isCollapsed) {
    232255            collapse();
    233256        } else {
    234257            expand();
    235258        }
    236         docked = true;
    237         Main.pref.put(preferencePrefix+".docked", docked);
     259        isDocked = true;
     260        Main.pref.put(preferencePrefix+".docked", isDocked);
    238261    }
    239262
     
    245268        setContentVisible(true);
    246269        setVisible(true);
    247 
    248270        // replace the toggle dialog by an invisible place holder. Makes sure
    249271        // we can place the toggle dialog where it was when it becomes docked
     
    260282            parent.remove(ToggleDialog.this);
    261283        }
     284       
    262285
    263286        titleBar.setVisible(false);
     
    265288        detachedDialog.setVisible(true);
    266289        refreshToggleDialogsView();
    267         docked = false;
    268         Main.pref.put(preferencePrefix+".docked", docked);
     290        isDocked = false;
     291        Main.pref.put(preferencePrefix+".docked", isDocked);
    269292    }
    270293
     
    273296     */
    274297    public void hideDialog() {
    275         if (detachedDialog != null) {
    276             detachedDialog.setVisible(false);
    277             detachedDialog.getContentPane().removeAll();
    278             detachedDialog.dispose();
    279         }
     298        closeDetachedDialog();
    280299        setVisible(false);
    281300        isShowing = false;
     
    296315     */
    297316    public void showDialog() {
    298         if (!docked) {
     317        if (!isDocked) {
    299318            detach();
    300319        } else {
    301320            dock();
    302             if (!collapsed) {
     321            if (!isCollapsed) {
    303322                expand();
    304323                setVisible(true);
     
    311330        isShowing = true;
    312331        // toggling the selected value in order to enforce PropertyChangeEvents
    313         //
    314332        toggleAction.putValue("selected", false);
    315333        toggleAction.putValue("selected", true);
     
    318336
    319337    /**
    320      * Toggles between collapsed and expanded state
    321      *
    322      */
    323     protected void toggleExpandedState() {
    324         if (this.collapsed) {
    325             expand();
    326         } else {
    327             collapse();
    328         }
    329     }
    330 
    331     /**
    332338     * Refreshes the layout of the parent toggle dialog view
    333339     *
     
    347353        if (detachedDialog != null) {
    348354            detachedDialog.setVisible(false);
    349             detachedDialog.removeAll();
     355            detachedDialog.getContentPane().removeAll();
    350356            detachedDialog.dispose();
    351357        }
     
    387393    /**
    388394     * Replies the name of this toggle dialog
     395     *
    389396     */
    390397    @Override
     
    474481    private class DetachedDialog extends JDialog {
    475482        public DetachedDialog() {
    476             super(JOptionPane.getFrameForComponent(Main.parent),false /* not modal*/);
     483            super(JOptionPane.getFrameForComponent(Main.parent));
    477484            getContentPane().add(ToggleDialog.this);
    478485            addWindowListener(new WindowAdapter(){
    479486                @Override public void windowClosing(WindowEvent e) {
     487                    rememberGeometry();
    480488                    getContentPane().removeAll();
    481489                    dispose();
     
    483491                }
    484492            });
    485             addComponentListener(new ComponentAdapter(){
    486                 @Override public void componentMoved(ComponentEvent e) {
    487                     rememberGeometry();
    488                 }
    489             });
    490493            String bounds = Main.pref.get(preferencePrefix+".bounds",null);
    491494            if (bounds != null) {
    492495                String[] b = bounds.split(",");
    493                 setBounds(Integer.parseInt(b[0]),Integer.parseInt(b[1]),Integer.parseInt(b[2]),Integer.parseInt(b[3]));
     496                setBounds(getDetachedGeometry(new Rectangle(
     497                        Integer.parseInt(b[0]),Integer.parseInt(b[1]),Integer.parseInt(b[2]),Integer.parseInt(b[3]))));
    494498            } else {
     499                ToggleDialog.this.setPreferredSize(ToggleDialog.this.getDefaultDetachedSize());
    495500                pack();
    496 
     501                setLocationRelativeTo(Main.parent);
    497502            }
    498503            setTitle(titleBar.getTitle());
     
    503508        }
    504509    }
     510
     511    /**
     512     * Change the Geometry of the detached dialog to better fit the content.
     513     * Overrride this to make it useful.
     514     */
     515    protected Rectangle getDetachedGeometry(Rectangle last) {
     516        return last;
     517    }
     518   
     519    /**
     520     * Default size of the detached dialog.
     521     * Override this method to customize the initial dialog size.
     522     */
     523    protected Dimension getDefaultDetachedSize() {
     524        return new Dimension(TOGGLE_DIALOG_WIDTH, preferredHeight);
     525    }
    505526}
Note: See TracChangeset for help on using the changeset viewer.