summaryrefslogtreecommitdiffstats
path: root/generic/ttk/ttkWidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'generic/ttk/ttkWidget.h')
-rw-r--r--generic/ttk/ttkWidget.h269
1 files changed, 269 insertions, 0 deletions
diff --git a/generic/ttk/ttkWidget.h b/generic/ttk/ttkWidget.h
new file mode 100644
index 0000000..aa749ee
--- /dev/null
+++ b/generic/ttk/ttkWidget.h
@@ -0,0 +1,269 @@
+/* $Id: ttkWidget.h,v 1.1 2006/10/31 01:42:26 hobbs Exp $
+ * Copyright (c) 2003, Joe English
+ *
+ * Helper routines for widget implementations.
+ *
+ * Require: ttkTheme.h.
+ */
+
+#ifndef WIDGET_H
+#define WIDGET_H 1
+
+/* State flags for 'flags' field.
+ * @@@ todo: distinguish:
+ * need reconfigure, need redisplay, redisplay pending
+ */
+#define WIDGET_DESTROYED 0x0001
+#define REDISPLAY_PENDING 0x0002 /* scheduled call to RedisplayWidget */
+#define WIDGET_REALIZED 0x0010 /* set at first ConfigureNotify */
+#define CURSOR_ON 0x0020 /* See BlinkCursor() */
+#define WIDGET_USER_FLAG 0x0100 /* 0x0100 - 0x8000 for user flags */
+
+/*
+ * Bit fields for OptionSpec 'mask' field:
+ */
+#define READONLY_OPTION 0x1
+#define STYLE_CHANGED 0x2
+#define GEOMETRY_CHANGED 0x4
+
+/*
+ * Core widget elements
+ */
+typedef struct WidgetSpec_ WidgetSpec; /* Forward */
+
+typedef struct
+{
+ Tk_Window tkwin; /* Window associated with widget */
+ Tcl_Interp *interp; /* Interpreter associated with widget. */
+ WidgetSpec *widgetSpec; /* Widget class hooks */
+ Tcl_Command widgetCmd; /* Token for widget command. */
+ Tk_OptionTable optionTable; /* Option table */
+ Ttk_Layout layout; /* Widget layout */
+
+ /*
+ * Storage for resources:
+ */
+ Tcl_Obj *takeFocusPtr; /* Storage for -takefocus option */
+ Tcl_Obj *cursorObj; /* Storage for -cursor option */
+ Tcl_Obj *styleObj; /* Name of currently-applied style */
+ Tcl_Obj *classObj; /* Class name (readonly option) */
+
+ Ttk_State state; /* Current widget state */
+ unsigned int flags; /* internal flags, see above */
+
+} WidgetCore;
+
+/*
+ * Subcommand specifications:
+ */
+typedef int (*WidgetSubcommandProc)(
+ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr);
+typedef struct {
+ const char *name;
+ WidgetSubcommandProc command;
+} WidgetCommandSpec;
+
+extern int WidgetEnsembleCommand( /* Run an ensemble command */
+ WidgetCommandSpec *commands, int cmdIndex,
+ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr);
+
+/*
+ * Widget specifications:
+ */
+struct WidgetSpec_
+{
+ const char *className; /* Widget class name */
+ size_t recordSize; /* #bytes in widget record */
+ Tk_OptionSpec *optionSpecs; /* Option specifications */
+ WidgetCommandSpec *commands; /* Widget instance subcommands */
+
+ /*
+ * Hooks:
+ */
+ int (*initializeProc)(Tcl_Interp *, void *recordPtr);
+ void (*cleanupProc)(void *recordPtr);
+ int (*configureProc)(Tcl_Interp *, void *recordPtr, int flags);
+ int (*postConfigureProc)(Tcl_Interp *, void *recordPtr, int flags);
+ Ttk_Layout (*getLayoutProc)(Tcl_Interp *,Ttk_Theme, void *recordPtr);
+ int (*sizeProc)(void *recordPtr, int *widthPtr, int *heightPtr);
+ void (*layoutProc)(void *recordPtr);
+ void (*displayProc)(void *recordPtr, Drawable d);
+};
+
+/*
+ * Common factors for widget implementations:
+ */
+extern int NullInitialize(Tcl_Interp *, void *);
+extern int NullPostConfigure(Tcl_Interp *, void *, int);
+extern void NullCleanup(void *recordPtr);
+extern Ttk_Layout WidgetGetLayout(Tcl_Interp *, Ttk_Theme, void *recordPtr);
+extern Ttk_Layout WidgetGetOrientedLayout(
+ Tcl_Interp *, Ttk_Theme, void *recordPtr, Tcl_Obj *orientObj);
+extern int WidgetSize(void *recordPtr, int *w, int *h);
+extern void WidgetDoLayout(void *recordPtr);
+extern void WidgetDisplay(void *recordPtr, Drawable);
+
+extern int CoreConfigure(Tcl_Interp*, void *, int mask);
+
+/* Commands present in all widgets:
+ */
+extern int WidgetConfigureCommand(Tcl_Interp *, int, Tcl_Obj*const[], void *);
+extern int WidgetCgetCommand(Tcl_Interp *, int, Tcl_Obj*const[], void *);
+extern int WidgetInstateCommand(Tcl_Interp *, int, Tcl_Obj*const[], void *);
+extern int WidgetStateCommand(Tcl_Interp *, int, Tcl_Obj*const[], void *);
+
+/* Common widget commands:
+ */
+extern int WidgetIdentifyCommand(Tcl_Interp *, int, Tcl_Obj*const[], void *);
+
+extern int WidgetConstructorObjCmd(ClientData,Tcl_Interp*,int,Tcl_Obj*CONST[]);
+
+#define RegisterWidget(interp, name, specPtr) \
+ Tcl_CreateObjCommand(interp, name, \
+ WidgetConstructorObjCmd, (ClientData)specPtr,NULL)
+
+/* WIDGET_TAKES_FOCUS --
+ * Add this to the OptionSpecs table of widgets that
+ * take keyboard focus during traversal to override
+ * CoreOptionSpec's -takefocus default value:
+ */
+#define WIDGET_TAKES_FOCUS \
+ {TK_OPTION_STRING, "-takefocus", "takeFocus", "TakeFocus", \
+ "ttk::takefocus", Tk_Offset(WidgetCore, takeFocusPtr), -1, 0,0,0 }
+
+/* WIDGET_INHERIT_OPTIONS(baseOptionSpecs) --
+ * Add this at the end of an OptionSpecs table to inherit
+ * the options from 'baseOptionSpecs'.
+ */
+#define WIDGET_INHERIT_OPTIONS(baseOptionSpecs) \
+ {TK_OPTION_END, 0,0,0, NULL, -1,-1, 0, (ClientData)baseOptionSpecs, 0}
+
+/*
+ * Useful routines for use inside widget implementations:
+ */
+extern int WidgetDestroyed(WidgetCore *);
+#define WidgetDestroyed(corePtr) ((corePtr)->flags & WIDGET_DESTROYED)
+
+extern void WidgetChangeState(WidgetCore *,
+ unsigned int setBits, unsigned int clearBits);
+
+extern void TtkRedisplayWidget(WidgetCore *);
+extern void TtkResizeWidget(WidgetCore *);
+
+extern void TrackElementState(WidgetCore *);
+extern void BlinkCursor(WidgetCore *);
+
+/*
+ * -state option values (compatibility)
+ */
+extern void CheckStateOption(WidgetCore *, Tcl_Obj *);
+
+/*
+ * Variable traces:
+ */
+typedef void (*Ttk_TraceProc)(void *recordPtr, const char *value);
+typedef struct TtkTraceHandle_ Ttk_TraceHandle;
+
+extern Ttk_TraceHandle *Ttk_TraceVariable(
+ Tcl_Interp*, Tcl_Obj *varnameObj, Ttk_TraceProc callback, void *clientData);
+extern void Ttk_UntraceVariable(Ttk_TraceHandle *);
+extern int Ttk_FireTrace(Ttk_TraceHandle *);
+
+/*
+ * Utility routines for managing -image option:
+ */
+extern int GetImageList(
+ Tcl_Interp *, WidgetCore *, Tcl_Obj *imageOption, Tk_Image **imageListPtr);
+extern void FreeImageList(Tk_Image *);
+
+/*
+ * Virtual events:
+ */
+extern void SendVirtualEvent(Tk_Window tgtWin, const char *eventName);
+
+/*
+ * Helper routines for data accessor commands:
+ */
+extern int EnumerateOptions(
+ Tcl_Interp *, void *recordPtr, Tk_OptionSpec *, Tk_OptionTable, Tk_Window);
+extern int GetOptionValue(
+ Tcl_Interp *, void *recordPtr, Tcl_Obj *optName, Tk_OptionTable, Tk_Window);
+
+/*
+ * Helper routines for scrolling widgets (see scroll.c).
+ */
+typedef struct {
+ int first; /* First visible item */
+ int last; /* Last visible item */
+ int total; /* Total #items */
+ char *scrollCmd; /* Widget option */
+} Scrollable;
+
+typedef struct ScrollHandleRec *ScrollHandle;
+
+extern ScrollHandle CreateScrollHandle(WidgetCore *, Scrollable *);
+extern void FreeScrollHandle(ScrollHandle);
+
+extern int ScrollviewCommand(
+ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], ScrollHandle);
+
+extern void ScrollTo(ScrollHandle, int newFirst);
+extern void Scrolled(ScrollHandle, int first, int last, int total);
+extern void ScrollbarUpdateRequired(ScrollHandle);
+
+/*
+ * Tag sets (work in progress, half-baked)
+ */
+
+typedef struct TtkTag *Ttk_Tag;
+typedef struct TtkTagTable *Ttk_TagTable;
+
+extern Ttk_TagTable Ttk_CreateTagTable(Tk_OptionTable, int tagRecSize);
+extern void Ttk_DeleteTagTable(Ttk_TagTable);
+
+extern Ttk_Tag Ttk_GetTag(Ttk_TagTable, const char *tagName);
+extern Ttk_Tag Ttk_GetTagFromObj(Ttk_TagTable, Tcl_Obj *);
+
+extern Tcl_Obj **Ttk_TagRecord(Ttk_Tag);
+
+extern int Ttk_GetTagListFromObj(
+ Tcl_Interp *interp, Ttk_TagTable, Tcl_Obj *objPtr,
+ int *nTags_rtn, void **taglist_rtn);
+
+extern void Ttk_FreeTagList(void **taglist);
+
+
+/*
+ * Useful widget base classes:
+ */
+extern Tk_OptionSpec CoreOptionSpecs[];
+
+/*
+ * String tables for widget resource specifications:
+ */
+
+extern const char *TTKOrientStrings[];
+extern const char *TTKCompoundStrings[];
+extern const char *TTKDefaultStrings[];
+
+/*
+ * ... other option types...
+ */
+extern int TtkGetLabelAnchorFromObj(Tcl_Interp*,Tcl_Obj*,Ttk_PositionSpec *);
+
+/*
+ * Package initialiation routines:
+ */
+extern void RegisterElements(Tcl_Interp *);
+
+#if defined(__WIN32__)
+#define Ttk_PlatformInit Ttk_WinPlatformInit
+extern int Ttk_WinPlatformInit(Tcl_Interp *);
+#elif defined(MAC_OSX_TK)
+#define Ttk_PlatformInit Ttk_MacPlatformInit
+extern int Ttk_MacPlatformInit(Tcl_Interp *);
+#else
+#define Ttk_PlatformInit(interp) /* TTK_X11PlatformInit() */
+#endif
+
+#endif /* WIDGET_H */