package name.abuchen.portfolio.ui.views.dashboard;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Dashboard;
public abstract class WidgetDelegate
{
private final Dashboard.Widget widget;
private final DashboardData data;
private final List<WidgetConfig> config = new ArrayList<>();
public WidgetDelegate(Dashboard.Widget widget, DashboardData data)
{
this.widget = widget;
this.data = data;
addConfig(new LabelConfig(this));
}
protected final void addConfig(WidgetConfig config)
{
this.config.add(config);
}
protected Client getClient()
{
return data.getClient();
}
protected Dashboard.Widget getWidget()
{
return widget;
}
protected DashboardData getDashboardData()
{
return data;
}
protected <C extends WidgetConfig> C get(Class<C> type)
{
return type.cast(config.stream().filter(c -> type.equals(c.getClass())).findAny().get());
}
public Stream<WidgetConfig> getWidgetConfigs()
{
return config.stream();
}
abstract Composite createControl(Composite parent, DashboardResources resources);
abstract void update();
/**
* Returns the title control to which context menu and default tooltip are
* attached.
*/
abstract Control getTitleControl();
}