Panel Size Menus

This procedure adds a Size submenu to the Panel menu so you can make an existing panel bigger or smaller.
It makes the controls bigger or smaller, too.
It unfortunately does this by killing and recreating the window, so don't be surprised when the window goes away.

#pragma TextEncoding = "UTF-8"
#pragma rtGlobals=3     // Use modern global access method and strict wave access.
#pragma ModuleName=PanelSizes
#pragma version=7   // circa Igor 7

#if IgorVersion() >= 7
Menu "Panel", dynamic
    "-"
    Submenu "Size"
        "Make Panel Bigger",/Q, PanelSizes#MakeTopPanelBigger()
        "Make Panel Smaller",/Q, PanelSizes#MakeTopPanelSmaller()
        "Make Panel Normal Size",/Q, PanelSizes#MakeTopPanelNormal()
        "\\M1:(:Panel Resolution = "+num2str(PanelResolution(WinName(0,64)))
        "\\M1:(:Screen Resolution = "+num2str(ScreenResolution)
    End
    "-"
End
#endif

static Function MakeTopPanelBigger()

    String panel= WinName(0,64)
    if( strlen(panel) )
        Variable currentRes= PanelResolution(panel)
        Variable newRes= BiggerResolution(currentRes)
        String newCode= RewritePanelCodeResolution(panel, newRes)
        KillWindow/Z $panel
        Execute/Q/Z newCode
        DoIgorMenu "Control", "Retrieve Window"
    endif  
End

static Function MakeTopPanelSmaller()

    String panel= WinName(0,64)
    if( strlen(panel) )
        Variable currentRes= PanelResolution(panel)
        Variable newRes= SmallerResolution(currentRes)
        String newCode= RewritePanelCodeResolution(panel, newRes)
        KillWindow/Z $panel
        Execute/Q/Z newCode
    endif  
End

static Function MakeTopPanelNormal()

    String panel= WinName(0,64)
    if( strlen(panel) )
        Variable newRes= 1 // This is the default setting in effect when Igor starts.
        String newCode= RewritePanelCodeResolution(panel, newRes)
        KillWindow/Z $panel
        Execute/Q/Z newCode
        DoIgorMenu "Control", "Retrieve Window"
    endif  
End


static StrConstant ksResolutions= "72;96;120;144;192;240;288;384;480;"

static Function BiggerResolution(currentRes)
    Variable currentRes
   
    Variable nextRes= ActualResolution(currentRes)
    String strRes= num2istr(nextRes)
    Variable whichOne = WhichListItem(strRes, ksResolutions)
    Variable numItems= ItemsInList(ksResolutions)
    if( whichOne >= 0 && whichOne < numItems-1)
        nextRes = str2num(StringFromList(whichOne+1, ksResolutions))
    else
        nextRes = str2num(StringFromList(numItems-1, ksResolutions))
    endif
    return nextRes
End

static Function SmallerResolution(currentRes)
    Variable currentRes
   
    Variable nextRes= ActualResolution(currentRes)
    String strRes= num2istr(nextRes)
    Variable whichOne = WhichListItem(strRes, ksResolutions)
    if( whichOne > 0 )
        nextRes = str2num(StringFromList(whichOne-1, ksResolutions))
    else
        nextRes = 72
    endif
    return nextRes
End

static Function ActualResolution(currentRes)
    Variable currentRes

    Variable actualRes= currentRes
    Variable screenRes= ScreenResolution // On Macintosh this was always 72 before Retina displays. On Windows it is usually 96 (small fonts) or 120 (large fonts).
    if( actualRes == 0 ) // points
        actualRes = screenRes
    elseif( actualRes == 1 )
        if( screenRes == 96 )
            actualRes = 72
        else
            actualRes = screenRes
        endif
    endif
    return actualRes
End


static Function/S RewritePanelCodeResolution(panel, newRes)
    String panel
    Variable newRes
   
    String code= WinRecreation(panel, 4)
    Wave/T tw = ListToTextWave(code, "\r")

    // insert three lines of code before line 2 (line 0 is Macro... and line 1 is PauseUpdate...)
    InsertPoints 2,3, tw
    tw[2]= "    SetIgorOption PanelResolution=?"
    tw[3]= "    Variable oldResolution = V_Flag"
    tw[4]= "    SetIgorOption PanelResolution="+num2istr(newRes)


    Variable lines= numpnts(tw)
   
    // insert SetIgorOption PanelResolution=oldResolution
    // before EndMacro (line lines-1)
    InsertPoints lines-1, 1, tw
    tw[lines-1]= "  SetIgorOption PanelResolution=oldResolution"
   
    // convert back to code
    String list
    wfprintf list, "%s\r", tw
   
    return list
End

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More