summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tkTreeColumn.c77
-rw-r--r--generic/tkTreeCtrl.c21
-rw-r--r--generic/tkTreeCtrl.h13
-rw-r--r--generic/tkTreeItem.c17
-rw-r--r--generic/tkTreeStyle.c11
-rw-r--r--generic/tkTreeUtils.c100
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
+};
+