Skip to content

Commit

Permalink
Merge 135934e into 7d1ea31
Browse files Browse the repository at this point in the history
  • Loading branch information
Pietro Berkes committed Nov 5, 2014
2 parents 7d1ea31 + 135934e commit 39b3917
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 20 deletions.
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])
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])

0 comments on commit 39b3917

Please sign in to comment.