diff options
author | Miguel Costa <miguel.costa@qt.io> | 2021-05-27 10:06:00 +0200 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2021-06-08 10:49:52 +0000 |
commit | 4b49853cadfeb03a65e1b22987cbe11f418e3940 (patch) | |
tree | 5ef80df9368558e9ab44af41934c0a8a24dad85a /src | |
parent | d764498a59fd895bb4a53bf17396a3fec2873b7a (diff) |
Add 'Refresh Intellisense' context menu option
Added an option to force a background build of Qt targets in order to
refresh IntelliSense information. This is useful if the option to track
project changes is disabled but the user wants to keep specific projects
up-to-date.
Task-number: QTVSADDINBUG-890
Change-Id: Ibc762085632789c55399af20c0c29de3f4eebfa5
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qtvstools/QtMenus.vsct_TT | 56 | ||||
-rw-r--r-- | src/qtvstools/QtProjectContextMenu.cs | 15 | ||||
-rw-r--r-- | src/qtvstools/QtSolutionContextMenu.cs | 55 |
3 files changed, 96 insertions, 30 deletions
diff --git a/src/qtvstools/QtMenus.vsct_TT b/src/qtvstools/QtMenus.vsct_TT index 8c213922..1db1c35d 100644 --- a/src/qtvstools/QtMenus.vsct_TT +++ b/src/qtvstools/QtMenus.vsct_TT @@ -81,8 +81,15 @@ </Strings> </Menu> - <Menu guid="ProjectContextMenuGuid" id="QtSubMenu" priority="0x0100" type="Menu"> - <Parent guid="ProjectContextMenuGuid" id="QtSubMenuGroup" /> + <Menu guid="ProjectContextMenuGuid" id="QtProjectSubMenu" priority="0x0100" type="Menu"> + <Parent guid="ProjectContextMenuGuid" id="QtProjectSubMenuGroup" /> + <Strings> + <ButtonText>Qt</ButtonText> + </Strings> + </Menu> + + <Menu guid="SolutionContextMenuGuid" id="QtSolutionSubMenu" priority="0x0100" type="Menu"> + <Parent guid="SolutionContextMenuGuid" id="QtSolutionSubMenuGroup" /> <Strings> <ButtonText>Qt</ButtonText> </Strings> @@ -119,28 +126,31 @@ <!-- Region Solution context menu groups --> - <Group guid="SolutionContextMenuGuid" id="SolutionContextTsMenuGroup" priority="0x0600"> + <Group guid="SolutionContextMenuGuid" id="QtSolutionSubMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_SOLNNODE" /> </Group> <Group guid="SolutionContextMenuGuid" id="SolutionContextQtMenuGroup" priority="0x0600"> - <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_SOLNNODE" /> + <Parent guid="SolutionContextMenuGuid" id="QtSolutionSubMenu"/> + </Group> + <Group guid="SolutionContextMenuGuid" id="SolutionContextTsMenuGroup" priority="0x0600"> + <Parent guid="SolutionContextMenuGuid" id="QtSolutionSubMenu" /> </Group> <!-- Endregion Solution context menu groups --> <!-- Region Project context menu groups --> - <Group guid="ProjectContextMenuGuid" id="QtSubMenuGroup" priority="0x0600"> + <Group guid="ProjectContextMenuGuid" id="QtProjectSubMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" /> </Group> <Group guid="ProjectContextMenuGuid" id="ProjectContextProjectMenuGroup" priority="0x0600"> - <Parent guid="ProjectContextMenuGuid" id="QtSubMenu"/> + <Parent guid="ProjectContextMenuGuid" id="QtProjectSubMenu"/> </Group> <Group guid="ProjectContextMenuGuid" id="ProjectContextTsMenuGroup" priority="0x0600"> - <Parent guid="ProjectContextMenuGuid" id="QtSubMenu"/> + <Parent guid="ProjectContextMenuGuid" id="QtProjectSubMenu"/> </Group> <Group guid="ProjectContextMenuGuid" id="ProjectContextOthersMenuGroup" priority="0x0600"> - <Parent guid="ProjectContextMenuGuid" id="QtSubMenu"/> + <Parent guid="ProjectContextMenuGuid" id="QtProjectSubMenu"/> </Group> <Group guid="ProjectContextMenuGuid" id="ProjectContextAddNewQtClassMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate7"/> @@ -396,6 +406,15 @@ <ButtonText>Convert custom build steps to Qt/MSBuild</ButtonText> </Strings> </Button> + <Button guid="SolutionContextMenuGuid" id="SolutionEnableProjectTracking" priority="0x0100" type="Button"> + <Parent guid="SolutionContextMenuGuid" id="SolutionContextQtMenuGroup" /> + <CommandFlag>DefaultDisabled</CommandFlag> + <CommandFlag>DefaultInvisible</CommandFlag> + <CommandFlag>DynamicVisibility</CommandFlag> + <Strings> + <ButtonText>Refresh project tracking</ButtonText> + </Strings> + </Button> <!-- Endregion Solution context menu button --> @@ -470,6 +489,16 @@ <ButtonText>Convert custom build steps to Qt/MSBuild</ButtonText> </Strings> </Button> + <Button guid="ProjectContextMenuGuid" id="ProjectRefreshIntelliSense" priority="0x0100" type="Button"> + <Parent guid="ProjectContextMenuGuid" id="ProjectContextOthersMenuGroup" /> + <CommandFlag>DefaultDisabled</CommandFlag> + <CommandFlag>DefaultInvisible</CommandFlag> + <CommandFlag>DynamicVisibility</CommandFlag> + <CommandFlag>TextChanges</CommandFlag> + <Strings> + <ButtonText>Refresh IntelliSense</ButtonText> + </Strings> + </Button> <Button guid="ProjectContextMenuGuid" id="ConvertToQtProjectId" priority="0x0100" type="Button"> <Parent guid="ProjectContextMenuGuid" id="ProjectContextOthersMenuGroup" /> <CommandFlag>DefaultDisabled</CommandFlag> @@ -607,13 +636,17 @@ <!-- Region Solution context menu button Ids --> + <IDSymbol name="QtSolutionSubMenuGroup" value="0x1026" /> + <IDSymbol name="QtSolutionSubMenu" value="0x1127"/> + <IDSymbol name="SolutionContextTsMenuGroup" value="0x1025" /> <IDSymbol name="lUpdateOnSolutionId" value="0x0111" /> <IDSymbol name="lReleaseOnSolutionId" value="0x0112" /> - <IDSymbol name="SolutionContextQtMenuGroup" value="0x1026" /> + <IDSymbol name="SolutionContextQtMenuGroup" value="0x1126" /> <IDSymbol name="ChangeSolutionQtVersionId" value="0x0113" /> <IDSymbol name="SolutionConvertToQtMsBuild" value="0x0130" /> + <IDSymbol name="SolutionEnableProjectTracking" value="0x1130" /> <!-- Endregion Solution context menu button Ids --> @@ -623,8 +656,8 @@ <!-- Region Project context menu button Ids --> - <IDSymbol name="QtSubMenuGroup" value="0x1150"/> - <IDSymbol name="QtSubMenu" value="0x1100"/> + <IDSymbol name="QtProjectSubMenuGroup" value="0x1150"/> + <IDSymbol name="QtProjectSubMenu" value="0x1100"/> <IDSymbol name="ProjectContextProjectMenuGroup" value="0x1027" /> <IDSymbol name="ImportPriFileProjectId" value="0x0114" /> @@ -638,6 +671,7 @@ <IDSymbol name="ProjectContextOthersMenuGroup" value="0x1029" /> <IDSymbol name="ProjectConvertToQtMsBuild" value="0x0130" /> + <IDSymbol name="ProjectRefreshIntelliSense" value="0x0131" /> <IDSymbol name="ConvertToQtProjectId" value="0x0120" /> <IDSymbol name="ConvertToQmakeProjectId" value="0x0121" /> <IDSymbol name="QtProjectSettingsProjectId" value="0x0122" /> diff --git a/src/qtvstools/QtProjectContextMenu.cs b/src/qtvstools/QtProjectContextMenu.cs index 39715104..c4f35c28 100644 --- a/src/qtvstools/QtProjectContextMenu.cs +++ b/src/qtvstools/QtProjectContextMenu.cs @@ -39,6 +39,8 @@ using System.Windows.Forms; namespace QtVsTools { + using QtMsBuild; + /// <summary> /// Command handler /// </summary> @@ -79,6 +81,7 @@ namespace QtVsTools lUpdateOnProjectId = 0x0118, lReleaseOnProjectId = 0x0119, ProjectConvertToQtMsBuild = 0x0130, + ProjectRefreshIntelliSense = 0x0131, ConvertToQtProjectId = 0x0120, ConvertToQmakeProjectId = 0x0121, QtProjectSettingsProjectId = 0x0122, @@ -198,6 +201,13 @@ namespace QtVsTools HelperFunctions.GetSelectedProject(Vsix.Instance.Dte)); } break; + case CommandId.ProjectRefreshIntelliSense: + { + var selectedProject = HelperFunctions.GetSelectedProject(Vsix.Instance.Dte); + var tracker = QtProjectTracker.Get(selectedProject); + QtProjectIntellisense.Refresh(tracker.Project); + } + break; case CommandId.ProjectAddNewQtClassProjectId: { try { @@ -300,6 +310,11 @@ namespace QtVsTools } } break; + case CommandId.ProjectRefreshIntelliSense: + { + command.Visible = command.Enabled = isQtMsBuildEnabled; + } + break; } if (project != null && isQtProject) { diff --git a/src/qtvstools/QtSolutionContextMenu.cs b/src/qtvstools/QtSolutionContextMenu.cs index b75d362a..eab20a2d 100644 --- a/src/qtvstools/QtSolutionContextMenu.cs +++ b/src/qtvstools/QtSolutionContextMenu.cs @@ -36,6 +36,8 @@ using System.Windows.Forms; namespace QtVsTools { + using QtMsBuild; + /// <summary> /// Command handler /// </summary> @@ -72,10 +74,14 @@ namespace QtVsTools /// <summary> /// Command ID. /// </summary> - private const int lUpdateOnSolutionId = 0x0111; - private const int lReleaseOnSolutionId = 0x0112; - private const int SolutionConvertToQtMsBuild = 0x0130; - private const int ChangeSolutionQtVersionId = 0x0113; + private enum CommandId + { + lUpdateOnSolutionId = 0x0111, + lReleaseOnSolutionId = 0x0112, + SolutionConvertToQtMsBuild = 0x0130, + SolutionEnableProjectTracking = 0x1130, + ChangeSolutionQtVersionId = 0x0113 + } /// <summary> /// Gets the service provider from the owner package. @@ -102,17 +108,20 @@ namespace QtVsTools if (commandService == null) return; - commandService.AddCommand(new OleMenuCommand(execHandler, - new CommandID(SolutionContextMenuGuid, lUpdateOnSolutionId))); - - commandService.AddCommand(new OleMenuCommand(execHandler, - new CommandID(SolutionContextMenuGuid, lReleaseOnSolutionId))); - - commandService.AddCommand(new OleMenuCommand(execHandler, - new CommandID(SolutionContextMenuGuid, ChangeSolutionQtVersionId))); + foreach (var id in Enum.GetValues(typeof(CommandId))) { + var command = new OleMenuCommand(execHandler, + new CommandID(SolutionContextMenuGuid, (int)id)); + command.BeforeQueryStatus += beforeQueryStatus; + commandService.AddCommand(command); + } + } - commandService.AddCommand(new OleMenuCommand(execHandler, - new CommandID(SolutionContextMenuGuid, SolutionConvertToQtMsBuild))); + private void beforeQueryStatus(object sender, EventArgs e) + { + var command = sender as OleMenuCommand; + if (command == null) + return; + command.Enabled = command.Visible = true; } private void execHandler(object sender, EventArgs e) @@ -121,14 +130,15 @@ namespace QtVsTools if (command == null) return; + var dte = Vsix.Instance.Dte; switch (command.CommandID.ID) { - case lUpdateOnSolutionId: + case (int)CommandId.lUpdateOnSolutionId: Translation.RunlUpdate(Vsix.Instance.Dte.Solution); break; - case lReleaseOnSolutionId: + case (int)CommandId.lReleaseOnSolutionId: Translation.RunlRelease(Vsix.Instance.Dte.Solution); break; - case ChangeSolutionQtVersionId: + case (int)CommandId.ChangeSolutionQtVersionId: var newQtVersion = string.Empty; using (var formChangeQtVersion = new FormChangeQtVersion()) { formChangeQtVersion.UpdateContent(ChangeFor.Solution); @@ -149,7 +159,6 @@ namespace QtVsTools if (string.IsNullOrEmpty(currentPlatform)) return; - var dte = Vsix.Instance.Dte; foreach (var project in HelperFunctions.ProjectsInSolution(dte)) { if (HelperFunctions.IsQtProject(project)) { var OldQtVersion = QtVersionManager.The().GetProjectQtVersion(project, @@ -165,11 +174,19 @@ namespace QtVsTools } QtVersionManager.The().SaveSolutionQtVersion(dte.Solution, newQtVersion); break; - case SolutionConvertToQtMsBuild: + case (int)CommandId.SolutionConvertToQtMsBuild: { QtMsBuildConverter.SolutionToQtMsBuild(); } break; + case (int)CommandId.SolutionEnableProjectTracking: + { + foreach (var project in HelperFunctions.ProjectsInSolution(dte)) { + if (HelperFunctions.IsQtProject(project)) + QtProjectTracker.Get(project); + } + } + break; } } } |