Posted to tcl by patthoyts at Thu Mar 05 22:47:36 GMT 2009view pretty
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c index d901cc6..15548ea 100644 --- a/generic/ttk/ttkButton.c +++ b/generic/ttk/ttkButton.c @@ -11,8 +11,7 @@ /* Bit fields for OptionSpec mask field: */ -#define STATE_CHANGED (0x100) /* -state option changed */ -#define DEFAULTSTATE_CHANGED (0x200) /* -default option changed */ +#define DEFAULTSTATE_CHANGED (0x100) /* -default option changed */ /*------------------------------------------------------------------------ * +++ Base resources for labels, buttons, checkbuttons, etc: diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c index d86e3f4..b775419 100644 --- a/generic/ttk/ttkEntry.c +++ b/generic/ttk/ttkEntry.c @@ -141,9 +141,8 @@ typedef struct { /* * Extra mask bits for Tk_SetOptions() */ -#define STATE_CHANGED (0x100) /* -state option changed */ -#define TEXTVAR_CHANGED (0x200) /* -textvariable option changed */ -#define SCROLLCMD_CHANGED (0x400) /* -xscrollcommand option changed */ +#define TEXTVAR_CHANGED (0x100) /* -textvariable option changed */ +#define SCROLLCMD_CHANGED (0x200) /* -xscrollcommand option changed */ /* * Default option values: diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c index a38ff68..06742c9 100644 --- a/generic/ttk/ttkTreeview.c +++ b/generic/ttk/ttkTreeview.c @@ -20,8 +20,6 @@ static const int HALO = 4; /* separator */ #define TTK_STATE_OPEN TTK_STATE_USER1 #define TTK_STATE_LEAF TTK_STATE_USER2 -#define STATE_CHANGED (0x100) /* item state option changed */ - /*------------------------------------------------------------------------ * +++ Tree items. * diff --git a/generic/ttk/ttkWidget.c b/generic/ttk/ttkWidget.c index 57b0d38..c1b7f06 100644 --- a/generic/ttk/ttkWidget.c +++ b/generic/ttk/ttkWidget.c @@ -454,6 +454,7 @@ int TtkWidgetConstructorObjCmd( Tcl_Release(corePtr); + UpdateLayout(interp, corePtr); SizeChanged(corePtr); Tk_MakeWindowExist(tkwin); @@ -483,16 +484,27 @@ Ttk_Layout TtkWidgetGetLayout( Tcl_Interp *interp, Ttk_Theme themePtr, void *recordPtr) { WidgetCore *corePtr = recordPtr; + Ttk_Layout layout; + Tcl_DString ds; const char *styleName = 0; + Tcl_DStringInit(&ds); if (corePtr->styleObj) styleName = Tcl_GetString(corePtr->styleObj); - if (!styleName || *styleName == '\0') + if (!styleName || *styleName == '\0') { styleName = corePtr->widgetSpec->className; + if (corePtr->state & TTK_STATE_READONLY) { + Tcl_DStringAppend(&ds, "Readonly.", -1); + Tcl_DStringAppend(&ds, styleName, -1); + styleName = Tcl_DStringValue(&ds); + } + } - return Ttk_CreateLayout(interp, themePtr, styleName, + layout = Ttk_CreateLayout(interp, themePtr, styleName, recordPtr, corePtr->optionTable, corePtr->tkwin); + Tcl_DStringFree(&ds); + return layout; } /* @@ -682,6 +694,10 @@ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr) SizeChanged(corePtr); } + if (mask & STATE_CHANGED) { + UpdateLayout(interp, corePtr); + } + TtkRedisplayWidget(corePtr); result = Tcl_NewObj(); } @@ -727,6 +743,10 @@ int TtkWidgetStateCommand( corePtr->state = Ttk_ModifyState(corePtr->state, &spec); changed = corePtr->state ^ oldState; + if (changed) { + UpdateLayout(interp, corePtr); + } + TtkRedisplayWidget(corePtr); Tcl_SetObjResult(interp, diff --git a/generic/ttk/ttkWidget.h b/generic/ttk/ttkWidget.h index b7b4c5d..9a0a394 100644 --- a/generic/ttk/ttkWidget.h +++ b/generic/ttk/ttkWidget.h @@ -20,6 +20,7 @@ #define READONLY_OPTION 0x1 #define STYLE_CHANGED 0x2 #define GEOMETRY_CHANGED 0x4 +#define STATE_CHANGED 0x8 /* -state option changed */ /* * Core widget elements diff --git a/library/ttk/vistaTheme.tcl b/library/ttk/vistaTheme.tcl index 76f3e3e..4ac15e4 100644 --- a/library/ttk/vistaTheme.tcl +++ b/library/ttk/vistaTheme.tcl @@ -51,6 +51,12 @@ namespace eval ttk::theme::vista { # Combobox ttk::style configure TCombobox -padding 2 + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -foreground [list {readonly focus} SystemHighlightText] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; ttk::style element create Combobox.field vsapi \ COMBOBOX 2 {{} 1} ttk::style element create Combobox.border vsapi \ @@ -67,20 +73,30 @@ namespace eval ttk::theme::vista { } } } + ttk::style map Readonly.TCombobox -foreground {} -focusfill {} \ + -selectbackground {} -selectforeground {} + ttk::style element create Combobox.readonlyborder vsapi \ + COMBOBOX 5 {disabled 4 pressed 3 active 2 hover 2 {} 1} + ttk::style element create Combobox.readonlyarrow vsapi \ + COMBOBOX 6 {disabled 4 {} 1} + ttk::style layout Readonly.TCombobox { + Combobox.readonlyborder -sticky nswe -border 0 -children { + Combobox.readonlyarrow -side right -sticky ns + Combobox.padding -expand 1 -sticky nswe -children { + focus -expand 1 -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + } + } # Vista.Combobox droplist frame ttk::style element create ComboboxPopdownFrame.background vsapi\ - LISTBOX 3 {disabled 4 active 3 focus 2 {} 1} + LISTBOX 3 {disabled 4 active 3 focus 2 {} 1} -padding 2 ttk::style layout ComboboxPopdownFrame { ComboboxPopdownFrame.background -sticky news -border 1 -children { ComboboxPopdownFrame.padding -sticky news } } - ttk::style map TCombobox \ - -selectbackground [list !focus SystemWindow] \ - -selectforeground [list !focus SystemWindowText] \ - -foreground [list {readonly focus} SystemHighlightText] \ - -focusfill [list {readonly focus} SystemHighlight] \ - ; # Entry ttk::style configure TEntry -padding {1 1 1 1} ;# Needs lookup