/// <summary> /// Recreates the SQL Editor sub menu items. /// </summary> public void RecreateSqlEditorMenus() { var notifierMenu = InstanceMenuItem.GetCurrentParent(); if (notifierMenu != null && notifierMenu.InvokeRequired) { notifierMenu.Invoke(new MethodInvoker(RecreateSqlEditorMenus)); } else { if (!MySqlWorkbench.AllowsExternalConnectionsManagement) { return; } if (SqlEditorMenuItem == null) { SqlEditorMenuItem = new ToolStripMenuItem(Resources.SQLEditor); } else { SqlEditorMenuItem.DropDownItems.Clear(); } SqlEditorMenuItem.Enabled = BoundInstance.WorkbenchConnection != null || BoundInstance.RelatedConnections.Count > 1; if (BoundInstance.RelatedConnections.Count == 0) { return; } if (BoundInstance.RelatedConnections.Count == 1) { SqlEditorMenuItem.Click -= SqlEditorMenuItem_Click; SqlEditorMenuItem.Click += SqlEditorMenuItem_Click; SqlEditorMenuItem.Tag = BoundInstance.WorkbenchConnection; return; } // We have more than 1 connection so we create a submenu. foreach (var conn in BoundInstance.RelatedConnections) { var menu = new ToolStripMenuItem(conn.Name); if (conn == BoundInstance.WorkbenchConnection) { var boldFont = new Font(menu.Font, FontStyle.Bold); menu.Font = boldFont; } menu.Tag = conn; menu.Click += SqlEditorMenuItem_Click; SqlEditorMenuItem.DropDownItems.Add(menu); } } }
/// <summary> /// Enables and disables menus based on the bound MySQL instance's connection status. /// </summary> /// <param name="refreshing">Flag indicating if the instance is refreshing its status.</param> public void Update(bool refreshing) { var menu = InstanceMenuItem.GetCurrentParent(); if (menu == null) { return; } if (menu.InvokeRequired) { menu.Invoke(new MethodInvoker(() => Update(refreshing))); } else { var suffix = refreshing ? Resources.RefreshingStatusText : $" - {BoundInstance.ConnectionStatusText}"; InstanceMenuItem.Text = BoundInstance.DisplayConnectionSummaryText + suffix; switch (BoundInstance.ConnectionStatus) { case MySqlWorkbenchConnection.ConnectionStatusType.AcceptingConnections: InstanceMenuItem.Image = Resources.NotifierIconRunning; break; case MySqlWorkbenchConnection.ConnectionStatusType.RefusingConnections: InstanceMenuItem.Image = Resources.NotifierIconStopped; break; case MySqlWorkbenchConnection.ConnectionStatusType.Unknown: InstanceMenuItem.Image = Resources.NotifierIcon; break; } if (SqlEditorMenuItem != null) { SqlEditorMenuItem.Enabled = MySqlWorkbench.AllowsExternalConnectionsManagement && BoundInstance.WorkbenchConnection != null; SqlEditorMenuItem.ToolTipText = SqlEditorMenuItem.Enabled ? null : string.Format(Resources.NoWorkbenchConnectionsFound, "instance"); } if (ConfigureMenuItem != null) { ConfigureMenuItem.Enabled = BoundInstance.RelatedServers.Count > 0; ConfigureMenuItem.ToolTipText = ConfigureMenuItem.Enabled ? null : string.Format(Resources.NoWorkbenchServersFound, "instance"); } } }
/// <summary> /// Enables and disables menus based on the bound MySQL instance's connection status. /// </summary> /// <param name="refreshing">Flag indicating if the instance is refreshing its status.</param> public void Update(bool refreshing) { ToolStrip menu = InstanceMenuItem.GetCurrentParent(); if (menu == null) { return; } if (menu.InvokeRequired) { menu.Invoke(new MethodInvoker(() => Update(refreshing))); } else { InstanceMenuItem.Text = BoundInstance.HostIdentifier + (refreshing ? Resources.RefreshingStatusText : " - " + BoundInstance.ConnectionStatusText); switch (BoundInstance.ConnectionStatus) { case MySqlWorkbenchConnection.ConnectionStatusType.AcceptingConnections: InstanceMenuItem.Image = Resources.NotifierIconRunning; break; case MySqlWorkbenchConnection.ConnectionStatusType.RefusingConnections: InstanceMenuItem.Image = Resources.NotifierIconStopped; break; case MySqlWorkbenchConnection.ConnectionStatusType.Unknown: InstanceMenuItem.Image = Resources.NotifierIcon; break; } if (SqlEditorMenuItem != null) { SqlEditorMenuItem.Enabled = MySqlWorkbench.AllowsExternalConnectionsManagement && BoundInstance.WorkbenchConnection != null; } if (ConfigureMenuItem != null) { ConfigureMenuItem.Enabled = BoundInstance.WorkbenchServer != null; } } }
/// <summary> /// Releases all resources used by the <see cref="MySqlInstanceMenuGroup"/> class /// </summary> /// <param name="disposing">If true this is called by Dispose(), otherwise it is called by the finalizer</param> protected virtual void Dispose(bool disposing) { if (disposing) { try { // Free managed resources if (ConfigureMenuItem != null) { ConfigureMenuItem.Dispose(); } if (InstanceMenuItem != null) { InstanceMenuItem.Dispose(); } if (SqlEditorMenuItem != null) { SqlEditorMenuItem.Dispose(); } if (Separator != null) { Separator.Dispose(); } } catch { // Sometimes when the dispose is done from a thread different than the main one a cross-thread exception is thrown which is not critical // since these menu items will be disposed later by the garbage collector. No Exception is being actually handled or logged since we do // not wat to overwhelm the log with these error messages since they do not affect the Notifier's execution. } } // Add class finalizer if unmanaged resources are added to the class // Free unmanaged resources if there are any }