Navigation Menu

Skip to content

Commit

Permalink
Replace List(Enum(Dimension)) with Enum(Dimensions)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattpap committed Sep 29, 2016
1 parent 82b14b5 commit f23acc2
Show file tree
Hide file tree
Showing 21 changed files with 109 additions and 128 deletions.
3 changes: 3 additions & 0 deletions bokeh/core/enums.py
Expand Up @@ -108,6 +108,9 @@ def enumeration(*values, **kwargs):
#: Specify a vertical/horizontal dimension
Dimension = enumeration("width", "height")

#: Specify a vertical/horizontal dimensions
Dimensions = enumeration("width", "height", "both")

#: Specify a vertical/horizontal orientation for something
Orientation = enumeration("horizontal", "vertical")

Expand Down
44 changes: 28 additions & 16 deletions bokeh/models/tools.py
Expand Up @@ -27,13 +27,26 @@
abstract, Float, Color, Percent,
Any, Auto, Bool, String, Enum, Instance, Either, List, Dict, Tuple, Override
)
from ..core.enums import Dimension, Location, Anchor
from ..core.enums import Dimension, Dimensions, Location, Anchor
from ..util.deprecation import deprecated

from .annotations import BoxAnnotation, PolyAnnotation
from .callbacks import Callback
from .renderers import Renderer
from .layouts import LayoutDOM, Box

def _deprecated_dimensions(tool):
def transformer(value):
deprecated((0, 12, 4), "List(Enum(Dimension)) in %s.dimensions" % tool, "Enum(Dimensions)")

if "width" in value and "height" in value:
return "both"
elif "width" in value or "height" in value:
return value
else:
raise ValueError("empty dimensions' list doesn't make sense")

return transformer

class ToolEvents(Model):
"""
Expand Down Expand Up @@ -166,13 +179,12 @@ class PanTool(Drag):
"""

dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the pan tool is constrained to act in. By default
the pan tool will pan in any dimension, but can be configured to only
pan horizontally across the width of the plot, or vertically across the
height of the plot.
""")

""").accepts(List(Enum(Dimension)), _deprecated_dimensions("PanTool"))

class WheelPanTool(Scroll):
""" *toolbar icon*: |wheel_pan_icon|
Expand Down Expand Up @@ -207,12 +219,12 @@ class WheelZoomTool(Scroll):
"""

dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the wheel zoom tool is constrained to act in. By
default the wheel zoom tool will zoom in any dimension, but can be
configured to only zoom horizontally across the width of the plot, or
vertically across the height of the plot.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("WheelZoomTool"))


class SaveTool(Action):
Expand Down Expand Up @@ -324,12 +336,12 @@ class CrosshairTool(Inspection):
"""

dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the crosshair tool is to track. By default, both a
vertical and horizontal line will be drawn. If only "width" is supplied,
only a horizontal line will be drawn. If only "height" is supplied,
only a vertical line will be drawn.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("CrosshairTool"))

line_color = Color(default="black", help="""
A color to use to stroke paths with.
Expand Down Expand Up @@ -385,15 +397,15 @@ class BoxZoomTool(Drag):
"""

dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the zoom box is to be free in. By default,
users may freely draw zoom boxes with any dimensions. If only
"width" is supplied, the box will be constrained to span the entire
vertical space of the plot, only the horizontal dimension can be
controlled. If only "height" is supplied, the box will be constrained
to span the entire horizontal space of the plot, and the vertical
dimension can be controlled.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("BoxZoomTool"))

overlay = Instance(BoxAnnotation, default=DEFAULT_BOX_OVERLAY, help="""
A shaded annotation drawn to indicate the selection region.
Expand All @@ -420,12 +432,12 @@ class ZoomInTool(Action):
"""
# TODO ZoomInTool dimensions should probably be constrained to be the same as ZoomOutTool
dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the zoom-in tool is constrained to act in. By
default the zoom-in zoom tool will zoom in any dimension, but can be
configured to only zoom horizontally across the width of the plot, or
vertically across the height of the plot.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("ZoomInTool"))

factor = Percent(default=0.1, help="""
Percentage to zoom for each click of the zoom-in tool.
Expand All @@ -441,12 +453,12 @@ class ZoomOutTool(Action):
:height: 18pt
"""
dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the zoom-out tool is constrained to act in. By
default the zoom-out tool will zoom in any dimension, but can be
configured to only zoom horizontally across the width of the plot, or
vertically across the height of the plot.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("ZoomOutTool"))

factor = Percent(default=0.1, help="""
Percentage to zoom for each click of the zoom-in tool.
Expand Down Expand Up @@ -485,15 +497,15 @@ class BoxSelectTool(Drag):
event, or only once, when the selection region is completed. Default: False
""")

dimensions = List(Enum(Dimension), default=["width", "height"], help="""
dimensions = Enum(Dimensions, default="both", help="""
Which dimensions the box selection is to be free in. By default,
users may freely draw selections boxes with any dimensions. If only
"width" is supplied, the box will be constrained to span the entire
vertical space of the plot, only the horizontal dimension can be
controlled. If only "height" is supplied, the box will be constrained
to span the entire horizontal space of the plot, and the vertical
dimension can be controlled.
""")
""").accepts(List(Enum(Dimension)), _deprecated_dimensions("BoxSelectTool"))

callback = Instance(Callback, help="""
A callback to run in the browser on completion of drawing a selection box.
Expand Down
34 changes: 17 additions & 17 deletions bokeh/plotting/helpers.py
Expand Up @@ -223,32 +223,32 @@ def _get_num_minor_ticks(axis_class, num_minor_ticks):
return 5

