#!/bin/bash

#This app was developed by MX Devs 2023 and released under GPLv3
version=2511-01

TEXTDOMAINDIR=/usr/share/locale 
export TEXTDOMAIN="mxfb-font"
source gettext.sh

font_temp1=/tmp/mxfb-font-temp1.txt
font_temp2=/tmp/mxfb-font-temp2.txt

# cleanup
trap "rm -f $font_temp1 $font_temp2" EXIT

####check overlay file
CHECK_WINTITLE="$(grep "window.font: " $HOME/.fluxbox/overlay)"
if [ -z "$CHECK_WINTITLE" ]; then
    echo '#window.font: Sans-11:Regular' >> "$HOME"/.fluxbox/overlay
fi

CHECK_MENUTITLE="$(grep "menu.title.font: " $HOME/.fluxbox/overlay)"
if [ -z "$CHECK_MENUTITLE" ]; then
    echo '#menu.title.font: Sans-11:Regular' >> "$HOME"/.fluxbox/overlay
fi

CHECK_MENUFRAME="$(grep "menu.frame.font: " $HOME/.fluxbox/overlay)"
if [ -z "$CHECK_MENUFRAME" ]; then
    echo '#menu.frame.font: Sans-10:Regular' >> "$HOME"/.fluxbox/overlay
fi


####

