Subversion Repositories Projects

Rev

Rev 358 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 358 Rev 361
Line 15... Line 15...
15
 *   along with this program; if not, write to the                         *
15
 *   along with this program; if not, write to the                         *
16
 *   Free Software Foundation, Inc.,                                       *
16
 *   Free Software Foundation, Inc.,                                       *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18
 ***************************************************************************/
18
 ***************************************************************************/
19
#include "dlg_Map.h"
19
#include "dlg_Map.h"
-
 
20
#include <QDomDocument>
-
 
21
#include <QFile>
20
 
22
 
21
dlg_Map::dlg_Map(QWidget *parent) : QDialog(parent)
23
dlg_Map::dlg_Map(QWidget *parent) : QDialog(parent)
22
{
24
{
23
    setupUi(this);
25
    setupUi(this);
24
 
26
 
Line 42... Line 44...
42
    connect(sl_Zoom,   SIGNAL(valueChanged(int)), this, SLOT(slot_Zoom(int)));
44
    connect(sl_Zoom,   SIGNAL(valueChanged(int)), this, SLOT(slot_Zoom(int)));
43
    connect(pb_Add,    SIGNAL(clicked()), this, SLOT(slot_AddWayPoint()));
45
    connect(pb_Add,    SIGNAL(clicked()), this, SLOT(slot_AddWayPoint()));
44
    connect(pb_Delete, SIGNAL(clicked()), this, SLOT(slot_DeleteWayPoints()));
46
    connect(pb_Delete, SIGNAL(clicked()), this, SLOT(slot_DeleteWayPoints()));
45
    connect(pb_Goto,   SIGNAL(clicked()), this, SLOT(slot_GotoTarget()));
47
    connect(pb_Goto,   SIGNAL(clicked()), this, SLOT(slot_GotoTarget()));
46
    connect(pb_SendWaypoints, SIGNAL(clicked()), this, SLOT(slot_SendWayPoints()));
48
    connect(pb_SendWaypoints, SIGNAL(clicked()), this, SLOT(slot_SendWayPoints()));
-
 
49
 
-
 
50
    connect(pb_Load,   SIGNAL(clicked()), this, SLOT(slot_LoadWayPoints()));
-
 
51
    connect(pb_Save,   SIGNAL(clicked()), this, SLOT(slot_SaveWayPoints()));
-
 
52
 
47
    connect(cb_Maps,   SIGNAL(currentIndexChanged(int)), this, SLOT(slot_ChangeMap(int)));
53
    connect(cb_Maps,   SIGNAL(currentIndexChanged(int)), this, SLOT(slot_ChangeMap(int)));
-
 
54
    connect(cb_ShowWPs, SIGNAL(toggled(bool)), this, SLOT(slot_ShowWayPoints(bool)));
-
 
55
 
48
    connect(this,      SIGNAL(rejected()), this, SLOT(slot_Close()));
56
    connect(this,      SIGNAL(rejected()), this, SLOT(slot_Close()));
49
 
57
 
50
    o_Map = new MapControl(w_Map->size());
58
    o_Map = new MapControl(w_Map->size());
51
    o_Map->enablePersistentCache(o_Settings->DIR.Cache);
59
    o_Map->enablePersistentCache(o_Settings->DIR.Cache);
52
    o_Map->showScale(true);
60
    o_Map->showScale(true);
Line 74... Line 82...
74
    Pen[0]->setWidth(2);
82
    Pen[0]->setWidth(2);
75
    Pen[1] = new QPen(QColor(255,0,0,255));
83
    Pen[1] = new QPen(QColor(255,0,0,255));
76
    Pen[1]->setWidth(2);
84
    Pen[1]->setWidth(2);
77
}
85
}
78
 
86
 
-
 
87
QList<sWayPoint> dlg_Map::parse_WayPointKML(QString s_File)
-
 
