summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjoye <joye>2014-05-27 19:17:25 (GMT)
committerjoye <joye>2014-05-27 19:17:25 (GMT)
commit1ed6288ad70ad1b1ff402c94bc36b7153dc18131 (patch)
tree6b37fa0689a57deb1a8f85bf1a2b12afd5186c27 /src
parente26b0d86396836babae2203cdfeaed97112762de (diff)
downloadblt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.zip
blt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.tar.gz
blt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.tar.bz2
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r--src/bltGrAxis.C2
-rw-r--r--src/bltGrAxisOp.C2
-rw-r--r--src/bltGrBind.C214
-rw-r--r--src/bltGrBind.h49
-rw-r--r--src/bltGrElem.C2
-rw-r--r--src/bltGrElemOp.C2
-rw-r--r--src/bltGrLegd.C8
-rw-r--r--src/bltGrLegd.h8
-rw-r--r--src/bltGrLegdOp.C2
-rw-r--r--src/bltGrMarker.C2
-rw-r--r--src/bltGrMarkerOp.C2
-rw-r--r--src/bltGrXAxisOp.C2
-rw-r--r--src/bltGraph.C7
-rw-r--r--src/bltGraph.h2
14 files changed, 151 insertions, 153 deletions
diff --git a/src/bltGrAxis.C b/src/bltGrAxis.C
index 661ecb6..a0b9574 100644
--- a/src/bltGrAxis.C
+++ b/src/bltGrAxis.C
@@ -268,7 +268,7 @@ Axis::~Axis()
AxisOptions* ops = (AxisOptions*)ops_;
if (graphPtr_->bindTable_)
- Blt_DeleteBindings(graphPtr_->bindTable_, this);
+ graphPtr_->bindTable_->deleteBindings(this);
if (link)
Blt_Chain_DeleteLink(chain, link);
diff --git a/src/bltGrAxisOp.C b/src/bltGrAxisOp.C
index 374aaff..6d60e04 100644
--- a/src/bltGrAxisOp.C
+++ b/src/bltGrAxisOp.C
@@ -151,7 +151,7 @@ static int BindOp(ClientData clientData, Tcl_Interp* interp,
return TCL_OK;
}
else
- return Blt_ConfigureBindingsFromObj(interp, graphPtr->bindTable_, graphPtr->axisTag(Tcl_GetString(objv[3])), objc-4, objv+4);
+ return graphPtr->bindTable_->configure(interp, graphPtr->axisTag(Tcl_GetString(objv[3])), objc-4, objv+4);
}
static int CreateOp(ClientData clientData, Tcl_Interp* interp,
diff --git a/src/bltGrBind.C b/src/bltGrBind.C
index a06af7e..e329c17 100644
--- a/src/bltGrBind.C
+++ b/src/bltGrBind.C
@@ -38,10 +38,114 @@ using namespace std;
static Tk_EventProc BindProc;
+BindTable::BindTable(Tcl_Interp* interp, Tk_Window tkwinn,
+ ClientData clientDataa,
+ Blt_BindPickProc* pickProcc, Blt_BindTagProc* tagProcc)
+{
+ flags =0;
+ bindingTable = Tk_CreateBindingTable(interp);
+ currentItem =NULL;
+ currentContext =NULL;
+ newItem =NULL;
+ newContext =NULL;
+ focusItem =NULL;
+ focusContext =NULL;
+ // pickEvent =NULL;
+ activePick =0;
+ state =0;
+ clientData = clientDataa;
+ tkwin = tkwinn;
+ pickProc = pickProcc;
+ tagProc = tagProcc;
+ unsigned int mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask |
+ ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
+ PointerMotionMask);
+ Tk_CreateEventHandler(tkwin, mask, BindProc, this);
+}
+
+BindTable::~BindTable()
+{
+ Tk_DeleteBindingTable(bindingTable);
+ unsigned int mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask |
+ ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
+ PointerMotionMask);
+ Tk_DeleteEventHandler(tkwin, mask, BindProc, this);
+}
+
+int BindTable::configure(Tcl_Interp* interp, ClientData item,
+ int objc, Tcl_Obj* const objv[])
+{
+ if (objc == 0) {
+ Tk_GetAllBindings(interp, bindingTable, item);
+ return TCL_OK;
+ }
+
+ const char *string = Tcl_GetString(objv[0]);
+ if (objc == 1) {
+ const char* command = Tk_GetBinding(interp, bindingTable, item, string);
+ if (!command) {
+ Tcl_ResetResult(interp);
+ Tcl_AppendResult(interp, "invalid binding event \"", string, "\"", NULL);
+ return TCL_ERROR;
+ }
+ Tcl_SetStringObj(Tcl_GetObjResult(interp), command, -1);
+ return TCL_OK;
+ }
+
+ const char* seq = string;
+ const char* command = Tcl_GetString(objv[1]);
+ if (command[0] == '\0')
+ return Tk_DeleteBinding(interp, bindingTable, item, seq);
+
+ unsigned long mask;
+ if (command[0] == '+')
+ mask = Tk_CreateBinding(interp, bindingTable, item, seq, command+1, 1);
+ else
+ mask = Tk_CreateBinding(interp, bindingTable, item, seq, command, 0);
+ if (!mask)
+ return TCL_ERROR;
+
+ if (mask & (unsigned) ~(ButtonMotionMask|Button1MotionMask
+ |Button2MotionMask|Button3MotionMask|Button4MotionMask
+ |Button5MotionMask|ButtonPressMask|ButtonReleaseMask
+ |EnterWindowMask|LeaveWindowMask|KeyPressMask
+ |KeyReleaseMask|PointerMotionMask|VirtualEventMask)) {
+ Tk_DeleteBinding(interp, bindingTable, item, seq);
+ Tcl_ResetResult(interp);
+ Tcl_AppendResult(interp, "requested illegal events; ",
+ "only key, button, motion, enter, leave, and virtual ",
+ "events may be used", (char *)NULL);
+ return TCL_ERROR;
+ }
+
+ return TCL_OK;
+}
+
+void BindTable::deleteBindings(ClientData object)
+{
+ Tk_DeleteAllBindings(bindingTable, object);
+
+ // If this is the object currently picked, we need to repick one.
+ if (currentItem == object) {
+ currentItem =NULL;
+ currentContext =NULL;
+ }
+
+ if (newItem == object) {
+ newItem =NULL;
+ newContext =NULL;
+ }
+
+ if (focusItem == object) {
+ focusItem =NULL;
+ focusContext =NULL;
+ }
+}
+
#define REPICK_IN_PROGRESS (1<<0)
#define LEFT_GRABBED_ITEM (1<<1)
-static void BltDoEvent(Blt_BindTable bindPtr, XEvent* eventPtr,
+static void BltDoEvent(BindTable* bindPtr, XEvent* eventPtr,
ClientData item, ClientData context)
{
if (!bindPtr->tkwin || !bindPtr->bindingTable)
@@ -63,7 +167,7 @@ static void BltDoEvent(Blt_BindTable bindPtr, XEvent* eventPtr,
delete [] tagArray;
}
-static void PickCurrentItem(Blt_BindTable bindPtr, XEvent *eventPtr)
+static void PickCurrentItem(BindTable* bindPtr, XEvent *eventPtr)
{
// Check whether or not a button is down. If so, we'll log entry and exit
// into and out of the current item, but not entry into any other item.
@@ -212,7 +316,7 @@ static void BindProc(ClientData clientData, XEvent *eventPtr)
// bindPtr->state. This information is used to defer repicks of the
// current item while buttons are down.
- Blt_BindTable bindPtr = (Blt_BindTable)clientData;
+ BindTable* bindPtr = (BindTable*)clientData;
Tcl_Preserve(bindPtr->clientData);
@@ -298,107 +402,3 @@ static void BindProc(ClientData clientData, XEvent *eventPtr)
Tcl_Release(bindPtr->clientData);
}
-int Blt_ConfigureBindingsFromObj(Tcl_Interp* interp, Blt_BindTable bindPtr,
- ClientData item, int objc,
- Tcl_Obj* const objv[])
-{
- if (objc == 0) {
- Tk_GetAllBindings(interp, bindPtr->bindingTable, item);
- return TCL_OK;
- }
-
- const char *string = Tcl_GetString(objv[0]);
- if (objc == 1) {
- const char* command =
- Tk_GetBinding(interp, bindPtr->bindingTable, item, string);
- if (!command) {
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "invalid binding event \"", string, "\"", NULL);
- return TCL_ERROR;
- }
- Tcl_SetStringObj(Tcl_GetObjResult(interp), command, -1);
- return TCL_OK;
- }
-
- const char *seq = string;
- const char* command = Tcl_GetString(objv[1]);
- if (command[0] == '\0')
- return Tk_DeleteBinding(interp, bindPtr->bindingTable, item, seq);
-
- unsigned long mask;
- if (command[0] == '+')
- mask = Tk_CreateBinding(interp, bindPtr->bindingTable, item, seq,
- command+1, 1);
- else
- mask = Tk_CreateBinding(interp, bindPtr->bindingTable, item, seq,
- command, 0);
- if (!mask)
- return TCL_ERROR;
-
- if (mask & (unsigned) ~(ButtonMotionMask|Button1MotionMask
- |Button2MotionMask|Button3MotionMask|Button4MotionMask
- |Button5MotionMask|ButtonPressMask|ButtonReleaseMask
- |EnterWindowMask|LeaveWindowMask|KeyPressMask
- |KeyReleaseMask|PointerMotionMask|VirtualEventMask)) {
- Tk_DeleteBinding(interp, bindPtr->bindingTable, item, seq);
- Tcl_ResetResult(interp);
- Tcl_AppendResult(interp, "requested illegal events; ",
- "only key, button, motion, enter, leave, and virtual ",
- "events may be used", (char *)NULL);
- return TCL_ERROR;
- }
-
- return TCL_OK;
-}
-
-Blt_BindTable Blt_CreateBindingTable(Tcl_Interp* interp, Tk_Window tkwin,
- ClientData clientData,
- Blt_BindPickProc *pickProc,
- Blt_BindTagProc *tagProc)
-{
- Blt_BindTable bindPtr = (Blt_BindTable)calloc(1, sizeof(_Blt_BindTable));
- bindPtr->bindingTable = Tk_CreateBindingTable(interp);
- bindPtr->clientData = clientData;
- bindPtr->tkwin = tkwin;
- bindPtr->pickProc = pickProc;
- bindPtr->tagProc = tagProc;
- unsigned int mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask |
- ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
- PointerMotionMask);
- Tk_CreateEventHandler(tkwin, mask, BindProc, bindPtr);
-
- return bindPtr;
-}
-
-void Blt_DestroyBindingTable(Blt_BindTable bindPtr)
-{
- Tk_DeleteBindingTable(bindPtr->bindingTable);
- unsigned int mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask |
- ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
- PointerMotionMask);
- Tk_DeleteEventHandler(bindPtr->tkwin, mask, BindProc, bindPtr);
-
- free(bindPtr);
- bindPtr = NULL;
-}
-
-void Blt_DeleteBindings(Blt_BindTable bindPtr, ClientData object)
-{
- Tk_DeleteAllBindings(bindPtr->bindingTable, object);
-
- // If this is the object currently picked, we need to repick one.
- if (bindPtr->currentItem == object) {
- bindPtr->currentItem = NULL;
- bindPtr->currentContext = NULL;
- }
-
- if (bindPtr->newItem == object) {
- bindPtr->newItem = NULL;
- bindPtr->newContext = NULL;
- }
-
- if (bindPtr->focusItem == object) {
- bindPtr->focusItem = NULL;
- bindPtr->focusContext = NULL;
- }
-}
diff --git a/src/bltGrBind.h b/src/bltGrBind.h
index 22a320c..09b8af6 100644
--- a/src/bltGrBind.h
+++ b/src/bltGrBind.h
@@ -27,45 +27,44 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-#ifndef _BLT_BIND_H
-#define _BLT_BIND_H
+#ifndef __BltGrBind_h__
+#define __BltGrBind_h__
#include <tk.h>
-typedef struct _Blt_BindTable *Blt_BindTable;
+class BindTable;
typedef ClientData (Blt_BindPickProc)(ClientData clientData, int x, int y, ClientData *contextPtr);
-typedef const char** (Blt_BindTagProc)(Blt_BindTable bindTable, ClientData object, ClientData context, int*);
+typedef const char** (Blt_BindTagProc)(BindTable* bindTable, ClientData object, ClientData context, int*);
-struct _Blt_BindTable {
+class BindTable {
+ public:
unsigned int flags;
Tk_BindingTable bindingTable;
- ClientData currentItem; // The item currently containing the mouse pointer
- ClientData currentContext; // One word indicating what kind of object
- ClientData newItem; // The item that is about to become the current one
- ClientData newContext; // One-word indicating what kind of object was picked
+ ClientData currentItem;
+ ClientData currentContext;
+ ClientData newItem;
+ ClientData newContext;
ClientData focusItem;
ClientData focusContext;
- XEvent pickEvent; // The event upon which the choice of the current tab
- int activePick; // The pick event has been initialized so that we can repick
- int state; // Last known modifier state
+ XEvent pickEvent;
+ int activePick;
+ int state;
ClientData clientData;
Tk_Window tkwin;
- Blt_BindPickProc *pickProc; // Routine to report the item the mouse is over
- Blt_BindTagProc *tagProc; // Routine to report tags picked items
+ Blt_BindPickProc* pickProc;
+ Blt_BindTagProc* tagProc;
+
+ public:
+ BindTable(Tcl_Interp* interp, Tk_Window tkwin, ClientData clientData,
+ Blt_BindPickProc* pickProc, Blt_BindTagProc* tagProc);
+ virtual ~BindTable();
+
+ int configure(Tcl_Interp* interp, ClientData item, int objc,
+ Tcl_Obj *const *objv);
+ void deleteBindings(ClientData object);
};
-extern Blt_BindTable Blt_CreateBindingTable(Tcl_Interp* interp,
- Tk_Window tkwin,
- ClientData clientData,
- Blt_BindPickProc *pickProc,
- Blt_BindTagProc *tagProc);
-extern void Blt_DestroyBindingTable(Blt_BindTable table);
-extern void Blt_DeleteBindings(Blt_BindTable table, ClientData object);
-extern int Blt_ConfigureBindingsFromObj(Tcl_Interp* interp,
- Blt_BindTable table,
- ClientData item,
- int objc, Tcl_Obj *const *objv);
#endif
diff --git a/src/bltGrElem.C b/src/bltGrElem.C
index 9fd1490..39cd5e2 100644
--- a/src/bltGrElem.C
+++ b/src/bltGrElem.C
@@ -59,7 +59,7 @@ Element::Element(Graph* graphPtr, const char* name, Tcl_HashEntry* hPtr)
Element::~Element()
{
if (graphPtr_->bindTable_)
- Blt_DeleteBindings(graphPtr_->bindTable_, this);
+ graphPtr_->bindTable_->deleteBindings(this);
if (link)
Blt_Chain_DeleteLink(graphPtr_->elements_.displayList, link);
diff --git a/src/bltGrElemOp.C b/src/bltGrElemOp.C
index 491ece6..30c2a9a 100644
--- a/src/bltGrElemOp.C
+++ b/src/bltGrElemOp.C
@@ -203,7 +203,7 @@ static int BindOp(ClientData clientData, Tcl_Interp* interp,
return TCL_OK;
}
- return Blt_ConfigureBindingsFromObj(interp, graphPtr->bindTable_, graphPtr->elementTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
+ return graphPtr->bindTable_->configure(interp, graphPtr->elementTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
}
static int ClosestOp(ClientData clientData, Tcl_Interp* interp,
diff --git a/src/bltGrLegd.C b/src/bltGrLegd.C
index 0169f94..1ac796f 100644
--- a/src/bltGrLegd.C
+++ b/src/bltGrLegd.C
@@ -194,8 +194,8 @@ Legend::Legend(Graph* graphPtr)
ops->titleStyle.angle =0;
ops->titleStyle.justify =TK_JUSTIFY_LEFT;
- bindTable_ = Blt_CreateBindingTable(graphPtr->interp_, graphPtr->tkwin_,
- graphPtr, PickEntryProc, Blt_GraphTags);
+ bindTable_ = new BindTable(graphPtr->interp_, graphPtr->tkwin_,
+ graphPtr, PickEntryProc, Blt_GraphTags);
Tcl_InitHashTable(&selectTable_, TCL_ONE_WORD_KEYS);
@@ -210,7 +210,7 @@ Legend::~Legend()
{
// LegendOptions* ops = (LegendOptions*)ops_;
- Blt_DestroyBindingTable(bindTable_);
+ delete bindTable_;
if (focusGC_)
Blt_FreePrivateGC(graphPtr_->display_, focusGC_);
@@ -636,7 +636,7 @@ void Legend::print(Blt_Ps ps)
void Legend::removeElement(Element* elemPtr)
{
- Blt_DeleteBindings(bindTable_, elemPtr);
+ bindTable_->deleteBindings(elemPtr);
}
void Legend::eventuallyInvokeSelectCmd()
diff --git a/src/bltGrLegd.h b/src/bltGrLegd.h
index 2e26210..6e956fa 100644
--- a/src/bltGrLegd.h
+++ b/src/bltGrLegd.h
@@ -125,10 +125,10 @@ class Legend {
int nRows_;
int entryWidth_;
int entryHeight_;
- Blt_BindTable bindTable_;
- Element *focusPtr_;
- Element *selAnchorPtr_;
- Element *selMarkPtr_;
+ BindTable* bindTable_;
+ Element* focusPtr_;
+ Element* selAnchorPtr_;
+ Element* selMarkPtr_;
Blt_Chain selected_;
int titleWidth_;
int titleHeight_;
diff --git a/src/bltGrLegdOp.C b/src/bltGrLegdOp.C
index 669aef1..b7cefff 100644
--- a/src/bltGrLegdOp.C
+++ b/src/bltGrLegdOp.C
@@ -195,7 +195,7 @@ static int BindOp(ClientData clientData, Tcl_Interp* interp,
return TCL_OK;
}
- return Blt_ConfigureBindingsFromObj(interp, graphPtr->legend_->bindTable_, graphPtr->elementTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
+ return graphPtr->legend_->bindTable_->configure(interp, graphPtr->elementTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
}
static int CurselectionOp(ClientData clientData, Tcl_Interp* interp,
diff --git a/src/bltGrMarker.C b/src/bltGrMarker.C
index 012419f..c5b0620 100644
--- a/src/bltGrMarker.C
+++ b/src/bltGrMarker.C
@@ -54,7 +54,7 @@ Marker::Marker(Graph* gPtr, const char* nPtr, Tcl_HashEntry* hPtr)
Marker::~Marker()
{
if (graphPtr_->bindTable_)
- Blt_DeleteBindings(graphPtr_->bindTable_, this);
+ graphPtr_->bindTable_->deleteBindings(this);
if (link)
Blt_Chain_DeleteLink(graphPtr_->markers_.displayList, link);
diff --git a/src/bltGrMarkerOp.C b/src/bltGrMarkerOp.C
index a59569b..93849bd 100644
--- a/src/bltGrMarkerOp.C
+++ b/src/bltGrMarkerOp.C
@@ -224,7 +224,7 @@ static int BindOp(ClientData clientData, Tcl_Interp* interp,
return TCL_OK;
}
- return Blt_ConfigureBindingsFromObj(interp, graphPtr->bindTable_, graphPtr->markerTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
+ return graphPtr->bindTable_->configure(interp, graphPtr->markerTag(Tcl_GetString(objv[3])), objc - 4, objv + 4);
}
static int CreateOp(ClientData clientData, Tcl_Interp* interp,
diff --git a/src/bltGrXAxisOp.C b/src/bltGrXAxisOp.C
index c6529c4..4e6cc2c 100644
--- a/src/bltGrXAxisOp.C
+++ b/src/bltGrXAxisOp.C
@@ -84,7 +84,7 @@ static int BindOp(ClientData clientData, Tcl_Interp* interp,
{
Graph* graphPtr = (Graph*)clientData;
Axis* axisPtr = GetAxisFromCmd(clientData, objv[1]);
- return Blt_ConfigureBindingsFromObj(interp, graphPtr->bindTable_, graphPtr->axisTag(axisPtr->name_), objc-3, objv+3);
+ return graphPtr->bindTable_->configure(interp, graphPtr->axisTag(axisPtr->name_), objc-3, objv+3);
}
static int InvTransformOp(ClientData clientData, Tcl_Interp* interp,
diff --git a/src/bltGraph.C b/src/bltGraph.C
index c14165e..ea4c176 100644
--- a/src/bltGraph.C
+++ b/src/bltGraph.C
@@ -119,8 +119,7 @@ Graph::Graph(ClientData clientData, Tcl_Interp* interp,
axes_.displayList = Blt_Chain_Create();
elements_.displayList = Blt_Chain_Create();
markers_.displayList = Blt_Chain_Create();
- bindTable_ = Blt_CreateBindingTable(interp_, tkwin_, this, PickEntry,
- Blt_GraphTags);
+ bindTable_ = new BindTable(interp_, tkwin_, this, PickEntry, Blt_GraphTags);
if (createAxes() != TCL_OK) {
valid_ =0;
@@ -151,7 +150,7 @@ Graph::~Graph()
destroyPens();
if (bindTable_)
- Blt_DestroyBindingTable(bindTable_);
+ delete bindTable_;
if (drawGC_)
Tk_FreeGC(display_, drawGC_);
@@ -1261,7 +1260,7 @@ Axis* Graph::nearestAxis(int x, int y)
return NULL;
}
-const char** Blt_GraphTags(Blt_BindTable table, ClientData object, ClientData context, int* num)
+const char** Blt_GraphTags(BindTable* table, ClientData object, ClientData context, int* num)
{
Graph* graphPtr = (Graph*)table->clientData;
ClassId classId = (ClassId)(long(context));
diff --git a/src/bltGraph.h b/src/bltGraph.h
index 6f2eb24..ef44849 100644
--- a/src/bltGraph.h
+++ b/src/bltGraph.h
@@ -141,7 +141,7 @@ class Graph {
Component elements_;
Component markers_;
Tcl_HashTable penTable_;
- Blt_BindTable bindTable_;
+ BindTable* bindTable_;
Blt_Chain axisChain_[4];
Legend* legend_;