Changeset 2264 in josm for trunk


Ignore:
Timestamp:
2009-10-10T14:14:28+02:00 (13 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.