/*************************************************************************** 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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( "document-new", TDEIcon::Toolbar ) ); sb->OpenButton->setIconSet( icons->loadIcon( "document-open", TDEIcon::Toolbar ) ); sb->SaveButton->setIconSet( icons->loadIconSet( "document-save", TDEIcon::Toolbar ) ); sb->SaveAsButton->setIconSet( icons->loadIconSet( "document-save-as", 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; inumArgs(); ++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; inumArgs(); ++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"