diff options
author | joye <joye> | 2014-04-14 19:51:53 (GMT) |
---|---|---|
committer | joye <joye> | 2014-04-14 19:51:53 (GMT) |
commit | 3eca2271a775a3b4f892746a082d8835e88e44bf (patch) | |
tree | 0713f71835c863f9f34e770ac76bb8fa25b408fc /src/bltGrHairsOp.C | |
parent | 8adad60bedc524ee3fd608e75a01aa9d6a7616f4 (diff) | |
download | blt-3eca2271a775a3b4f892746a082d8835e88e44bf.zip blt-3eca2271a775a3b4f892746a082d8835e88e44bf.tar.gz blt-3eca2271a775a3b4f892746a082d8835e88e44bf.tar.bz2 |
*** empty log message ***
Diffstat (limited to 'src/bltGrHairsOp.C')
-rw-r--r-- | src/bltGrHairsOp.C | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/bltGrHairsOp.C b/src/bltGrHairsOp.C new file mode 100644 index 0000000..db2fe36 --- /dev/null +++ b/src/bltGrHairsOp.C @@ -0,0 +1,185 @@ +/* + * Smithsonian Astrophysical Observatory, Cambridge, MA, USA + * This code has been modified under the terms listed below and is made + * available under the same terms. + */ + +/* + * Copyright 1993-2004 George A Howlett. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS + * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +extern "C" { +#include "bltGraph.h" +#include "bltOp.h" +} + +#include "bltGrHairs.h" + +extern void ConfigureCrosshairs(Graph* graphPtr); +extern void TurnOffHairs(Tk_Window tkwin, Crosshairs *chPtr); +extern void TurnOnHairs(Graph* graphPtr, Crosshairs *chPtr); + +static int CrosshairsObjConfigure(Tcl_Interp* interp, Graph* graphPtr, + int objc, Tcl_Obj* const objv[]) +{ + Crosshairs* chPtr = graphPtr->crosshairs; + Tk_SavedOptions savedOptions; + int mask =0; + int error; + Tcl_Obj* errorResult; + + for (error=0; error<=1; error++) { + if (!error) { + if (Tk_SetOptions(interp, (char*)chPtr, chPtr->optionTable, + objc, objv, graphPtr->tkwin, &savedOptions, &mask) + != TCL_OK) + continue; + } + else { + errorResult = Tcl_GetObjResult(interp); + Tcl_IncrRefCount(errorResult); + Tk_RestoreSavedOptions(&savedOptions); + } + + graphPtr->flags |= mask; + ConfigureCrosshairs(graphPtr); + + break; + } + + if (!error) { + Tk_FreeSavedOptions(&savedOptions); + return TCL_OK; + } + else { + Tcl_SetObjResult(interp, errorResult); + Tcl_DecrRefCount(errorResult); + return TCL_ERROR; + } +} + +static int CgetOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + if (objc != 4) { + Tcl_WrongNumArgs(interp, 2, objv, "cget option"); + return TCL_ERROR; + } + + Crosshairs* chPtr = graphPtr->crosshairs; + Tcl_Obj* objPtr = Tk_GetOptionValue(interp, + (char*)chPtr, + chPtr->optionTable, + objv[3], graphPtr->tkwin); + if (objPtr == NULL) + return TCL_ERROR; + else + Tcl_SetObjResult(interp, objPtr); + return TCL_OK; +} + +static int ConfigureOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + Crosshairs* chPtr = graphPtr->crosshairs; + if (objc <= 4) { + Tcl_Obj* objPtr = Tk_GetOptionInfo(graphPtr->interp, + (char*)chPtr, + chPtr->optionTable, + (objc == 4) ? objv[3] : NULL, + graphPtr->tkwin); + if (objPtr == NULL) + return TCL_ERROR; + else + Tcl_SetObjResult(interp, objPtr); + return TCL_OK; + } + else + return CrosshairsObjConfigure(interp, graphPtr, objc-3, objv+3); +} + +static int OnOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + Crosshairs *chPtr = graphPtr->crosshairs; + + if (chPtr->hide) { + TurnOnHairs(graphPtr, chPtr); + chPtr->hide = 0; + } + return TCL_OK; +} + +static int OffOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + Crosshairs *chPtr = graphPtr->crosshairs; + + if (!chPtr->hide) { + TurnOffHairs(graphPtr->tkwin, chPtr); + chPtr->hide = 1; + } + return TCL_OK; +} + +static int ToggleOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + Crosshairs *chPtr = graphPtr->crosshairs; + + chPtr->hide = (chPtr->hide == 0); + if (chPtr->hide) + TurnOffHairs(graphPtr->tkwin, chPtr); + else + TurnOnHairs(graphPtr, chPtr); + + return TCL_OK; +} + +static Blt_OpSpec xhairOps[] = + { + {"cget", 2, (void*)CgetOp, 4, 4, "option",}, + {"configure", 2, (void*)ConfigureOp, 3, 0, "?options...?",}, + {"off", 2, (void*)OffOp, 3, 3, "",}, + {"on", 2, (void*)OnOp, 3, 3, "",}, + {"toggle", 1, (void*)ToggleOp, 3, 3, "",}, + }; +static int nXhairOps = sizeof(xhairOps) / sizeof(Blt_OpSpec); + +typedef int (GraphCrosshairProc)(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]); + +int Blt_CrosshairsOp(Graph* graphPtr, Tcl_Interp* interp, + int objc, Tcl_Obj* const objv[]) +{ + GraphCrosshairProc* proc = (GraphCrosshairProc*)Blt_GetOpFromObj(interp, nXhairOps, xhairOps, BLT_OP_ARG2, objc, objv, 0); + if (proc == NULL) + return TCL_ERROR; + + return (*proc)(graphPtr, interp, objc, objv); +} + +// Support + |