You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kstars/kstars/telescopeprop.cpp

246 lines
6.5 KiB

/***************************************************************************
telescopeprop.cpp - description
-------------------
begin : Wed June 8th 2005
copyright : (C) 2005 by Jasem Mutlaq
email : mutlaqja@ikarustech.com
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include <kpushbutton.h>
#include <tdelistbox.h>
#include <kcombobox.h>
#include <klineedit.h>
#include <tdemessagebox.h>
#include <vector>
#include "telescopeprop.h"
#include "kstars.h"
#include "indimenu.h"
#include "indidriver.h"
telescopeProp::telescopeProp(TQWidget* parent, const char* name, bool modal, WFlags fl)
: scopeProp(parent,name, modal,fl)
{
ksw = (KStars *) parent;
ksw->establishINDI();
indi_driver = ksw->getINDIDriver();
newScopePending = false;
connect (newB, TQT_SIGNAL(clicked()), this, TQT_SLOT(newScope()));
connect (saveB, TQT_SIGNAL(clicked()), this, TQT_SLOT(saveScope()));
connect (removeB, TQT_SIGNAL(clicked()), this, TQT_SLOT(removeScope()));
connect (telescopeListBox, TQT_SIGNAL(highlighted(int)),this, TQT_SLOT(updateScopeDetails(int)));
connect(closeB, TQT_SIGNAL(clicked()), this, TQT_SLOT(close()));
// Fill the combo box with drivers
driverCombo->insertStringList(indi_driver->driversList);
// Fill the list box with telescopes
for (unsigned int i=0; i < indi_driver->devices.size(); i++)
{
if (indi_driver->devices[i]->deviceType == KSTARS_TELESCOPE)
telescopeListBox->insertItem(indi_driver->devices[i]->label);
}
telescopeListBox->setCurrentItem(0);
updateScopeDetails(0);
}
telescopeProp::~telescopeProp()
{
}
void telescopeProp::newScope()
{
driverCombo->clearEdit();
labelEdit->clear();
focalEdit->clear();
versionEdit->clear();
apertureEdit->clear();
driverCombo->setFocus();
telescopeListBox->clearFocus();
telescopeListBox->clearSelection();
newScopePending = true;
}
void telescopeProp::saveScope()
{
IDevice *dev (NULL);
double focal_length(-1), aperture(-1);
int finalIndex = -1;
if (labelEdit->text().isEmpty())
{
KMessageBox::error(NULL, i18n("Telescope label is missing."));
return;
}
if (driverCombo->currentText().isEmpty())
{
KMessageBox::error(NULL, i18n("Telescope driver is missing."));
return;
}
if (versionEdit->text().isEmpty())
{
KMessageBox::error(NULL, i18n("Telescope driver version is missing."));
return;
}
if (telescopeListBox->currentItem() != -1)
finalIndex = findDeviceIndex(telescopeListBox->currentItem());
// Add new scope
if (newScopePending)
{
dev = new IDevice(labelEdit->text(), driverCombo->currentText(), versionEdit->text());
dev->deviceType = KSTARS_TELESCOPE;
focal_length = focalEdit->text().toDouble();
aperture = apertureEdit->text().toDouble();
if (focal_length > 0)
dev->focal_length = focal_length;
if (aperture > 0)
dev->aperture = aperture;
indi_driver->devices.push_back(dev);
telescopeListBox->insertItem(labelEdit->text());
telescopeListBox->setCurrentItem(telescopeListBox->count() - 1);
}
else
{
if (finalIndex == -1) return;
indi_driver->devices[finalIndex]->label = labelEdit->text();
indi_driver->devices[finalIndex]->version = versionEdit->text();
indi_driver->devices[finalIndex]->driver = driverCombo->currentText();
focal_length = focalEdit->text().toDouble();
aperture = apertureEdit->text().toDouble();
if (focal_length > 0)
indi_driver->devices[finalIndex]->focal_length = focal_length;
if (aperture > 0)
indi_driver->devices[finalIndex]->aperture = aperture;
}
indi_driver->saveDevicesToDisk();
newScopePending = false;
driverCombo->clearFocus();
labelEdit->clearFocus();
focalEdit->clearFocus();
apertureEdit->clearFocus();
KMessageBox::information(NULL, i18n("You need to restart KStars for changes to take effect."));
}
int telescopeProp::findDeviceIndex(int listIndex)
{
int finalIndex = -1;
for (unsigned int i=0; i < indi_driver->devices.size(); i++)
{
if (indi_driver->devices[i]->label == telescopeListBox->text(listIndex))
{
finalIndex = i;
break;
}
}
return finalIndex;
}
void telescopeProp::updateScopeDetails(int index)
{
int finalIndex = -1;
newScopePending = false;
bool foundFlag(false);
focalEdit->clear();
apertureEdit->clear();
finalIndex = findDeviceIndex(index);
if (finalIndex == -1)
{
kdDebug() << "final index is invalid. internal error." << endl;
return;
}
for (int i=0; i < driverCombo->count(); i++)
if (indi_driver->devices[finalIndex]->driver == driverCombo->text(i))
{
driverCombo->setCurrentItem(i);
foundFlag = true;
break;
}
if (foundFlag == false)
driverCombo->setCurrentText(indi_driver->devices[finalIndex]->driver);
labelEdit->setText(indi_driver->devices[finalIndex]->label);
versionEdit->setText(indi_driver->devices[finalIndex]->version);
if (indi_driver->devices[finalIndex]->focal_length != -1)
focalEdit->setText(TQString("%1").arg(indi_driver->devices[finalIndex]->focal_length));
if (indi_driver->devices[finalIndex]->aperture != -1)
apertureEdit->setText(TQString("%1").arg(indi_driver->devices[finalIndex]->aperture));
}
void telescopeProp::removeScope()
{
int index, finalIndex;
index = telescopeListBox->currentItem();
finalIndex = findDeviceIndex(index);
if (KMessageBox::warningContinueCancel( 0, i18n("Are you sure you want to remove %1?").arg(indi_driver->devices[finalIndex]->label), i18n("Delete Confirmation"),KStdGuiItem::del())!=KMessageBox::Continue)
return;
telescopeListBox->removeItem(index);
delete (indi_driver->devices[finalIndex]);
indi_driver->devices.erase(indi_driver->devices.begin() + finalIndex);
indi_driver->saveDevicesToDisk();
}
#include "telescopeprop.moc"