QGIS API Documentation 3.99.0-Master (e9821da5c6b)
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
22QgsBabelGpsDeviceFormat::QgsBabelGpsDeviceFormat( const QString &waypointDownloadCommand, const QString &waypointUploadCommand,
23 const QString &routeDownloadCommand, const QString &routeUploadCommand,
24 const QString &trackDownloadCommand, const QString &trackUploadCommand )
25{
26 const thread_local QRegularExpression whiteSpaceRx( u"\\s"_s );
27
28 if ( !waypointDownloadCommand.isEmpty() )
29 {
30 mWaypointDownloadCommand = waypointDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
33 }
34 if ( !waypointUploadCommand.isEmpty() )
35 {
36 mWaypointUploadCommand = waypointUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
39 }
40 if ( !routeDownloadCommand.isEmpty() )
41 {
42 mRouteDownloadCommand = routeDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
45 }
46 if ( !routeUploadCommand.isEmpty() )
47 {
48 mRouteUploadCommand = routeUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
51 }
52 if ( !trackDownloadCommand.isEmpty() )
53 {
54 mTrackDownloadCommand = trackDownloadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
57 }
58 if ( !trackUploadCommand.isEmpty() )
59 {
60 mTrackUploadCommand = trackUploadCommand.split( whiteSpaceRx, Qt::SkipEmptyParts );
63 }
64}
65
66QStringList QgsBabelGpsDeviceFormat::importCommand( const QString &babel,
68 const QString &in,
69 const QString &out, Qgis::BabelCommandFlags flags ) const
70{
71 QStringList original;
72
73 switch ( type )
74 {
76 original = mWaypointDownloadCommand;
77 break;
79 original = mRouteDownloadCommand;
80 break;
82 original = mTrackDownloadCommand;
83 break;
84 }
85
86 QStringList copy;
87 copy.reserve( original.size() );
88 for ( const QString &iter : std::as_const( original ) )
89 {
90 if ( iter == "%babel"_L1 )
91 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( babel ) : babel );
92 else if ( iter == "%type"_L1 )
93 copy.append( featureTypeToArgument( type ) );
94 else if ( iter == "%in"_L1 )
95 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( in ) : in );
96 else if ( iter == "%out"_L1 )
97 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( out ) : out );
98 else
99 copy.append( iter );
100 }
101 return copy;
102}
103
104QStringList QgsBabelGpsDeviceFormat::exportCommand( const QString &babel,
106 const QString &in,
107 const QString &out, Qgis::BabelCommandFlags flags ) const
108{
109 QStringList original;
110 switch ( type )
111 {
113 original = mWaypointUploadCommand;
114 break;
116 original = mRouteUploadCommand;
117 break;
119 original = mTrackUploadCommand;
120 break;
121 }
122
123 QStringList copy;
124 copy.reserve( original.size() );
125 for ( const QString &iter : std::as_const( original ) )
126 {
127 if ( iter == "%babel"_L1 )
128 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( babel ) : babel );
129 else if ( iter == "%type"_L1 )
130 copy.append( featureTypeToArgument( type ) );
131 else if ( iter == "%in"_L1 )
132 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( in ) : in );
133 else if ( iter == "%out"_L1 )
134 copy.append( ( flags & Qgis::BabelCommandFlag::QuoteFilePaths ) ? u"\"%1\""_s.arg( out ) : out );
135 else
136 copy.append( iter );
137 }
138 return copy;
139}
140
141
142
QFlags< BabelCommandFlag > BabelCommandFlags
Babel command flags.
Definition qgis.h:2075
@ QuoteFilePaths
File paths should be enclosed in quotations and escaped.
Definition qgis.h:2072
GpsFeatureType
GPS feature types.
Definition qgis.h:2085
@ Waypoint
Waypoint.
Definition qgis.h:2086
@ Export
Format supports exporting.
Definition qgis.h:2054
@ Tracks
Format supports tracks.
Definition qgis.h:2057
@ Import
Format supports importing.
Definition qgis.h:2053
@ Waypoints
Format supports waypoints.
Definition qgis.h:2055
@ Routes
Format supports routes.
Definition qgis.h:2056
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