diff options
author | joye <joye> | 2014-05-27 19:17:25 (GMT) |
---|---|---|
committer | joye <joye> | 2014-05-27 19:17:25 (GMT) |
commit | 1ed6288ad70ad1b1ff402c94bc36b7153dc18131 (patch) | |
tree | 6b37fa0689a57deb1a8f85bf1a2b12afd5186c27 /src | |
parent | e26b0d86396836babae2203cdfeaed97112762de (diff) | |
download | blt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.zip blt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.tar.gz blt-1ed6288ad70ad1b1ff402c94bc36b7153dc18131.tar.bz2 |
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r-- | src/bltGrAxis.C | 2 | ||||
-rw-r--r-- | src/bltGrAxisOp.C | 2 | ||||
-rw-r--r-- | src/bltGrBind.C | 214 | ||||
-rw-r--r-- | src/bltGrBind.h | 49 | ||||
-rw-r--r-- | src/bltGrElem.C | 2 | ||||
-rw-r--r-- | src/bltGrElemOp.C | 2 | ||||
-rw-r--r-- | src/bltGrLegd.C | 8 | ||||
-rw-r--r-- | src/bltGrLegd.h | 8 | ||||
-rw-r--r-- | src/bltGrLegdOp.C | 2 | ||||
-rw-r--r-- | src/bltGrMarker.C | 2 | ||||
-rw-r--r-- | src/bltGrMarkerOp.C | 2 | ||||
-rw-r--r-- | src/bltGrXAxisOp.C | 2 | ||||
-rw-r--r-- | src/bltGraph.C | 7 | ||||
-rw-r--r-- | src/bltGraph.h | 2 |
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_; |