QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsbabelgpsdevice.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsbabelgpsdevice.cpp
3 --------------------------------------
4 Date : Sun Sep 16 12:04:15 AKDT 2007
5 Copyright : (C) 2007 by Gary E. Sherman
6 Email : sherman at mrcc dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#include "qgsbabelgpsdevice.h"
16
17#include <QRegularExpression>
18#include <QString>
19
20using namespace Qt::StringLiterals;
21
23 const QString &waypointDownloadCommand,
24 const QString &waypointUploadCommand,
25 const QString &routeDownloadCommand,
26 const QString &routeUploadCommand,
27 const QString &trackDownloadCommand,
28 const QString &trackUploadCommand
29)
30{
31 const thread_local QRegularExpression whiteSpaceRx( u"\\s"_s );
32
33 if ( !waypointDownloadCommand.isEmpty() )
34 {
35 mWaypointDownloadCommand = waypointDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
38 }
39 if ( !waypointUploadCommand.isEmpty() )
40 {
41 mWaypointUploadCommand = waypointUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
44 }
45 if ( !routeDownloadCommand.isEmpty() )
46 {
47 mRouteDownloadCommand = routeDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
50 }
51 if ( !routeUploadCommand.isEmpty() )
52 {
53 mRouteUploadCommand = routeUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
56 }
57 if ( !trackDownloadCommand.isEmpty() )
58 {
59 mTrackDownloadCommand = trackDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
62 }
63 if ( !trackUploadCommand.isEmpty() )
64 {
65 mTrackUploadCommand = trackUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
68 }
69}
70
71QStringList QgsBabelGpsDeviceFormat::importCommand( const QString &babel, Qgis::GpsFeatureType type, const QString &in, const QString &out, Qgis::BabelCommandFlags flags ) const
72{
73 QStringList original;
74
75 switch ( type )
76 {
78 original = mWaypointDownloadCommand;
79 break;
81 original = mRouteDownloadCommand;
82 break;
84 original = mTrackDownloadCommand;
85 break;
86 }
87
88 QStringList copy;
89 copy.reserve( original.size() );
90 for ( const QString &iter : std::as_const( original ) )
91 {
92 if ( iter == "%babel"_L1 )
93 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( babel ) : babel );
94 else if ( iter == "%type"_L1 )
95 copy.append( featureTypeToArgument( type ) );
96 else if ( iter == "%in"_L1 )
97 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( in ) : in );
98 else if ( iter == "%out"_L1 )
99 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( out ) : out );
100 else
101 copy.append( iter );
102 }
103 return copy;
104}
105
106QStringList QgsBabelGpsDeviceFormat::exportCommand( const QString &babel, Qgis::GpsFeatureType type, const QString &in, const QString &out, Qgis::BabelCommandFlags flags ) const
107{
108 QStringList original;
109 switch ( type )
110 {
112 original = mWaypointUploadCommand;
113 break;
115 original = mRouteUploadCommand;
116 break;
118 original = mTrackUploadCommand;
119 break;
120 }
121
122 QStringList copy;
123 copy.reserve( original.size() );
124 for ( const QString &iter : std::as_const( original ) )
125 {
126 if ( iter == "%babel"_L1 )
127 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( babel ) : babel );
128 else if ( iter == "%type"_L1 )
129 copy.append( featureTypeToArgument( type ) );
130 else if ( iter == "%in"_L1 )
131 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( in ) : in );
132 else if ( iter == "%out"_L1 )
133 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( out ) : out );
134 else
135 copy.append( iter );
136 }
137 return copy;
138}
QFlags< BabelCommandFlag > BabelCommandFlags
Babel command flags.
Definition qgis.h:2096
@ QuoteFilePaths
File paths should be enclosed in quotations and escaped.
Definition qgis.h:2093
GpsFeatureType
GPS feature types.
Definition qgis.h:2106
@ Waypoint
Waypoint.
Definition qgis.h:2107
@ Export
Format supports exporting.
Definition qgis.h:2075
@ Tracks
Format supports tracks.
Definition qgis.h:2078
@ Import
Format supports importing.
Definition qgis.h:2074
@ Waypoints
Format supports waypoints.
Definition qgis.h:2076
@ Routes
Format supports routes.
Definition qgis.h:2077
Qgis::BabelFormatCapabilities mCapabilities
static QString featureTypeToArgument(Qgis::GpsFeatureType type)
Converts a GPS feature type to the equivalent babel argument.
QStringList exportCommand(const QString &babel, Qgis::GpsFeatureType type, const QString &in, const QString &out, Qgis::BabelCommandFlags flags=Qgis::BabelCommandFlags()) const override
Generates a command for exporting GPS data into a different format using babel.
QStringList importCommand(const QString &babel, Qgis::GpsFeatureType type, const QString &in, const QString &out, Qgis::BabelCommandFlags flags=Qgis::BabelCommandFlags()) const override
Generates a command for importing data into a GPS format using babel.
QgsBabelGpsDeviceFormat()=default