File indexing completed on 2025-03-09 03:50:40
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2006-05-16 0007 * Description : a tool to export GPS data to KML file. 0008 * 0009 * SPDX-FileCopyrightText: 2006-2007 by Stephane Pontier <shadow dot walker at free dot fr> 0010 * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "kmlwidget.h" 0017 0018 // Qt includes 0019 0020 #include <QApplication> 0021 #include <QWindow> 0022 #include <QButtonGroup> 0023 #include <QCheckBox> 0024 #include <QGroupBox> 0025 #include <QLabel> 0026 #include <QGridLayout> 0027 #include <QPushButton> 0028 #include <QRadioButton> 0029 #include <QComboBox> 0030 #include <QLineEdit> 0031 #include <QCloseEvent> 0032 #include <QSpinBox> 0033 0034 // KDE includes 0035 0036 #include <ksharedconfig.h> 0037 #include <kconfiggroup.h> 0038 #include <klocalizedstring.h> 0039 0040 namespace DigikamGenericGeolocationEditPlugin 0041 { 0042 0043 KmlWidget::KmlWidget(GeolocationEdit* const dlg, 0044 GPSItemModel* const imageModel, 0045 DInfoInterface* const iface) 0046 : QWidget (dlg), 0047 m_model (imageModel), 0048 m_dlg (dlg), 0049 m_kmlExport(iface) 0050 { 0051 KMLExportConfigLayout = new QGridLayout(this); 0052 0053 const int spacing = qMin(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing), 0054 QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing)); 0055 0056 // -------------------------------------------------------------- 0057 // Target preferences 0058 0059 TargetPreferenceGroupBox = new QGroupBox(i18n("Target Preferences"), this); 0060 TargetPreferenceGroupBoxLayout = new QGridLayout(TargetPreferenceGroupBox); 0061 0062 // target type 0063 0064 TargetTypeGroupBox = new QGroupBox(i18n("Target Type"), this); 0065 buttonGroupTargetTypeLayout = new QGridLayout(TargetTypeGroupBox); 0066 buttonGroupTargetType = new QButtonGroup(TargetTypeGroupBox); 0067 LocalTargetRadioButton_ = new QRadioButton(i18n("&Local or web target used by GoogleEarth"), TargetTypeGroupBox); 0068 LocalTargetRadioButton_->setChecked(true); 0069 0070 GoogleMapTargetRadioButton_ = new QRadioButton(i18n("Web target used by GoogleMaps"), TargetTypeGroupBox); 0071 GoogleMapTargetRadioButton_->setToolTip(i18n("When using GoogleMaps, all images must have complete URLs, icons are " 0072 "squared, and when drawing a track, only line track is exported.")); 0073 0074 buttonGroupTargetTypeLayout->addWidget(LocalTargetRadioButton_, 0, 0, 1, 1); 0075 buttonGroupTargetTypeLayout->addWidget(GoogleMapTargetRadioButton_, 1, 0, 1, 1); 0076 buttonGroupTargetTypeLayout->setContentsMargins(spacing, spacing, spacing, spacing); 0077 buttonGroupTargetTypeLayout->setAlignment(Qt::AlignTop); 0078 0079 // -------------------------------------------------------------- 0080 // target preference, suite 0081 0082 QLabel* const AltitudeLabel_ = new QLabel(i18n("Picture Altitude:"), TargetPreferenceGroupBox); 0083 AltitudeCB_ = new QComboBox(TargetPreferenceGroupBox); 0084 AltitudeCB_->addItem(i18n("clamp to ground")); 0085 AltitudeCB_->addItem(i18n("relative to ground")); 0086 AltitudeCB_->addItem(i18n("absolute")); 0087 AltitudeCB_->setWhatsThis(i18n("<p>Specifies how pictures are displayed" 0088 "<dl>" 0089 "<dt>clamp to ground (default)</dt>" 0090 "<dd>Indicates to ignore an altitude specification</dd>" 0091 "<dt>relative to ground</dt>" 0092 "<dd>Sets the altitude of the element relative to the actual ground " 0093 "elevation of a particular location.</dd>" 0094 "<dt>absolute</dt>" 0095 "<dd>Sets the altitude of the coordinate relative to sea level, regardless " 0096 "of the actual elevation of the terrain beneath the element.</dd>" 0097 "</dl>" 0098 "</p>")); 0099 0100 destinationDirectoryLabel_ = new QLabel(i18n("Destination Directory:"), TargetPreferenceGroupBox); 0101 0102 DestinationDirectory_ = new DFileSelector(TargetPreferenceGroupBox); 0103 DestinationDirectory_->setFileDlgMode(QFileDialog::Directory); 0104 DestinationDirectory_->setFileDlgOptions(QFileDialog::ShowDirsOnly); 0105 DestinationDirectory_->setFileDlgTitle(i18nc("@title:window", "Select a Directory in Which to Save the KML File and Pictures")); 0106 0107 DestinationUrlLabel_ = new QLabel(i18n("Destination Path:"), TargetPreferenceGroupBox); 0108 DestinationUrl_ = new QLineEdit(TargetPreferenceGroupBox); 0109 FileNameLabel_ = new QLabel(i18n("Filename:"), TargetPreferenceGroupBox); 0110 FileName_ = new QLineEdit(TargetPreferenceGroupBox); 0111 0112 TargetPreferenceGroupBoxLayout->addWidget(TargetTypeGroupBox, 0, 0, 2, 5); 0113 TargetPreferenceGroupBoxLayout->addWidget(AltitudeLabel_, 2, 0, 1, 1); 0114 TargetPreferenceGroupBoxLayout->addWidget(AltitudeCB_, 2, 1, 1, 4); 0115 TargetPreferenceGroupBoxLayout->addWidget(destinationDirectoryLabel_, 3, 0, 1, 1); 0116 TargetPreferenceGroupBoxLayout->addWidget(DestinationDirectory_, 3, 1, 1, 4); 0117 TargetPreferenceGroupBoxLayout->addWidget(DestinationUrlLabel_, 4, 0, 1, 1); 0118 TargetPreferenceGroupBoxLayout->addWidget(DestinationUrl_, 4, 1, 1, 4); 0119 TargetPreferenceGroupBoxLayout->addWidget(FileNameLabel_, 5, 0, 1, 1); 0120 TargetPreferenceGroupBoxLayout->addWidget(FileName_, 5, 1, 1, 4); 0121 TargetPreferenceGroupBoxLayout->setContentsMargins(spacing, spacing, spacing, spacing); 0122 TargetPreferenceGroupBoxLayout->setAlignment(Qt::AlignTop); 0123 0124 // -------------------------------------------------------------- 0125 // Sizes 0126 0127 QGroupBox* const SizeGroupBox = new QGroupBox(i18n("Sizes"), this); 0128 SizeGroupBoxLayout = new QGridLayout(SizeGroupBox); 0129 IconSizeLabel = new QLabel(i18n("Icon Size:"), SizeGroupBox); 0130 IconSizeInput_ = new QSpinBox(SizeGroupBox); 0131 IconSizeInput_->setRange(1, 100); 0132 IconSizeInput_->setValue(33); 0133 0134 ImageSizeLabel = new QLabel(i18n("Image Size:"), SizeGroupBox); 0135 ImageSizeInput_ = new QSpinBox(SizeGroupBox); 0136 ImageSizeInput_->setRange(1, 10000); 0137 ImageSizeInput_->setValue(320); 0138 0139 SizeGroupBoxLayout->addWidget(IconSizeLabel, 0, 0, 1, 1); 0140 SizeGroupBoxLayout->addWidget(IconSizeInput_, 0, 1, 1, 1); 0141 SizeGroupBoxLayout->addWidget(ImageSizeLabel, 0, 2, 1, 1); 0142 SizeGroupBoxLayout->addWidget(ImageSizeInput_, 0, 3, 1, 1); 0143 SizeGroupBoxLayout->setContentsMargins(spacing, spacing, spacing, spacing); 0144 SizeGroupBoxLayout->setAlignment(Qt::AlignTop); 0145 0146 // -------------------------------------------------------------- 0147 // GPX Tracks 0148 0149 QGroupBox* const GPXTracksGroupBox = new QGroupBox(i18n("GPX Tracks"), this); 0150 QGridLayout* const GPXTracksGroupBoxLayout = new QGridLayout(GPXTracksGroupBox); 0151 0152 // add a gpx track checkbox 0153 0154 GPXTracksCheckBox_ = new QCheckBox(i18n("Draw GPX Track"), GPXTracksGroupBox); 0155 0156 // file selector 0157 0158 GPXFileLabel_ = new QLabel(i18n("GPX file:"), GPXTracksGroupBox); 0159 0160 GPXFileUrlRequester_ = new DFileSelector(GPXTracksGroupBox); 0161 GPXFileUrlRequester_->setFileDlgFilter(i18n("GPS Exchange Format (*.gpx)")); 0162 GPXFileUrlRequester_->setFileDlgTitle(i18nc("@title:window", "Select GPX File to Load")); 0163 GPXFileUrlRequester_->setFileDlgMode(QFileDialog::ExistingFile); 0164 0165 timeZoneLabel_ = new QLabel(i18n("Time Zone:"), GPXTracksGroupBox); 0166 timeZoneCB = new QComboBox(GPXTracksGroupBox); 0167 timeZoneCB->addItem(i18n("GMT-12:00"), 0); 0168 timeZoneCB->addItem(i18n("GMT-11:00"), 1); 0169 timeZoneCB->addItem(i18n("GMT-10:00"), 2); 0170 timeZoneCB->addItem(i18n("GMT-09:00"), 3); 0171 timeZoneCB->addItem(i18n("GMT-08:00"), 4); 0172 timeZoneCB->addItem(i18n("GMT-07:00"), 5); 0173 timeZoneCB->addItem(i18n("GMT-06:00"), 6); 0174 timeZoneCB->addItem(i18n("GMT-05:00"), 7); 0175 timeZoneCB->addItem(i18n("GMT-04:00"), 8); 0176 timeZoneCB->addItem(i18n("GMT-03:00"), 9); 0177 timeZoneCB->addItem(i18n("GMT-02:00"), 10); 0178 timeZoneCB->addItem(i18n("GMT-01:00"), 11); 0179 timeZoneCB->addItem(i18n("GMT"), 12); 0180 timeZoneCB->addItem(i18n("GMT+01:00"), 13); 0181 timeZoneCB->addItem(i18n("GMT+02:00"), 14); 0182 timeZoneCB->addItem(i18n("GMT+03:00"), 15); 0183 timeZoneCB->addItem(i18n("GMT+04:00"), 16); 0184 timeZoneCB->addItem(i18n("GMT+05:00"), 17); 0185 timeZoneCB->addItem(i18n("GMT+06:00"), 18); 0186 timeZoneCB->addItem(i18n("GMT+07:00"), 19); 0187 timeZoneCB->addItem(i18n("GMT+08:00"), 20); 0188 timeZoneCB->addItem(i18n("GMT+09:00"), 21); 0189 timeZoneCB->addItem(i18n("GMT+10:00"), 22); 0190 timeZoneCB->addItem(i18n("GMT+11:00"), 23); 0191 timeZoneCB->addItem(i18n("GMT+12:00"), 24); 0192 timeZoneCB->addItem(i18n("GMT+13:00"), 25); 0193 timeZoneCB->addItem(i18n("GMT+14:00"), 26); 0194 timeZoneCB->setWhatsThis(i18n("Sets the time zone of the camera during " 0195 "picture shooting, so that the time stamps of the GPS " 0196 "can be converted to match the local time")); 0197 0198 GPXLineWidthLabel_ = new QLabel(i18n("Track Width:"), GPXTracksGroupBox); 0199 GPXLineWidthInput_ = new QSpinBox(GPXTracksGroupBox); 0200 GPXLineWidthInput_->setValue(4); 0201 0202 GPXColorLabel_ = new QLabel(i18n("Track Color:"), GPXTracksGroupBox); 0203 GPXTrackColor_ = new DColorSelector(GPXTracksGroupBox); 0204 GPXTrackColor_->setColor(QColor(0xff, 0xff, 0xff)); 0205 0206 GPXTracksOpacityLabel_ = new QLabel(i18n("Opacity (%):"), GPXTracksGroupBox); 0207 GPXTracksOpacityInput_ = new QSpinBox(GPXTracksGroupBox); 0208 GPXTracksOpacityInput_->setRange(0, 100); 0209 GPXTracksOpacityInput_->setSingleStep(1); 0210 GPXTracksOpacityInput_->setValue(100); 0211 0212 GPXAltitudeLabel_ = new QLabel(i18n("Track Altitude:"), GPXTracksGroupBox); 0213 GPXAltitudeCB_ = new QComboBox(GPXTracksGroupBox); 0214 GPXAltitudeCB_->addItem(i18n("clamp to ground")); 0215 GPXAltitudeCB_->addItem(i18n("relative to ground")); 0216 GPXAltitudeCB_->addItem(i18n("absolute")); 0217 GPXAltitudeCB_->setWhatsThis(i18n("<p>Specifies how the points are displayed" 0218 "<dl>" 0219 "<dt>clamp to ground (default)</dt>" 0220 "<dd>Indicates to ignore an altitude specification</dd>" 0221 "<dt>relative to ground</dt>" 0222 "<dd>Sets the altitude of the element relative to the actual ground " 0223 "elevation of a particular location.</dd>" 0224 "<dt>absolute</dt>" 0225 "<dd>Sets the altitude of the coordinate relative to sea level, " 0226 "regardless of the actual elevation of the terrain beneath " 0227 "the element.</dd>" 0228 "</dl>" 0229 "</p>")); 0230 0231 GPXTracksGroupBoxLayout->addWidget(GPXTracksCheckBox_, 0, 0, 1, 4); 0232 GPXTracksGroupBoxLayout->addWidget(GPXFileLabel_, 1, 0, 1, 1); 0233 GPXTracksGroupBoxLayout->addWidget(GPXFileUrlRequester_, 1, 1, 1, 3); 0234 GPXTracksGroupBoxLayout->addWidget(timeZoneLabel_, 2, 0, 1, 1); 0235 GPXTracksGroupBoxLayout->addWidget(timeZoneCB, 2, 1, 1, 3); 0236 GPXTracksGroupBoxLayout->addWidget(GPXLineWidthLabel_, 3, 0, 1, 1); 0237 GPXTracksGroupBoxLayout->addWidget(GPXLineWidthInput_, 3, 1, 1, 3); 0238 GPXTracksGroupBoxLayout->addWidget(GPXColorLabel_, 4, 0, 1, 1); 0239 GPXTracksGroupBoxLayout->addWidget(GPXTrackColor_, 4, 1, 1, 1); 0240 GPXTracksGroupBoxLayout->addWidget(GPXTracksOpacityLabel_, 4, 2, 1, 1); 0241 GPXTracksGroupBoxLayout->addWidget(GPXTracksOpacityInput_, 4, 3, 1, 1); 0242 GPXTracksGroupBoxLayout->addWidget(GPXAltitudeLabel_, 5, 0, 1, 1); 0243 GPXTracksGroupBoxLayout->addWidget(GPXAltitudeCB_, 5, 1, 1, 3); 0244 GPXTracksGroupBoxLayout->setContentsMargins(spacing, spacing, spacing, spacing); 0245 GPXTracksGroupBoxLayout->setAlignment(Qt::AlignTop); 0246 0247 // -------------------------------------------------------------- 0248 0249 m_geneBtn = new QPushButton(i18n("Generate KML file"), this); 0250 0251 KMLExportConfigLayout->addWidget(TargetPreferenceGroupBox, 0, 0); 0252 KMLExportConfigLayout->addWidget(SizeGroupBox, 1, 0); 0253 KMLExportConfigLayout->addWidget(GPXTracksGroupBox, 2, 0); 0254 KMLExportConfigLayout->addWidget(m_geneBtn, 3, 0); 0255 KMLExportConfigLayout->setContentsMargins(spacing, spacing, spacing, spacing); 0256 0257 // -------------------------------------------------------------- 0258 0259 connect(m_geneBtn, SIGNAL(clicked()), 0260 this, SLOT(slotKMLGenerate())); 0261 0262 connect(GoogleMapTargetRadioButton_, SIGNAL(toggled(bool)), 0263 this, SLOT(slotGoogleMapTargetRadioButtonToggled(bool))); 0264 0265 connect(GPXTracksCheckBox_, SIGNAL(toggled(bool)), 0266 this, SLOT(slotKMLTracksCheckButtonToggled(bool))); 0267 0268 connect(this, SIGNAL(signalSetUIEnabled(bool)), 0269 m_dlg, SLOT(slotSetUIEnabled(bool))); 0270 0271 connect(this, SIGNAL(signalProgressSetup(int,QString)), 0272 m_dlg, SLOT(slotProgressSetup(int,QString))); 0273 0274 connect(&m_kmlExport, SIGNAL(signalProgressChanged(int)), 0275 m_dlg, SLOT(slotProgressChanged(int))); 0276 0277 // -------------------------------------------------------------- 0278 0279 readSettings(); 0280 slotGoogleMapTargetRadioButtonToggled(true); 0281 slotKMLTracksCheckButtonToggled(false); 0282 } 0283 0284 KmlWidget::~KmlWidget() 0285 { 0286 saveSettings(); 0287 } 0288 0289 void KmlWidget::slotKMLGenerate() 0290 { 0291 Q_EMIT signalSetUIEnabled(false); 0292 m_geneBtn->setEnabled(false); 0293 Q_EMIT signalProgressSetup(m_model->rowCount(), i18n("Generate KML file")); 0294 0295 saveSettings(); 0296 0297 QList<QUrl> urls; 0298 0299 for (int i = 0 ; i < m_model->rowCount() ; ++i) 0300 { 0301 GPSItemContainer* const item = m_model->itemFromIndex(m_model->index(i, 0)); 0302 0303 if (item) 0304 { 0305 urls << item->url(); 0306 } 0307 } 0308 0309 m_kmlExport.setUrls(urls); 0310 m_kmlExport.generate(); 0311 0312 m_geneBtn->setEnabled(true); 0313 Q_EMIT signalSetUIEnabled(true); 0314 } 0315 0316 void KmlWidget::slotGoogleMapTargetRadioButtonToggled(bool) 0317 { 0318 if (GoogleMapTargetRadioButton_->isChecked()) 0319 { 0320 DestinationUrlLabel_->setEnabled(true); 0321 DestinationUrl_->setEnabled(true); 0322 IconSizeLabel->setEnabled(false); 0323 IconSizeInput_->setEnabled(false); 0324 } 0325 else 0326 { 0327 DestinationUrlLabel_->setEnabled(false); 0328 DestinationUrl_->setEnabled(false); 0329 IconSizeLabel->setEnabled(true); 0330 IconSizeInput_->setEnabled(true); 0331 } 0332 } 0333 0334 void KmlWidget::slotKMLTracksCheckButtonToggled(bool) 0335 { 0336 if (GPXTracksCheckBox_->isChecked()) 0337 { 0338 GPXFileUrlRequester_->setEnabled(true); 0339 GPXFileLabel_->setEnabled(true); 0340 timeZoneCB->setEnabled(true); 0341 GPXColorLabel_->setEnabled(true); 0342 GPXAltitudeLabel_->setEnabled(true); 0343 timeZoneLabel_->setEnabled(true); 0344 GPXAltitudeCB_->setEnabled(true); 0345 GPXTrackColor_->setEnabled(true); 0346 GPXLineWidthLabel_->setEnabled(true); 0347 GPXLineWidthInput_->setEnabled(true); 0348 GPXTracksOpacityInput_->setEnabled(true); 0349 } 0350 else 0351 { 0352 GPXFileUrlRequester_->setEnabled(false); 0353 GPXFileLabel_->setEnabled(false); 0354 timeZoneCB->setEnabled(false); 0355 GPXColorLabel_->setEnabled(false); 0356 GPXAltitudeLabel_->setEnabled(false); 0357 timeZoneLabel_->setEnabled(false); 0358 GPXAltitudeCB_->setEnabled(false); 0359 GPXTrackColor_->setEnabled(false); 0360 GPXLineWidthLabel_->setEnabled(false); 0361 GPXLineWidthInput_->setEnabled(false); 0362 GPXTracksOpacityInput_->setEnabled(false); 0363 } 0364 } 0365 0366 void KmlWidget::readSettings() 0367 { 0368 bool localTarget; 0369 bool optimize_googlemap; 0370 int iconSize; 0371 0372 /// int googlemapSize; 0373 int size; 0374 QString UrlDestDir; 0375 QString baseDestDir; 0376 QString KMLFileName; 0377 int AltitudeMode; 0378 0379 bool GPXtracks; 0380 QString GPXFile; 0381 int TimeZone; 0382 int LineWidth; 0383 QString GPXColor; 0384 int GPXOpacity; 0385 int GPXAltitudeMode; 0386 0387 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0388 KConfigGroup group = config->group(QLatin1String("KMLExport Settings")); 0389 0390 localTarget = group.readEntry(QLatin1String("localTarget"), true); 0391 optimize_googlemap = group.readEntry(QLatin1String("optimize_googlemap"), false); 0392 iconSize = group.readEntry(QLatin1String("iconSize"), 33); 0393 0394 // not saving this size as it should not change 0395 // googlemapSize = group.readNumEntry("googlemapSize", 32); 0396 0397 size = group.readEntry(QLatin1String("size"), 320); 0398 0399 /// UrlDestDir have to have the trailing / 0400 baseDestDir = group.readEntry(QLatin1String("baseDestDir"), QString::fromUtf8("/tmp/")); 0401 UrlDestDir = group.readEntry(QLatin1String("UrlDestDir"), QString::fromUtf8("https://www.example.com/")); 0402 KMLFileName = group.readEntry(QLatin1String("KMLFileName"), QString::fromUtf8("kmldocument")); 0403 AltitudeMode = group.readEntry(QLatin1String("Altitude Mode"), 0); 0404 0405 GPXtracks = group.readEntry(QLatin1String("UseGPXTracks"), false); 0406 GPXFile = group.readEntry(QLatin1String("GPXFile"), QString()); 0407 TimeZone = group.readEntry(QLatin1String("Time Zone"), 12); 0408 LineWidth = group.readEntry(QLatin1String("Line Width"), 4); 0409 GPXColor = group.readEntry(QLatin1String("Track Color"), QString::fromUtf8("#17eeee")); 0410 GPXOpacity = group.readEntry(QLatin1String("Track Opacity"), 64); 0411 GPXAltitudeMode = group.readEntry(QLatin1String("GPX Altitude Mode"), 0); 0412 0413 // -- Apply Settings to widgets ------------------------------ 0414 0415 LocalTargetRadioButton_->setChecked(localTarget); 0416 GoogleMapTargetRadioButton_->setChecked(optimize_googlemap); 0417 0418 IconSizeInput_->setValue(iconSize); 0419 ImageSizeInput_->setValue(size); 0420 0421 AltitudeCB_->setCurrentIndex(AltitudeMode); 0422 DestinationDirectory_->lineEdit()->setText(baseDestDir); 0423 DestinationUrl_->setText(UrlDestDir); 0424 FileName_->setText(KMLFileName); 0425 0426 GPXTracksCheckBox_->setChecked(GPXtracks); 0427 timeZoneCB->setCurrentIndex(TimeZone); 0428 GPXLineWidthInput_->setValue(LineWidth); 0429 GPXTrackColor_->setColor(GPXColor); 0430 GPXTracksOpacityInput_->setValue(GPXOpacity); 0431 GPXAltitudeCB_->setCurrentIndex(GPXAltitudeMode); 0432 } 0433 0434 void KmlWidget::saveSettings() 0435 { 0436 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0437 KConfigGroup group = config->group(QLatin1String("KMLExport Settings")); 0438 0439 group.writeEntry(QLatin1String("localTarget"), LocalTargetRadioButton_->isChecked()); 0440 group.writeEntry(QLatin1String("optimize_googlemap"), GoogleMapTargetRadioButton_->isChecked()); 0441 group.writeEntry(QLatin1String("iconSize"), IconSizeInput_->value()); 0442 group.writeEntry(QLatin1String("size"), ImageSizeInput_->value()); 0443 0444 QString destination = DestinationDirectory_->lineEdit()->text(); 0445 0446 if (!destination.endsWith(QLatin1Char('/'))) 0447 { 0448 destination.append(QLatin1Char('/')); 0449 } 0450 0451 group.writeEntry(QLatin1String("baseDestDir"), destination); 0452 QString url = DestinationUrl_->text(); 0453 0454 if (!url.endsWith(QLatin1Char('/'))) 0455 { 0456 url.append(QLatin1Char('/')); 0457 } 0458 0459 group.writeEntry(QLatin1String("UrlDestDir"), url); 0460 group.writeEntry(QLatin1String("KMLFileName"), FileName_->text()); 0461 group.writeEntry(QLatin1String("Altitude Mode"), AltitudeCB_->currentIndex()); 0462 group.writeEntry(QLatin1String("UseGPXTracks"), GPXTracksCheckBox_->isChecked()); 0463 group.writeEntry(QLatin1String("GPXFile"), GPXFileUrlRequester_->lineEdit()->text()); 0464 group.writeEntry(QLatin1String("Time Zone"), timeZoneCB->currentIndex()); 0465 group.writeEntry(QLatin1String("Line Width"), GPXLineWidthInput_->value()); 0466 group.writeEntry(QLatin1String("Track Color"), GPXTrackColor_->color().name()); 0467 group.writeEntry(QLatin1String("Track Opacity"), GPXTracksOpacityInput_->value()); 0468 group.writeEntry(QLatin1String("GPX Altitude Mode"), GPXAltitudeCB_->currentIndex()); 0469 0470 config->sync(); 0471 } 0472 0473 } // namespace DigikamGenericGeolocationEditPlugin 0474 0475 #include "moc_kmlwidget.cpp"