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/tools/scriptbuilder.cpp

3201 lines
119 KiB

/***************************************************************************
scriptbuilder.cpp - description
-------------------
begin : Thu Apr 17 2003
copyright : (C) 2003 by Jason Harris
email : kstars@30doradus.org
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
//needed in slotSave() for chmod() syscall
#include <sys/stat.h>
#include <kdebug.h>
#include <kpushbutton.h>
#include <kcolorbutton.h>
#include <tdelocale.h>
#include <kcombobox.h>
#include <kicontheme.h>
#include <kiconloader.h>
#include <tdeio/netaccess.h>
#include <tdelistbox.h>
#include <tdelistview.h>
#include <kprocess.h>
#include <ktextedit.h>
#include <tdetempfile.h>
#include <kdatewidget.h>
#include <tdemessagebox.h>
#include <tdefiledialog.h>
#include <kstdguiitem.h>
#include <kstandarddirs.h>
#include <kurl.h>
#include <kurlrequester.h>
#include <knuminput.h>
#include <tqcheckbox.h>
#include <tqspinbox.h>
#include <tqwidgetstack.h>
#include <tqwidget.h>
#include <tqptrlist.h>
#include <tqlayout.h>
#include <tqdatetimeedit.h>
#include <tqradiobutton.h>
#include <tqbuttongroup.h>
#include "scriptfunction.h"
#include "scriptbuilderui.h"
#include "scriptnamedialog.h"
#include "optionstreeview.h"
#include "arglooktoward.h"
#include "argsetradec.h"
#include "argsetaltaz.h"
#include "argsetlocaltime.h"
#include "argwaitfor.h"
#include "argwaitforkey.h"
#include "argsettrack.h"
#include "argchangeviewoption.h"
#include "argsetgeolocation.h"
#include "argtimescale.h"
#include "argzoom.h"
#include "argexportimage.h"
#include "argprintimage.h"
#include "argsetcolor.h"
#include "argloadcolorscheme.h"
#include "argstartindi.h"
#include "argshutdownindi.h"
#include "argswitchindi.h"
#include "argsetportindi.h"
#include "argsettargetcoordindi.h"
#include "argsettargetnameindi.h"
#include "argsetactionindi.h"
#include "argsetfocusspeedindi.h"
#include "argstartfocusindi.h"
#include "argsetfocustimeoutindi.h"
#include "argsetgeolocationindi.h"
#include "argstartexposureindi.h"
#include "argsetutcindi.h"
#include "argsetscopeactionindi.h"
#include "argsetframetypeindi.h"
#include "argsetccdtempindi.h"
#include "argsetfilternumindi.h"
#include "scriptbuilder.h"
#include "kstars.h"
#include "kstarsdata.h"
#include "skymap.h"
#include "kstarsdatetime.h"
#include "dmsbox.h"
#include "finddialog.h"
#include "locationdialog.h"
#include "skyobjectname.h"
#include "timestepbox.h"
#include "libtdeedu/extdate/extdatewidget.h"
ScriptBuilder::ScriptBuilder( TQWidget *parent, const char *name )
: KDialogBase( KDialogBase::Plain, i18n( "Script Builder" ), Close, Close, parent, name ),
UnsavedChanges(false), currentFileURL(), currentDir( TQDir::homeDirPath() ),
currentScriptName(), currentAuthor() {
TQFrame *page = plainPage();
ks = (KStars*)parent;
TQVBoxLayout *vlay = new TQVBoxLayout( page, 0, 0 );
sb = new ScriptBuilderUI( page );
vlay->addWidget( sb );
KStarsFunctionList.setAutoDelete( TRUE );
INDIFunctionList.setAutoDelete( TRUE);
ScriptList.setAutoDelete( TRUE );
//Initialize function templates and descriptions
KStarsFunctionList.append( new ScriptFunction( "lookTowards", i18n( "Point the display at the specified location. %1 can be the name of an object, a cardinal point on the compass, or 'zenith'." ),
false, TQSTRING_OBJECT_NAME_STRING, "dir" ) );
KStarsFunctionList.append( new ScriptFunction( "setRaDec", i18n( "Point the display at the specified RA/Dec coordinates. %1 is expressed in Hours; %2 is expressed in Degrees." ),
false, "double", "ra", "double", "dec" ) );
KStarsFunctionList.append( new ScriptFunction( "setAltAz", i18n( "Point the display at the specified Alt/Az coordinates. %1 and %2 are expressed in Degrees." ),
false, "double", "alt", "double", "az" ) );
KStarsFunctionList.append( new ScriptFunction( "zoomIn", i18n( "Increase the display Zoom Level." ), false ) );
KStarsFunctionList.append( new ScriptFunction( "zoomOut", i18n( "Decrease the display Zoom Level." ), false ) );
KStarsFunctionList.append( new ScriptFunction( "defaultZoom", i18n( "Set the display Zoom Level to its default value." ), false ) );
KStarsFunctionList.append( new ScriptFunction( "zoom", i18n( "Set the display Zoom Level manually." ), false, "double", "z" ) );
KStarsFunctionList.append( new ScriptFunction( "setLocalTime", i18n( "Set the system clock to the specified Local Time." ),
false, "int", "year", "int", "month", "int", "day", "int", "hour", "int", "minute", "int", "second" ) );
KStarsFunctionList.append( new ScriptFunction( "waitFor", i18n( "Pause script execution for %1 seconds." ), false, "double", "sec" ) );
KStarsFunctionList.append( new ScriptFunction( "waitForKey", i18n( "Halt script execution until the key %1 is pressed. Only single-key strokes are possible; use 'space' for the spacebar." ),
false, TQSTRING_OBJECT_NAME_STRING, "key" ) );
KStarsFunctionList.append( new ScriptFunction( "setTracking", i18n( "Set whether the display is tracking the current location." ), false, "bool", "track" ) );
KStarsFunctionList.append( new ScriptFunction( "changeViewOption", i18n( "Change view option named %1 to value %2." ), false, TQSTRING_OBJECT_NAME_STRING, "opName", TQSTRING_OBJECT_NAME_STRING, "opValue" ) );
KStarsFunctionList.append( new ScriptFunction( "setGeoLocation", i18n( "Set the geographic location to the city specified by %1, %2 and %3." ),
false, TQSTRING_OBJECT_NAME_STRING, "cityName", TQSTRING_OBJECT_NAME_STRING, "provinceName", TQSTRING_OBJECT_NAME_STRING, "countryName" ) );
KStarsFunctionList.append( new ScriptFunction( "setColor", i18n( "Set the color named %1 to the value %2." ), false, TQSTRING_OBJECT_NAME_STRING, "colorName", TQSTRING_OBJECT_NAME_STRING, "value" ) );
KStarsFunctionList.append( new ScriptFunction( "loadColorScheme", i18n( "Load the color scheme named %1." ), false, TQSTRING_OBJECT_NAME_STRING, "name" ) );
KStarsFunctionList.append( new ScriptFunction( "exportImage", i18n( "Export the sky image to the file %1, with width %2 and height %3." ), false, TQSTRING_OBJECT_NAME_STRING, "fileName", "int", "width", "int", "height" ) );
KStarsFunctionList.append( new ScriptFunction( "printImage", i18n( "Print the sky image to a printer or file. If %1 is true, it will show the print dialog. If %2 is true, it will use the Star Chart color scheme for printing." ), false, "bool", "usePrintDialog", "bool", "useChartColors" ) );
KStarsFunctionList.append( new ScriptFunction( "stop", i18n( "Halt the simulation clock." ), true ) );
KStarsFunctionList.append( new ScriptFunction( "start", i18n( "Start the simulation clock." ), true ) );
KStarsFunctionList.append( new ScriptFunction( "setClockScale", i18n( "Set the timescale of the simulation clock to %1. 1.0 means real-time; 2.0 means twice real-time; etc." ), true, "double", "scale" ) );
// INDI fuctions
ScriptFunction *startINDIFunc(NULL), *shutdownINDIFunc(NULL), *switchINDIFunc(NULL), *setINDIPortFunc(NULL), *setINDIScopeActionFunc(NULL), *setINDITargetCoordFunc(NULL), *setINDITargetNameFunc(NULL), *setINDIGeoLocationFunc(NULL), *setINDIUTCFunc(NULL), *setINDIActionFunc(NULL), *waitForINDIActionFunc(NULL), *setINDIFocusSpeedFunc(NULL), *startINDIFocusFunc(NULL), *setINDIFocusTimeoutFunc(NULL), *setINDICCDTempFunc(NULL), *setINDIFilterNumFunc(NULL), *setINDIFrameTypeFunc(NULL), *startINDIExposureFunc(NULL);
startINDIFunc = new ScriptFunction( "startINDI", i18n("Establish an INDI device either in local mode or server mode."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "bool", "useLocal");
INDIFunctionList.append ( startINDIFunc );
shutdownINDIFunc = new ScriptFunction( "shutdownINDI", i18n("Shutdown an INDI device."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName");
INDIFunctionList.append ( shutdownINDIFunc);
switchINDIFunc = new ScriptFunction( "switchINDI", i18n("Connect or Disconnect an INDI device."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "bool", "turnOn");
switchINDIFunc->setINDIProperty("CONNECTION");
INDIFunctionList.append ( switchINDIFunc);
setINDIPortFunc = new ScriptFunction( "setINDIPort", i18n("Set INDI's device connection port."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "port");
setINDIPortFunc->setINDIProperty("DEVICE_PORT");
INDIFunctionList.append ( setINDIPortFunc);
setINDIScopeActionFunc = new ScriptFunction( "setINDIScopeAction", i18n("Set the telescope action. Available actions are SLEW, TRACK, SYNC, PARK, and ABORT."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "action");
setINDIScopeActionFunc->setINDIProperty("CHECK");
INDIFunctionList.append( setINDIScopeActionFunc);
setINDITargetCoordFunc = new ScriptFunction ( "setINDITargetCoord", i18n( "Set the telescope target coordinates to the RA/Dec coordinates. RA is expressed in Hours; DEC is expressed in Degrees." ), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "double", "RA", "double", "DEC" );
setINDITargetCoordFunc->setINDIProperty("EQUATORIAL_EOD_COORD");
INDIFunctionList.append ( setINDITargetCoordFunc );
setINDITargetNameFunc = new ScriptFunction( "setINDITargetName", i18n("Set the telescope target coorinates to the RA/Dec coordinates of the selected object."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "objectName");
setINDITargetNameFunc->setINDIProperty("EQUATORIAL_EOD_COORD");
INDIFunctionList.append( setINDITargetNameFunc);
setINDIGeoLocationFunc = new ScriptFunction ( "setINDIGeoLocation", i18n("Set the telescope longitude and latitude. The longitude is E of N."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "double", "long", "double", "lat");
setINDIGeoLocationFunc->setINDIProperty("GEOGRAPHIC_COORD");
INDIFunctionList.append( setINDIGeoLocationFunc);
setINDIUTCFunc = new ScriptFunction ( "setINDIUTC", i18n("Set the device UTC time in ISO 8601 format YYYY/MM/DDTHH:MM:SS."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "UTCDateTime");
setINDIUTCFunc->setINDIProperty("TIME");
INDIFunctionList.append( setINDIUTCFunc);
setINDIActionFunc = new ScriptFunction( "setINDIAction", i18n("Activate an INDI action. The action is the name of any INDI switch property element supported by the device."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "actionName");
INDIFunctionList.append( setINDIActionFunc);
waitForINDIActionFunc = new ScriptFunction ("waitForINDIAction", i18n("Pause script execution until action returns with OK status. The action can be the name of any INDI property supported by the device."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "actionName");
INDIFunctionList.append( waitForINDIActionFunc );
setINDIFocusSpeedFunc = new ScriptFunction ("setINDIFocusSpeed", i18n("Set the telescope focuser speed. Set speed to 0 to halt the focuser. 1-3 correspond to slow, medium, and fast speeds respectively."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "unsigned int", "speed");
setINDIFocusSpeedFunc->setINDIProperty("FOCUS_SPEED");
INDIFunctionList.append( setINDIFocusSpeedFunc );
startINDIFocusFunc = new ScriptFunction ("startINDIFocus", i18n("Start moving the focuser in the direction Dir, and for the duration specified by setINDIFocusTimeout."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "Dir");
startINDIFocusFunc->setINDIProperty("FOCUS_MOTION");
INDIFunctionList.append( startINDIFocusFunc);
setINDIFocusTimeoutFunc = new ScriptFunction ( "setINDIFocusTimeout", i18n("Set the telescope focuser timer in seconds. This is the duration of any focusing procedure performed by calling startINDIFocus."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "int", "timeout");
setINDIFocusTimeoutFunc->setINDIProperty("FOCUS_TIMER");
INDIFunctionList.append( setINDIFocusTimeoutFunc);
setINDICCDTempFunc = new ScriptFunction( "setINDICCDTemp", i18n("Set the target CCD chip temperature."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "int", "temp");
setINDICCDTempFunc->setINDIProperty("CCD_TEMPERATURE");
INDIFunctionList.append( setINDICCDTempFunc);
setINDIFilterNumFunc = new ScriptFunction( "setINDIFilterNum", i18n("Set the target filter position."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "int", "filter_num");
setINDIFilterNumFunc->setINDIProperty("FILTER_SLOT");
INDIFunctionList.append ( setINDIFilterNumFunc);
setINDIFrameTypeFunc = new ScriptFunction( "setINDIFrameType", i18n("Set the CCD camera frame type. Available options are FRAME_LIGHT, FRAME_BIAS, FRAME_DARK, and FRAME_FLAT."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", TQSTRING_OBJECT_NAME_STRING, "type");
setINDIFrameTypeFunc->setINDIProperty("FRAME_TYPE");
INDIFunctionList.append( setINDIFrameTypeFunc);
startINDIExposureFunc = new ScriptFunction ( "startINDIExposure", i18n("Start Camera/CCD exposure. The duration is in seconds."), false, TQSTRING_OBJECT_NAME_STRING, "deviceName", "int", "timeout");
startINDIExposureFunc->setINDIProperty("CCD_EXPOSE_DURATION");
INDIFunctionList.append( startINDIExposureFunc);
// Modified by JM
// We're using TDEListView instead of listbox to arrange the functions in two
// main categories: KStars and INDI. INDI is further subdivided.
sb->FunctionListView->addColumn(i18n("Functions"));
sb->FunctionListView->setSorting(-1);
TQListViewItem *INDI_tree = new TQListViewItem( sb->FunctionListView, "INDI");
TQListViewItem *INDI_filter = new TQListViewItem( INDI_tree, "Filter");
TQListViewItem *INDI_focuser = new TQListViewItem( INDI_tree, "Focuser");
TQListViewItem *INDI_ccd = new TQListViewItem( INDI_tree, "Camera/CCD");
TQListViewItem *INDI_telescope = new TQListViewItem( INDI_tree, "Telescope");
TQListViewItem *INDI_general = new TQListViewItem( INDI_tree, "General");
TQListViewItem *kstars_tree = new TQListViewItem( sb->FunctionListView, "KStars");
for ( ScriptFunction *sf = KStarsFunctionList.last(); sf; sf = KStarsFunctionList.prev() )
new TQListViewItem (kstars_tree, sf->prototype());
// General
new TQListViewItem(INDI_general, waitForINDIActionFunc->prototype());
new TQListViewItem(INDI_general, setINDIActionFunc->prototype());
new TQListViewItem(INDI_general, setINDIPortFunc->prototype());
new TQListViewItem(INDI_general, switchINDIFunc->prototype());
new TQListViewItem(INDI_general, shutdownINDIFunc->prototype());
new TQListViewItem(INDI_general, startINDIFunc->prototype());
// Telescope
new TQListViewItem(INDI_telescope, setINDIUTCFunc->prototype());
new TQListViewItem(INDI_telescope, setINDIGeoLocationFunc->prototype());
new TQListViewItem(INDI_telescope, setINDITargetNameFunc->prototype());
new TQListViewItem(INDI_telescope, setINDITargetCoordFunc->prototype());
new TQListViewItem(INDI_telescope, setINDIScopeActionFunc->prototype());
// CCD
new TQListViewItem(INDI_ccd, startINDIExposureFunc->prototype());
new TQListViewItem(INDI_ccd, setINDIFrameTypeFunc->prototype());
new TQListViewItem(INDI_ccd, setINDICCDTempFunc->prototype());
// Focuser
new TQListViewItem(INDI_focuser, startINDIFocusFunc->prototype());
new TQListViewItem(INDI_focuser, setINDIFocusTimeoutFunc->prototype());
new TQListViewItem(INDI_focuser, setINDIFocusSpeedFunc->prototype());
// Filter
new TQListViewItem(INDI_filter, setINDIFilterNumFunc->prototype());
//Add icons to Push Buttons
TDEIconLoader *icons = TDEGlobal::iconLoader();
sb->NewButton->setIconSet( icons->loadIcon( "filenew", TDEIcon::Toolbar ) );
sb->OpenButton->setIconSet( icons->loadIcon( "fileopen", TDEIcon::Toolbar ) );
sb->SaveButton->setIconSet( icons->loadIconSet( "filesave", TDEIcon::Toolbar ) );
sb->SaveAsButton->setIconSet( icons->loadIconSet( "filesaveas", TDEIcon::Toolbar ) );
sb->RunButton->setIconSet( icons->loadIconSet( "launch", TDEIcon::Toolbar ) );
sb->CopyButton->setIconSet( icons->loadIconSet( "reload", TDEIcon::Toolbar ) );
sb->AddButton->setIconSet( icons->loadIconSet( "back", TDEIcon::Toolbar ) );
sb->RemoveButton->setIconSet( icons->loadIconSet( "forward", TDEIcon::Toolbar ) );
sb->UpButton->setIconSet( icons->loadIconSet( "go-up", TDEIcon::Toolbar ) );
sb->DownButton->setIconSet( icons->loadIconSet( "go-down", TDEIcon::Toolbar ) );
//Prepare the widget stack
argBlank = new TQWidget( sb->ArgStack );
argLookToward = new ArgLookToward( sb->ArgStack );
argSetRaDec = new ArgSetRaDec( sb->ArgStack );
argSetAltAz = new ArgSetAltAz( sb->ArgStack );
argSetLocalTime = new ArgSetLocalTime( sb->ArgStack );
argWaitFor = new ArgWaitFor( sb->ArgStack );
argWaitForKey = new ArgWaitForKey( sb->ArgStack );
argSetTracking = new ArgSetTrack( sb->ArgStack );
argChangeViewOption = new ArgChangeViewOption( sb->ArgStack );
argSetGeoLocation = new ArgSetGeoLocation( sb->ArgStack );
argTimeScale = new ArgTimeScale( sb->ArgStack );
argZoom = new ArgZoom( sb->ArgStack );
argExportImage = new ArgExportImage( sb->ArgStack );
argPrintImage = new ArgPrintImage( sb->ArgStack );
argSetColor = new ArgSetColor( sb->ArgStack );
argLoadColorScheme = new ArgLoadColorScheme( sb->ArgStack );
argStartINDI = new ArgStartINDI (sb->ArgStack);
argShutdownINDI = new ArgShutdownINDI (sb->ArgStack);
argSwitchINDI = new ArgSwitchINDI (sb->ArgStack);
argSetPortINDI = new ArgSetPortINDI (sb->ArgStack);
argSetTargetCoordINDI = new ArgSetTargetCoordINDI (sb->ArgStack);
argSetTargetNameINDI = new ArgSetTargetNameINDI (sb->ArgStack);
argSetActionINDI = new ArgSetActionINDI (sb->ArgStack);
argWaitForActionINDI = new ArgSetActionINDI (sb->ArgStack);
argSetFocusSpeedINDI = new ArgSetFocusSpeedINDI (sb->ArgStack);
argStartFocusINDI = new ArgStartFocusINDI(sb->ArgStack);
argSetFocusTimeoutINDI = new ArgSetFocusTimeoutINDI( sb->ArgStack);
argSetGeoLocationINDI = new ArgSetGeoLocationINDI( sb->ArgStack);
argStartExposureINDI = new ArgStartExposureINDI( sb->ArgStack);
argSetUTCINDI = new ArgSetUTCINDI( sb->ArgStack);
argSetScopeActionINDI = new ArgSetScopeActionINDI( sb->ArgStack);
argSetFrameTypeINDI = new ArgSetFrameTypeINDI (sb->ArgStack);
argSetCCDTempINDI = new ArgSetCCDTempINDI(sb->ArgStack);
argSetFilterNumINDI = new ArgSetFilterNumINDI(sb->ArgStack);
argStartFocusINDI->directionCombo->insertItem("IN");
argStartFocusINDI->directionCombo->insertItem("OUT");
argSetScopeActionINDI->actionCombo->insertItem("SLEW");
argSetScopeActionINDI->actionCombo->insertItem("TRACK");
argSetScopeActionINDI->actionCombo->insertItem("SYNC");
argSetScopeActionINDI->actionCombo->insertItem("PARK");
argSetScopeActionINDI->actionCombo->insertItem("ABORT");
argSetFrameTypeINDI->typeCombo->insertItem("FRAME_LIGHT");
argSetFrameTypeINDI->typeCombo->insertItem("FRAME_BIAS");
argSetFrameTypeINDI->typeCombo->insertItem("FRAME_DARK");
argSetFrameTypeINDI->typeCombo->insertItem("FRAME_FLAT");
sb->ArgStack->addWidget( argBlank );
sb->ArgStack->addWidget( argLookToward );
sb->ArgStack->addWidget( argSetRaDec );
sb->ArgStack->addWidget( argSetAltAz );
sb->ArgStack->addWidget( argSetLocalTime );
sb->ArgStack->addWidget( argWaitFor );
sb->ArgStack->addWidget( argWaitForKey );
sb->ArgStack->addWidget( argSetTracking );
sb->ArgStack->addWidget( argChangeViewOption );
sb->ArgStack->addWidget( argSetGeoLocation );
sb->ArgStack->addWidget( argTimeScale );
sb->ArgStack->addWidget( argZoom );
sb->ArgStack->addWidget( argExportImage );
sb->ArgStack->addWidget( argPrintImage );
sb->ArgStack->addWidget( argSetColor );
sb->ArgStack->addWidget( argLoadColorScheme );
sb->ArgStack->addWidget( argStartINDI);
sb->ArgStack->addWidget( argShutdownINDI);
sb->ArgStack->addWidget( argSwitchINDI);
sb->ArgStack->addWidget( argSetPortINDI);
sb->ArgStack->addWidget( argSetTargetCoordINDI);
sb->ArgStack->addWidget( argSetTargetNameINDI);
sb->ArgStack->addWidget( argSetActionINDI);
sb->ArgStack->addWidget( argWaitForActionINDI );
sb->ArgStack->addWidget( argSetFocusSpeedINDI );
sb->ArgStack->addWidget( argStartFocusINDI);
sb->ArgStack->addWidget( argSetFocusTimeoutINDI);
sb->ArgStack->addWidget( argSetGeoLocationINDI);
sb->ArgStack->addWidget( argStartExposureINDI);
sb->ArgStack->addWidget( argSetUTCINDI);
sb->ArgStack->addWidget( argSetScopeActionINDI);
sb->ArgStack->addWidget( argSetFrameTypeINDI);
sb->ArgStack->addWidget( argSetCCDTempINDI);
sb->ArgStack->addWidget( argSetFilterNumINDI);
sb->ArgStack->raiseWidget( 0 );
snd = new ScriptNameDialog( ks );
otv = new OptionsTreeView( ks );
initViewOptions();
//connect widgets in ScriptBuilderUI
connect( sb->FunctionListView, TQT_SIGNAL( doubleClicked(TQListViewItem *, const TQPoint &, int )), this, TQT_SLOT( slotAddFunction() ) );
connect( sb->FunctionListView, TQT_SIGNAL( currentChanged(TQListViewItem*) ), this, TQT_SLOT( slotShowDoc() ) );
connect( sb->UpButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveFunctionUp() ) );
connect( sb->ScriptListBox, TQT_SIGNAL( currentChanged(TQListBoxItem*) ), this, TQT_SLOT( slotArgWidget() ) );
connect( sb->DownButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveFunctionDown() ) );
connect( sb->CopyButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotCopyFunction() ) );
connect( sb->RemoveButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRemoveFunction() ) );
connect( sb->NewButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotNew() ) );
connect( sb->OpenButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotOpen() ) );
connect( sb->SaveButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotSave() ) );
connect( sb->SaveAsButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotSaveAs() ) );
connect( sb->AddButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddFunction() ) );
connect( sb->RunButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRunScript() ) );
//Connections for Arg Widgets
connect( argSetGeoLocation->FindCityButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotFindCity() ) );
connect( argLookToward->FindButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotFindObject() ) );
connect( argChangeViewOption->TreeButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotShowOptions() ) );
connect( argLookToward->FocusEdit, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotLookToward() ) );
connect( argSetRaDec->RaBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotRa() ) );
connect( argSetRaDec->DecBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotDec() ) );
connect( argSetAltAz->AltBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotAlt() ) );
connect( argSetAltAz->AzBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotAz() ) );
connect( argSetLocalTime->DateBox, TQT_SIGNAL( changed(ExtDate) ), this, TQT_SLOT( slotChangeDate() ) );
connect( argSetLocalTime->TimeBox, TQT_SIGNAL( valueChanged(const TQTime&) ), this, TQT_SLOT( slotChangeTime() ) );
connect( argWaitFor->DelayBox, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotWaitFor() ) );
connect( argWaitForKey->WaitKeyEdit, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotWaitForKey() ) );
connect( argSetTracking->CheckTrack, TQT_SIGNAL( stateChanged(int) ), this, TQT_SLOT( slotTracking() ) );
connect( argChangeViewOption->OptionName, TQT_SIGNAL( activated(const TQString &) ), this, TQT_SLOT( slotViewOption() ) );
connect( argChangeViewOption->OptionValue, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotViewOption() ) );
connect( argSetGeoLocation->CityName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotChangeCity() ) );
connect( argSetGeoLocation->ProvinceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotChangeProvince() ) );
connect( argSetGeoLocation->CountryName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotChangeCountry() ) );
connect( argTimeScale->TimeScale, TQT_SIGNAL( scaleChanged(float) ), this, TQT_SLOT( slotTimeScale() ) );
connect( argZoom->ZoomBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotZoom() ) );
connect( argExportImage->ExportFileName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotExportImage() ) );
connect( argExportImage->ExportWidth, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotExportImage() ) );
connect( argExportImage->ExportHeight, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( slotExportImage() ) );
connect( argPrintImage->UsePrintDialog, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( slotPrintImage() ) );
connect( argPrintImage->UseChartColors, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( slotPrintImage() ) );
connect( argSetColor->ColorName, TQT_SIGNAL( activated(const TQString &) ), this, TQT_SLOT( slotChangeColorName() ) );
connect( argSetColor->ColorValue, TQT_SIGNAL( changed(const TQColor &) ), this, TQT_SLOT( slotChangeColor() ) );
connect( argLoadColorScheme->SchemeList, TQT_SIGNAL( clicked( TQListBoxItem* ) ), this, TQT_SLOT( slotLoadColorScheme( TQListBoxItem* ) ) );
connect( snd->ScriptName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotEnableScriptNameOK() ) );
connect( sb->AppendINDIWait, TQT_SIGNAL ( toggled(bool) ), this, TQT_SLOT(slotINDIWaitCheck(bool)));
// Connections for INDI's Arg widgets
// INDI Start Device
connect (argStartINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIStartDeviceName()));
connect (argStartINDI->INDIMode, TQT_SIGNAL ( clicked( int)), this, TQT_SLOT (slotINDIStartDeviceMode()));
// INDI Shutdown Device
connect (argShutdownINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIShutdown()));
// INDI Swtich Device
connect (argSwitchINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISwitchDeviceName()));
connect (argSwitchINDI->INDIConnection, TQT_SIGNAL ( clicked( int)), this, TQT_SLOT (slotINDISwitchDeviceConnection()));
// INDI Set Device Port
connect (argSetPortINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetPortDeviceName()));
connect (argSetPortINDI->devicePort, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetPortDevicePort()));
// INDI Set Target Coord
connect (argSetTargetCoordINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetTargetCoordDeviceName()));
connect( argSetTargetCoordINDI->RaBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotINDISetTargetCoordDeviceRA() ) );
connect( argSetTargetCoordINDI->DecBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotINDISetTargetCoordDeviceDEC() ) );
// INDI Set Target Name
connect( argSetTargetNameINDI->FindButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotINDIFindObject() ) );
connect (argSetTargetNameINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetTargetNameDeviceName()));
connect (argSetTargetNameINDI->objectName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetTargetNameObjectName()));
// INDI Set Action
connect (argSetActionINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetActionDeviceName()));
connect (argSetActionINDI->actionName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetActionName()));
// INDI Wait For Action
connect (argWaitForActionINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIWaitForActionDeviceName()));
connect (argWaitForActionINDI->actionName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIWaitForActionName()));
// INDI Set Focus Speed
connect (argSetFocusSpeedINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetFocusSpeedDeviceName()));
connect (argSetFocusSpeedINDI->speedIN, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT(slotINDISetFocusSpeed()));
// INDI Start Focus
connect (argStartFocusINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIStartFocusDeviceName()));
connect (argStartFocusINDI->directionCombo, TQT_SIGNAL( activated(const TQString &) ), this, TQT_SLOT(slotINDIStartFocusDirection()));
// INDI Set Focus Timeout
connect (argSetFocusTimeoutINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetFocusTimeoutDeviceName()));
connect (argSetFocusTimeoutINDI->timeOut, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT(slotINDISetFocusTimeout()));
// INDI Set Geo Location
connect (argSetGeoLocationINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetGeoLocationDeviceName()));
connect( argSetGeoLocationINDI->longBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotINDISetGeoLocationDeviceLong() ) );
connect( argSetGeoLocationINDI->latBox, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( slotINDISetGeoLocationDeviceLat() ) );
// INDI Start Exposure
connect (argStartExposureINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDIStartExposureDeviceName()));
connect (argStartExposureINDI->timeOut, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT(slotINDIStartExposureTimeout()));
// INDI Set UTC
connect (argSetUTCINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetUTCDeviceName()));
connect (argSetUTCINDI->UTC, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetUTC()));
// INDI Set Scope Action
connect (argSetScopeActionINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetScopeActionDeviceName()));
connect (argSetScopeActionINDI->actionCombo, TQT_SIGNAL( activated(const TQString &) ), this, TQT_SLOT(slotINDISetScopeAction()));
// INDI Set Frame type
connect (argSetFrameTypeINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetFrameTypeDeviceName()));
connect (argSetFrameTypeINDI->typeCombo, TQT_SIGNAL( activated(const TQString &) ), this, TQT_SLOT(slotINDISetFrameType()));
// INDI Set CCD Temp
connect (argSetCCDTempINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetCCDTempDeviceName()));
connect (argSetCCDTempINDI->temp, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT(slotINDISetCCDTemp()));
// INDI Set Filter Num
connect (argSetFilterNumINDI->deviceName, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT(slotINDISetFilterNumDeviceName()));
connect (argSetFilterNumINDI->filter_num, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT(slotINDISetFilterNum()));
//disbale some buttons
sb->CopyButton->setEnabled( false );
sb->AddButton->setEnabled( false );
sb->RemoveButton->setEnabled( false );
sb->UpButton->setEnabled( false );
sb->DownButton->setEnabled( false );
sb->SaveButton->setEnabled( false );
sb->SaveAsButton->setEnabled( false );
sb->RunButton->setEnabled( false );
}
ScriptBuilder::~ScriptBuilder()
{
}
void ScriptBuilder::initViewOptions() {
otv->OptionsList->setRootIsDecorated( true );
//InfoBoxes
opsGUI = new TQListViewItem( otv->OptionsList, i18n( "InfoBoxes" ) );
new TQListViewItem( opsGUI, "ShowInfoBoxes", i18n( "Toggle display of all InfoBoxes" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShowTimeBox", i18n( "Toggle display of Time InfoBox" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShowGeoBox", i18n( "Toggle display of Geographic InfoBox" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShowFocusBox", i18n( "Toggle display of Focus InfoBox" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShadeTimeBox", i18n( "(un)Shade Time InfoBox" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShadeGeoBox", i18n( "(un)Shade Geographic InfoBox" ), i18n( "bool" ) );
new TQListViewItem( opsGUI, "ShadeFocusBox", i18n( "(un)Shade Focus InfoBox" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "ShowInfoBoxes" );
argChangeViewOption->OptionName->insertItem( "ShowTimeBox" );
argChangeViewOption->OptionName->insertItem( "ShowGeoBox" );
argChangeViewOption->OptionName->insertItem( "ShowFocusBox" );
argChangeViewOption->OptionName->insertItem( "ShadeTimeBox" );
argChangeViewOption->OptionName->insertItem( "ShadeGeoBox" );
argChangeViewOption->OptionName->insertItem( "ShadeFocusBox" );
//Toolbars
opsToolbar = new TQListViewItem( otv->OptionsList, i18n( "Toolbars" ) );
new TQListViewItem( opsToolbar, "ShowMainToolBar", i18n( "Toggle display of main toolbar" ), i18n( "bool" ) );
new TQListViewItem( opsToolbar, "ShowViewToolBar", i18n( "Toggle display of view toolbar" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "ShowMainToolBar" );
argChangeViewOption->OptionName->insertItem( "ShowViewToolBar" );
//Show Objects
opsShowObj = new TQListViewItem( otv->OptionsList, i18n( "Show Objects" ) );
new TQListViewItem( opsShowObj, "ShowStars", i18n( "Toggle display of Stars" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowDeepSky", i18n( "Toggle display of all deep-sky objects" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowMessier", i18n( "Toggle display of Messier object symbols" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowMessierImages", i18n( "Toggle display of Messier object images" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowNGC", i18n( "Toggle display of NGC objects" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowIC", i18n( "Toggle display of IC objects" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowPlanets", i18n( "Toggle display of all solar system bodies" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowSun", i18n( "Toggle display of Sun" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowMoon", i18n( "Toggle display of Moon" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowMercury", i18n( "Toggle display of Mercury" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowVenus", i18n( "Toggle display of Venus" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowMars", i18n( "Toggle display of Mars" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowJupiter", i18n( "Toggle display of Jupiter" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowSaturn", i18n( "Toggle display of Saturn" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowUranus", i18n( "Toggle display of Uranus" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowNeptune", i18n( "Toggle display of Neptune" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowPluto", i18n( "Toggle display of Pluto" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowAsteroids", i18n( "Toggle display of Asteroids" ), i18n( "bool" ) );
new TQListViewItem( opsShowObj, "ShowComets", i18n( "Toggle display of Comets" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "ShowSAO" );
argChangeViewOption->OptionName->insertItem( "ShowDeepSky" );
argChangeViewOption->OptionName->insertItem( "ShowMess" );
argChangeViewOption->OptionName->insertItem( "ShowMessImages" );
argChangeViewOption->OptionName->insertItem( "ShowNGC" );
argChangeViewOption->OptionName->insertItem( "ShowIC" );
argChangeViewOption->OptionName->insertItem( "ShowPlanets" );
argChangeViewOption->OptionName->insertItem( "ShowSun" );
argChangeViewOption->OptionName->insertItem( "ShowMoon" );
argChangeViewOption->OptionName->insertItem( "ShowMercury" );
argChangeViewOption->OptionName->insertItem( "ShowVenus" );
argChangeViewOption->OptionName->insertItem( "ShowMars" );
argChangeViewOption->OptionName->insertItem( "ShowJupiter" );
argChangeViewOption->OptionName->insertItem( "ShowSaturn" );
argChangeViewOption->OptionName->insertItem( "ShowUranus" );
argChangeViewOption->OptionName->insertItem( "ShowNeptune" );
argChangeViewOption->OptionName->insertItem( "ShowPluto" );
argChangeViewOption->OptionName->insertItem( "ShowAsteroids" );
argChangeViewOption->OptionName->insertItem( "ShowComets" );
opsShowOther = new TQListViewItem( otv->OptionsList, i18n( "Show Other" ) );
new TQListViewItem( opsShowOther, "ShowCLines", i18n( "Toggle display of constellation lines" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowCBounds", i18n( "Toggle display of constellation boundaries" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowCNames", i18n( "Toggle display of constellation names" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowMilkyWay", i18n( "Toggle display of Milky Way" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowGrid", i18n( "Toggle display of the coordinate grid" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowEquator", i18n( "Toggle display of the celestial equator" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowEcliptic", i18n( "Toggle display of the ecliptic" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowHorizon", i18n( "Toggle display of the horizon line" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowGround", i18n( "Toggle display of the opaque ground" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowStarNames", i18n( "Toggle display of star name labels" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowStarMagnitudes", i18n( "Toggle display of star magnitude labels" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowAsteroidNames", i18n( "Toggle display of asteroid name labels" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowCometNames", i18n( "Toggle display of comet name labels" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowPlanetNames", i18n( "Toggle display of planet name labels" ), i18n( "bool" ) );
new TQListViewItem( opsShowOther, "ShowPlanetImages", i18n( "Toggle display of planet images" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "ShowCLines" );
argChangeViewOption->OptionName->insertItem( "ShowCBounds" );
argChangeViewOption->OptionName->insertItem( "ShowCNames" );
argChangeViewOption->OptionName->insertItem( "ShowMilkyWay" );
argChangeViewOption->OptionName->insertItem( "ShowGrid" );
argChangeViewOption->OptionName->insertItem( "ShowEquator" );
argChangeViewOption->OptionName->insertItem( "ShowEcliptic" );
argChangeViewOption->OptionName->insertItem( "ShowHorizon" );
argChangeViewOption->OptionName->insertItem( "ShowGround" );
argChangeViewOption->OptionName->insertItem( "ShowStarNames" );
argChangeViewOption->OptionName->insertItem( "ShowStarMagnitudes" );
argChangeViewOption->OptionName->insertItem( "ShowAsteroidNames" );
argChangeViewOption->OptionName->insertItem( "ShowCometNames" );
argChangeViewOption->OptionName->insertItem( "ShowPlanetNames" );
argChangeViewOption->OptionName->insertItem( "ShowPlanetImages" );
opsCName = new TQListViewItem( otv->OptionsList, i18n( "Constellation Names" ) );
new TQListViewItem( opsCName, "UseLatinConstellNames", i18n( "Show Latin constellation names" ), i18n( "bool" ) );
new TQListViewItem( opsCName, "UseLocalConstellNames", i18n( "Show constellation names in local language" ), i18n( "bool" ) );
new TQListViewItem( opsCName, "UseAbbrevConstellNames", i18n( "Show IAU-standard constellation abbreviations" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "UseLatinConstellNames" );
argChangeViewOption->OptionName->insertItem( "UseLocalConstellNames" );
argChangeViewOption->OptionName->insertItem( "UseAbbrevConstellNames" );
opsHide = new TQListViewItem( otv->OptionsList, i18n( "Hide Items" ) );
new TQListViewItem( opsHide, "HideOnSlew", i18n( "Toggle whether objects hidden while slewing display" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "SlewTimeScale", i18n( "Timestep threshold (in seconds) for hiding objects" ), i18n( "double" ) );
new TQListViewItem( opsHide, "HideStars", i18n( "Hide faint stars while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HidePlanets", i18n( "Hide solar system bodies while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideMessier", i18n( "Hide Messier objects while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideNGC", i18n( "Hide NGC objects while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideIC", i18n( "Hide IC objects while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideMilkyWay", i18n( "Hide Milky Way while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideCNames", i18n( "Hide constellation names while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideCLines", i18n( "Hide constellation lines while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideCBounds", i18n( "Hide constellation boundaries while slewing?" ), i18n( "bool" ) );
new TQListViewItem( opsHide, "HideGrid", i18n( "Hide coordinate grid while slewing?" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "HideOnSlew" );
argChangeViewOption->OptionName->insertItem( "SlewTimeScale" );
argChangeViewOption->OptionName->insertItem( "HideStars" );
argChangeViewOption->OptionName->insertItem( "HidePlanets" );
argChangeViewOption->OptionName->insertItem( "HideMessier" );
argChangeViewOption->OptionName->insertItem( "HideNGC" );
argChangeViewOption->OptionName->insertItem( "HideIC" );
argChangeViewOption->OptionName->insertItem( "HideMilkyWay" );
argChangeViewOption->OptionName->insertItem( "HideCNames" );
argChangeViewOption->OptionName->insertItem( "HideCLines" );
argChangeViewOption->OptionName->insertItem( "HideCBounds" );
argChangeViewOption->OptionName->insertItem( "HideGrid" );
opsSkymap = new TQListViewItem( otv->OptionsList, i18n( "Skymap Options" ) );
new TQListViewItem( opsSkymap, "UseAltAz", i18n( "UseQt::Horizontal coordinates? (otherwise, use Equatorial)" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "ZoomFactor", i18n( "Set the Zoom Factor" ), i18n( "double" ) );
new TQListViewItem( opsSkymap, "FOV Size", i18n( "Select angular size for the FOV symbol (in arcmin)" ), i18n( "double" ) );
new TQListViewItem( opsSkymap, "FOV Shape", i18n( "Select shape for the FOV symbol (0=Square, 1=Circle, 2=Crosshairs, 4=Bullseye)" ), i18n( "int" ) );
new TQListViewItem( opsSkymap, "FOV Color", i18n( "Select color for the FOV symbol" ), i18n( "string" ) );
new TQListViewItem( opsSkymap, "AnimateSlewing", i18n( "Use animated slewing? (otherwise, \"snap\" to new focus)" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "UseRefraction", i18n( "Correct for atmospheric refraction?" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "UseAutoLabel", i18n( "Automatically attach name label to centered object?" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "UseHoverLabel", i18n( "Attach temporary name label when hovering mouse over an object?" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "UseAutoTrail", i18n( "Automatically add trail to centered solar system body?" ), i18n( "bool" ) );
new TQListViewItem( opsSkymap, "FadePlanetTrails", i18n( "Planet trails fade to sky color? (otherwise color is constant)" ), i18n( "bool" ) );
argChangeViewOption->OptionName->insertItem( "UseAltAz" );
argChangeViewOption->OptionName->insertItem( "ZoomFactor" );
argChangeViewOption->OptionName->insertItem( "FOVName" );
argChangeViewOption->OptionName->insertItem( "FOVSize" );
argChangeViewOption->OptionName->insertItem( "FOVShape" );
argChangeViewOption->OptionName->insertItem( "FOVColor" );
argChangeViewOption->OptionName->insertItem( "UseRefraction" );
argChangeViewOption->OptionName->insertItem( "UseAutoLabel" );
argChangeViewOption->OptionName->insertItem( "UseHoverLabel" );
argChangeViewOption->OptionName->insertItem( "UseAutoTrail" );
argChangeViewOption->OptionName->insertItem( "AnimateSlewing" );
argChangeViewOption->OptionName->insertItem( "FadePlanetTrails" );
opsLimit = new TQListViewItem( otv->OptionsList, i18n( "Limits" ) );
new TQListViewItem( opsLimit, "magLimitDrawStar", i18n( "magnitude of faintest star drawn on map when zoomed in" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitDrawStarZoomOut", i18n( "magnitude of faintest star drawn on map when zoomed out" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitDrawDeepSky", i18n( "magnitude of faintest nonstellar object drawn on map when zoomed in" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitDrawDeepSkyZoomOut", i18n( "magnitude of faintest nonstellar object drawn on map when zoomed out" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitDrawStarInfo", i18n( "magnitude of faintest star labeled on map" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitHideStar", i18n( "magnitude of brightest star hidden while slewing" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitAsteroid", i18n( "magnitude of faintest asteroid drawn on map" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "magLimitAsteroidName", i18n( "magnitude of faintest asteroid labeled on map" ), i18n( "double" ) );
new TQListViewItem( opsLimit, "maxRadCometName", i18n( "comets nearer to the Sun than this (in AU) are labeled on map" ), i18n( "double" ) );
argChangeViewOption->OptionName->insertItem( "magLimitDrawStar" );
argChangeViewOption->OptionName->insertItem( "magLimitDrawStarZoomOut" );
argChangeViewOption->OptionName->insertItem( "magLimitDrawDeepSky" );
argChangeViewOption->OptionName->insertItem( "magLimitDrawDeepSkyZoomOut" );
argChangeViewOption->OptionName->insertItem( "magLimitDrawStarInfo" );
argChangeViewOption->OptionName->insertItem( "magLimitHideStar" );
argChangeViewOption->OptionName->insertItem( "magLimitAsteroid" );
argChangeViewOption->OptionName->insertItem( "magLimitAsteroidName" );
argChangeViewOption->OptionName->insertItem( "maxRadCometName" );
//init the list of color names and values
for ( unsigned int i=0; i < ks->data()->colorScheme()->numberOfColors(); ++i ) {
argSetColor->ColorName->insertItem( ks->data()->colorScheme()->nameAt(i) );
}
//init list of color scheme names
argLoadColorScheme->SchemeList->insertItem( i18n( "use default color scheme", "Default Colors" ) );
argLoadColorScheme->SchemeList->insertItem( i18n( "use 'star chart' color scheme", "Star Chart" ) );
argLoadColorScheme->SchemeList->insertItem( i18n( "use 'night vision' color scheme", "Night Vision" ) );
argLoadColorScheme->SchemeList->insertItem( i18n( "use 'moonless night' color scheme", "Moonless Night" ) );
TQFile file;
TQString line;
file.setName( locate( "appdata", "colors.dat" ) ); //determine filename in local user KDE directory tree.
if ( file.open( IO_ReadOnly ) ) {
TQTextStream stream( &file );
while ( !stream.eof() ) {
line = stream.readLine();
argLoadColorScheme->SchemeList->insertItem( line.left( line.find( ':' ) ) );
}
file.close();
}
}
//Slots defined in ScriptBuilderUI
void ScriptBuilder::slotNew() {
saveWarning();
if ( !UnsavedChanges ) {
ScriptList.clear();
sb->ScriptListBox->clear();
sb->ArgStack->raiseWidget( argBlank );
sb->CopyButton->setEnabled( false );
sb->RemoveButton->setEnabled( false );
sb->RunButton->setEnabled( false );
currentFileURL = "";
currentScriptName = "";
}
}
void ScriptBuilder::slotOpen() {
saveWarning();
TQString fname;
KTempFile tmpfile;
tmpfile.setAutoDelete(true);
if ( !UnsavedChanges ) {
currentFileURL = KFileDialog::getOpenURL( currentDir, "*.kstars|KStars Scripts (*.kstars)" );
if ( currentFileURL.isValid() ) {
currentDir = currentFileURL.directory();
ScriptList.clear();
sb->ScriptListBox->clear();
sb->ArgStack->raiseWidget( argBlank );
if ( currentFileURL.isLocalFile() ) {
fname = currentFileURL.path();
} else {
fname = tmpfile.name();
if ( ! TDEIO::NetAccess::download( currentFileURL, fname, (TQWidget*) 0 ) )
KMessageBox::sorry( 0, i18n( "Could not download remote file." ), i18n( "Download Error" ) );
}
TQFile f( fname );
if ( !f.open( IO_ReadOnly) ) {
TQString message = i18n( "Could not open file %1." ).arg( f.name() );
KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
currentFileURL = "";
return;
}
TQTextStream istream(&f);
readScript( istream );
f.close();
} else if ( ! currentFileURL.url().isEmpty() ) {
TQString message = i18n( "Invalid URL: %1" ).arg( currentFileURL.url() );
KMessageBox::sorry( 0, message, i18n( "Invalid URL" ) );
currentFileURL = "";
}
}
}
void ScriptBuilder::slotSave() {
TQString fname;
KTempFile tmpfile;
tmpfile.setAutoDelete(true);
if ( currentScriptName.isEmpty() ) {
//Get Script Name and Author info
if ( snd->exec() == TQDialog::Accepted ) {
currentScriptName = snd->ScriptName->text();
currentAuthor = snd->AuthorName->text();
} else {
return;
}
}
if ( currentFileURL.isEmpty() )
currentFileURL = KFileDialog::getSaveURL( currentDir, "*.kstars|KStars Scripts (*.kstars)" );
if ( currentFileURL.isValid() ) {
currentDir = currentFileURL.directory();
if ( currentFileURL.isLocalFile() ) {
fname = currentFileURL.path();
//Warn user if file exists
if (TQFile::exists(currentFileURL.path())) {
int r=KMessageBox::warningContinueCancel(TQT_TQWIDGET(parent()),
i18n( "A file named \"%1\" already exists. "
"Overwrite it?" ).arg(currentFileURL.fileName()),
i18n( "Overwrite File?" ),
i18n( "&Overwrite" ) );
if(r==KMessageBox::Cancel) return;
}
} else {
fname = tmpfile.name();
}
if ( fname.right( 7 ).lower() != ".kstars" ) fname += ".kstars";
TQFile f( fname );
if ( !f.open( IO_WriteOnly) ) {
TQString message = i18n( "Could not open file %1." ).arg( f.name() );
KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
currentFileURL = "";
return;
}
TQTextStream ostream(&f);
writeScript( ostream );
f.close();
//set rwx for owner, rx for group, rx for other
chmod( fname.ascii(), S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH );
if ( tmpfile.name() == fname ) { //need to upload to remote location
if ( ! TDEIO::NetAccess::upload( tmpfile.name(), currentFileURL, (TQWidget*) 0 ) ) {
TQString message = i18n( "Could not upload image to remote location: %1" ).arg( currentFileURL.prettyURL() );
KMessageBox::sorry( 0, message, i18n( "Could not upload file" ) );
}
}
setUnsavedChanges( false );
} else {
TQString message = i18n( "Invalid URL: %1" ).arg( currentFileURL.url() );
KMessageBox::sorry( 0, message, i18n( "Invalid URL" ) );
currentFileURL = "";
}
}
void ScriptBuilder::slotSaveAs() {
currentFileURL = "";
currentScriptName = "";
slotSave();
}
void ScriptBuilder::saveWarning() {
if ( UnsavedChanges ) {
TQString caption = i18n( "Save Changes to Script?" );
TQString message = i18n( "The current script has unsaved changes. Would you like to save before closing it?" );
int ans = KMessageBox::warningYesNoCancel( 0, message, caption, KStdGuiItem::save(), KStdGuiItem::discard() );
if ( ans == KMessageBox::Yes ) {
slotSave();
setUnsavedChanges( false );
} else if ( ans == KMessageBox::No ) {
setUnsavedChanges( false );
}
//Do nothing if 'cancel' selected
}
}
void ScriptBuilder::slotRunScript() {
//hide window while script runs
// If this is uncommented, the program hangs before the script is executed. Why?
// hide();
//Save current script to a temporary file, then execute that file.
//For some reason, I can't use KTempFile here! If I do, then the temporary script
//is not executable. Bizarre...
//KTempFile tmpfile;
//TQString fname = tmpfile.name();
TQString fname = locateLocal( "tmp", "kstars-tempscript" );
TQFile f( fname );
if ( f.exists() ) f.remove();
if ( !f.open( IO_WriteOnly) ) {
TQString message = i18n( "Could not open file %1." ).arg( f.name() );
KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
currentFileURL = "";
return;
}
TQTextStream ostream(&f);
writeScript( ostream );
f.close();
//set rwx for owner, rx for group, rx for other
chmod( f.name().ascii(), S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH );
TDEProcess p;
p << f.name();
if ( ! p.start( TDEProcess::DontCare ) )
kdDebug() << "Process did not start." << endl;
while ( p.isRunning() ) kapp->processEvents( 50 ); //otherwise tempfile may get deleted before script completes.
//delete temp file
if ( f.exists() ) f.remove();
//uncomment if 'hide()' is uncommented...
// show();
}
void ScriptBuilder::writeScript( TQTextStream &ostream ) {
TQString mainpre = "dcop $KSTARS $MAIN ";
TQString clockpre = "dcop $KSTARS $CLOCK ";
//Write script header
ostream << "#!/bin/bash" << endl;
ostream << "#KStars DCOP script: " << currentScriptName << endl;
ostream << "#by " << currentAuthor << endl;
ostream << "#last modified: " << KStarsDateTime::currentDateTime().toString() << endl;
ostream << "#" << endl;
ostream << "KSTARS=`dcopfind -a 'kstars*'`" << endl;
ostream << "MAIN=KStarsInterface" << endl;
ostream << "CLOCK=clock#1" << endl;
for ( ScriptFunction *sf = ScriptList.first(); sf; sf = ScriptList.next() )
{
if (!sf->valid()) continue;
if ( sf->isClockFunction() ) {
ostream << clockpre << sf->scriptLine() << endl;
} else {
ostream << mainpre << sf->scriptLine() << endl;
if (sb->AppendINDIWait->isChecked() && !sf->INDIProperty().isEmpty())
{
// Special case for telescope action, we need to know the parent property
if (sf->INDIProperty() == "CHECK")
{
if (sf->argVal(1) == "SLEW" || sf->argVal(1) == "TRACK" || sf->argVal(1) == "SYNC")
sf->setINDIProperty("ON_COORD_SET");
else if (sf->argVal(1) == "ABORT")
sf->setINDIProperty("ABORT_MOTION");
else
sf->setINDIProperty("PARK");
}
if ( sf->argVal(0).contains(" "))
ostream << mainpre << "waitForINDIAction " << "\"" << sf->argVal(0) << "\" " << sf->INDIProperty() << endl;
else
ostream << mainpre << "waitForINDIAction " << sf->argVal(0) << " " << sf->INDIProperty() << endl;
}
}
}
//Write script footer
ostream << "##" << endl;
}
void ScriptBuilder::readScript( TQTextStream &istream ) {
TQString line;
while ( ! istream.eof() ) {
line = istream.readLine();
//look for name of script
if ( line.contains( "#KStars DCOP script: " ) )
currentScriptName = line.mid( 21 ).stripWhiteSpace();
//look for author of scriptbuilder
if ( line.contains( "#by " ) )
currentAuthor = line.mid( 4 ).stripWhiteSpace();
//Actual script functions
if ( line.left(4) == "dcop" ) {
//is ClockFunction?
bool clockfcn( false );
if ( line.contains( "$CLOCK" ) ) clockfcn = true;
//remove leading dcop prefix
line = line.mid( 20 );
//construct a stringlist that is fcn name and its arg name/value pairs
TQStringList fn = TQStringList::split( " ", line );
if ( parseFunction( fn ) )
{
sb->ScriptListBox->insertItem( ScriptList.current()->name() );
// Initially, any read script is valid!
ScriptList.current()->setValid(true);
}
else kdWarning() << i18n( "Could not parse script. Line was: %1" ).arg( line ) << endl;
} // end if left(4) == "dcop"
} // end while !eof()
//Select first item in sb->ScriptListBox
if ( sb->ScriptListBox->count() ) {
sb->ScriptListBox->setCurrentItem( 0 );
slotArgWidget();
}
}
bool ScriptBuilder::parseFunction( TQStringList &fn )
{
// clean up the string list first if needed
// We need to perform this in case we havea quoted string "NGC 3000" because this will counted
// as two arguments, and it should be counted as one.
bool foundQuote(false), quoteProcessed(false);
TQString cur, arg;
TQStringList::iterator it;
for (it = fn.begin(); it != fn.end(); ++it)
{
cur = (*it);
if ( cur.startsWith("\""))
{
arg += cur.right(cur.length() - 1);
arg += " ";
foundQuote = true;
quoteProcessed = true;
}
else if (cur.endsWith("\""))
{
arg += cur.left(cur.length() -1);
arg += "'";
foundQuote = false;
}
else if (foundQuote)
{
arg += cur;
arg += " ";
}
else
{
arg += cur;
arg += "'";
}
}
if (quoteProcessed)
fn = TQStringList::split( "'", arg );
//loop over known functions to find a name match
for ( ScriptFunction *sf = KStarsFunctionList.first(); sf; sf = KStarsFunctionList.next() )
{
if ( fn[0] == sf->name() ) {
if ( fn[0] == "setGeoLocation" ) {
TQString city( fn[1] ), prov( "" ), cntry( fn[2] );
if ( fn.count() == 4 ) { prov = fn[2]; cntry = fn[3]; }
if ( fn.count() == 3 || fn.count() == 4 ) {
ScriptList.append( new ScriptFunction( sf ) );
ScriptList.current()->setArg( 0, city );
ScriptList.current()->setArg( 1, prov );
ScriptList.current()->setArg( 2, cntry );
} else return false;
} else if ( fn.count() != sf->numArgs() + 1 ) return false;
ScriptList.append( new ScriptFunction( sf ) );
for ( unsigned int i=0; i<sf->numArgs(); ++i )
ScriptList.current()->setArg( i, fn[i+1] );
return true;
}
for ( ScriptFunction *sf = INDIFunctionList.first(); sf; sf = INDIFunctionList.next() )
{
if ( fn[0] == sf->name() )
{
if ( fn.count() != sf->numArgs() + 1 ) return false;
ScriptList.append( new ScriptFunction( sf ) );
for ( unsigned int i=0; i<sf->numArgs(); ++i )
ScriptList.current()->setArg( i, fn[i+1] );
return true;
}
}
}
//if we get here, no function-name match was found
return false;
}
void ScriptBuilder::setUnsavedChanges( bool b ) {
UnsavedChanges = b;
sb->SaveButton->setEnabled( b );
sb->SaveAsButton->setEnabled( b );
}
void ScriptBuilder::slotEnableScriptNameOK() {
snd->OKButton->setEnabled( ! snd->ScriptName->text().isEmpty() );
}
void ScriptBuilder::slotCopyFunction() {
if ( ! UnsavedChanges ) setUnsavedChanges( true );
int Pos = sb->ScriptListBox->currentItem() + 1;
ScriptList.insert( Pos, new ScriptFunction( ScriptList.at( Pos-1 ) ) );
//copy ArgVals
for ( unsigned int i=0; i < ScriptList.at( Pos-1 )->numArgs(); ++i )
ScriptList.at(Pos)->setArg(i, ScriptList.at( Pos-1 )->argVal(i) );
sb->ScriptListBox->insertItem( ScriptList.current()->name(), Pos );
sb->ScriptListBox->setSelected( Pos, true );
}
void ScriptBuilder::slotRemoveFunction() {
setUnsavedChanges( true );
int Pos = sb->ScriptListBox->currentItem();
ScriptList.remove( Pos );
sb->ScriptListBox->removeItem( Pos );
if ( sb->ScriptListBox->count() == 0 ) {
sb->ArgStack->raiseWidget( argBlank );
sb->CopyButton->setEnabled( false );
sb->RemoveButton->setEnabled( false );
} else {
sb->ScriptListBox->setSelected( Pos, true );
}
}
void ScriptBuilder::slotAddFunction() {
ScriptFunction *sc = NULL;
TQListViewItem *currentItem = sb->FunctionListView->currentItem();
if ( currentItem == NULL || currentItem->depth() == 0)
return;
for (sc = KStarsFunctionList.first(); sc; sc = KStarsFunctionList.next())
if (sc->prototype() == currentItem->text(0))
break;
if (sc == NULL)
{
for (sc = INDIFunctionList.first(); sc; sc = INDIFunctionList.next())
if (sc->prototype() == currentItem->text(0))
break;
}
if (sc == NULL) return;
setUnsavedChanges( true );
int Pos = sb->ScriptListBox->currentItem() + 1;
ScriptList.insert( Pos, new ScriptFunction(sc) );
sb->ScriptListBox->insertItem( ScriptList.current()->name(), Pos );
sb->ScriptListBox->setSelected( Pos, true );
}
void ScriptBuilder::slotMoveFunctionUp() {
if ( sb->ScriptListBox->currentItem() > 0 ) {
setUnsavedChanges( true );
TQString t = sb->ScriptListBox->currentText();
unsigned int n = sb->ScriptListBox->currentItem();
ScriptFunction *tmp = ScriptList.take( n );
ScriptList.insert( n-1, tmp );
sb->ScriptListBox->removeItem( n );
sb->ScriptListBox->insertItem( t, n-1 );
sb->ScriptListBox->setSelected( n-1, true );
}
}
void ScriptBuilder::slotMoveFunctionDown() {
if ( sb->ScriptListBox->currentItem() > -1 &&
sb->ScriptListBox->currentItem() < ((int) sb->ScriptListBox->count())-1 ) {
setUnsavedChanges( true );
TQString t = sb->ScriptListBox->currentText();
unsigned int n = sb->ScriptListBox->currentItem();
ScriptFunction *tmp = ScriptList.take( n );
ScriptList.insert( n+1, tmp );
sb->ScriptListBox->removeItem( n );
sb->ScriptListBox->insertItem( t, n+1 );
sb->ScriptListBox->setSelected( n+1, true );
}
}
void ScriptBuilder::slotArgWidget() {
//First, setEnabled on buttons that act on the selected script function
if ( sb->ScriptListBox->currentItem() == -1 ) { //no selection
sb->CopyButton->setEnabled( false );
sb->RemoveButton->setEnabled( false );
sb->UpButton->setEnabled( false );
sb->DownButton->setEnabled( false );
} else if ( sb->ScriptListBox->count() == 1 ) { //only one item, so disable up/down buttons
sb->CopyButton->setEnabled( true );
sb->RemoveButton->setEnabled( true );
sb->UpButton->setEnabled( false );
sb->DownButton->setEnabled( false );
} else if ( sb->ScriptListBox->currentItem() == 0 ) { //first item selected
sb->CopyButton->setEnabled( true );
sb->RemoveButton->setEnabled( true );
sb->UpButton->setEnabled( false );
sb->DownButton->setEnabled( true );
} else if ( sb->ScriptListBox->currentItem() == ((int) sb->ScriptListBox->count())-1 ) { //last item selected
sb->CopyButton->setEnabled( true );
sb->RemoveButton->setEnabled( true );
sb->UpButton->setEnabled( true );
sb->DownButton->setEnabled( false );
} else { //other item selected
sb->CopyButton->setEnabled( true );
sb->RemoveButton->setEnabled( true );
sb->UpButton->setEnabled( true );
sb->DownButton->setEnabled( true );
}
//sb->RunButton enabled when script not empty.
if ( sb->ScriptListBox->count() ) {
sb->RunButton->setEnabled( true );
} else {
sb->RunButton->setEnabled( false );
setUnsavedChanges( false );
}
//Display the function's arguments widget
if ( sb->ScriptListBox->currentItem() > -1 &&
sb->ScriptListBox->currentItem() < ((int) sb->ScriptListBox->count()) ) {
TQString t = sb->ScriptListBox->currentText();
unsigned int n = sb->ScriptListBox->currentItem();
ScriptFunction *sf = ScriptList.at( n );
if ( sf->name() == "lookTowards" ) {
sb->ArgStack->raiseWidget( argLookToward );
TQString s = sf->argVal(0);
argLookToward->FocusEdit->setCurrentText( s );
} else if ( sf->name() == "setRaDec" ) {
bool ok(false);
double r(0.0),d(0.0);
dms ra(0.0);
sb->ArgStack->raiseWidget( argSetRaDec );
ok = !sf->argVal(0).isEmpty();
if (ok) r = sf->argVal(0).toDouble(&ok);
else argSetRaDec->RaBox->clear();
if (ok) { ra.setH(r); argSetRaDec->RaBox->showInHours( ra ); }
ok = !sf->argVal(1).isEmpty();
if (ok) d = sf->argVal(1).toDouble(&ok);
else argSetRaDec->DecBox->clear();
if (ok) argSetRaDec->DecBox->showInDegrees( dms(d) );
} else if ( sf->name() == "setAltAz" ) {
bool ok(false);
double x(0.0),y(0.0);
sb->ArgStack->raiseWidget( argSetAltAz );
ok = !sf->argVal(0).isEmpty();
if (ok) y = sf->argVal(0).toDouble(&ok);
else argSetAltAz->AzBox->clear();
if (ok) argSetAltAz->AltBox->showInDegrees( dms(y) );
else argSetAltAz->AltBox->clear();
ok = !sf->argVal(1).isEmpty();
x = sf->argVal(1).toDouble(&ok);
if (ok) argSetAltAz->AzBox->showInDegrees( dms(x) );
} else if ( sf->name() == "zoomIn" ) {
sb->ArgStack->raiseWidget( argBlank );
//no Args
} else if ( sf->name() == "zoomOut" ) {
sb->ArgStack->raiseWidget( argBlank );
//no Args
} else if ( sf->name() == "defaultZoom" ) {
sb->ArgStack->raiseWidget( argBlank );
//no Args
} else if ( sf->name() == "zoom" ) {
sb->ArgStack->raiseWidget( argZoom );
bool ok(false);
/*double z = */sf->argVal(0).toDouble(&ok);
if (ok) argZoom->ZoomBox->setText( sf->argVal(0) );
else argZoom->ZoomBox->setText( "2000." );
} else if ( sf->name() == "exportImage" ) {
sb->ArgStack->raiseWidget( argExportImage );
argExportImage->ExportFileName->setURL( sf->argVal(0) );
bool ok(false);
int w, h;
w = sf->argVal(1).toInt( &ok );
if (ok) h = sf->argVal(2).toInt( &ok );
if (ok) {
argExportImage->ExportWidth->setValue( w );
argExportImage->ExportHeight->setValue( h );
} else {
argExportImage->ExportWidth->setValue( ks->map()->width() );
argExportImage->ExportHeight->setValue( ks->map()->height() );
}
} else if ( sf->name() == "printImage" ) {
if ( sf->argVal(0) == i18n( "true" ) ) argPrintImage->UsePrintDialog->setChecked( true );
else argPrintImage->UsePrintDialog->setChecked( false );
if ( sf->argVal(1) == i18n( "true" ) ) argPrintImage->UseChartColors->setChecked( true );
else argPrintImage->UseChartColors->setChecked( false );
} else if ( sf->name() == "setLocalTime" ) {
sb->ArgStack->raiseWidget( argSetLocalTime );
bool ok(false);
int year, month, day, hour, min, sec;
year = sf->argVal(0).toInt(&ok);
if (ok) month = sf->argVal(1).toInt(&ok);
if (ok) day = sf->argVal(2).toInt(&ok);
if (ok) argSetLocalTime->DateBox->setDate( ExtDate( year, month, day ) );
else argSetLocalTime->DateBox->setDate( ExtDate::currentDate() );
hour = sf->argVal(3).toInt(&ok);
if ( sf->argVal(3).isEmpty() ) ok = false;
if (ok) min = sf->argVal(4).toInt(&ok);
if (ok) sec = sf->argVal(5).toInt(&ok);
if (ok) argSetLocalTime->TimeBox->setTime( TQTime( hour, min, sec ) );
else argSetLocalTime->TimeBox->setTime( TQTime( TQTime::currentTime() ) );
} else if ( sf->name() == "waitFor" ) {
sb->ArgStack->raiseWidget( argWaitFor );
bool ok(false);
int sec = sf->argVal(0).toInt(&ok);
if (ok) argWaitFor->DelayBox->setValue( sec );
else argWaitFor->DelayBox->setValue( 0 );
} else if ( sf->name() == "waitForKey" ) {
sb->ArgStack->raiseWidget( argWaitForKey );
if ( sf->argVal(0).length()==1 || sf->argVal(0).lower() == "space" )
argWaitForKey->WaitKeyEdit->setText( sf->argVal(0) );
else argWaitForKey->WaitKeyEdit->setText( "" );
} else if ( sf->name() == "setTracking" ) {
sb->ArgStack->raiseWidget( argSetTracking );
if ( sf->argVal(0) == i18n( "true" ) ) argSetTracking->CheckTrack->setChecked( true );
else argSetTracking->CheckTrack->setChecked( false );
} else if ( sf->name() == "changeViewOption" ) {
sb->ArgStack->raiseWidget( argChangeViewOption );
//find argVal(0) in the combobox...if it isn't there, it will select nothing
argChangeViewOption->OptionName->setCurrentItem( sf->argVal(0) );
argChangeViewOption->OptionValue->setText( sf->argVal(1) );
} else if ( sf->name() == "setGeoLocation" ) {
sb->ArgStack->raiseWidget( argSetGeoLocation );
argSetGeoLocation->CityName->setText( sf->argVal(0) );
argSetGeoLocation->ProvinceName->setText( sf->argVal(1) );
argSetGeoLocation->CountryName->setText( sf->argVal(2) );
} else if ( sf->name() == "setColor" ) {
sb->ArgStack->raiseWidget( argSetColor );
if ( sf->argVal(0).isEmpty() ) sf->setArg( 0, "SkyColor" ); //initialize default value
argSetColor->ColorName->setCurrentItem( ks->data()->colorScheme()->nameFromKey( sf->argVal(0) ) );
argSetColor->ColorValue->setColor( TQColor( sf->argVal(1).remove('\\') ) );
} else if ( sf->name() == "loadColorScheme" ) {
sb->ArgStack->raiseWidget( argLoadColorScheme );
argLoadColorScheme->SchemeList->setCurrentItem( argLoadColorScheme->SchemeList->findItem( sf->argVal(0).remove('\"'), 0 ) );
} else if ( sf->name() == "stop" ) {
sb->ArgStack->raiseWidget( argBlank );
//no Args
} else if ( sf->name() == "start" ) {
sb->ArgStack->raiseWidget( argBlank );
//no Args
} else if ( sf->name() == "setClockScale" ) {
sb->ArgStack->raiseWidget( argTimeScale );
bool ok(false);
double ts = sf->argVal(0).toDouble(&ok);
if (ok) argTimeScale->TimeScale->tsbox()->changeScale( float(ts) );
else argTimeScale->TimeScale->tsbox()->changeScale( 0.0 );
}
else if (sf->name() == "startINDI") {
sb->ArgStack->raiseWidget( argStartINDI);
argStartINDI->deviceName->setText(sf->argVal(0));
if (sf->argVal(1) == "true")
argStartINDI->LocalButton->setChecked(true);
else if (! sf->argVal(1).isEmpty())
argStartINDI->LocalButton->setChecked(false);
}
else if (sf->name() == "shutdownINDI") {
sb->ArgStack->raiseWidget( argShutdownINDI);
//if (sf->valid()) kdDebug() << "begin: shutdown is valid" << endl;
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argShutdownINDI->deviceName->setText(sf->argVal(0));
else if (argShutdownINDI->deviceName->text().isEmpty() || sf->argVal(0).isEmpty())
argShutdownINDI->deviceName->setText(lastINDIDeviceName);
else
slotINDIShutdown();
}
else argShutdownINDI->deviceName->setText(sf->argVal(0));
//if (sf->valid()) kdDebug() << "end: shutdown is valid" << endl;
}
else if (sf->name() == "switchINDI") {
sb->ArgStack->raiseWidget( argSwitchINDI);
if (sf->argVal(1) == "true" || sf->argVal(1).isEmpty())
argSwitchINDI->OnButton->setChecked(true);
else
argSwitchINDI->OffButton->setChecked(true);
argSwitchINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSwitchINDI->deviceName->setText(sf->argVal(0));
else
argSwitchINDI->deviceName->setText(lastINDIDeviceName);
}
else argSwitchINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIPort") {
sb->ArgStack->raiseWidget( argSetPortINDI);
argSetPortINDI->devicePort->setText(sf->argVal(1));
argSetPortINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetPortINDI->deviceName->setText(sf->argVal(0));
else
argSetPortINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetPortINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDITargetCoord") {
bool ok(false);
double r(0.0),d(0.0);
dms ra(0.0);
sb->ArgStack->raiseWidget( argSetTargetCoordINDI);
ok = !sf->argVal(1).isEmpty();
if (ok) r = sf->argVal(1).toDouble(&ok);
else argSetTargetCoordINDI->RaBox->clear();
if (ok) { ra.setH(r); argSetTargetCoordINDI->RaBox->showInHours( ra ); }
ok = !sf->argVal(2).isEmpty();
if (ok) d = sf->argVal(2).toDouble(&ok);
else argSetTargetCoordINDI->DecBox->clear();
if (ok) argSetTargetCoordINDI->DecBox->showInDegrees( dms(d) );
argSetTargetCoordINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetTargetCoordINDI->deviceName->setText(sf->argVal(0));
else
argSetTargetCoordINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetTargetCoordINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDITargetName") {
sb->ArgStack->raiseWidget( argSetTargetNameINDI);
argSetTargetNameINDI->objectName->setText(sf->argVal(1));
argSetTargetNameINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetTargetNameINDI->deviceName->setText(sf->argVal(0));
else
argSetTargetNameINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetTargetNameINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIAction") {
sb->ArgStack->raiseWidget( argSetActionINDI);
argSetActionINDI->actionName->setText(sf->argVal(1));
argSetActionINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetActionINDI->deviceName->setText(sf->argVal(0));
else
argSetActionINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetActionINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "waitForINDIAction") {
sb->ArgStack->raiseWidget( argWaitForActionINDI);
argWaitForActionINDI->actionName->setText(sf->argVal(1));
argWaitForActionINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argWaitForActionINDI->deviceName->setText(sf->argVal(0));
else
argWaitForActionINDI->deviceName->setText(lastINDIDeviceName);
}
else argWaitForActionINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIFocusSpeed") {
int t(0);
bool ok(false);
sb->ArgStack->raiseWidget( argSetFocusSpeedINDI);
t = sf->argVal(1).toInt(&ok);
if (ok) argSetFocusSpeedINDI->speedIN->setValue(t);
else argSetFocusSpeedINDI->speedIN->setValue(0);
argSetFocusSpeedINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetFocusSpeedINDI->deviceName->setText(sf->argVal(0));
else
argSetFocusSpeedINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetFocusSpeedINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "startINDIFocus") {
sb->ArgStack->raiseWidget( argStartFocusINDI);
bool itemSet(false);
for (int i=0; i < argStartFocusINDI->directionCombo->count(); i++)
{
if (argStartFocusINDI->directionCombo->text(i) == sf->argVal(1))
{
argStartFocusINDI->directionCombo->setCurrentItem(i);
itemSet = true;
break;
}
}
if (!itemSet) argStartFocusINDI->directionCombo->setCurrentItem(0);
argStartFocusINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argStartFocusINDI->deviceName->setText(sf->argVal(0));
else
argStartFocusINDI->deviceName->setText(lastINDIDeviceName);
}
else argStartFocusINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIFocusTimeout") {
int t(0);
bool ok(false);
sb->ArgStack->raiseWidget( argSetFocusTimeoutINDI);
t = sf->argVal(1).toInt(&ok);
if (ok) argSetFocusTimeoutINDI->timeOut->setValue(t);
else argSetFocusTimeoutINDI->timeOut->setValue(0);
argSetFocusTimeoutINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetFocusTimeoutINDI->deviceName->setText(sf->argVal(0));
else
argSetFocusTimeoutINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetFocusTimeoutINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIGeoLocation") {
bool ok(false);
double lo(0.0),la(0.0);
sb->ArgStack->raiseWidget( argSetGeoLocationINDI);
ok = !sf->argVal(1).isEmpty();
if (ok) lo = sf->argVal(1).toDouble(&ok);
else argSetGeoLocationINDI->longBox->clear();
if (ok) { argSetGeoLocationINDI->longBox->showInDegrees( dms(lo) ); }
ok = !sf->argVal(2).isEmpty();
if (ok) la = sf->argVal(2).toDouble(&ok);
else argSetGeoLocationINDI->latBox->clear();
if (ok) argSetGeoLocationINDI->latBox->showInDegrees( dms(la) );
argSetGeoLocationINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetGeoLocationINDI->deviceName->setText(sf->argVal(0));
else
argSetGeoLocationINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetGeoLocationINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "startINDIExposure") {
int t(0);
bool ok(false);
sb->ArgStack->raiseWidget( argStartExposureINDI);
t = sf->argVal(1).toInt(&ok);
if (ok) argStartExposureINDI->timeOut->setValue(t);
else argStartExposureINDI->timeOut->setValue(0);
argStartExposureINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argStartExposureINDI->deviceName->setText(sf->argVal(0));
else
argStartExposureINDI->deviceName->setText(lastINDIDeviceName);
}
else argStartExposureINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIUTC") {
sb->ArgStack->raiseWidget( argSetUTCINDI);
argSetUTCINDI->UTC->setText(sf->argVal(1));
argSetUTCINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetUTCINDI->deviceName->setText(sf->argVal(0));
else
argSetUTCINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetUTCINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIScopeAction") {
sb->ArgStack->raiseWidget( argSetScopeActionINDI);
bool itemSet(false);
for (int i=0; i < argSetScopeActionINDI->actionCombo->count(); i++)
{
if (argSetScopeActionINDI->actionCombo->text(i) == sf->argVal(1))
{
argSetScopeActionINDI->actionCombo->setCurrentItem(i);
itemSet = true;
break;
}
}
if (!itemSet) argSetScopeActionINDI->actionCombo->setCurrentItem(0);
argSetScopeActionINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetScopeActionINDI->deviceName->setText(sf->argVal(0));
else
argSetScopeActionINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetScopeActionINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIFrameType") {
sb->ArgStack->raiseWidget( argSetFrameTypeINDI);
bool itemSet(false);
for (int i=0; i < argSetFrameTypeINDI->typeCombo->count(); i++)
{
if (argSetFrameTypeINDI->typeCombo->text(i) == sf->argVal(1))
{
argSetFrameTypeINDI->typeCombo->setCurrentItem(i);
itemSet = true;
break;
}
}
if (!itemSet) argSetFrameTypeINDI->typeCombo->setCurrentItem(0);
argSetFrameTypeINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetFrameTypeINDI->deviceName->setText(sf->argVal(0));
else
argSetFrameTypeINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetFrameTypeINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDICCDTemp") {
int t(0);
bool ok(false);
sb->ArgStack->raiseWidget( argSetCCDTempINDI);
t = sf->argVal(1).toInt(&ok);
if (ok) argSetCCDTempINDI->temp->setValue(t);
else argSetCCDTempINDI->temp->setValue(0);
argSetCCDTempINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetCCDTempINDI->deviceName->setText(sf->argVal(0));
else
argSetCCDTempINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetCCDTempINDI->deviceName->setText(sf->argVal(0));
}
else if (sf->name() == "setINDIFilterNum") {
int t(0);
bool ok(false);
sb->ArgStack->raiseWidget( argSetFilterNumINDI);
t = sf->argVal(1).toInt(&ok);
if (ok) argSetFilterNumINDI->filter_num->setValue(t);
else argSetFilterNumINDI->filter_num->setValue(0);
argSetFilterNumINDI->deviceName->clear();
if (sb->ReuseINDIDeviceName->isChecked())
{
if (!sf->argVal(0).isEmpty())
argSetFilterNumINDI->deviceName->setText(sf->argVal(0));
else
argSetFilterNumINDI->deviceName->setText(lastINDIDeviceName);
}
else argSetFilterNumINDI->deviceName->setText(sf->argVal(0));
}
}
}
void ScriptBuilder::slotShowDoc() {
ScriptFunction *sc = NULL;
TQListViewItem *currentItem = sb->FunctionListView->currentItem();
if ( currentItem == NULL || currentItem->depth() == 0)
return;
for (sc = KStarsFunctionList.first(); sc; sc = KStarsFunctionList.next())
if (sc->prototype() == currentItem->text(0))
break;
if (sc == NULL)
{
for (sc = INDIFunctionList.first(); sc; sc = INDIFunctionList.next())
if (sc->prototype() == currentItem->text(0))
break;
}
if (sc == NULL)
{
sb->AddButton->setEnabled( false );
kdWarning() << i18n( "Function index out of bounds." ) << endl;
return;
}
sb->AddButton->setEnabled( true );
sb->FuncDoc->setText( sc->description() );
}
//Slots for Arg Widgets
void ScriptBuilder::slotFindCity() {
LocationDialog ld( ks );
if ( ld.exec() == TQDialog::Accepted ) {
if ( ld.selectedCity() ) {
// set new location names
argSetGeoLocation->CityName->setText( ld.selectedCityName() );
argSetGeoLocation->ProvinceName->setText( ld.selectedProvinceName() );
argSetGeoLocation->CountryName->setText( ld.selectedCountryName() );
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setGeoLocation" ) {
setUnsavedChanges( true );
sf->setArg( 0, ld.selectedCityName() );
sf->setArg( 1, ld.selectedProvinceName() );
sf->setArg( 2, ld.selectedCountryName() );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setGeoLocation" ) << endl;
}
}
}
}
void ScriptBuilder::slotFindObject() {
FindDialog fd( ks );
if ( fd.exec() == TQDialog::Accepted && fd.currentItem() ) {
setUnsavedChanges( true );
argLookToward->FocusEdit->setCurrentText( fd.currentItem()->objName()->text() );
}
}
void ScriptBuilder::slotINDIFindObject() {
FindDialog fd( ks );
if ( fd.exec() == TQDialog::Accepted && fd.currentItem() ) {
setUnsavedChanges( true );
argSetTargetNameINDI->objectName->setText( fd.currentItem()->objName()->text() );
}
}
void ScriptBuilder::slotINDIWaitCheck(bool /*toggleState*/)
{
setUnsavedChanges(true);
}
void ScriptBuilder::slotShowOptions() {
//Show tree-view of view options
if ( otv->exec() == TQDialog::Accepted ) {
argChangeViewOption->OptionName->setCurrentItem( otv->OptionsList->currentItem()->text(0) );
}
}
void ScriptBuilder::slotLookToward() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "lookTowards" ) {
setUnsavedChanges( true );
sf->setArg( 0, argLookToward->FocusEdit->currentText() );
sf->setValid(true);
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "lookTowards" ) << endl;
}
}
void ScriptBuilder::slotRa() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setRaDec" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetRaDec->RaBox->text().isEmpty() ) return;
bool ok(false);
dms ra = argSetRaDec->RaBox->createDms(false, &ok);
if ( ok ) {
setUnsavedChanges( true );
sf->setArg( 0, TQString( "%1" ).arg( ra.Hours() ) );
if ( ! sf->argVal(1).isEmpty() ) sf->setValid( true );
} else {
sf->setArg( 0, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setRaDec" ) << endl;
}
}
void ScriptBuilder::slotDec() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setRaDec" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetRaDec->DecBox->text().isEmpty() ) return;
bool ok(false);
dms dec = argSetRaDec->DecBox->createDms(true, &ok);
if ( ok ) {
setUnsavedChanges( true );
sf->setArg( 1, TQString( "%1" ).arg( dec.Degrees() ) );
if ( ! sf->argVal(0).isEmpty() ) sf->setValid( true );
} else {
sf->setArg( 1, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setRaDec" ) << endl;
}
}
void ScriptBuilder::slotAz() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setAltAz" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetAltAz->AzBox->text().isEmpty() ) return;
bool ok(false);
dms az = argSetAltAz->AzBox->createDms(true, &ok);
if ( ok ) {
setUnsavedChanges( true );
sf->setArg( 1, TQString( "%1" ).arg( az.Degrees() ) );
if ( ! sf->argVal(0).isEmpty() ) sf->setValid( true );
} else {
sf->setArg( 1, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setAltAz" ) << endl;
}
}
void ScriptBuilder::slotAlt() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setAltAz" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetAltAz->AltBox->text().isEmpty() ) return;
bool ok(false);
dms alt = argSetAltAz->AltBox->createDms(true, &ok);
if ( ok ) {
setUnsavedChanges( true );
sf->setArg( 0, TQString( "%1" ).arg( alt.Degrees() ) );
if ( ! sf->argVal(1).isEmpty() ) sf->setValid( true );
} else {
sf->setArg( 0, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setAltAz" ) << endl;
}
}
void ScriptBuilder::slotChangeDate() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setLocalTime" ) {
setUnsavedChanges( true );
ExtDate date = argSetLocalTime->DateBox->date();
sf->setArg( 0, TQString( "%1" ).arg( date.year() ) );
sf->setArg( 1, TQString( "%1" ).arg( date.month() ) );
sf->setArg( 2, TQString( "%1" ).arg( date.day() ) );
if ( ! sf->argVal(3).isEmpty() ) sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setLocalTime" ) << endl;
}
}
void ScriptBuilder::slotChangeTime() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setLocalTime" ) {
setUnsavedChanges( true );
TQTime time = argSetLocalTime->TimeBox->time();
sf->setArg( 3, TQString( "%1" ).arg( time.hour() ) );
sf->setArg( 4, TQString( "%1" ).arg( time.minute() ) );
sf->setArg( 5, TQString( "%1" ).arg( time.second() ) );
if ( ! sf->argVal(0).isEmpty() ) sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setLocalTime" ) << endl;
}
}
void ScriptBuilder::slotWaitFor() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "waitFor" ) {
bool ok(false);
int delay = argWaitFor->DelayBox->text().toInt( &ok );
if ( ok ) {
setUnsavedChanges( true );
sf->setArg( 0, TQString( "%1" ).arg( delay ) );
sf->setValid( true );
} else {
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "waitFor" ) << endl;
}
}
void ScriptBuilder::slotWaitForKey() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "waitForKey" ) {
TQString sKey = argWaitForKey->WaitKeyEdit->text().stripWhiteSpace();
//DCOP script can only use single keystrokes; make sure entry is either one character,
//or the word 'space'
if ( sKey.length() == 1 || sKey == "space" ) {
setUnsavedChanges( true );
sf->setArg( 0, sKey );
sf->setValid( true );
} else {
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "waitForKey" ) << endl;
}
}
void ScriptBuilder::slotTracking() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setTracking" ) {
setUnsavedChanges( true );
sf->setArg( 0, ( argSetTracking->CheckTrack->isChecked() ? i18n( "true" ) : i18n( "false" ) ) );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setTracking" ) << endl;
}
}
void ScriptBuilder::slotViewOption() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "changeViewOption" ) {
if ( argChangeViewOption->OptionName->currentItem() >= 0
&& argChangeViewOption->OptionValue->text().length() ) {
setUnsavedChanges( true );
sf->setArg( 0, argChangeViewOption->OptionName->currentText() );
sf->setArg( 1, argChangeViewOption->OptionValue->text() );
sf->setValid( true );
} else {
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "changeViewOption" ) << endl;
}
}
void ScriptBuilder::slotChangeCity() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setGeoLocation" ) {
TQString city = argSetGeoLocation->CityName->text();
if ( city.length() ) {
setUnsavedChanges( true );
sf->setArg( 0, city );
if ( sf->argVal(2).length() ) sf->setValid( true );
} else {
sf->setArg( 0, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotChangeProvince() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setGeoLocation" ) {
TQString province = argSetGeoLocation->ProvinceName->text();
if ( province.length() ) {
setUnsavedChanges( true );
sf->setArg( 1, province );
if ( sf->argVal(0).length() && sf->argVal(2).length() ) sf->setValid( true );
} else {
sf->setArg( 1, "" );
//might not be invalid
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotChangeCountry() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setGeoLocation" ) {
TQString country = argSetGeoLocation->CountryName->text();
if ( country.length() ) {
setUnsavedChanges( true );
sf->setArg( 2, country );
if ( sf->argVal(0).length() ) sf->setValid( true );
} else {
sf->setArg( 2, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotTimeScale() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setClockScale" ) {
setUnsavedChanges( true );
sf->setArg( 0, TQString( "%1" ).arg( argTimeScale->TimeScale->tsbox()->timeScale() ) );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setClockScale" ) << endl;
}
}
void ScriptBuilder::slotZoom() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "zoom" ) {
setUnsavedChanges( true );
bool ok(false);
argZoom->ZoomBox->text().toDouble(&ok);
if ( ok ) {
sf->setArg( 0, argZoom->ZoomBox->text() );
sf->setValid( true );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "zoom" ) << endl;
}
}
void ScriptBuilder::slotExportImage() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "exportImage" ) {
setUnsavedChanges( true );
sf->setArg( 0, argExportImage->ExportFileName->url() );
sf->setArg( 1, TQString("%1").arg( argExportImage->ExportWidth->value() ) );
sf->setArg( 2, TQString("%1").arg( argExportImage->ExportHeight->value() ) );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "exportImage" ) << endl;
}
}
void ScriptBuilder::slotPrintImage() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "printImage" ) {
setUnsavedChanges( true );
sf->setArg( 0, ( argPrintImage->UsePrintDialog->isChecked() ? i18n( "true" ) : i18n( "false" ) ) );
sf->setArg( 1, ( argPrintImage->UseChartColors->isChecked() ? i18n( "true" ) : i18n( "false" ) ) );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "exportImage" ) << endl;
}
}
void ScriptBuilder::slotChangeColorName() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setColor" ) {
setUnsavedChanges( true );
argSetColor->ColorValue->setColor( ks->data()->colorScheme()->colorAt( argSetColor->ColorName->currentItem() ) );
sf->setArg( 0, ks->data()->colorScheme()->keyAt( argSetColor->ColorName->currentItem() ) );
TQString cname( argSetColor->ColorValue->color().name() );
if ( cname.at(0) == '#' ) cname = "\\" + cname; //prepend a "\" so bash doesn't think we have a comment
sf->setArg( 1, cname );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setColor" ) << endl;
}
}
void ScriptBuilder::slotChangeColor() {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setColor" ) {
setUnsavedChanges( true );
sf->setArg( 0, ks->data()->colorScheme()->keyAt( argSetColor->ColorName->currentItem() ) );
TQString cname( argSetColor->ColorValue->color().name() );
if ( cname.at(0) == '#' ) cname = "\\" + cname; //prepend a "\" so bash doesn't think we have a comment
sf->setArg( 1, cname );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setColor" ) << endl;
}
}
void ScriptBuilder::slotLoadColorScheme(TQListBoxItem */*i*/) {
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "loadColorScheme" ) {
setUnsavedChanges( true );
sf->setArg( 0, "\"" + argLoadColorScheme->SchemeList->currentText() + "\"" );
sf->setValid( true );
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "loadColorScheme" ) << endl;
}
}
void ScriptBuilder::slotClose() {
saveWarning();
if ( !UnsavedChanges ) {
emit closeClicked();
reject();
}
}
void ScriptBuilder::slotINDIStartDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDI" )
{
setUnsavedChanges( true );
lastINDIDeviceName = argStartINDI->deviceName->text();
sf->setArg(0, lastINDIDeviceName);
sf->setArg(1, argStartINDI->LocalButton->isChecked() ? "true" : "false");
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "startINDI" ) << endl;
}
}
void ScriptBuilder::slotINDIStartDeviceMode()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDI" )
{
setUnsavedChanges( true );
sf->setArg(1, argStartINDI->LocalButton->isChecked() ? "true" : "false");
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "startINDI" ) << endl;
}
}
void ScriptBuilder::slotINDIShutdown()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "shutdownINDI" )
{
if (argShutdownINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argShutdownINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argShutdownINDI->deviceName->text());
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "shutdownINDI" ) << endl;
}
}
void ScriptBuilder::slotINDISwitchDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "switchINDI" )
{
if (argSwitchINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSwitchINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSwitchINDI->deviceName->text());
sf->setArg(1, argSwitchINDI->OnButton->isChecked() ? "true" : "false");
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "switchdownINDI" ) << endl;
}
}
void ScriptBuilder::slotINDISwitchDeviceConnection()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "switchINDI" )
{
if (sf->argVal(1) != (argSwitchINDI->OnButton->isChecked() ? "true" : "false"))
setUnsavedChanges( true );
sf->setArg(1, argSwitchINDI->OnButton->isChecked() ? "true" : "false");
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "switchINDI" ) << endl;
}
}
void ScriptBuilder::slotINDISetPortDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIPort" )
{
if (argSetPortINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetPortINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetPortINDI->deviceName->text());
if (! sf->argVal(1).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIPort" ) << endl;
}
}
void ScriptBuilder::slotINDISetPortDevicePort()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIPort" )
{
if (argSetPortINDI->devicePort->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(1) != argSetPortINDI->devicePort->text())
setUnsavedChanges( true );
sf->setArg(1, argSetPortINDI->devicePort->text());
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIPort" ) << endl;
}
}
void ScriptBuilder::slotINDISetTargetCoordDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDITargetCoord" )
{
if (argSetTargetCoordINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetTargetCoordINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetTargetCoordINDI->deviceName->text());
if ((! sf->argVal(1).isEmpty()) && (! sf->argVal(2).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDITargetCoord" ) << endl;
}
}
void ScriptBuilder::slotINDISetTargetCoordDeviceRA()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDITargetCoord" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetTargetCoordINDI->RaBox->text().isEmpty() )
{
sf->setValid(false);
return;
}
bool ok(false);
dms ra = argSetTargetCoordINDI->RaBox->createDms(false, &ok);
if ( ok ) {
if (sf->argVal(1) != TQString( "%1" ).arg( ra.Hours() ))
setUnsavedChanges( true );
sf->setArg( 1, TQString( "%1" ).arg( ra.Hours() ) );
if ( ( ! sf->argVal(0).isEmpty() ) && ( ! sf->argVal(2).isEmpty() )) sf->setValid( true );
else sf->setValid(false);
} else {
sf->setArg( 1, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDITargetCoord" ) << endl;
}
}
void ScriptBuilder::slotINDISetTargetCoordDeviceDEC()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDITargetCoord" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetTargetCoordINDI->DecBox->text().isEmpty() )
{
sf->setValid(false);
return;
}
bool ok(false);
dms dec = argSetTargetCoordINDI->DecBox->createDms(true, &ok);
if ( ok ) {
if (sf->argVal(2) != TQString( "%1" ).arg( dec.Degrees() ))
setUnsavedChanges( true );
sf->setArg( 2, TQString( "%1" ).arg( dec.Degrees() ) );
if ( ( ! sf->argVal(0).isEmpty() ) && ( ! sf->argVal(1).isEmpty() )) sf->setValid( true );
else sf->setValid(false);
} else {
sf->setArg( 2, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDITargetCoord" ) << endl;
}
}
void ScriptBuilder::slotINDISetTargetNameDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDITargetName" )
{
if (argSetTargetNameINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetTargetNameINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetTargetNameINDI->deviceName->text());
if ((! sf->argVal(1).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDITargetName" ) << endl;
}
}
void ScriptBuilder::slotINDISetTargetNameObjectName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDITargetName" )
{
if (argSetTargetNameINDI->objectName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(1) != argSetTargetNameINDI->objectName->text())
setUnsavedChanges( true );
sf->setArg(1, argSetTargetNameINDI->objectName->text());
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDITargetName" ) << endl;
}
}
void ScriptBuilder::slotINDISetActionDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIAction" )
{
if (argSetActionINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetActionINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetActionINDI->deviceName->text());
if ((! sf->argVal(1).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIAction") << endl;
}
}
void ScriptBuilder::slotINDISetActionName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIAction" )
{
if (argSetActionINDI->actionName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(1) != argSetActionINDI->actionName->text())
setUnsavedChanges( true );
sf->setArg(1, argSetActionINDI->actionName->text());
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIAction") << endl;
}
}
void ScriptBuilder::slotINDIWaitForActionDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "waitForINDIAction" )
{
if (argWaitForActionINDI->deviceName->text().isEmpty())
{
return;
sf->setValid(false);
}
if (sf->argVal(0) != argWaitForActionINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argWaitForActionINDI->deviceName->text());
if ((! sf->argVal(1).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "waitForINDIAction") << endl;
}
}
void ScriptBuilder::slotINDIWaitForActionName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "waitForINDIAction" )
{
if (argWaitForActionINDI->actionName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(1) != argWaitForActionINDI->actionName->text())
setUnsavedChanges( true );
sf->setArg(1, argWaitForActionINDI->actionName->text());
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "waitForINDIAction") << endl;
}
}
void ScriptBuilder::slotINDISetFocusSpeedDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFocusSpeed" )
{
if (argSetFocusSpeedINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetFocusSpeedINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetFocusSpeedINDI->deviceName->text());
sf->setArg(1, TQString("%1").arg(argSetFocusSpeedINDI->speedIN->value()));
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFocusSpeed") << endl;
}
}
void ScriptBuilder::slotINDISetFocusSpeed()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFocusSpeed" )
{
if (sf->argVal(1).toInt() != argSetFocusSpeedINDI->speedIN->value())
setUnsavedChanges( true );
sf->setArg(1, TQString("%1").arg(argSetFocusSpeedINDI->speedIN->value()));
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFocusSpeed") << endl;
}
}
void ScriptBuilder::slotINDIStartFocusDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDIFocus" )
{
if (argStartFocusINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argStartFocusINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argStartFocusINDI->deviceName->text());
sf->setArg(1, argStartFocusINDI->directionCombo->currentText());
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "StartINDIFocus") << endl;
}
}
void ScriptBuilder::slotINDIStartFocusDirection()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDIFocus" )
{
if (sf->argVal(1) != argStartFocusINDI->directionCombo->currentText())
setUnsavedChanges( true );
sf->setArg(1, argStartFocusINDI->directionCombo->currentText());
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "startINDIFocus") << endl;
}
}
void ScriptBuilder::slotINDISetFocusTimeoutDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFocusTimeout" )
{
if (argSetFocusTimeoutINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetFocusTimeoutINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetFocusTimeoutINDI->deviceName->text());
sf->setArg(1, TQString("%1").arg(argSetFocusTimeoutINDI->timeOut->value()));
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFocusTimeout") << endl;
}
}
void ScriptBuilder::slotINDISetFocusTimeout()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFocusTimeout" )
{
if (sf->argVal(1).toInt() != argSetFocusTimeoutINDI->timeOut->value())
setUnsavedChanges( true );
sf->setArg(1, TQString("%1").arg(argSetFocusTimeoutINDI->timeOut->value()));
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFocusTimeout") << endl;
}
}
void ScriptBuilder::slotINDISetGeoLocationDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIGeoLocation" )
{
if (argSetGeoLocationINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetGeoLocationINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetGeoLocationINDI->deviceName->text());
if ((! sf->argVal(1).isEmpty()) && (! sf->argVal(2).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotINDISetGeoLocationDeviceLong()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIGeoLocation" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetGeoLocationINDI->longBox->text().isEmpty())
{
sf->setValid(false);
return;
}
bool ok(false);
dms longitude = argSetGeoLocationINDI->longBox->createDms(true, &ok);
if ( ok ) {
if (sf->argVal(1) != TQString( "%1" ).arg( longitude.Degrees()))
setUnsavedChanges( true );
sf->setArg( 1, TQString( "%1" ).arg( longitude.Degrees() ) );
if ( ( ! sf->argVal(0).isEmpty() ) && ( ! sf->argVal(2).isEmpty() )) sf->setValid( true );
else sf->setValid(false);
} else {
sf->setArg( 1, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotINDISetGeoLocationDeviceLat()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIGeoLocation" ) {
//do nothing if box is blank (because we could be clearing boxes while switcing argWidgets)
if ( argSetGeoLocationINDI->latBox->text().isEmpty() )
{
sf->setValid(false);
return;
}
bool ok(false);
dms latitude = argSetGeoLocationINDI->latBox->createDms(true, &ok);
if ( ok ) {
if (sf->argVal(2) != TQString( "%1" ).arg( latitude.Degrees()))
setUnsavedChanges( true );
sf->setArg( 2, TQString( "%1" ).arg( latitude.Degrees() ) );
if ( ( ! sf->argVal(0).isEmpty() ) && ( ! sf->argVal(1).isEmpty() )) sf->setValid( true );
else sf->setValid(false);
} else {
sf->setArg( 2, "" );
sf->setValid( false );
}
} else {
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIGeoLocation" ) << endl;
}
}
void ScriptBuilder::slotINDIStartExposureDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDIExposure" )
{
if (argStartExposureINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argStartExposureINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argStartExposureINDI->deviceName->text());
sf->setArg(1, TQString("%1").arg(argStartExposureINDI->timeOut->value()));
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "startINDIExposure") << endl;
}
}
void ScriptBuilder::slotINDIStartExposureTimeout()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "startINDIExposure" )
{
if (sf->argVal(1).toInt() != argStartExposureINDI->timeOut->value())
setUnsavedChanges( true );
sf->setArg(1, TQString("%1").arg(argStartExposureINDI->timeOut->value()));
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "startINDIExposure") << endl;
}
}
void ScriptBuilder::slotINDISetUTCDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIUTC" )
{
if (argSetUTCINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetUTCINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetUTCINDI->deviceName->text());
if (! sf->argVal(1).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIUTC" ) << endl;
}
}
void ScriptBuilder::slotINDISetUTC()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIUTC" )
{
if (argSetUTCINDI->UTC->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(1) != argSetUTCINDI->UTC->text())
setUnsavedChanges( true );
sf->setArg(1, argSetUTCINDI->UTC->text());
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIUTC" ) << endl;
}
}
void ScriptBuilder::slotINDISetScopeActionDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIScopeAction" )
{
if (argSetScopeActionINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetScopeActionINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetScopeActionINDI->deviceName->text());
sf->setArg(1, argSetScopeActionINDI->actionCombo->currentText());
sf->setINDIProperty("CHECK");
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIScopeAction" ) << endl;
}
}
void ScriptBuilder::slotINDISetScopeAction()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIScopeAction" )
{
if (sf->argVal(1) != argSetScopeActionINDI->actionCombo->currentText())
setUnsavedChanges( true );
sf->setArg(1, argSetScopeActionINDI->actionCombo->currentText());
sf->setINDIProperty("CHECK");
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIScopeAction") << endl;
}
}
void ScriptBuilder::slotINDISetFrameTypeDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFrameType" )
{
if (argSetFrameTypeINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetFrameTypeINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetFrameTypeINDI->deviceName->text());
sf->setArg(1, argSetFrameTypeINDI->typeCombo->currentText());
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFrameType" ) << endl;
}
}
void ScriptBuilder::slotINDISetFrameType()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFrameType" )
{
if (sf->argVal(1) != argSetFrameTypeINDI->typeCombo->currentText())
setUnsavedChanges( true );
sf->setArg(1, argSetFrameTypeINDI->typeCombo->currentText());
if ((! sf->argVal(0).isEmpty())) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFrameType") << endl;
}
}
void ScriptBuilder::slotINDISetCCDTempDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDICCDTemp" )
{
if (argSetCCDTempINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetCCDTempINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetCCDTempINDI->deviceName->text());
sf->setArg(1, TQString("%1").arg(argSetCCDTempINDI->temp->value()));
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDICCDTemp") << endl;
}
}
void ScriptBuilder::slotINDISetCCDTemp()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDICCDTemp" )
{
if (sf->argVal(1).toInt() != argSetCCDTempINDI->temp->value())
setUnsavedChanges( true );
sf->setArg(1, TQString("%1").arg(argSetCCDTempINDI->temp->value()));
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDICCDTemp") << endl;
}
}
void ScriptBuilder::slotINDISetFilterNumDeviceName()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFilterNum" )
{
if (argSetFilterNumINDI->deviceName->text().isEmpty())
{
sf->setValid(false);
return;
}
if (sf->argVal(0) != argSetFilterNumINDI->deviceName->text())
setUnsavedChanges( true );
sf->setArg(0, argSetFilterNumINDI->deviceName->text());
sf->setArg(1, TQString("%1").arg(argSetFilterNumINDI->filter_num->value()));
sf->setValid(true);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFilterNum") << endl;
}
}
void ScriptBuilder::slotINDISetFilterNum()
{
ScriptFunction *sf = ScriptList.at( sb->ScriptListBox->currentItem() );
if ( sf->name() == "setINDIFilterNum" )
{
if (sf->argVal(1).toInt() != argSetFilterNumINDI->filter_num->value())
setUnsavedChanges( true );
sf->setArg(1, TQString("%1").arg(argSetFilterNumINDI->filter_num->value()));
if (! sf->argVal(0).isEmpty()) sf->setValid(true);
else sf->setValid(false);
}
else
{
kdWarning() << i18n( "Mismatch between function and Arg widget (expected %1.)" ).arg( "setINDIFilterNum") << endl;
}
}
#include "scriptbuilder.moc"