Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

kdepreferencesdialog.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           kdepreferencesdialog.cpp  -  description
00003                              -------------------
00004     begin                : Sun Jul 21 2002
00005     copyright            : (C) 2002 by chris
00006     email                : chris@tux.teyssier.org
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include <qvbox.h>
00019 #include <kmainwindow.h>
00020 #include <kpushbutton.h>
00021 #include <qtextedit.h>
00022 #include <qcombobox.h>
00023 #include <klocale.h>
00024 #include <kconfig.h>
00025 #include <kiconloader.h>
00026 #include <qframe.h>
00027 #include <qgrid.h>
00028 #include <qcheckbox.h>
00029 #include <qvgroupbox.h>
00030 #include <qslider.h>
00031 #include <kkeydialog.h>
00032 #include <qspinbox.h>
00033 #include <qlabel.h>
00034 #include <qlayout.h>
00035 
00036 
00037 #include "kdeapp.h"
00038 #include "kdepreferencesdialog.h"
00039 #include "celengine/render.h"
00040 #include "celengine/glcontext.h"
00041 
00042 static uint32 FilterOtherLocations = ~(Location::City |
00043                     Location::Observatory |
00044                     Location::LandingSite |
00045                     Location::Crater |
00046                     Location::Mons |
00047                     Location::Terra |
00048                     Location::Vallis |
00049                     Location::Mare);
00050 
00051 KdePreferencesDialog::KdePreferencesDialog(QWidget* parent, CelestiaCore* core) :
00052     KDialogBase (KDialogBase::IconList, "",
00053     KDialogBase::Ok | KDialogBase::Apply | KDialogBase::Cancel, KDialogBase::Ok,parent)
00054 {
00055 
00056     setCaption(i18n("Celestia Preferences"));
00057     appCore=core;
00058     
00059     this->parent = (KdeApp*)parent;
00060   
00061     // Render page
00062     QGrid* renderFrame = addGridPage(2, Qt::Horizontal, i18n("Rendering"), i18n("Rendering"),
00063         KGlobal::iconLoader()->loadIcon("configure", KIcon::NoGroup));
00064 
00065     int renderFlags = appCore->getRenderer()->getRenderFlags();
00066     savedRendererFlags = renderFlags;
00067 
00068     KActionCollection* actionColl = ((KdeApp*)parent)->actionCollection();
00069 
00070     QGroupBox* showGroup = new QGroupBox(1, Qt::Horizontal, i18n("Show"), renderFrame);
00071 
00072     QCheckBox* showStarsCheck = new QCheckBox(i18n("Stars"), showGroup);
00073     actionColl->action("showStars")->connect(showStarsCheck, SIGNAL(clicked()), SLOT(activate()));
00074     showStarsCheck->setChecked(renderFlags & Renderer::ShowStars);
00075 
00076     QCheckBox* showAutoMagCheck = new QCheckBox(i18n("Auto Magnitudes"), showGroup);
00077     actionColl->action("showAutoMag")->connect(showAutoMagCheck, SIGNAL(clicked()), SLOT(activate()));
00078     showAutoMagCheck->setChecked(renderFlags & Renderer::ShowAutoMag);
00079 
00080     QCheckBox* showPlanetsCheck = new QCheckBox(i18n("Planets"), showGroup);
00081     actionColl->action("showPlanets")->connect(showPlanetsCheck, SIGNAL(clicked()), SLOT(activate()));
00082     showPlanetsCheck->setChecked(renderFlags & Renderer::ShowPlanets);
00083 
00084     QCheckBox* showGalaxiesCheck = new QCheckBox(i18n("Galaxies"), showGroup);
00085     actionColl->action("showGalaxies")->connect(showGalaxiesCheck, SIGNAL(clicked()), SLOT(activate()));
00086     showGalaxiesCheck->setChecked(renderFlags & Renderer::ShowGalaxies);
00087 
00088     QCheckBox* showNebulaeCheck = new QCheckBox(i18n("Nebulae"), showGroup);
00089     actionColl->action("showNebulae")->connect(showNebulaeCheck, SIGNAL(clicked()), SLOT(activate()));
00090     showNebulaeCheck->setChecked(renderFlags & Renderer::ShowNebulae);
00091 
00092     QCheckBox* showOpenClustersCheck = new QCheckBox(i18n("Open Clusters"), showGroup);
00093     actionColl->action("showOpenClusters")->connect(showOpenClustersCheck, SIGNAL(clicked()), SLOT(activate()));
00094     showOpenClustersCheck->setChecked(renderFlags & Renderer::ShowOpenClusters);
00095 
00096     QCheckBox* showAtmospheresCheck = new QCheckBox(i18n("Atmospheres"), showGroup);
00097     actionColl->action("showAtmospheres")->connect(showAtmospheresCheck, SIGNAL(clicked()), SLOT(activate()));
00098     showAtmospheresCheck->setChecked(renderFlags & Renderer::ShowAtmospheres);
00099 
00100     QCheckBox* showCloudMapsCheck = new QCheckBox(i18n("Clouds"), showGroup);
00101     actionColl->action("showCloudMaps")->connect(showCloudMapsCheck, SIGNAL(clicked()), SLOT(activate()));
00102     showCloudMapsCheck->setChecked(renderFlags & Renderer::ShowCloudMaps);
00103 
00104     QCheckBox* showNightMapsCheck = new QCheckBox(i18n("Night Side Lights"), showGroup);
00105     actionColl->action("showNightMaps")->connect(showNightMapsCheck, SIGNAL(clicked()), SLOT(activate()));
00106     showNightMapsCheck->setChecked(renderFlags & Renderer::ShowNightMaps);
00107 
00108     QCheckBox* showEclipseShadowsCheck = new QCheckBox(i18n("Eclipse Shadows"), showGroup);
00109     actionColl->action("showEclipseShadows")->connect(showEclipseShadowsCheck, SIGNAL(clicked()), SLOT(activate()));
00110     showEclipseShadowsCheck->setChecked(renderFlags & Renderer::ShowEclipseShadows);
00111 
00112     QCheckBox* showCometTailsCheck = new QCheckBox(i18n("Comet Tails"), showGroup);
00113     actionColl->action("showCometTails")->connect(showCometTailsCheck, SIGNAL(clicked()), SLOT(activate()));
00114     showCometTailsCheck->setChecked(renderFlags & Renderer::ShowCometTails);
00115 
00116     QCheckBox* showOrbitsCheck = new QCheckBox(i18n("Orbits"), showGroup);
00117     actionColl->action("showOrbits")->connect(showOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00118     showOrbitsCheck->setChecked(renderFlags & Renderer::ShowOrbits);
00119 
00120     QCheckBox* showPartialTrajectoriesCheck = new QCheckBox(i18n("Partial Trajectories"), showGroup);
00121     actionColl->action("showPartialTrajectories")->connect(showPartialTrajectoriesCheck, SIGNAL(clicked()), SLOT(activate()));
00122     showPartialTrajectoriesCheck->setChecked(renderFlags & Renderer::ShowPartialTrajectories);
00123 
00124     QCheckBox* showSmoothLinesCheck = new QCheckBox(i18n("Smooth Orbit Lines"), showGroup);
00125     actionColl->action("showSmoothLines")->connect(showSmoothLinesCheck, SIGNAL(clicked()), SLOT(activate()));
00126     showSmoothLinesCheck->setChecked(renderFlags & Renderer::ShowSmoothLines);
00127 
00128     QCheckBox* showCelestialSphereCheck = new QCheckBox(i18n("Celestial Grid"), showGroup);
00129     actionColl->action("showCelestialSphere")->connect(showCelestialSphereCheck, SIGNAL(clicked()), SLOT(activate()));
00130     showCelestialSphereCheck->setChecked(renderFlags & Renderer::ShowCelestialSphere);
00131 
00132     QCheckBox* showDiagramsCheck = new QCheckBox(i18n("Constellations"), showGroup);
00133     actionColl->action("showDiagrams")->connect(showDiagramsCheck, SIGNAL(clicked()), SLOT(activate()));
00134     showDiagramsCheck->setChecked(renderFlags & Renderer::ShowDiagrams);
00135 
00136     QCheckBox* showMarkersCheck = new QCheckBox(i18n("Markers"), showGroup);
00137     actionColl->action("showMarkers")->connect(showMarkersCheck, SIGNAL(clicked()), SLOT(activate()));
00138     showMarkersCheck->setChecked(renderFlags & Renderer::ShowMarkers);
00139 
00140     QCheckBox* showRingShadowsCheck = new QCheckBox(i18n("Ring Shadows"), showGroup);
00141     actionColl->action("showRingShadows")->connect(showRingShadowsCheck, SIGNAL(clicked()), SLOT(activate()));
00142     showRingShadowsCheck->setChecked(renderFlags & Renderer::ShowRingShadows);
00143 
00144     QCheckBox* showBoundariesCheck = new QCheckBox(i18n("Constellation Boundaries"), showGroup);
00145     actionColl->action("showBoundaries")->connect(showBoundariesCheck, SIGNAL(clicked()), SLOT(activate()));
00146     showBoundariesCheck->setChecked(renderFlags & Renderer::ShowBoundaries);
00147 
00148 
00149     QVBox* vbox1 = new QVBox(renderFrame);
00150     int labelMode = appCore->getRenderer()->getLabelMode();
00151     savedLabelMode = labelMode;
00152     int orbitMask = appCore->getRenderer()->getOrbitMask();
00153     savedOrbitMask = orbitMask;
00154 
00155     QGroupBox* labelGroup = new QGroupBox(0, Qt::Horizontal, i18n("Orbits / Labels"), vbox1);
00156     QGridLayout* labelGroupLayout = new QGridLayout( labelGroup->layout() );
00157     labelGroupLayout->setAlignment( Qt::AlignTop );
00158 
00159     QLabel* orbitsLabel = new QLabel(i18n("Orbits"), labelGroup);
00160     labelGroupLayout->addWidget(orbitsLabel, 0, 0);
00161     QLabel* labelsLabel = new QLabel(i18n("Labels"), labelGroup);
00162     labelGroupLayout->addWidget(labelsLabel, 0, 1);
00163 
00164     QCheckBox* showStarLabelsCheck = new QCheckBox(i18n("Stars"), labelGroup);
00165     actionColl->action("showStarLabels")->connect(showStarLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00166     showStarLabelsCheck->setChecked(labelMode & Renderer::StarLabels);
00167     labelGroupLayout->addWidget(showStarLabelsCheck, 1, 1);
00168 
00169 
00170     QCheckBox* showPlanetOrbitsCheck = new QCheckBox("", labelGroup);
00171     actionColl->action("showPlanetOrbits")->connect(showPlanetOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00172     showPlanetOrbitsCheck->setChecked(orbitMask & Body::Planet);
00173     labelGroupLayout->addWidget(showPlanetOrbitsCheck, 3, 0, Qt::AlignHCenter);
00174     QCheckBox* showPlanetLabelsCheck = new QCheckBox(i18n("Planets"), labelGroup);
00175     actionColl->action("showPlanetLabels")->connect(showPlanetLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00176     showPlanetLabelsCheck->setChecked(labelMode & Renderer::PlanetLabels);
00177     labelGroupLayout->addWidget(showPlanetLabelsCheck, 3, 1);
00178 
00179     QCheckBox* showMoonOrbitsCheck = new QCheckBox("", labelGroup);
00180     actionColl->action("showMoonOrbits")->connect(showMoonOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00181     showMoonOrbitsCheck->setChecked(orbitMask & Body::Moon);
00182     labelGroupLayout->addWidget(showMoonOrbitsCheck, 4, 0, Qt::AlignHCenter);
00183     QCheckBox* showMoonLabelsCheck = new QCheckBox(i18n("Moons"), labelGroup);
00184     actionColl->action("showMoonLabels")->connect(showMoonLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00185     showMoonLabelsCheck->setChecked(labelMode & Renderer::MoonLabels);
00186     labelGroupLayout->addWidget(showMoonLabelsCheck, 4, 1);
00187 
00188     QCheckBox* showCometOrbitsCheck = new QCheckBox("", labelGroup);
00189     actionColl->action("showCometOrbits")->connect(showCometOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00190     showCometOrbitsCheck->setChecked(orbitMask & Body::Comet);
00191     labelGroupLayout->addWidget(showCometOrbitsCheck, 5, 0, Qt::AlignHCenter);
00192     QCheckBox* showCometLabelsCheck = new QCheckBox(i18n("Comets"), labelGroup);
00193     actionColl->action("showCometLabels")->connect(showCometLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00194     showCometLabelsCheck->setChecked(labelMode & Renderer::CometLabels);
00195     labelGroupLayout->addWidget(showCometLabelsCheck, 5, 1);
00196 
00197     QCheckBox* showConstellationLabelsCheck = new QCheckBox(i18n("Constellations"), labelGroup);
00198     actionColl->action("showConstellationLabels")->connect(showConstellationLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00199     showConstellationLabelsCheck->setChecked(labelMode & Renderer::ConstellationLabels);
00200     labelGroupLayout->addWidget(showConstellationLabelsCheck, 6, 1);
00201 
00202     QCheckBox* showI18nConstellationLabelsCheck = new QCheckBox(i18n("Constellations in Latin"), labelGroup);
00203     actionColl->action("showI18nConstellationLabels")->connect(showI18nConstellationLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00204     showI18nConstellationLabelsCheck->setChecked(!(labelMode & Renderer::I18nConstellationLabels));
00205     labelGroupLayout->addWidget(showI18nConstellationLabelsCheck, 7, 1);
00206 
00207     QCheckBox* showGalaxyLabelsCheck = new QCheckBox(i18n("Galaxies"), labelGroup);
00208     actionColl->action("showGalaxyLabels")->connect(showGalaxyLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00209     showGalaxyLabelsCheck->setChecked(labelMode & Renderer::GalaxyLabels);
00210     labelGroupLayout->addWidget(showGalaxyLabelsCheck, 8, 1);
00211 
00212     QCheckBox* showNebulaLabelsCheck = new QCheckBox(i18n("Nebulae"), labelGroup);
00213     actionColl->action("showNebulaLabels")->connect(showNebulaLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00214     showNebulaLabelsCheck->setChecked(labelMode & Renderer::NebulaLabels);
00215     labelGroupLayout->addWidget(showNebulaLabelsCheck, 9, 1);
00216 
00217     QCheckBox* showOpenClusterLabelsCheck = new QCheckBox(i18n("Open Clusters"), labelGroup);
00218     actionColl->action("showOpenClusterLabels")->connect(showOpenClusterLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00219     showOpenClusterLabelsCheck->setChecked(labelMode & Renderer::OpenClusterLabels);
00220     labelGroupLayout->addWidget(showOpenClusterLabelsCheck, 10, 1);
00221 
00222     QCheckBox* showAsteroidOrbitsCheck = new QCheckBox("", labelGroup);
00223     actionColl->action("showAsteroidOrbits")->connect(showAsteroidOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00224     showAsteroidOrbitsCheck->setChecked(orbitMask & Body::Asteroid);
00225     labelGroupLayout->addWidget(showAsteroidOrbitsCheck, 11, 0, Qt::AlignHCenter);
00226     QCheckBox* showAsteroidLabelsCheck = new QCheckBox(i18n("Asteroids"), labelGroup);
00227     actionColl->action("showAsteroidLabels")->connect(showAsteroidLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00228     showAsteroidLabelsCheck->setChecked(labelMode & Renderer::AsteroidLabels);
00229     labelGroupLayout->addWidget(showAsteroidLabelsCheck, 11, 1);
00230 
00231     QCheckBox* showSpacecraftOrbitsCheck = new QCheckBox("", labelGroup);
00232     actionColl->action("showSpacecraftOrbits")->connect(showSpacecraftOrbitsCheck, SIGNAL(clicked()), SLOT(activate()));
00233     showSpacecraftOrbitsCheck->setChecked(orbitMask & Body::Spacecraft);
00234     labelGroupLayout->addWidget(showSpacecraftOrbitsCheck, 12, 0, Qt::AlignHCenter);
00235     QCheckBox* showSpacecraftLabelsCheck = new QCheckBox(i18n("Spacecrafts"), labelGroup);
00236     actionColl->action("showSpacecraftLabels")->connect(showSpacecraftLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00237     showSpacecraftLabelsCheck->setChecked(labelMode & Renderer::SpacecraftLabels);
00238     labelGroupLayout->addWidget(showSpacecraftLabelsCheck, 12, 1);
00239 
00240     QCheckBox* showLocationLabelsCheck = new QCheckBox(i18n("Locations"), labelGroup);
00241     actionColl->action("showLocationLabels")->connect(showLocationLabelsCheck, SIGNAL(clicked()), SLOT(activate()));
00242     showLocationLabelsCheck->setChecked(labelMode & Renderer::LocationLabels);
00243     labelGroupLayout->addWidget(showLocationLabelsCheck, 13, 1);
00244 
00245     QSpacerItem* spacer = new QSpacerItem( 151, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
00246     labelGroupLayout->addItem( spacer, 0, 2 );
00247 
00248     savedAmbientLightLevel = int(appCore->getRenderer()->getAmbientLightLevel() * 100);
00249     QGroupBox* ambientLightGroup = new QGroupBox(1, Qt::Vertical, i18n("Ambient Light"), vbox1);
00250     QSlider* ambientLightSlider = new QSlider(0, 25, 1, savedAmbientLightLevel, Qt::Horizontal, ambientLightGroup);
00251     connect(ambientLightSlider, SIGNAL(valueChanged(int)), SLOT(slotAmbientLightLevel(int)));
00252     ambientLabel = new QLabel(ambientLightGroup);
00253     ambientLabel->setMinimumWidth(40);
00254     ambientLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
00255     char buff[20];
00256     sprintf(buff, "%.2f", savedAmbientLightLevel / 100.);
00257     ambientLabel->setText(buff);
00258 
00259     savedFaintestVisible = int(appCore->getSimulation()->getFaintestVisible() * 100);
00260     QGroupBox* faintestVisibleGroup = new QGroupBox(1, Qt::Vertical, i18n("Limiting Magnitude"), vbox1);
00261     QSlider* faintestVisibleSlider = new QSlider(1, 1200, 1, savedFaintestVisible, Qt::Horizontal, faintestVisibleGroup);
00262     connect(faintestVisibleSlider, SIGNAL(valueChanged(int)), SLOT(slotFaintestVisible(int)));
00263     faintestLabel = new QLabel(faintestVisibleGroup);
00264     faintestLabel->setMinimumWidth(40);
00265     faintestLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
00266     sprintf(buff, "%.2f", savedFaintestVisible / 100.);
00267     faintestLabel->setText(buff);
00268 
00269     QGroupBox* infoTextGroup = new QGroupBox(1, Qt::Vertical, i18n("Info Text"), vbox1);
00270     new QLabel(i18n("Level: "), infoTextGroup);
00271     QComboBox* infoTextCombo = new QComboBox(infoTextGroup);
00272     infoTextCombo->insertItem(i18n("None"));
00273     infoTextCombo->insertItem(i18n("Terse"));
00274     infoTextCombo->insertItem(i18n("Verbose"));
00275     savedHudDetail = appCore->getHudDetail();
00276     infoTextCombo->setCurrentItem(savedHudDetail);
00277     ((KdeApp*)parent)->connect(infoTextCombo, SIGNAL(activated(int)), SLOT(slotHudDetail(int)));
00278 
00279     QGroupBox* fovGroup = new QGroupBox(2, Qt::Horizontal, i18n("Automatic FOV"), vbox1);
00280     new QLabel(i18n("Screen DPI: "), fovGroup);
00281     new QLabel(QString::number(appCore->getScreenDpi(), 10), fovGroup);
00282     new QLabel(i18n("Viewing Distance (cm): "), fovGroup);
00283     dtsSpin = new QSpinBox(10, 300, 1, fovGroup);
00284     savedDistanceToScreen = appCore->getDistanceToScreen();
00285     dtsSpin->setValue(savedDistanceToScreen / 10);
00286     connect(dtsSpin, SIGNAL(valueChanged(int)), SLOT(slotDistanceToScreen(int)));
00287 
00288     // Locations page
00289     Observer* obs = appCore->getSimulation()->getActiveObserver();
00290     savedLocationFilter = obs->getLocationFilter();
00291 
00292     QFrame* locationsFrame = addPage(i18n("Locations"), i18n("Locations"),
00293        KGlobal::iconLoader()->loadIcon("package_network", KIcon::NoGroup));
00294     QVBoxLayout* locationsLayout = new QVBoxLayout( locationsFrame );
00295     locationsLayout->setAutoAdd(TRUE);
00296     locationsLayout->setAlignment(Qt::AlignTop);
00297 
00298     QCheckBox* showCityLocationsCheck = new QCheckBox(i18n("Cities"), locationsFrame);
00299     actionColl->action("showCityLocations")->connect(showCityLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00300     showCityLocationsCheck->setChecked(savedLocationFilter & Location::City);
00301 
00302     QCheckBox* showObservatoryLocationsCheck = new QCheckBox(i18n("Observatories"), locationsFrame);
00303     actionColl->action("showObservatoryLocations")->connect(showObservatoryLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00304     showObservatoryLocationsCheck->setChecked(savedLocationFilter & Location::Observatory);
00305 
00306     QCheckBox* showLandingSiteLocationsCheck = new QCheckBox(i18n("Landing Sites"), locationsFrame);
00307     actionColl->action("showLandingSiteLocations")->connect(showLandingSiteLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00308     showLandingSiteLocationsCheck->setChecked(savedLocationFilter & Location::LandingSite);
00309 
00310     QCheckBox* showCraterLocationsCheck = new QCheckBox(i18n("Craters"), locationsFrame);
00311     actionColl->action("showCraterLocations")->connect(showCraterLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00312     showCraterLocationsCheck->setChecked(savedLocationFilter & Location::Crater);
00313 
00314     QCheckBox* showMonsLocationsCheck = new QCheckBox(i18n("Mons"), locationsFrame);
00315     actionColl->action("showMonsLocations")->connect(showMonsLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00316     showMonsLocationsCheck->setChecked(savedLocationFilter & Location::Mons);
00317 
00318     QCheckBox* showTerraLocationsCheck = new QCheckBox(i18n("Terra"), locationsFrame);
00319     actionColl->action("showTerraLocations")->connect(showTerraLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00320     showTerraLocationsCheck->setChecked(savedLocationFilter & Location::Terra);
00321 
00322     QCheckBox* showVallisLocationsCheck = new QCheckBox(i18n("Vallis"), locationsFrame);
00323     actionColl->action("showVallisLocations")->connect(showVallisLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00324     showVallisLocationsCheck->setChecked(savedLocationFilter & Location::Vallis);
00325 
00326     QCheckBox* showMareLocationsCheck = new QCheckBox(i18n("Mare"), locationsFrame);
00327     actionColl->action("showMareLocations")->connect(showMareLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00328     showMareLocationsCheck->setChecked(savedLocationFilter & Location::Mare);
00329 
00330     QCheckBox* showOtherLocationsCheck = new QCheckBox(i18n("Other"), locationsFrame);
00331     actionColl->action("showOtherLocations")->connect(showOtherLocationsCheck, SIGNAL(clicked()), SLOT(activate()));
00332     showOtherLocationsCheck->setChecked(savedLocationFilter & FilterOtherLocations);
00333 
00334     QGroupBox* minFeatureSizeGroup = new QGroupBox(1, Qt::Vertical, i18n("Minimum Feature Size"), locationsFrame);
00335     minFeatureSizeGroup->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
00336     savedMinFeatureSize = (int)appCore->getRenderer()->getMinimumFeatureSize();
00337     QSlider* minFeatureSizeSlider = new QSlider(1, 1000, 1, savedMinFeatureSize, Qt::Horizontal, minFeatureSizeGroup);
00338     connect(minFeatureSizeSlider, SIGNAL(valueChanged(int)), SLOT(slotMinFeatureSize(int)));
00339     minFeatureSizeLabel = new QLabel(minFeatureSizeGroup);
00340     minFeatureSizeLabel->setMinimumWidth(40);
00341     minFeatureSizeLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
00342     sprintf(buff, "%d", savedMinFeatureSize);
00343     minFeatureSizeLabel->setText(buff);
00344 
00345 
00346     // Time page
00347     timeHasChanged = false;
00348     QVBox* timeFrame = addVBoxPage(i18n("Date/Time"), i18n("Date/Time"),
00349         KGlobal::iconLoader()->loadIcon("clock", KIcon::NoGroup));
00350 
00351     savedDisplayLocalTime = appCore->getTimeZoneBias();
00352     QGroupBox* displayTimezoneGroup = new QGroupBox(1, Qt::Vertical, i18n("Display"), timeFrame);
00353     new QLabel(i18n("Timezone: "), displayTimezoneGroup);
00354     displayTimezoneCombo = new QComboBox(displayTimezoneGroup);
00355     displayTimezoneCombo->insertItem(i18n("UTC"));
00356     displayTimezoneCombo->insertItem(i18n("Local Time"));
00357     displayTimezoneCombo->setCurrentItem((appCore->getTimeZoneBias()==0)?0:1);
00358     ((KdeApp*)parent)->connect(displayTimezoneCombo, SIGNAL(activated(int)), SLOT(slotDisplayLocalTime()));
00359     displayTimezoneGroup->addSpace(0);
00360 
00361     QGroupBox* setTimezoneGroup = new QGroupBox(1, Qt::Horizontal, i18n("Set"), timeFrame);
00362     new QLabel(i18n("Local Time is only supported for dates between 1902 and 2037.\n"), setTimezoneGroup);   
00363     QHBox *hbox2 = new QHBox(setTimezoneGroup);
00364     new QLabel(i18n("Timezone: "), hbox2);
00365     setTimezoneCombo = new QComboBox(hbox2);
00366     setTimezoneCombo->insertItem(i18n("UTC"));
00367     setTimezoneCombo->insertItem(i18n("Local Time"));
00368 //    setTimezoneCombo->setCurrentItem((appCore->getTimeZoneBias()==0)?0:1);
00369     KGlobal::config()->setGroup("ConfigureDialog");
00370     if (KGlobal::config()->hasKey("SetTimeTimeZoneLocal"))
00371         setTimezoneCombo->setCurrentItem(KGlobal::config()->readNumEntry("SetTimeTimeZoneLocal"));
00372     KGlobal::config()->setGroup(0);
00373     connect(setTimezoneCombo, SIGNAL(activated(int)), SLOT(slotTimeHasChanged()));
00374 
00375         
00376     QHBox *hboxdate = new QHBox(setTimezoneGroup);
00377     QLabel* spacerdate1 = new QLabel(" ", hboxdate);
00378     timeFrame->setStretchFactor(spacerdate1, 2);
00379     YSpin = new QSpinBox(-1000000000, 1000000000, 1, hboxdate);
00380     YSpin->setWrapping(true);
00381     MSpin = new QSpinBox(1, 12, 1, hboxdate);
00382     MSpin->setWrapping(true);
00383     DSpin = new QSpinBox(1, 31, 1, hboxdate);
00384     DSpin->setWrapping(true);
00385     QLabel* spacerdate2 = new QLabel(" ", hboxdate);
00386     timeFrame->setStretchFactor(spacerdate2, 2);
00387   
00388     QVBox *vbox3 = new QVBox(setTimezoneGroup);
00389     QHBox *hbox3 = new QHBox(vbox3);
00390     QLabel* spacer1 = new QLabel(" ", hbox3);
00391     hbox3->setStretchFactor(spacer1, 10);
00392     hSpin = new QSpinBox(0, 23, 1, hbox3);
00393     hSpin->setWrapping(true);
00394     new QLabel(":", hbox3);
00395     mSpin = new QSpinBox(0, 59, 1, hbox3);
00396     mSpin->setWrapping(true);
00397     new QLabel(":", hbox3);
00398     sSpin = new QSpinBox(0, 59, 1, hbox3);
00399     sSpin->setWrapping(true);
00400     QLabel* spacer2 = new QLabel(" ", hbox3);
00401     hbox3->setStretchFactor(spacer2, 10);
00402 
00403     QLabel* spacer3 = new QLabel(" ", timeFrame);
00404     timeFrame->setStretchFactor(spacer3, 2);
00405 
00406     setTime(appCore->getSimulation()->getTime());
00407     connect(YSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00408     connect(MSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00409     connect(DSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00410     connect(hSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00411     connect(mSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00412     connect(sSpin, SIGNAL(valueChanged(int)), SLOT(slotTimeHasChanged()));
00413 
00414     KPushButton *nowButton = new KPushButton(setTimezoneGroup);
00415     nowButton->setText(i18n("Now"));
00416     QSizePolicy nowButtonSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
00417     nowButton->setSizePolicy(nowButtonSizePolicy);
00418     connect(nowButton, SIGNAL(clicked()), SLOT(setNow()));
00419 
00420     Selection selection = appCore->getSimulation()->getSelection();
00421     std::string sel_name;
00422     if (selection.body() != 0) {
00423         QHBox* ltBox = new QHBox(setTimezoneGroup);
00424         char time[50];
00425         sel_name = selection.body()->getName();
00426         Vec3d v = selection.getPosition(appCore->getSimulation()->getTime()) - 
00427                   appCore->getSimulation()->getObserver().getPosition();
00428         double dist = astro::lightYearsToKilometers(v.length()*1e-6);
00429         double lt = dist / astro::speedOfLight;
00430         long lt_h = (long)(lt / 3600);
00431         int lt_m = (int)((lt - lt_h * 3600) / 60);
00432         double lt_s = (lt - lt_h * 3600 - lt_m * 60);
00433         if (lt_h == 0) snprintf(time, 50, "%d min %02.1f s", lt_m, lt_s);
00434         else snprintf(time, 50, "%ld h %02d min %02.1f s", lt_h, lt_m, lt_s);
00435         
00436         new QLabel(i18n("\nSelection: " + QString(sel_name.c_str()) 
00437         + QString("\nLight Travel Time: %2").arg(time)), ltBox);
00438         
00439         KPushButton *ltButton = new KPushButton(ltBox);
00440         ltButton->setToggleButton(true);        
00441 
00442         if (!appCore->getLightDelayActive())
00443             ltButton->setText(i18n("Include Light Travel Time"));
00444         else
00445             ltButton->setText(i18n("Ignore Light Travel Time "));
00446 
00447         ltButton->setSizePolicy(nowButtonSizePolicy);
00448         connect(ltButton, SIGNAL(clicked()), SLOT(ltSubstract()));
00449     }
00450 
00451     // OpenGL Page
00452     QVBox* openGL = addVBoxPage(i18n("OpenGL"), i18n("OpenGL"),
00453         KGlobal::iconLoader()->loadIcon("misc", KIcon::NoGroup));
00454 
00455     renderPathCombo = new QComboBox(openGL);
00456     savedRenderPath = (int)appCore->getRenderer()->getGLContext()->getRenderPath();
00457     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_Basic))
00458         renderPathCombo->insertItem(i18n("Basic"));
00459     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_Multitexture))
00460         renderPathCombo->insertItem(i18n("Multitexture"));
00461     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner))
00462         renderPathCombo->insertItem(i18n("NvCombiners"));
00463     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_DOT3_ARBVP))
00464         renderPathCombo->insertItem(i18n("DOT3 ARBVP"));
00465     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner_NvVP))
00466         renderPathCombo->insertItem(i18n("NvCombiner NvVP"));
00467     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner_ARBVP))
00468         renderPathCombo->insertItem(i18n("NvCombiner ARBVP"));
00469     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_ARBFP_ARBVP))
00470         renderPathCombo->insertItem(i18n("ARBFP ARBVP"));
00471     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NV30))
00472         renderPathCombo->insertItem(i18n("NV30"));
00473     if (appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_GLSL))
00474         renderPathCombo->insertItem(i18n("OpenGL 2.0"));
00475 
00476     connect(renderPathCombo, SIGNAL(activated(int)), SLOT(slotRenderPath(int)));
00477 
00478     {
00479         int path=0, ipathIdx=0;
00480         while (path != appCore->getRenderer()->getGLContext()->getRenderPath()) {
00481             ipathIdx++;
00482             do {
00483                 path++;
00484             } while (!appCore->getRenderer()->getGLContext()->renderPathSupported((GLContext::GLRenderPath)path));
00485         }
00486         renderPathCombo->setCurrentItem(ipathIdx);
00487     }
00488 
00489     renderPathLabel = new QLabel(openGL);
00490     renderPathLabel->setTextFormat(Qt::RichText);
00491     setRenderPathLabel();
00492 
00493     QTextEdit* edit = new QTextEdit(openGL);
00494     edit->append(((KdeApp*)parent)->getOpenGLInfo());
00495     edit->setFocusPolicy(QWidget::NoFocus);
00496 
00497 
00498     // Key bindings page
00499     QVBox* keyBindings = addVBoxPage(i18n("Key Bindings"), i18n("Key Bindings"),
00500         KGlobal::iconLoader()->loadIcon("key_bindings", KIcon::NoGroup));
00501 
00502     keyChooser = new KKeyChooser(((KMainWindow*)parent)->actionCollection(), keyBindings, false);
00503 
00504     resize(550,400);
00505 }
00506 
00507 KdePreferencesDialog::~KdePreferencesDialog() {
00508 }
00509   
00510 
00511 void KdePreferencesDialog::setNow() {
00512     time_t date_t;
00513     time(&date_t);
00514     struct tm* tm;
00515     if (setTimezoneCombo->currentItem() != 0) { 
00516         tm = localtime ( &date_t); 
00517     } else {
00518         tm = gmtime ( &date_t);   
00519     }
00520     YSpin->setValue(tm->tm_year + 1900);
00521     MSpin->setValue(tm->tm_mon + 1);
00522     DSpin->setValue(tm->tm_mday);    
00523     hSpin->setValue(tm->tm_hour);
00524     mSpin->setValue(tm->tm_min);
00525     sSpin->setValue(tm->tm_sec);
00526 }
00527 
00528 void KdePreferencesDialog::ltSubstract() {
00529     double d;
00530     
00531     d = getTime();
00532     
00533     Selection selection = appCore->getSimulation()->getSelection();
00534     std::string sel_name;
00535 
00536     // LT-delay only for solar bodies && target-speed < 0.99 c
00537 
00538     if (selection.body() != 0 &&
00539         (appCore->getSimulation()->getTargetSpeed() < 0.99 *
00540             astro::kilometersToMicroLightYears(astro::speedOfLight))) {
00541         sel_name = selection.body()->getName();
00542         Vec3d v = selection.getPosition(d) -
00543                   appCore->getSimulation()->getObserver().getPosition();
00544         appCore->setLightDelayActive(!appCore->getLightDelayActive());
00545         double dist = astro::lightYearsToKilometers(v.length()*1e-6);
00546         double lt = dist / astro::speedOfLight;
00547         if (appCore->getLightDelayActive())
00548         d -= lt / 86400.;
00549         else
00550             d += lt / 86400.;
00551     setTime(d);
00552     }
00553 }
00554 
00555 void KdePreferencesDialog::setTime(double d) {
00556     if (setTimezoneCombo->currentItem() != 0 && d < 2465442 && d > 2415733) { 
00557         time_t date_t = (int) astro::julianDateToSeconds( d - (float)astro::Date(1970, 1, 1) );
00558 
00559         struct tm* tm;
00560         tm = localtime ( &date_t); 
00561         YSpin->setValue(tm->tm_year + 1900);
00562         MSpin->setValue(tm->tm_mon + 1);
00563         DSpin->setValue(tm->tm_mday);    
00564         hSpin->setValue(tm->tm_hour);
00565         mSpin->setValue(tm->tm_min);
00566         sSpin->setValue(tm->tm_sec);    
00567     } else {
00568         astro::Date date(d);
00569         YSpin->setValue(date.year);
00570         MSpin->setValue(date.month);
00571         DSpin->setValue(date.day);    
00572         hSpin->setValue(date.hour);
00573         mSpin->setValue(date.minute);
00574         sSpin->setValue(int(date.seconds));
00575     }
00576 }
00577 
00578 double KdePreferencesDialog::getTime() const {
00579     double d;
00580     
00581     if (setTimezoneCombo->currentItem() == 0 || YSpin->value() < 1902 || YSpin->value() > 2037) {  
00582         astro::Date date(0.0);
00583         date.year=YSpin->value();
00584         date.month=MSpin->value();
00585         date.day=DSpin->value();        
00586         date.hour=hSpin->value();
00587         date.minute=mSpin->value();
00588         date.seconds=float(sSpin->value());
00589         d = (double) date;
00590     } else {
00591         struct tm time;
00592         time.tm_year = YSpin->value() - 1900;
00593         time.tm_mon = MSpin->value() - 1;
00594         time.tm_mday = DSpin->value();
00595         time.tm_hour = hSpin->value();
00596         time.tm_min = mSpin->value();
00597         time.tm_sec = sSpin->value();
00598         d = astro::secondsToJulianDate(mktime(&time)) + (double) astro::Date(1970, 1, 1);
00599     }
00600     return d;
00601 }
00602 
00603 void KdePreferencesDialog::slotOk() {
00604     slotApply();
00605     accept();
00606 }
00607 
00608 void KdePreferencesDialog::slotCancel() {
00609     appCore->getRenderer()->setRenderFlags(savedRendererFlags);
00610     appCore->getRenderer()->setLabelMode(savedLabelMode);
00611     appCore->getRenderer()->setOrbitMask(savedOrbitMask);
00612     appCore->getRenderer()->setAmbientLightLevel(savedAmbientLightLevel/100.);
00613     appCore->getSimulation()->setFaintestVisible(savedFaintestVisible/100.);
00614     appCore->setHudDetail(savedHudDetail);
00615     appCore->getRenderer()->getGLContext()->setRenderPath((GLContext::GLRenderPath)savedRenderPath);
00616     appCore->setDistanceToScreen(savedDistanceToScreen);
00617     appCore->getSimulation()->getActiveObserver()->setLocationFilter(savedLocationFilter);
00618     appCore->getRenderer()->setMinimumFeatureSize(savedMinFeatureSize);
00619     reject();
00620 }
00621 
00622 void KdePreferencesDialog::slotApply() {
00623     savedRendererFlags = appCore->getRenderer()->getRenderFlags();
00624     savedLabelMode = appCore->getRenderer()->getLabelMode();
00625     savedAmbientLightLevel = int(appCore->getRenderer()->getAmbientLightLevel() * 100);
00626     savedFaintestVisible = int(appCore->getSimulation()->getFaintestVisible() * 100);
00627     savedHudDetail = appCore->getHudDetail();
00628     savedDisplayLocalTime = appCore->getTimeZoneBias();
00629     savedRenderPath = (int)appCore->getRenderer()->getGLContext()->getRenderPath();
00630     savedDistanceToScreen = appCore->getDistanceToScreen();
00631     savedLocationFilter = appCore->getSimulation()->getActiveObserver()->getLocationFilter();
00632     savedMinFeatureSize = appCore->getRenderer()->getMinimumFeatureSize();
00633 
00634     keyChooser->commitChanges();
00635 
00636     KGlobal::config()->setGroup("ConfigureDialog");
00637     KGlobal::config()->writeEntry("SetTimeTimeZoneLocal", setTimezoneCombo->currentItem());
00638     KGlobal::config()->setGroup(0);
00639 
00640     if (timeHasChanged) {
00641       if (setTimezoneCombo->currentItem() == 0 || YSpin->value() < 1902 || YSpin->value() > 2037) {  
00642         astro::Date date(0.0);
00643         date.year=YSpin->value();
00644         date.month=MSpin->value();
00645         date.day=DSpin->value();        
00646         date.hour=hSpin->value();
00647         date.minute=mSpin->value();
00648         date.seconds=float(sSpin->value());
00649         appCore->getSimulation()->setTime((double) date);
00650         appCore->getSimulation()->update(0.0);
00651       } else {
00652         struct tm time;
00653         time.tm_year = YSpin->value() - 1900;
00654         time.tm_mon = MSpin->value() - 1;
00655         time.tm_mday = DSpin->value();
00656         time.tm_hour = hSpin->value();
00657         time.tm_min = mSpin->value();
00658         time.tm_sec = sSpin->value();
00659         appCore->getSimulation()->setTime(astro::secondsToJulianDate(mktime(&time)) + (double) astro::Date(1970, 1, 1));
00660         appCore->getSimulation()->update(0.0);       
00661       }
00662     }
00663 }
00664 
00665 void KdePreferencesDialog::slotTimeHasChanged() {
00666     timeHasChanged = true;
00667 }
00668 
00669 void KdePreferencesDialog::slotFaintestVisible(int m) {
00670     char buff[20];
00671     
00672     parent->slotFaintestVisible(m / 100.);
00673     sprintf(buff, "%.2f", m / 100.);
00674     faintestLabel->setText(buff);
00675 }
00676 
00677 void KdePreferencesDialog::slotMinFeatureSize(int s) {
00678     char buff[20];
00679 
00680     parent->slotMinFeatureSize(s);
00681     sprintf(buff, "%d", s);
00682     minFeatureSizeLabel->setText(buff);
00683 }
00684 
00685 void KdePreferencesDialog::slotAmbientLightLevel(int l) {
00686     char buff[20];
00687     
00688     parent->slotAmbientLightLevel(l / 100.);
00689     sprintf(buff, "%.2f", l / 100.);
00690     ambientLabel->setText(buff);
00691 }
00692 
00693 void KdePreferencesDialog::slotRenderPath(int pathIdx) {
00694     int path=0, ipathIdx=0;
00695     while (ipathIdx != pathIdx) {
00696         ipathIdx++;
00697         do {
00698             path++;
00699         } while (!appCore->getRenderer()->getGLContext()->renderPathSupported((GLContext::GLRenderPath)path));
00700     }
00701 
00702     appCore->getRenderer()->getGLContext()->setRenderPath((GLContext::GLRenderPath)path);
00703     setRenderPathLabel();
00704 }
00705 
00706 void KdePreferencesDialog::slotDistanceToScreen(int dts) {
00707     appCore->setDistanceToScreen(dts * 10);
00708 }
00709 
00710 void KdePreferencesDialog::setRenderPathLabel() {
00711     switch(appCore->getRenderer()->getGLContext()->getRenderPath()) {
00712     case GLContext::GLPath_Basic:
00713         renderPathLabel->setText(i18n("<b>Unextended OpenGL 1.1</b>"));
00714         break;
00715     case GLContext::GLPath_Multitexture:
00716         renderPathLabel->setText(i18n("<b>Multiple textures and the ARB_texenv_combine extension</b>"));
00717         break;
00718     case GLContext::GLPath_NvCombiner:
00719         renderPathLabel->setText(i18n("<b>NVIDIA combiners, no vertex programs</b>"));
00720         break;
00721     case GLContext::GLPath_DOT3_ARBVP:
00722         renderPathLabel->setText(i18n("<b>ARB_texenv_DOT3 extension, ARB_vertex_program extension</b>"));
00723         break;
00724     case GLContext::GLPath_NvCombiner_NvVP:
00725         renderPathLabel->setText(i18n("<b>NVIDIA Combiners, NV_vertex_program extension</b><br> "
00726                                       "provide bump mapping, ring shadows, and specular "
00727                                       "highlights on any Geforce or ATI Radeon graphics card, though "
00728                                       "NvCombiner ARBVP is a slightly better option for Geforce users"));
00729         break;
00730     case GLContext::GLPath_NvCombiner_ARBVP:
00731         renderPathLabel->setText(i18n("<b>NVIDIA Combiners, ARB_vertex_program extension</b>"));
00732         break;
00733     case GLContext::GLPath_ARBFP_ARBVP:
00734         renderPathLabel->setText(i18n("<b>ARB_fragment_program and ARB_vertex_program extensions</b><br>"
00735                                       "provide advanced effects on Geforce FX and Radeon 9700 cards"));
00736         break;
00737     case GLContext::GLPath_NV30:
00738         renderPathLabel->setText(i18n("<b>NV_fragment_program and ARB_vertex_program extensions</b>"));
00739         break;
00740     case GLContext::GLPath_GLSL:
00741         renderPathLabel->setText(i18n("<b>OpenGL 2.0 Shading Language</b>"));
00742         break;
00743     }
00744 }
00745 

Generated on Sat Jan 14 22:30:31 2006 for Celestia by  doxygen 1.4.1