/*
* FOV plug-in for Stellarium
*
* Copyright (C) 2014 Alexander Wolf
*
* 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
* of the License, 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "FOV.hpp"
#include "FOVWindow.hpp"
#include "StelApp.hpp"
#include "StelCore.hpp"
#include "StelLocaleMgr.hpp"
#include "StelModule.hpp"
#include "StelMovementMgr.hpp"
#include
StelModule* FOVStelPluginInterface::getStelModule() const
{
return new FOV();
}
StelPluginInfo FOVStelPluginInterface::getPluginInfo() const
{
StelPluginInfo info;
info.id = "FOV";
info.displayedName = N_("Field of View");
info.authors = "Alexander Wolf";
info.contact = "http://stellarium.org";
info.description = N_("This plugin allows stepwise zooming via keyboard shortcuts like in the Cartes du Ciel planetarium program.");
info.version = FOV_VERSION;
return info;
}
FOV::FOV()
{
setObjectName("FOV");
mainWindow = new FOVWindow();
conf = StelApp::getInstance().getSettings();
}
FOV::~FOV()
{
delete mainWindow;
}
void FOV::init()
{
FOVitem.clear();
FOVitem << -1 << -1 << -1 << -1 << -1 << -1 << -1 << -1 << -1 << -1;
// Default values of FOV (degrees)
FOVdefault.clear();
FOVdefault << 0.5 << 180.0 << 90.0 << 60.0 << 45.0 << 20.0 << 10.0 << 5.0 << 2.0 << 1.0;
if (!conf->childGroups().contains("FOV"))
{
qDebug() << "FOV: no fov section exists in main config file - creating with defaults";
restoreDefaultConfigIni();
}
// populate settings from main config file.
readSettingsFromConfig();
// key bindings
QString section = N_("Field of View");
for (int i=0; i<10; i++)
{
QString name = QString("actionSetFOV%1").arg(i);
QString shortcut = QString("Ctrl+Alt+%1").arg(i);
QString text = q_("Set FOV to %1%2").arg(getQuickFOV(i)).arg(QChar(0x00B0));
addAction(name, section, text, "setFOV()", shortcut);
}
}
void FOV::deinit()
{
//
}
double FOV::getCallOrder(StelModuleActionName) const
{
return 0.;
}
void FOV::update(double)
{
//
}
bool FOV::configureGui(bool show)
{
if (show)
{
mainWindow->setVisible(true);
}
return true;
}
void FOV::restoreDefaults(void)
{
restoreDefaultConfigIni();
readSettingsFromConfig();
}
void FOV::restoreDefaultConfigIni(void)
{
conf->beginGroup("FOV");
// delete all existing FOV settings...
conf->remove("");
for (int i=0; i<10; i++)
{
conf->setValue(QString("fov_quick_%1").arg(i), FOVdefault.at(i));
}
conf->endGroup();
}
void FOV::readSettingsFromConfig(void)
{
conf->beginGroup("FOV");
for(int i=0; i<10; i++)
{
setQuickFOV(conf->value(QString("fov_quick_%1").arg(i), FOVdefault.at(i)).toDouble(), i);
}
conf->endGroup();
}
void FOV::saveSettingsToConfig(void)
{
conf->beginGroup("FOV");
for(int i=0; i<10; i++)
{
conf->setValue(QString("fov_quick_%1").arg(i), getQuickFOV(i));
}
conf->endGroup();
}
double FOV::getQuickFOV(const int item) const
{
return FOVitem.at(item);
}
void FOV::setQuickFOV(const double value, const int item)
{
FOVitem[item] = value;
}
void FOV::setFOV()
{
// Find out for which FOV is the command
if (sender() == NULL)
{
return;
}
// XXX: we could use a QSignalMapper instead of this trick.
int slotNumber = sender()->objectName().right(1).toInt();
StelMovementMgr *movementManager = StelApp::getInstance().getCore()->getMovementMgr();
movementManager->zoomTo(getQuickFOV(slotNumber), 1.f); // One second for zooming
}