Generate Menu String Based on Package Existing (with Panel Shown)

This code will build a menu return string to call a function in a package based on input for three options

  • Does a graph window exist?
  • Does a specific function exist that defines the entrance point for a specific package?
  • [optional] Is a specific panel that is associate with the package already showing?
Function/S BuildMenuStr(string package, string rStr, [string actpanel])
    string fWin = WinName(0,1)
    if (ParamIsDefault(actpanel))
        if ((strlen(fWin) == 0) || (exists(package) == 0))
            rStr = "\\M1(" + rStr
        endif
    else
        if ((strlen(fWin) == 0) || (exists(package) == 0))
            rStr = "\\M1(" + rStr
        else
            if (ItemsInList(WinList(actpanel,";","WIN:64")) != 0)
                rStr = "\\M1(" + rStr + " (active)"
            endif
        endif  
    endif
    return rStr
end

By example, using Tony's Baselines package, I call this in one of my analysis package menu options.

BuildMenuStr("Baselines#Initialise","Generate Baselines",actpanel="BL_panel"), /Q, StartBaselines()

The menu return appears as

--> INACTIVE Generate Baselines - cannot select when front window is not a graph or baselines package is not loaded
--> ACTIVE Generate Baselines - can select when front window is a graph, baselines package is loaded, and baselines is not active on front window
--> INACTIVE Generate Baselines (active) - cannot select because front graph window already has baselines panel attached

EDIT -- A more secure approach is to check for the panel in WinList(...), since this returns it whether it is external or not.

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More