private static void UpdateScriptPkgUI(RibbonHandler ribbon) { // determine which packages need to be loaded var curState = new HashSet <ScriptPkg>(); if (AddinOptions.Current.LoadInstalledScriptPackages) { curState.UnionWith(CommandGrasshopperPackageManager.GetInstalledScriptPackages()); } if (AddinOptions.Current.LoadUserScriptPackages) { curState.UnionWith(ScriptPkg.GetUserScriptPackages()); } // create a combined set of both last and current states to iterate over var pkgs = new HashSet <ScriptPkg>(curState); pkgs.UnionWith(_lastState); // update the package ui foreach (var pkg in pkgs) { // skip existing packages if (curState.Contains(pkg) && _lastState.Contains(pkg)) { continue; } // create new packages else if (curState.Contains(pkg) && !_lastState.Contains(pkg)) { if (LinkedScripts.HasUI(pkg, ribbon)) { TaskDialog.Show( Addin.AddinName, $"Package \"{pkg.Name}\" has been previously loaded in to the Revit UI." + "Restart Revit for changes to take effect." ); } else { LinkedScripts.CreateUI(pkg, ribbon); } } // or remove, removed packages else if (!curState.Contains(pkg) && _lastState.Contains(pkg)) { if (LinkedScripts.HasUI(pkg, ribbon)) { LinkedScripts.RemoveUI(pkg, ribbon); } } } _lastState = curState; }
internal static Result Start(RibbonHandler ribbon) { var result = Result.Failed; var button = RestoreButton(CommandName); switch (result = Revit.OnStartup(Revit.ApplicationUI)) { case Result.Succeeded: // Update Rhino button Tooltip button.ToolTip = $"Restores previously visible Rhino windows on top of Revit window"; button.LongDescription = $"Use CTRL key to open a Rhino model"; // hide the button title if (button.GetAdwndRibbonButton() is Autodesk.Windows.RibbonButton adwndRadioButton) { adwndRadioButton.ShowText = false; } var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // Register UI on Revit if (assemblies.Any(x => x.GetName().Name == "RhinoCommon")) { rhinoPanel = ribbon.CreateAddinPanel(Addin.RhinoVersionInfo?.ProductName ?? "Rhinoceros"); CommandRhino.CreateUI(rhinoPanel); CommandImport.CreateUI(rhinoPanel); CommandToggleRhinoPreview.CreateUI(rhinoPanel); CommandPython.CreateUI(rhinoPanel); CommandRhinoOptions.CreateUI(rhinoPanel); } if (assemblies.Any(x => x.GetName().Name == "Grasshopper")) { grasshopperPanel = ribbon.CreateAddinPanel("Grasshopper"); CommandGrasshopper.CreateUI(grasshopperPanel); CommandGrasshopperPreview.CreateUI(grasshopperPanel); CommandGrasshopperSolver.CreateUI(grasshopperPanel); CommandGrasshopperRecompute.CreateUI(grasshopperPanel); CommandGrasshopperBake.CreateUI(grasshopperPanel); grasshopperPanel.AddSeparator(); CommandGrasshopperPlayer.CreateUI(grasshopperPanel); grasshopperPanel.AddSlideOut(); CommandGrasshopperPackageManager.CreateUI(grasshopperPanel); CommandGrasshopperFolders.CreateUI(grasshopperPanel); // Script Packages UI UpdateScriptPkgUI(ribbon); // setup listeners, and in either case, update the packages ui // listed for changes in installed packages CommandGrasshopperPackageManager.CommandCompleted += CommandGrasshopperPackageManager_CommandCompleted; // listen for changes to user-script paths in options AddinOptions.ScriptLocationsChanged += AddinOptions_ScriptLocationsChanged; } UpdateRibbonCompact(); result = Result.Succeeded; break; case Result.Cancelled: button.Enabled = false; if (Addin.CurrentStatus == Addin.Status.Unavailable) { button.ToolTip = "Rhino.Inside failed to found a valid copy of Rhino 7 WIP installed."; } else if (Addin.CurrentStatus == Addin.Status.Obsolete) { button.ToolTip = "Rhino.Inside has expired."; } else { button.ToolTip = "Rhino.Inside load was cancelled."; } button.SetContextualHelp(new ContextualHelp(ContextualHelpType.Url, @"https://www.rhino3d.com/inside/revit")); break; case Result.Failed: button.Enabled = false; button.ToolTip = "Rhino.Inside failed to load."; return(Result.Failed); } return(result); }