/***************************************************************************
telescopeprop . cpp - description
- - - - - - - - - - - - - - - - - - -
begin : Wed June 8 th 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 <klistbox.h>
# include <kcombobox.h>
# include <klineedit.h>
# include <kmessagebox.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"