Changeset 2264 in josm


Ignore:
Timestamp:
Oct 10, 2009 2:14:28 PM (4 years ago)
Author:
stoecker
Message:

applied #3676 - patch by Dave Hansen - cleanup selection handling interface

Location:
trunk/src/org/openstreetmap/josm
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r2256 r2264  
    152152        Node c = new Node(selectedNode); 
    153153        c.removeAll(); 
    154         c.setSelected(false); 
     154        getCurrentDataSet().clearSelection(c); 
    155155        cmds.add(new ChangeCommand(selectedNode, c)); 
    156156 
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r2120 r2264  
    325325        mousePos = e.getPoint(); 
    326326 
    327         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected(); 
     327        DataSet ds = getCurrentDataSet(); 
     328        Collection<OsmPrimitive> selection = ds.getSelected(); 
    328329        Collection<Command> cmds = new LinkedList<Command>(); 
    329330 
     
    405406                    // here so /only/ the new way will be selected after this method finishes. 
    406407                    if(alt) { 
    407                         wnew.setSelected(false); 
     408                        ds.addSelected(wnew); 
    408409                    } 
    409410 
     
    519520                extendedWay = true; 
    520521                getCurrentDataSet().setSelected(way); 
    521                 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected()); 
     522                DataSet.fireSelectionChanged(ds.getSelected()); 
    522523            } 
    523524        } 
     
    532533                title = tr("Add node into way"); 
    533534                for (Way w : reuseWays) { 
    534                     w.setSelected(false); 
     535                    ds.clearSelection(w); 
    535536                } 
    536537            } 
  • trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java

    r2262 r2264  
    2626import org.openstreetmap.josm.tools.Shortcut; 
    2727import org.openstreetmap.josm.data.osm.Filter; 
     28import org.openstreetmap.josm.data.osm.DataSet; 
    2829 
    2930public class SearchAction extends JosmAction{ 
     
    8990        left.add(input, GBC.eop().fill(GBC.HORIZONTAL)); 
    9091        left.add(replace, GBC.eol()); 
     92        DataSet ds = Main.main.getCurrentDataSet(); 
    9193        left.add(add, GBC.eol()); 
    9294        left.add(remove, GBC.eol()); 
     
    237239        //        } 
    238240 
    239         Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected(); 
     241        final DataSet ds = Main.main.getCurrentDataSet(); 
     242        Collection<OsmPrimitive> sel = ds.getSelected(); 
    240243        int foundMatches = getSelection(s, sel, new Function(){ 
    241244            public Boolean isSomething(OsmPrimitive o){ 
    242                 return o.isSelected(); 
     245                return ds.isSelected(o); 
    243246            } 
    244247        }); 
    245         Main.main.getCurrentDataSet().setSelected(sel); 
     248        ds.setSelected(sel); 
    246249        if (foundMatches == 0) { 
    247250            String msg = null; 
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r2166 r2264  
    424424    private static class Selected extends Match { 
    425425        @Override public boolean match(OsmPrimitive osm) { 
    426             return osm.isSelected(); 
     426            return Main.main.getCurrentDataSet().isSelected(osm); 
    427427        } 
    428428        @Override public String toString() {return "selected";} 
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r2263 r2264  
    217217    } 
    218218 
     219    public boolean addSelected(OsmPrimitive osm) { 
     220        osm.setSelected(true); 
     221        return true; 
     222    } 
     223 
     224    public boolean toggleSelected(OsmPrimitive osm) { 
     225        osm.setSelected(!osm.isSelected()); 
     226        return true; 
     227    } 
     228    public boolean isSelected(OsmPrimitive osm) { 
     229        return osm.isSelected(); 
     230    } 
     231 
    219232    public void setDisabled(OsmPrimitive... osm) { 
    220233        if (osm.length == 1 && osm[0] == null) { 
     
    283296     * @param list The collection to remove the selection from. 
    284297     */ 
     298    public void clearSelection(OsmPrimitive... osm) { 
     299        clearSelection(Arrays.asList(osm)); 
     300    } 
    285301    private void clearSelection(Collection<? extends OsmPrimitive> list) { 
    286302        if (list == null) 
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2252 r2264  
    221221     * @since 1899 
    222222     */ 
    223     public void setSelected(boolean selected) { 
     223    @Deprecated public void setSelected(boolean selected) { 
    224224        if (selected) { 
    225225            flags |= FLAG_SELECTED; 
     
    234234     * @since 1899 
    235235     */ 
    236     public boolean isSelected() { 
     236    @Deprecated public boolean isSelected() { 
    237237        return (flags & FLAG_SELECTED) != 0; 
    238238    } 
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r2206 r2264  
    152152 
    153153        if (nodeStyle != null && isZoomOk(nodeStyle) && showIcons > dist) { 
    154             drawNode(n, nodeStyle.icon, nodeStyle.annotate, n.isSelected()); 
     154            drawNode(n, nodeStyle.icon, nodeStyle.annotate, data.isSelected(n)); 
    155155        } else if (n.highlighted) { 
    156156            drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode); 
    157         } else if (n.isSelected()) { 
     157        } else if (data.isSelected(n)) { 
    158158            drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode); 
    159159        } else if (n.isTagged()) { 
     
    227227            //profilerVisibleWays++; 
    228228            //if(!profilerOmitDraw) 
    229             drawWay(w, null, untaggedColor, w.isSelected()); 
     229            drawWay(w, null, untaggedColor, data.isSelected(w)); 
    230230        } 
    231231        else if(wayStyle instanceof LineElemStyle) 
     
    234234            //profilerVisibleWays++; 
    235235            //if(!profilerOmitDraw) 
    236             drawWay(w, (LineElemStyle)wayStyle, untaggedColor, w.isSelected()); 
     236            drawWay(w, (LineElemStyle)wayStyle, untaggedColor, data.isSelected(w)); 
    237237        } 
    238238        else if (wayStyle instanceof AreaElemStyle) 
     
    245245            { 
    246246                //    profilerVisibleAreas++; 
    247                 drawArea(w, w.isSelected() ? selectedColor : areaStyle.color); 
     247                drawArea(w, data.isSelected(w) ? selectedColor : areaStyle.color); 
    248248                if(!w.isClosed()) { 
    249249                    w.putError(tr("Area style way is not closed."), true); 
    250250                } 
    251251            } 
    252             drawWay(w, areaStyle.line, areaStyle.color, w.isSelected()); 
     252            drawWay(w, areaStyle.line, areaStyle.color, data.isSelected(w)); 
    253253            //} 
    254254        } 
     
    259259           the way is tagged with a direction key 
    260260           (even if the tag is negated as in oneway=false) or the way is selected */ 
    261         boolean showDirection = w.isSelected() || ((!useRealWidth) && (showDirectionArrow 
     261        boolean showDirection = data.isSelected(w) || ((!useRealWidth) && (showDirectionArrow 
    262262                && (!showRelevantDirectionsOnly || w.hasDirectionKeys()))); 
    263263        /* head only takes over control if the option is true, 
    264264           the direction should be shown at all and not only because it's selected */ 
    265         boolean showOnlyHeadArrowOnly = showDirection && !w.isSelected() && showHeadArrowOnly; 
     265        boolean showOnlyHeadArrowOnly = showDirection && !data.isSelected(w) && showHeadArrowOnly; 
    266266        int width = defaultSegmentWidth; 
    267267        int realWidth = 0; /* the real width of the element in meters */ 
     
    307307        if(w.highlighted) { 
    308308            color = highlightColor; 
    309         } else if(w.isSelected()) { 
     309        } else if(data.isSelected(w)) { 
    310310            color = selectedColor; 
    311311        } else if(w.isDisabled()) { 
     
    325325                        if(lastN != null) 
    326326                        { 
    327                             drawSeg(lastN, n, s.color != null  && !w.isSelected() ? s.color : color, 
     327                            drawSeg(lastN, n, s.color != null  && !data.isSelected(w) ? s.color : color, 
    328328                                    false, s.getWidth(width), s.dashed, s.dashedColor); 
    329329                        } 
     
    359359                        if(lastN != null) 
    360360                        { 
    361                             drawSeg(lastN, n, s.color != null && !w.isSelected() ? s.color : color, 
     361                            drawSeg(lastN, n, s.color != null && !data.isSelected(w) ? s.color : color, 
    362362                                    false, s.getWidth(width), s.dashed, s.dashedColor); 
    363363                        } 
     
    405405                        Way c = (Way)joinArray[i]; 
    406406                        if(w == null) 
    407                         { w = c; selected = w.isSelected(); joinArray[i] = null; --left; } 
     407                        { w = c; selected = data.isSelected(w); joinArray[i] = null; --left; } 
    408408                        else 
    409409                        { 
     
    441441                                joinArray[i] = null; 
    442442                                joined = true; 
    443                                 if(c.isSelected()) { 
     443                                if(data.isSelected(c)) { 
    444444                                    selected = true; 
    445445                                } 
     
    474474                w = new Way(w); 
    475475                w.setNodes(n); 
    476                 w.setSelected(selected); 
     476                if (selected) 
     477                    data.setSelected(w); 
     478                else 
     479                    data.clearSelection(w); 
    477480            } 
    478481            if(!w.isClosed()) 
     
    551554        } 
    552555 
    553         if(r.isSelected()) /* draw ways*/ 
     556        if(data.isSelected(r)) /* draw ways*/ 
    554557        { 
    555558            for (RelationMember m : r.getMembers()) 
     
    828831        smallIcon.paintIcon ( Main.map.mapView, g, (int)(pVia.x+vx+vx2)-w/2, (int)(pVia.y+vy+vy2)-h/2 ); 
    829832 
    830         if (r.isSelected()) 
     833        if (data.isSelected(r)) 
    831834        { 
    832835            g.setColor (  selectedColor ); 
     
    872875                        if(!m.hasRole()) { 
    873876                            outer.add(w); 
    874                         } else if(r.isSelected()) { 
     877                        } else if(data.isSelected(r)) { 
    875878                            drawSelectedMember(m.getMember(), styles != null 
    876879                                    ? getPrimitiveStyle(m.getMember()) : null, true, true); 
     
    10521055                    if(isPolygonVisible(p)) 
    10531056                    { 
    1054                         drawAreaPolygon(p, (pd.way.isSelected() || r.isSelected()) ? selectedColor 
     1057                        drawAreaPolygon(p, (data.isSelected(pd.way) || data.isSelected(r)) ? selectedColor 
    10551058                                : areaStyle.color); 
    10561059                        visible = true; 
     
    10781081                    { 
    10791082                        drawWay(wInner, ((AreaElemStyle)wayStyle).line, 
    1080                                 ((AreaElemStyle)wayStyle).color, wInner.isSelected() 
    1081                                 || r.isSelected()); 
     1083                                ((AreaElemStyle)wayStyle).color, data.isSelected(wInner) 
     1084                                || data.isSelected(r)); 
    10821085                    } 
    10831086                    wInner.mappaintDrawnCode = paintid; 
     
    10851088                else 
    10861089                { 
    1087                     if(r.isSelected()) 
     1090                    if(data.isSelected(r)) 
    10881091                    { 
    10891092                        drawSelectedMember(wInner, innerStyle, 
    1090                                 !wayStyle.equals(innerStyle), wInner.isSelected()); 
     1093                                !wayStyle.equals(innerStyle), data.isSelected(wInner)); 
    10911094                    } 
    10921095                    if(wayStyle.equals(innerStyle)) 
     
    10941097                        r.putError(tr("Style for inner way ''{0}'' equals multipolygon.", 
    10951098                                wInner.getDisplayName(DefaultNameFormatter.getInstance())), false); 
    1096                         if(!r.isSelected()) { 
     1099                        if(!data.isSelected(r)) { 
    10971100                            wInner.mappaintDrawnAreaCode = paintid; 
    10981101                        } 
     
    11081111                    { 
    11091112                        drawWay(wOuter, ((AreaElemStyle)wayStyle).line, 
    1110                                 ((AreaElemStyle)wayStyle).color, wOuter.isSelected() 
    1111                                 || r.isSelected()); 
     1113                                ((AreaElemStyle)wayStyle).color, data.isSelected(wOuter) 
     1114                                || data.isSelected(r)); 
    11121115                    } 
    11131116                    wOuter.mappaintDrawnCode = paintid; 
     
    11211124                                wOuter.getDisplayName(DefaultNameFormatter.getInstance())), true); 
    11221125                    } 
    1123                     if(r.isSelected()) 
     1126                    if(data.isSelected(r)) 
    11241127                    { 
    11251128                        drawSelectedMember(wOuter, outerStyle, false, false); 
     
    13261329    } 
    13271330 
     1331    DataSet data; 
     1332 
    13281333    /* Shows areas before non-areas */ 
    13291334    @Override 
    13301335    public void visitAll(DataSet data, Boolean virtual) { 
    1331  
     1336        this.data = data; 
    13321337        //boolean profiler = Main.pref.getBoolean("mappaint.profiler",false); 
    13331338        //profilerOmitDraw = Main.pref.getBoolean("mappaint.profiler.omitdraw",false); 
     
    14501455            //    profilerN = 0; 
    14511456            for (final OsmPrimitive osm : data.ways) 
    1452                 if (!osm.incomplete && !osm.isDeleted() && !osm.isFiltered() && !osm.isSelected() 
     1457                if (!osm.incomplete && !osm.isDeleted() && !osm.isFiltered() && !data.isSelected(osm) 
    14531458                        && osm.mappaintVisibleCode != viewid ) 
    14541459                { 
     
    14891494        //profilerN = 0; 
    14901495        for (final OsmPrimitive osm : data.nodes) 
    1491             if (!osm.incomplete && !osm.isDeleted() && (osm.isSelected() || !osm.isFiltered()) 
     1496            if (!osm.incomplete && !osm.isDeleted() && (data.isSelected(osm) || !osm.isFiltered()) 
    14921497                    && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid) 
    14931498            { 
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java

    r2120 r2264  
    128128    } 
    129129 
     130    DataSet ds; 
    130131    public void visitAll(DataSet data, Boolean virtual) { 
     132        this.ds = data; 
    131133        //boolean profiler = Main.pref.getBoolean("simplepaint.profiler",false); 
    132134        //long profilerStart = java.lang.System.currentTimeMillis(); 
     
    149151        //profilerN = 0; 
    150152        for (final OsmPrimitive osm : data.relations) 
    151             if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered()) 
     153            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered()) 
    152154            { 
    153155                osm.visit(this); 
     
    163165        //profilerN = 0; 
    164166        for (final OsmPrimitive osm : data.ways) 
    165             if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered() && osm.isTagged()) 
     167            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && osm.isTagged()) 
    166168            { 
    167169                osm.visit(this); 
     
    171173 
    172174        for (final OsmPrimitive osm : data.ways) 
    173             if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered() && !osm.isTagged()) 
     175            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && !osm.isTagged()) 
    174176            { 
    175177                osm.visit(this); 
     
    202204        //profilerN = 0; 
    203205        for (final OsmPrimitive osm : data.nodes) 
    204             if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered()) 
     206            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered()) 
    205207            { 
    206208                osm.visit(this); 
     
    253255        } else if (n.highlighted) { 
    254256            drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode); 
    255         } else if (n.isSelected()) { 
     257        } else if (ds.isSelected(n)) { 
    256258            drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode); 
    257259        } else if(n.isTagged()) { 
     
    305307           (even if the tag is negated as in oneway=false) or the way is selected */ 
    306308 
    307         boolean showThisDirectionArrow = w.isSelected() 
     309        boolean showThisDirectionArrow = ds.isSelected(w) 
    308310        || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys())); 
    309311        /* head only takes over control if the option is true, 
    310312           the direction should be shown at all and not only because it's selected */ 
    311         boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.isSelected() && showHeadArrowOnly; 
     313        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !ds.isSelected(w) && showHeadArrowOnly; 
    312314        Color wayColor; 
    313315 
     
    316318        } else if(w.highlighted) { 
    317319            wayColor = highlightColor; 
    318         } else if(w.isSelected()) { 
     320        } else if(ds.isSelected(w)) { 
    319321            wayColor = selectedColor; 
    320322        } else if (!w.isTagged()) { 
     
    347349        if (inactive || r.isDisabled()) { 
    348350            col = inactiveColor; 
    349         } else if (r.isSelected()) { 
     351        } else if (ds.isSelected(r)) { 
    350352            col = selectedColor; 
    351353        } else { 
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r2252 r2264  
    300300         */ 
    301301        private final void popupCycleSelection(Collection<OsmPrimitive> osms, int mods) { 
     302            DataSet ds = Main.main.getCurrentDataSet(); 
    302303            // Find some items that are required for cycling through 
    303304            OsmPrimitive firstItem = null; 
     
    311312                    nextSelected = osm; 
    312313                } 
    313                 if(firstSelected == null && osm.isSelected()) { 
     314                if(firstSelected == null && ds.isSelected(osm)) { 
    314315                    firstSelected = osm; 
    315316                } 
     
    319320            // pressed. Cannot use "setSelected()" because it will cause a 
    320321            // fireSelectionChanged event which is unnecessary at this point. 
    321             if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) { 
    322                 for(OsmPrimitive o : Main.main.getCurrentDataSet().getSelected()) { 
    323                     o.setSelected(false); 
    324                 } 
    325             } 
     322            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) 
     323                ds.clearSelection(); 
    326324 
    327325            // This will cycle through the available items. 
    328326            if(firstSelected == null) { 
    329                 firstItem.setSelected(true); 
     327                ds.addSelected(firstItem); 
    330328            } else { 
    331                 firstSelected.setSelected(false); 
     329                ds.clearSelection(firstSelected); 
    332330                if(nextSelected != null) { 
    333                     nextSelected.setSelected(true); 
    334                 } 
    335             } 
    336             DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected()); 
     331                    ds.addSelected(nextSelected); 
     332                } 
     333            } 
     334            DataSet.fireSelectionChanged(ds.getSelected()); 
    337335        } 
    338336 
     
    398396         */ 
    399397        private final void popupSetLabelColors(JLabel lbl, OsmPrimitive osm) { 
    400             if(osm.isSelected()) { 
     398            DataSet ds = Main.main.getCurrentDataSet(); 
     399            if(ds.isSelected(osm)) { 
    401400                lbl.setBackground(SystemColor.textHighlight); 
    402401                lbl.setForeground(SystemColor.textHighlightText); 
     
    460459                } 
    461460                @Override public void mouseClicked(MouseEvent e) { 
     461                    DataSet ds = Main.main.getCurrentDataSet(); 
    462462                    // Let the user toggle the selection 
    463                     osm.setSelected(!osm.isSelected()); 
    464                     DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected()); 
     463                    ds.toggleSelected(osm); 
     464                    DataSet.fireSelectionChanged(ds.getSelected()); 
    465465                    l.validate(); 
    466466                } 
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r2252 r2264  
    318318            // when multiple nodes on one point, prefer new or selected nodes 
    319319            else if(dist == minDistanceSq && minPrimitive != null 
    320                     && ((n.getId() == 0 && n.isSelected()) 
    321                             || (!minPrimitive.isSelected() && (n.isSelected() || n.getId() == 0)))) { 
     320                    && ((n.getId() == 0 && ds.isSelected(n)) 
     321                            || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.getId() == 0)))) { 
    322322                minPrimitive = n; 
    323323            } 
     
    360360                double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared 
    361361                if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) { 
    362                     if(w.isSelected()) { 
     362                    if(ds.isSelected(w)) { 
    363363                        perDist -= 0.00001; 
    364364                    } 
Note: See TracChangeset for help on using the changeset viewer.