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.
246 lines
6.5 KiB
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"
|
|
|