88
{
-
 
89
    QList<sWayPoint> tmp_WayPoints;
-
 
90
    sWayPoint tmp_WayPoint;
-
 
91
 
-
 
92
    QFile f_KML(s_File);
-
 
93
    f_KML.open(QIODevice::ReadOnly | QIODevice::Text);
-
 
94
 
-
 
95
    QByteArray s_KML;
-
 
96
 
-
 
97
    while (!f_KML.atEnd())
-
 
98
    {
-
 
99
        s_KML.append(f_KML.readLine());
-
 
100
     }
-
 
101
 
-
 
102
    f_KML.close();
-
 
103
 
-
 
104
    QDomDocument *UserXML;
-
 
105
    UserXML = new QDomDocument;
-
 
106
 
-
 
107
    UserXML->setContent(s_KML);
-
 
108
 
-
 
109
    QDomElement Root       = UserXML->firstChildElement("kml");
-
 
110
    QDomElement Document   = Root.firstChildElement("Document");
-
 
111
    QDomElement Placemark  = Document.firstChildElement("Placemark");
-
 
112
    QDomElement Linestring = Placemark.firstChildElement("LineString");
-
 
113
 
-
 
114
    QString Name = Placemark.firstChildElement("name").toElement().text();
-
 
115
 
-
 
116
    QString Route = Linestring.firstChildElement("coordinates").toElement().text();
-
 
117
 
-
 
118
    QStringList s_Points = Route.split(" ");
-
 
119
 
-
 
120
    QStringList Position;
-
 
121
 
-
 
122
    for (int z = 0; z < s_Points.count() - 1; z++)
-
 
123
    {
-
 
124
        if (z != 20)
-
 
125
        {
-
 
126
           Position = s_Points[z].split(",");
-
 
127
           tmp_WayPoint.Longitude = Position[0].toDouble();
-
 
128
           tmp_WayPoint.Latitude  = Position[1].toDouble();
-
 
129
           tmp_WayPoint.Altitude  = Position[2].toDouble();
-
 
130
           tmp_WayPoint.Time      = sb_Time->value();
-
 
131
 
-
 
132
           tmp_WayPoints.append(tmp_WayPoint);
-
 
133
        }
-
 
134
        else
-
 
135
        {
-
 
136
            QMessageBox::warning(this, QA_NAME,trUtf8("Die Wegpunkt-Liste umfasst mehr als 20 Einträge. Es werden nur die ersten 20 Einträge übernommen."), QMessageBox::Ok);
-
 
137
 
-
 
138
            pb_Add->setEnabled(false);
-
 
139
 
-
 
140
            z = s_Points.count();
-
 
141
        }
-
 
142
    }
-
 
143
    return tmp_WayPoints;
-
 
144
}
-
 
145
 
-
 
146
QList<sWayPoint> dlg_Map::parse_WayPointMKW(QString s_File)
-
 
147
{
-
 
148
    QList<sWayPoint> tmp_WayPoints;
-
 
149
    sWayPoint tmp_WayPoint;
-
 
150
 
-
 
151
    QFile f_MKW(s_File);
-
 
152
    f_MKW.open(QIODevice::ReadOnly | QIODevice::Text);
-
 
153
 
-
 
154
    QString s_MKW;
-
 
155
 
-
 
156
    while (!f_MKW.atEnd())
-
 
157
    {
-
 
158
        s_MKW.append(f_MKW.readLine());
-
 
159
     }
-
 
160
 
-
 
161
    f_MKW.close();
-
 
162
 
-
 
163
    QStringList s_Points = s_MKW.split(" ");
-
 
164
 
-
 
165
    QStringList Position;
-
 
166
 
-
 
167
    for (int z = 0; z < s_Points.count() - 1; z++)
-
 
168
    {
-
 
169
        if (z != 20)
-
 
170
        {
-
 
171
           Position = s_Points[z].split(",");
-
 
172
           tmp_WayPoint.Longitude = Position[0].toDouble();
-
 
173
           tmp_WayPoint.Latitude  = Position[1].toDouble();
-
 
174
           tmp_WayPoint.Altitude  = Position[2].toDouble();
-
 
175
           tmp_WayPoint.Time      = Position[3].toInt();
-
 
176
 
-
 
177
           tmp_WayPoints.append(tmp_WayPoint);
-
 
178
        }
-
 
179
        else
-
 
180
        {
-
 
181
            QMessageBox::warning(this, QA_NAME,trUtf8("Die Wegpunkt-Liste umfasst mehr als 20 Einträge. Es werden nur die ersten 20 Einträge übernommen."), QMessageBox::Ok);
-
 
182
 
-
 
183
            pb_Add->setEnabled(false);
-
 
184
 
-
 
185
            z = s_Points.count();
-
 
186
        }
-
 
187
    }
-
 
188
    return tmp_WayPoints;
-
 
189
}
-
 
190
 
-
 
191
void dlg_Map::show_WayPoints(QList<sWayPoint> WayPoints)
-
 
