diff options
author | joye <joye> | 2014-04-09 16:37:01 (GMT) |
---|---|---|
committer | joye <joye> | 2014-04-09 16:37:01 (GMT) |
commit | 59278fd0da43eff5b51dfecd4f16fcee835fd824 (patch) | |
tree | 1d7455d7635f942381777bb57d6fbfa60dd477ce /src | |
parent | 8fe1a962c2e3f8a0ca305af266a05b55c418afff (diff) | |
download | blt-59278fd0da43eff5b51dfecd4f16fcee835fd824.zip blt-59278fd0da43eff5b51dfecd4f16fcee835fd824.tar.gz blt-59278fd0da43eff5b51dfecd4f16fcee835fd824.tar.bz2 |
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r-- | src/bltGrAxis.C | 2 | ||||
-rw-r--r-- | src/bltGrElemOp.C | 2 | ||||
-rw-r--r-- | src/bltGrLegd.C | 52 | ||||
-rw-r--r-- | src/bltGrLegd.h | 17 | ||||
-rw-r--r-- | src/bltGrLegdOp.C | 84 | ||||
-rw-r--r-- | src/bltGrLegdOp.h | 2 | ||||
-rw-r--r-- | src/bltGraph.C | 11 |
7 files changed, 75 insertions, 95 deletions
diff --git a/src/bltGrAxis.C b/src/bltGrAxis.C index 5157153..70985b8 100644 --- a/src/bltGrAxis.C +++ b/src/bltGrAxis.C @@ -3049,7 +3049,7 @@ void Blt_LayoutGraph(Graph* graphPtr) /* * Step 2: Add the legend to the appropiate margin. */ - if (!Blt_Legend_IsHidden(graphPtr)) { + if (!graphPtr->legend->isHidden()) { switch (graphPtr->legend->site()) { case LEGEND_RIGHT: right += graphPtr->legend->width() + 2; diff --git a/src/bltGrElemOp.C b/src/bltGrElemOp.C index 263d40e..a91d797 100644 --- a/src/bltGrElemOp.C +++ b/src/bltGrElemOp.C @@ -107,7 +107,7 @@ static void DestroyElement(Element* elemPtr) Graph* graphPtr = elemPtr->graphPtr(); Blt_DeleteBindings(graphPtr->bindTable, elemPtr); - Blt_Legend_RemoveElement(graphPtr, elemPtr); + graphPtr->legend->removeElement(elemPtr); if (elemPtr->link) Blt_Chain_DeleteLink(graphPtr->elements.displayList, elemPtr->link); diff --git a/src/bltGrLegd.C b/src/bltGrLegd.C index d4d03db..41c07e4 100644 --- a/src/bltGrLegd.C +++ b/src/bltGrLegd.C @@ -618,6 +618,19 @@ void Legend::draw(Drawable drawable) graphPtr_->flags &= ~DRAW_LEGEND; } +void Legend::removeElement(Element* elemPtr) +{ + Blt_DeleteBindings(bindTable_, elemPtr); +} + +void Legend::eventuallyRedraw() +{ + if ((graphPtr_->tkwin) && !(flags & REDRAW_PENDING)) { + Tcl_DoWhenIdle(DisplayLegend, this); + flags |= REDRAW_PENDING; + } +} + // Support static void DisplayLegend(ClientData clientData) @@ -629,16 +642,6 @@ static void DisplayLegend(ClientData clientData) legendPtr->draw(Tk_WindowId(legendPtr->graphPtr_->tkwin)); } -void Blt_Legend_EventuallyRedraw(Graph* graphPtr) -{ - Legend* legendPtr = graphPtr->legend; - - if ((graphPtr->tkwin) && !(legendPtr->flags & REDRAW_PENDING)) { - Tcl_DoWhenIdle(DisplayLegend, legendPtr); - legendPtr->flags |= REDRAW_PENDING; - } -} - static void SetLegendOrigin(Legend* legendPtr) { Graph* graphPtr = legendPtr->graphPtr_; @@ -1133,35 +1136,6 @@ int SelectRange(Legend* legendPtr, Element *fromPtr, Element *toPtr) return TCL_OK; } -int Blt_Legend_IsHidden(Graph* graphPtr) -{ - Legend* legendPtr = graphPtr->legend; - LegendOptions* ops = (LegendOptions*)legendPtr->ops_; - return (ops->hide); -} - -int Blt_Legend_IsRaised(Graph* graphPtr) -{ - Legend* legendPtr = graphPtr->legend; - LegendOptions* ops = (LegendOptions*)legendPtr->ops_; - return (ops->raised); -} - -int Blt_Legend_X(Graph* graphPtr) -{ - return graphPtr->legend->x_; -} - -int Blt_Legend_Y(Graph* graphPtr) -{ - return graphPtr->legend->y_; -} - -void Blt_Legend_RemoveElement(Graph* graphPtr, Element* elemPtr) -{ - Blt_DeleteBindings(graphPtr->legend->bindTable_, elemPtr); -} - static int SelectionProc(ClientData clientData, int offset, char *buffer, int maxBytes) { diff --git a/src/bltGrLegd.h b/src/bltGrLegd.h index 91237ca..5bcd307 100644 --- a/src/bltGrLegd.h +++ b/src/bltGrLegd.h @@ -156,18 +156,17 @@ class Legend { void configure(); void map(int, int); void draw(Drawable drawable); + void removeElement(Element*); + void eventuallyRedraw(); + int width() {return width_;} int height() {return height_;} int site() {return site_;} -}; + int x() {return x_;} + int y() {return y_;} -extern int Blt_LegendOp(Graph *graphPtr, Tcl_Interp* interp, int objc, - Tcl_Obj* const objv[]); -extern int Blt_Legend_IsHidden(Graph *graphPtr); -extern int Blt_Legend_IsRaised(Graph *graphPtr); -extern int Blt_Legend_X(Graph *graphPtr); -extern int Blt_Legend_Y(Graph *graphPtr); -extern void Blt_Legend_RemoveElement(Graph *graphPtr, Element *elemPtr); -extern void Blt_Legend_EventuallyRedraw(Graph *graphPtr); + int isRaised() {return ((LegendOptions*)ops_)->raised;} + int isHidden() {return ((LegendOptions*)ops_)->hide;} +}; #endif diff --git a/src/bltGrLegdOp.C b/src/bltGrLegdOp.C index 1a945ec..313f4ad 100644 --- a/src/bltGrLegdOp.C +++ b/src/bltGrLegdOp.C @@ -275,9 +275,9 @@ static int FocusOp(Graph* graphPtr, Tcl_Interp* interp, if (objc == 4) { Element* elemPtr; - if (GetElementFromObj(graphPtr, objv[3], &elemPtr) != TCL_OK) { + if (GetElementFromObj(graphPtr, objv[3], &elemPtr) != TCL_OK) return TCL_ERROR; - } + if ((elemPtr != NULL) && (elemPtr != legendPtr->focusPtr_)) { /* Changing focus can only affect the visible entries. The entry * layout stays the same. */ @@ -285,7 +285,7 @@ static int FocusOp(Graph* graphPtr, Tcl_Interp* interp, } Blt_SetFocusItem(legendPtr->bindTable_, legendPtr->focusPtr_, CID_LEGEND_ENTRY); - Blt_Legend_EventuallyRedraw(graphPtr); + graphPtr->legend->eventuallyRedraw(); } if (legendPtr->focusPtr_) { Tcl_SetStringObj(Tcl_GetObjResult(interp), @@ -344,18 +344,18 @@ static int SelectionAnchorOp(Graph* graphPtr, Tcl_Interp* interp, Legend* legendPtr = graphPtr->legend; Element* elemPtr; - if (GetElementFromObj(graphPtr, objv[4], &elemPtr) != TCL_OK) { + if (GetElementFromObj(graphPtr, objv[4], &elemPtr) != TCL_OK) return TCL_ERROR; - } - /* Set both the anchor and the mark. Indicates that a single entry - * is selected. */ + + // Set both the anchor and the mark. Indicates that a single entry + // is selected legendPtr->selAnchorPtr_ = elemPtr; legendPtr->selMarkPtr_ = NULL; - if (elemPtr) { + if (elemPtr) Tcl_SetStringObj(Tcl_GetObjResult(interp), elemPtr->name(), -1); - } - Blt_Legend_EventuallyRedraw(graphPtr); + graphPtr->legend->eventuallyRedraw(); + return TCL_OK; } @@ -388,34 +388,35 @@ static int SelectionMarkOp(Graph* graphPtr, Tcl_Interp* interp, LegendOptions* ops = (LegendOptions*)legendPtr->ops_; Element* elemPtr; - if (GetElementFromObj(graphPtr, objv[4], &elemPtr) != TCL_OK) { + if (GetElementFromObj(graphPtr, objv[4], &elemPtr) != TCL_OK) return TCL_ERROR; - } + if (legendPtr->selAnchorPtr_ == NULL) { - Tcl_AppendResult(interp, "selection anchor must be set first", - (char *)NULL); + Tcl_AppendResult(interp, "selection anchor must be set first", NULL); return TCL_ERROR; } + if (legendPtr->selMarkPtr_ != elemPtr) { + // Deselect entry from the list all the way back to the anchor Blt_ChainLink link, next; - - /* Deselect entry from the list all the way back to the anchor. */ for (link = Blt_Chain_LastLink(legendPtr->selected_); link != NULL; link = next) { next = Blt_Chain_PrevLink(link); Element *selectPtr = (Element*)Blt_Chain_GetValue(link); - if (selectPtr == legendPtr->selAnchorPtr_) { + if (selectPtr == legendPtr->selAnchorPtr_) break; - } + DeselectElement(legendPtr, selectPtr); } + legendPtr->flags &= ~SELECT_TOGGLE; legendPtr->flags |= SELECT_SET; SelectRange(legendPtr, legendPtr->selAnchorPtr_, elemPtr); Tcl_SetStringObj(Tcl_GetObjResult(interp), elemPtr->name(), -1); legendPtr->selMarkPtr_ = elemPtr; - Blt_Legend_EventuallyRedraw(graphPtr); + graphPtr->legend->eventuallyRedraw(); + if (ops->selectCmd) EventuallyInvokeSelectCmd(legendPtr); } @@ -436,11 +437,9 @@ static int SelectionSetOp(Graph* graphPtr, Tcl_Interp* interp, { Legend* legendPtr = graphPtr->legend; LegendOptions* ops = (LegendOptions*)legendPtr->ops_; - Element *firstPtr, *lastPtr; - const char *string; legendPtr->flags &= ~SELECT_TOGGLE; - string = Tcl_GetString(objv[3]); + const char* string = Tcl_GetString(objv[3]); switch (string[0]) { case 's': legendPtr->flags |= SELECT_SET; @@ -452,40 +451,44 @@ static int SelectionSetOp(Graph* graphPtr, Tcl_Interp* interp, legendPtr->flags |= SELECT_TOGGLE; break; } - if (GetElementFromObj(graphPtr, objv[4], &firstPtr) != TCL_OK) { + + Element *firstPtr; + if (GetElementFromObj(graphPtr, objv[4], &firstPtr) != TCL_OK) return TCL_ERROR; - } + if ((firstPtr->hide()) && ((legendPtr->flags & SELECT_CLEAR)==0)) { Tcl_AppendResult(interp, "can't select hidden node \"", Tcl_GetString(objv[4]), "\"", (char *)NULL); return TCL_ERROR; } - lastPtr = firstPtr; + + Element* lastPtr = firstPtr; if (objc > 5) { - if (GetElementFromObj(graphPtr, objv[5], &lastPtr) != TCL_OK) { + if (GetElementFromObj(graphPtr, objv[5], &lastPtr) != TCL_OK) return TCL_ERROR; - } + if (lastPtr->hide() && ((legendPtr->flags & SELECT_CLEAR) == 0)) { Tcl_AppendResult(interp, "can't select hidden node \"", Tcl_GetString(objv[5]), "\"", (char *)NULL); return TCL_ERROR; } } - if (firstPtr == lastPtr) { + + if (firstPtr == lastPtr) SelectEntry(legendPtr, firstPtr); - } else { + else SelectRange(legendPtr, firstPtr, lastPtr); - } - /* Set both the anchor and the mark. Indicates that a single entry is - * selected. */ - if (legendPtr->selAnchorPtr_ == NULL) { + + // Set both the anchor and the mark. Indicates that a single entry is + // selected + if (legendPtr->selAnchorPtr_ == NULL) legendPtr->selAnchorPtr_ = firstPtr; - } - if (ops->exportSelection) { - Tk_OwnSelection(graphPtr->tkwin, XA_PRIMARY, LostSelectionProc, - legendPtr); - } - Blt_Legend_EventuallyRedraw(graphPtr); + + if (ops->exportSelection) + Tk_OwnSelection(graphPtr->tkwin, XA_PRIMARY, LostSelectionProc, legendPtr); + + graphPtr->legend->eventuallyRedraw(); + if (ops->selectCmd) EventuallyInvokeSelectCmd(legendPtr); @@ -532,7 +535,8 @@ static void ClearSelection(Legend* legendPtr) Tcl_InitHashTable(&legendPtr->selectTable_, TCL_ONE_WORD_KEYS); Blt_Chain_Reset(legendPtr->selected_); - Blt_Legend_EventuallyRedraw(legendPtr->graphPtr_); + legendPtr->eventuallyRedraw(); + if (ops->selectCmd) EventuallyInvokeSelectCmd(legendPtr); } diff --git a/src/bltGrLegdOp.h b/src/bltGrLegdOp.h index 610fc78..4615f83 100644 --- a/src/bltGrLegdOp.h +++ b/src/bltGrLegdOp.h @@ -30,5 +30,7 @@ #ifndef __BltGrLegdOp_h__ #define __BltGrLegdOp_h__ +extern int Blt_LegendOp(Graph *graphPtr, Tcl_Interp* interp, int objc, + Tcl_Obj* const objv[]); #endif diff --git a/src/bltGraph.C b/src/bltGraph.C index 2b270e5..ae93c03 100644 --- a/src/bltGraph.C +++ b/src/bltGraph.C @@ -44,6 +44,7 @@ extern "C" { #include "bltGrMarker.h" #include "bltGrMarkerOp.h" #include "bltGrLegd.h" +#include "bltGrLegdOp.h" using namespace Blt; @@ -617,7 +618,7 @@ static void DisplayGraph(ClientData clientData) Blt_DrawActiveElements(graphPtr, drawable); /* Don't draw legend in the plot area. */ if ((graphPtr->legend->site() & LEGEND_PLOTAREA_MASK) && - (Blt_Legend_IsRaised(graphPtr))) + (graphPtr->legend->isRaised())) graphPtr->legend->draw(drawable); /* Draw 3D border just inside of the focus highlight ring. */ @@ -754,9 +755,9 @@ static int ExtentsOp(Graph* graphPtr, Tcl_Interp* interp, int objc, (strncmp("legend", string, length) == 0)) { Tcl_Obj* listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **)NULL); Tcl_ListObjAppendElement(interp, listObjPtr, - Tcl_NewIntObj(Blt_Legend_X(graphPtr))); + Tcl_NewIntObj(graphPtr->legend->x())); Tcl_ListObjAppendElement(interp, listObjPtr, - Tcl_NewIntObj(Blt_Legend_Y(graphPtr))); + Tcl_NewIntObj(graphPtr->legend->y())); Tcl_ListObjAppendElement(interp, listObjPtr, Tcl_NewIntObj(graphPtr->legend->width())); Tcl_ListObjAppendElement(interp, listObjPtr, @@ -1192,7 +1193,7 @@ static void DrawPlot(Graph* graphPtr, Drawable drawable) Blt::DrawMarkers(graphPtr, drawable, MARKER_UNDER); if ((graphPtr->legend->site() & LEGEND_PLOTAREA_MASK) && - (!Blt_Legend_IsRaised(graphPtr))) + (!graphPtr->legend->isRaised())) graphPtr->legend->draw(drawable); Blt_DrawAxisLimits(graphPtr, drawable); @@ -1228,7 +1229,7 @@ void Blt_DrawGraph(Graph* graphPtr, Drawable drawable) /* Don't draw legend in the plot area. */ if ((graphPtr->legend->site() & LEGEND_PLOTAREA_MASK) && - (Blt_Legend_IsRaised(graphPtr))) + (graphPtr->legend->isRaised())) graphPtr->legend->draw(drawable); /* Draw 3D border just inside of the focus highlight ring. */ |