Changeset 3178 in josm for trunk/src


Ignore:
Timestamp:
2010-04-11T20:29:30+02:00 (10 years ago)
Author:
bastiK
Message:
  • disable all filters if the filter dialog is not visible
  • show the number of hidden/disabled object on screen in the upper right corner
  • slightly different behaviour for showNotify and hideNotify in ToggleDialog (Now, expanding and collapsing a dialog does not trigger these notifications.)
Location:
trunk/src/org/openstreetmap/josm
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/Filters.java

    r3083 r3178  
    11package org.openstreetmap.josm.data.osm;
    22
     3import static org.openstreetmap.josm.tools.I18n.tr;
    34import static org.openstreetmap.josm.tools.I18n.trc;
     5
     6import java.awt.Color;
     7import java.awt.Font;
     8import java.awt.Graphics;
     9import java.awt.Graphics2D;
    410
    511import java.util.Collection;
     
    814import java.util.Map;
    915
     16import javax.swing.BorderFactory;
     17import javax.swing.JLabel;
    1018import javax.swing.table.AbstractTableModel;
    1119
     
    2735
    2836    private List<Filter> filters = new LinkedList<Filter>();
    29     public void filter(){
     37
     38    public void executeFilters(){
    3039        Collection<OsmPrimitive> seld = new LinkedList<OsmPrimitive> ();
    3140        Collection<OsmPrimitive> self = new LinkedList<OsmPrimitive> ();
     
    5665    }
    5766
    58     private void loadPrefs(){
     67    public void clearFilterFlags() {
     68        DataSet ds = Main.main.getCurrentDataSet();
     69        if (ds != null) {
     70            ds.setFiltered();
     71            ds.setDisabled();
     72        }
     73        disabledCount = 0;
     74        hiddenCount = 0;
     75        Main.map.mapView.repaint();
     76    }
     77
     78
     79    private void loadPrefs() {
    5980        Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
    6081        for (String value : prefs.values()) {
     
    88109        filters.add(f);
    89110        savePref(filters.size()-1);
    90         filter();
     111        executeFilters();
    91112        fireTableRowsInserted(filters.size()-1, filters.size()-1);
    92113    }
     
    97118        savePref(i);
    98119        savePref(i+1);
    99         filter();
     120        executeFilters();
    100121        fireTableRowsUpdated(i, i+1);
    101122    }
     
    106127        savePref(i);
    107128        savePref(i-1);
    108         filter();
     129        executeFilters();
    109130        fireTableRowsUpdated(i-1, i);
    110131    }
     
    113134        filters.remove(i);
    114135        savePrefs();
    115         filter();
     136        executeFilters();
    116137        fireTableRowsDeleted(i, i);
    117138    }
     
    120141        filters.set(i, f);
    121142        savePref(i);
    122         filter();
     143        executeFilters();
    123144        fireTableRowsUpdated(i, i);
    124145    }
     
    171192        Filter f = filters.get(row);
    172193        switch(column){
    173         case 0: f.enable = (Boolean)aValue;
    174         savePref(row);
    175         filter();
    176         fireTableRowsUpdated(row, row);
    177         break;
    178         case 1: f.hide = (Boolean)aValue;
    179         savePref(row);
    180         filter();
    181         break;
    182         case 2: f.text = (String)aValue;
    183         savePref(row);
    184         break;
    185         case 3: f.applyForChildren = (Boolean)aValue;
    186         savePref(row);
    187         filter();
    188         break;
    189         case 4: f.inverted = (Boolean)aValue;
    190         savePref(row);
    191         filter();
    192         break;
     194        case 0:
     195            f.enable = (Boolean)aValue;
     196            savePref(row);
     197            executeFilters();
     198            fireTableRowsUpdated(row, row);
     199            break;
     200        case 1:
     201            f.hide = (Boolean)aValue;
     202            savePref(row);
     203            executeFilters();
     204            break;
     205        case 2:
     206            f.text = (String)aValue;
     207            savePref(row);
     208            break;
     209        case 3:
     210            f.applyForChildren = (Boolean)aValue;
     211            savePref(row);
     212            executeFilters();
     213            break;
     214        case 4:
     215            f.inverted = (Boolean)aValue;
     216            savePref(row);
     217            executeFilters();
     218            break;
    193219        }
    194220        if(column!=0) {
     
    215241        return null;
    216242    }
     243
     244    private static class OSDLabel extends JLabel {
     245        public OSDLabel(String text) {
     246            super(text);
     247            setOpaque(true);
     248            setForeground(Color.black);
     249            setBackground(new Color(0,0,0,0));
     250            setFont(getFont().deriveFont(Font.PLAIN));
     251            setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
     252        }
     253
     254        @Override
     255        public void paintComponent(Graphics g) {
     256            g.setColor(new Color(255, 255, 255, 140));
     257            g.fillRoundRect(getX(), getY(), getWidth(), getHeight(), 10, 10);
     258            super.paintComponent(g);
     259        }
     260    }
     261
     262    private OSDLabel lblOSD = new OSDLabel("");
     263
     264    public void drawOSDText(Graphics2D g) {
     265        String message = "<html>"+tr("<h2>Filter active</h2>");
     266
     267        if (disabledCount == 0 && hiddenCount == 0)
     268            return;
     269
     270        if (hiddenCount != 0) {
     271            message += tr("<p><b>{0}</b> objects hidden", hiddenCount);
     272        }
     273
     274        if (hiddenCount != 0 && disabledCount != 0) {
     275            message += "<br>";
     276        }
     277
     278        if (disabledCount != 0) {
     279            message += tr("<b>{0}</b> objects disabled", disabledCount);
     280        }
     281
     282        message += tr("</p><p>Close the filter dialog to see all objects.<p></html>");
     283
     284        lblOSD.setText(message);
     285        lblOSD.setSize(lblOSD.getPreferredSize());
     286
     287        int dx = Main.map.mapView.getWidth() - lblOSD.getPreferredSize().width - 15;
     288        int dy = 15;
     289        g.translate(dx, dy);
     290        lblOSD.paintComponent(g);
     291        g.translate(-dx, -dy);
     292    }
    217293}
  • trunk/src/org/openstreetmap/josm/gui/MapFrame.java

    r2965 r3178  
    7272
    7373    public ConflictDialog conflictDialog;
     74    public FilterDialog filterDialog;
    7475    /**
    7576     * The dialog that shows all relations and lets the user edit them.
     
    156157        addToggleDialog(conflictDialog = new ConflictDialog());
    157158        if(Main.pref.getBoolean("displayfilter", false)) {
    158             addToggleDialog(new FilterDialog());
     159            addToggleDialog(filterDialog = new FilterDialog());
    159160        }
    160161        addToggleDialog(new ChangesetDialog(this));
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r3144 r3178  
    585585        tempG.draw(border);
    586586
     587        if (Main.map.filterDialog != null) {
     588            Main.map.filterDialog.drawOSDText(tempG);
     589        }
     590
    587591        if (playHeadMarker != null) {
    588592            playHeadMarker.paint(tempG, this);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java

    r3083 r3178  
    77import java.awt.BorderLayout;
    88import java.awt.Component;
     9import java.awt.Graphics2D;
    910import java.awt.event.ActionEvent;
    1011import java.awt.event.ActionListener;
     
    6061    public void showNotify() {
    6162        DatasetEventManager.getInstance().addDatasetListener(listenerAdapter, FireMode.IN_EDT_CONSOLIDATED);
     63        filters.executeFilters();
    6264    }
    6365
     
    6567    public void hideNotify() {
    6668        DatasetEventManager.getInstance().removeDatasetListener(listenerAdapter);
     69        filters.clearFilterFlags();
    6770    }
    6871
     
    7679                if(filter != null){
    7780                    filters.addFilter(filter);
    78                     filters.filter();
     81                    filters.executeFilters();
    7982                }
    8083            }
     
    9194                if(filter != null){
    9295                    filters.setFilter(index, filter);
    93                     filters.filter();
     96                    filters.executeFilters();
    9497                }
    9598            }
     
    188191
    189192    public void processDatasetEvent(AbstractDatasetChangedEvent event) {
    190         filters.filter();
     193        System.err.print("FilterDialog/processDatasetEvent");
     194        filters.executeFilters();
    191195    }
    192196
     
    214218        setTitle("Filter Hidden:" + filters.hiddenCount + " Disabled:" + filters.disabledCount);
    215219    }
     220
     221    public void drawOSDText(Graphics2D g) {
     222        filters.drawOSDText(g);
     223    }
    216224}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r3087 r3178  
    108108        setMinimumSize(new Dimension(0,0));
    109109        this.preferredHeight = preferredHeight;
    110         toggleAction = new ToggleDialogAction(this, name, "dialogs/"+iconName, tooltip, shortcut, iconName);
     110        toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut, iconName);
    111111        String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
    112112        toggleAction.putValue("help", helpId.substring(0, helpId.length()-6));
     
    136136     *
    137137     */
    138     public final static class ToggleDialogAction extends JosmAction {
    139 
    140         private ToggleDialog dialog;
    141 
    142         private ToggleDialogAction(ToggleDialog dialog, String name, String iconName, String tooltip, Shortcut shortcut, String prefname) {
     138    public final class ToggleDialogAction extends JosmAction {
     139
     140        private ToggleDialogAction(String name, String iconName, String tooltip, Shortcut shortcut, String prefname) {
    143141            super(name, iconName, tooltip, shortcut, false);
    144             if (dialog == null)
    145                 throw new IllegalArgumentException("The ToggleDialog supplied for " + name + " cannot be null.");
    146             this.dialog = dialog;
    147142        }
    148143
    149144        public void actionPerformed(ActionEvent e) {
    150             dialog.toggleButtonHook();
    151             if (dialog.isShowing) {
    152                 dialog.hideDialog();
    153                 dialog.dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
     145            toggleButtonHook();
     146            if (isShowing) {
     147                hideDialog();
     148                dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
     149                hideNotify();
    154150            } else {
    155                 dialog.showDialog();
    156                 if (dialog.isDocked && dialog.isCollapsed) {
    157                     dialog.expand();
     151                showDialog();
     152                if (isDocked && isCollapsed) {
     153                    expand();
    158154                }
    159                 if (dialog.isDocked) {
    160                     dialog.dialogsPanel.reconstruct(Action.INVISIBLE_TO_DEFAULT, dialog);
     155                if (isDocked) {
     156                    dialogsPanel.reconstruct(Action.INVISIBLE_TO_DEFAULT, ToggleDialog.this);
    161157                }
     158                showNotify();
    162159            }
    163160        }
     
    166163        public void destroy() {
    167164            super.destroy();
    168             dialog = null;
    169165        }
    170166    }
     
    185181        toggleAction.putValue("selected", false);
    186182        toggleAction.putValue("selected", true);
    187         showNotify();
    188183    }
    189184
     
    218213        setIsShowing(false);
    219214        toggleAction.putValue("selected", false);
    220         hideNotify();
    221215    }
    222216
     
    259253            setMinimumSize(new Dimension(Integer.MAX_VALUE,20));
    260254            lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
    261             hideNotify();
    262255        }
    263256        else throw new IllegalStateException();
     
    275268            setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
    276269            lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
    277             showNotify();
    278270        }
    279271        else throw new IllegalStateException();
     
    402394                            hideDialog();
    403395                            dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
     396                            hideNotify();
    404397                        }
    405398                    }
     
    441434                    } else {
    442435                        hideDialog();
     436                        hideNotify();
    443437                    }
    444438                }
Note: See TracChangeset for help on using the changeset viewer.