diff --git a/Nasal/canvas/gui/Widget.nas b/Nasal/canvas/gui/Widget.nas index 81051b5da..e3a19b824 100644 --- a/Nasal/canvas/gui/Widget.nas +++ b/Nasal/canvas/gui/Widget.nas @@ -13,6 +13,7 @@ gui.Widget = { _focused: 0, _focus_policy: gui.Widget.NoFocus, _hover: 0, + _enabled: 1, _view: nil, _pos: [0, 0], _size: [32, 32] @@ -32,6 +33,17 @@ gui.Widget = { me.setSizeHint([x, y]); me.setMaximumSize([x, y]); }, + setEnabled: func(enabled) + { + if( me._enabled == enabled ) + return me; + + me._enabled = enabled; + me.clearFocus(); + + me._onStateChange(); + return me; + }, # Move the widget to the given position (relative to its parent) move: func(x, y) { @@ -72,6 +84,9 @@ gui.Widget = { if( canvas._focused_widget != nil ) canvas._focused_widget.clearFocus(); + if( !me._enabled ) + return me; + me._focused = 1; canvas._focused_widget = me; diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas index 0e20a714e..887997428 100644 --- a/Nasal/canvas/gui/styles/DefaultStyle.nas +++ b/Nasal/canvas/gui/styles/DefaultStyle.nas @@ -79,16 +79,24 @@ DefaultStyle.widgets.button = { me._label.setTranslation(w / 2, h / 2 + 5); - if( model._focused and !backdrop ) - file ~= "-focused"; - - if( model._hover and !model._down ) + if( model._enabled ) { - file ~= "-hover"; - me._bg.set("fill", me._style.getColor("button_bg_color_hover")); + if( model._focused and !backdrop ) + file ~= "-focused"; + + if( model._hover and !model._down ) + { + file ~= "-hover"; + me._bg.set("fill", me._style.getColor("button_bg_color_hover")); + } + else + me._bg.set("fill", me._style.getColor("button_bg_color")); } else - me._bg.set("fill", me._style.getColor("button_bg_color")); + { + file ~= "-disabled"; + me._bg.set("fill", me._style.getColor("button_bg_color_insensitive")); + } me._border.set("src", file ~ ".png"); } diff --git a/Nasal/canvas/gui/widgets/Button.nas b/Nasal/canvas/gui/widgets/Button.nas index 5da879a95..769ec43ac 100644 --- a/Nasal/canvas/gui/widgets/Button.nas +++ b/Nasal/canvas/gui/widgets/Button.nas @@ -62,9 +62,9 @@ gui.widgets.Button = { _setView: func(view) { var el = view._root; - el.addEventListener("mousedown", func me.setDown(1)); - el.addEventListener("mouseup", func me.setDown(0)); - el.addEventListener("click", func me.toggle()); + el.addEventListener("mousedown", func if( me._enabled ) me.setDown(1)); + el.addEventListener("mouseup", func if( me._enabled ) me.setDown(0)); + el.addEventListener("click", func if( me._enabled ) me.toggle()); el.addEventListener("mouseleave",func me.setDown(0)); el.addEventListener("drag", func(e) e.stopPropagation()); diff --git a/Nasal/canvas/gui/widgets/ScrollArea.nas b/Nasal/canvas/gui/widgets/ScrollArea.nas index cc434f6ba..64528525c 100644 --- a/Nasal/canvas/gui/widgets/ScrollArea.nas +++ b/Nasal/canvas/gui/widgets/ScrollArea.nas @@ -126,18 +126,30 @@ gui.widgets.ScrollArea = { view.vert.addEventListener ( "drag", - func(e) me.moveTo(me._scroll_pos[0], me._drag_offsetY + e.clientY) + func(e) + { + if( me._enabled ) + me.moveTo(me._scroll_pos[0], me._drag_offsetY + e.clientY); + } ); view.horiz.addEventListener ( "drag", - func(e) me.moveTo(me._drag_offsetX + e.clientX, me._scroll_pos[1]) + func(e) + { + if( me._enabled ) + me.moveTo(me._drag_offsetX + e.clientX, me._scroll_pos[1]); + } ); view._root.addEventListener ( "wheel", - func(e) me.moveTo(me._scroll_pos[0], me._scroll_pos[1] - e.deltaY) + func(e) + { + if( me._enabled ) + me.moveTo(me._scroll_pos[0], me._scroll_pos[1] - e.deltaY); + } ); call(gui.Widget._setView, [view], me); diff --git a/gui/styles/AmbianceClassic/style.xml b/gui/styles/AmbianceClassic/style.xml index 6ec09432d..42ef16fa8 100644 --- a/gui/styles/AmbianceClassic/style.xml +++ b/gui/styles/AmbianceClassic/style.xml @@ -78,6 +78,12 @@ <blue type="float">0.988</blue> </button_bg_color_hover> + <button_bg_color_insensitive> + <red type="float">0.89</red> + <green type="float">0.89</green> + <blue type="float">0.89</blue> + </button_bg_color_insensitive> + </colors> </PropertyList> diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png new file mode 100644 index 000000000..2ed947c2e Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/backdrop-button-active-disabled.png differ diff --git a/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png b/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png new file mode 100644 index 000000000..27285e28c Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/backdrop-button-disabled.png differ diff --git a/gui/styles/AmbianceClassic/widgets/button-active-disabled.png b/gui/styles/AmbianceClassic/widgets/button-active-disabled.png new file mode 100644 index 000000000..9dc667036 Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/button-active-disabled.png differ diff --git a/gui/styles/AmbianceClassic/widgets/button-disabled.png b/gui/styles/AmbianceClassic/widgets/button-disabled.png new file mode 100644 index 000000000..6dde09451 Binary files /dev/null and b/gui/styles/AmbianceClassic/widgets/button-disabled.png differ