private void UpdatePageFor(IssueRepositoryConnector connector) { configPagePanel.Controls.Clear(); bool needsCurrentSettings = false; _configPage = GetConfigurationPageFor(connector, ref needsCurrentSettings); if (_connectorPageControlMap == null) { _connectorPageControlMap = new Dictionary <string, Control>(); } Control newControl = null; if (!_connectorPageControlMap.TryGetValue(connector.Name, out newControl)) { newControl = GetControlFor(_configPage); newControl.Dock = DockStyle.Fill; _connectorPageControlMap.Add(connector.Name, newControl); } // setup config page if (_configPage != null) { _configPage.OnPageEvent += new EventHandler <ConfigPageEventArgs>(_configPage_OnPageEvent); } configPagePanel.Controls.Add(newControl); if (_configPage != null && needsCurrentSettings) { BeginInvoke((DoSomething) delegate() { IssueRepositorySettings currentSettings = CurrentSolutionSettings; if (currentSettings != null && string.Equals(currentSettings.ConnectorName, connector.Name)) { _configPage.Settings = currentSettings; } }); } }
private IssueRepositoryConfigurationPage GetConfigurationPageFor(IssueRepositoryConnector connector, ref bool needsCurrentSettings) { if (connector == null) { return(null); } if (_connectorPageMap == null) { _connectorPageMap = new Dictionary <string, IssueRepositoryConfigurationPage>(); } IssueRepositoryConfigurationPage configPage = null; if (_connectorPageMap.ContainsKey(connector.Name)) { configPage = _connectorPageMap[connector.Name]; } else { Exception exception = null; try { // triggers connector package initialization configPage = connector.ConfigurationPage; } catch (Exception exc) { exception = exc; } if (configPage == null) { // use a dummy configuration page in case where connector does not provide a configuration page or // if an exception is thrown while initializing the connector. configPage = exception == null ? new DummyIssueRepositoryConfigurationPage(string.Format("'{0}' does not provide a configuration page.", connector.Name)) : new DummyIssueRepositoryConfigurationPage(exception); } _connectorPageMap.Add(connector.Name, configPage); needsCurrentSettings = true; } return(configPage); }
private static Control GetControlFor(IssueRepositoryConfigurationPage configPage) { Control result = null; if (configPage != null) { IWin32Window window = configPage.Window; if (window != null) { IntPtr handle = window.Handle; if (handle != IntPtr.Zero) { result = Control.FromHandle(window.Handle); } } } if (result == null) { result = new Label(); result.Text = "Don't associate current solution with an issue repository."; } return(result); }