/* ============================================================ * * This file is a part of kipi-plugins project * http://www.kipi-plugins.org * * Date : 2006-05-16 * Description : a tool to export GPS data to KML file. * * Copyright (C) 2006-2007 by Stephane Pontier * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ // TQt includes. #include #include #include #include #include #include #include #include #include #include #include // KDE includes. #include #include #include #include #include #include #include #include #include "kpaboutdata.h" #include #include #include // Local includes. #include "pluginsversion.h" #include "kmlexportconfig.h" #include "kmlexportconfig.moc" namespace KIPIGPSSyncPlugin { /* * Constructs a KIPIKMLExport::KMLExportConfig which is a child of 'parent', with the * name 'name'.' */ KMLExportConfig::KMLExportConfig( TQWidget* parent, const char* name) : KDialogBase(Plain, i18n("KML Export"), Help|Ok|Cancel, Ok, parent, 0, true, false) { if ( !name ) setName( "KMLExportConfig" ); setSizePolicy( TQSizePolicy( (TQSizePolicy::SizeType)0, (TQSizePolicy::SizeType)0, 0, 0, sizePolicy().hasHeightForWidth() ) ); KMLExportConfigLayout = new TQGridLayout ( plainPage(), 1, 3, 0, spacingHint()); // -------------------------------------------------------------- // Target preferences TargetPreferenceGroupBox = new TQGroupBox(0, TQt::Vertical, i18n( "Target Preferences" ), plainPage()); TargetPreferenceGroupBoxLayout = new TQGridLayout( TargetPreferenceGroupBox->layout(), 6, 5, KDialog::spacingHint()); TargetPreferenceGroupBoxLayout->setAlignment( TQt::AlignTop ); // target type buttonGroupTargetType = new TQButtonGroup(0, TQt::Vertical, i18n( "Target Type" ), TargetPreferenceGroupBox, "buttonGroupTargetType" ); buttonGroupTargetTypeLayout = new TQGridLayout( buttonGroupTargetType->layout(), 2, 1, KDialog::spacingHint() ); buttonGroupTargetTypeLayout->setAlignment( TQt::AlignTop ); LocalTargetRadioButton_ = new TQRadioButton( i18n( "&Local or web target used by GoogleEarth" ), buttonGroupTargetType, "LocalTargetRadioButton_" ); LocalTargetRadioButton_->setChecked( true ); buttonGroupTargetTypeLayout->addWidget( LocalTargetRadioButton_, 0, 0 ); GoogleMapTargetRadioButton_ = new TQRadioButton( i18n( "Web target used by GoogleMap" ), buttonGroupTargetType, "GoogleMapTargetRadioButton_" ); buttonGroupTargetTypeLayout->addWidget( GoogleMapTargetRadioButton_, 1, 0 ); TQToolTip::add( GoogleMapTargetRadioButton_, i18n( "When using GoogleMap, all image must have complete URL, icons are squared and when drawing a track, only linetrack is exported" ) ); // -------------------------------------------------------------- // target preference, suite TargetPreferenceGroupBoxLayout->addMultiCellWidget( buttonGroupTargetType, 0, 1, 0, 4 ); TQLabel *AltitudeLabel_ = new TQLabel(i18n("Picture altitude" ), TargetPreferenceGroupBox, "AltitudeLabel_"); TargetPreferenceGroupBoxLayout->addMultiCellWidget( AltitudeLabel_, 2, 2, 0, 4 ); AltitudeCB_ = new TQComboBox( false, TargetPreferenceGroupBox ); AltitudeCB_->insertItem(i18n("clamp to ground")); AltitudeCB_->insertItem(i18n("relative to ground")); AltitudeCB_->insertItem(i18n("absolute")); TQWhatsThis::add(AltitudeCB_, i18n("

Specifies how pictures are displayed" "

clamp to ground (default)
" "
Indicates to ignore an altitude specification
" "
relative to ground
" "
Sets the altitude of the element relative to the actual ground " "elevation of a particular location.
" "
absolute
" "
Sets the altitude of the coordinate relative to sea level, regardless " "of the actual elevation of the terrain beneath the element.
")); TargetPreferenceGroupBoxLayout->addMultiCellWidget( AltitudeCB_, 2, 2, 2, 4 ); destinationDirectoryLabel_ = new TQLabel( i18n( "Destination directory" ), TargetPreferenceGroupBox, "destinationDirectoryLabel_" ); TargetPreferenceGroupBoxLayout->addMultiCellWidget( destinationDirectoryLabel_, 3, 3, 0, 2 ); // DestinationDirectory_ = new TQLineEdit( TargetPreferenceGroupBox, "DestinationDirectory_" ); DestinationDirectory_= new KURLRequester( TargetPreferenceGroupBox, "DestinationDirectory_"); DestinationDirectory_->setCaption(i18n("Select a directory to save the kml file and pictures")); DestinationDirectory_->setMode(KFile::Directory | KFile::LocalOnly ); TargetPreferenceGroupBoxLayout->addMultiCellWidget( DestinationDirectory_, 3, 3, 3, 4 ); DestinationUrlLabel_ = new TQLabel( i18n( "Destination URL" ), TargetPreferenceGroupBox, "DestinationUrlLabel_" ); TargetPreferenceGroupBoxLayout->addMultiCellWidget( DestinationUrlLabel_, 4, 4, 0, 1 ); DestinationURL_ = new TQLineEdit( TargetPreferenceGroupBox, "DestinationURL_" ); TargetPreferenceGroupBoxLayout->addMultiCellWidget( DestinationURL_, 4, 4, 2, 4 ); FileNameLabel_ = new TQLabel( i18n( "File name" ), TargetPreferenceGroupBox, "FileNameLabel_" ); TargetPreferenceGroupBoxLayout->addWidget( FileNameLabel_, 5, 0 ); FileName_ = new TQLineEdit( TargetPreferenceGroupBox, "FileName_" ); TargetPreferenceGroupBoxLayout->addMultiCellWidget( FileName_, 5, 5, 1, 4 ); KMLExportConfigLayout->addWidget( TargetPreferenceGroupBox, 0, 0 ); // -------------------------------------------------------------- // Sizes TQGroupBox *SizeGroupBox = new TQGroupBox(0, TQt::Vertical, i18n( "Sizes" ), plainPage() ); SizeGroupBox->setColumnLayout(0, TQt::Vertical ); SizeGroupBoxLayout = new TQGridLayout( SizeGroupBox->layout(), 2, 3, KDialog::spacingHint() ); SizeGroupBoxLayout->setAlignment( TQt::AlignTop ); IconSizeLabel = new TQLabel( i18n( "Icon size" ), SizeGroupBox, "IconSizeLabel" ); SizeGroupBoxLayout->addWidget( IconSizeLabel, 0, 0 ); IconSizeInput_ = new KIntNumInput( SizeGroupBox, "IconSizeInput_" ); IconSizeInput_->setValue( 33 ); SizeGroupBoxLayout->addWidget( IconSizeInput_, 0, 1 ); spacer3 = new TQSpacerItem( 191, 21, TQSizePolicy::Expanding, TQSizePolicy::Minimum ); SizeGroupBoxLayout->addItem( spacer3, 0, 2 ); ImageSizeLabel = new TQLabel( i18n( "Image size" ), SizeGroupBox, "ImageSizeLabel" ); SizeGroupBoxLayout->addWidget( ImageSizeLabel, 1, 0 ); ImageSizeInput_ = new KIntNumInput( SizeGroupBox, "ImageSizeInput_" ); ImageSizeInput_->setValue( 320 ); SizeGroupBoxLayout->addWidget( ImageSizeInput_, 1, 1 ); spacer4 = new TQSpacerItem( 191, 20, TQSizePolicy::Expanding, TQSizePolicy::Minimum ); SizeGroupBoxLayout->addItem( spacer4, 1, 2 ); KMLExportConfigLayout->addWidget( SizeGroupBox, 1, 0 ); // -------------------------------------------------------------- // GPX Tracks TQGroupBox *GPXTracksGroupBox = new TQGroupBox(0, TQt::Vertical, i18n( "GPX Tracks" ), plainPage()); TQGridLayout *GPXTracksGroupBoxLayout = new TQGridLayout(GPXTracksGroupBox->layout(), 5, 4, KDialog::spacingHint()); GPXTracksGroupBoxLayout->setAlignment( TQt::AlignTop ); // add a gpx track checkbox GPXTracksCheckBox_ = new TQCheckBox( i18n( "Draw GPX track" ), GPXTracksGroupBox, "GPXTracksCheckBox"); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXTracksCheckBox_, 0, 0, 0, 3); // file selector GPXFileLabel_ = new TQLabel( i18n( "GPX file" ), GPXTracksGroupBox, "GPXFileLabel_" ); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXFileLabel_, 1, 1, 0, 0); GPXFileKURLRequester_ = new KURLRequester( GPXTracksGroupBox, "GPXFileKURLRequester" ); GPXFileKURLRequester_->setFilter(i18n("%1|GPS Exchange Format").arg("*.gpx")); GPXFileKURLRequester_->setCaption(i18n("Select GPX File to Load")); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXFileKURLRequester_, 1, 1, 1, 3); timeZoneLabel_ = new TQLabel(i18n("Time zone"), GPXTracksGroupBox); GPXTracksGroupBoxLayout->addMultiCellWidget( timeZoneLabel_, 2, 2, 0, 0); timeZoneCB = new TQComboBox( false, GPXTracksGroupBox ); timeZoneCB->insertItem(i18n("GMT-12:00"), 0); timeZoneCB->insertItem(i18n("GMT-11:00"), 1); timeZoneCB->insertItem(i18n("GMT-10:00"), 2); timeZoneCB->insertItem(i18n("GMT-09:00"), 3); timeZoneCB->insertItem(i18n("GMT-08:00"), 4); timeZoneCB->insertItem(i18n("GMT-07:00"), 5); timeZoneCB->insertItem(i18n("GMT-06:00"), 6); timeZoneCB->insertItem(i18n("GMT-05:00"), 7); timeZoneCB->insertItem(i18n("GMT-04:00"), 8); timeZoneCB->insertItem(i18n("GMT-03:00"), 9); timeZoneCB->insertItem(i18n("GMT-02:00"), 10); timeZoneCB->insertItem(i18n("GMT-01:00"), 11); timeZoneCB->insertItem(i18n("GMT"), 12); timeZoneCB->insertItem(i18n("GMT+01:00"), 13); timeZoneCB->insertItem(i18n("GMT+02:00"), 14); timeZoneCB->insertItem(i18n("GMT+03:00"), 15); timeZoneCB->insertItem(i18n("GMT+04:00"), 16); timeZoneCB->insertItem(i18n("GMT+05:00"), 17); timeZoneCB->insertItem(i18n("GMT+06:00"), 18); timeZoneCB->insertItem(i18n("GMT+07:00"), 19); timeZoneCB->insertItem(i18n("GMT+08:00"), 20); timeZoneCB->insertItem(i18n("GMT+09:00"), 21); timeZoneCB->insertItem(i18n("GMT+10:00"), 22); timeZoneCB->insertItem(i18n("GMT+11:00"), 23); timeZoneCB->insertItem(i18n("GMT+12:00"), 24); timeZoneCB->insertItem(i18n("GMT+13:00"), 25); timeZoneCB->insertItem(i18n("GMT+14:00"), 26); TQWhatsThis::add(timeZoneCB, i18n("

Sets the time zone of the camera during " "picture shooting, so that the time stamps of the GPS " "can be converted to match the local time")); GPXTracksGroupBoxLayout->addMultiCellWidget( timeZoneCB, 2, 2, 1, 3); GPXLineWidthLabel_ = new TQLabel( i18n( "Track width" ), GPXTracksGroupBox, "GPXLineWidthLabel_" ); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXLineWidthLabel_, 3, 3, 0, 0); GPXLineWidthInput_ = new KIntNumInput( GPXTracksGroupBox, "GPXLineWidthInput_" ); GPXLineWidthInput_->setValue( 4 ); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXLineWidthInput_, 3, 3, 1, 3); GPXColorLabel_ = new TQLabel( i18n( "Track color" ), GPXTracksGroupBox, "GPXColorLabel_" ); GPXTracksGroupBoxLayout->addWidget( GPXColorLabel_, 4, 0 ); GPXTrackColor_ = new KColorButton(TQColor("#ffffff"), GPXTracksGroupBox); GPXTracksGroupBoxLayout->addWidget( GPXTrackColor_, 4, 1 ); GPXTracksOpacityInput_ = new KIntNumInput( GPXTracksGroupBox , "GPXTracksOpacityInput_" ); GPXTracksOpacityInput_->setRange( 0, 100, 1, false ); GPXTracksOpacityInput_->setValue( 100 ); GPXTracksOpacityInput_->setLabel( i18n( "Opacity:" ), AlignVCenter); GPXTracksOpacityInput_->setSuffix( TQString::fromAscii( "%" ) ); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXTracksOpacityInput_, 4, 4, 2, 3); GPXAltitudeLabel_ = new TQLabel( i18n( "Track altitude" ), GPXTracksGroupBox, "GPXAltitudeLabel_" ); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXAltitudeLabel_, 5, 5, 0, 0); GPXAltitudeCB_ = new TQComboBox( false, GPXTracksGroupBox ); GPXAltitudeCB_->insertItem(i18n("clamp to ground")); GPXAltitudeCB_->insertItem(i18n("relative to ground")); GPXAltitudeCB_->insertItem(i18n("absolute")); TQWhatsThis::add(GPXAltitudeCB_, i18n("

Specifies how the points are displayed" "

clamp to ground (default)
" "
Indicates to ignore an altitude specification
" "
relative to ground
" "
Sets the altitude of the element relative to the actual ground " "elevation of a particular location.
" "
absolute
" "
Sets the altitude of the coordinate relative to sea level, " "regardless of the actual elevation of the terrain beneath " "the element.
")); GPXTracksGroupBoxLayout->addMultiCellWidget( GPXAltitudeCB_, 5, 5, 1, 3); KMLExportConfigLayout->addWidget( GPXTracksGroupBox, 2, 0 ); connect( GoogleMapTargetRadioButton_, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( GoogleMapTargetRadioButton__toggled(bool) ) ); connect( GPXTracksCheckBox_, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( KMLTracksCheckButton__toggled(bool) ) ); // -------------------------------------------------------------- // About data and help button. m_about = new KIPIPlugins::KPAboutData(I18N_NOOP("KML Export"), 0, TDEAboutData::License_GPL, I18N_NOOP("A Kipi plugin for kml exporting"), "(c) 2006-2007, Stéphane Pontier"); m_about->addAuthor("Stéphane Pontier", I18N_NOOP("Author"), "shadow.walker@free.fr"); KHelpMenu* helpMenu = new KHelpMenu(this, m_about, false); helpMenu->menu()->removeItemAt(0); helpMenu->menu()->insertItem(i18n("Plugin Handbook"), this, TQT_SLOT(slotHelp()), 0, -1, 0); actionButton(Help)->setPopup( helpMenu->menu() ); // -------------------------------------------------------------- // Configuration file management config_ = new TDEConfig("kipirc"); config_->setGroup("KMLExport Settings"); readSettings(); // -------------------------------------------------------------- // Just to initialize the UI GoogleMapTargetRadioButton__toggled(true); KMLTracksCheckButton__toggled(false); } /* * Destroys the object and frees any allocated resources */ KMLExportConfig::~KMLExportConfig() { // no need to delete child widgets, TQt does it all for us if(config_) delete config_; delete m_about; } void KMLExportConfig::slotOk() //void KMLExportConfig::slotOkClicked() { saveSettings(); emit okButtonClicked(); accept(); } void KMLExportConfig::slotHelp() { TDEApplication::kApplication()->invokeHelp("KMLExport", "kipi-plugins"); } void KMLExportConfig::GoogleMapTargetRadioButton__toggled(bool) { if (GoogleMapTargetRadioButton_->isChecked()) { DestinationUrlLabel_->setEnabled(true); DestinationURL_->setEnabled(true); IconSizeLabel->setEnabled(false); IconSizeInput_->setEnabled(false); } else { DestinationUrlLabel_->setEnabled(false); DestinationURL_->setEnabled(false); IconSizeLabel->setEnabled(true); IconSizeInput_->setEnabled(true); } } void KMLExportConfig::KMLTracksCheckButton__toggled(bool) { if (GPXTracksCheckBox_->isChecked()) { GPXFileKURLRequester_->setEnabled(true); GPXFileLabel_->setEnabled(true); timeZoneCB->setEnabled(true); GPXColorLabel_->setEnabled(true); GPXAltitudeLabel_->setEnabled(true); timeZoneLabel_->setEnabled(true); GPXAltitudeCB_->setEnabled(true); GPXTrackColor_->setEnabled(true); GPXLineWidthLabel_->setEnabled(true); GPXLineWidthInput_->setEnabled(true); GPXTracksOpacityInput_->setEnabled(true); } else { GPXFileKURLRequester_->setEnabled(false); GPXFileLabel_->setEnabled(false); timeZoneCB->setEnabled(false); GPXColorLabel_->setEnabled(false); GPXAltitudeLabel_->setEnabled(false); timeZoneLabel_->setEnabled(false); GPXAltitudeCB_->setEnabled(false); GPXTrackColor_->setEnabled(false); GPXLineWidthLabel_->setEnabled(false); GPXLineWidthInput_->setEnabled(false); GPXTracksOpacityInput_->setEnabled(false); } } void KMLExportConfig::saveSettings() { if (!config_) return; config_->writeEntry("localTarget", LocalTargetRadioButton_->isChecked()); config_->writeEntry("optimize_googlemap", GoogleMapTargetRadioButton_->isChecked()); config_->writeEntry("iconSize", IconSizeInput_->value()); config_->writeEntry("size", ImageSizeInput_->value()); TQString destination = DestinationDirectory_->url(); if (!destination.endsWith("/")) { destination.append("/"); } config_->writeEntry("baseDestDir",destination); TQString url = DestinationURL_->text(); if (!url.endsWith("/")) { url.append("/"); } config_->writeEntry("UrlDestDir",url); config_->writeEntry("KMLFileName",FileName_->text()); config_->writeEntry("Altitude Mode", AltitudeCB_->currentItem() ); config_->writeEntry("UseGPXTracks", GPXTracksCheckBox_->isChecked()); config_->writeEntry("GPXFile", GPXFileKURLRequester_->lineEdit()->originalText()); config_->writeEntry("Time Zone", timeZoneCB->currentItem() ); config_->writeEntry("Line Width", GPXLineWidthInput_->value()); config_->writeEntry("Track Color", TQString(GPXTrackColor_->color().name()) ); config_->writeEntry("Track Opacity", GPXTracksOpacityInput_->value() ); config_->writeEntry("GPX Altitude Mode", GPXAltitudeCB_->currentItem() ); config_->sync(); } void KMLExportConfig::readSettings() { bool localTarget; bool optimize_googlemap; int iconSize; // int googlemapSize; int size; TQString UrlDestDir; TQString baseDestDir; TQString KMLFileName; int AltitudeMode; bool GPXtracks; TQString GPXFile; int TimeZone; int LineWidth; TQString GPXColor; int GPXOpacity; int GPXAltitudeMode; localTarget = config_->readBoolEntry("localTarget", true); optimize_googlemap = config_->readBoolEntry("optimize_googlemap", false); iconSize = config_->readNumEntry("iconSize", 33); // not saving this size as it should not change // googlemapSize = config_->readNumEntry("googlemapSize", 32); size = config_->readNumEntry("size", 320); // UrlDestDir have to have the trailing / baseDestDir = config_->readEntry("baseDestDir", "/tmp/"); UrlDestDir = config_->readEntry("UrlDestDir", "http://www.example.com/"); KMLFileName = config_->readEntry("KMLFileName", "kmldocument"); AltitudeMode = config_->readNumEntry("Altitude Mode", 0); GPXtracks = config_->readBoolEntry("UseGPXTracks", false); GPXFile = config_->readEntry("GPXFile", ""); TimeZone = config_->readNumEntry("Time Zone", 12); LineWidth = config_->readNumEntry("Line Width", 4); GPXColor = config_->readEntry("Track Color", "#17eeee" ); GPXOpacity = config_->readNumEntry("Track Opacity", 64 ); GPXAltitudeMode = config_->readNumEntry("GPX Altitude Mode", 0); // -- Apply Settings to widgets ------------------------------ LocalTargetRadioButton_->setChecked(localTarget); GoogleMapTargetRadioButton_->setChecked(optimize_googlemap); IconSizeInput_->setValue(iconSize); ImageSizeInput_->setValue(size); AltitudeCB_->setCurrentItem(AltitudeMode); DestinationDirectory_->setURL(baseDestDir); DestinationURL_->setText(UrlDestDir); FileName_->setText(KMLFileName); timeZoneCB->setCurrentItem(TimeZone); GPXLineWidthInput_->setValue(LineWidth); GPXTrackColor_->setColor(GPXColor); GPXTracksOpacityInput_->setValue(GPXOpacity); GPXAltitudeCB_->setCurrentItem(GPXAltitudeMode); } } //namespace KIPIGPSSyncPlugin