diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkTreeColumn.c | 77 | ||||
-rw-r--r-- | generic/tkTreeCtrl.c | 21 | ||||
-rw-r--r-- | generic/tkTreeCtrl.h | 13 | ||||
-rw-r--r-- | generic/tkTreeItem.c | 17 | ||||
-rw-r--r-- | generic/tkTreeStyle.c | 11 | ||||
-rw-r--r-- | generic/tkTreeUtils.c | 100 |
6 files changed, 220 insertions, 19 deletions
diff --git a/generic/tkTreeColumn.c b/generic/tkTreeColumn.c index c421f24..eca2ba7 100644 --- a/generic/tkTreeColumn.c +++ b/generic/tkTreeColumn.c @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003 ActiveState Corporation * - * RCS: @(#) $Id: tkTreeColumn.c,v 1.55 2006/11/03 21:24:31 treectrl Exp $ + * RCS: @(#) $Id: tkTreeColumn.c,v 1.56 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -57,6 +57,7 @@ struct Column PerStateInfo arrowImage; /* -arrowimage */ Pixmap bitmap; /* -bitmap */ Tcl_Obj *itemBgObj; /* -itembackground */ + TreeStyle itemStyle; /* -itemstyle */ int button; /* -button */ Tcl_Obj *textPadXObj; /* -textpadx */ int *textPadX; /* -textpadx */ @@ -342,6 +343,9 @@ static Tk_OptionSpec columnSpecs[] = { {TK_OPTION_STRING, "-itembackground", (char *) NULL, (char *) NULL, (char *) NULL, Tk_Offset(Column, itemBgObj), -1, TK_OPTION_NULL_OK, (ClientData) NULL, COLU_CONF_ITEMBG}, + {TK_OPTION_CUSTOM, "-itemstyle", (char *) NULL, (char *) NULL, + (char *) NULL, -1, Tk_Offset(Column, itemStyle), + TK_OPTION_NULL_OK, (ClientData) &styleCO, 0}, {TK_OPTION_JUSTIFY, "-justify", (char *) NULL, (char *) NULL, "left", -1, Tk_Offset(Column, justify), 0, (ClientData) NULL, COLU_CONF_DISPLAY | COLU_CONF_JUSTIFY}, @@ -1870,6 +1874,7 @@ Column_Move( hPtr = Tcl_NextHashEntry(&search); } +#ifdef DEPRECATED /* Re-order -defaultstyle */ numStyles = tree->defaultStyle.numStyles; if ((numStyles > 0) && ((before->index < numStyles) || @@ -1931,6 +1936,7 @@ Column_Move( tree->defaultStyle.numStyles = numStyles; } } +#endif /* DEPRECATED */ /* Unlink. */ prev = move->prev; @@ -2068,11 +2074,17 @@ Column_Config( saved.itemBgCount = column->itemBgCount; } - if ((column == (Column *) tree->columnTail) && - (column->lock != COLUMN_LOCK_NONE)) { - FormatResult(tree->interp, - "can't change the -lock option of the tail column"); - continue; + if (column == (Column *) tree->columnTail) { + if (column->itemStyle != NULL) { + FormatResult(tree->interp, + "can't change the -itemstyle option of the tail column"); + continue; + } + if (column->lock != COLUMN_LOCK_NONE) { + FormatResult(tree->interp, + "can't change the -lock option of the tail column"); + continue; + } } /* @@ -3369,6 +3381,59 @@ TreeColumn_BackgroundGC( /* *---------------------------------------------------------------------- * + * TreeColumn_ItemStyle -- + * + * Return the value of the -itemstyle config option for a column. + * + * Results: + * TreeStyle or NULL. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +TreeStyle +TreeColumn_ItemStyle( + TreeColumn column_ /* Column token. */ + ) +{ + return ((Column *) column_)->itemStyle; +} + +/* + *---------------------------------------------------------------------- + * + * TreeColumn_StyleDeleted -- + * + * Called when a master style is deleted. + * + * Results: + * Clear the column's -itemstyle option if it is the style being + * deleted. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +void +TreeColumn_StyleDeleted( + TreeColumn column_, /* Column token. */ + TreeStyle style /* Style that was deleted. */ + ) +{ + Column *column = (Column *) column_; + + if (column->itemStyle == style) + column->itemStyle = NULL; +} + +/* + *---------------------------------------------------------------------- + * * TreeColumn_Visible -- * * Return the value of the -visible config option for a column. diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index 7de1cea..fe41840 100644 --- a/generic/tkTreeCtrl.c +++ b/generic/tkTreeCtrl.c @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003-2005 ActiveState, a division of Sophos * - * RCS: @(#) $Id: tkTreeCtrl.c,v 1.79 2006/11/03 19:56:15 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.c,v 1.80 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -118,9 +118,11 @@ static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_CURSOR, "-cursor", "cursor", "Cursor", (char *) NULL, -1, Tk_Offset(TreeCtrl, cursor), TK_OPTION_NULL_OK, (ClientData) NULL, 0}, +#ifdef DEPRECATED {TK_OPTION_STRING, "-defaultstyle", "defaultStyle", "DefaultStyle", (char *) NULL, Tk_Offset(TreeCtrl, defaultStyle.stylesObj), -1, TK_OPTION_NULL_OK, (ClientData) NULL, TREE_CONF_DEFSTYLE}, +#endif /* DEPRECATED */ {TK_OPTION_STRING_TABLE, "-doublebuffer", "doubleBuffer", "DoubleBuffer", "item", -1, Tk_Offset(TreeCtrl, doubleBuffer), @@ -1261,8 +1263,10 @@ TreeConfigure( mask |= TREE_CONF_BUTBMP; if (tree->buttonImage.obj != NULL) mask |= TREE_CONF_BUTIMG; +#ifdef DEPRECATED if (tree->defaultStyle.stylesObj != NULL) mask |= TREE_CONF_DEFSTYLE; +#endif if (tree->wrapObj != NULL) mask |= TREE_CONF_WRAP; if (!ObjectIsEmpty(tree->itemWidthObj)) @@ -1277,10 +1281,12 @@ TreeConfigure( if (mask & TREE_CONF_BG_IMAGE) saved.backgroundImage = tree->backgroundImage; +#ifdef DEPRECATED if (mask & TREE_CONF_DEFSTYLE) { saved.defaultStyle.styles = tree->defaultStyle.styles; saved.defaultStyle.numStyles = tree->defaultStyle.numStyles; } +#endif if (mask & TREE_CONF_WRAP) { saved.wrapMode = tree->wrapMode; saved.wrapArg = tree->wrapArg; @@ -1302,6 +1308,7 @@ TreeConfigure( } } +#ifdef DEPRECATED if (mask & TREE_CONF_DEFSTYLE) { if (tree->defaultStyle.stylesObj == NULL) { tree->defaultStyle.styles = NULL; @@ -1333,6 +1340,7 @@ TreeConfigure( maskFree |= TREE_CONF_DEFSTYLE; } } +#endif /* DEPRECATED */ /* Parse -wrap string into wrapMode and wrapArg */ if (mask & TREE_CONF_WRAP) { @@ -1397,11 +1405,12 @@ badWrap: if (saved.backgroundImage != NULL) Tree_FreeImage(tree, saved.backgroundImage); } +#ifdef DEPRECATED if (mask & TREE_CONF_DEFSTYLE) { if (saved.defaultStyle.styles != NULL) ckfree((char *) saved.defaultStyle.styles); } - +#endif Tk_FreeSavedOptions(&savedOptions); break; } else { @@ -1414,19 +1423,22 @@ badWrap: */ if (maskFree & TREE_CONF_BG_IMAGE) Tree_FreeImage(tree, tree->backgroundImage); +#ifdef DEPRECATED if (maskFree & TREE_CONF_DEFSTYLE) ckfree((char *) tree->defaultStyle.styles); - +#endif /* * Restore old values. */ if (mask & TREE_CONF_BG_IMAGE) { tree->backgroundImage = saved.backgroundImage; } +#ifdef DEPRECATED if (mask & TREE_CONF_DEFSTYLE) { tree->defaultStyle.styles = saved.defaultStyle.styles; tree->defaultStyle.numStyles = saved.defaultStyle.numStyles; } +#endif if (mask & TREE_CONF_WRAP) { tree->wrapMode = saved.wrapMode; tree->wrapArg = saved.wrapArg; @@ -1765,9 +1777,10 @@ TreeDestroy( Tcl_DeleteHashTable(&tree->selection); +#ifdef DEPRECATED if (tree->defaultStyle.styles != NULL) ckfree((char *) tree->defaultStyle.styles); - +#endif #ifdef ALLOC_HAX AllocHax_Finalize(tree->allocData); #endif diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h index ca0012e..b6f935d 100644 --- a/generic/tkTreeCtrl.h +++ b/generic/tkTreeCtrl.h @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003 ActiveState Corporation * - * RCS: @(#) $Id: tkTreeCtrl.h,v 1.63 2006/11/03 18:43:48 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.h,v 1.64 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkPort.h" @@ -334,12 +334,13 @@ struct TreeCtrl int scanYOrigin; Tk_OptionTable styleOptionTable; +#ifdef DEPRECATED struct { Tcl_Obj *stylesObj; TreeStyle *styles; int numStyles; } defaultStyle; - +#endif /* DEPRECATED */ Tk_OptionTable itemOptionTable; int itemPrefixLen; /* -itemprefix */ int columnPrefixLen; /* -columnprefix */ @@ -678,12 +679,16 @@ extern TreeColumn TreeColumn_Prev(TreeColumn column_); extern int TreeColumn_FixedWidth(TreeColumn column_); extern int TreeColumn_MinWidth(TreeColumn column_); extern int TreeColumn_MaxWidth(TreeColumn column_); -extern int TreeColumn_StepWidth(TreeColumn column_); extern int TreeColumn_NeededWidth(TreeColumn column_); extern int TreeColumn_UseWidth(TreeColumn column_); extern int TreeColumn_Offset(TreeColumn column_); extern Tk_Justify TreeColumn_Justify(TreeColumn column_); +#ifdef DEPRECATED extern int TreeColumn_WidthHack(TreeColumn column_); +extern int TreeColumn_StepWidth(TreeColumn column_); +#endif +extern TreeStyle TreeColumn_ItemStyle(TreeColumn column_); +extern void TreeColumn_StyleDeleted(TreeColumn column_, TreeStyle style); extern int TreeColumn_Visible(TreeColumn column_); extern int TreeColumn_Squeeze(TreeColumn column_); extern GC TreeColumn_BackgroundGC(TreeColumn column_, int which); @@ -1052,7 +1057,7 @@ extern int DynamicCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName, extern Tk_ObjCustomOption pixelsCO; extern Tk_ObjCustomOption stringCO; - +extern Tk_ObjCustomOption styleCO; /*****/ diff --git a/generic/tkTreeItem.c b/generic/tkTreeItem.c index 199aff5..be05c36 100644 --- a/generic/tkTreeItem.c +++ b/generic/tkTreeItem.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeItem.c,v 1.74 2006/10/30 23:03:22 treectrl Exp $ + * RCS: @(#) $Id: tkTreeItem.c,v 1.75 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -4702,6 +4702,7 @@ ItemCreateCmd( Item *head = NULL, *tail = NULL; Tcl_Obj *listObj = NULL, *tagsObj = NULL; TagInfo *tagInfo = NULL; + TreeColumn treeColumn; for (i = 3; i < objc; i += 2) { if (Tcl_GetIndexFromObj(interp, objv[i], optionNames, "option", 0, @@ -4808,18 +4809,32 @@ ItemCreateCmd( item->state &= ~STATE_OPEN; item->fixedHeight = height; + /* Apply each column's -itemstyle option. */ + for (treeColumn = tree->columns; treeColumn != NULL; + treeColumn = TreeColumn_Next(treeColumn)) { + TreeStyle style = TreeColumn_ItemStyle(treeColumn); + if (style != NULL) { + Column *column = Item_CreateColumn(tree, item, + TreeColumn_Index(treeColumn), NULL); + column->style = TreeStyle_NewInstance(tree, style); + } + } +#ifdef DEPRECATED /* Apply default styles */ if (tree->defaultStyle.numStyles) { int i, n = MIN(tree->columnCount, tree->defaultStyle.numStyles); for (i = 0; i < n; i++) { Column *column = Item_CreateColumn(tree, item, i, NULL); + if (column->style != NULL) + continue; if (tree->defaultStyle.styles[i] != NULL) { column->style = TreeStyle_NewInstance(tree, tree->defaultStyle.styles[i]); } } } +#endif /* DEPRECATED */ if (tagInfo != NULL) { if (count == 1) { diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c index 2ee319f..d80b5b1 100644 --- a/generic/tkTreeStyle.c +++ b/generic/tkTreeStyle.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeStyle.c,v 1.57 2006/11/03 18:54:41 treectrl Exp $ + * RCS: @(#) $Id: tkTreeStyle.c,v 1.58 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -4010,6 +4010,14 @@ Style_Deleted( hPtr = Tcl_NextHashEntry(&search); } + /* Update each column's -itemstyle option */ + treeColumn = tree->columns; + while (treeColumn != NULL) { + TreeColumn_StyleDeleted(treeColumn, (TreeStyle) masterStyle); + treeColumn = TreeColumn_Next(treeColumn); + } + +#ifdef DEPRECATED /* Update -defaultstyle option */ if (tree->defaultStyle.stylesObj != NULL) { @@ -4031,6 +4039,7 @@ Style_Deleted( Tcl_ListObjReplace(tree->interp, stylesObj, columnIndex, 1, 1, &emptyObj); } } +#endif /* DEPRECATED */ } /* diff --git a/generic/tkTreeUtils.c b/generic/tkTreeUtils.c index ff83c37..372d886 100644 --- a/generic/tkTreeUtils.c +++ b/generic/tkTreeUtils.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeUtils.c,v 1.49 2006/11/03 18:54:12 treectrl Exp $ + * RCS: @(#) $Id: tkTreeUtils.c,v 1.50 2006/11/03 22:30:34 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -5595,8 +5595,8 @@ PixelsCO_Set( } if (internalPtr != NULL) { - *((int *) saveInternalPtr) = *((int *) internalPtr); - *((int *) internalPtr) = new; + *((int *) saveInternalPtr) = *internalPtr; + *internalPtr = new; } return TCL_OK; @@ -5636,3 +5636,97 @@ Tk_ObjCustomOption pixelsCO = (ClientData) NULL }; +/* + *---------------------------------------------------------------------- + * + * StyleCO_Set -- + * StyleCO_Get -- + * StyleCO_Restore -- + * + * These procedures implement a TK_OPTION_CUSTOM where the custom + * option is a TreeStyle. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static int +StyleCO_Set( + ClientData clientData, + Tcl_Interp *interp, + Tk_Window tkwin, + Tcl_Obj **valuePtr, + char *recordPtr, + int internalOffset, + char *saveInternalPtr, + int flags + ) +{ + TreeCtrl *tree = (TreeCtrl *) ((TkWindow *) tkwin)->instanceData; + int objEmpty; + TreeStyle *internalPtr, new; + + if (internalOffset >= 0) + internalPtr = (TreeStyle *) (recordPtr + internalOffset); + else + internalPtr = NULL; + + objEmpty = ObjectIsEmpty((*valuePtr)); + + if ((flags & TK_OPTION_NULL_OK) && objEmpty) { + (*valuePtr) = NULL; + new = NULL; + } else { + if (TreeStyle_FromObj(tree, *valuePtr, &new) != TCL_OK) + return TCL_ERROR; + } + + if (internalPtr != NULL) { + *((TreeStyle *) saveInternalPtr) = *internalPtr; + *internalPtr = new; + } + + return TCL_OK; +} + +static Tcl_Obj * +StyleCO_Get( + ClientData clientData, + Tk_Window tkwin, + char *recordPtr, + int internalOffset + ) +{ + TreeStyle *internalPtr = (TreeStyle *) (recordPtr + internalOffset); + + if (*internalPtr == NULL) + return NULL; + return TreeStyle_ToObj(*internalPtr); +} + +static void +StyleCO_Restore( + ClientData clientData, + Tk_Window tkwin, + char *internalPtr, + char *saveInternalPtr + ) +{ + *(TreeStyle *) internalPtr = *(TreeStyle *) saveInternalPtr; +} + +Tk_ObjCustomOption styleCO = +{ + "style", + StyleCO_Set, + StyleCO_Get, + StyleCO_Restore, + NULL, + (ClientData) NULL +}; + |