package tv.dyndns.kishibe.qmaclone.client.setting.theme;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketTheme;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketThemeQuery;
import tv.dyndns.kishibe.qmaclone.client.setting.PanelSettingThemeQuery;
import com.google.common.base.Preconditions;
import com.google.gwt.view.client.CellPreviewEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.TreeViewModel;
public class ThemeQueryTreeViewModel implements TreeViewModel {
private final PanelSettingThemeQuery presenter;
private ThemeProvider themeProvider;
private ThemeQueryProvider themeQueryProvider;
public ThemeQueryTreeViewModel(PanelSettingThemeQuery presenter) {
this.presenter = Preconditions.checkNotNull(presenter);
}
@Override
public <T> NodeInfo<?> getNodeInfo(T value) {
if (value == null) {
return new DefaultNodeInfo<PacketTheme>(themeProvider = new ThemeProvider(presenter),
new ThemeCell(), new SingleSelectionModel<PacketTheme>(),
themeCellPreviewEventHandler, null);
} else if (value instanceof PacketTheme) {
PacketTheme theme = (PacketTheme) value;
return new DefaultNodeInfo<PacketThemeQuery>(
themeQueryProvider = new ThemeQueryProvider(presenter, theme.getName()),
new ThemeQueryCell(), new SingleSelectionModel<PacketThemeQuery>(),
themeQueryCellPreviewEventHandler, null);
} else {
throw new IllegalArgumentException("Unsupported object type: "
+ value.getClass().getName());
}
}
private final CellPreviewEvent.Handler<PacketTheme> themeCellPreviewEventHandler = new CellPreviewEvent.Handler<PacketTheme>() {
@Override
public void onCellPreview(CellPreviewEvent<PacketTheme> event) {
PacketTheme value = event.getValue();
presenter.onThemeQuerySelected(value.getName(), "");
}
};
private final CellPreviewEvent.Handler<PacketThemeQuery> themeQueryCellPreviewEventHandler = new CellPreviewEvent.Handler<PacketThemeQuery>() {
@Override
public void onCellPreview(CellPreviewEvent<PacketThemeQuery> event) {
PacketThemeQuery value = event.getValue();
presenter.onThemeQuerySelected(value.getTheme(), value.getQuery());
}
};
@Override
public boolean isLeaf(Object value) {
return value instanceof PacketThemeQuery;
}
public void refresh(boolean refreshTheme) {
themeQueryProvider.refresh();
if (refreshTheme) {
themeProvider.refresh();
}
}
}