Jump to content

Recommended Posts

Posted

I use SetSoundDevice to control my audio devices but the UI was either
 

blurry like this:

Spoiler


 rnNBPZO.png

or unusable like this:

Spoiler

WUiAUX4.png


so I made this horrible thing to add scaling to the GUI:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_HiDpi=y
#AutoIt3Wrapper_AU3Check_Parameters=-w 3 -w 4 -w 5
#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/sf /sv /rm
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>

;~ _convertGUI("")
If $CmdLine[0] <> 0 Then _convertGUI($CmdLine[1])
Func _convertGUI($sFilePath)
    If $sFilePath <> "" Then
        Local $aArray = FileReadToArray($sFilePath)
    Else
        ;TEST DATA
        Local $aArray[6] = ['$H_Res_Language = GUICtrlCreateProgress(5, 120, 210 + 25, 480, 20, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE)) ; $CBS_DROPDOWNLIST)', _
                'Local $h_Ok = GUICtrlCreateButton("Ok", 72, 224, 81, 33, 0)', _
                'GUICreate($Warning_TiTle, 700, 310, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX)', _
                'GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)', _
                '$H_FieldNameEdit = GUICtrlCreateEdit($INP_FieldNameEdit, 100,260+25, 500, 150 - 25) ;comment', 'Local $H_CANCEL = GUICtrlCreateGraphic("Cancel", 224, 224, 97, 33, 0)']
    EndIf

    Local $hTimer = TimerInit(), $iGUIElementCount = 0, $sResult = "", $sFileName = "", $sDrive = "", $sDir = "", $sExtension = ""
    If @Compiled Then
        _PathSplit($sFilePath, $sDrive, $sDir, $sFileName, $sExtension)
        $sFileName = StringRegExpReplace($sFilePath, "^.*\\", "")
    EndIf

    For $i = 0 To (UBound($aArray) - 1)
        If StringRegExp($aArray[$i], "GUICtrlCreate|GUICreate") Then
            $sResult = _splitComma($aArray[$i])
            If Not @error Then $aArray[$i] = $sResult
            $iGUIElementCount += 1
        EndIf
    Next

    ConsoleWrite("t = " & TimerDiff($hTimer) & " GUI elements = " & $iGUIElementCount & " lines = " & (UBound($aArray) - 1) & @CRLF)

    If $sFileName <> "" Then
        Local $hFile = FileOpen("edited." & $sFileName, 2)
        _FileWriteFromArray("edited." & $sFileName, $aArray)
        FileClose($hFile)
    EndIf

    Exit
EndFunc   ;==>_convertGUI


Func _splitComma($sString)
    Local $sSplitResult = "", $sTrimmedR = "", $sTrimmedL = ""
    Local $aSplit = StringSplit($sString, ',')
    If Not @error Then
        $sTrimmedR = ""
        $sTrimmedL = ""
        For $j = 1 To $aSplit[0]

            If StringRegExp($aSplit[1], "(?:.GUICtrlCreateGraphic|GUICtrlCreateProgress|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTreeView)") Then
                If $j = 1 Then
                    While StringLeft($aSplit[$j], 1) <> '('
                        $sTrimmedL &= StringLeft($aSplit[$j], 1)
                        $aSplit[$j] = StringTrimLeft($aSplit[$j], 1)
                    WEnd
                    $aSplit[$j] = StringTrimLeft($aSplit[$j], 1)
                EndIf
            EndIf

            If $j = $aSplit[0] Then
                While StringRight($aSplit[$j], 1) <> ')'
                    $sTrimmedR &= StringRight($aSplit[$j], 1)
                    $aSplit[$j] = StringTrimRight($aSplit[$j], 1)
                WEnd
                $aSplit[$j] = StringTrimRight($aSplit[$j], 1)
            EndIf

            If StringRegExp($aSplit[$j], "[0-9]") And $aSplit[$j] <> -1 And $aSplit[$j] <> 0 And $aSplit[$j] <> 1 And Not StringInStr($aSplit[$j], ')') Then
                If StringRegExp($aSplit[$j], "\-|\+") Then ;put parenthesis around + or -
                    $aSplit[$j] = '(' & $aSplit[$j] & ")*$g_DPI"
                Else
                    $aSplit[$j] = $aSplit[$j] & "*$g_DPI"
                EndIf
            EndIf

            If $j < $aSplit[0] Then
                $sSplitResult &= $aSplit[$j] & ','
            ElseIf $j = $aSplit[0] Then
                $sSplitResult &= $aSplit[$j] & ')'
            Else
                $sSplitResult &= $aSplit[$j]
            EndIf

        Next

        If $sTrimmedR <> "" Then $sSplitResult &= StringReverse($sTrimmedR)
        If $sTrimmedL <> "" Then $sSplitResult = $sTrimmedL & '(' & $sSplitResult

    Else
        SetError(1)
        Return
    EndIf

    ConsoleWrite($sSplitResult & @CRLF)
    Return $sSplitResult

EndFunc   ;==>_splitComma


And now it looks good: 

Spoiler

OkTONha.png

but it doesn't work on everything, for example the "GUICtrlCreateLabel("Output type: ", 30, 130, 65, 20) ;, $SS_RIGHT)" (from the autoit3wrapper gui)
because the comment contains a parenthesis and it would break completely if there were variables as parameters..
Is there some kind of parser around that I could use instead or maybe someone who has already done something like this?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...