summaryrefslogtreecommitdiffstats
path: root/src/bltGrHairsOp.C
diff options
context:
space:
mode:
authorjoye <joye>2014-04-14 19:51:53 (GMT)
committerjoye <joye>2014-04-14 19:51:53 (GMT)
commit3eca2271a775a3b4f892746a082d8835e88e44bf (patch)
tree0713f71835c863f9f34e770ac76bb8fa25b408fc /src/bltGrHairsOp.C
parent8adad60bedc524ee3fd608e75a01aa9d6a7616f4 (diff)
downloadblt-3eca2271a775a3b4f892746a082d8835e88e44bf.zip
blt-3eca2271a775a3b4f892746a082d8835e88e44bf.tar.gz
blt-3eca2271a775a3b4f892746a082d8835e88e44bf.tar.bz2
*** empty log message ***
Diffstat (limited to 'src/bltGrHairsOp.C')
-rw-r--r--src/bltGrHairsOp.C185
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
+