package com.beloo.widget.chipslayoutmanager.layouter;
|
|
import android.view.View;
|
|
import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
|
import com.beloo.widget.chipslayoutmanager.IScrollingController;
|
import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
|
import com.beloo.widget.chipslayoutmanager.anchor.ColumnsAnchorFactory;
|
import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
|
import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
|
import com.beloo.widget.chipslayoutmanager.gravity.ColumnGravityModifiersFactory;
|
import com.beloo.widget.chipslayoutmanager.gravity.ColumnStrategyFactory;
|
import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.breaker.DecoratorBreakerFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.breaker.ColumnBreakerFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.criteria.ColumnsCriteriaFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
|
import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
|
import com.beloo.widget.chipslayoutmanager.util.StateHelper;
|
|
public class ColumnsStateFactory implements IStateFactory {
|
|
private ChipsLayoutManager lm;
|
private IRowStrategyFactory rowStrategyFactory;
|
|
public ColumnsStateFactory(ChipsLayoutManager lm) {
|
this.lm = lm;
|
rowStrategyFactory = new ColumnStrategyFactory();
|
}
|
|
@Override
|
public LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory) {
|
IViewCacheStorage cacheStorage = lm.getViewPositionsStorage();
|
|
return createColumnLayouterFactory(criteriaFactory, placerFactory, cacheStorage);
|
}
|
|
private LayouterFactory createColumnLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory, IViewCacheStorage cacheStorage) {
|
return new LayouterFactory(lm,
|
new ColumnsCreator(lm),
|
new DecoratorBreakerFactory(cacheStorage, lm.getRowBreaker(), lm.getMaxViewsInRow(), new ColumnBreakerFactory()),
|
criteriaFactory,
|
placerFactory,
|
new ColumnGravityModifiersFactory(),
|
rowStrategyFactory.createRowStrategy(lm.getRowStrategyType()));
|
}
|
|
@Override
|
public AbstractCriteriaFactory createDefaultFinishingCriteriaFactory() {
|
return StateHelper.isInfinite(this)? new InfiniteCriteriaFactory() : new ColumnsCriteriaFactory();
|
}
|
|
@Override
|
public IAnchorFactory anchorFactory() {
|
return new ColumnsAnchorFactory(lm, lm.getCanvas());
|
}
|
|
@Override
|
public IScrollingController scrollingController() {
|
return lm.horizontalScrollingController();
|
}
|
|
@Override
|
public ICanvas createCanvas() {
|
return new ColumnSquare(lm);
|
}
|
|
@Override
|
public int getSizeMode() {
|
return lm.getWidthMode();
|
}
|
|
@Override
|
public int getStart() {
|
return 0;
|
}
|
|
@Override
|
public int getStart(View view) {
|
return lm.getDecoratedLeft(view);
|
}
|
|
@Override
|
public int getStart(AnchorViewState anchor) {
|
return anchor.getAnchorViewRect().left;
|
}
|
|
@Override
|
public int getEnd() {
|
return lm.getWidth();
|
}
|
|
@Override
|
public int getEnd(View view) {
|
return lm.getDecoratedRight(view);
|
}
|
|
@Override
|
public int getEnd(AnchorViewState anchor) {
|
return anchor.getAnchorViewRect().right;
|
}
|
|
@Override
|
public int getEndViewPosition() {
|
return lm.getPosition(lm.getCanvas().getBottomView());
|
}
|
|
@Override
|
public int getStartAfterPadding() {
|
return lm.getPaddingLeft();
|
}
|
|
@Override
|
public int getStartViewPosition() {
|
return lm.getPosition(lm.getCanvas().getTopView());
|
}
|
|
@Override
|
public int getEndAfterPadding() {
|
return lm.getWidth() - lm.getPaddingRight();
|
}
|
|
@Override
|
public int getStartViewBound() {
|
return getStart(lm.getCanvas().getLeftView());
|
}
|
|
@Override
|
public int getEndViewBound() {
|
return getEnd(lm.getCanvas().getRightView());
|
}
|
|
@Override
|
public int getTotalSpace() {
|
return lm.getWidth() - lm.getPaddingLeft()
|
- lm.getPaddingRight();
|
}
|
|
|
}
|