192
{
-
 
193
    Point* p_Point;
-
 
194
 
-
 
195
    o_Route->removeGeometry(l_RouteWP);
-
 
196
    p_RouteWP.clear();
-
 
197
    l_WayPoints.clear();
-
 
198
 
-
 
199
    l_WayPoints = WayPoints;
-
 
200
 
-
 
201
    for (int z = 0; z < WayPoints.count(); z++)
-
 
202
    {
-
 
203
        p_Point = new Point(WayPoints[z].Longitude, WayPoints[z].Latitude);
-
 
204
 
-
 
205
        p_RouteWP.append(p_Point);
-
 
206
    }
-
 
207
 
-
 
208
    l_RouteWP = new LineString(p_RouteWP, "", Pen[0]);
-
 
209
    o_Route->addGeometry(l_RouteWP);
-
 
210
 
-
 
211
    o_Map->setView(p_Point);
-
 
212
 
-
 
213
    o_Map->updateRequestNew();    
-
 
214
}
-
 
215
 
-
 
216
void dlg_Map::save_WayPointsMKW(QString s_File)
-
 
217
{
-
 
218
    QFile *f_MKW = new QFile(s_File);
-
 
219
 
-
 
220
    f_MKW->open(QIODevice::ReadWrite | QIODevice::Text);
-
 
221
 
-
 
222
    QTextStream out(f_MKW);
-
 
223
 
-
 
224
    out.setRealNumberPrecision(9);
-
 
225
 
-
 
226
    for (int z = 0; z < l_WayPoints.count(); z++)
-
 
227
    {
-
 
228
        out << l_WayPoints[z].Longitude << "," << l_WayPoints[z].Latitude << "," << l_WayPoints[z].Altitude << "," << l_WayPoints[z].Time << " \n";
-
 
229
    }
-
 
230
 
-
 
231
    f_MKW->close();
-
 
232
}
-
 
233
 
-
 
234
void dlg_Map::slot_LoadWayPoints()
-
 
235
{
-
 
236
    QString Filename = QFileDialog::getOpenFileName(this, "WayPoint-Route laden",  o_Settings->DIR.Logging, "Mikrokopter WayPoints(*.mkw);;KML-Datei(*.kml);;Alle Dateien (*)");
-
 
237
 
-
 
238
    if (!Filename.isEmpty())
-
 
239
    {
-
 
240
        if (Filename.endsWith(".kml", Qt::CaseInsensitive))
-
 
241
        {
-
 
242
            cb_ShowWPs->setChecked(true);
-
 
243
            pb_SendWaypoints->setEnabled(true);
-
 
244
 
-
 
245
            show_WayPoints(parse_WayPointKML(Filename));
-
 
246
        }
-
 
247
        if (Filename.endsWith(".mkw", Qt::CaseInsensitive))
-
 
248
        {
-
 
249
            cb_ShowWPs->setChecked(true);
-
 
250
            pb_SendWaypoints->setEnabled(true);
-
 
251
 
-
 
252
            show_WayPoints(parse_WayPointMKW(Filename));
-
 
253
        }
-
 
254
    }
-
 
255
}
-
 
256
 
-
 
257
void dlg_Map::slot_SaveWayPoints()
-
 
258
{
-
 
259
    QString Filename = QFileDialog::getSaveFileName(this, "WayPoint-Route speichern",  o_Settings->DIR.Logging, "Mikrokopter WayPoints(*.mkw);;Alle Dateien (*)");
-
 
260
 
-
 
261
    if (!Filename.isEmpty())
-
 
262
    {
-
 
263
        if (!(Filename.endsWith(".mkw", Qt::CaseInsensitive)))
-
 
264
        {
-
 
265
            Filename = Filename + QString(".mkw");
-
 
266
        }
-
 
267
 
-
 
268
        save_WayPointsMKW(Filename);
-
 
269
    }
-
 
270
}
-
 
271
 
-
 
272
void dlg_Map::slot_ShowWayPoints(bool Show)
-
 
273
{
-
 
274
    if (Show == true)
-
 
275
    {
-
 
276
        qDebug("An");
-
 
277
        o_Route->addGeometry(l_RouteWP);
-
 
278
        o_Map->updateRequestNew();
-
 
279
    }
-
 
280
    else
-
 
281
    {
-
 
282
        qDebug("Aus");
-
 
283
        o_Route->removeGeometry(l_RouteWP);
-
 
284
        o_Map->updateRequestNew();
-
 
285
    }
-
 
286
}
-
 
287
 
79
// Position zum Flug-Track hinzufügen
288
// Position zum Flug-Track hinzufügen
80
void dlg_Map::add_Position(double x, double y)
289
void dlg_Map::add_Position(double x, double y)
81
{
290
{
82
    sWayPoint WayPoint;
291
    sWayPoint WayPoint;
83
 
292
 
Line 118... Line 327...
118
}
327
}
119
 
