Il ne reste plus qu'à appeler la méthode ConfigureFlickrDataSource depuis une redéfinition de la méthode Configure qui sera appelée par Visual Studio. Cette méthode Configure appelle notre méthode ConfigureFlickrDataSource de manière transactionnelle grâce à un appel de InvokeTransactedChange. On appelle ensuite la fenêtre de configuration en lui passant en paramètre le FlickrDataSource configuré afin d'être capable d'interagir avec lui. A noter que nous récupérons pour cela une instance de IUIService qui représente le designer de Visual Studio afin d'avoir une fenêtre « intégrée » à l'IDE.
class FlickrDataSourceDesigner : DataSourceDesigner
{
private FlickrDataSource m_dataSource;
private FlickrDesignerDataSourceView m_view;
public FlickrDataSource DataSource
{
get { return m_dataSource; }
}
public override bool CanConfigure
{
get
{
return true;
}
}
public override DesignerDataSourceView GetView(string viewName)
{
if (m_view == null)
{
m_view = new FlickrDesignerDataSourceView(this, viewName);
}
return m_view;
}
public override void Configure()
{
InvokeTransactedChange(Component, new TransactedChangeCallback(ConfigureFlickrDataSource), null,
"Configure Data Source");
}
public override void Initialize
(System.ComponentModel.IComponent component)
{
base.Initialize(component);
m_dataSource = (FlickrDataSource)component;
}
private bool ConfigureFlickrDataSource(object context)
{
DialogResult result;
try
{
SuppressDataSourceEvents();
using (FlickrDataSourceConfigForm form = new FlickrDataSourceConfigForm(m_dataSource))
{
IUIService uiService = (IUIService)GetService(typeof(IUIService));
result = uiService.ShowDialog(form);
if (result == DialogResult.OK)
{
OnSchemaRefreshed(EventArgs.Empty);
}
}
}
finally
{
ResumeDataSourceEvents();
}
return (result == DialogResult.OK);
}
}