/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.ComponentModel.Design; using Microsoft.VisualStudio.Shell; namespace QuantConnect.VisualStudioPlugin { /// /// Command handler for QuantConnect menus in the "Tools" section. /// internal sealed class ToolMenuCommand { /// /// Command IDs for 'Login' in the "Tools" menu /// private const int _loginCommandId = 256; /// /// Command IDs for 'Logout' in the "Tools" menu /// private const int _logoutCommandId = 512; /// /// Command menu group (command set GUID). /// private static readonly Guid _commandSet = new Guid("fefaf282-a478-45f4-b89a-a8f15dd8aaff"); /// /// VS Package that provides this command, not null. /// private readonly QuantConnectPackage _package; /// /// A command to perform QuantConnect authentication. /// private readonly AuthenticationCommand _authenticationCommand; /// /// Instance of the command. /// private static ToolMenuCommand _instance; /// /// Gets the service provider from the owner package. /// private IServiceProvider _serviceProvider => _package; /// /// Initializes a new instance of the class. /// Adds our command handlers for menu (commands must exist in the command table file) /// /// Owner package, not null. private ToolMenuCommand(Package package) { if (package == null) { throw new ArgumentNullException(nameof(package)); } _package = package as QuantConnectPackage; _authenticationCommand = new AuthenticationCommand(); var commandService = _serviceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { RegisterLoginCommand(commandService); RegisterLogoutCommand(commandService); } } private void RegisterLoginCommand(OleMenuCommandService commandService) { var menuCommandId = new CommandID(_commandSet, _loginCommandId); var loginMenuItem = new OleMenuCommand(LoginCallback, menuCommandId); loginMenuItem.BeforeQueryStatus += (sender, evt) => { loginMenuItem.Enabled = !AuthorizationManager.GetInstance().IsLoggedIn(); }; commandService.AddCommand(loginMenuItem); } private void RegisterLogoutCommand(OleMenuCommandService commandService) { var menuCommandId = new CommandID(_commandSet, _logoutCommandId); var logoutMenuItem = new OleMenuCommand(LogoutCallback, menuCommandId); logoutMenuItem.BeforeQueryStatus += (sender, evt) => { logoutMenuItem.Enabled = AuthorizationManager.GetInstance().IsLoggedIn(); }; commandService.AddCommand(logoutMenuItem); } /// /// Initializes the singleton instance of the command. /// /// Owner package, not null. public static void Initialize(Package package) { _instance = new ToolMenuCommand(package); } /// /// This function is the callback used to execute the command when the menu item Login is clicked. /// /// Event sender. /// Event args. private async void LoginCallback(object sender, EventArgs e) { await _authenticationCommand.Login(_serviceProvider, true); } /// /// This function is the callback used to execute the command when the menu item Logout is clicked. /// /// Event sender. /// Event args. private void LogoutCallback(object sender, EventArgs e) { _authenticationCommand.Logout(_serviceProvider); } } }