[WIP] Refactor chaco plot containers#674
Conversation
instead import it from plot_component module where it is already defined. we might want to move this to chaco.base or something of that sort later modified: chaco/plot_containers.py
i.e. from the chaco BasePlotContainer to the subclasses i.e. OverlayPlotContainer, StackedPlotContainer and GridPlotContainer. modified: chaco/plot_containers.py
instead of relying on BasePlotContainer which itself inherits from Container. We can do so now because we moved all of relevant traits down to the subclasses from the BasePlotContainer in the previous commit. Note that there are still a few traits on the BasePlotContainer but those are deprecated and are being removed elsewhere modified: chaco/plot_containers.py
the enable OverlayContainer inherits from the enable Container and overrides the preferred size and layout methods - which are duplicated in the chaco OverlayContainer. So, we can simply update the chaco OverlayContainer to inherit from the enable OverlayContainer - and simply override/set traits on the subclass in Chaco modified: chaco/plot_containers.py
specifically, in the methods StackedPlotContainer.get_preferred_size and StackedPlotContainer._do_layout. note that the get_preferred_size method is slightly non-trivial because the underlying enable util stacked_preferred_size does not fully cover the needs of the method - we might want to fix the underlying enable util to do so. modified: chaco/plot_containers.py
simply update the _do_layout methods in the subclasses and remove the StackedPlotContainer._do_layout method modified: chaco/plot_containers.py
by simply moving the method to the two subclasses modified: chaco/plot_containers.py
and remove them from the chaco StackedPlotContainer modified: chaco/plot_containers.py
from the baseclass StackedPlotContainer. Now, we are finally in a place where we can simply remove the chaco baseclass StackedPlotContainer completely because it now finally (almost) looks like the enable StackedPlotContainer modified: chaco/plot_containers.py
and remove the chaco StackedPlotContainer modified: chaco/plot_containers.py
and a few duplicated traits on the subclass have been removed. Sadly, it looks like there are bugs in the baseclass which need to be fixed in enable before more code can be killed modified: chaco/plot_containers.py
and we removed a bunch of traits from the subclass which are already defined in the baseclass. ideally, we would also be able to remove the get_preferred_size and persistence (__getstate__) methods from the subclass but once those are fixed in enable and a new version of enable is available, we can clean this code up further. modified: chaco/plot_containers.py
and replace the old/outdated String trait with the Str trait modified: chaco/plot_containers.py
|
|
||
| # Local relative imports | ||
| from .base_plot_container import BasePlotContainer | ||
| from .plot_component import DEFAULT_DRAWING_ORDER |
There was a problem hiding this comment.
we might want to move DEFAULT_DRAWING_ORDER somewhere else/somewhere better e.g. chaco.base instead of leaving it in chaco.plot_component
| valign = Enum("bottom", "top", "center") | ||
|
|
||
| _cached_preferred_size = Tuple(transient=True) | ||
| return stacked_preferred_size(self, components=components) |
There was a problem hiding this comment.
if self.resizable == "":
self._cached_preferred_size = self.outer_bounds[:]
return self.outer_bounds
isn't handled by enables stacked_preferred_size. If we can update the function in enable, after the next release of enable, we will be able to get rid of this method completely. both in this class and in VPlotContainer
| align = "max" | ||
|
|
||
| return self._do_stack_layout(components, align) | ||
| return stack_layout(self, components=components, align=align) |
There was a problem hiding this comment.
there are bugs in HStackedContainer and the HStackedContainer._do_layout - if those get fixed, we will be able to remove this HPlotContainer._do_layout method and HPlotContainer.valign trait.
| state = super(VStackedContainer, self).__getstate__() | ||
| if "stack_index" in state: | ||
| del state["stack_index"] | ||
| return state |
There was a problem hiding this comment.
If we can push this __getstate__ down into enable, we can get rid of these in the chaco subclasses. Note that this PR also removes a bunch of traits in the subclasses which were marked as transient in the subclasses but they are not transient in the superclasses e.g. _cached_preferred_size (which isn't even defined on the baseclasses in the first place)
| return state | ||
|
|
||
|
|
||
| class GridPlotContainer(BasePlotContainer): |
There was a problem hiding this comment.
Note that we are now in a place where we can get rid of BasePlotContainer completely.
| simple_container_do_layout, | ||
| ) | ||
| from enable.api import Container, OverlayContainer | ||
| from enable.stacked_container import HStackedContainer, VStackedContainer |
There was a problem hiding this comment.
enable needs to expose these via the api module.
this might have been a simple copy-paste mistake. discovered when working on enthought/chaco#674 modified: enable/stacked_container.py
) this might have been a simple copy-paste mistake. discovered when working on enthought/chaco#674 modified: enable/stacked_container.py
the methods in the baseclasses got fixed so the inheriting classes can remove the overridden methods note that the __getstate__ methods also got removed - but the corresponding change in enable needs to be made - specifically to make stack_index a transient trait modified: chaco/plot_containers.py
No description provided.