Changeset 1313 in josm


Ignore:
Timestamp:
2009-01-20T18:26:59+01:00 (11 years ago)
Author:
stoecker
Message:

fix #2047

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

Legend:

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

    r1287 r1313  
    223223                    for (int i : is) segSet.add(
    224224                        Pair.sort(new Pair<Node,Node>(w.nodes.get(i), w.nodes.get(i+1))));
    225                     for (int i : is) wnew.nodes.add(i + 1, n);
     225                    for (int i : is) wnew.addNode(i + 1, n);
    226226
    227227                    cmds.add(new ChangeCommand(insertPoint.getKey(), wnew));
     
    287287            if(way != null) {
    288288                int nodeCount=0;
    289                 for (Node p : way.nodes) 
     289                for (Node p : way.nodes)
    290290                    if(p.equals(n0)) nodeCount++;
    291291                if(nodeCount > 1) way = null;
     
    294294            if (way == null) {
    295295                way = new Way();
    296                 way.nodes.add(n0);
     296                way.addNode(n0);
    297297                cmds.add(new AddCommand(way));
    298298            } else {
     
    309309            // Connected to a node that's already in the way
    310310            if(way != null && way.nodes.contains(n)) {
    311                 System.out.println("Stop drawing, node is part of current way");
     311                //System.out.println("Stop drawing, node is part of current way");
    312312                wayIsFinished = true;
    313313                selection.clear();
    314314                //Main.map.selectMapMode(new SelectAction(Main.map));
    315315            }
    316            
     316
    317317            // Add new node to way
    318             if (way.nodes.get(way.nodes.size() - 1) == n0) {
    319                 way.nodes.add(n);
    320             } else {
    321                 way.nodes.add(0, n);
    322             }
     318            if (way.nodes.get(way.nodes.size() - 1) == n0)
     319                way.addNode(n);
     320            else
     321                way.addNode(0, n);
    323322
    324323            extendedWay = true;
     
    327326
    328327        String title;
    329         if (!extendedWay && !newNode) {
    330             return; // We didn't do anything.
    331         } else if (!extendedWay) {
    332             if (reuseWays.isEmpty()) {
     328        if (!extendedWay) {
     329            if (!newNode)
     330              return; // We didn't do anything.
     331            else if (reuseWays.isEmpty())
    333332                title = tr("Add node");
    334             } else {
     333            else
    335334                title = tr("Add node into way");
    336             }
    337335            for (Way w : reuseWays) w.selected = false;
    338336            Main.ds.setSelected(n);
  • trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java

    r1221 r1313  
    228228            Node n4 = new Node(Main.proj.eastNorth2latlon(en4));
    229229            Way wnew = new Way(selectedSegment.way);
    230             wnew.nodes.add(selectedSegment.lowerIndex+1, n3);
    231             wnew.nodes.add(selectedSegment.lowerIndex+1, n4);
    232             if (wnew.nodes.size() == 4) wnew.nodes.add(n1);
     230            wnew.addNode(selectedSegment.lowerIndex+1, n3);
     231            wnew.addNode(selectedSegment.lowerIndex+1, n4);
     232            if (wnew.nodes.size() == 4) wnew.addNode(n1);
    233233            Collection<Command> cmds = new LinkedList<Command>();
    234234            cmds.add(new AddCommand(n4));
  • trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java

    r1245 r1313  
    177177            Way w = virtualWay.way;
    178178            Way wnew = new Way(w);
    179             wnew.nodes.add(virtualWay.lowerIndex+1, virtualNode);
     179            wnew.addNode(virtualWay.lowerIndex+1, virtualNode);
    180180            virtualCmds.add(new ChangeCommand(w, wnew));
    181181            virtualCmds.add(new MoveCommand(virtualNode, dx, dy));
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r1270 r1313  
    5656        errors = null;
    5757    }
     58    /* This should not be called from outside. Fixing the UI to add relevant
     59       get/set functions calling this implecitely is prefered, so we can have
     60       transparent cache handling in the future. */
     61    protected void clearCached()
     62    {
     63        mappaintVisibleCode = 0;
     64        mappaintDrawnCode = 0;
     65        mappaintStyle = null;
     66    }
    5867    /* end of mappaint data */
    5968
     
    279288        tagged = osm.tagged;
    280289        incomplete = osm.incomplete;
    281         mappaintStyle = null;
     290        clearCached();
     291        clearErrors();
    282292    }
    283293
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r1270 r1313  
    3030    public Integer mappaintDrawnAreaCode = 0;
    3131    /* end of mappaint data */
    32    
     32    @Override protected void clearCached()
     33    {
     34        super.clearCached();
     35        isMappaintArea = false;
     36        mappaintDrawnAreaCode = 0;
     37    }
     38
    3339    public void visitNodes(Visitor v) {
    3440        for (Node n : this.nodes)
     
    126132    }
    127133
     134    public void addNode(Node n)
     135    {
     136        clearCached();
     137        nodes.add(n);
     138    }
     139
     140    public void addNode(int offs, Node n)
     141    {
     142        clearCached();
     143        nodes.add(offs, n);
     144    }
     145
    128146    public Boolean isClosed() {
    129147        int s = nodes.size();
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r1310 r1313  
    9393    public ElemStyle getPrimitiveStyle(OsmPrimitive osm) {
    9494        if(!useStyleCache)
    95             return (styles != null) ? (IconElemStyle)styles.get(osm) : null;
     95            return (styles != null) ? styles.get(osm) : null;
    9696
    9797        if(osm.mappaintStyle == null && styles != null) {
    98             osm.mappaintStyle =  styles.get(osm);
     98            osm.mappaintStyle = styles.get(osm);
    9999            if(osm instanceof Way)
    100100                ((Way)osm).isMappaintArea = styles.isArea(osm);
    101101        }
    102102        return osm.mappaintStyle;
     103    }
     104
     105    public IconElemStyle getPrimitiveNodeStyle(OsmPrimitive osm) {
     106        if(!useStyleCache)
     107            return (styles != null) ? styles.getIcon(osm) : null;
     108
     109        if(osm.mappaintStyle == null && styles != null)
     110            osm.mappaintStyle = styles.getIcon(osm);
     111
     112        return (IconElemStyle)osm.mappaintStyle;
    103113    }
    104114
     
    417427    }
    418428
    419     public void drawSelectedRelation(Relation r)
    420     {
    421         for (RelationMember m : r.members)
    422         {
    423             if (m.member != null && !m.member.incomplete && !m.member.deleted
    424             && !(m.member instanceof Relation))
    425             {
    426                 /* nodes drawn on second call */
    427                 if(!(m.member instanceof Node))
    428                     drawSelectedMember(m.member, styles != null ? styles.get(m.member)
    429                     : null, true, true);
    430             }
    431         }
    432     }
    433 
    434429    public void drawSelectedMember(OsmPrimitive osm, ElemStyle style, Boolean area,
    435430    Boolean areaselected)
     
    463458
    464459        r.mappaintVisibleCode = 0;
    465         /* TODO implement visible handling for relations too */
    466460
    467461        // TODO: is it possible to do this like the nodes/ways code?
     
    469463            return;
    470464
    471         // draw multipolygon relations including their ways
    472         // other relations are only drawn when selected
    473 
    474         // we are in the "draw selected" phase
    475         // TODO: is it necessary to check for r.selected?
    476         if(r.selected && selectedCall)
     465        if(selectedCall)
    477466        {
    478467            for (RelationMember m : r.members)
    479468            {
    480469                if (m.member != null && !m.member.incomplete && !m.member.deleted
    481                 && (drawRestriction || m.member instanceof Node))
    482                 {
    483                     drawSelectedMember(m.member, styles != null ? styles.get(m.member) : null, true, true);
     470                && m.member instanceof Node)
     471                {
     472                    drawSelectedMember(m.member, styles != null ? getPrimitiveStyle(m.member) : null, true, true);
    484473                }
    485474            }
    486475            return;
    487476        }
    488 
    489         if (drawMultipolygon && r.keys != null && "multipolygon".equals(r.keys.get("type")))
    490         {
    491             drawMultipolygon(r);
    492             return;
    493         }
    494 
    495         if (drawRestriction && r.keys != null && "restriction".equals(r.keys.get("type")))
     477        else if (drawMultipolygon && r.keys != null && "multipolygon".equals(r.keys.get("type")))
     478        {
     479            if(drawMultipolygon(r))
     480              return;
     481        }
     482        else if (drawRestriction && r.keys != null && "restriction".equals(r.keys.get("type")))
    496483        {
    497484            drawRestriction(r);
    498             return;
    499         }
    500 
    501         if(r.selected)
    502             drawSelectedRelation(r);
    503     }
    504 
     485        }
     486
     487        if(r.selected) /* draw ways*/
     488        {
     489            for (RelationMember m : r.members)
     490            {
     491                if (m.member != null && !m.member.incomplete && !m.member.deleted
     492                && m.member instanceof Way) /* nodes drawn on second call */
     493                {
     494                    drawSelectedMember(m.member, styles != null ? getPrimitiveStyle(m.member)
     495                    : null, true, true);
     496                }
     497            }
     498        }
     499    }
    505500
    506501    // this current experimental implementation will only work for standard restrictions:
     
    724719        }
    725720
    726         IconElemStyle nodeStyle = (IconElemStyle)getPrimitiveStyle(r);
     721        IconElemStyle nodeStyle = getPrimitiveNodeStyle(r);
    727722
    728723        if (nodeStyle == null) {
     
    748743    }
    749744
    750     public void drawMultipolygon(Relation r) {
     745    public Boolean drawMultipolygon(Relation r) {
    751746        Collection<Way> inner = new LinkedList<Way>();
    752747        Collection<Way> outer = new LinkedList<Way>();
     
    754749        Collection<Way> outerclosed = new LinkedList<Way>();
    755750        Boolean incomplete = false;
     751        Boolean drawn = false;
    756752
    757753        r.clearErrors();
     
    787783                            outer.add(w);
    788784                        else if(r.selected)
    789                             drawSelectedMember(m.member, styles != null ? styles.get(m.member) : null, true, true);
     785                            drawSelectedMember(m.member, styles != null
     786                            ? getPrimitiveStyle(m.member) : null, true, true);
    790787                    }
    791788                }
     
    798795        }
    799796
    800         ElemStyle wayStyle = styles != null ? styles.get(r) : null;
     797        ElemStyle wayStyle = styles != null ? getPrimitiveStyle(r) : null;
    801798        if(styles != null && (wayStyle == null || !(wayStyle instanceof AreaElemStyle)))
    802799        {
     
    806803                   wayStyle = styles.get(w);
    807804            }
     805            r.mappaintStyle = wayStyle;
    808806        }
    809807
     
    814812            Collection<Way> join = new LinkedList<Way>();
    815813
     814            drawn = true;
    816815            for (Way w : outer)
    817816            {
     
    954953                for (Way wOuter : outer)
    955954                    wOuter.mappaintVisibleCode = viewid;
    956                 return;
     955                return drawn;
    957956            }
    958957            for (Way wInner : inner)
    959958            {
    960                 ElemStyle innerStyle = styles.get(wInner);
     959                ElemStyle innerStyle = getPrimitiveStyle(wInner);
    961960                if(innerStyle == null)
    962961                {
     
    988987            for (Way wOuter : outer)
    989988            {
    990                 ElemStyle outerStyle = styles.get(wOuter);
     989                ElemStyle outerStyle = getPrimitiveStyle(wOuter);
    991990                if(outerStyle == null)
    992991                {
     
    10161015            }
    10171016        }
    1018         else if(r.selected)
    1019             drawSelectedRelation(r);
     1017        return drawn;
    10201018    }
    10211019
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r1295 r1313  
    2929            areas = new HashMap<String, AreaElemStyle>();
    3030        }
    31         private ElemStyle getNode(Map<String, String> keys)
     31        private IconElemStyle getNode(Map<String, String> keys)
    3232        {
    3333            IconElemStyle ret = null;
     
    120120        {
    121121            return (osm.keys == null) ? null :
    122             ((osm instanceof Node || osm instanceof Relation) ? getNode(osm.keys) : get(osm.keys));
     122            ((osm instanceof Node) ? getNode(osm.keys) : get(osm.keys));
     123        }
     124
     125        public IconElemStyle getIcon(OsmPrimitive osm)
     126        {
     127            return (osm.keys == null) ? null : getNode(osm.keys);
    123128        }
    124129
Note: See TracChangeset for help on using the changeset viewer.