function choose_font() {

STYLE="$(grep 'session.styleFile:' $HOME/.fluxbox/init | sed -e "s/session\.styleFile\:	//")"

STYLE_MENU_FRAME="$(grep 'menu.frame.font:' $STYLE/theme.cfg | sed -e "s/menu\.frame\.font\://")"
STYLE_MENU_TITLE="$(grep 'menu.title.font:' $STYLE/theme.cfg | sed -e "s/menu\.title\.font\://")"
STYLE_WINDOW_TITLE="$(grep 'window.font:' $STYLE/theme.cfg | sed -e "s/window\.font\://")"

WINDOW_TITLE_NOW="$(grep "#window.font" $HOME/.fluxbox/overlay)"
MENU_TITLE_NOW="$(grep "#menu.title.font" $HOME/.fluxbox/overlay)"
MENU_FRAME_NOW="$(grep "#menu.frame.font" $HOME/.fluxbox/overlay)"


if [ -z "$WINDOW_TITLE_NOW" ]; then
    WINDOW_TITLE_OVERRIDE=true
else
    WINDOW_TITLE_OVERRIDE=false
fi

if [ -z "$MENU_TITLE_NOW" ]; then
    MENU_TITLE_OVERRIDE=true
else
    MENU_TITLE_OVERRIDE=false
fi

if [ -z "$MENU_FRAME_NOW" ]; then
    MENU_FRAME_OVERRIDE=true
else
    MENU_FRAME_OVERRIDE=false
fi

####

WINDOW_TITLE_NOW="$(grep "window.font" $HOME/.fluxbox/overlay | sed -e "s/window\.font\://" | sed -e "s/-/ /g" | sed -e "s/\:/ /g" | sed -e "s/\#/ /g")"
window_title_now=($WINDOW_TITLE_NOW)
###
numa=0

until [ "$CHECKNUM_A" = "okay" ]
do
    WINDOW_TITLE_SIZE="${window_title_now[$numa]}"

        if [[ ! "$WINDOW_TITLE_SIZE" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            numa=$(($numa-1))
        else
            CHECKNUM_A=okay
        fi
done

unset 'window_title_now[$numa]'
unset 'CHECKNUM_A'
unset 'num'

WINDOW_TITLE_NOW=$(echo "${window_title_now[@]}" $WINDOW_TITLE_SIZE)

###

MENU_TITLE_NOW="$(grep "menu.title.font" $HOME/.fluxbox/overlay | sed -e "s/menu\.title\.font\://" | sed -e "s/-/ /g" | sed -e "s/\:/ /g" | sed -e "s/\#/ /g")"
menu_title_now=($MENU_TITLE_NOW)
###
numb=0
until [ "$CHECKNUM_B" = "okay" ]
do
    MENU_TITLE_SIZE="${menu_title_now[$numb]}"
        if [[ ! "$MENU_TITLE_SIZE" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            numb=$(($numb-1))
        else
            CHECKNUM_B=okay
        fi
done

unset 'menu_title_now[$numb]'
unset 'CHECKNUM_B'

MENU_TITLE_NOW=$(echo "${menu_title_now[@]}" $MENU_TITLE_SIZE)

###

MENU_FRAME_NOW="$(grep "menu.frame.font" $HOME/.fluxbox/overlay | sed -e "s/menu\.frame\.font\://" | sed -e "s/-/ /g" | sed -e "s/\:/ /g" | sed -e "s/\#/ /g")"
menu_frame_now=($MENU_FRAME_NOW)
###
numc=0
until [ "$CHECKNUM_C" = "okay" ]
do
    MENU_FRAME_SIZE="${menu_frame_now[$numc]}"
        if [[ ! "$MENU_FRAME_SIZE" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            numc=$(($numc-1))
        else
            CHECKNUM_C=okay
        fi
done

unset 'menu_frame_now[$numc]'
unset 'CHECKNUM_C'

MENU_FRAME_NOW=$(echo "${menu_frame_now[@]}" $MENU_FRAME_SIZE)

###

GTK_FONT_NOW="$(grep "gtk-font-name" $HOME/.config/gtk-3.0/settings.ini | sed -e "s/gtk-font-name\=//" )"

#gtk-xft-antialias=1 true 0 false
GTK_ANTI_NOW="$(grep "gtk-xft-antialias" $HOME/.config/gtk-3.0/settings.ini | sed -e "s/gtk-xft-antialias\=//" )"
    if [ "$GTK_ANTI_NOW" = "1" ]; then
        GTK_ANTI_NOW=TRUE
    else
        GTK_ANTI_NOW=FALSE
    fi


GTK_HINT_NOW="$(grep "gtk-xft-hinting" $HOME/.config/gtk-3.0/settings.ini | sed -e "s/gtk-xft-hinting\=//" )"
    if [ "$GTK_HINT_NOW" = "1" ]; then
        GTK_HINT_NOW=TRUE
    else
        GTK_HINT_NOW=FALSE
    fi

GTK_HINTSTYLE_NOW="$(grep "gtk-xft-hintstyle" $HOME/.config/gtk-3.0/settings.ini | sed -e "s/gtk-xft-hintstyle\=//" )"
GTK_HINTSTYLE_NOW="$(echo $GTK_HINTSTYLE_NOW | sed -e "s/hint//" )"

#get current dpi
if [ -f $HOME/.Xresources ]; then
    dpi_current="$(grep "Xft.dpi" $HOME/.Xresources | sed -e 's/Xft.dpi: //')"
else
    dpi_current=95
fi


###MAIN###

# buttons
export BTN_CLOSE=$(gettext "Close")  ; BTN_CLOSE+='!window-close'
export BTN_HELP=$(gettext "Help")    ; BTN_HELP+='!help-contents'
export BTN_OK=$(gettext "OK")        ; BTN_OK+='!object-select'
export BTN_APPLY=$(gettext "Apply")  ; BTN_APPLY+='!object-select'
export BTN_ABOUT=$(gettext "About") ; BTN_ABOUT+='!dialog-information'

fkey=$RANDOM

text_tab1=$(gettext 'Default fonts as defined by the selected Fluxbox style.')

#tab 1
yad --plug=$fkey --tabnum=1 --separator="_" \
--form --columns=2 --output-by-row --align=left \
--text="$text_tab1\n" \
--field="<b>$(gettext 'Window Title Default'):</b>":LBL "" \
--field="$(gettext 'Override with') ":CHK "$WINDOW_TITLE_OVERRIDE" \
--field=" ":LBL "|" \
--field="<b>$(gettext 'Menu Title Default'):</b>":LBL "" \
--field="$(gettext 'Override with') ":CHK "$MENU_TITLE_OVERRIDE" \
--field=" ":LBL "|" \
--field="<b>$(gettext 'Menu Text Default'):</b>":LBL "" \
--field="$(gettext 'Override with') ":CHK "$MENU_FRAME_OVERRIDE" \
--field=" ":LBL "|" \
--field="<b>$STYLE_WINDOW_TITLE</b>":LBL "|" \
--field=" ":FN "$WINDOW_TITLE_NOW" \
--field=" ":LBL "|" \
--field="<b>$STYLE_MENU_TITLE</b>":LBL "|" \
--field=" ":FN "$MENU_TITLE_NOW" \
--field=" ":LBL "|" \
--field="<b>$STYLE_MENU_FRAME</b>":LBL "|" \
--field=" ":FN "$MENU_FRAME_NOW" \
--field=" ":LBL "|" \
>"$font_temp1" &
    
text_tab2=$(gettext 'Main window font and miscellaneous settings.')

#tab 2

yad --plug=$fkey --tabnum=2 --separator="_" \
--form --columns=2 --output-by-row --text-align=left \
--text="$text_tab2\n" \
--field="<b>$(gettext 'Gtk Font'): </b>":LBL "|" \
--field=" ":LBL "|" \
--field="$(gettext 'Font scaling'): ":LBL "|" \
--field=" ":LBL "|" \
--field="$(gettext 'Hinting')":CHK "$GTK_HINT_NOW" \
--field="$(gettext 'Antialising')":CHK "$GTK_ANTI_NOW" \
--field=" ":LBL "|" \
--field=" ":FN "$GTK_FONT_NOW" \
--field=" ":LBL "|" \
--field="DPI":NUM "$dpi_current\!75..150\!5\!0" \
--field=" ":LBL "|" \
--field="$(gettext 'Hinting Style')":CB "$GTK_HINTSTYLE_NOW!none!slight!medium!full" \
--field=" ":LBL "|" \
--field=" ":LBL "|" \
> "$font_temp2" &


title_tab1=$(gettext 'Fluxbox fonts')
title_tab2=$(gettext 'Other font settings')  
    
# main dialog
TITLE="$(gettext 'MXFB-Font')"
CLASS="mxfb-font"
ICONPATH="/usr/share/pixmaps/mxfb-font.svg"

yad --notebook --key=$fkey --tab="<b>$title_tab1</b>" --tab="<b>$title_tab2</b>" \
    --title="$TITLE" --class="$CLASS" --window-icon="$ICONPATH" \
    --width=500 --height=350 --borders=20 --center --buttons-layout=spread \
    --button="${BTN_ABOUT}":4 --button="${BTN_HELP}":2 \
    --button="${BTN_CLOSE}":1 --button="${BTN_APPLY}":0 \
    
RET=$?
    
case $RET in
    
4 )
#TRANSLATORS
    text_about=$(gettext "Manage Font Settings in MX-Fluxbox")

    yad --about \
    --image="$ICONPATH" \
    --pname="$TITLE" \
    --pversion="$version" \
    --comments="$text_about" \
    --website-label="mxlinux.org" \
    --website="https://mxlinux.org/" \
    --copyright="Copyright (c) 2025 Melber - MX Linux" \
    --authors="Melber,MX Devs" \
    --license="GPL3"
;;
    
2 )
    x-www-browser https://mxlinux.org/wiki/help-files/help-mxfb-font &
    WAIT=0
;;
            
1 | 252 )
    WAIT=1
;;

0 )

    read -r -a font_settings1 < $font_temp1
    read -r -a font_settings2 < $font_temp2

    font_settings_combined=( "${font_settings1[@]}" "${font_settings2[@]}" )
        
    font_settings_clean=$(echo "${font_settings_combined[@]}" | sed -e 's/ /-/g' | sed -e 's/_/ /g' | sed -e 's/ - / /g')
    
    override=($font_settings_clean)
    
####function fb_font

fb_font() {

for i in $( eval echo "${new_font[@]}" )
do
if [ $i = 'Italic' ]; then
    local ITALIC=' Italic'

    elif [ $i = 'Bold' ]; then
    local BOLD=' Bold'
    
    elif [ $i = 'Oblique' ]; then
    local OBLIQUE=' Oblique'

    elif [ $i = 'Condensed' ]; then
    local COND1=' Condensed'

    elif [ $i = 'Condensed,' ]; then
    local COND2=' Condensed,'

    elif [ $i = 'Light' ]; then
    local LIGHT=' Light'

    elif [ $i = 'Medium' ]; then
    local MEDIUM=' Medium'

    elif [ $i = 'Extrabold' ]; then
    local EXTRABOLD=' Extrabold'
fi
done

if [ "$OBLIQUE" = " Oblique" ]; then
    if [ "$BOLD" = " Bold" ]; then
    NEWTYPE=$BOLD:$OBLIQUE
    OBLIQUE=""
    BOLD=""
    else
    NEWTYPE=$OBLIQUE
    OBLIQUE=""
    fi
elif [ "$ITALIC" = " Italic" ]; then
    if [ "$BOLD" = " Bold" ]; then
    NEWTYPE=$BOLD:$ITALIC
    ITALIC=""
    BOLD=""
    else
    NEWTYPE=$ITALIC
    ITALIC=""
    fi
elif [ "$BOLD" = " Bold" ]; then
    NEWTYPE=$BOLD
    BOLD=""
else NEWTYPE=Regular
fi

NEWTYPE=$(echo $NEWTYPE | sed -e "s/ //g")

if [ "$COND2" = " Condensed," ]; then
    COND1=""
fi

NEWFONT=$(echo "${new_font[@]}" | sed -e "s/ Italic//" | sed -e "s/ Bold//" | sed -e "s/ Oblique//" | sed -e "s/ Light//" | sed -e "s/\,//" | sed -e "s/ Condensed//g")

NEWFONT=$(echo "$NEWFONT$COND1$LIGHT$MEDIUM$EXTRABOLD$COND2$BOLD-$NEWSIZE:$NEWTYPE")

}

export fb_font

####

    WINDOW_TITLE_OVERRIDE="${override[0]}"

    if [ "$WINDOW_TITLE_OVERRIDE" = FALSE ]; then
        WINDOW_TITLE_NOW="$(grep "#window.font" $HOME/.fluxbox/overlay)"
            if [ -z "$WINDOW_TITLE_NOW" ]; then
                sed -i 's/^window.font:/#&/' $HOME/.fluxbox/overlay
            fi
    fi

    if [ "$WINDOW_TITLE_OVERRIDE" = TRUE ]; then
        WINDOW_TITLE_NEW=$(echo "${override[1]}" | sed -e "s/-/ /g")
        window_title_new=($WINDOW_TITLE_NEW)
        NEWSIZE="${window_title_new[-1]}"
        unset 'window_title_new[-1]'

        new_font="${window_title_new[@]}"
###
        fb_font
###
        unset new_font

        WINDOW_TITLE_NEW="window.font: $NEWFONT"

        WINDOW_TITLE_NOW="$(grep "window.font: " $HOME/.fluxbox/overlay)"

            if [ "$WINDOW_TITLE_NEW" != "$WINDOW_TITLE_NOW" ]; then
                sed -i "s/$WINDOW_TITLE_NOW/$WINDOW_TITLE_NEW/" $HOME/.fluxbox/overlay
            fi

    fi


####

    MENU_TITLE_OVERRIDE="${override[2]}"

    if [ "$MENU_TITLE_OVERRIDE" = FALSE ]; then
        MENU_TITLE_NOW="$(grep "#menu.title.font" $HOME/.fluxbox/overlay)"
            if [ -z "$MENU_TITLE_NOW" ]; then
                sed -i 's/^menu.title.font:/#&/' $HOME/.fluxbox/overlay
            fi
    fi

    if [ "$MENU_TITLE_OVERRIDE" = TRUE ]; then
        MENU_TITLE_NEW=$(echo "${override[3]}" | sed -e "s/-/ /g")
        menu_title_new=($MENU_TITLE_NEW)
        NEWSIZE="${menu_title_new[-1]}"
        unset 'menu_title_new[-1]'

        new_font="${menu_title_new[@]}"
###
        fb_font
###
        MENU_TITLE_NEW="menu.title.font: $NEWFONT"

        MENU_TITLE_NOW="$(grep "menu.title.font: " $HOME/.fluxbox/overlay)"

            if [ "$MENU_FRAME_NEW" != "$MENU_FRAME_NOW" ]; then
                sed -i "s/$MENU_TITLE_NOW/$MENU_TITLE_NEW/" $HOME/.fluxbox/overlay
            fi

    fi


####

    MENU_FRAME_OVERRIDE="${override[4]}"

    if [ "$MENU_FRAME_OVERRIDE" = FALSE ]; then
        MENU_FRAME_NOW="$(grep "#menu.frame.font" $HOME/.fluxbox/overlay)"
            if [ -z "$MENU_FRAME_NOW" ]; then
                sed -i 's/^menu.frame.font:/#&/' $HOME/.fluxbox/overlay
            fi
    fi

    if [ "$MENU_FRAME_OVERRIDE" = TRUE ]; then
        MENU_FRAME_NEW=$(echo "${override[5]}" | sed -e "s/-/ /g")
        menu_frame_new=($MENU_FRAME_NEW)
        NEWSIZE="${menu_frame_new[-1]}"
        unset 'menu_frame_new[-1]'

        new_font="${menu_frame_new[@]}"
###
        fb_font
###
        MENU_FRAME_NEW="menu.frame.font: $NEWFONT"

        MENU_FRAME_NOW="$(grep "menu.frame.font: " $HOME/.fluxbox/overlay)"

            if [ "$MENU_FRAME_NEW" != "$MENU_FRAME_NOW" ]; then
                sed -i "s/$MENU_FRAME_NOW/$MENU_FRAME_NEW/" $HOME/.fluxbox/overlay
            fi

    fi


####

    GTK_FONT_NOW="$(grep "gtk-font-name" $HOME/.config/gtk-3.0/settings.ini | sed -e "s/gtk-font-name\=//" )"
    GTK_FONT_NEW=$(echo "${override[6]}" | sed -e "s/-/ /g")

    if [ "$GTK_FONT_NOW" != "$GTK_FONT_NEW" ]; then
        sed -i "s/$GTK_FONT_NOW/$GTK_FONT_NEW/" $HOME/.config/gtk-3.0/settings.ini
        sed -i "s/\"$GTK_FONT_NOW\"/\"$GTK_FONT_NEW\"/" $HOME/.gtkrc-2.0
    fi
    
#Xresources
if [ -f $HOME/.Xresources ]; then
    XRES_NOW="$(grep "Xft.dpi" $HOME/.Xresources)"
else
    XRES_NOW=95
fi

XRES_NEW=$(echo "${override[7]}")
XRES_NEW="Xft.dpi: $XRES_NEW"

if [ "$XRES_NOW" != "$XRES_NEW" ]; then
    if [ -f $HOME/.Xresources ]; then
        sed -i "s/$XRES_NOW/$XRES_NEW/" $HOME/.Xresources
    else
        printf "$XRES_NEW" > $HOME/.Xresources
    fi
    xrdb ~/.Xresources
fi

#gtk-xft-antialias
GTK_ANTI_NOW="$(grep "gtk-xft-antialias" $HOME/.config/gtk-3.0/settings.ini)"
GTK_ANTI_NEW=$(echo "${override[10]}")

    if [ "$GTK_ANTI_NEW" = TRUE ]; then
        GTK_ANTI_NEW=1
    elif [ "$GTK_ANTI_NEW" = FALSE ]; then
        GTK_ANTI_NEW=0
    fi

GTK_ANTI_NEW="gtk-xft-antialias=$GTK_ANTI_NEW"

    if [ "$GTK_ANTI_NOW" != "$GTK_ANTI_NEW" ]; then
        sed -i "s/$GTK_ANTI_NOW/$GTK_ANTI_NEW/" $HOME/.config/gtk-3.0/settings.ini
        sed -i "s/$GTK_ANTI_NOW/$GTK_ANTI_NEW/" $HOME/.gtkrc-2.0
        RELOAD_GTK=TRUE
    fi

#gtk-xft-hinting
GTK_HINT_NOW="$(grep "gtk-xft-hinting" $HOME/.config/gtk-3.0/settings.ini)"
GTK_HINT_NEW=$(echo "${override[8]}")

    if [ "$GTK_HINT_NEW" = TRUE ]; then
        GTK_HINT_NEW=1
    elif [ "$GTK_HINT_NEW" = FALSE ]; then
        GTK_HINT_NEW=0
    fi

GTK_HINT_NEW=gtk-xft-hinting=$GTK_HINT_NEW

    if [ "$GTK_HINT_NOW" != "$GTK_HINT_NEW" ]; then
        sed -i "s/$GTK_HINT_NOW/$GTK_HINT_NEW/" $HOME/.config/gtk-3.0/settings.ini
        sed -i "s/$GTK_HINT_NOW/$GTK_HINT_NEW/" $HOME/.gtkrc-2.0
        RELOAD_GTK=TRUE
    fi


GTK_HINTSTYLE_NOW="$(grep "gtk-xft-hintstyle" $HOME/.config/gtk-3.0/settings.ini)"
GTK_HINTSTYLE_NOW2="$(grep "gtk-xft-hintstyle" $HOME/.gtkrc-2.0)"
GTK_HINTSTYLE_NEW=$(echo "${override[9]}" | sed -e "s/-/ /g")
GTK_HINTSTYLE_NEW1=gtk-xft-hintstyle=hint$GTK_HINTSTYLE_NEW
GTK_HINTSTYLE_NEW2=gtk-xft-hintstyle='"'hint$GTK_HINTSTYLE_NEW'"'

    if [ "$GTK_HINTSTYLE_NOW" != "$GTK_HINTSTYLE_NEW" ]; then
        sed -i "s/$GTK_HINTSTYLE_NOW/$GTK_HINTSTYLE_NEW1/" $HOME/.config/gtk-3.0/settings.ini
        sed -i "s/$GTK_HINTSTYLE_NOW2/$GTK_HINTSTYLE_NEW2/" $HOME/.gtkrc-2.0
        RELOAD_GTK=TRUE
    fi


####
    if [ "$RELOAD_GTK" = "TRUE" ]; then
        theme=$(gsettings get org.gnome.desktop.interface gtk-theme)
        gsettings set org.gnome.desktop.interface gtk-theme ''
        sleep 1
        gsettings set org.gnome.desktop.interface gtk-theme $theme
    fi


    fluxbox-remote reloadstyle ; fluxbox-remote reconfigure

;;

esac

}


export -f choose_font

####

while [ "$WAIT" != "1" ]; do
    choose_font
done


exit
