Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use set_bounds rather than setting low and high individually for Zoom. #233

Merged
merged 3 commits into from Jan 22, 2016
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions chaco/tools/better_zoom.py
Expand Up @@ -304,8 +304,8 @@ def _zoom_in_mapper(self, mapper, factor):
center = (low + high)/2.0

new_range = range/factor
mapper.range.high = center + new_range/2
mapper.range.low = center - new_range/2
mapper.range.set_bounds(low=center - new_range/2,
high=center + new_range/2)

def _get_x_mapper(self):
if isinstance(self.component.index_mapper, GridMapper):
Expand Down
37 changes: 19 additions & 18 deletions chaco/tools/tool_states.py
@@ -1,6 +1,7 @@
from chaco.grid_mapper import GridMapper
from traits.api import HasTraits


class ToolState(HasTraits):

def __init__(self, prev, next):
Expand All @@ -13,6 +14,7 @@ def apply(self, tool):
def revert(self, tool):
raise NotImplementedError()


class GroupedToolState(ToolState):

def __init__(self, states):
Expand All @@ -26,8 +28,8 @@ def revert(self, tool):
for state in self.states[::-1]:
state.revert(tool)

class PanState(ToolState):

class PanState(ToolState):

def apply(self, tool):
if isinstance(tool.component.index_mapper, GridMapper):
Expand All @@ -41,16 +43,16 @@ def apply(self, tool):
low = index_mapper.range.low
range = high-low

index_mapper.range.high = self.next[0] + range/2
index_mapper.range.low = self.next[0] - range/2
index_mapper.range.set_bounds(low=self.next[0] - range/2,
high=self.next[0] + range/2)

if self.next[1] != self.prev[1]:
high = value_mapper.range.high
low = value_mapper.range.low
range = high-low

value_mapper.range.high = self.next[1] + range/2
value_mapper.range.low = self.next[1] - range/2
value_mapper.range.set_bounds(low=self.next[1] - range/2,
high=self.next[1] + range/2)

def revert(self, tool):
if isinstance(tool.component.index_mapper, GridMapper):
Expand All @@ -65,16 +67,17 @@ def revert(self, tool):
low = index_mapper.range.low
range = high-low

index_mapper.range.high = self.prev[0] + range/2
index_mapper.range.low = self.prev[0] - range/2
index_mapper.range.set_bounds(low=self.prev[0] - range/2,
high=self.prev[0] + range/2)

if self.next[1] != self.prev[1]:
high = value_mapper.range.high
low = value_mapper.range.low
range = high-low

value_mapper.range.high = self.prev[1] + range/2
value_mapper.range.low = self.prev[1] - range/2
index_mapper.range.set_bounds(low=self.prev[1] - range/2,
high=self.prev[1] + range/2)


class ZoomState(ToolState):
""" A zoom state which can be applied and reverted.
Expand All @@ -83,6 +86,7 @@ class ZoomState(ToolState):
of events which can be applied and reverted in the same manner.
This greatly eases the code for managing history
"""

def apply(self, zoom_tool):
index_factor = self.next[0]/self.prev[0]
value_factor = self.next[1]/self.prev[1]
Expand All @@ -105,7 +109,6 @@ def apply(self, zoom_tool):
# TODO: Clip to domain bounds by inserting a pan tool and altering the
# index factor and value factor


def revert(self, zoom_tool):
if isinstance(zoom_tool.component.index_mapper, GridMapper):
index_mapper = zoom_tool.component.index_mapper._xmapper
Expand All @@ -122,21 +125,19 @@ def revert(self, zoom_tool):
zoom_tool._index_factor = self.prev[0]
zoom_tool._value_factor = self.prev[1]


class SelectedZoomState(ZoomState):

def apply(self, zoom_tool):
x_mapper = zoom_tool._get_x_mapper()
y_mapper = zoom_tool._get_y_mapper()

x_mapper.range.low = self.next[0]
x_mapper.range.high = self.next[1]
y_mapper.range.low = self.next[2]
y_mapper.range.high = self.next[3]
x_mapper.range.set_bound(low=self.next[0], high=self.next[1])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should these be set_bounds?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uhm yes! Sorry, I thought I had tested it but it looks like I don't know how to trigger this.

y_mapper.range.set_bound(low=self.next[2], high=self.next[3])

def revert(self, zoom_tool):
x_mapper = zoom_tool._get_x_mapper()
y_mapper = zoom_tool._get_y_mapper()

x_mapper.range.low = self.prev[0]
x_mapper.range.high = self.prev[1]
y_mapper.range.low = self.prev[2]
y_mapper.range.high = self.prev[3]
x_mapper.range.set_bound(low=self.prev[0], high=self.prev[1])
y_mapper.range.set_bound(low=self.prev[2], high=self.prev[3])