_known_tools = {
"pan": lambda: PanTool(dimensions=["width", "height"]),
"xpan": lambda: PanTool(dimensions=["width"]),
"ypan": lambda: PanTool(dimensions=["height"]),
"wheel_zoom": lambda: WheelZoomTool(dimensions=["width", "height"]),
"xwheel_zoom": lambda: WheelZoomTool(dimensions=["width"]),
"ywheel_zoom": lambda: WheelZoomTool(dimensions=["height"]),
"zoom_in": lambda: ZoomInTool(dimensions=["width", "height"]),
"xzoom_in": lambda: ZoomInTool(dimensions=["width"]),
"yzoom_in": lambda: ZoomInTool(dimensions=["height"]),
"zoom_out": lambda: ZoomOutTool(dimensions=["width", "height"]),
"xzoom_out": lambda: ZoomOutTool(dimensions=["width"]),
"yzoom_out": lambda: ZoomOutTool(dimensions=["height"]),
"pan": lambda: PanTool(dimensions='both'),
"xpan": lambda: PanTool(dimensions='width'),
"ypan": lambda: PanTool(dimensions='height'),
"wheel_zoom": lambda: WheelZoomTool(dimensions='both'),
"xwheel_zoom": lambda: WheelZoomTool(dimensions='width'),
"ywheel_zoom": lambda: WheelZoomTool(dimensions='height'),
"zoom_in": lambda: ZoomInTool(dimensions='both'),
"xzoom_in": lambda: ZoomInTool(dimensions='width'),
"yzoom_in": lambda: ZoomInTool(dimensions='height'),
"zoom_out": lambda: ZoomOutTool(dimensions='both'),
"xzoom_out": lambda: ZoomOutTool(dimensions='width'),
"yzoom_out": lambda: ZoomOutTool(dimensions='height'),
"xwheel_pan": lambda: WheelPanTool(dimension="width"),
"ywheel_pan": lambda: WheelPanTool(dimension="height"),
"resize": lambda: ResizeTool(),
"click": lambda: TapTool(behavior="inspect"),
"tap": lambda: TapTool(),
"crosshair": lambda: CrosshairTool(),
"box_select": lambda: BoxSelectTool(),
"xbox_select": lambda: BoxSelectTool(dimensions=['width']),
"ybox_select": lambda: BoxSelectTool(dimensions=['height']),
"xbox_select": lambda: BoxSelectTool(dimensions='width'),
"ybox_select": lambda: BoxSelectTool(dimensions='height'),
"poly_select": lambda: PolySelectTool(),
"lasso_select": lambda: LassoSelectTool(),
"box_zoom": lambda: BoxZoomTool(dimensions=['width', 'height']),
"xbox_zoom": lambda: BoxZoomTool(dimensions=['width']),
"ybox_zoom": lambda: BoxZoomTool(dimensions=['height']),
"box_zoom": lambda: BoxZoomTool(dimensions='both'),
"xbox_zoom": lambda: BoxZoomTool(dimensions='width'),
"ybox_zoom": lambda: BoxZoomTool(dimensions='height'),
"hover": lambda: HoverTool(tooltips=[
("index", "$index"),
("data (x, y)", "($x, $y)"),
Expand Down
1 change: 1 addition & 0 deletions bokehjs/src/coffee/api/typings/enums.d.ts
Expand Up @@ -13,6 +13,7 @@ declare namespace Bokeh {
export type AngleUnits = "deg" | "rad";
export type DatetimeUnits = "microseconds" | "milliseconds" | "seconds" | "minsec" | "minutes" | "hourmin" | "hours" | "days" | "months" | "years";
export type Dimension = "width" | "height";
export type Dimensions = "width" | "height" | "both";
export type Orientation = "horizontal" | "vertical";
export type Anchor = "top_left" | "top_center" | "top_right" | "right_center" | "bottom_right" | "bottom_center" | "bottom_left" | "left_center" | "center";
export type LegendLocation = Anchor;
Expand Down
14 changes: 7 additions & 7 deletions bokehjs/src/coffee/api/typings/models/tools.d.ts
Expand Up @@ -24,33 +24,33 @@ declare namespace Bokeh {
export var PanTool: { new(attributes?: IPanTool, options?: ModelOpts): PanTool };
export interface PanTool extends Tool, IPanTool {}
export interface IPanTool extends ITool {
dimensions?: Array<Dimension>;
dimensions?: Dimensions;
}

export var WheelPanTool: { new(attributes?: IWheelPanTool, options?: ModelOpts): WheelPanTool };
export interface WheelPanTool extends Tool, IWheelPanTool {}
export interface IWheelPanTool extends ITool {
dimensions?: Array<Dimension>;
dimension?: Dimension;
}

export var WheelZoomTool: { new(attributes?: IWheelZoomTool, options?: ModelOpts): WheelZoomTool };
export interface WheelZoomTool extends Tool, IWheelZoomTool {}
export interface IWheelZoomTool extends ITool {
dimensions?: Array<Dimension>;
dimensions?: Dimensions;
}

export var ZoomInTool: { new(attributes?: IZoomInTool, options?: ModelOpts): ZoomInTool };
export interface ZoomInTool extends Tool, IZoomInTool {}
export interface IZoomInTool extends ITool {
factor?: Percent;
dimensions?: Array<Dimension>;
dimensions?: Dimensions;
}

export var ZoomOutTool: { new(attributes?: IZoomOutTool, options?: ModelOpts): ZoomOutTool };
export interface ZoomOutTool extends Tool, IZoomOutTool {}
export interface IZoomOutTool extends ITool {
factor?: Percent;
dimensions?: Array<Dimension>;
dimensions?: Dimensions;
}

export var SaveTool: { new(attributes?: ISaveTool, options?: ModelOpts): SaveTool };
Expand Down Expand Up @@ -78,7 +78,7 @@ declare namespace Bokeh {
export var CrosshairTool: { new(attributes?: ICrosshairTool, options?: ModelOpts): CrosshairTool };
export interface CrosshairTool extends InspectTool, ICrosshairTool {}
export interface ICrosshairTool extends IInspectTool {
dimensions?: Array<Dimension>;
dimensions?: Dimensions;

line_color?: Color;
line_width?: number;
Expand All @@ -93,7 +93,7 @@ declare namespace Bokeh {
export interface BoxSelectTool extends SelectTool, IBoxSelectTool {}
export interface IBoxSelectTool extends ISelectTool {
select_every_mousemove?: boolean;
dimensions?: Array<Dimension>;
dimensions?: Dimensions;
}

export var LassoSelectTool: { new(attributes?: ILassoSelectTool, options?: ModelOpts): LassoSelectTool };
Expand Down
2 changes: 2 additions & 0 deletions bokehjs/src/coffee/core/enums.coffee
Expand Up @@ -3,6 +3,8 @@ module.exports =

Dimension: ["width", "height"]

Dimensions: ["width", "height", "both"]

Direction: ["clock", "anticlock"]

FontStyle: ["normal", "italic", "bold"]
Expand Down
3 changes: 3 additions & 0 deletions bokehjs/src/coffee/core/properties.coffee
Expand Up @@ -189,6 +189,8 @@ class Direction extends enum_prop("Direction", enums.Direction)

class Dimension extends enum_prop("Dimension", enums.Dimension)

class Dimensions extends enum_prop("Dimensions", enums.Dimensions)

class FontStyle extends enum_prop("FontStyle", enums.FontStyle)

class LineCap extends enum_prop("LineCap", enums.LineCap)
Expand Down Expand Up @@ -285,6 +287,7 @@ module.exports =
Boolean: Bool # alias
Color: Color
Dimension: Dimension
Dimensions: Dimensions
Direction: Direction
Distance: Distance
Font: Font
Expand Down
12 changes: 5 additions & 7 deletions bokehjs/src/coffee/models/tools/actions/zoom_in_tool.coffee
Expand Up @@ -11,10 +11,8 @@ class ZoomInToolView extends ActionTool.View
dims = @model.dimensions

# restrict to axis configured in tool's dimensions property
if dims.indexOf('width') == -1
v_axis_only = true
if dims.indexOf('height') == -1
h_axis_only = true
v_axis_only = dims == 'height'
h_axis_only = dims == 'width'

zoom_info = scale_range({
frame: frame
Expand All @@ -34,12 +32,12 @@ class ZoomInTool extends ActionTool.Model
icon: "bk-tool-icon-zoom-in"

@getters {
tooltip: () -> @_get_dim_tooltip(@tool_name, @_check_dims(@dimensions, "zoom-in tool"))
tooltip: () -> @_get_dim_tooltip(@tool_name, @dimensions)
}

@define {
factor: [ p.Percent, 0.1 ]
dimensions: [ p.Array, ["width", "height"] ]
factor: [ p.Percent, 0.1 ]
dimensions: [ p.Dimensions, "both" ]
}

module.exports = {
Expand Down
12 changes: 5 additions & 7 deletions bokehjs/src/coffee/models/tools/actions/zoom_out_tool.coffee
Expand Up @@ -11,10 +11,8 @@ class ZoomOutToolView extends ActionTool.View
dims = @model.dimensions

# restrict to axis configured in tool's dimensions property
if dims.indexOf('width') == -1
v_axis_only = true
if dims.indexOf('height') == -1
h_axis_only = true
v_axis_only = dims == 'height'
h_axis_only = dims == 'width'

zoom_info = scale_range({
frame: frame
Expand All @@ -34,12 +32,12 @@ class ZoomOutTool extends ActionTool.Model
icon: "bk-tool-icon-zoom-out"

@getters {
tooltip: () -> @_get_dim_tooltip(@tool_name, @_check_dims(@dimensions, "zoom-out tool"))
tooltip: () -> @_get_dim_tooltip(@tool_name, @dimensions)
}

@define {
factor: [ p.Percent, 0.1 ]
dimensions: [ p.Array, ["width", "height"] ]
factor: [ p.Percent, 0.1 ]
dimensions: [ p.Dimensions, "both" ]
}

module.exports = {
Expand Down
Expand Up @@ -119,14 +119,14 @@ class BoxSelectTool extends SelectTool.Model
default_order: 30

@define {
dimensions: [ p.Array, ["width", "height"] ]
dimensions: [ p.Dimensions, "both" ]
select_every_mousemove: [ p. Bool, false ]
callback: [ p.Instance ]
overlay: [ p.Instance, DEFAULT_BOX_OVERLAY ]
}

@getters {
tooltip: () -> @_get_dim_tooltip(@tool_name, @_check_dims(@dimensions, "box select tool"))
tooltip: () -> @_get_dim_tooltip(@tool_name, @dimensions)
}

module.exports =
Expand Down
8 changes: 4 additions & 4 deletions bokehjs/src/coffee/models/tools/gestures/box_zoom_tool.coffee
Expand Up @@ -94,7 +94,7 @@ class BoxZoomToolView extends GestureTool.View
frame = @plot_model.frame
dims = @model.dimensions

if @model.match_aspect and dims.length == 2
if @model.match_aspect and dims == 'both'
[vx, vy] = @_match_aspect(@_baseboint, curpoint, frame)
else
[vx, vy] = @model._get_dim_limits(@_baseboint, curpoint, frame, dims)
Expand All @@ -112,7 +112,7 @@ class BoxZoomToolView extends GestureTool.View
frame = @plot_model.frame
dims = @model.dimensions

if @model.match_aspect and dims.length == 2
if @model.match_aspect and dims == 'both'
[vx, vy] = @_match_aspect(@_baseboint, curpoint, frame)
else
[vx, vy] = @model._get_dim_limits(@_baseboint, curpoint, frame, dims)
Expand Down Expand Up @@ -172,11 +172,11 @@ class BoxZoomTool extends GestureTool.Model
default_order: 20

@getters {
tooltip: () -> @_get_dim_tooltip(@tool_name, @_check_dims(@dimensions, "box zoom tool"))
tooltip: () -> @_get_dim_tooltip(@tool_name, @dimensions)
}

@define {
dimensions: [ p.Array, ["width", "height"] ]
dimensions: [ p.Dimensions, "both" ]
overlay: [ p.Instance, DEFAULT_BOX_OVERLAY ]
match_aspect: [ p.Bool, false ]
}
Expand Down

0 comments on commit f23acc2

Please sign in to comment.