328
 
120
// Waypoint zur Liste hinzufügen
329
// Waypoint zur Liste hinzufügen
121
void dlg_Map::slot_AddWayPoint()
330
void dlg_Map::slot_AddWayPoint()
122
{
331
{
-
 
332
    cb_ShowWPs->setChecked(true);
-
 
333
 
123
    sWayPoint WayPoint;
334
    sWayPoint WayPoint;
124
 
335
 
125
    WayPoint.Longitude = LastClick->longitude();
336
    WayPoint.Longitude = LastClick->longitude();
126
    WayPoint.Latitude = LastClick->latitude();
337
    WayPoint.Latitude = LastClick->latitude();
127
    WayPoint.Time = sb_Time->value();
338
    WayPoint.Time = sb_Time->value();
Line 135... Line 346...
135
 
346
 
136
    o_Route->addGeometry(l_RouteWP);
347
    o_Route->addGeometry(l_RouteWP);
137
    o_Map->updateRequestNew();
348
    o_Map->updateRequestNew();
138
 
349
 
139
    pb_SendWaypoints->setEnabled(true);
350
    pb_SendWaypoints->setEnabled(true);
-
 
351
 
-
 
352
    if (l_WayPoints.count() == 20)
-
 
353
    {
-
 
354
        QMessageBox::warning(this, QA_NAME,trUtf8("Wegpunkt-Liste ist voll. Es können maximal 20 Wegpunkte benutzt werden."), QMessageBox::Ok);
-
 
355
        pb_Add->setEnabled(false);
-
 
356
    }
-
 
357
 
140
}
358
}
141
 
359
 
142
// Waypoint-Liste löschen
360
// Waypoint-Liste löschen
143
void dlg_Map::slot_DeleteWayPoints()
361
void dlg_Map::slot_DeleteWayPoints()
144
{
362
{
145
    o_Route->removeGeometry(l_RouteWP);
363
    o_Route->removeGeometry(l_RouteWP);
146
    p_RouteWP.clear();
364
    p_RouteWP.clear();
147
    l_WayPoints.clear();
365
    l_WayPoints.clear();
148
    o_Map->updateRequestNew();
366
    o_Map->updateRequestNew();
-
 
367
 
-
 
368
    pb_Add->setEnabled(pb_Goto->isEnabled());
149
}
369
}
150
 
370
 
151
void dlg_Map::slot_SendWayPoints()
371
void dlg_Map::slot_SendWayPoints()
152
{
372
{
153
    emit(set_WayPoints(l_WayPoints));
373
    emit(set_WayPoints(l_WayPoints));
Line 182... Line 402...
182
    // Nur wenn nicht Verschoben dann einen Punkt setzen
402
    // Nur wenn nicht Verschoben dann einen Punkt setzen
183
    if ((Event->type() == QEvent::MouseButtonRelease) && (Event->button() == Qt::LeftButton))
403
    if ((Event->type() == QEvent::MouseButtonRelease) && (Event->button() == Qt::LeftButton))
184
    {
404
    {
185
        if (o_Map->currentCoordinate() == MapCenter)
405
        if (o_Map->currentCoordinate() == MapCenter)
186
        {
406
        {
-
 
407
            if (l_WayPoints.count() < 20)
-
 
408
            {
187
            pb_Add->setEnabled(true);
409
                pb_Add->setEnabled(true);
-
 
410
            }
188
            pb_Goto->setEnabled(true);
411
            pb_Goto->setEnabled(true);
189
 
412
 
190
            o_Click->removeGeometry(ClickPoint);
413
            o_Click->removeGeometry(ClickPoint);
191
 
414
 
192
            ClickPoint = new CirclePoint(Coord.x(), Coord.y(), 6, "P1", Point::Middle, Pen[1]);
415
            ClickPoint = new CirclePoint(Coord.x(), Coord.y(), 6, "P1", Point::Middle, Pen[1]);
193
//            LastPoint = P;
-
 
194
 
416
 
195
            LastClick = new Point(Coord.x(), Coord.y());
417
            LastClick = new Point(Coord.x(), Coord.y());
196
 
418
 
197
            ClickPoint->setBaselevel(o_Adapter->adaptedZoom());
419
            ClickPoint->setBaselevel(o_Adapter->adaptedZoom());
198
            o_Click->addGeometry(ClickPoint);
420
            o_Click->addGeometry(ClickPoint);