~ubuntu-branches/ubuntu/saucy/merkaartor/saucy

« back to all changes in this revision

Viewing changes to Command/TrackPointCommands.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Bernd Zeimetz
  • Date: 2009-09-13 00:52:12 UTC
  • mto: (1.2.7 upstream) (0.1.3 upstream) (3.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20090913005212-pjecal8zxm07x0fj
ImportĀ upstreamĀ versionĀ 0.14+svnfixes~20090912

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "Command/TrackPointCommands.h"
2
 
#include "Map/TrackPoint.h"
3
 
#include "Map/MapLayer.h"
4
 
#include "Sync/DirtyList.h"
5
 
 
6
 
MoveTrackPointCommand::MoveTrackPointCommand() 
7
 
: Command(0), theLayer(0), oldLayer(0), OldPos(Coord(0, 0)), NewPos(Coord(0, 0))
8
 
{
9
 
}
10
 
 
11
 
MoveTrackPointCommand::MoveTrackPointCommand(TrackPoint* aPt) 
12
 
: Command(aPt), theLayer(0), oldLayer(0), OldPos(Coord(0, 0)), NewPos(Coord(0, 0))
13
 
{
14
 
        description = MainWindow::tr("Move node %1").arg(aPt->description());
15
 
}
16
 
 
17
 
MoveTrackPointCommand::MoveTrackPointCommand(TrackPoint* aPt, const Coord& aPos, MapLayer* aLayer)
18
 
: Command(aPt), theLayer(aLayer), oldLayer(0), thePoint(aPt), OldPos(aPt->position()), NewPos(aPos)
19
 
{
20
 
        description = MainWindow::tr("Move node %1").arg(aPt->description());
21
 
        redo();
22
 
}
23
 
 
24
 
MoveTrackPointCommand::~MoveTrackPointCommand(void)
25
 
{
26
 
        if (oldLayer)
27
 
                oldLayer->decDirtyLevel(commandDirtyLevel);
28
 
}
29
 
 
30
 
void MoveTrackPointCommand::undo()
31
 
{
32
 
        Command::undo();
33
 
        thePoint->setPosition(OldPos);
34
 
        if (theLayer && oldLayer && (theLayer != oldLayer)) {
35
 
                theLayer->remove(thePoint);
36
 
                oldLayer->add(thePoint);
37
 
                decDirtyLevel(oldLayer);
38
 
        }
39
 
}
40
 
 
41
 
void MoveTrackPointCommand::redo()
42
 
{
43
 
        thePoint->setPosition(NewPos);
44
 
        oldLayer = thePoint->layer();
45
 
        if (theLayer && oldLayer && (theLayer != oldLayer)) {
46
 
                oldLayer->remove(thePoint);
47
 
                incDirtyLevel(oldLayer);
48
 
                theLayer->add(thePoint);
49
 
        }
50
 
        Command::redo();
51
 
}
52
 
 
53
 
bool MoveTrackPointCommand::buildDirtyList(DirtyList &theList)
54
 
{
55
 
        if (isUndone)
56
 
                return false;
57
 
        if (thePoint->lastUpdated() == MapFeature::NotYetDownloaded)
58
 
                return theList.noop(thePoint);
59
 
        if (!thePoint->layer())
60
 
                return theList.update(thePoint);
61
 
        if (thePoint->isUploadable())
62
 
                return theList.update(thePoint);
63
 
 
64
 
        return theList.noop(thePoint);
65
 
}
66
 
 
67
 
bool MoveTrackPointCommand::toXML(QDomElement& xParent) const
68
 
{
69
 
        bool OK = true;
70
 
 
71
 
        QDomElement e = xParent.ownerDocument().createElement("MoveTrackPointCommand");
72
 
        xParent.appendChild(e);
73
 
 
74
 
        e.setAttribute("xml:id", id());
75
 
        e.setAttribute("trackpoint", thePoint->xmlId());
76
 
        OldPos.toXML("oldpos", e);
77
 
        NewPos.toXML("newpos", e);
78
 
        if (theLayer)
79
 
                e.setAttribute("layer", theLayer->id());
80
 
        if (oldLayer)
81
 
                e.setAttribute("oldlayer", oldLayer->id());
82
 
 
83
 
        Command::toXML(e);
84
 
 
85
 
        return OK;
86
 
}
87
 
 
88
 
MoveTrackPointCommand * MoveTrackPointCommand::fromXML(MapDocument * d, QDomElement e)
89
 
{
90
 
        MoveTrackPointCommand* a = new MoveTrackPointCommand();
91
 
        a->setId(e.attribute("xml:id"));
92
 
        a->OldPos = Coord::fromXML(e.firstChildElement("oldpos"));
93
 
        a->NewPos = Coord::fromXML(e.firstChildElement("newpos"));
94
 
        if (e.hasAttribute("layer"))
95
 
                a->theLayer = d->getLayer(e.attribute("layer"));
96
 
        else
97
 
                a->theLayer = NULL;
98
 
        if (e.hasAttribute("oldlayer"))
99
 
                a->oldLayer = d->getLayer(e.attribute("oldlayer"));
100
 
        else
101
 
                a->oldLayer = NULL;
102
 
        a->thePoint = MapFeature::getTrackPointOrCreatePlaceHolder(d, a->theLayer, e.attribute("trackpoint"));
103
 
 
104
 
        a->description = MainWindow::tr("Move node %1").arg(a->thePoint->description());
105
 
 
106
 
        Command::fromXML(d, e, a);
107
 
 
108
 
        return a;
109
 
}
110
 
 
111
 
 
112